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:
Benjamin Dauvergne 2016-03-18 12:05:36 +01:00
parent 5ecff42816
commit 5b0150f6ad
1 changed files with 10 additions and 10 deletions

View File

@ -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: