Skip to content
Snippets Groups Projects
Commit 77a07c89 authored by Samuel GAIST's avatar Samuel GAIST Committed by Samuel GAIST
Browse files

[common][api] Pre-commit cleanup

parent c5e43fca
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !327. Comments created here will be created in the context of that merge request.
...@@ -37,8 +37,14 @@ from .responses import BadRequestResponse, ForbiddenResponse ...@@ -37,8 +37,14 @@ from .responses import BadRequestResponse, ForbiddenResponse
from .models import Contribution, Versionable from .models import Contribution, Versionable
from .permissions import IsAuthor from .permissions import IsAuthor
from .exceptions import ShareError, BaseCreationError from .exceptions import ShareError, BaseCreationError
from .serializers import SharingSerializer, ContributionSerializer, CheckNameSerializer, DiffSerializer from .serializers import (
SharingSerializer,
ContributionSerializer,
CheckNameSerializer,
DiffSerializer,
)
from .mixins import CommonContextMixin, SerializerFieldsMixin, IsAuthorOrReadOnlyMixin from .mixins import CommonContextMixin, SerializerFieldsMixin, IsAuthorOrReadOnlyMixin
from .utils import py3_cmp
from . import is_true from . import is_true
...@@ -49,7 +55,7 @@ class CheckContributionNameView(CommonContextMixin, generics.CreateAPIView): ...@@ -49,7 +55,7 @@ class CheckContributionNameView(CommonContextMixin, generics.CreateAPIView):
def get_serializer_context(self): def get_serializer_context(self):
context = super(CheckContributionNameView, self).get_serializer_context() context = super(CheckContributionNameView, self).get_serializer_context()
context['model'] = self.model context["model"] = self.model
return context return context
def post(self, request): def post(self, request):
...@@ -63,17 +69,19 @@ class ShareView(CommonContextMixin, generics.CreateAPIView): ...@@ -63,17 +69,19 @@ class ShareView(CommonContextMixin, generics.CreateAPIView):
serializer_class = SharingSerializer serializer_class = SharingSerializer
def get_queryset(self): def get_queryset(self):
author_name = self.kwargs.get('author_name') author_name = self.kwargs.get("author_name")
object_name = self.kwargs.get('object_name') object_name = self.kwargs.get("object_name")
version = self.kwargs.get('version') version = self.kwargs.get("version")
return get_object_or_404(self.model, return get_object_or_404(
author__username__iexact=author_name, self.model,
name__iexact=object_name, author__username__iexact=author_name,
version=version) name__iexact=object_name,
version=version,
)
def do_share(self, obj, data): def do_share(self, obj, data):
users = data.get('users', None) users = data.get("users", None)
teams = data.get('teams', None) teams = data.get("teams", None)
obj.share(users=users, teams=teams) obj.share(users=users, teams=teams)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
...@@ -93,7 +101,9 @@ class ShareView(CommonContextMixin, generics.CreateAPIView): ...@@ -93,7 +101,9 @@ class ShareView(CommonContextMixin, generics.CreateAPIView):
return Response(object_db.sharing_preferences()) return Response(object_db.sharing_preferences())
class ListContributionView(CommonContextMixin, SerializerFieldsMixin, generics.ListAPIView): class ListContributionView(
CommonContextMixin, SerializerFieldsMixin, generics.ListAPIView
):
model = Contribution model = Contribution
serializer_class = ContributionSerializer serializer_class = ContributionSerializer
permission_classes = [permissions.AllowAny] permission_classes = [permissions.AllowAny]
...@@ -103,33 +113,42 @@ class ListContributionView(CommonContextMixin, SerializerFieldsMixin, generics.L ...@@ -103,33 +113,42 @@ class ListContributionView(CommonContextMixin, SerializerFieldsMixin, generics.L
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
fields_to_return = self.get_serializer_fields(request) fields_to_return = self.get_serializer_fields(request)
limit_to_latest_versions = is_true(request.query_params.get('latest_versions', False)) limit_to_latest_versions = is_true(
request.query_params.get("latest_versions", False)
)
all_contributions = self.get_queryset().select_related() all_contributions = self.get_queryset().select_related()
if hasattr(self.model, 'author'): if hasattr(self.model, "author"):
all_contributions = all_contributions.order_by('author__username', 'name', '-version') all_contributions = all_contributions.order_by(
"author__username", "name", "-version"
)
else: else:
all_contributions = all_contributions.order_by('name', '-version') all_contributions = all_contributions.order_by("name", "-version")
if limit_to_latest_versions: if limit_to_latest_versions:
all_contributions = self.model.filter_latest_versions(all_contributions) all_contributions = self.model.filter_latest_versions(all_contributions)
# Sort the data formats and sends the response # Sort the data formats and sends the response
all_contributions.sort(lambda x, y: cmp(x.fullname(), y.fullname())) all_contributions.sort(lambda x, y: py3_cmp(x.fullname(), y.fullname()))
serializer = self.get_serializer(all_contributions, many=True, fields=fields_to_return) serializer = self.get_serializer(
all_contributions, many=True, fields=fields_to_return
)
return Response(serializer.data) return Response(serializer.data)
class ListCreateBaseView(CommonContextMixin, SerializerFieldsMixin, generics.ListCreateAPIView): class ListCreateBaseView(
CommonContextMixin, SerializerFieldsMixin, generics.ListCreateAPIView
):
def get_serializer(self, *args, **kwargs): def get_serializer(self, *args, **kwargs):
if self.request.method == 'POST': if self.request.method == "POST":
self.serializer_class = self.writing_serializer_class self.serializer_class = self.writing_serializer_class
return super(ListCreateBaseView, self).get_serializer(*args, **kwargs) return super(ListCreateBaseView, self).get_serializer(*args, **kwargs)
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
fields_to_return = self.get_serializer_fields(request) fields_to_return = self.get_serializer_fields(request)
limit_to_latest_versions = is_true(request.query_params.get('latest_versions', False)) limit_to_latest_versions = is_true(
request.query_params.get("latest_versions", False)
)
objects = self.get_queryset().select_related() objects = self.get_queryset().select_related()
...@@ -143,7 +162,7 @@ class ListCreateBaseView(CommonContextMixin, SerializerFieldsMixin, generics.Lis ...@@ -143,7 +162,7 @@ class ListCreateBaseView(CommonContextMixin, SerializerFieldsMixin, generics.Lis
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
if serializer.is_valid(): if serializer.is_valid():
try: try:
if hasattr(self.model, 'author'): if hasattr(self.model, "author"):
db_object = serializer.save(author=request.user) db_object = serializer.save(author=request.user)
else: else:
db_object = serializer.save() db_object = serializer.save()
...@@ -157,22 +176,25 @@ class ListCreateBaseView(CommonContextMixin, SerializerFieldsMixin, generics.Lis ...@@ -157,22 +176,25 @@ class ListCreateBaseView(CommonContextMixin, SerializerFieldsMixin, generics.Lis
html_view_args.insert(0, db_object.author.username) html_view_args.insert(0, db_object.author.username)
result = { result = {
'name': db_object.name, "name": db_object.name,
'full_name': db_object.fullname(), "full_name": db_object.fullname(),
'url': reverse('{}:all'.format(self.namespace)) + db_object.fullname() + '/', "url": reverse("{}:all".format(self.namespace))
'object_view': reverse('{}:view'.format(self.namespace.split('_')[1]), args=html_view_args), + db_object.fullname()
+ "/",
"object_view": reverse(
"{}:view".format(self.namespace.split("_")[1]), args=html_view_args
),
} }
response = Response(result, status=201) response = Response(result, status=201)
response['Location'] = result['url'] response["Location"] = result["url"]
return response return response
class ListCreateContributionView(IsAuthorOrReadOnlyMixin, ListCreateBaseView): class ListCreateContributionView(IsAuthorOrReadOnlyMixin, ListCreateBaseView):
def get_queryset(self): def get_queryset(self):
user = self.request.user user = self.request.user
author_name = self.kwargs.get('author_name') author_name = self.kwargs.get("author_name")
return self.model.objects.from_author_and_public(user, author_name) return self.model.objects.from_author_and_public(user, author_name)
...@@ -183,19 +205,22 @@ class DiffView(generics.RetrieveAPIView): ...@@ -183,19 +205,22 @@ class DiffView(generics.RetrieveAPIView):
def get(self, request, author1, name1, version1, author2, name2, version2): def get(self, request, author1, name1, version1, author2, name2, version2):
# Retrieve the objects # Retrieve the objects
try: try:
object1 = self.model.objects.get(author__username__iexact=author1, object1 = self.model.objects.get(
name__iexact=name1, author__username__iexact=author1,
version=int(version1)) name__iexact=name1,
except: version=int(version1),
return Response('%s/%s/%s' % (author1, name1, version1), status=404) )
except Exception:
return Response("%s/%s/%s" % (author1, name1, version1), status=404)
try: try:
object2 = self.model.objects.get(author__username__iexact=author2, object2 = self.model.objects.get(
name__iexact=name2, author__username__iexact=author2,
version=int(version2)) name__iexact=name2,
except: version=int(version2),
return Response('%s/%s/%s' % (author2, name2, version2), status=404) )
except Exception:
return Response("%s/%s/%s" % (author2, name2, version2), status=404)
# Check that the user can access them # Check that the user can access them
accessibility = object1.accessibility_for(request.user) accessibility = object1.accessibility_for(request.user)
...@@ -207,27 +232,39 @@ class DiffView(generics.RetrieveAPIView): ...@@ -207,27 +232,39 @@ class DiffView(generics.RetrieveAPIView):
return ForbiddenResponse(object2.fullname()) return ForbiddenResponse(object2.fullname())
# Compute the diff # Compute the diff
serializer = self.get_serializer({'object1': object1, serializer = self.get_serializer({"object1": object1, "object2": object2})
'object2': object2})
return Response(serializer.data) return Response(serializer.data)
class RetrieveUpdateDestroyContributionView(CommonContextMixin, SerializerFieldsMixin, IsAuthorOrReadOnlyMixin, generics.RetrieveUpdateDestroyAPIView): class RetrieveUpdateDestroyContributionView(
CommonContextMixin,
SerializerFieldsMixin,
IsAuthorOrReadOnlyMixin,
generics.RetrieveUpdateDestroyAPIView,
):
model = Contribution model = Contribution
def get_queryset(self): def get_queryset(self):
version = self.kwargs.get('version', None) version = self.kwargs.get("version", None)
author_name = self.kwargs.get('author_name') author_name = self.kwargs.get("author_name")
object_name = self.kwargs.get('object_name') object_name = self.kwargs.get("object_name")
user = self.request.user user = self.request.user
if version is not None: if version is not None:
queryset = self.model.objects.for_user(user, True).filter(author__username__iexact=author_name, queryset = (
name__iexact=object_name, self.model.objects.for_user(user, True)
version__gte=version)\ .filter(
.order_by('version') author__username__iexact=author_name,
name__iexact=object_name,
version__gte=version,
)
.order_by("version")
)
else: else:
queryset = self.model.objects.for_user(user, True).filter(author__username__iexact=author_name, queryset = (
name__iexact=object_name).order_by('-version') self.model.objects.for_user(user, True)
.filter(author__username__iexact=author_name, name__iexact=object_name)
.order_by("-version")
)
return queryset return queryset
...@@ -237,40 +274,47 @@ class RetrieveUpdateDestroyContributionView(CommonContextMixin, SerializerFields ...@@ -237,40 +274,47 @@ class RetrieveUpdateDestroyContributionView(CommonContextMixin, SerializerFields
if db_objects.count() == 0: if db_objects.count() == 0:
return Response(status=404) return Response(status=404)
db_object = db_objects[0] db_object = db_objects[0]
version = int(self.kwargs.get('version', -1)) version = int(self.kwargs.get("version", -1))
if version != -1 and db_object.version != version: if version != -1 and db_object.version != version:
return Response(status=404) return Response(status=404)
# Process the query string # Process the query string
allow_sharing = hasattr(db_object, 'author') and (request.user == db_object.author) allow_sharing = hasattr(db_object, "author") and (
request.user == db_object.author
)
fields_to_return = self.get_serializer_fields(request, allow_sharing=allow_sharing) fields_to_return = self.get_serializer_fields(
request, allow_sharing=allow_sharing
)
serializer = self.get_serializer(db_object, fields=fields_to_return) serializer = self.get_serializer(db_object, fields=fields_to_return)
return Response(serializer.data) return Response(serializer.data)
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
author_name = self.kwargs.get('author_name') author_name = self.kwargs.get("author_name")
object_name = self.kwargs.get('object_name') object_name = self.kwargs.get("object_name")
version = self.kwargs.get('version', None) version = self.kwargs.get("version", None)
# Retrieve the object # Retrieve the object
if version is None: if version is None:
return BadRequestResponse('A version number must be provided') return BadRequestResponse("A version number must be provided")
db_object = get_object_or_404(self.model, db_object = get_object_or_404(
author__username__iexact=author_name, self.model,
name__iexact=object_name, author__username__iexact=author_name,
version=version) name__iexact=object_name,
version=version,
)
# Check that the object can be deleted # Check that the object can be deleted
if not(db_object.deletable()): if not (db_object.deletable()):
return ForbiddenResponse("The {} can't be deleted anymore (needed by an attestation, an algorithm or another data format)".format(db_object.model_name())) return ForbiddenResponse(
"The {} can't be deleted anymore (needed by an attestation, an algorithm or another data format)".format(
db_object.model_name()
)
)
# Deletion of the object # Deletion of the object
db_object.delete() db_object.delete()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment