Skip to content

Commit

Permalink
Merge pull request #558 from Ilhasoft/feature/add_route_nlp_get_examp…
Browse files Browse the repository at this point in the history
…le_with_repoversion_and_language

add route nlp to get examples with repo version pk and language
  • Loading branch information
dyohan9 committed Mar 26, 2021
2 parents 1f33be3 + 6b55e7f commit 89a4e4f
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 4 deletions.
46 changes: 46 additions & 0 deletions bothub/api/v2/nlp/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,3 +628,49 @@ def retrieve(self, request, *args, **kwargs):
"language": context.language,
}
)


class RepositoryAuthorizationExamplesViewSet(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")
if repository_version:
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(
str(request.query_params.get("language"))
)

examples = current_version.examples.all()

page = self.paginate_queryset(examples)

examples_return = []

for example in page:
get_entities = example.get_entities(current_version.language)

get_text = example.get_text(current_version.language)

examples_return.append(
{
"text": get_text,
"intent": example.intent.text,
"entities": [entit.rasa_nlu_data for entit in get_entities],
}
)

return self.get_paginated_response(examples_return)
5 changes: 1 addition & 4 deletions bothub/api/v2/repository/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1017,10 +1017,7 @@ def create(self, validated_data):
raise ValidationError(_("It's necessary to pass an organization."))

validated_data.update(
{
"slug": utils.unique_slug_generator(validated_data),
"owner": owner
}
{"slug": utils.unique_slug_generator(validated_data), "owner": owner}
)

repository = super().create(validated_data)
Expand Down
4 changes: 4 additions & 0 deletions bothub/api/v2/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
RepositoryAuthorizationTrainViewSet,
RepositoryNLPLogsViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationExamplesViewSet,
)
from .nlp.views import RepositoryAuthorizationParseViewSet
from .nlp.views import RepositoryAuthorizationInfoViewSet
Expand Down Expand Up @@ -188,6 +189,9 @@ def get_lookup_regex(self, viewset, lookup_prefix=""):
router.register(
"repository/nlp/authorization/parse", RepositoryAuthorizationParseViewSet
)
router.register(
"repository/nlp/authorization/examples", RepositoryAuthorizationExamplesViewSet
)
router.register("repository/nlp/authorization/info", RepositoryAuthorizationInfoViewSet)
router.register(
"repository/nlp/authorization/evaluate", RepositoryAuthorizationEvaluateViewSet
Expand Down
92 changes: 92 additions & 0 deletions bothub/api/v2/tests/test_nlp.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from bothub.api.v2.nlp.views import (
RepositoryAuthorizationTrainViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationExamplesViewSet,
)
from bothub.api.v2.nlp.views import RepositoryAuthorizationInfoViewSet
from bothub.common import languages
Expand Down Expand Up @@ -432,3 +433,94 @@ def test_get_current_configuration(self):
self.assertFalse(content_data.get("use_name_entities"))
self.assertFalse(content_data.get("use_competing_intents"))
self.assertFalse(content_data.get("use_analyze_char"))


class AuthorizationExamplesTestCase(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=RepositoryAuthorization.ROLE_ADMIN,
)

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",
)

self.example_intent_1 = RepositoryIntent.objects.create(
text="greet", repository_version=self.repository_version
)
self.example_intent_2 = RepositoryIntent.objects.create(
text="farewell", repository_version=self.repository_version
)

self.repository_examples = RepositoryExample.objects.create(
repository_version_language=self.repository_version_language,
text="hello",
intent=self.example_intent_1,
)
self.repository_examples_2 = RepositoryExample.objects.create(
repository_version_language=self.repository_version_language,
text="bye",
intent=self.example_intent_2,
)
self.repository_examples_3 = RepositoryExample.objects.create(
repository_version_language=self.repository_version_language,
text="goodbye",
intent=self.example_intent_2,
)

self.repository_entity = RepositoryExampleEntity.objects.create(
repository_example=self.repository_examples, start=11, end=18, entity="name"
)

def request(self, token, repository_version=""):
authorization_header = {"HTTP_AUTHORIZATION": "Bearer {}".format(token)}
request = self.factory.get(
"/v2/repository/nlp/authorization/examples/{}/".format(token),
{
"repository_version": repository_version,
"language": languages.LANGUAGE_EN,
},
**authorization_header
)
response = RepositoryAuthorizationExamplesViewSet.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))
self.assertEqual(response.status_code, status.HTTP_200_OK)

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

def test_get_examples(self):
response, content_data = self.request(
str(self.repository_authorization.uuid),
repository_version=self.repository_version.pk,
)
self.assertEqual(response.data.get("count"), 3)
self.assertEqual(response.data.get("results")[0].get("text"), "goodbye")

0 comments on commit 89a4e4f

Please sign in to comment.