a
    SichK                     @   s  d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZ e	rddlmZ eeejf Zee Z!ee"dddZ#e"ee$dddZ%d.deddddZ&d/eed dddZ'e"e"ed e$dddZ(d0e"ee e$ed e"ddd Z)G d!d" d"Z*d#d$ Z+ee$d%d&d'Z,G d(d) d)ej-Z.G d*d+ d+e/Z0G d,d- d-e/Z1dS )1z
Load setuptools configuration from ``pyproject.toml`` files.

**PRIVATE MODULE**: API reserved for setuptools internal usage only.
    N)contextmanager)partial)TYPE_CHECKINGCallableDictOptionalMappingUnion)	FileErrorOptionError   )expand)apply)_PREVIOUSLY_DEFINED_WouldIgnoreFieldDistribution)filepathreturnc                 C   sD   ddl m} t| d}||W  d    S 1 s60    Y  d S )Nr   )tomlirb)setuptools.externr   openload)r   r   file r   [/var/www/html/django/DPS/env/lib/python3.9/site-packages/setuptools/config/pyprojecttoml.py	load_file   s    r   )configr   r   c              
   C   s   ddl m} |jd}t|dr*|  z|| W S  |jy } z`d|j }|j	
ddkrzt| t|j d|j	 d	}t| d
| d W Y d }~n
d }~0 0 d S )Nr   )_validate_pyprojectztrove-classifier_disable_downloadzconfiguration error: `projectzinvalid pyproject.toml config: .
) r   ZFORMAT_FUNCTIONSgethasattrr    validateValidationErrorsummarynamestrip_loggerdebugdetails
ValueError)r   r   	validatorZtrove_classifierexr*   errorr   r   r   r(   !   s    

r(   Fr   )distr   r   c                 C   s   t |d|| }t| ||S )zeApply the configuration from a ``pyproject.toml`` file into an existing
    distribution object.
    T)read_configuration_apply)r4   r   ignore_option_errorsr   r   r   r   apply_configuration6   s    r8   T)r   r4   c              
   C   sl  t j| } t j| s(td| dt| p2i }|di }|di }|di }|rd|sh|shi S |r|d}t|t	 |
 }	|rt|ddur|d	|j n|d	d
 ||d< ||d< z|d|id}
t|
|  W nh tyF } zNt||	|ri W  Y d}~S |r0td|jj d|  n W Y d}~n
d}~0 0 |rht j| }t||||S |S )a  Read given configuration file and returns options from it as a dict.

    :param str|unicode filepath: Path to configuration file in the ``pyproject.toml``
        format.

    :param bool expand: Whether to expand directives and other computed values
        (i.e. post-process the given configuration)

    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.

    :param Distribution|None: Distribution object to which the configuration refers.
        If not given a dummy object will be created and discarded after the
        configuration is read. This is used for auto-discovery of packages in the case
        a dynamic configuration (e.g. ``attr`` or ``cmdclass``) is expanded.
        When ``expand=False`` this object is simply ignored.

    :rtype: dict
    zConfiguration file z does not exist.r"   tool
setuptoolszDSupport for `[tool.setuptools]` in `pyproject.toml` is still *beta*.include_package_dataNzinclude-package-dataT)r"   r9   ignored error:  - )ospathabspathisfiler
   r   r&   warningswarn_BetaConfigurationcopygetattr
setdefaultr;   r(   	Exception_skip_bad_configr-   r.   	__class____name__dirnameexpand_configuration)r   r   r7   r4   asdictZproject_tableZ
tool_tableZsetuptools_tablemsgZorig_setuptools_tablesubsetr2   root_dirr   r   r   r5   B   s>    r5   )project_cfgsetuptools_cfgr4   r   c                 C   sn   |du s*|j jdu r.|j jdu r.|jdu r.dS |r6dS t|  }h d}||krjtjt	 tdd dS dS )z8Be temporarily forgiving with invalid ``pyproject.toml``NF>   versionr+   zrequires-pythonpython_requires   )
stacklevelT)
metadatar+   rT   install_requiressetkeysrB   rC   _InvalidFilemessage)rR   rS   r4   Zgiven_configZpopular_subsetr   r   r   rI      s     

