def __get_release_data_no_environment(self, project, item_list): if project is not None: project_ids = [project.id] else: project_ids = list(ReleaseProject.objects.filter(release__in=item_list).values_list( 'project_id', flat=True ).distinct()) first_seen = {} last_seen = {} tvs = tagstore.get_release_tags(project_ids, environment_id=None, versions=[o.version for o in item_list]) for tv in tvs: first_val = first_seen.get(tv.value) last_val = last_seen.get(tv.value) first_seen[tv.value] = min(tv.first_seen, first_val) if first_val else tv.first_seen last_seen[tv.value] = max(tv.last_seen, last_val) if last_val else tv.last_seen if project is not None: group_counts_by_release = dict( ReleaseProject.objects.filter(project=project, release__in=item_list) .values_list('release_id', 'new_groups') ) else: # assume it should be a sum across release # if no particular project specified group_counts_by_release = dict( ReleaseProject.objects.filter(release__in=item_list, new_groups__isnull=False) .values('release_id').annotate(new_groups=Sum('new_groups')) .values_list('release_id', 'new_groups') ) return first_seen, last_seen, group_counts_by_release
def __get_release_data_no_environment(self, project, item_list): if project is not None: project_ids = [project.id] specialized = True else: project_ids, specialized = self.__get_project_id_list(item_list) first_seen = {} last_seen = {} tvs = tagstore.get_release_tags( project_ids, environment_id=None, versions=[o.version for o in item_list] ) for tv in tvs: first_val = first_seen.get(tv.value) last_val = last_seen.get(tv.value) first_seen[tv.value] = min(tv.first_seen, first_val) if first_val else tv.first_seen last_seen[tv.value] = max(tv.last_seen, last_val) if last_val else tv.last_seen group_counts_by_release = {} if project is not None: for release_id, new_groups in ReleaseProject.objects.filter( project=project, release__in=item_list ).values_list("release_id", "new_groups"): group_counts_by_release[release_id] = {project.id: new_groups} else: for project_id, release_id, new_groups in ReleaseProject.objects.filter( release__in=item_list, new_groups__isnull=False ).values_list("project_id", "release_id", "new_groups"): group_counts_by_release.setdefault(release_id, {})[project_id] = new_groups return first_seen, last_seen, group_counts_by_release
def get_attrs(self, item_list, user, *args, **kwargs): project = kwargs.get('project') if project: project_ids = [project.id] else: project_ids = list( ReleaseProject.objects.filter( release__in=item_list).values_list('project_id', flat=True).distinct()) tags = {} tvs = tagstore.get_release_tags( project_ids, environment_id=None, versions=[o.version for o in item_list]) for tv in tvs: val = tags.get(tv.value) tags[tv.value] = { 'first_seen': min(tv.first_seen, val['first_seen']) if val else tv.first_seen, 'last_seen': max(tv.last_seen, val['last_seen']) if val else tv.last_seen } owners = { d['id']: d for d in serialize(set( i.owner for i in item_list if i.owner_id), user) } if project: group_counts_by_release = dict( ReleaseProject.objects.filter( project=project, release__in=item_list).values_list('release_id', 'new_groups')) else: # assume it should be a sum across release # if no particular project specified group_counts_by_release = dict( ReleaseProject.objects.filter( release__in=item_list, new_groups__isnull=False).values('release_id').annotate( new_groups=Sum('new_groups')).values_list( 'release_id', 'new_groups')) release_metadata_attrs = self._get_commit_metadata(item_list, user) deploy_metadata_attrs = self._get_deploy_metadata(item_list, user) release_projects = defaultdict(list) project_releases = ReleaseProject.objects.filter( release__in=item_list).values('release_id', 'project__slug', 'project__name') for pr in project_releases: release_projects[pr['release_id']].append({ 'slug': pr['project__slug'], 'name': pr['project__name'], }) result = {} for item in item_list: result[item] = { 'tag': tags.get(item.version), 'owner': owners[six.text_type(item.owner_id)] if item.owner_id else None, 'new_groups': group_counts_by_release.get(item.id) or 0, 'projects': release_projects.get(item.id, []) } result[item].update(release_metadata_attrs[item]) result[item].update(deploy_metadata_attrs[item]) return result