Skip to content

Commit

Permalink
Merge eda7f86 into 89a4e4f
Browse files Browse the repository at this point in the history
  • Loading branch information
mldzs committed Mar 26, 2021
2 parents 89a4e4f + eda7f86 commit a12ce67
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 0 deletions.
49 changes: 49 additions & 0 deletions bothub/api/v2/nlp/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,55 @@ def evaluate_results_score(self, request, **kwargs):
return Response({})


class RepositoryAuthorizationAutomaticEvaluateViewSet(
mixins.RetrieveModelMixin, GenericViewSet
):
queryset = RepositoryAuthorization.objects
serializer_class = NLPSerializer
permission_classes = [AllowAny]
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()

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

repository = repository_authorization.repository

if repository_version:
repository_version_language = repository.get_specific_version_id(
repository_version=repository_version, language=language
)
else:
repository_version_language = repository.get_specific_version_language(
language=language
)

try:
repository.validate_if_can_run_automatic_evaluate(language=language)
can_run_automatic_evaluate = True
except ValidationError:
can_run_automatic_evaluate = False

return Response(
{
"language": repository.language,
"repository_version_language_id": repository_version_language.pk,
"user_id": repository_authorization.user.pk,
"algorithm": repository.algorithm,
"use_name_entities": repository.use_name_entities,
"use_competing_intents": repository.use_competing_intents,
"use_analyze_char": repository.use_analyze_char,
"can_run_automatic_evaluate": can_run_automatic_evaluate,
}
)


class NLPLangsViewSet(mixins.ListModelMixin, GenericViewSet):
queryset = RepositoryAuthorization.objects
serializer_class = NLPSerializer
Expand Down
5 changes: 5 additions & 0 deletions bothub/api/v2/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
RepositoryNLPLogsViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationExamplesViewSet,
RepositoryAuthorizationAutomaticEvaluateViewSet,
)
from .nlp.views import RepositoryAuthorizationParseViewSet
from .nlp.views import RepositoryAuthorizationInfoViewSet
Expand Down Expand Up @@ -196,6 +197,10 @@ def get_lookup_regex(self, viewset, lookup_prefix=""):
router.register(
"repository/nlp/authorization/evaluate", RepositoryAuthorizationEvaluateViewSet
)
router.register(
"repository/nlp/authorization/automatic-evaluate",
RepositoryAuthorizationAutomaticEvaluateViewSet,
)
router.register("repository/nlp/authorization/langs", NLPLangsViewSet)
router.register(
"repository/nlp/update_interpreters", RepositoryUpdateInterpretersViewSet
Expand Down
71 changes: 71 additions & 0 deletions bothub/api/v2/tests/test_nlp.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
RepositoryAuthorizationTrainViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationExamplesViewSet,
RepositoryAuthorizationAutomaticEvaluateViewSet,
)
from bothub.api.v2.nlp.views import RepositoryAuthorizationInfoViewSet
from bothub.common import languages
Expand Down Expand Up @@ -524,3 +525,73 @@ def test_get_examples(self):
)
self.assertEqual(response.data.get("count"), 3)
self.assertEqual(response.data.get("results")[0].get("text"), "goodbye")


class RepositoryAuthorizationAutomaticEvaluateTestCase(TestCase):
def setUp(self):
self.factory = RequestFactory()

self.owner, self.owner_token = create_user_and_token("owner")
self.user, self.user_token = create_user_and_token()

self.repository = Repository.objects.create(
owner=self.owner,
name="Testing",
slug="test",
language=languages.LANGUAGE_EN,
)

self.repository_authorization = RepositoryAuthorization.objects.create(
user=self.user, repository=self.repository, role=3
)

self.repository_version = RepositoryVersion.objects.create(
repository=self.repository, name="test"
)

self.repository_version_language = RepositoryVersionLanguage.objects.create(
repository_version=self.repository_version,
language=languages.LANGUAGE_EN,
algorithm="neural_network_internal",
)

def request(self, token, repository_version=""):
authorization_header = {"HTTP_AUTHORIZATION": "Bearer {}".format(token)}
request = self.factory.get(
"/v2/repository/nlp/authorization/automatic-evaluate/{}/".format(token),
{
"repository_version": repository_version,
"language": languages.LANGUAGE_EN,
},
**authorization_header
)
response = RepositoryAuthorizationAutomaticEvaluateViewSet.as_view(
{"get": "retrieve"}
)(request, pk=token)
response.render()
content_data = json.loads(response.content)
return (response, content_data)

def test_ok(self):
response, content_data = self.request(
str(self.repository_authorization.uuid),
repository_version=self.repository_version.pk,
)
self.assertEqual(response.status_code, status.HTTP_200_OK)

def test_not_auth(self):
response, content_data = self.request(
str(uuid.uuid4()), repository_version=self.repository_version.pk
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

def test_route(self):
response, content_data = self.request(
str(self.repository_authorization.uuid),
repository_version=self.repository_version.pk,
)
self.assertFalse(content_data.get("can_run_automatic_evaluate"))
self.assertEqual(
content_data.get("repository_version_language_id"),
self.repository_version_language.pk,
)

0 comments on commit a12ce67

Please sign in to comment.