From 443b9e50eb43b206b61d93586c574089e71e8f99 Mon Sep 17 00:00:00 2001
From: Samuel Gaist <samuel.gaist@idiap.ch>
Date: Wed, 22 Apr 2020 17:44:22 +0200
Subject: [PATCH] [toolchains][api] Pre-commit cleanup

---
 beat/web/toolchains/api.py | 155 ++++++++++++++++++++++---------------
 1 file changed, 93 insertions(+), 62 deletions(-)

diff --git a/beat/web/toolchains/api.py b/beat/web/toolchains/api.py
index 693af428e..564a6d749 100644
--- a/beat/web/toolchains/api.py
+++ b/beat/web/toolchains/api.py
@@ -37,8 +37,12 @@ from rest_framework import serializers
 from rest_framework.exceptions import PermissionDenied, ParseError
 
 from ..common.responses import BadRequestResponse
-from ..common.api import (CheckContributionNameView, ShareView,
-                          ListCreateContributionView, RetrieveUpdateDestroyContributionView)
+from ..common.api import (
+    CheckContributionNameView,
+    ShareView,
+    ListCreateContributionView,
+    RetrieveUpdateDestroyContributionView,
+)
 
 from .models import Toolchain
 from .serializers import ToolchainSerializer
@@ -52,7 +56,7 @@ from ..experiments.models import Experiment
 import beat.core.toolchain
 
 
-#----------------------------------------------------------
+# ----------------------------------------------------------
 
 
 class CheckToolchainNameView(CheckContributionNameView):
@@ -60,10 +64,11 @@ class CheckToolchainNameView(CheckContributionNameView):
     This view sanitizes a toolchain name and
     checks whether it is already used.
     """
+
     model = Toolchain
 
 
-#----------------------------------------------------------
+# ----------------------------------------------------------
 
 
 class ShareToolchainView(ShareView):
@@ -71,21 +76,23 @@ class ShareToolchainView(ShareView):
     This view allows to share a toolchain with
     other users and/or teams
     """
+
     model = Toolchain
 
 
-#----------------------------------------------------------
+# ----------------------------------------------------------
 
 
 class ListToolchainView(ListContributionView):
     """
     List all available toolchains
     """
+
     model = Toolchain
     serializer_class = ToolchainSerializer
 
 
-#----------------------------------------------------------
+# ----------------------------------------------------------
 
 
 class ListCreateToolchainsView(ListCreateContributionView):
