mirror of https://github.com/sipwise/repoapi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.2 KiB
130 lines
4.2 KiB
# Copyright (C) 2015 The Sipwise Team - http://sipwise.com
|
|
|
|
# This program is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the Free
|
|
# Software Foundation, either version 3 of the License, or (at your option)
|
|
# any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
# more details.
|
|
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
from rest_framework import generics
|
|
from rest_framework.decorators import api_view, renderer_classes
|
|
from rest_framework.response import Response
|
|
from rest_framework.reverse import reverse
|
|
from rest_framework.views import APIView
|
|
from rest_framework.schemas import SchemaGenerator
|
|
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer
|
|
import django_filters
|
|
from . import serializers
|
|
from .models import JenkinsBuildInfo as jbi
|
|
|
|
|
|
@api_view()
|
|
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
|
|
def schema_view(request):
|
|
generator = SchemaGenerator()
|
|
return Response(generator.get_schema(request=request))
|
|
|
|
|
|
@api_view(('GET',))
|
|
def api_root(request, _format=None):
|
|
return Response({
|
|
'jenkinsbuildinfo': reverse('jenkinsbuildinfo-list',
|
|
request=request, format=_format),
|
|
'release': reverse('release-list',
|
|
request=request, format=_format),
|
|
'build': reverse('build:list',
|
|
request=request, format=_format),
|
|
})
|
|
|
|
|
|
class JenkinsBuildInfoFilter(django_filters.FilterSet):
|
|
|
|
class Meta:
|
|
model = jbi
|
|
fields = ['tag', 'projectname', 'jobname', 'param_release', 'date']
|
|
order_by = ['-date', ]
|
|
|
|
|
|
class JenkinsBuildInfoList(generics.ListCreateAPIView):
|
|
queryset = jbi.objects.all()
|
|
serializer_class = serializers.JenkinsBuildInfoSerializer
|
|
filter_class = JenkinsBuildInfoFilter
|
|
|
|
|
|
class JenkinsBuildInfoDetail(generics.RetrieveUpdateDestroyAPIView):
|
|
queryset = jbi.objects.all()
|
|
serializer_class = serializers.JenkinsBuildInfoSerializer
|
|
|
|
|
|
class ReleaseList(APIView):
|
|
|
|
def get(self, request, _format=None):
|
|
releases = jbi.objects.releases(flat=False)
|
|
for release in releases:
|
|
release['url'] = reverse(
|
|
'project-list',
|
|
args=[release['param_release']],
|
|
request=request)
|
|
return Response(releases)
|
|
|
|
|
|
class ProjectList(APIView):
|
|
|
|
def get(self, request, release, _format=None):
|
|
projects = jbi.objects.release_projects(
|
|
release, flat=False)
|
|
for project in projects:
|
|
project['url'] = reverse(
|
|
'projectuuid-list',
|
|
args=[release, project['projectname']],
|
|
request=request)
|
|
return Response(projects)
|
|
|
|
|
|
class ProjectFullList(APIView):
|
|
|
|
def get(self, request, release, _format=None):
|
|
projects = jbi.objects.release_projects_full(release)
|
|
return Response(projects)
|
|
|
|
|
|
class ProjectUUIDList(APIView):
|
|
|
|
def get(self, request, release, project, _format=None):
|
|
uuids = jbi.objects.release_project_uuids(
|
|
release, project, flat=False)
|
|
latest = jbi.objects.latest_uuid(release, project)
|
|
for uuid in uuids:
|
|
uuid['url'] = reverse(
|
|
'uuidinfo-list',
|
|
args=[release, project, uuid['tag']],
|
|
request=request)
|
|
uuid['latest'] = (uuid['tag'] == latest['tag'])
|
|
return Response(uuids)
|
|
|
|
|
|
class UUIDInfoList(APIView):
|
|
|
|
def get(self, request, release, project, uuid, _format=None):
|
|
res = list()
|
|
jbis = serializers.JenkinsBuildInfoSerializer
|
|
jobs = jbi.objects.jobs_by_uuid(release, project, uuid)
|
|
for job in jobs:
|
|
serializer = jbis(job, context={'request': request})
|
|
res.append(serializer.data)
|
|
return Response(res)
|
|
|
|
|
|
class LatestUUID(APIView):
|
|
|
|
def get(self, request, release, project, _format=None):
|
|
res = jbi.objects.latest_uuid(release, project)
|
|
return Response(res)
|