def api_source_version_architecture(request, name, version, architecture):
source = get_object_or_404(Source, name=name)
if not source.buildinfos.filter(version=version).exists():
raise Http404()
qs = Submission.objects.filter(
buildinfo__version=version,
buildinfo__source_id=source,
buildinfo__architecture__name=architecture,
).select_related(
'key',
'buildinfo',
'buildinfo__architecture',
'buildinfo__source',
).only(
'slug',
'buildinfo__sha1',
'buildinfo__version',
'buildinfo__source__name',
'buildinfo__architecture__name',
'key__name',
'key__uid',
'created',
).order_by()
if 'key__uid' in request.GET:
qs = qs.filter(key__uid__in=request.GET.getlist('key__uid'))
grouped = groupby(
sorted(qs, key=lambda x: (x.buildinfo.sha1, x.created)),
lambda x: x.buildinfo.sha1,
lambda x: x.created,
)
by_sha1 = [
{
'uri': '{}{}'.format(
settings.SITE_URL,
xs[0].get_absolute_url(),
),
'sha1': sha1,
'submissions': [{
'key': {
'uid': x.key.uid,
'name': x.key.name,
},
'created': x.created,
} for x in xs],
}
for sha1, xs in grouped
]
return JsonResponse({'by_sha1': by_sha1})