diff --git a/repoapi/fixtures/test_model_queries.json b/repoapi/fixtures/test_model_queries.json index ed3c7f5..3528aa7 100644 --- a/repoapi/fixtures/test_model_queries.json +++ b/repoapi/fixtures/test_model_queries.json @@ -86,5 +86,27 @@ }, "model": "repoapi.jenkinsbuildinfo", "pk": 4 + }, + { + "fields": { + "buildnumber": 1, + "date": "2015-05-04T17:04:57.802Z", + "gerrit_change": null, + "gerrit_eventtype": null, + "gerrit_patchset": null, + "job_url": "https://jenkins.mgm.sipwise.com/job/release-update-deb-symlinks/", + "param_branch": null, + "param_distribution": "wheezy", + "param_ppa": null, + "param_release": "mr3.1-fake", + "param_tag": null, + "projectname": "release-update-deb-symlinks", + "jobname": "release-update-deb-symlinks", + "repo_name": null, + "result": "SUCCESS", + "tag": null + }, + "model": "repoapi.jenkinsbuildinfo", + "pk": 5 } ] \ No newline at end of file diff --git a/repoapi/models/jbi.py b/repoapi/models/jbi.py index ee43e9f..87d07c7 100644 --- a/repoapi/models/jbi.py +++ b/repoapi/models/jbi.py @@ -38,8 +38,9 @@ class JenkinsBuildInfoManager(models.Manager): res[project][uuid][job.jobname] = model_to_dict(job) # date is not editable... so not in the result res[project][uuid][job.jobname]['date'] = job.date - uuid = self.latest_uuid(release, project)['tag'] - res[project][uuid]['latest'] = True + uuid = self.latest_uuid(release, project) + if uuid: + res[project][uuid['tag']]['latest'] = True return res def releases(self, flat=True): @@ -51,7 +52,8 @@ class JenkinsBuildInfoManager(models.Manager): def release_projects(self, release, flat=True): res = self.get_queryset().filter( - param_release=release).values('projectname').distinct() + param_release=release, + tag__isnull=False).values('projectname').distinct() if flat: return res.values_list('projectname', flat=True) else: @@ -59,12 +61,16 @@ class JenkinsBuildInfoManager(models.Manager): def release_project_uuids_set(self, release, project): res = self.get_queryset().filter( - param_release=release, projectname=project).distinct() + param_release=release, + projectname=project, + tag__isnull=False).distinct() return res.order_by('projectname') def release_project_uuids(self, release, project, flat=True): res = self.get_queryset().filter( - param_release=release, projectname=project).distinct() + param_release=release, + projectname=project, + tag__isnull=False).distinct() if flat: return res.order_by('projectname').values_list('tag', flat=True) else: @@ -76,9 +82,13 @@ class JenkinsBuildInfoManager(models.Manager): def latest_uuid(self, release, project): qs = self.get_queryset() - latest_uuid = qs.filter( - param_release=release, projectname=project).latest('date') - return {'tag': latest_uuid.tag, 'date': latest_uuid.date} + res = qs.filter( + param_release=release, + projectname=project, + tag__isnull=False) + if res: + latest_uuid = res.latest('date') + return {'tag': latest_uuid.tag, 'date': latest_uuid.date} class JenkinsBuildInfo(models.Model):