diff --git a/app/api/processingnodes.py b/app/api/processingnodes.py index 050799c8..250583b3 100644 --- a/app/api/processingnodes.py +++ b/app/api/processingnodes.py @@ -1,14 +1,10 @@ -from rest_framework import serializers, viewsets -from rest_framework.response import Response -from rest_framework.decorators import permission_classes -from rest_framework.permissions import DjangoModelPermissions -from rest_framework.filters import DjangoFilterBackend -from django_filters.rest_framework import FilterSet -from nodeodm.models import ProcessingNode import django_filters -from django.utils import timezone -from datetime import timedelta -from django.db.models import Q +from django_filters.rest_framework import FilterSet +from rest_framework import serializers, viewsets +from rest_framework.filters import DjangoFilterBackend +from rest_framework.permissions import DjangoModelPermissions + +from nodeodm.models import ProcessingNode class ProcessingNodeSerializer(serializers.ModelSerializer): @@ -19,6 +15,7 @@ class ProcessingNodeSerializer(serializers.ModelSerializer): class ProcessingNodeFilter(FilterSet): has_available_options = django_filters.MethodFilter() + # noinspection PyMethodMayBeStatic def filter_has_available_options(self, queryset, value): if value.lower() in ['true', '1']: return queryset.exclude(available_options=dict()) diff --git a/app/api/projects.py b/app/api/projects.py index 20ceb38c..9cb90b68 100644 --- a/app/api/projects.py +++ b/app/api/projects.py @@ -1,8 +1,9 @@ from django.contrib.auth.models import User from rest_framework import serializers, viewsets -from rest_framework.response import Response + from app import models -from .tasks import TaskIDsSerializer, TaskSerializer +from .tasks import TaskIDsSerializer + class ProjectSerializer(serializers.ModelSerializer): owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all()) diff --git a/app/api/tasks.py b/app/api/tasks.py index 00c68330..3bedbd70 100644 --- a/app/api/tasks.py +++ b/app/api/tasks.py @@ -1,11 +1,11 @@ -from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist from rest_framework import status, serializers, viewsets, filters, exceptions, permissions, parsers from rest_framework.response import Response -from rest_framework.decorators import parser_classes, api_view + from app import models, scheduler from nodeodm.models import ProcessingNode + class TaskIDsSerializer(serializers.BaseSerializer): def to_representation(self, obj): return obj.id @@ -34,8 +34,9 @@ class TaskViewSet(viewsets.ViewSet): permission_classes = (permissions.DjangoModelPermissions, ) parser_classes = (parsers.MultiPartParser, parsers.JSONParser, ) ordering_fields = '__all__' - - def get_and_check_project(self, request, project_pk, perms = ('view_project', )): + + @staticmethod + def get_and_check_project(request, project_pk, perms = ('view_project', )): ''' Retrieves a project and raises an exeption if the current user has no access to it. @@ -55,7 +56,7 @@ class TaskViewSet(viewsets.ViewSet): return '\n'.join(output.split('\n')[line_num:]) def list(self, request, project_pk=None): - project = self.get_and_check_project(request, project_pk) + self.get_and_check_project(request, project_pk) tasks = self.queryset.filter(project=project_pk) tasks = filters.OrderingFilter().filter_queryset(self.request, tasks, self) serializer = TaskSerializer(tasks, many=True) @@ -68,8 +69,6 @@ class TaskViewSet(viewsets.ViewSet): except ObjectDoesNotExist: raise exceptions.NotFound() - response_data = None - if request.query_params.get('output_only', '').lower() in ['true', '1']: response_data = self.task_output_only(request, task) else: @@ -88,13 +87,13 @@ class TaskViewSet(viewsets.ViewSet): for file in filesList] task = models.Task.create_from_images(files, project) - if task != None: + if not task is None: return Response({"id": task.id}, status=status.HTTP_201_CREATED) else: raise exceptions.ValidationError(detail="Cannot create task, input provided is not valid.") def update(self, request, pk=None, project_pk=None, partial=False): - project = self.get_and_check_project(request, project_pk, ('change_project', )) + self.get_and_check_project(request, project_pk, ('change_project', )) try: task = self.queryset.get(pk=pk, project=project_pk) except ObjectDoesNotExist: diff --git a/app/models.py b/app/models.py index a5a16d7f..4652097d 100644 --- a/app/models.py +++ b/app/models.py @@ -139,7 +139,7 @@ class Task(models.Model): # TODO: log process has started processing - except ProcessingException, e: + except ProcessingException as e: print("TASK ERROR: " + e.message) # Need to update status (first time, queued or running?) diff --git a/app/tests/classes.py b/app/tests/classes.py index 981c3275..96fc6061 100644 --- a/app/tests/classes.py +++ b/app/tests/classes.py @@ -1,7 +1,9 @@ +from django.contrib.auth.models import User from django.test import TestCase -from django.contrib.auth.models import User, Group -from app.models import Project + from app.boot import boot +from app.models import Project + class BootTestCase(TestCase): ''' diff --git a/app/tests/test_app.py b/app/tests/test_app.py index 55af1773..ef26a820 100644 --- a/app/tests/test_app.py +++ b/app/tests/test_app.py @@ -129,7 +129,7 @@ class TestApp(BootTestCase): # Test options validation task.options = [{'name': 'test', 'value': 1}] - self.assertTrue(task.save() == None) + self.assertTrue(task.save() is None) task.options = {'test': 1} self.assertRaises(ValidationError, task.save) @@ -139,12 +139,12 @@ class TestApp(BootTestCase): def test_scheduler(self): - self.assertTrue(scheduler.setup() == None) + self.assertTrue(scheduler.setup() is None) # Can call update_nodes_info() - self.assertTrue(scheduler.update_nodes_info() == None) + self.assertTrue(scheduler.update_nodes_info() is None) # Can call function in background - self.assertTrue(scheduler.update_nodes_info(background=True).join() == None) + self.assertTrue(scheduler.update_nodes_info(background=True).join() is None) - self.assertTrue(scheduler.teardown() == None) + self.assertTrue(scheduler.teardown() is None)