Skip to content

Commit

Permalink
Merge pull request #745 from Ilhasoft/merge-to-develop
Browse files Browse the repository at this point in the history
- Implement clone_repository celery task;
- Implement `clone-repository` endpoint;
- Implement testing for clone-repository API restrictions;
- Implement testing for clone_repository function (syncronously / without celery);
- Update clone_version celery task signature and the only reference to it in the code;
- Add "container_name"s on docker-compose for easier referencing;
- Fix ADMINS variable at bothub/settings.py which contained a personal email;
- Improve repository/info endpoint with explicit table joins, reducing a few queries from the API;
- Add serializer_class to RepositoryTokenByUserViewSet, which was raising an ocasional error at the API;
  • Loading branch information
victor-salles committed Aug 30, 2022
2 parents 433dbb2 + 43d1bb7 commit ededc59
Show file tree
Hide file tree
Showing 10 changed files with 504 additions and 199 deletions.
17 changes: 14 additions & 3 deletions bothub/api/v2/repository/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -859,10 +859,11 @@ def get_nlp_server(self, obj):
return settings.BOTHUB_NLP_BASE_URL

def get_version_default(self, obj):
current_version = obj.repository.current_version()
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,
"id": current_version.repository_version.pk,
"repository_version_language_id": current_version.pk,
"name": current_version.repository_version.name,
}

def get_repository_score(self, obj):
Expand Down Expand Up @@ -1672,3 +1673,13 @@ def to_representation(self, instance):
if data.get("organization"):
data.pop("organization")
return data


class RepositoryCloneSerializer(serializers.Serializer):

repository = serializers.PrimaryKeyRelatedField(
queryset=Repository.objects.all(), required=True
)
owner = serializers.PrimaryKeyRelatedField(
queryset=RepositoryOwner.objects.all(), required=True
)
30 changes: 29 additions & 1 deletion bothub/api/v2/repository/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
WordDistributionSerializer,
RemoveRepositoryProject,
AddRepositoryProjectSerializer,
RepositoryCloneSerializer,
)

