From 5e7347647516660603dddeedcf570d0cfef27b1a Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Sun, 22 Jan 2017 13:18:00 +0100 Subject: sync: define project keys default values Costs less than checking for it in each loop iteration and does no harm later to loop on empty lists. --- backend/lib/sync.py | 64 +++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/backend/lib/sync.py b/backend/lib/sync.py index 5e8240d..0aab3bc 100644 --- a/backend/lib/sync.py +++ b/backend/lib/sync.py @@ -28,7 +28,10 @@ def get_project_data(): if proj_elem.tag.lower() != 'project': print("Skipping unknown subtag <%s>" % proj_elem.tag) continue - proj = {} + proj = { + 'members': [], + 'subprojects': [], + } for elem in proj_elem: tag = elem.tag.lower() if tag in ['email']: @@ -46,14 +49,11 @@ def get_project_data(): if member_tag in ['name', 'role']: member[member_tag] = member_elem.text if 'email' in member: - if 'members' not in proj: - proj['members'] = [] proj['members'].append(member) elif tag == 'subproject': if 'ref' in elem.attrib: - if 'subprojects' not in proj: - proj['subprojects'] = [] - # subprojects will be a list of (subproject_email, inherit-members) tuples where inherit-members is True or False. TODO: Might change if sync code will want it differently + # subprojects will be a list of (subproject_email, inherit-members) tuples where inherit-members is True or False. + # TODO: Might change if sync code will want it differently proj['subprojects'].append((elem.attrib['ref'].lower(), True if ('inherit-members' in elem.attrib and elem.attrib['inherit-members'] == '1') else False)) else: print("Invalid tag inside project %s - required 'ref' attribute missing" % proj['email'] if 'email' in proj else "") @@ -86,32 +86,34 @@ def sync_projects(): new_maintainer = Maintainer(email=email, is_project=True, description=data['description'], name=data['name'], url=data['url']) db.session.add(new_maintainer) existing_maintainers[email] = new_maintainer + members = [] - if 'subprojects' in data: - for subproject_email, inherit_members in data['subprojects']: - # TODO: How should we handle inherit_members? - if subproject_email in existing_maintainers: - members.append(existing_maintainers[subproject_email]) - else: - print("Creating new project entry for subproject: %s" % subproject_email) - new_subproject = Maintainer(email=subproject_email, is_project=True) - db.session.add(new_subproject) - existing_maintainers[subproject_email] = new_subproject - members.append(new_subproject) - if 'members' in data: - for member in data['members']: - if member['email'] in existing_maintainers: - # TODO: Stop overwriting the name from master data, if/once we have a proper sync source for individual maintainers (Gentoo LDAP?) - if 'name' in member: - existing_maintainers[member['email']].name = member['name'] - members.append(existing_maintainers[member['email']]) - else: - print("Adding individual maintainer %s" % member['email']) - new_maintainer = Maintainer(email=member['email'], is_project=False, name=member['name'] if 'name' in member else None) - db.session.add(new_maintainer) - existing_maintainers[member['email']] = new_maintainer - members.append(new_maintainer) - # TODO: Include role information in the association? + + for subproject_email, inherit_members in data['subprojects']: + # TODO: How should we handle inherit_members? + if subproject_email in existing_maintainers: + members.append(existing_maintainers[subproject_email]) + else: + print("Creating new project entry for subproject: %s" % subproject_email) + new_subproject = Maintainer(email=subproject_email, is_project=True) + db.session.add(new_subproject) + existing_maintainers[subproject_email] = new_subproject + members.append(new_subproject) + + for member in data['members']: + if member['email'] in existing_maintainers: + # TODO: Stop overwriting the name from master data, if/once we have a proper sync source for individual maintainers (Gentoo LDAP?) + if 'name' in member: + existing_maintainers[member['email']].name = member['name'] + members.append(existing_maintainers[member['email']]) + else: + print("Adding individual maintainer %s" % member['email']) + new_maintainer = Maintainer(email=member['email'], is_project=False, name=member['name'] if 'name' in member else None) + db.session.add(new_maintainer) + existing_maintainers[member['email']] = new_maintainer + members.append(new_maintainer) + + # TODO: Include role information in the association? existing_maintainers[email].members = members db.session.commit() -- cgit v1.2.3-65-gdbad