Skip to content

Commit

Permalink
Refactor and add api version
Browse files Browse the repository at this point in the history
  • Loading branch information
kt474 committed Dec 18, 2024
1 parent 9e56dac commit 04d5d8f
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 36 deletions.
3 changes: 3 additions & 0 deletions qiskit_ibm_runtime/api/rest/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class RestAdapterBase:

_HEADER_JSON_ACCEPT = {"Accept": "application/json"}

_HEADER_API_VERSION = {"IBM-API-Version": "2024-01-01"}

def __init__(self, session: RetrySession, prefix_url: str = "") -> None:
"""RestAdapterBase constructor.
Expand All @@ -33,6 +35,7 @@ def __init__(self, session: RetrySession, prefix_url: str = "") -> None:
prefix_url: String to be prepend to all URLs.
"""
self.session = session
self.session.headers = self._HEADER_API_VERSION
self.prefix_url = prefix_url

def get_url(self, identifier: str) -> str:
Expand Down
12 changes: 4 additions & 8 deletions qiskit_ibm_runtime/api/rest/cloud_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ def configuration(self) -> Dict[str, Any]:
JSON response of backend configuration.
"""
url = self.get_url("configuration")
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url).json()
return self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()

def properties(self, datetime: Optional[python_datetime] = None) -> Dict[str, Any]:
"""Return backend properties.
Expand All @@ -62,8 +61,7 @@ def properties(self, datetime: Optional[python_datetime] = None) -> Dict[str, An
if datetime:
params["updated_before"] = datetime.isoformat()

self.session.headers.update(self._HEADER_JSON_ACCEPT)
response = self.session.get(url, params=params).json()
response = self.session.get(url, params=params, headers=self._HEADER_JSON_ACCEPT).json()
# Adjust name of the backend.
if response:
response["backend_name"] = self.backend_name
Expand All @@ -76,8 +74,7 @@ def pulse_defaults(self) -> Dict[str, Any]:
JSON response of pulse defaults.
"""
url = self.get_url("pulse_defaults")
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url).json()
return self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()

def status(self) -> Dict[str, Any]:
"""Return backend status.
Expand All @@ -86,8 +83,7 @@ def status(self) -> Dict[str, Any]:
JSON response of backend status.
"""
url = self.get_url("status")
self.session.headers.update(self._HEADER_JSON_ACCEPT)
response = self.session.get(url).json()
response = self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()
# Adjust fields according to the specs (BackendStatus).
ret = {
"backend_name": self.backend_name,
Expand Down
13 changes: 7 additions & 6 deletions qiskit_ibm_runtime/api/rest/program_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ def get(self, exclude_params: bool = None) -> Dict:
if exclude_params:
payload["exclude_params"] = "true"

self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(self.get_url("self"), params=payload).json(cls=RuntimeDecoder)
return self.session.get(
self.get_url("self"), params=payload, headers=self._HEADER_JSON_ACCEPT
).json(cls=RuntimeDecoder)

def delete(self) -> None:
"""Delete program job."""
Expand Down Expand Up @@ -100,14 +101,14 @@ def metadata(self) -> Dict:
Returns:
Job Metadata.
"""
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(self.get_url("metrics")).json()
return self.session.get(self.get_url("metrics"), headers=self._HEADER_JSON_ACCEPT).json()

def update_tags(self, tags: list) -> Response:
"""Update job tags.
Returns:
API Response.
"""
self.session.headers.update(self._HEADER_JSON_CONTENT)
return self.session.put(self.get_url("tags"), data=json.dumps({"tags": tags}))
return self.session.put(
self.get_url("tags"), data=json.dumps({"tags": tags}), headers=self._HEADER_JSON_CONTENT
)
14 changes: 6 additions & 8 deletions qiskit_ibm_runtime/api/rest/root.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ def hubs(self) -> List[Dict[str, Any]]:
"""
url = self.get_url("hubs")

self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url).json()
return self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()

def version(self) -> Dict[str, Union[str, bool]]:
"""Return the version information.
Expand All @@ -71,8 +70,7 @@ def version(self) -> Dict[str, Union[str, bool]]:
* ``api-*`` (str): The versions of each individual API component
"""
url = self.get_url("version")
self.session.headers.update(self._HEADER_JSON_ACCEPT)
response = self.session.get(url)
response = self.session.get(url, headers=self._HEADER_JSON_ACCEPT)

try:
version_info = response.json()
Expand All @@ -92,8 +90,9 @@ def login(self, api_token: str) -> Dict[str, Any]:
JSON response.
"""
url = self.get_url("login")
self.session.headers.update(self._HEADER_JSON_CONTENT)
return self.session.post(url, json={"apiToken": api_token}).json()
return self.session.post(
url, json={"apiToken": api_token}, headers=self._HEADER_JSON_CONTENT
).json()

def user_info(self) -> Dict[str, Any]:
"""Return user information.
Expand All @@ -103,7 +102,6 @@ def user_info(self) -> Dict[str, Any]:
"""
url = self.get_url("user_info")

self.session.headers.update(self._HEADER_JSON_ACCEPT)
response = self.session.get(url).json()
response = self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()

return response
16 changes: 8 additions & 8 deletions qiskit_ibm_runtime/api/rest/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,9 @@ def program_run(
if private:
payload["private"] = True
data = json.dumps(payload, cls=RuntimeEncoder)
self.session.headers.update(self._HEADER_JSON_CONTENT)
return self.session.post(url, data=data, timeout=900).json()
return self.session.post(
url, data=data, timeout=900, headers=self._HEADER_JSON_CONTENT
).json()

def jobs_get(
self,
Expand Down Expand Up @@ -196,8 +197,7 @@ def jobs_get(
payload["sort"] = "ASC"
if all([hub, group, project]):
payload["provider"] = f"{hub}/{group}/{project}"
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url, params=payload).json()
return self.session.get(url, params=payload, headers=self._HEADER_JSON_ACCEPT).json()

def backend(self, backend_name: str) -> CloudBackend:
"""Return an adapter for the IBM backend.
Expand Down Expand Up @@ -228,8 +228,9 @@ def backends(
params = {}
if hgp:
params["provider"] = hgp
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url, params=params, timeout=timeout).json()
return self.session.get(
url, params=params, timeout=timeout, headers=self._HEADER_JSON_ACCEPT
).json()

def usage(self) -> Dict[str, Any]:
"""Return monthly open plan usage information.
Expand All @@ -238,5 +239,4 @@ def usage(self) -> Dict[str, Any]:
JSON response.
"""
url = self.get_url("usage")
self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(url).json()
return self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()
9 changes: 3 additions & 6 deletions qiskit_ibm_runtime/api/rest/runtime_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ def create(
payload["max_session_ttl"] = max_time # type: ignore[assignment]
else:
payload["max_ttl"] = max_time # type: ignore[assignment]
self.session.headers.update(self._HEADER_JSON_CONTENT)
return self.session.post(url, json=payload).json()
return self.session.post(url, json=payload, headers=self._HEADER_JSON_CONTENT).json()

def cancel(self) -> None:
"""Cancel all jobs in the session."""
Expand All @@ -74,9 +73,8 @@ def close(self) -> None:
"""Set accepting_jobs flag to false, so no more jobs can be submitted."""
payload = {"accepting_jobs": False}
url = self.get_url("self")
self.session.headers.update(self._HEADER_JSON_CONTENT)
try:
self.session.patch(url, json=payload)
self.session.patch(url, json=payload, headers=self._HEADER_JSON_CONTENT)
except RequestsApiError as ex:
if ex.status_code == 404:
pass
Expand All @@ -86,5 +84,4 @@ def close(self) -> None:
def details(self) -> Dict[str, Any]:
"""Return the details of this session."""

self.session.headers.update(self._HEADER_JSON_ACCEPT)
return self.session.get(self.get_url("self")).json()
return self.session.get(self.get_url("self"), headers=self._HEADER_JSON_ACCEPT).json()

0 comments on commit 04d5d8f

Please sign in to comment.