Skip to content

Commit

Permalink
add filter to job
Browse files Browse the repository at this point in the history
  • Loading branch information
akihikokuroda committed Aug 22, 2024
1 parent 7967d59 commit 3ed1d49
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 9 deletions.
30 changes: 24 additions & 6 deletions gateway/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,10 @@ def get_queryset(self):
type_filter = self.request.query_params.get("filter")

author_programs = self._get_program_queryset_for_title_and_provider(
author=author, title=title, provider_name=provider_name, type_filter=type_filter
author=author,
title=title,
provider_name=provider_name,
type_filter=type_filter,
).distinct()

author_programs_count = author_programs.count()
Expand Down Expand Up @@ -314,7 +317,11 @@ def get_by_title(self, request, title):
return Response(status=404)

def _get_program_queryset_for_title_and_provider(
self, author, title: str, provider_name: Optional[str], type_filter: Optional[str]
self,
author,
title: str,
provider_name: Optional[str],
type_filter: Optional[str],
):
"""Returns queryset for program for gived request, title and provider."""
view_program_permission = Permission.objects.get(
Expand All @@ -333,11 +340,13 @@ def _get_program_queryset_for_title_and_provider(
)
provider_exists_criteria = ~Q(provider=None)
result_queryset = Program.objects.filter(
groups_with_view_permissions_criteria & provider_exists_criteria
groups_with_view_permissions_criteria & provider_exists_criteria
)
return result_queryset
elif type_filter == "serverless":
result_queryset = Program.objects.filter(Q(author=author) & Q(provider=None))
if type_filter == "serverless":
result_queryset = Program.objects.filter(
Q(author=author) & Q(provider=None)
)
return result_queryset

user_criteria = Q(user=author)
Expand Down Expand Up @@ -377,7 +386,6 @@ def _get_program_queryset_for_title_and_provider(
)
return result_queryset


@action(methods=["GET"], detail=True)
def get_jobs(
self, request, pk=None
Expand Down Expand Up @@ -423,6 +431,16 @@ def get_serializer_class(self):
return self.serializer_class

def get_queryset(self):
type_filter = self.request.query_params.get("filter")
if type_filter:
if type_filter == "catalog":
user_criteria = Q(author=self.request.user)
provider_exists_criteria = ~Q(program__provider=None)
return Job.objects.filter(user_criteria & provider_exists_criteria)
if type_filter == "serverless":
user_criteria = Q(author=self.request.user)
provider_not_exists_criteria = Q(program__provider=None)
return Job.objects.filter(user_criteria & provider_not_exists_criteria)
return Job.objects.filter(author=self.request.user).order_by("-created")

def retrieve(self, request, pk=None): # pylint: disable=unused-argument
Expand Down
33 changes: 33 additions & 0 deletions gateway/tests/api/test_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,39 @@ def test_job_list(self):
jobs_response.data.get("results")[0].get("result"), '{"somekey":1}'
)

def test_job_catalog_list(self):
"""Tests job list authorized."""
self._authorize()

jobs_response = self.client.get(
reverse("v1:jobs-list"), {"filter": "catalog"}, format="json"
)
self.assertEqual(jobs_response.status_code, status.HTTP_200_OK)
self.assertEqual(jobs_response.data.get("count"), 1)
self.assertEqual(jobs_response.data.get("results")[0].get("status"), "QUEUED")
self.assertEqual(
jobs_response.data.get("results")[0].get("result"), '{"somekey":1}'
)

def test_job_serverless_list(self):
"""Tests job list authorized."""
self._authorize()

jobs_response = self.client.get(
reverse("v1:jobs-list"), {"filter": "serverless"}, format="json"
)
self.assertEqual(jobs_response.status_code, status.HTTP_200_OK)
self.assertEqual(jobs_response.data.get("count"), 2)
job_status = jobs_response.data.get("results")[0].get("status")
if job_status == "SUCCEEDED":
self.assertEqual(
jobs_response.data.get("results")[0].get("result"), '{"somekey":1}'
)
elif job_status == "QUEUED":
self.assertEqual(
jobs_response.data.get("results")[0].get("result"), '{"somekey":2}'
)

def test_job_detail(self):
"""Tests job detail authorized."""
self._authorize()
Expand Down
8 changes: 6 additions & 2 deletions gateway/tests/api/test_v1_program.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ def test_provider_programs_catalog_list(self):
user = models.User.objects.get(username="test_user_4")
self.client.force_authenticate(user=user)

programs_response = self.client.get(reverse("v1:programs-list"), {"filter": "catalog"}, format="json")
programs_response = self.client.get(
reverse("v1:programs-list"), {"filter": "catalog"}, format="json"
)

self.assertEqual(programs_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(programs_response.data), 1)
Expand All @@ -82,7 +84,9 @@ def test_provider_programs_serverless_list(self):
user = models.User.objects.get(username="test_user_3")
self.client.force_authenticate(user=user)

programs_response = self.client.get(reverse("v1:programs-list"), {"filter": "serverless"},format="json")
programs_response = self.client.get(
reverse("v1:programs-list"), {"filter": "serverless"}, format="json"
)

self.assertEqual(programs_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(programs_response.data), 1)
Expand Down
2 changes: 1 addition & 1 deletion gateway/tests/fixtures/fixtures.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
"fields": {
"program": "1a7947f9-6ae8-4e3d-ac1e-e7d608deec82",
"created": "2023-02-01T15:30:43.281796Z",
"result": "{\"somekey\":1}",
"result": "{\"somekey\":2}",
"status": "QUEUED",
"author": 1
}
Expand Down

0 comments on commit 3ed1d49

Please sign in to comment.