Skip to content

Commit

Permalink
Merge branch 'main' into local-job-class
Browse files Browse the repository at this point in the history
  • Loading branch information
kt474 authored Jan 2, 2025
2 parents fc15f6c + 0f345d8 commit 7e98a99
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 18 deletions.
5 changes: 5 additions & 0 deletions qiskit_ibm_runtime/api/rest/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ class RestAdapterBase:

_HEADER_JSON_CONTENT = {"Content-Type": "application/json"}

_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 @@ -31,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
8 changes: 4 additions & 4 deletions qiskit_ibm_runtime/api/rest/cloud_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def configuration(self) -> Dict[str, Any]:
JSON response of backend configuration.
"""
url = self.get_url("configuration")
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 @@ -61,7 +61,7 @@ def properties(self, datetime: Optional[python_datetime] = None) -> Dict[str, An
if datetime:
params["updated_before"] = datetime.isoformat()

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 @@ -74,7 +74,7 @@ def pulse_defaults(self) -> Dict[str, Any]:
JSON response of pulse defaults.
"""
url = self.get_url("pulse_defaults")
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 @@ -83,7 +83,7 @@ def status(self) -> Dict[str, Any]:
JSON response of backend status.
"""
url = self.get_url("status")
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
11 changes: 8 additions & 3 deletions qiskit_ibm_runtime/api/rest/program_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,10 @@ def get(self, exclude_params: bool = None) -> Dict:
payload = {}
if exclude_params:
payload["exclude_params"] = "true"
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 @@ -98,12 +101,14 @@ def metadata(self) -> Dict:
Returns:
Job Metadata.
"""
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.
"""
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
)
12 changes: 8 additions & 4 deletions qiskit_ibm_runtime/api/rest/root.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ def hubs(self) -> List[Dict[str, Any]]:
JSON response.
"""
url = self.get_url("hubs")
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 @@ -69,7 +70,7 @@ def version(self) -> Dict[str, Union[str, bool]]:
* ``api-*`` (str): The versions of each individual API component
"""
url = self.get_url("version")
response = self.session.get(url)
response = self.session.get(url, headers=self._HEADER_JSON_ACCEPT)

try:
version_info = response.json()
Expand All @@ -89,7 +90,9 @@ def login(self, api_token: str) -> Dict[str, Any]:
JSON response.
"""
url = self.get_url("login")
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 @@ -98,6 +101,7 @@ def user_info(self) -> Dict[str, Any]:
JSON response of user information.
"""
url = self.get_url("user_info")
response = self.session.get(url).json()

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

return response
12 changes: 8 additions & 4 deletions qiskit_ibm_runtime/api/rest/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,9 @@ def program_run(
if private:
payload["private"] = True
data = json.dumps(payload, cls=RuntimeEncoder)
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 @@ -195,7 +197,7 @@ def jobs_get(
payload["sort"] = "ASC"
if all([hub, group, project]):
payload["provider"] = f"{hub}/{group}/{project}"
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 @@ -226,7 +228,9 @@ def backends(
params = {}
if hgp:
params["provider"] = hgp
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 @@ -235,4 +239,4 @@ def usage(self) -> Dict[str, Any]:
JSON response.
"""
url = self.get_url("usage")
return self.session.get(url).json()
return self.session.get(url, headers=self._HEADER_JSON_ACCEPT).json()
7 changes: 4 additions & 3 deletions qiskit_ibm_runtime/api/rest/runtime_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def create(
payload["max_session_ttl"] = max_time # type: ignore[assignment]
else:
payload["max_ttl"] = max_time # type: ignore[assignment]
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,7 +74,7 @@ def close(self) -> None:
payload = {"accepting_jobs": False}
url = self.get_url("self")
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 @@ -83,4 +83,5 @@ def close(self) -> None:

def details(self) -> Dict[str, Any]:
"""Return the details of this session."""
return self.session.get(self.get_url("self")).json()

return self.session.get(self.get_url("self"), headers=self._HEADER_JSON_ACCEPT).json()
5 changes: 5 additions & 0 deletions test/unit/test_runtime_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,8 @@ def test_custom_client_app_header(self):
client._session.custom_header = None
client._session._set_custom_header()
self.assertNotIn(custom_header, client._session.headers["X-Qx-Client-Application"])

def test_header_api_version(self):
"""Test IBM-API-Version is in header."""
client = self._get_client()
self.assertIn("IBM-API-Version", client._session.headers)

0 comments on commit 7e98a99

Please sign in to comment.