o |nhq@sdZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z dd lmZeeZGd d d e ZGd d d ee ZdS)zCement core config module.N)abstractmethod)AnyDictList) Interface)Handler)abspath)minimal_loggerc @s eZdZdZGdddejZededefddZ edede efd d Z ede efd d Z ede eeffd dZedede eeffddZededdfddZedededefddZededededdfddZed!dededdfddZededefdd ZdS)"ConfigInterfacea This class defines the Config Interface. Handlers that implement this interface must provide the methods and attributes defined below. In general, most implementations should sub-class from the provided :class:`ConfigHandler` base class as a starting point. c@seZdZdZdZdS)zConfigInterface.MetazHandler meta-data.configN)__name__ __module__ __qualname____doc__ interfacerrJ/usr/local/bin/dhwp/env/lib/python3.10/site-packages/cement/core/config.pyMetasr file_pathreturncCdS)aO Parse config file settings from ``file_path``. Returns True if the file existed, and was parsed successfully. Returns False otherwise. Args: file_path (str): The path to the config file to parse. Returns: bool: ``True`` if the file was parsed, ``False`` otherwise. Nrselfrrrr parse_file zConfigInterface.parse_filesectioncCr)z Return a list of configuration keys from ``section``. Args: section (list): The config section to pull keys from. Returns: list: A list of keys in ``section``. Nrrrrrrkeys- zConfigInterface.keyscCr)zz Return a list of configuration sections. Returns: list: A list of config sections. Nrrrrr get_sections;s zConfigInterface.get_sectionscCr)z Return a dict of the entire configuration. Returns: dict: A dictionary of the entire config. Nrr rrrget_dictFszConfigInterface.get_dictcCr)a Return a dict of configuration parameters for ``section``. Args: section (str): The config section to generate a dict from (using that sections' keys). Returns: dict: A dictionary of the config section. Nrrrrrget_section_dictPrz ConfigInterface.get_section_dictNcCr)z Add a new section if it doesn't already exist. Args: section: The section label to create. Returns: None Nrrrrr add_section_rzConfigInterface.add_sectionkeycCr)a' Return a configuration value based on ``section.key``. Must honor environment variables if they exist to override the config... for example ``config['myapp']['foo']['bar']`` must be overridable by the environment variable ``MYAPP_FOO_BAR``.... Note that ``MYAPP_`` must prefix all vars, therefore ``config['redis']['foo']`` would be overridable by ``MYAPP_REDIS_FOO`` ... but ``config['myapp']['foo']['bar']`` would not have a double prefix of ``MYAPP_MYAPP_FOO_BAR``. Args: section (str): The section of the configuration to pull key values from. key (str): The configuration key to get the value for. Returns: unknown: The value of the ``key`` in ``section``. Nr)rrr%rrrgetmszConfigInterface.getvaluecCr)aG Set a configuration value based at ``section.key``. Args: section (str): The ``section`` of the configuration to pull key value from. key (str): The configuration key to set the value at. value: The value to set. Returns: None Nr)rrr%r'rrrsetszConfigInterface.setTdict_objoverridecCr)z Merges a dict object into the configuration. Args: dict_obj (dict): The dictionary to merge into the config override (bool): Whether to override existing values or not. Returns: None Nr)rr)r*rrrmergerzConfigInterface.mergecCr)z Returns whether or not the section exists. Args: section (str): The section to test for. Returns: bool: ``True`` if the configuration section exists, ``False`` otherwise. Nrrrrr has_sectionrzConfigInterface.has_section)T)r rrrrrrstrboolrrrr!rrr"r#r$r&r(dictr+r,rrrrr s.    r c@sJeZdZdZGdddejZededefddZ dedefdd Z d S) ConfigHandlerz) Config handler implementation. c@s eZdZdS)zConfigHandler.MetaN)r rrrrrrrsrrrcCr)ao Parse a configuration file at ``file_path`` and store it. This function must be provided by the handler implementation (that is sub-classing this). Args: file_path (str): The file system path to the configuration file. Returns: bool: ``True`` if file was read properly, ``False`` otherwise Nrrrrr _parse_fileszConfigHandler._parse_filecCsFt|}tj|rtd|d||Std|ddS)av Ensure we are using the absolute/expanded path to ``file_path``, and then call ``self._parse_file`` to parse config file settings from it, overwriting existing config settings. Developers sub-classing from here should generally override ``_parse_file`` which handles just the parsing of the file and leaving this function to wrap any checks/logging/etc. Args: file_path (str): The file system path to the configuration file. Returns: bool: ``True`` if the given ``file_path`` was parsed, and ``False`` otherwise. z config file 'z' exists, loading settings...z' does not exist, skipping...F)r ospathexistsLOGdebugr1rrrrrs   zConfigHandler.parse_fileN) r rrrrrrr-r.r1rrrrrr0s r0)rr2abcrtypingrrrcore.interfacer core.handlerrutils.fsr utils.miscr r r5r r0rrrrs     '