from bothub.api.v2.internal.connect_rest_client import (
Expand All @@ -133,7 +134,14 @@ class NewRepositoryViewSet(
Manager repository (bot).
"""

queryset = RepositoryVersion.objects
queryset = (
RepositoryVersion.objects.all()
.select_related(
"repository",
"repository__owner",
)
.prefetch_related("repository__categories")
)
lookup_field = "repository__uuid"
lookup_fields = ["repository__uuid", "pk"]
serializer_class = NewRepositorySerializer
Expand Down Expand Up @@ -506,6 +514,7 @@ def languagesstatus(self, request, **kwargs):
serializer_class=TrainSerializer,
)
def train(self, request, **kwargs):

"""
Train current update using Bothub NLP service
"""
Expand Down Expand Up @@ -1069,6 +1078,8 @@ def destroy(self, request, *args, **kwargs):


class RepositoryTokenByUserViewSet(mixins.ListModelMixin, GenericViewSet):
serializer_class = RepositoryAuthorizationSerializer

def get_queryset(self):
user = self.request.user
if user.is_anonymous:
Expand Down Expand Up @@ -1497,3 +1508,20 @@ def get_serializer(self, *args, **kwargs):
kwargs["many"] = True

return super().get_serializer(*args, **kwargs)


class CloneRepositoryViewSet(mixins.CreateModelMixin, GenericViewSet):
queryset = Repository.objects.none()
serializer_class = RepositoryCloneSerializer
permission_classes = (IsAuthenticated,)

def create(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)

owner_id = serializer.data.get("owner")
repository_id = serializer.data.get("repository")
repository = Repository.objects.get(pk=repository_id)

slug, message, http_status = repository.clone_self(owner_id)
return Response(slug if slug else message, status=http_status)
109 changes: 57 additions & 52 deletions bothub/api/v2/routers.py
Original file line number Diff line number Diff line change
@@ -1,78 +1,81 @@
from rest_framework import routers

from bothub.api.v2.internal.organization.views import InternalOrganizationViewSet
from bothub.api.v2.internal.repository.views import InternalRepositoriesViewSet
from bothub.api.v2.internal.user.views import (
UserLanguageViewSet,
UserPermissionViewSet,
UserViewSet,
)
from bothub.api.v2.versionning.views import RepositoryVersionViewSet
from .account.views import ChangePasswordViewSet
from .account.views import LoginViewSet
from .account.views import MyUserProfileViewSet
from .account.views import RegisterUserViewSet
from .account.views import RequestResetPasswordViewSet
from .account.views import ResetPasswordViewSet
from .account.views import SearchUserViewSet
from .account.views import UserProfileViewSet
from .evaluate.views import EvaluateViewSet
from .evaluate.views import ResultsListViewSet

from .account.views import (
ChangePasswordViewSet,
LoginViewSet,
MyUserProfileViewSet,
RegisterUserViewSet,
RequestResetPasswordViewSet,
ResetPasswordViewSet,
SearchUserViewSet,
UserProfileViewSet,
)
from .evaluate.views import EvaluateViewSet, ResultsListViewSet
from .examples.views import ExamplesViewSet
from .groups.views import RepositoryEntityGroupViewSet
from .knowledge_base.views import QAKnowledgeBaseViewSet, QAtextViewSet
from .nlp.views import NLPLangsViewSet, RepositoryQANLPLogsViewSet
from .nlp.views import RepositoryAuthorizationEvaluateViewSet
from .nlp.views import RepositoryAuthorizationInfoViewSet
from .nlp.views import RepositoryAuthorizationParseViewSet
from .nlp.views import (
RepositoryAuthorizationTrainViewSet,
RepositoryNLPLogsViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationExamplesViewSet,
NLPLangsViewSet,
RepositoryAuthorizationAutomaticEvaluateViewSet,
RepositoryAuthorizationEvaluateViewSet,
RepositoryAuthorizationExamplesViewSet,
RepositoryAuthorizationInfoViewSet,
RepositoryAuthorizationKnowledgeBaseViewSet,
RepositoryAuthorizationParseViewSet,
RepositoryAuthorizationTrainLanguagesViewSet,
RepositoryAuthorizationTrainViewSet,
RepositoryNLPLogsViewSet,
RepositoryQANLPLogsViewSet,
RepositoryUpdateInterpretersViewSet,
)
from .nlp.views import RepositoryUpdateInterpretersViewSet
from .organization.views import (
OrganizationViewSet,
OrganizationProfileViewSet,
OrganizationAuthorizationViewSet,
OrganizationProfileViewSet,
OrganizationViewSet,
)
from .repository.views import (
RepositoriesContributionsViewSet,
RepositoryQANLPLogViewSet,
)
from .repository.views import RepositoriesViewSet
from .repository.views import RepositoryAuthorizationRequestsViewSet
from .repository.views import RepositoryAuthorizationViewSet
from .repository.views import RepositoryTokenByUserViewSet
from .repository.views import RepositoryCategoriesView
from .repository.views import RepositoryExampleViewSet
from .repository.views import RepositoryMigrateViewSet
from .repository.views import (
RepositoryViewSet,
RepositoryNLPLogViewSet,
RepositoryEntitiesViewSet,
CloneRepositoryViewSet,
NewRepositoryViewSet,
RasaUploadViewSet,
RepositoryTaskQueueViewSet,
RepositoriesContributionsViewSet,
RepositoriesPermissionsViewSet,
RepositoryNLPLogReportsViewSet,
RepositoriesViewSet,
RepositoryAuthorizationRequestsViewSet,
RepositoryAuthorizationViewSet,
RepositoryCategoriesView,
RepositoryEntitiesViewSet,
RepositoryExamplesBulkViewSet,
RepositoryExampleViewSet,
RepositoryIntentViewSet,
RepositoryTranslatorInfoViewSet,
RepositoryMigrateViewSet,
RepositoryNLPLogReportsViewSet,
RepositoryNLPLogViewSet,
RepositoryQANLPLogViewSet,
RepositoryTaskQueueViewSet,
RepositoryTokenByUserViewSet,
RepositoryTrainInfoViewSet,
RepositoryExamplesBulkViewSet,
RepositoryTranslatorInfoViewSet,
RepositoryViewSet,
RepositoryVotesViewSet,
SearchRepositoriesViewSet,
)
from .translation.views import (
RepositoryTranslatedExampleViewSet,
RepositoryTranslatedExporterViewSet,
)
from .repository.views import RepositoryVotesViewSet
from .repository.views import SearchRepositoriesViewSet
from .translation.views import RepositoryTranslatedExampleViewSet
from .translation.views import RepositoryTranslatedExporterViewSet
from .translator.views import (
TranslatorExamplesViewSet,
RepositoryTranslationTranslatorExampleViewSet,
RepositoryTranslatorViewSet,
)

from bothub.api.v2.internal.repository.views import InternalRepositoriesViewSet
from bothub.api.v2.internal.organization.views import InternalOrganizationViewSet
from bothub.api.v2.internal.user.views import (
UserPermissionViewSet,
UserViewSet,
UserLanguageViewSet,
TranslatorExamplesViewSet,
)


Expand Down Expand Up @@ -205,6 +208,8 @@ def get_lookup_regex(self, viewset, lookup_prefix=""):
router.register("repository/upload-rasa-file", RasaUploadViewSet)
router.register("repository/entity/group", RepositoryEntityGroupViewSet)
router.register("repository/repository-migrate", RepositoryMigrateViewSet)
router.register("repository/clone-repository", CloneRepositoryViewSet)

router.register(
"repository/nlp/authorization/train", RepositoryAuthorizationTrainViewSet
)
Expand Down
Loading

0 comments on commit ededc59

Please sign in to comment.