Skip to content

Commit

Permalink
Merge branch 'staging' into hotfix/train-route
Browse files Browse the repository at this point in the history
  • Loading branch information
Sandro-Meireles committed Apr 30, 2021
2 parents 096279b + 9ac8cdd commit f3fef49
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 19 deletions.
1 change: 1 addition & 0 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ exclude =
./bothub/common/migrations
./manage.py
./bothub/common/languages.py
./bothub/protos/
55 changes: 53 additions & 2 deletions bothub/api/v2/nlp/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ def retrieve(self, request, *args, **kwargs):

repository_version = request.query_params.get("repository_version")
if repository_version:
current_version = repository_authorization.repository.get_specific_version_id(
repository_version, str(request.query_params.get("language"))
current_version = (
repository_authorization.repository.get_specific_version_id(
repository_version, str(request.query_params.get("language"))
)
)
else:
current_version = repository_authorization.repository.current_version(
Expand Down Expand Up @@ -193,6 +195,55 @@ def training_log(self, request, **kwargs):
return Response({})


class RepositoryAuthorizationTrainLanguagesViewSet(
mixins.RetrieveModelMixin, GenericViewSet
):
queryset = RepositoryAuthorization.objects
serializer_class = NLPSerializer
permission_classes = [AllowAny]
pagination_class = NLPPagination
authentication_classes = [NLPAuthentication]

def retrieve(self, request, *args, **kwargs):
check_auth(request)
repository_authorization = self.get_object()

if not repository_authorization.can_contribute:
raise PermissionDenied()

repository_version = request.query_params.get("repository_version")

response = []

for language in settings.SUPPORTED_LANGUAGES:

if repository_version:
current_version = (
repository_authorization.repository.get_specific_version_id(
repository_version, language
)
)
else:
current_version = repository_authorization.repository.current_version(
language
)

if current_version.ready_for_train:
response.append(
{
"current_version_id": current_version.id,
"repository_authorization_user_id": repository_authorization.user.id,
"language": current_version.language,
"algorithm": current_version.repository_version.repository.algorithm,
"use_name_entities": current_version.repository_version.repository.use_name_entities,
"use_competing_intents": current_version.repository_version.repository.use_competing_intents,
"use_analyze_char": current_version.repository_version.repository.use_analyze_char,
}
)

return Response(response)


class RepositoryAuthorizationParseViewSet(mixins.RetrieveModelMixin, GenericViewSet):
queryset = RepositoryAuthorization.objects
serializer_class = NLPSerializer
Expand Down
42 changes: 39 additions & 3 deletions bothub/api/v2/repository/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
RepositoryEntity,
RepositoryQueueTask,
RepositoryIntent,
RepositoryVersion,
RepositoryVersionLanguage,
)
from bothub.common.models import RepositoryAuthorization
from bothub.common.models import RequestRepositoryAuthorization
Expand Down Expand Up @@ -88,7 +90,6 @@ class Meta:
repository_uuid = filters.CharFilter(
field_name="repository_uuid",
method="filter_repository_uuid",
required=True,
help_text=_("Repository's UUID"),
)

Expand All @@ -104,6 +105,13 @@ class Meta:
help_text=_("Filter for examples with version id."),
)

repository_version_language = filters.CharFilter(
field_name="repository_version_language",
method="filter_repository_version_language",
required=True,
help_text=_("Filter for examples with version language id."),
)

intent = filters.CharFilter(
field_name="repository_version_language",
method="filter_intent",
Expand Down Expand Up @@ -133,7 +141,36 @@ def filter_language(self, queryset, name, value):
return queryset.filter(repository_version_language__language=value)

def filter_repository_version(self, queryset, name, value):
return queryset.filter(repository_version_language__repository_version=value)
request = self.request
try:
repository = RepositoryVersion.objects.get(pk=value).repository
authorization = repository.get_user_authorization(request.user)
if not authorization.can_contribute:
raise PermissionDenied()
return queryset.filter(
repository_version_language__repository_version=value
)
except RepositoryVersion.DoesNotExist:
raise NotFound(_("RepositoryVersion {} does not exist").format(value))
except DjangoValidationError:
raise NotFound(_("Invalid repository_version"))

def filter_repository_version_language(self, queryset, name, value):
request = self.request
try:
repository = RepositoryVersionLanguage.objects.get(
pk=value
).repository_version.repository
authorization = repository.get_user_authorization(request.user)
if not authorization.can_contribute:
raise PermissionDenied()
return queryset.filter(repository_version_language=value)
except RepositoryVersionLanguage.DoesNotExist:
raise NotFound(
_("RepositoryVersionLanguage {} does not exist").format(value)
)
except DjangoValidationError:
raise NotFound(_("Invalid repository_version_language"))

def filter_intent(self, queryset, name, value):
return queryset.filter(
Expand All @@ -145,7 +182,6 @@ def filter_confidence(self, queryset, name, value):
Q(repository_nlp_log__confidence__gte=int(value.start) / 100),
Q(repository_nlp_log__confidence__lte=int(value.stop) / 100),
)
print(query.query)
return query


Expand Down
7 changes: 7 additions & 0 deletions bothub/api/v2/repository/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ class Meta:
"ready_for_parse",
"count_authorizations",
"repository_score",
"repository_version_language",
]
read_only = [
"uuid",
Expand All @@ -493,6 +494,7 @@ class Meta:
"is_organization",
"ready_for_parse",
"count_authorizations",
"repository_version_language",
]
ref_name = None

