Source code for worldline.acquiring.sdk.api_resource
from typing import Mapping, Optional
from .communicator import Communicator
[docs]
class ApiResource(object):
"""
Base class of all Worldline Acquiring platform API resources.
"""
[docs]
def __init__(self, parent: Optional['ApiResource'] = None, communicator: Optional[Communicator] = None,
path_context: Optional[Mapping[str, str]] = None):
"""
The parent and/or communicator must be given.
"""
if not parent and not communicator:
raise ValueError("parent and/or communicator is required")
self.__parent = parent
self.__communicator = communicator if communicator else parent._communicator
self.__path_context = path_context
@property
def _communicator(self) -> Communicator:
return self.__communicator
def _instantiate_uri(self, uri: str, path_context: Optional[Mapping[str, str]]) -> str:
uri = self.__replace_all(uri, path_context)
uri = self.__instantiate_uri(uri)
return uri
def __instantiate_uri(self, uri: str) -> str:
uri = self.__replace_all(uri, self.__path_context)
if self.__parent is not None:
uri = self.__parent.__instantiate_uri(uri)
return uri
@staticmethod
def __replace_all(uri: str, path_context: Optional[Mapping[str, str]]) -> str:
if path_context:
for key, value in path_context.items():
uri = uri.replace("{" + key + "}", value)
return uri