§
    xÅj*  ã                   ó|   — d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
mZmZ ddlmZ erddlmZ  G d„ d	¦  «        ZdS )
a.  
Environment variable configuration loading class.

Using a class here doesn't really model anything but makes state passing (in a
situation requiring it) more convenient.

This module is currently considered private/an implementation detail and should
not be included in the Sphinx API documentation.
é    N)ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚMappingÚSequenceé   )ÚUncastableEnvVarÚAmbiguousEnvVar)Údebug)ÚConfigc                   óö   — e Zd Zdddeddfd„Zdeeef         fd„Zdee         d	e	ee
e         f         deeef         fd
„Zdee         defd„Zdee         ddfd„Zde
e         deddfd„Zdededefd„ZdS )ÚEnvironmentÚconfigr   ÚprefixÚreturnNc                 ó0   — || _         || _        i | _        d S ©N)Ú_configÚ_prefixÚdata)Úselfr   r   s      ú;C:\Projects\Historical\venv\Lib\site-packages\invoke/env.pyÚ__init__zEnvironment.__init__   s   € ØˆŒØˆŒØ$&ˆŒ	ˆ	ˆ	ó    c                 ó”  — |                       g i ¬¦  «        }d}t          |                     | j        |¦  «        ¦  «         |                     ¦   «         D ]E\  }}| j        pd|z   }|t
          j        v r&|                      |t
          j        |         ¦  «         ŒFt          d                     | j        ¦  «        ¦  «         | j        S )zý
        Return a nested dict containing values from `os.environ`.

        Specifically, values whose keys map to already-known configuration
        settings, allowing us to perform basic typecasting.

        See :ref:`env-vars` for details.
        )Úkey_pathÚenv_varsz>Scanning for env vars according to prefix: {!r}, mapping: {!r}Ú zObtained env var config: {!r})	Ú_crawlr   Úformatr   ÚitemsÚosÚenvironÚ	_path_setr   )r   r   ÚmÚenv_varr   Úreal_vars         r   ÚloadzEnvironment.load   s»   € ð —;’;¨°R�;Ñ8Ô8ˆØLˆÝˆa�hŠh�t”| XÑ.Ô.Ñ/Ô/Ð/à!)§¢Ñ!1Ô!1ð 	?ð 	?ÑˆG�XØœÐ*¨¨gÑ5ˆHØ�2œ:Ð%Ð%Ø—’˜x­¬°HÔ)=Ñ>Ô>Ð>øÝÐ-×4Ò4°T´YÑ?Ô?Ñ@Ô@Ð@ØŒyÐr   r   r   c                 óÒ  — i }|                       |¦  «        }t          |d¦  «        r§t          |j        ¦  «        r“t          |d¦  «        rƒ|                     ¦   «         D ]m}t	          |fi |¤Ž}||gz   }|                      ||¦  «        }|D ]*}||v r$d}	t          |	                     |¦  «        ¦  «        ‚Œ+|                     |¦  «         Œnn|||  	                    |¦  «        <   |S )a£  
        Examine config at location ``key_path`` & return potential env vars.

        Uses ``env_vars`` dict to determine if a conflict exists, and raises an
        exception if so. This dict is of the following form::

            {
                'EXPECTED_ENV_VAR_HERE': ['actual', 'nested', 'key_path'],
                ...
            }

        Returns another dictionary of new keypairs as per above.
        ÚkeysÚ__getitem__zFound >1 source for {})