Expand Down Expand Up @@ -600,6 +602,7 @@ class Meta:
style={"show": False}, read_only=True, source="repository.count_authorizations"
)
repository_score = serializers.SerializerMethodField(style={"show": False})
repository_version_language = serializers.SerializerMethodField(style={"show": False})

def get_authorizations(self, obj):
auths = RepositoryAuthorization.objects.filter(
Expand Down Expand Up @@ -845,13 +848,17 @@ def get_nlp_server(self, obj):
def get_version_default(self, obj):
return {
"id": obj.repository.current_version().repository_version.pk,
"repository_version_language_id": obj.repository.current_version().pk,
"name": obj.repository.current_version().repository_version.name,
}

def get_repository_score(self, obj):
score, created = obj.repository.repository_score.get_or_create()
return RepositoryScoreSerializer(score).data

def get_repository_version_language(self, obj):
return obj.repositoryversionlanguage_set.all().values("id", "language")


class RepositoryTrainInfoSerializer(serializers.ModelSerializer):
class Meta:
Expand Down
9 changes: 8 additions & 1 deletion bothub/api/v2/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@
from .repository.views import RepositoryAuthorizationViewSet
from .repository.views import RepositoryAuthorizationRequestsViewSet
from .repository.views import RepositoryExampleViewSet
from .nlp.views import RepositoryAuthorizationTrainViewSet, RepositoryNLPLogsViewSet
from .nlp.views import (
RepositoryAuthorizationTrainViewSet,
RepositoryNLPLogsViewSet,
RepositoryAuthorizationTrainLanguagesViewSet,
)
from .nlp.views import RepositoryAuthorizationParseViewSet
from .nlp.views import RepositoryAuthorizationInfoViewSet
from .nlp.views import RepositoryAuthorizationEvaluateViewSet
Expand Down Expand Up @@ -170,6 +174,9 @@ def get_lookup_regex(self, viewset, lookup_prefix=""):
router.register(
"repository/nlp/authorization/train", RepositoryAuthorizationTrainViewSet
)
router.register(
"repository/nlp/authorization/train-languages", RepositoryAuthorizationTrainLanguagesViewSet
)
router.register(
"repository/nlp/authorization/parse", RepositoryAuthorizationParseViewSet
)
Expand Down
35 changes: 25 additions & 10 deletions bothub/api/v2/tests/test_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,22 @@ def request(self, data):
content_data = json.loads(response.content)
return (response, content_data)

@override_settings(DRF_RECAPTCHA_SECRET_KEY="6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe")
@override_settings(
DRF_RECAPTCHA_SECRET_KEY="6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe"
)
def test_okay(self):
email = "fake@user.com"
password = "abc!1234"

response, content_data = self.request({
"email": email, "name": "Fake", "nickname": "fake",
"password": password, "recaptcha": "RECAPTCHA-TOKEN"
})
response, content_data = self.request(
{
"email": email,
"name": "Fake",
"nickname": "fake",
"password": password,
"recaptcha": "RECAPTCHA-TOKEN",
}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
user = User.objects.get(email=email)
self.assertTrue(user.check_password(password))
Expand All @@ -84,14 +91,22 @@ def test_invalid_recaptcha(self):
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("recaptcha", content_data.keys())

response, content_data = self.request({
"email": email, "name": "Fake", "nickname": "fake",
"password": password, "recaptcha": "WRONG-RECAPTCHA-TOKEN"
})
response, content_data = self.request(
{
"email": email,
"name": "Fake",
"nickname": "fake",
"password": password,
"recaptcha": "WRONG-RECAPTCHA-TOKEN",
}
)

self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("recaptcha", content_data.keys())
self.assertIn(_("The response parameter is invalid or malformed."), content_data.get("recaptcha"))
self.assertIn(
_("The response parameter is invalid or malformed."),
content_data.get("recaptcha"),
)

def test_invalid_password(self):
response, content_data = self.request(
Expand Down
3 changes: 2 additions & 1 deletion bothub/api/v2/tests/test_logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,8 @@ def request(self, data, token=None):

def test_okay(self):
response, content_data = self.request(
{"repository_uuid": str(self.repository.uuid)}, self.owner_token
{"repository_version_language": int(self.repository.current_version().pk)},
self.owner_token,
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(content_data.get("count"), 1)
Expand Down
1 change: 0 additions & 1 deletion bothub/common/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,6 @@ def request_nlp_train(self, user_authorization, data):
},
)
return r # pragma: no cover

except requests.exceptions.ConnectionError: # pragma: no cover
raise APIException( # pragma: no cover
{"status_code": status.HTTP_503_SERVICE_UNAVAILABLE},
Expand Down
2 changes: 1 addition & 1 deletion bothub/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
schema_view = get_schema_view(
openapi.Info(
title="API Documentation",
default_version="v2.1.18",
default_version="v2.1.22",
description="Documentation",
terms_of_service="https://bothub.it/terms",
contact=openapi.Contact(email="bothub@ilhasoft.com.br"),
Expand Down

0 comments on commit f3fef49

Please sign in to comment.