from abc import ABC from server.legacy.core.exceptions import UnsupportedVendor class BaseVendor(ABC): """Base vendor class to inherit from.""" vendor: str class VendorClient(ABC): """Base class for clients which allows to get corresponding vendor_class object by 'get_vendor' method, based on the options specified in client 'vendors' attribute. Attributes: vendors: tuple of BaseVendor concrete subclasses corresponding to supported vendors. """ vendors: tuple def __init__(self): self._vendors_cls_map = {cls.vendor: cls for cls in self.vendors} self._vendors_map = {} def get_vendor(self, vendor: str): obj = self._vendors_map.get(vendor) if obj is not None: return obj cls = self._vendors_cls_map.get(vendor) if cls is None: raise UnsupportedVendor(service=self.__class__.__name__, vendor=vendor) obj = cls() self._vendors_map[vendor] = obj return obj