a
    ӇyfC                     @   s|  d 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 ddlmZmZ dd	lmZ d
dlmZ d
dlmZmZ d
dlmZ erddlmZ ddlm 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)d/e$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Z0dS )0ac  
Load setuptools configuration from ``pyproject.toml`` files.

**PRIVATE MODULE**: API reserved for setuptools internal usage only.

To read project metadata, consider using
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
For simple scenarios, you can also try parsing the file directly
with the help of ``tomllib`` or ``tomli``.
    N)contextmanager)partial)TYPE_CHECKINGCallableDictMappingOptionalSet   )StrPath)	FileErrorInvalidConfigError)SetuptoolsWarning   )expand)_PREVIOUSLY_DEFINED_MissingDynamic)applyDistribution)Self)filepathreturnc                 C   sD   ddl m} t| d}||W  d    S 1 s60    Y  d S )Nr
   )tomllibrb)Zcompat.py310r   openload)r   r   file r   b/var/www/html/memorial-backend/venv/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)r7   r   ignore_option_errorsr!   r   r   r   apply_configuration<   s    r;   T)r   r7   c           
      C   s   t j| } t j| s(td| dt| p2i }|di }|di }|di }|rd|sh|shi S d|v r|tjdd |rt	|d	d
d
ur|
d|j n|
dd ||d< ||d< t|( |d|id}t||  W d
   n1 s0    Y  |rt 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 and 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
