"""Base class used by all hvac api "category" classes."""importloggingfromabcimportABCMeta,abstractpropertyfromhvac.api.vault_api_baseimportVaultApiBaselogger=logging.getLogger(__name__)
[docs]classVaultApiCategory(VaultApiBase):"""Base class for API categories."""__metaclass__=ABCMeta
[docs]def__init__(self,adapter):"""API Category class constructor. :param adapter: Instance of :py:class:`hvac.adapters.Adapter`; used for performing HTTP requests. :type adapter: hvac.adapters.Adapter """self._adapter=adapterself.implemented_class_names=[]forimplemented_classinself.implemented_classes:class_name=implemented_class.__name__.lower()self.implemented_class_names.append(class_name)auth_method_instance=implemented_class(adapter=adapter)setattr(self,self.get_private_attr_name(class_name),auth_method_instance)super(VaultApiCategory,self).__init__(adapter=adapter)
def__getattr__(self,item):"""Get an instance of an class instance in this category where available. :param item: Name of the class being requested. :type item: str | unicode :return: The requested class instance where available. :rtype: hvac.api.VaultApiBase """ifiteminself.implemented_class_names:private_attr_name=self.get_private_attr_name(item)returngetattr(self,private_attr_name)ifitemin[u.lower()foruinself.unimplemented_classes]:raiseNotImplementedError('"%s" auth method class not currently implemented.'%item)raiseAttributeError@propertydefadapter(self):"""Retrieve the adapter instance under the "_adapter" property in use by this class. :return: The adapter instance in use by this class. :rtype: hvac.adapters.Adapter """returnself._adapter@adapter.setterdefadapter(self,adapter):"""Sets the adapter instance under the "_adapter" property in use by this class. Also sets the adapter property for all implemented classes under this category. :param adapter: New adapter instance to set for this class and all implemented classes under this category. :type adapter: hvac.adapters.Adapter """self._adapter=adapterforimplemented_classinself.implemented_classes:class_name=implemented_class.__name__.lower()getattr(self,self.get_private_attr_name(class_name)).adapter=adapter@abstractpropertydefimplemented_classes(self):"""List of implemented classes under this category. :return: List of implemented classes under this category. :rtype: List[hvac.api.VaultApiBase] """raiseNotImplementedError@propertydefunimplemented_classes(self):"""List of known unimplemented classes under this category. :return: List of known unimplemented classes under this category. :rtype: List[str] """raiseNotImplementedError
[docs]@staticmethoddefget_private_attr_name(class_name):"""Helper method to prepend a leading underscore to a provided class name. :param class_name: Name of a class under this category. :type class_name: str|unicode :return: The private attribute label for the provided class. :rtype: str """private_attr_name="_{class_name}".format(class_name=class_name)returnprivate_attr_name