@@ -93,122 +100,147 @@ class ListCreateToolchainsView(ListCreateContributionView):
     Read/Write end point that list the toolchains available
     from a given author and allows the creation of new toolchains
     """
+
     model = Toolchain
     serializer_class = ToolchainSerializer
     writing_serializer_class = ToolchainCreationSerializer
-    namespace = 'api_toolchains'
+    namespace = "api_toolchains"
 
 
-#----------------------------------------------------------
+# ----------------------------------------------------------
 
 
 class RetrieveUpdateDestroyToolchainsView(RetrieveUpdateDestroyContributionView):
     """
     Read/Write/Delete endpoint for a given toolchain
     """
+
     model = Toolchain
     serializer_class = FullToolchainSerializer
 
-
     def put(self, request, author_name, object_name, version=None):
         if version is None:
-            return BadRequestResponse('A version number must be provided')
+            return BadRequestResponse("A version number must be provided")
 
         try:
             data = request.data
         except ParseError as e:
-            raise serializers.ValidationError({'data': str(e)})
+            raise serializers.ValidationError({"data": str(e)})
         else:
             if not data:
-                raise serializers.ValidationError({'data': 'Empty'})
-
-
-        if 'short_description' in data:
-            if not(isinstance(data['short_description'], six.string_types)):
-                raise serializers.ValidationError({'short_description', 'Invalid short_description data'})
-            short_description = data['short_description']
+                raise serializers.ValidationError({"data": "Empty"})
+
+        if "short_description" in data:
+            if not (isinstance(data["short_description"], six.string_types)):
+                raise serializers.ValidationError(
+                    {"short_description", "Invalid short_description data"}
+                )
+            short_description = data["short_description"]
         else:
             short_description = None
 
-        if 'description' in data:
-            if not(isinstance(data['description'], six.string_types)):
-                raise serializers.ValidationError({'description': 'Invalid description data'})
-            description = data['description']
+        if "description" in data:
+            if not (isinstance(data["description"], six.string_types)):
+                raise serializers.ValidationError(
+                    {"description": "Invalid description data"}
+                )
+            description = data["description"]
             try:
                 validate_restructuredtext(description)
             except ValidationError as errors:
-                raise serializers.ValidationError({'description': [error for error in errors]})
+                raise serializers.ValidationError(
+                    {"description": [error for error in errors]}
+                )
         else:
             description = None
 
-        if 'strict' in data:
-            strict = data['strict']
+        if "strict" in data:
+            strict = data["strict"]
         else:
             strict = True
 
-        if 'declaration' in data:
-            if isinstance(data['declaration'], dict):
-                json_declaration = data['declaration']
+        if "declaration" in data:
+            if isinstance(data["declaration"], dict):
+                json_declaration = data["declaration"]
                 declaration = json.dumps(json_declaration, indent=4)
-            elif isinstance(data['declaration'], six.string_types):
-                declaration = data['declaration']
+            elif isinstance(data["declaration"], six.string_types):
+                declaration = data["declaration"]
                 try:
                     json_declaration = json.loads(declaration)
-                except:
-                    raise serializers.ValidationError({'declaration': 'Invalid declaration data'})
+                except json.decoder.JSONDecodeError:
+                    raise serializers.ValidationError(
+                        {"declaration": "Invalid declaration data"}
+                    )
             else:
-                raise serializers.ValidationError({'declaration': 'Invalid declaration data'})
+                raise serializers.ValidationError(
+                    {"declaration": "Invalid declaration data"}
+                )
 
-            if 'description' in json_declaration:
+            if "description" in json_declaration:
                 if short_description is not None:
-                    raise serializers.ValidationError({'short_description': 'A short description is already provided in the toolchain declaration'})
+                    raise serializers.ValidationError(
+                        {
+                            "short_description": "A short description is already provided in the toolchain declaration"
+                        }
+                    )
 
-                short_description = json_declaration['description']
+                short_description = json_declaration["description"]
             elif short_description is not None:
-                json_declaration['description'] = short_description
+                json_declaration["description"] = short_description
                 declaration = json.dumps(json_declaration, indent=4)
 
             toolchain_declaration = beat.core.toolchain.Toolchain(
-                settings.PREFIX, json_declaration)
+                settings.PREFIX, json_declaration
+            )
 
             if not toolchain_declaration.valid:
                 if strict:
-                    raise serializers.ValidationError({'declaration': toolchain_declaration.errors})
+                    raise serializers.ValidationError(
+                        {"declaration": toolchain_declaration.errors}
+                    )
 
         else:
             declaration = None
 
-        if (short_description is not None) and (len(short_description) > self.model._meta.get_field('short_description').max_length):
-            raise serializers.ValidationError({'short_description': 'Short description too long'})
-
+        if (short_description is not None) and (
+            len(short_description)
+            > self.model._meta.get_field("short_description").max_length
+        ):
+            raise serializers.ValidationError(
+                {"short_description": "Short description too long"}
+            )
 
         # Process the query string
-        if 'fields' in request.GET:
-            fields_to_return = request.GET['fields'].split(',')
+        if "fields" in request.GET:
+            fields_to_return = request.GET["fields"].split(",")
         else:
             # Available fields (not returned by default):
             #    - html_description
-            fields_to_return = ['errors']
-
+            fields_to_return = ["errors"]
 
         # Retrieve the toolchain
-        dbtoolchain = get_object_or_404(Toolchain,
-                                        author__username__iexact=author_name,
-                                        name__iexact=object_name,
-                                        version=version)
+        dbtoolchain = get_object_or_404(
+            Toolchain,
+            author__username__iexact=author_name,
+            name__iexact=object_name,
+            version=version,
+        )
 
         # Check that the object can still be modified (if applicable, the
         # documentation can always be modified)
         if declaration is not None and not dbtoolchain.modifiable():
-            raise PermissionDenied("The {} isn't modifiable anymore (either shared with someone else, or needed by an attestation)".format(dbtoolchain.model_name()))
+            raise PermissionDenied(
+                "The {} isn't modifiable anymore (either shared with someone else, or needed by an attestation)".format(
+                    dbtoolchain.model_name()
+                )
+            )
 
         errors = None
 
-
         # Modification of the short_description
         if (short_description is not None) and (declaration is None):
             tmp_declaration = dbtoolchain.declaration
-            tmp_declaration['description'] = short_description
+            tmp_declaration["description"] = short_description
             dbtoolchain.declaration = tmp_declaration
 
         # Modification of the description
@@ -217,9 +249,9 @@ class RetrieveUpdateDestroyToolchainsView(RetrieveUpdateDestroyContributionView)
 
         # Modification of the declaration
         if declaration is not None:
-            errors = ''
+            errors = ""
             if not toolchain_declaration.valid:
-                errors = ' * %s' % '\n * '.join(toolchain_declaration.errors)
+                errors = " * %s" % "\n * ".join(toolchain_declaration.errors)
 
             dbtoolchain.errors = errors
             dbtoolchain.declaration = declaration
@@ -240,19 +272,18 @@ class RetrieveUpdateDestroyToolchainsView(RetrieveUpdateDestroyContributionView)
         result = {}
 
         # Retrieve the errors (if necessary)
-        if 'errors' in fields_to_return:
+        if "errors" in fields_to_return:
             if errors:
-                result['errors'] = errors
+                result["errors"] = errors
             else:
-                result['errors'] = ''
-
+                result["errors"] = ""
 
         # Retrieve the description in HTML format (if necessary)
-        if 'html_description' in fields_to_return:
+        if "html_description" in fields_to_return:
             description = dbtoolchain.description
             if len(description) > 0:
-                result['html_description'] = ensure_html(description)
+                result["html_description"] = ensure_html(description)
             else:
-                result['html_description'] = ''
+                result["html_description"] = ""
 
         return Response(result)
-- 
GitLab