Exemple #1
0
 def _flatten_projects(self):
     flatten = {}
     rid2projects = {}
     for pid, detail in self.projects.items():
         flatten[pid] = {
             'name': pid,
             'aname': pid,
             'meta-ref': detail.get('meta-ref'),
             'refs': [],
             'description': detail.get('description'),
             'logo': detail.get('logo'),
             'bots-group': detail.get('bots-group'),
             'releases': detail.get('releases', []),
         }
         for release in flatten[pid]['releases']:
             release['date'] = date2epoch(release['date'])
         for rid, repo in detail['repos'].items():
             for branch in repo['branches']:
                 r = {}
                 r.update(copy.deepcopy(repo))
                 r['name'] = rid
                 r['aname'] = rid
                 r['branch'] = branch
                 del r['branches']
                 r['fullrid'] = "%s:%s:%s" % (r['uri'], r['name'],
                                              r['branch'])
                 r['shortrid'] = "%s:%s" % (r['uri'], r['name'])
                 flatten[pid]['refs'].append(r)
                 rid2projects.setdefault(r['fullrid'], {'project': []})
                 if pid not in rid2projects[r['fullrid']]['project']:
                     rid2projects[r['fullrid']]['project'].append(pid)
     return flatten, rid2projects
Exemple #2
0
 def _flatten_projects(self):
     flatten = {}
     rid2projects = {}
     for pid, detail in self.projects.items():
         flatten[pid] = {
             'name': pid,
             'aname': pid,
             'meta-ref': detail.get('meta-ref'),
             'refs': [],
             'description': detail.get('description'),
             'logo': detail.get('logo'),
             'bots-group': detail.get('bots-group'),
             'releases': detail.get('releases', []),
         }
         for release in flatten[pid]['releases']:
             release['date'] = date2epoch(release['date'])
         for rid, repo in detail['repos'].items():
             for branch in repo['branches']:
                 r = {}
                 r.update(copy.deepcopy(repo))
                 r['name'] = rid
                 r['aname'] = rid
                 r['branch'] = branch
                 del r['branches']
                 r['fullrid'] = "%s:%s:%s" % (
                     r['uri'], r['name'], r['branch'])
                 r['shortrid'] = "%s:%s" % (r['uri'], r['name'])
                 flatten[pid]['refs'].append(r)
                 rid2projects.setdefault(r['fullrid'], {'project': []})
                 if pid not in rid2projects[r['fullrid']]['project']:
                     rid2projects[r['fullrid']]['project'].append(pid)
     return flatten, rid2projects
Exemple #3
0
 def _enrich_projects(self):
     if self.enriched:
         return  # cannot enrich twice
     # First resolve templates references
     for pid, detail in self.projects.items():
         for rid, repo in detail['repos'].items():
             # Save tags mentioned for a repo
             tags = []
             if 'tags' in repo and repo['tags']:
                 tags = copy.copy(repo['tags'])
             # Save branches mentioned for a repo
             branches = []
             if 'branches' in repo:
                 branches = copy.copy(repo['branches'])
             # Save paths mentioned for a repo
             paths = []
             if 'paths' in repo:
                 paths = copy.copy(repo['paths'])
             # Apply the template
             if 'template' in repo:
                 repo.update(copy.deepcopy(
                     self.templates[repo['template']]))
                 del repo['template']
             # Process uri and gitweb string
             for key in ('uri', 'gitweb'):
                 if key in repo:
                     repo[key] = repo[key] % {'name': rid}
             # Re-apply saved tags
             if 'tags' not in repo:
                 repo['tags'] = []
             repo['tags'].extend(tags)
             repo['tags'] = list(set(repo['tags']))
             # Restore defined branches at repo level
             if branches:
                 repo['branches'] = branches
             # Restore defined paths at repo level
             if paths:
                 repo['paths'] = paths
             # Apply default values
             if 'parsers' not in repo:
                 repo['parsers'] = []
             if 'releases' not in repo:
                 repo['releases'] = []
             # Transform date to epoch
             for release in repo['releases']:
                 release['date'] = date2epoch(release['date'])
             # Fill the lookup table for gitweb links
             if 'gitweb' in repo:
                 su = '%s:%s' % (repo['uri'], rid)
                 self.gitweb_lookup[su] = repo['gitweb']
     self.enriched = True
Exemple #4
0
 def _enrich_idents(self):
     """ Here we convert provided date to epoch
     """
     for iid, id_data in self.idents.items():
         for email, email_data in id_data['emails'].items():
             for group, data in email_data.get('groups', {}).items():
                 if not data:
                     continue
                 for key in ('begin-date', 'end-date'):
                     if key in data:
                         data[key] = date2epoch(data[key])
                     else:
                         data[key] = None
     self.enriched_idents = True
Exemple #5
0
 def _enrich_projects(self):
     for detail in list(self.projects.values()):
         if 'meta-ref' not in detail:
             detail['meta-ref'] = False
         for rid, repo in list(detail['repos'].items()):
             # Save tags mentioned for a repo
             tags = []
             if 'tags' in repo and repo['tags']:
                 tags = copy.copy(repo['tags'])
             # Save branches mentioned for a repo
             branches = []
             if 'branches' in repo:
                 branches = copy.copy(repo['branches'])
             # Save paths mentioned for a repo
             paths = []
             if 'paths' in repo:
                 paths = copy.copy(repo['paths'])
             # Apply the template
             if 'template' in repo:
                 repo.update(copy.deepcopy(
                     self.templates[repo['template']]))
                 del repo['template']
             # Process uri and gitweb string
             for key in ('uri', 'gitweb'):
                 if key in repo:
                     repo[key] = repo[key] % {'name': rid}
             # Re-apply saved tags
             if 'tags' not in repo:
                 repo['tags'] = []
             repo['tags'].extend(tags)
             repo['tags'] = list(set(repo['tags']))
             # Restore defined branches at repo level
             if branches:
                 repo['branches'] = branches
             # Restore defined paths at repo level
             if paths:
                 repo['paths'] = paths
             # Apply default values
             if 'parsers' not in repo:
                 repo['parsers'] = []
             if 'releases' not in repo:
                 repo['releases'] = []
             if 'index-tags' not in repo:
                 repo['index-tags'] = True
             # Transform date to epoch
             for release in repo['releases']:
                 release['date'] = date2epoch(release['date'])
Exemple #6
0
 def _enrich_projects(self):
     for detail in list(self.projects.values()):
         if 'meta-ref' not in detail:
             detail['meta-ref'] = False
         for rid, repo in list(detail['repos'].items()):
             # Save tags mentioned for a repo
             tags = []
             if 'tags' in repo and repo['tags']:
                 tags = copy.copy(repo['tags'])
             # Save branches mentioned for a repo
             branches = []
             if 'branches' in repo:
                 branches = copy.copy(repo['branches'])
             # Save paths mentioned for a repo
             paths = []
             if 'paths' in repo:
                 paths = copy.copy(repo['paths'])
             # Apply the template
             if 'template' in repo:
                 repo.update(copy.deepcopy(
                     self.templates[repo['template']]))
                 del repo['template']
             # Process uri and gitweb string
             for key in ('uri', 'gitweb'):
                 if key in repo:
                     repo[key] = repo[key] % {'name': rid}
             # Re-apply saved tags
             if 'tags' not in repo:
                 repo['tags'] = []
             repo['tags'].extend(tags)
             repo['tags'] = list(set(repo['tags']))
             # Restore defined branches at repo level
             if branches:
                 repo['branches'] = branches
             # Restore defined paths at repo level
             if paths:
                 repo['paths'] = paths
             # Apply default values
             if 'parsers' not in repo:
                 repo['parsers'] = []
             if 'releases' not in repo:
                 repo['releases'] = []
             if 'index-tags' not in repo:
                 repo['index-tags'] = True
             # Transform date to epoch
             for release in repo['releases']:
                 release['date'] = date2epoch(release['date'])
Exemple #7
0
    def _enrich_groups(self):
        """ Here we convert provided date to epoch and
        groups are also populated by idents defining
        an ownership to a group
        """
        def add_to_group(group, email, details):
            if group not in self.groups.keys():
                return
            self.groups[group]['emails'][email] = details

        for gid, groups in self.groups.items():
            for email, data in groups['emails'].items():
                if not data:
                    continue
                for key in ('begin-date', 'end-date'):
                    if key in data:
                        data[key] = date2epoch(data[key])
                    else:
                        data[key] = None
        # Here if the users elk backend is active we populate groups
        # by querying the users index
        if user_endpoint_active:
            for gid, groups in self.groups.items():
                idents = self._users.get_idents_in_group(gid)
                for ident in idents:
                    _, data = self.backend_convert_ident(ident)
                    for email, email_data in data['emails'].items():
                        for group, details in email_data.get(
                                'groups', {}).items():
                            if group == gid:
                                add_to_group(group, email, details)
        # If not regular yaml identities index is used
        else:
            for iid, id_data in self.idents.items():
                for email, email_data in id_data['emails'].items():
                    for group, details in email_data.get(
                            'groups', {}).items():
                        add_to_group(group, email, details)
        self.enriched_groups = True