Skip to content

Commit

Permalink
Feat: job provider list in serverless client (#1588)
Browse files Browse the repository at this point in the history
* feat: job provider list endpoint

* fix lint

* apply partial review suggestions

* fix provider-endpoint

* change serializer for provider_list

* feat: job provider list client

* fix lint

* wip

* fix lint

* fix url for provider-list

* action tag added to provider_list

---------

Co-authored-by: David <[email protected]>
  • Loading branch information
paaragon and Tansito authored Feb 24, 2025
1 parent dee2888 commit 21e9782
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
43 changes: 41 additions & 2 deletions client/qiskit_serverless/core/clients/serverless_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
_trace_functions = trace_decorator_factory("function")


class ServerlessClient(BaseClient):
class ServerlessClient(BaseClient): # pylint: disable=too-many-public-methods
"""
A client for connecting to a specified host.
Expand Down Expand Up @@ -159,7 +159,46 @@ def jobs(self, **kwargs) -> List[Job]:

response_data = safe_json_request_as_dict(
request=lambda: requests.get(
f"{self.host}/api/{self.version}/jobs",
f"{self.host}/api/{self.version}/jobs/",
params=kwargs,
headers={"Authorization": f"Bearer {self.token}"},
timeout=REQUESTS_TIMEOUT,
)
)

return [
Job(job.get("id"), job_service=self, raw_data=job)
for job in response_data.get("results", [])
]

@_trace_job("provider_list")
def provider_jobs(self, function: QiskitFunction, **kwargs) -> List[Job]:
"""List of jobs created in this provider and function.
Args:
function: QiskitFunction
**kwargs: additional parameters for the request
Raises:
QiskitServerlessException: validation exception
Returns:
[Job] : list of jobs
"""

if not function.provider:
raise QiskitServerlessException("`function` doesn't have a provider.")

limit = kwargs.get("limit", 10)
kwargs["limit"] = limit
offset = kwargs.get("offset", 0)
kwargs["offset"] = offset
kwargs["function"] = function.title
kwargs["provider"] = function.provider

response_data = safe_json_request_as_dict(
request=lambda: requests.get(
f"{self.host}/api/{self.version}/jobs/provider/",
params=kwargs,
headers={"Authorization": f"Bearer {self.token}"},
timeout=REQUESTS_TIMEOUT,
Expand Down
1 change: 1 addition & 0 deletions gateway/api/views/jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ def list(self, request):
serializer = self.get_serializer_job_without_result(queryset, many=True)
return Response(serializer.data)

@action(methods=["GET"], detail=False, url_path="provider")
def provider_list(self, request):
"""
It returns a list with the jobs for the provider function:
Expand Down

0 comments on commit 21e9782

Please sign in to comment.