lib/import: simplify logic arround merged_attribute
It fixes a bug when a merged attribute is not present in the existing record.
This commit is contained in:
parent
5ecff42816
commit
5b0150f6ad
20
lib/import
20
lib/import
|
@ -54,7 +54,7 @@ class MyLDIFParser(ldif.LDIFParser):
|
|||
self.entries.append((dn, lower_keys(entry)))
|
||||
|
||||
args = parser.parse_args()
|
||||
args.merged_attribute = map(str.lower, args.merged_attribute)
|
||||
args.merged_attribute = set(map(str.lower, args.merged_attribute))
|
||||
|
||||
# Array to store futures adds and modifies
|
||||
adds = []
|
||||
|
@ -71,16 +71,16 @@ for ldif_path in args.ldifs:
|
|||
result = conn.search_s(dn, ldap.SCOPE_BASE)
|
||||
old_attrs = lower_keys(result[0][1])
|
||||
new_attrs = {}
|
||||
# keep attributes to merge that are unchanged
|
||||
for key in args.merged_attribute:
|
||||
if key not in attrs:
|
||||
new_attrs[key] = old_attrs[key]
|
||||
for key in attrs:
|
||||
# merge attributes with their old value
|
||||
# new keys are keys from source + keys from merged_attribute
|
||||
for key in set(attrs.keys()) | args.merged_attribute:
|
||||
values = set()
|
||||
# merge attributes with their old value if key is in merged_attribute
|
||||
if key in args.merged_attribute:
|
||||
new_attrs[key] = list(set(old_attrs[key])|set(attrs[key]))
|
||||
else:
|
||||
new_attrs[key] = attrs[key]
|
||||
values |= set(old_attrs.get(key, []))
|
||||
# add new values
|
||||
values |= set(attrs.get(key, []))
|
||||
# flatten to list for python-ldap
|
||||
new_attrs[key] = list(values)
|
||||
modlist = []
|
||||
for key in old_attrs:
|
||||
if key not in new_attrs:
|
||||
|
|
Reference in New Issue