From ed07aa4efb587caa008adbbc22cc7acbcab8afdf Mon Sep 17 00:00:00 2001 From: Daniel Yohan Date: Thu, 29 Apr 2021 11:32:27 -0300 Subject: [PATCH 1/5] Added filter by repository version language --- bothub/api/v2/repository/filters.py | 10 ++++++- bothub/api/v2/repository/serializers.py | 1 + bothub/api/v2/tests/test_account.py | 35 ++++++++++++++++++------- bothub/common/models.py | 4 +-- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/bothub/api/v2/repository/filters.py b/bothub/api/v2/repository/filters.py index ae2b78fd..9c059d09 100644 --- a/bothub/api/v2/repository/filters.py +++ b/bothub/api/v2/repository/filters.py @@ -104,6 +104,12 @@ 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", + help_text=_("Filter for examples with version language id."), + ) + intent = filters.CharFilter( field_name="repository_version_language", method="filter_intent", @@ -135,6 +141,9 @@ def filter_language(self, queryset, name, value): def filter_repository_version(self, queryset, name, value): return queryset.filter(repository_version_language__repository_version=value) + def filter_repository_version_language(self, queryset, name, value): + return queryset.filter(repository_version_language=value) + def filter_intent(self, queryset, name, value): return queryset.filter( repository_nlp_log__intent=value, repository_nlp_log__is_default=True @@ -145,7 +154,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 diff --git a/bothub/api/v2/repository/serializers.py b/bothub/api/v2/repository/serializers.py index f7ec8faf..a64976dc 100644 --- a/bothub/api/v2/repository/serializers.py +++ b/bothub/api/v2/repository/serializers.py @@ -845,6 +845,7 @@ 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, } diff --git a/bothub/api/v2/tests/test_account.py b/bothub/api/v2/tests/test_account.py index d3ad6c6e..9c81bb20 100644 --- a/bothub/api/v2/tests/test_account.py +++ b/bothub/api/v2/tests/test_account.py @@ -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)) @@ -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( diff --git a/bothub/common/models.py b/bothub/common/models.py index 33417323..3045d27b 100644 --- a/bothub/common/models.py +++ b/bothub/common/models.py @@ -380,9 +380,7 @@ def save( def request_nlp_train(self, user_authorization, data): try: # pragma: no cover url = f"{self.nlp_server if self.nlp_server else settings.BOTHUB_NLP_BASE_URL}train/" - data = { - "repository_version": data.get("repository_version") - } + data = {"repository_version": data.get("repository_version")} headers = {"Authorization": f"Bearer {user_authorization.uuid}"} r = requests.post(url, data=json.dumps(data), headers=headers) From 745701db5ad9a030a679eecb797e912be3d350a0 Mon Sep 17 00:00:00 2001 From: Daniel Yohan Date: Thu, 29 Apr 2021 11:53:56 -0300 Subject: [PATCH 2/5] Filter repository version language nlp log is required --- bothub/api/v2/repository/filters.py | 34 ++++++++++++++++++++++++++--- bothub/api/v2/tests/test_logs.py | 3 ++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/bothub/api/v2/repository/filters.py b/bothub/api/v2/repository/filters.py index 9c059d09..04519843 100644 --- a/bothub/api/v2/repository/filters.py +++ b/bothub/api/v2/repository/filters.py @@ -11,6 +11,8 @@ RepositoryEntity, RepositoryQueueTask, RepositoryIntent, + RepositoryVersion, + RepositoryVersionLanguage, ) from bothub.common.models import RepositoryAuthorization from bothub.common.models import RequestRepositoryAuthorization @@ -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"), ) @@ -107,6 +108,7 @@ class Meta: 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."), ) @@ -139,10 +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): - return queryset.filter(repository_version_language=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( diff --git a/bothub/api/v2/tests/test_logs.py b/bothub/api/v2/tests/test_logs.py index cdbac1ae..e95da11d 100644 --- a/bothub/api/v2/tests/test_logs.py +++ b/bothub/api/v2/tests/test_logs.py @@ -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) From c67bbead600793477801465ede15c9ce46dc832d Mon Sep 17 00:00:00 2001 From: Sandro-Meireles Date: Thu, 29 Apr 2021 15:13:49 -0300 Subject: [PATCH 3/5] feat: Added repository_version_language on NewRepositorySerializer --- bothub/api/v2/repository/serializers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bothub/api/v2/repository/serializers.py b/bothub/api/v2/repository/serializers.py index a64976dc..a9d69adc 100644 --- a/bothub/api/v2/repository/serializers.py +++ b/bothub/api/v2/repository/serializers.py @@ -477,6 +477,7 @@ class Meta: "ready_for_parse", "count_authorizations", "repository_score", + "repository_version_language", ] read_only = [ "uuid", @@ -493,6 +494,7 @@ class Meta: "is_organization", "ready_for_parse", "count_authorizations", + "repository_version_language", ] ref_name = None @@ -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( @@ -853,6 +856,9 @@ 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: From 307e0e4259086a185a558161a62d65505ed67c5e Mon Sep 17 00:00:00 2001 From: Sandro-Meireles Date: Thu, 29 Apr 2021 20:03:54 -0300 Subject: [PATCH 4/5] feat: Languages by repository --- bothub/api/v2/repository/serializers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bothub/api/v2/repository/serializers.py b/bothub/api/v2/repository/serializers.py index a9d69adc..f55d8357 100644 --- a/bothub/api/v2/repository/serializers.py +++ b/bothub/api/v2/repository/serializers.py @@ -41,6 +41,7 @@ RepositoryVersion, RepositoryVote, RequestRepositoryAuthorization, + RepositoryVersionLanguage, ) from bothub.utils import classifier_choice @@ -857,7 +858,9 @@ def get_repository_score(self, obj): return RepositoryScoreSerializer(score).data def get_repository_version_language(self, obj): - return obj.repositoryversionlanguage_set.all().values("id", "language") + + return RepositoryVersionLanguage.objects.filter( + repository_version__repository=obj.repository).values("id", "language") class RepositoryTrainInfoSerializer(serializers.ModelSerializer): From 726cf586e00f3f1812a69014c3284926756b44f3 Mon Sep 17 00:00:00 2001 From: Sandro-Meireles Date: Thu, 29 Apr 2021 20:51:49 -0300 Subject: [PATCH 5/5] fix: Repository Languages --- bothub/api/v2/repository/serializers.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bothub/api/v2/repository/serializers.py b/bothub/api/v2/repository/serializers.py index f55d8357..a9d69adc 100644 --- a/bothub/api/v2/repository/serializers.py +++ b/bothub/api/v2/repository/serializers.py @@ -41,7 +41,6 @@ RepositoryVersion, RepositoryVote, RequestRepositoryAuthorization, - RepositoryVersionLanguage, ) from bothub.utils import classifier_choice @@ -858,9 +857,7 @@ def get_repository_score(self, obj): return RepositoryScoreSerializer(score).data def get_repository_version_language(self, obj): - - return RepositoryVersionLanguage.objects.filter( - repository_version__repository=obj.repository).values("id", "language") + return obj.repositoryversionlanguage_set.all().values("id", "language") class RepositoryTrainInfoSerializer(serializers.ModelSerializer):