Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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