a
    »ÏOcµ  ã                   @   s4   d Z ddlZddlZddlZG dd„ dejjƒZdS )z
config management
é    Nc                   @   sh   e Zd ZdZddd„Zdd„ Zedd„ ƒZejd	d„ ƒZed
d„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚConfigz8
    class for storing and manipulating config data
    Nc                 C   sD   d| _ d| _|| _|r|ni | _g | _g | _d| _|r:|ni | _dS )zî
        **Arguments**

        - schema (`confu.schema`): schema object

        **Keyword Arguments**

        - data (`dict`): dict to set initial data
        - meta (`dict`): any additional metadata to pass along with config
        N)Ú
_base_dataÚ_dataÚ_schemaÚmetaÚerrorsÚwarningsÚvalidÚdata)ÚselfÚschemar
   r   © r   úC/var/www/html/gsl.tools/lib/python3.9/site-packages/confu/config.pyÚ__init__   s    zConfig.__init__c                 C   s   t  | j¡S )zreturn a read only copy of data)ÚcopyÚdeepcopyr
   ©r   r   r   r   r   (   s    zConfig.copyc              
   C   s    | j r| j S t | j¡}ztj | j|¡ W n. tjj	yZ } z|| _
W Y d}~n
d}~0 0 tj | j|¡\| _| _| _t| dƒr”| jj d| j
¡ || _ | j S )z)config data, should be used for read onlyNÚapply_default_errorr   )r   r   r   r   Úconfur   Úapply_defaultsr   Ú
exceptionsZApplyDefaultErrorr   Úvalidater	   r   r   ÚhasattrÚinsert)r   r
   Úexcr   r   r   r
   ,   s    ÿ
zConfig.datac                 C   s   || _ d | _d S ©N)r   r   )r   Úvaluer   r   r   r
   C   s    c                 C   s   t  | j¡S )z!return a read only copy of schema)r   r   r   r   r   r   r   r   H   s    zConfig.schemac                 G   s*   | j }|D ]}||vr dS || }q
|S )zI
        get a nested value, returns None if path does not exist
        N©r
   )r   Úargsr
   Úkeyr   r   r   Ú
get_nestedM   s    
zConfig.get_nestedc                 C   s
   | j | S r   r   )r   r   r   r   r   Ú__getitem__X   s    zConfig.__getitem__c                 C   s
   t | jƒS r   )Úiterr
   r   r   r   r   Ú__iter__[   s    zConfig.__iter__c                 C   s
   t | jƒS r   )Úlenr
   r   r   r   r   Ú__len__^   s    zConfig.__len__)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr
   Úsetterr   r    r!   r#   r%   r   r   r   r   r      s   



r   )r)   Úcollectionsr   Zconfu.schemar   ÚabcÚMappingr   r   r   r   r   Ú<module>   s   