Ú	_path_getÚhasattrÚcallabler,   Údictr!   r   r"   ÚupdateÚ_to_env_var)
r   r   r   Únew_varsÚobjÚkeyÚmerged_varsÚmerged_pathÚcrawledÚerrs
             r   r!   zEnvironment._crawl0   s  € ð  *,ˆØ�nŠn˜XÑ&Ô&ˆõ �C˜Ñ Ô ð	<å˜œÑ"Ô"ð	<õ ˜˜]Ñ+Ô+ð	<ð
 —x’x‘z”zð 
)ð 
)�Ý" 8Ð8Ð8¨xÐ8Ð8�Ø&¨#¨Ñ.�ØŸ+š+ k°;Ñ?Ô?�à"ð ?ð ?�CØ˜h��Ø6˜Ý-¨c¯jªj¸©o¬oÑ>Ô>Ð>ð 'ð —’ Ñ(Ô(Ð(Ð(ð
)ð 4<ˆH�T×%Ò% hÑ/Ô/Ñ0Øˆr   c                 óP   — d                      |¦  «                             ¦   «         S )NÚ_)ÚjoinÚupper)r   r   s     r   r3   zEnvironment._to_env_varX   s    € Ø�xŠx˜Ñ!Ô!×'Ò'Ñ)Ô)Ð)r   c                 ó.   — | j         }|D ]
}||         }Œ|S r   )r   )r   r   r5   r6   s       r   r.   zEnvironment._path_get[   s*   € ð ŒlˆØð 	ð 	ˆCØ�c”(ˆCˆCØˆ
r   Úvaluec                 ó¼   — | j         }|d d…         D ]}||vri ||<   ||         }Œ|                      |¦  «        }|                      ||¦  «        }|||d         <   d S )Néÿÿÿÿ)r   r.   Ú_cast)r   r   r@   r5   r6   ÚoldÚnews          r   r&   zEnvironment._path_setc   sw   € ð ŒiˆØ˜C˜R˜C”=ð 	ð 	ˆCØ˜#ˆ~ˆ~Ø��C‘Ø�c”(ˆCˆCØ�nŠn˜XÑ&Ô&ˆØ�jŠj˜˜eÑ$Ô$ˆØˆˆH�RŒLÑÐÐr   rD   rE   c                 ó2  — t          |t          ¦  «        r|dvS t          |t          ¦  «        r|S |€|S t          |t          t          f¦  «        r3d}|                     t          |¦  «        ¦  «        }t          |¦  «        ‚|                     |¦  «        S )N)Ú0r    z,Can't adapt an environment string into a {}!)	Ú
isinstanceÚboolÚstrÚlistÚtupler"   Útyper   Ú	__class__)r   rD   rE   r:   s       r   rC   zEnvironment._casto   s’   € Ý�c�4Ñ Ô ð 	&Ø˜iÐ'Ð'Ý˜�SÑ!Ô!ð 		&ØˆJØˆ[ØˆJÝ˜�d¥E˜]Ñ+Ô+ð 	&Ø@ˆCØ—*’*�T #™YœYÑ'Ô'ˆCÝ" 3Ñ'Ô'Ð'à—=’= Ñ%Ô%Ð%r   )Ú__name__Ú
__module__Ú__qualname__rJ   r   r   r   r*   r   r   r	   r!   r   r3   r.   r&   rC   © r   r   r   r      sI  € € € € € ð'˜xð '°ð '¸ð 'ð 'ð 'ð 'ð
�d˜3 ˜8”nð ð ð ð ð*&Ø˜Sœ	ð&Ø-4°S¸(À3¼-Ð5GÔ-Hð&à	ˆc�3ˆhŒð&ð &ð &ð &ðP* H¨S¤Mð *°cð *ð *ð *ð *ð (¨3¤-ð °Hð ð ð ð ð
  (¨3¤-ð 
 ¸ð 
 Àð 
 ð 
 ð 
 ð 
 ð&˜ð & 3ð &¨3ð &ð &ð &ð &ð &ð &r   r   )Ú__doc__r$   Útypingr   r   r   r   r   r   r	   Ú
exceptionsr   r   Úutilr   r   r   r   rR   r   r   ú<module>rW      sÐ   ððð ð 
€	€	€	Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nà 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð àð ØÐÐÐÐÐðf&ð f&ð f&ð f&ð f&ñ f&ô f&ð f&ð f&ð f&r   