Source code for pyrestsdk._abstract_service_client
"""House Abstract Service Client"""
from typing import TypeVar, Type
from abc import ABC, abstractmethod
from requests import Response, Session
S = TypeVar("S", bound="AbstractServiceClient")
[docs]class AbstractServiceClient(ABC):
"""Abstract Service Client Type"""
def __new__(cls: Type[S], *args, **kwargs) -> S:
if getattr(AbstractServiceClient, "__instance", None) is None:
AbstractServiceClient.__instance = object.__new__(cls)
return AbstractServiceClient.__instance
[docs] @abstractmethod
def get(self, url: str, **kwargs) -> Response:
r"""Sends a GET request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def options(self, url: str, **kwargs) -> Response:
r"""Sends a OPTIONS request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def head(self, url: str, **kwargs) -> Response:
r"""Sends a HEAD request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def post(self, url: str, data=None, json=None, **kwargs) -> Response:
r"""Sends a POST request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def put(self, url: str, data=None, **kwargs) -> Response:
r"""Sends a PUT request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def patch(self, url: str, data=None, **kwargs) -> Response:
r"""Sends a PATCH request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
[docs] @abstractmethod
def delete(self, url: str, **kwargs) -> Response:
r"""Sends a DELETE request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
@abstractmethod
def _get_session(self, /, **kwargs) -> Session:
"""Method to always retrun a single instance of an HTTP Client"""
@abstractmethod
def _instance_url(self, url: str) -> str:
"""Appends BASE_URL to user provided path
:param url: user provided path
:return: graph_url
"""