Skip to content

Commit

Permalink
Merge pull request #283 from Ilhasoft/feature/upload_examples_file
Browse files Browse the repository at this point in the history
Feature/upload examples file
  • Loading branch information
VictorMeneghini committed Sep 19, 2019
2 parents 1b43166 + dc56ed7 commit ec868b8
Show file tree
Hide file tree
Showing 12 changed files with 275 additions and 146 deletions.
3 changes: 1 addition & 2 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ name = "pypi"

[packages]
django = "==2.1.5"
dj-database-url = "==0.5.0"
python-decouple = "==3.1"
djangorestframework = "==3.9.0"
django-filter = "==2.0.0"
django-cors-headers = "==2.4.0"
Expand All @@ -18,6 +16,7 @@ drf-yasg = "*"
gunicorn = "*"
gevent = "*"
packaging = "*"
django-environ = "*"
boto3 = "*"

[dev-packages]
Expand Down
56 changes: 21 additions & 35 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions bothub/api/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,7 @@ def train(self, request, **kwargs):
user_authorization = repository.get_user_authorization(request.user)
if not user_authorization.can_write:
raise PermissionDenied()
request = Repository.request_nlp_train( # pragma: no cover
request = repository.request_nlp_train( # pragma: no cover
user_authorization)
if request.status_code != status.HTTP_200_OK: # pragma: no cover
raise APIException( # pragma: no cover
Expand All @@ -587,7 +587,7 @@ def analyze(self, request, **kwargs):
serializer = AnalyzeTextSerializer(
data=request.data) # pragma: no cover
serializer.is_valid(raise_exception=True) # pragma: no cover
request = Repository.request_nlp_analyze(
request = repository.request_nlp_analyze(
user_authorization,
serializer.data) # pragma: no cover

Expand Down Expand Up @@ -641,7 +641,7 @@ def evaluate(self, request, **kwargs):
detail=_('You need to have at least ' +
'two registered intents')) # pragma: no cover

request = Repository.request_nlp_evaluate( # pragma: no cover
request = repository.request_nlp_evaluate( # pragma: no cover
user_authorization, serializer.data)
if request.status_code != status.HTTP_200_OK: # pragma: no cover
raise APIException( # pragma: no cover
Expand Down
4 changes: 4 additions & 0 deletions bothub/api/v2/repository/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -595,3 +595,7 @@ class Meta:
source='by',
slug_field='nickname',
read_only=True)


class RepositoryUpload(serializers.Serializer):
pass
56 changes: 53 additions & 3 deletions bothub/api/v2/repository/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from django.utils.decorators import method_decorator
from django_filters.rest_framework import DjangoFilterBackend
from django.shortcuts import get_object_or_404
Expand All @@ -7,10 +8,12 @@
from drf_yasg.utils import swagger_auto_schema
from rest_framework.decorators import action
from rest_framework.exceptions import ValidationError
from rest_framework.exceptions import UnsupportedMediaType
from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet
from rest_framework import mixins
from rest_framework import parsers
from rest_framework import status
from rest_framework import permissions
from rest_framework.permissions import IsAuthenticatedOrReadOnly
Expand Down Expand Up @@ -41,6 +44,7 @@
from .serializers import AnalyzeTextSerializer
from .serializers import EvaluateSerializer
from .serializers import RepositoryUpdateSerializer
from .serializers import RepositoryUpload
from .permissions import RepositoryPermission
from .permissions import RepositoryAdminManagerAuthorization
from .permissions import RepositoryExamplePermission
Expand Down Expand Up @@ -102,7 +106,7 @@ def train(self, request, **kwargs):
user_authorization = repository.get_user_authorization(request.user)
if not user_authorization.can_write:
raise PermissionDenied()
request = Repository.request_nlp_train( # pragma: no cover
request = repository.request_nlp_train( # pragma: no cover
user_authorization)
if request.status_code != status.HTTP_200_OK: # pragma: no cover
raise APIException( # pragma: no cover
Expand All @@ -122,7 +126,7 @@ def analyze(self, request, **kwargs):
serializer = AnalyzeTextSerializer(
data=request.data) # pragma: no cover
serializer.is_valid(raise_exception=True) # pragma: no cover
request = Repository.request_nlp_analyze(
request = repository.request_nlp_analyze(
user_authorization,
serializer.data) # pragma: no cover

Expand Down Expand Up @@ -172,7 +176,7 @@ def evaluate(self, request, **kwargs):
detail=_('You need to have at least ' +
'two registered intents')) # pragma: no cover

request = Repository.request_nlp_evaluate( # pragma: no cover
request = repository.request_nlp_evaluate( # pragma: no cover
user_authorization, serializer.data)
if request.status_code != status.HTTP_200_OK: # pragma: no cover
raise APIException( # pragma: no cover
Expand Down Expand Up @@ -475,6 +479,52 @@ def create(self, request, *args, **kwargs):
self.permission_classes = [permissions.IsAuthenticated]
return super().create(request, *args, **kwargs)

@action(
detail=True,
methods=['POST'],
url_name='repository-upload-examples',
parser_classes=[parsers.MultiPartParser],
serializer_class=RepositoryUpload)
def upload_examples(self, request, **kwargs):
try:
repository = get_object_or_404(
Repository,
pk=request.data.get('repository')
)
except DjangoValidationError:
raise PermissionDenied()

user_authorization = repository.get_user_authorization(request.user)
if not user_authorization.can_write:
raise PermissionDenied()

f = request.FILES.get('file')
try:
json_data = json.loads(f.read().decode())
except json.decoder.JSONDecodeError:
raise UnsupportedMediaType('json')

count_added = 0
not_added = []

for data in json_data:
response_data = data
response_data['repository'] = request.data.get('repository')
serializer = RepositoryExampleSerializer(
data=response_data,
context={'request': request}
)
if serializer.is_valid():
serializer.save()
count_added += 1
else:
not_added.append(data)

return Response({
'added': count_added,
'not_added': not_added
})

def perform_destroy(self, obj):
if obj.deleted_in:
raise APIException(_('Example already deleted'))
Expand Down
2 changes: 1 addition & 1 deletion bothub/api/v2/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def get_lookup_regex(self, viewset, lookup_prefix=''):


router = Router()
router.register('repository', RepositoryViewSet)
router.register('repository/repository-info', RepositoryViewSet)
router.register('repository/repository-votes', RepositoryVotesViewSet)
router.register('repository/repositories', RepositoriesViewSet)
router.register(
Expand Down
Loading

0 comments on commit ec868b8

Please sign in to comment.