Browse Source

Move code related to example to example app

pull/1656/head
Hironsan 3 years ago
parent
commit
7b180e325a
24 changed files with 120 additions and 108 deletions
  1. 9
      backend/api/permissions.py
  2. 50
      backend/api/serializers.py
  3. 27
      backend/api/urls.py
  4. 1
      backend/app/settings.py
  5. 1
      backend/app/urls.py
  6. 0
      backend/examples/__init__.py
  7. 0
      backend/examples/admin.py
  8. 6
      backend/examples/apps.py
  9. 2
      backend/examples/filters.py
  10. 0
      backend/examples/migrations/__init__.py
  11. 0
      backend/examples/models.py
  12. 10
      backend/examples/permissions.py
  13. 50
      backend/examples/serializers.py
  14. 0
      backend/examples/tests/__init__.py
  15. 3
      backend/examples/tests/test_comment.py
  16. 5
      backend/examples/tests/test_document.py
  17. 3
      backend/examples/tests/test_example_state.py
  18. 5
      backend/examples/tests/test_filters.py
  19. 3
      backend/examples/tests/test_models.py
  20. 34
      backend/examples/urls.py
  21. 0
      backend/examples/views/__init__.py
  22. 7
      backend/examples/views/comment.py
  23. 7
      backend/examples/views/example.py
  24. 5
      backend/examples/views/example_state.py

9
backend/api/permissions.py

@ -1,15 +1,6 @@
from rest_framework.permissions import BasePermission
class IsOwnComment(BasePermission):
@classmethod
def has_object_permission(cls, request, view, obj):
if request.user.is_superuser:
return True
return obj.user.id == request.user.id
class IsStaff(BasePermission):
def has_permission(self, request, view):
if request.user.is_superuser or request.user.is_staff:

50
backend/api/serializers.py

