from dataclasses import dataclass
from .base import StrOrDict
from .rest import RestSession
__all__ = ['ApiChild']
[docs]
@dataclass(init=False)
class ApiChild:
"""
Base class for child APIs of :class:`WebexSimpleApi`
"""
session: RestSession
def __init__(self, *, session: RestSession, base: str = None):
#: REST session
self.session = session
if base:
self.base = base
# noinspection PyMethodOverriding
def __init_subclass__(cls, base: str):
"""
Subclass registration hook. Each APIChild has a specific endpoint prefix which we gather at subclass
registration time-
:param base: APIChild specific URL path
"""
super().__init_subclass__()
# save endpoint prefix
cls.base = base
[docs]
def ep(self, path: str = None):
"""
endpoint URL for given path
:param path: path after APIChild subclass specific endpoint URI prefix
:type path: str
:return: endpoint URL
:rtype: str
"""
path = path and f'/{path}' or ''
return self.session.ep(f'{self.base}{path}')
[docs]
def get(self, *args, **kwargs) -> StrOrDict:
"""
GET request
:param args:
:param kwargs:
:return:
"""
return self.session.rest_get(*args, **kwargs)
[docs]
def post(self, *args, **kwargs) -> StrOrDict:
"""
POST request
:param args:
:param kwargs:
:return:
"""
return self.session.rest_post(*args, **kwargs)
[docs]
def put(self, *args, **kwargs) -> StrOrDict:
"""
PUT request
:param args:
:param kwargs:
:return:
"""
return self.session.rest_put(*args, **kwargs)
[docs]
def delete(self, *args, **kwargs) -> None:
"""
DELETE request
:param args:
:param kwargs:
"""
self.session.rest_delete(*args, **kwargs)
[docs]
def patch(self, *args, **kwargs) -> StrOrDict:
"""
PATCH request
:param args:
:param kwargs:
"""
return self.session.rest_patch(*args, **kwargs)