rI   )r   rQ   r7   r4   r   c                 C   s   t | ||| S )a  Given a configuration with unresolved fields (e.g. dynamic, cmdclass, ...)
    find their final values.

    :param dict config: Dict containing the configuration for the distribution
    :param str root_dir: Top-level directory for the distribution/project
        (the same directory where ``pyproject.toml`` is place)
    :param bool ignore_option_errors: see :func:`read_configuration`
    :param Distribution|None: Distribution object to which the configuration refers.
        If not given a dummy object will be created and discarded after the
        configuration is read. Used in the case a dynamic configuration
        (e.g. ``attr`` or ``cmdclass``).

    :rtype: dict
    )_ConfigExpanderr   r   rQ   r7   r4   r   r   r   rM      s    rM   c                   @   s`  e Zd Zd4eee eed dddZdddd	Zee	e
d
ddZd5ddZdd Zdd Zdd Zee	e	f dddZdee	e	f dddZde	dddZe	ee	e	f dd d!Zde	ee	e	f d"d#d$Zdee	e	f dd%d&Zdeee	e	f  d'd(d)Zdee	e	f eee	ef  d*d+d,Zdd-d.d/Zdd-d0d1Zdd-d2d3ZdS )6r^   NFr   r_   c                 C   sh   || _ |pt | _|di | _| jdg | _|di di | _| jdi | _|| _	|| _
d S )Nr"   dynamicr9   r:   )r   r>   getcwdrQ   r&   rR   r`   rS   dynamic_cfgr7   _dist)selfr   rQ   r7   r4   r   r   r   __init__   s    z_ConfigExpander.__init__)r   c                 C   s0   ddl m} | j| jdd d}| jp.||S )Nr   r   r+   )src_rootr+   )setuptools.distr   rQ   rR   r&   rc   )rd   r   attrsr   r   r   _ensure_dist   s    z_ConfigExpander._ensure_dist)	containerfieldfnc                 C   sF   ||v rBt | j  ||| ||< W d    n1 s80    Y  d S N)_ignore_errorsr7   )rd   rj   rk   rl   r   r   r   _process_field   s    z_ConfigExpander._process_fieldpackage-datac                 C   s   | j |i }t|S rm   )rS   r&   _expandcanonic_package_data)rd   rk   package_datar   r   r   _canonic_package_data   s    z%_ConfigExpander._canonic_package_datac                 C   s   |    |   | d |  }t|| j| j}|4}|j}|   | | | 	|| W d    n1 sp0    Y  | j
S )Nzexclude-package-data)_expand_packagesrt   ri   _EnsurePackagesDiscoveredrR   rS   package_dir_expand_data_files_expand_cmdclass_expand_all_dynamicr   )rd   r4   ctxensure_discoveredrw   r   r   r   r      s    

*z_ConfigExpander.expandc                 C   s   | j d}|d u s"t|ttfr&d S |d}t|tr| j|d< | j di |d< t| j	& t
jf i || j d< W d    n1 s0    Y  d S )NpackagesfindrQ   package-dirfill_package_dir)rS   r&   
isinstancelisttupledictrQ   rG   rn   r7   rq   find_packages)rd   r}   r~   r   r   r   ru      s    