setuptools	distutilsz[tool.distutils])subjectinclude_package_dataNzinclude-package-dataT)r%   r<   )ospathabspathisfiler   r    r)   _ExperimentalConfigurationemitgetattr
setdefaultr@   _ignore_errorsr+   dirnameexpand_configuration)
r   r   r:   r7   asdictZproject_tableZ
tool_tableZsetuptools_tablesubsetroot_dirr   r   r   r8   H   s.    
(r8   )r!   rN   r:   r7   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!   rN   r:   r7   r   r   r   rK      s    rK   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 )6rO   NFr   rP   c                 C   sp   || _ |pt | _|di | _| jdg | _|di di | _| jdi | _|| _	|| _
t | _d S )Nr%   dynamicr<   r=   )r!   rA   getcwdrN   r)   project_cfgrQ   setuptools_cfgdynamic_cfgr:   _distset_referenced_files)selfr!   rN   r:   r7   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   rN   rS   r)   rV   )rY   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)rI   r:   )rY   r`   ra   rb   r   r   r   _process_field   s    z_ConfigExpander._process_fieldpackage-datac                 C   s   | j |i }t|S rc   )rT   r)   _expandcanonic_package_data)rY   ra   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
| j
 | jS )Nzexclude-package-data)_expand_packagesri   r_   _EnsurePackagesDiscoveredrS   rT   package_dir_expand_data_files_expand_cmdclass_expand_all_dynamicrX   updater!   )rY   r7   ctxensure_discoveredrl   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findrN   package-dirfill_package_dir)rT   r)   
isinstancelisttupledictrN   rH   rI   r:   rf   find_packages)rY   rs   rt   r   r   r   rj      s    


z _ConfigExpander._expand_packagesc                 C   s$   t tj| jd}| | jd| d S )N)rN   z
data-files)r   rf   canonic_data_filesrN   rd   rT   )rY   
data_filesr   r   r   rm      s    z"_ConfigExpander._expand_data_files)rl   c                 C   s*   | j }ttj||d}| | jd| d S )N)rl   rN   cmdclass)rN   r   rf   r~   rd   rT   )rY   rl   rN   r~   r   r   r   rn      s    z _ConfigExpander._expand_cmdclass)r7   rl   c              	      s   d fddj D }|j p0i      d dd | D }j	| d S )N)versionreadmeentry-pointsscriptsgui-scriptsclassifiersdependenciesoptional-dependenciesc                    s$   i | ]}|vr|  |qS r   )_obtain.0ra   r7   rl   rY   specialr   r   
<dictcomp>   s   z7_ConfigExpander._expand_all_dynamic.<locals>.<dictcomp>)r   r   r   r   Zoptional_dependenciesc                 S   s   i | ]\}}|d ur||qS rc   r   )r   kvr   r   r   r         )
rQ   rp   _obtain_entry_points_obtain_version_obtain_readme_obtain_classifiers_obtain_dependencies_obtain_optional_dependenciesitemsrS   )rY   r7   rl   Zobtained_dynamicupdatesr   r   r   ro      s    

z#_ConfigExpander._expand_all_dynamic)r7   ra   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   r:   r   )rY   r7   ra   previousmsgr   r   r   _ensure_previously_set  s
    
z&_ConfigExpander._ensure_previously_set)	specifierrl   c                 C   s   ddl m} t| j | j}d|v rX| j||d  t|d |W  d    S d|v rt	|d ||W  d    S t
d| d|W d    n1 s0    Y  d S )Nr   )always_iterabler   attrz	invalid `z`: ) setuptools.extern.more_itertoolsr   rI   r:   rN   rX   rp   rf   
read_files	read_attrr3   )rY   r   	directiverl   r   rN   r   r   r   _expand_directive  s     2z!_ConfigExpander._expand_directive)r7   ra   rl   c                 C   s4   || j v r$| d| | j | |S | || d S )Nztool.setuptools.dynamic.)rU   r   r   )rY   r7   ra   rl   r   r   r   r     s    
z_ConfigExpander._obtainc                 C   s,   d| j v r(d| jv r(t| |d|S d S )Nr   )rQ   rU   rf   r   r   )rY   r7   rl   r   r   r   r   )  s    z_ConfigExpander._obtain_version)r7   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   )rQ   rU   r   r)   r   )rY   r7   rU   r   r   r   r   /  s    
z_ConfigExpander._obtain_readme)r7   rl   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 rc   )rQ   r   rY   r   r   	<genexpr>A  r   z7_ConfigExpander._obtain_entry_points.<locals>.<genexpr>r   )ra   groupc                    s8   |v r4 |}| jvr,tt| || | < d S rc   )poprQ   r   r   r2   )ra   r   valueZexpandedgroupsrY   r   r   _set_scriptsK  s
    

z:_ConfigExpander._obtain_entry_points.<locals>._set_scriptsr   Zconsole_scriptsr   Zgui_scripts)anyr   rf   entry_pointsstr)rY   r7   rl   fieldsr   r   r   r   r   r   =  s    


z$_ConfigExpander._obtain_entry_points)r7   c                 C   s(   d| j v r$| |di }|r$| S d S )Nr   )rQ   r   
splitlinesrY   r7   r   r   r   r   r   W  s
    
z#_ConfigExpander._obtain_classifiersc                 C   s(   d| j v r$| |di }|r$t|S d S )Nr   )rQ   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   k  s   zA_ConfigExpander._obtain_optional_dependencies.<locals>.<dictcomp>)rQ   rU   rw   rz   r   r   )rY   r7   Zoptional_dependencies_mapr   r   r   r   e  s    




z-_ConfigExpander._obtain_optional_dependencies)NFN)re   )__name__
__module____qualname__rz   r   r   boolrZ   r_   r   r   rd   ri   r   rj   rm   r   rn   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rO      s:      

rO   c                 C   s   dd |   D S )Nc                 S   s&   g | ]}|  r|  d s|qS )#)r/   
startswith)r   liner   r   r   
<listcomp>z  s   z,_parse_requirements_list.<locals>.<listcomp>)r   )r   r   r   r   r   y  s    r   )r:   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 )Nzignored error: z - )	Exceptionr0   r1   	__class__r   )r:   r5   r   r   r   rI     s    
rI   c                       sD   e Zd Zdeed fddZdd fddZ fd	d
Z  ZS )rk   r   )distributionrS   rT   c                    s   t  | || _|| _d S rc   )superrZ   _project_cfg_setuptools_cfg)rY   r   rS   rT   r   r   r   rZ     s    z"_EnsurePackagesDiscovered.__init__r   r[   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``.
        ru   Nr.   
py-modulesrs   )rV   r   rH   rp   rl   set_defaults_ignore_ext_modulesmetadatar.   r   r)   
py_modulesrs   r   	__enter__)rY   r7   cfgrl   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``.
        rs   r   )r   rH   rV   rs   r   r   __exit__)rY   exc_type	exc_value	tracebackr   r   r   r     s    z"_EnsurePackagesDiscovered.__exit__)r   r   r   rz   rZ   r   r   __classcell__r   r   r   r   rk     s   rk   c                   @   s   e Zd ZdZdS )rE   z``{subject}` in `pyproject.toml` is still *experimental* and likely to change in future releases.N)r   r   r   _SUMMARYr   r   r   r   rE     s   rE   )F)TFN)NFN)1__doc__loggingrA   
contextlibr   	functoolsr   typingr   r   r   r   r   r	   _pathr   errorsr   r   warningsr   r(   r   rf   Z_apply_pyprojecttomlr   r   r   r9   r]   r   typing_extensionsr   	getLoggerr   r0   rz   r    r   r+   r;   r8   rK   rO   r   rI   EnsurePackagesDiscoveredrk   rE   r   r   r   r   <module>   s^    
    D    Y(