pull/40/head
Piero Toffanin 2016-11-01 15:11:36 -04:00
rodzic d7a450521c
commit c75c35a21e
6 zmienionych plików z 28 dodań i 29 usunięć

Wyświetl plik

@ -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 import django_filters
from django.utils import timezone from django_filters.rest_framework import FilterSet
from datetime import timedelta from rest_framework import serializers, viewsets
from django.db.models import Q from rest_framework.filters import DjangoFilterBackend
from rest_framework.permissions import DjangoModelPermissions
from nodeodm.models import ProcessingNode
class ProcessingNodeSerializer(serializers.ModelSerializer): class ProcessingNodeSerializer(serializers.ModelSerializer):
@ -19,6 +15,7 @@ class ProcessingNodeSerializer(serializers.ModelSerializer):
class ProcessingNodeFilter(FilterSet): class ProcessingNodeFilter(FilterSet):
has_available_options = django_filters.MethodFilter() has_available_options = django_filters.MethodFilter()
# noinspection PyMethodMayBeStatic
def filter_has_available_options(self, queryset, value): def filter_has_available_options(self, queryset, value):
if value.lower() in ['true', '1']: if value.lower() in ['true', '1']:
return queryset.exclude(available_options=dict()) return queryset.exclude(available_options=dict())

Wyświetl plik

@ -1,8 +1,9 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from rest_framework import serializers, viewsets from rest_framework import serializers, viewsets
from rest_framework.response import Response
from app import models from app import models
from .tasks import TaskIDsSerializer, TaskSerializer from .tasks import TaskIDsSerializer
class ProjectSerializer(serializers.ModelSerializer): class ProjectSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all()) owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

Wyświetl plik

@ -1,11 +1,11 @@
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from rest_framework import status, serializers, viewsets, filters, exceptions, permissions, parsers from rest_framework import status, serializers, viewsets, filters, exceptions, permissions, parsers
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import parser_classes, api_view
from app import models, scheduler from app import models, scheduler
from nodeodm.models import ProcessingNode from nodeodm.models import ProcessingNode
class TaskIDsSerializer(serializers.BaseSerializer): class TaskIDsSerializer(serializers.BaseSerializer):
def to_representation(self, obj): def to_representation(self, obj):
return obj.id return obj.id
@ -34,8 +34,9 @@ class TaskViewSet(viewsets.ViewSet):
permission_classes = (permissions.DjangoModelPermissions, ) permission_classes = (permissions.DjangoModelPermissions, )
parser_classes = (parsers.MultiPartParser, parsers.JSONParser, ) parser_classes = (parsers.MultiPartParser, parsers.JSONParser, )
ordering_fields = '__all__' 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 Retrieves a project and raises an exeption if the current user
has no access to it. has no access to it.
@ -55,7 +56,7 @@ class TaskViewSet(viewsets.ViewSet):
return '\n'.join(output.split('\n')[line_num:]) return '\n'.join(output.split('\n')[line_num:])
def list(self, request, project_pk=None): 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 = self.queryset.filter(project=project_pk)
tasks = filters.OrderingFilter().filter_queryset(self.request, tasks, self) tasks = filters.OrderingFilter().filter_queryset(self.request, tasks, self)
serializer = TaskSerializer(tasks, many=True) serializer = TaskSerializer(tasks, many=True)
@ -68,8 +69,6 @@ class TaskViewSet(viewsets.ViewSet):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise exceptions.NotFound() raise exceptions.NotFound()
response_data = None
if request.query_params.get('output_only', '').lower() in ['true', '1']: if request.query_params.get('output_only', '').lower() in ['true', '1']:
response_data = self.task_output_only(request, task) response_data = self.task_output_only(request, task)
else: else:
@ -88,13 +87,13 @@ class TaskViewSet(viewsets.ViewSet):
for file in filesList] for file in filesList]
task = models.Task.create_from_images(files, project) 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) return Response({"id": task.id}, status=status.HTTP_201_CREATED)
else: else:
raise exceptions.ValidationError(detail="Cannot create task, input provided is not valid.") raise exceptions.ValidationError(detail="Cannot create task, input provided is not valid.")
def update(self, request, pk=None, project_pk=None, partial=False): 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: try:
task = self.queryset.get(pk=pk, project=project_pk) task = self.queryset.get(pk=pk, project=project_pk)
except ObjectDoesNotExist: except ObjectDoesNotExist:

Wyświetl plik

@ -139,7 +139,7 @@ class Task(models.Model):
# TODO: log process has started processing # TODO: log process has started processing
except ProcessingException, e: except ProcessingException as e:
print("TASK ERROR: " + e.message) print("TASK ERROR: " + e.message)
# Need to update status (first time, queued or running?) # Need to update status (first time, queued or running?)

Wyświetl plik

@ -1,7 +1,9 @@
from django.contrib.auth.models import User
from django.test import TestCase 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.boot import boot
from app.models import Project
class BootTestCase(TestCase): class BootTestCase(TestCase):
''' '''

Wyświetl plik

@ -129,7 +129,7 @@ class TestApp(BootTestCase):
# Test options validation # Test options validation
task.options = [{'name': 'test', 'value': 1}] task.options = [{'name': 'test', 'value': 1}]
self.assertTrue(task.save() == None) self.assertTrue(task.save() is None)
task.options = {'test': 1} task.options = {'test': 1}
self.assertRaises(ValidationError, task.save) self.assertRaises(ValidationError, task.save)
@ -139,12 +139,12 @@ class TestApp(BootTestCase):
def test_scheduler(self): def test_scheduler(self):
self.assertTrue(scheduler.setup() == None) self.assertTrue(scheduler.setup() is None)
# Can call update_nodes_info() # 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 # 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)