z _ConfigExpander._expand_packagesc                 C   s$   t tj| jd}| | jd| d S )N)rQ   z
data-files)r   rq   canonic_data_filesrQ   ro   rS   )rd   
data_filesr   r   r   rx     s    z"_ConfigExpander._expand_data_files)rw   c                 C   s*   | j }ttj||d}| | jd| d S )N)rw   rQ   cmdclass)rQ   r   rq   r   ro   rS   )rd   rw   rQ   r   r   r   r   ry     s    z _ConfigExpander._expand_cmdclass)r4   rw   c              	      s   d fddj D }|j p0i      d dd | D }j	| d S )N)rT   readmeentry-pointsscriptsgui-scriptsclassifiersdependenciesoptional-dependenciesc                    s$   i | ]}|vr|  |qS r   )_obtain.0rk   r4   rw   rd   specialr   r   
<dictcomp>  s   z7_ConfigExpander._expand_all_dynamic.<locals>.<dictcomp>)rT   r   r   r   Zoptional_dependenciesc                 S   s   i | ]\}}|d ur||qS rm   r   )r   kvr   r   r   r   &      )
r`   update_obtain_entry_points_obtain_version_obtain_readme_obtain_classifiers_obtain_dependencies_obtain_optional_dependenciesitemsrR   )rd   r4   rw   Zobtained_dynamicupdatesr   r   r   rz     s    

z#_ConfigExpander._expand_all_dynamic)r4   rk   c                 C   s2   t | |}|d u r.| js.d|d}t|d S )Nz#No configuration found for dynamic z.
Some dynamic fields need to be specified via `tool.setuptools.dynamic`
others must be specified via the equivalent attribute in `setup.py`.)r   r7   r   )rd   r4   rk   previousrO   r   r   r   _ensure_previously_set)  s
    
z&_ConfigExpander._ensure_previously_set)	specifierrw   c                 C   s   t | jx | j}d|v r8t|d |W  d    S d|v r`t|d ||W  d    S td| d|W d    n1 s0    Y  d S )Nr   attrz	invalid `z`: )rn   r7   rQ   rq   
read_files	read_attrr0   )rd   r   	directiverw   rQ   r   r   r   _expand_directive3  s     2z!_ConfigExpander._expand_directive)r4   rk   rw   c                 C   s4   || j v r$| d| | j | |S | || d S )Nztool.setuptools.dynamic.)rb   r   r   )rd   r4   rk   rw   r   r   r   r   ?  s    
z_ConfigExpander._obtainc                 C   s,   d| j v r(d| jv r(t| |d|S d S )NrT   )r`   rb   rq   rT   r   )rd   r4   rw   r   r   r   r   I  s    z_ConfigExpander._obtain_version)r4   r   c                 C   sL   d| j vrd S | j}d|v r<| |di |d dddS | |d d S )Nr   content-typez
text/x-rst)textr   )r`   rb   r   r&   r   )rd   r4   rb   r   r   r   r   O  s    
z_ConfigExpander._obtain_readme)r4   rw   r   c                    sz   d}t fdd|D sd S |d|}|d u r8d S t|di ttd fdd}|dd	 |d
d  S )N)r   r   r   c                 3   s   | ]}| j v V  qd S rm   )r`   r   rd   r   r   	<genexpr>a  r   z7_ConfigExpander._obtain_entry_points.<locals>.<genexpr>r   )rk   groupc                    s@   |v r< |}| jvr4t| |}t|t | | < d S rm   )popr`   r   r]   rB   rC   )rk   r   valuerO   Zexpandedgroupsrd   r   r   _set_scriptsk  s    

z:_ConfigExpander._obtain_entry_points.<locals>._set_scriptsr   Zconsole_scriptsr   Zgui_scripts)anyr   rq   entry_pointsstr)rd   r4   rw   fieldsr   r   r   r   r   r   ]  s    



z$_ConfigExpander._obtain_entry_points)r4   c                 C   s(   d| j v r$| |di }|r$| S d S )Nr   )r`   r   
splitlinesrd   r4   r   r   r   r   r   z  s
    
z#_ConfigExpander._obtain_classifiersc                 C   s(   d| j v r$| |di }|r$t|S d S )Nr   )r`   r   _parse_requirements_listr   r   r   r   r     s
    
