Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/remove rest client from celery #727

Merged
merged 6 commits into from
Jul 21, 2022
15 changes: 11 additions & 4 deletions bothub/api/v2/repository/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
CanContributeInRepositoryTranslatedExampleValidator,
)

from bothub.api.v2.internal.connect_rest_client import (
ConnectRESTClient as ConnectClient,
)


class RequestRepositoryAuthorizationSerializer(serializers.ModelSerializer):
class Meta:
Expand Down Expand Up @@ -1654,10 +1658,13 @@ class AddRepositoryProjectSerializer(serializers.Serializer):
project_uuid = serializers.CharField(required=True)

def create(self, validated_data):
task = celery_app.send_task(
name="create_repository_project", kwargs=validated_data
)
task.wait()
if settings.USE_GRPC:
task = celery_app.send_task(
name="create_repository_project", kwargs=validated_data
)
task.wait()
else:
task = ConnectClient().create_classifier(**validated_data)
return validated_data

def to_representation(self, instance):
Expand Down
117 changes: 78 additions & 39 deletions bothub/api/v2/repository/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,19 +253,26 @@ def projectrepository(self, request, **kwargs):
if not authorization.can_contribute:
raise PermissionDenied()

task = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
task.wait()
if settings.USE_GRPC:
task = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
task.wait()
authorizations = task.result
repositories = repository.authorizations.filter(uuid__in=authorizations)

repositories = repository.authorizations.filter(uuid__in=task.result)
else:
authorizations = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)
repositories = repository.authorizations.filter(uuid__in=authorizations)

data = dict(in_project=repositories.exists())

if organization:

organization_authorization = (
organization.organization_authorizations.filter(uuid__in=task.result)
organization.organization_authorizations.filter(uuid__in=authorizations)
)
data["in_project"] = (
data["in_project"] or organization_authorization.exists()
Expand Down Expand Up @@ -305,16 +312,27 @@ def remove_repository_project(self, request, **kwargs):
if not user_authorization.is_admin:
raise PermissionDenied()

project_organization = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
project_organization.wait()
if settings.USE_GRPC:
project_organization = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
project_organization.wait()
project_organization = project_organization.result
authorizations = list(
repository.authorizations.filter(
uuid__in=project_organization
).values_list("uuid", flat=True)
)

authorizations = list(
repository.authorizations.filter(
uuid__in=project_organization.result
).values_list("uuid", flat=True)
)
else:
project_organization = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)
authorizations = list(
repository.authorizations.filter(
uuid__in=project_organization
).values_list("uuid", flat=True)
)

if organization:
organization_authorization = organization.get_organization_authorization(
Expand All @@ -325,7 +343,7 @@ def remove_repository_project(self, request, **kwargs):

authorizations += list(
organization.organization_authorizations.filter(
uuid__in=project_organization.result
uuid__in=project_organization
).values_list("uuid", flat=True)
)

Expand All @@ -338,11 +356,20 @@ def remove_repository_project(self, request, **kwargs):
lambda authorization: str(authorization), authorizations
)

task = celery_app.send_task(
name="remove_authorizations_project",
args=[project_uuid, list(authorizations_uuids), request.user.email],
)
task.wait()
if settings.USE_GRPC:
task = celery_app.send_task(
name="remove_authorizations_project",
args=[project_uuid, list(authorizations_uuids), request.user.email],
)
task.wait()
else:
task = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)
for authorization_uuid in authorizations_uuids:
ConnectClient().remove_authorization(
project_uuid, authorization_uuid, request.user.email
)

return Response(status=status.HTTP_204_NO_CONTENT)

Expand Down Expand Up @@ -385,14 +412,22 @@ def add_repository_project(self, request, **kwargs):

project_uuid = serializer.validated_data.get("project_uuid")

task = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
task.wait()
if settings.USE_GRPC:
task = celery_app.send_task(
name="get_project_organization", args=[project_uuid]
)
task.wait()

organization_authorization = organization.organization_authorizations.filter(
uuid__in=task.result
)
organization_authorization = (
organization.organization_authorizations.filter(uuid__in=task.result)
)
else:
task = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)
organization_authorization = (
organization.organization_authorizations.filter(uuid__in=task)
)

if organization_authorization.exists():
raise ValidationError(_("Repository already added"))
Expand Down Expand Up @@ -807,17 +842,21 @@ def list_project_organizatiton(self, request, **kwargs):
if not project_uuid:
raise ValidationError(_("Need to pass 'project_uuid' in query params"))

# task = celery_app.send_task(
# name="get_project_organization", args=[project_uuid, request.user.email]
# )
# task.wait()
authorizations = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)

repositories = Repository.objects.filter(
authorizations__uuid__in=authorizations
)
if settings.USE_GRPC:
task = celery_app.send_task(
name="get_project_organization", args=[project_uuid, request.user.email]
)
task.wait()
repositories = Repository.objects.filter(
authorizations__uuid__in=task.result
)
else:
authorizations = ConnectClient().list_authorizations(
project_uuid=project_uuid, user_email=request.user.email
)
repositories = Repository.objects.filter(
authorizations__uuid__in=authorizations
)

serialized_data = ShortRepositorySerializer(repositories, many=True)
return Response(serialized_data.data)
Expand Down