|
|
|
@ -1,25 +1,17 @@
|
|
|
|
|
import uuid
|
|
|
|
|
|
|
|
|
|
import six
|
|
|
|
|
from django.core.cache import cache
|
|
|
|
|
from django.db.models import Q
|
|
|
|
|
from rest_framework import viewsets
|
|
|
|
|
from rest_framework.response import Response
|
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
from rest_framework_extensions.cache.decorators import cache_response
|
|
|
|
|
|
|
|
|
|
from api.directory_watcher import scan_faces
|
|
|
|
|
from api.drf_optimize import OptimizeRelatedModelViewSetMetaclass
|
|
|
|
|
from api.face_classify import train_faces
|
|
|
|
|
from api.models import Face
|
|
|
|
|
from api.models.person import get_or_create_person
|
|
|
|
|
from api.serializers.serializers import FaceListSerializer, FaceSerializer
|
|
|
|
|
from api.util import logger
|
|
|
|
|
from api.views.caching import (
|
|
|
|
|
CACHE_TTL,
|
|
|
|
|
CustomListKeyConstructor,
|
|
|
|
|
CustomObjectKeyConstructor,
|
|
|
|
|
)
|
|
|
|
|
from api.views.pagination import HugeResultsSetPagination, StandardResultsSetPagination
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -45,21 +37,17 @@ class TrainFaceView(APIView):
|
|
|
|
|
return Response({"status": False})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceListViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceListSerializer
|
|
|
|
|
pagination_class = StandardResultsSetPagination
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceListViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceListViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceInferredListViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceListSerializer
|
|
|
|
|
pagination_class = HugeResultsSetPagination
|
|
|
|
@ -77,16 +65,13 @@ class FaceInferredListViewSet(viewsets.ModelViewSet):
|
|
|
|
|
)
|
|
|
|
|
return queryset
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceInferredListViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceInferredListViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceLabeledListViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceListSerializer
|
|
|
|
|
pagination_class = HugeResultsSetPagination
|
|
|
|
@ -103,16 +88,13 @@ class FaceLabeledListViewSet(viewsets.ModelViewSet):
|
|
|
|
|
)
|
|
|
|
|
return queryset
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceLabeledListViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceLabeledListViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = (
|
|
|
|
|
Face.objects.filter(Q(photo__hidden=False))
|
|
|
|
@ -122,16 +104,13 @@ class FaceViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceSerializer
|
|
|
|
|
pagination_class = StandardResultsSetPagination
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceInferredViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceSerializer
|
|
|
|
|
pagination_class = HugeResultsSetPagination
|
|
|
|
@ -143,16 +122,13 @@ class FaceInferredViewSet(viewsets.ModelViewSet):
|
|
|
|
|
& Q(person_label_is_inferred=True)
|
|
|
|
|
).order_by("id")
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceInferredViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceInferredViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@six.add_metaclass(OptimizeRelatedModelViewSetMetaclass)
|
|
|
|
|
class FaceLabeledViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = FaceSerializer
|
|
|
|
|
pagination_class = HugeResultsSetPagination
|
|
|
|
@ -164,11 +140,9 @@ class FaceLabeledViewSet(viewsets.ModelViewSet):
|
|
|
|
|
& Q(person_label_is_inferred=False)
|
|
|
|
|
).order_by("id")
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomObjectKeyConstructor())
|
|
|
|
|
def retrieve(self, *args, **kwargs):
|
|
|
|
|
return super(FaceLabeledViewSet, self).retrieve(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
@cache_response(CACHE_TTL, key_func=CustomListKeyConstructor())
|
|
|
|
|
def list(self, *args, **kwargs):
|
|
|
|
|
return super(FaceLabeledViewSet, self).list(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|