z$_ConfigExpander._obtain_dependenciesc                    sV   d j vrd S d jv rF jd }t|ts0J  fdd| D S  |d d S )Nr   c              	      s*   i | ]"\}}|t  d | |i qS )z.tool.setuptools.dynamic.optional-dependencies.)r   r   )r   r   r   r   r   r   r     s   zA_ConfigExpander._obtain_optional_dependencies.<locals>.<dictcomp>)r`   rb   r   r   r   r   )rd   r4   Zoptional_dependencies_mapr   r   r   r     s    



z-_ConfigExpander._obtain_optional_dependencies)NFN)rp   )rK   
__module____qualname__r   r   _Pathboolre   ri   r   r   ro   rt   r   ru   rx   r   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^      s:      

r^   c                 C   s   dd |   D S )Nc                 S   s&   g | ]}|  r|  d s|qS )#)r,   
startswith)r   liner   r   r   
<listcomp>  s   z,_parse_requirements_list.<locals>.<listcomp>)r   )r   r   r   r   r     s    r   )r7   c              
   c   s\   | sd V  d S z
d V  W n> t yV } z&td|jj d|  W Y d }~n
d }~0 0 d S )Nr<   r=   )rH   r-   r.   rJ   rK   )r7   r2   r   r   r   rn     s    
rn   c                       s>   e Zd Zdeed fddZ fddZ fddZ  ZS )	rv   r   )distributionrR   rS   c                    s   t  | || _|| _d S rm   )superre   _project_cfg_setuptools_cfg)rd   r   rR   rS   rJ   r   r   re     s    z"_EnsurePackagesDiscovered.__init__c                    s   | j | j }}|di }||jp&i  ||_|j  |jjdu rV| j	
d|j_|jdu rl|
d|_|jdu r|
d|_t  S )zWhen entering the context, the values of ``packages``, ``py_modules`` and
        ``package_dir`` that are missing in ``dist`` are copied from ``setuptools_cfg``.
        r   Nr+   
py-modulesr}   )rc   r   rG   r   rw   set_defaultsZ_ignore_ext_modulesrX   r+   r   r&   
py_modulesr}   r   	__enter__)rd   r4   cfgrw   r   r   r   r     s    


z#_EnsurePackagesDiscovered.__enter__c                    s4   | j d| jj | j d| jj t |||S )zWhen exiting the context, if values of ``packages``, ``py_modules`` and
        ``package_dir`` are missing in ``setuptools_cfg``, copy from ``dist``.
        r}   r   )r   rG   rc   r}   r   r   __exit__)rd   exc_type	exc_value	tracebackr   r   r   r     s    z"_EnsurePackagesDiscovered.__exit__)rK   r   r   r   re   r   r   __classcell__r   r   r   r   rv     s   rv   c                   @   s   e Zd ZdZdS )rD   zJExplicitly inform users that some `pyproject.toml` configuration is *beta*N)rK   r   r   __doc__r   r   r   r   rD     s   rD   c                   @   s   e Zd ZdZedd ZdS )r\   a  The given `pyproject.toml` file is invalid and would be ignored.
    !!


    ############################
    # Invalid `pyproject.toml` #
    ############################

    Any configurations in `pyproject.toml` will be ignored.
    Please note that future releases of setuptools will halt the build process
    if an invalid file is given.

    To prevent setuptools from considering `pyproject.toml` please
    DO NOT include the `[project]` or `[tool.setuptools]` tables in your file.
    

!!
    c                 C   s   ddl m} || jS )Nr   )cleandoc)inspectr   r   )clsr   r   r   r   r]     s    z_InvalidFile.messageN)rK   r   r   r   classmethodr]   r   r   r   r   r\     s   r\   )F)TFN)NFN)2r   loggingr>   rB   
contextlibr   	functoolsr   typingr   r   r   r   r   r	   Zsetuptools.errorsr
   r   r%   r   rq   Z_apply_pyprojecttomlr   r6   r   r   rg   r   r   PathLiker   	getLoggerrK   r-   r   r   r   r(   r8   r5   rI   rM   r^   r   rn   EnsurePackagesDiscoveredrv   UserWarningrD   r\   r   r   r   r   <module>   sd    
    P
     U(