Skip to main content

ServiceAPI, a base class for APIs which talk to a service, typically a web service via HTTP.

Project description

ServiceAPI, a base class for APIs which talk to a service, typically a web service via HTTP.

Latest release 20260531:

  • HTTPServiceAPI: add truediv(suburl) which does a GET.
  • HTTPServiceAPI: default .API_HOSTNAME comes from the subclass.
  • HTTPServiceAPI.json: catch requests.exceptions.JSONDecodeError also.
  • HTTPServiceAPI: new mode ("response", "json", "data", callable) parameter.
  • HTTPServiceAPI: new check_json optional dict of expected fields and values in JSON responses.

An instance of a ServiceAPI embodies some basic features that feel common to web based services:

  • a notion of a login
  • local state, an SQLTags for data about entities of the service
  • downloads, if that is a thing, with FSTags for file annotations

Short summary:

  • HTTPServiceAPI: HTTPServiceAPI base class for other APIs talking to HTTP services.
  • RequestsNoAuth: This is a special purpose subclass of requests.auth.AuthBase to apply no authorisation at all. This is for services with their own special purpose authorisation and avoids things like automatic netrc based auth.
  • ServiceAPI: SewrviceAPI base class for other APIs talking to services.

Module contents:

  • class HTTPServiceAPI(ServiceAPI): HTTPServiceAPI base class for other APIs talking to HTTP services.

    Subclasses must define:

    • API_BASE: the base URL of API calls. For example, the PlayOnAPI defines this as f'https://{API_HOSTNAME}/v3/'.

HTTPServiceAPI.get(self, suburl, **kw) -> requests.models.Response: Call slef.suburl with method="GET".

HTTPServiceAPI.post(self, suburl, **kw) -> requests.models.Response: Call slef.suburl with method="POST".

HTTPServiceAPI.response_as_json(self, rsp: requests.models.Response) -> dict: Return rsp.json().

HTTPServiceAPI.response_as_json_data(self, rsp: requests.models.Response) -> dict: Return the "data" element from a JSON response.

HTTPServiceAPI.suburl(self, suburl, *, base_url=None, method='GET', mode=None, check=True, cookies=None, headers=None, runstate: Optional[cs.resources.RunState] = <function uses_runstate.<locals>.<lambda> at 0x111844fe0>, verbose: bool, **rqkw) -> Union[requests.models.Response, dict]: Request suburl from the service, by default using a GET. The suburl must be a URL subpath not commencing with '/'.

Return:

  • mode(Response) if mode is callable
  • the Response if mode=="response"
  • the Response.json() if mode=="json"
  • the Response.json()["data"] if mode=="data"

Keyword parameters:

  • base_url: the base request domain, default from self.API_BASE
  • method: optional request method, default 'GET'
  • check: if true, raise an HTTP error if the response status is not 200; default True
  • cookies: optional cookie jar, default from self.cookies
  • mode: optional result mode, default from self.mode Other keyword parameters are passed to the requests method.
  • class RequestsNoAuth(requests.auth.AuthBase): This is a special purpose subclass of requests.auth.AuthBase to apply no authorisation at all. This is for services with their own special purpose authorisation and avoids things like automatic netrc based auth.
  • class ServiceAPI(cs.resources.MultiOpenMixin, cs.sqltags.UsesSQLTags): SewrviceAPI base class for other APIs talking to services.

ServiceAPI.available(self) -> Set[cs.sqltags.SQLTagSet]: Return a set of the SQLTagSet instances representing available items at the service, for example purchased books available to your login.

ServiceAPI.get_login_state(self, do_refresh=False) -> cs.tagset.HasTags: The login state, a HasTags, stored as login.state.login_userid. This performs a login if necessary or if do_refresh is true (default False).

ServiceAPI.login(self) -> Mapping: Do a login: authenticate to the service, return a mapping of related information.

Not all services require this and we expect such subclasses to avoid use of login-based methods.

ServiceAPI.login_expiry: Expiry UNIX time for the login state. This implementation returns None.

ServiceAPI.startup_shutdown(self): Open/close the FSTags and UsesTagSets.

Release Log

Release 20260531:

  • HTTPServiceAPI: add truediv(suburl) which does a GET.
  • HTTPServiceAPI: default .API_HOSTNAME comes from the subclass.
  • HTTPServiceAPI.json: catch requests.exceptions.JSONDecodeError also.
  • HTTPServiceAPI: new mode ("response", "json", "data", callable) parameter.
  • HTTPServiceAPI: new check_json optional dict of expected fields and values in JSON responses.

Release 20241007: HTTPServiceAPI.suburl: support interruption by RunState.cancel.

Release 20240723: ServiceAPI: acquire the fstags automatically at init.

Release 20230703: Retry logic for requests.

Release 20230217: Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cs_service_api-20260531.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cs_service_api-20260531-py2.py3-none-any.whl (6.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file cs_service_api-20260531.tar.gz.

File metadata

  • Download URL: cs_service_api-20260531.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for cs_service_api-20260531.tar.gz
Algorithm Hash digest
SHA256 5db3f2cec0256b711ff756bc4ef9ad04386e52e0815d3aee0e3cd7ed9f2839dd
MD5 e6adf99ba44246a4370b6a38b02c5e9c
BLAKE2b-256 564c1bf9424099d2515d3ac511b9f722eae3f96043452b4e7df0be36c3a83fcb

See more details on using hashes here.

File details

Details for the file cs_service_api-20260531-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for cs_service_api-20260531-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 fc2e31ddc744728a9b29218b8f0d0059a1fa3124846eafd483f4e49a29c81c31
MD5 7c8f7c5fa885291027ae5483512f3681
BLAKE2b-256 7a393beb29761e3d27fe8e955efaa20dfc2eb6c066e49ed6f016a3adb3bf4926

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page