
    ce                     v    d Z ddlZ e       Z G d dej                        Z G d dej                        Zy)a  
Oslo.config's primary source of configuration data are plaintext, INI-like
style, configuration files. With the addition of backend drivers support,
it is possible to store configuration data in different places and with
different formats, as long as there exists a proper driver to connect to those
external sources and provide a way to fetch configuration values from them.

A backend driver implementation is divided in two main classes, a driver
class of type :class:`ConfigurationSourceDriver` and a configuration source
class of type :class:`ConfigurationSource`.

**IMPORTANT:** At this point, all backend drivers are only able to provide
immutable values. This protects applications and services from having options
in external sources mutated when they reload configuration files.
    Nc                   X    e Zd ZdZej
                  d        Zej
                  d        Zy)ConfigurationSourceDrivera  A backend driver option for oslo.config.

    For each group name listed in **config_source** in the **DEFAULT** group,
    a :class:`ConfigurationSourceDriver` is responsible for creating one new
    instance of a :class:`ConfigurationSource`. The proper driver class to be
    used is selected based on the **driver** option inside each one of the
    groups listed in config_source and loaded through entry points managed by
    stevedore using the namespace oslo.config.driver::

        [DEFAULT]
        config_source = source1
        config_source = source2
        ...

        [source1]
        driver = remote_file
        ...

        [source2]
        driver = castellan
        ...

    Each specific driver knows all the available options to properly instatiate
    a ConfigurationSource using the values comming from the given group in the
    open_source_from_opt_group() method and is able to generate sample config
    through the list_options_for_discovery() method.

    c                      y)a  Return an open configuration source.

        Uses group_name to find the configuration settings for the new
        source and then open the configuration source and return it.

        If a source cannot be open, raises an appropriate exception.

        :param conf: The active configuration option handler from which
                     to seek configuration values.
        :type conf: ConfigOpts
        :param group_name: The configuration option group name where the
                           options for the source are stored.
        :type group_name: str
        :returns: an instance of a subclass of ConfigurationSource
        N )selfconf
group_names      >/usr/lib/python3/dist-packages/oslo_config/sources/__init__.pyopen_source_from_opt_groupz4ConfigurationSourceDriver.open_source_from_opt_groupB           c                      y)a  Return the list of options available to configure a new source.

        Drivers should advertise all supported options in this method
        for the purpose of sample generation by oslo-config-generator.

        For an example on how to implement this method
        you can check the **remote_file** driver at
        oslo_config.sources._uri.URIConfigurationSourceDriver.

        :returns: a list of supported options of a ConfigurationSource.
        Nr   )r   s    r
   list_options_for_discoveryz4ConfigurationSourceDriver.list_options_for_discoveryT   r   r   N)__name__
__module____qualname____doc__abcabstractmethodr   r   r   r   r
   r   r   $   s;    : 	 " 	 r   r   )	metaclassc                   4    e Zd ZdZej
                  d        Zy)ConfigurationSourcea  A configuration source option for oslo.config.

    A configuration source is able to fetch configuration values based on
    a (group, option) key from an external source that supports key-value
    mapping such as INI files, key-value stores, secret stores, and so on.

    c                      y)a  Return the value of the option from the group.

        :param group_name: Name of the group.
        :type group_name: str
        :param option_name: Name of the option.
        :type option_name: str
        :param opt: The option definition.
        :type opt: Opt
        :returns: A tuple (value, location) where value is the option value
                  or oslo_config.sources._NoValue if the (group, option) is
                  not present in the source, and location is a LocationInfo.
        Nr   )r   r	   option_nameopts       r
   getzConfigurationSource.getl   r   r   N)r   r   r   r   r   r   r   r   r   r
   r   r   c   s!     	 r   r   )r   r   object_NoValueABCMetar   r   r   r   r
   <module>r       s9     
 8<#++ <~CKK r   