@ -1,21 +1,12 @@
from rest_framework import serializers
from rest_polymorphic.serializers import PolymorphicSerializer
from .models import (Comment, Example, ExampleState,
ImageClassificationProject,
from .models import (ImageClassificationProject,
IntentDetectionAndSlotFillingProject, Project,
Seq2seqProject, SequenceLabelingProject,
Speech2textProject, Tag, TextClassificationProject)
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = ('id', 'user', 'username', 'example', 'text', 'created_at', )
read_only_fields = ('user', 'example')
class TagSerializer(serializers.ModelSerializer):
class Meta:
@ -24,45 +15,6 @@ class TagSerializer(serializers.ModelSerializer):
read_only_fields = ('id', 'project')
class ExampleSerializer(serializers.ModelSerializer):
annotation_approver = serializers.SerializerMethodField()
is_confirmed = serializers.SerializerMethodField()
@classmethod
def get_annotation_approver(cls, instance):
approver = instance.annotations_approved_by
return approver.username if approver else None
def get_is_confirmed(self, instance):
user = self.context.get('request').user
if instance.project.collaborative_annotation:
states = instance.states.all()
else:
states = instance.states.filter(confirmed_by_id=user.id)
return states.count() > 0
class Meta:
model = Example
fields = [
'id',
'filename',
'meta',
'annotation_approver',
'comment_count',
'text',
'is_confirmed'
]
read_only_fields = ['filename', 'is_confirmed']
class ExampleStateSerializer(serializers.ModelSerializer):
class Meta:
model = ExampleState
fields = ('id', 'example', 'confirmed_by')
read_only_fields = ('id', 'example', 'confirmed_by')
class ProjectSerializer(serializers.ModelSerializer):
tags = TagSerializer(many=True, required=False)

27
backend/api/urls.py

@ -1,18 +1,8 @@
from django.urls import include, path
from .views import comment, example, example_state, health, project, tag, task
from .views import health, project, tag, task
urlpatterns_project = [
path(
route='examples',
view=example.ExampleList.as_view(),
name='example_list'
),
path(
route='examples/<int:example_id>',
view=example.ExampleDetail.as_view(),
name='example_detail'
),
path(
route='tags',
view=tag.TagList.as_view(),
@ -23,21 +13,6 @@ urlpatterns_project = [
view=tag.TagDetail.as_view(),
name='tag_detail'
),
path(
route='comments',
view=comment.CommentList.as_view(),
name='comment_list'
),
path(
route='comments/<int:comment_id>',
view=comment.CommentDetail.as_view(),
name='comment_detail'
),
path(
route='examples/<int:example_id>/states',
view=example_state.ExampleStateList.as_view(),
name='example_state_list'
),
]
urlpatterns = [

1
backend/app/settings.py

@ -61,6 +61,7 @@ INSTALLED_APPS = [
'auto_labeling.apps.AutoLabelingConfig',
'labels.apps.LabelsConfig',
'label_types.apps.LabelTypesConfig',
'examples.apps.ExamplesConfig',
'rest_framework',
'rest_framework.authtoken',
'django_filters',

1
backend/app/urls.py

@ -48,6 +48,7 @@ urlpatterns += [
path('v1/projects/<int:project_id>/', include('members.urls')),
path('v1/projects/<int:project_id>/metrics/', include('metrics.urls')),
path('v1/projects/<int:project_id>/', include('auto_labeling.urls')),
path('v1/projects/<int:project_id>/', include('examples.urls')),
path('v1/projects/<int:project_id>/', include('labels.urls')),
path('v1/projects/<int:project_id>/', include('label_types.urls')),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),

0
backend/examples/__init__.py

0
backend/examples/admin.py

6
backend/examples/apps.py

@ -0,0 +1,6 @@
from django.apps import AppConfig
class ExamplesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'examples'

backend/api/filters.py → backend/examples/filters.py

@ -1,7 +1,7 @@
from django.db.models import Count, Q
from django_filters.rest_framework import BooleanFilter, FilterSet
from .models import Example
from api.models import Example
class ExampleFilter(FilterSet):

0
backend/examples/migrations/__init__.py

0
backend/examples/models.py

10
backend/examples/permissions.py

@ -0,0 +1,10 @@
from rest_framework.permissions import BasePermission
class IsOwnComment(BasePermission):
@classmethod
def has_object_permission(cls, request, view, obj):
if request.user.is_superuser:
return True
return obj.user.id == request.user.id

50
backend/examples/serializers.py

@ -0,0 +1,50 @@
from rest_framework import serializers
from api.models import Comment, Example, ExampleState
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = ('id', 'user', 'username', 'example', 'text', 'created_at', )
read_only_fields = ('user', 'example')
class ExampleSerializer(serializers.ModelSerializer):
annotation_approver = serializers.SerializerMethodField()
is_confirmed = serializers.SerializerMethodField()
@classmethod
def get_annotation_approver(cls, instance):
approver = instance.annotations_approved_by
return approver.username if approver else None
def get_is_confirmed(self, instance):
user = self.context.get('request').user
if instance.project.collaborative_annotation:
states = instance.states.all()
else:
states = instance.states.filter(confirmed_by_id=user.id)
return states.count() > 0
class Meta:
model = Example
fields = [
'id',
'filename',
'meta',
'annotation_approver',
'comment_count',
'text',
'is_confirmed'
]
read_only_fields = ['filename', 'is_confirmed']
class ExampleStateSerializer(serializers.ModelSerializer):
class Meta:
model = ExampleState
fields = ('id', 'example', 'confirmed_by')
read_only_fields = ('id', 'example', 'confirmed_by')

0
backend/examples/tests/__init__.py

backend/api/tests/api/test_comment.py → backend/examples/tests/test_comment.py

@ -1,8 +1,7 @@
from rest_framework import status
from rest_framework.reverse import reverse
from .utils import (CRUDMixin, make_comment, make_doc, make_user,
prepare_project)
from api.tests.api.utils import (CRUDMixin, make_comment, make_doc, make_user, prepare_project)
class TestCommentListDocAPI(CRUDMixin):

backend/api/tests/api/test_document.py → backend/examples/tests/test_document.py

@ -4,9 +4,8 @@ from rest_framework import status
from rest_framework.reverse import reverse
from api.models import DOCUMENT_CLASSIFICATION
from .utils import (CRUDMixin, assign_user_to_role, make_doc,
make_example_state, make_user, prepare_project)
from api.tests.api.utils import (CRUDMixin, assign_user_to_role, make_doc,
make_example_state, make_user, prepare_project)
class TestExampleListAPI(CRUDMixin):

backend/api/tests/api/test_example_state.py → backend/examples/tests/test_example_state.py

@ -1,8 +1,7 @@
from rest_framework import status
from rest_framework.reverse import reverse
from .utils import (CRUDMixin, make_doc, make_example_state, make_user,
prepare_project)
from api.tests.api.utils import (CRUDMixin, make_doc, make_example_state, make_user, prepare_project)
class TestExampleStateList(CRUDMixin):

backend/api/tests/test_filters.py → backend/examples/tests/test_filters.py

@ -2,10 +2,9 @@ from unittest.mock import MagicMock
from django.test import TestCase
from api.filters import ExampleFilter
from api.models import Example
from .api.utils import make_doc, make_example_state, prepare_project
from api.tests.api.utils import make_doc, make_example_state, prepare_project
from examples.filters import ExampleFilter
class TestFilterMixin(TestCase):

backend/api/tests/test_models.py → backend/examples/tests/test_models.py

@ -2,8 +2,7 @@ from django.test import TestCase
from model_mommy import mommy
from api.models import IMAGE_CLASSIFICATION, SEQUENCE_LABELING, ExampleState
from .api.utils import prepare_project
from api.tests.api.utils import prepare_project
class TestExampleState(TestCase):

34
backend/examples/urls.py

@ -0,0 +1,34 @@
from django.urls import path
from .views.example import ExampleList, ExampleDetail
from .views.comment import CommentList, CommentDetail
from .views.example_state import ExampleStateList
urlpatterns = [
path(
route='examples',
view=ExampleList.as_view(),
name='example_list'
),
path(
route='examples/<int:example_id>',
view=ExampleDetail.as_view(),
name='example_detail'
),
path(
route='comments',
view=CommentList.as_view(),
name='comment_list'
),
path(
route='comments/<int:comment_id>',
view=CommentDetail.as_view(),
name='comment_detail'
),
path(
route='examples/<int:example_id>/states',
view=ExampleStateList.as_view(),
name='example_state_list'
),
]

0
backend/examples/views/__init__.py

backend/api/views/comment.py → backend/examples/views/comment.py

@ -3,11 +3,10 @@ from rest_framework import filters, generics, status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from api.models import Comment
from members.permissions import IsInProjectOrAdmin
from ..models import Comment
from ..permissions import IsOwnComment
from ..serializers import CommentSerializer
from examples.permissions import IsOwnComment
from examples.serializers import CommentSerializer
class CommentList(generics.ListCreateAPIView):

backend/api/views/example.py → backend/examples/views/example.py

@ -7,12 +7,11 @@ from rest_framework import filters, generics, status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from api.models import Example, Project
from examples.filters import ExampleFilter
from examples.serializers import ExampleSerializer
from members.permissions import IsInProjectReadOnlyOrAdmin
from ..filters import ExampleFilter
from ..models import Example, Project
from ..serializers import ExampleSerializer
class ExampleList(generics.ListCreateAPIView):
serializer_class = ExampleSerializer

backend/api/views/example_state.py → backend/examples/views/example_state.py

@ -2,11 +2,10 @@ from django.shortcuts import get_object_or_404
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from api.models import Example, ExampleState, Project
from examples.serializers import ExampleStateSerializer
from members.permissions import IsInProjectOrAdmin
from ..models import Example, ExampleState, Project
from ..serializers import ExampleStateSerializer
class ExampleStateList(generics.ListCreateAPIView):
serializer_class = ExampleStateSerializer
Loading…
Cancel
Save