U
    X7h}(                  	   @  s  d Z ddlmZ ddl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 ejejejejedd Zejkeg  ejd	d ddlZd
dl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& d
dl'm(Z( ddl)Z*ddl+m,Z, ddddddddgZ-edddZ.dZ/ej0Z1e j0Z2dd Z3dd d!d"Z4d#d Z5e*j6j5j e5_ erdd$l)m7Z8 ne9e*j6j7Z8G d%d de8Z7d&d' Z:ej;fd(d)Z<G d*d+ d+e=Z>e?  dS ),z@Extensions to the 'distutils' for large or complex distributions    )annotationsN)abstractmethod)Mapping)TYPE_CHECKINGTypeVaroverload
setuptoolsZ_vendorZ	backports   )loggingmonkey)Require)PackageFinderPEP420PackageFinder)Distribution)	Extension)__version__)SetuptoolsDeprecationWarning)DistutilsOptionErrorsetupr   Commandr   r   r   find_packagesfind_namespace_packages	_CommandT_Command)Zboundc                 C  s:   G dd dt jj}|| }|jdd |jr6t| d S )Nc                      s<   e Zd ZdZdd fddZd fdd	Zd	d
 Z  ZS )z4_install_setup_requires.<locals>.MinimalDistributionzl
        A minimal version of a distribution for supporting the
        fetch_build_eggs interface.
        zMapping[str, object]attrsc                   s<   d} fddt |t  @ D }t | | j  d S )N)Zdependency_linkssetup_requiresc                   s   i | ]}| | qS  r   ).0kr   r   M/var/www/formularioweb/env/lib/python3.8/site-packages/setuptools/__init__.py
<dictcomp>A   s      zQ_install_setup_requires.<locals>.MinimalDistribution.__init__.<locals>.<dictcomp>)setsuper__init__Zset_defaultsZ_disable)selfr   Z_inclZfiltered	__class__r   r    r$   ?   s    z=_install_setup_requires.<locals>.MinimalDistribution.__init__Nc                   s:   zt  |\}}W n tk
r0   |df Y S X |dfS )zAIgnore ``pyproject.toml``, they are not related to setup_requiresr   )r#   Z _split_standard_project_metadata	Exception)r%   Z	filenamesZcfgZtomlr&   r   r    _get_project_config_filesF   s
    zN_install_setup_requires.<locals>.MinimalDistribution._get_project_config_filesc                 S  s   dS )zl
            Disable finalize_options to avoid building the working set.
            Ref #2158.
            Nr   r%   r   r   r    finalize_optionsN   s    zE_install_setup_requires.<locals>.MinimalDistribution.finalize_options)N)__name__
__module____qualname____doc__r$   r)   r+   __classcell__r   r   r&   r    MinimalDistribution9   s   r1   T)Zignore_option_errors)	distutilscorer   parse_config_filesr   _fetch_build_eggs)r   r1   distr   r   r    _install_setup_requires6   s
    r7   r6   c              
   C  sr   z|  | j W n\ tk
rl } z>d}d|jjkrZt|drH|| n| d| d  W 5 d }~X Y nX d S )Na  
        It is possible a package already installed in your system
        contains an version that is invalid according to PEP 440.
        You can try `pip install --use-pep517` as a workaround for this problem,
        or rely on a new virtual environment.

        If the problem refers to a package that is not installed yet,
        please contact that package's maintainers or distributors.
        ZInvalidVersionadd_note
)Zfetch_build_eggsr   r(   r'   r,   hasattrr9   Zannounce)r6   Zexmsgr   r   r    r5   \   s    	
r5   c                  K  s   t   t|  tjjf | S N)r
   Z	configurer7   r2   r3   r   r   r   r   r    r   q   s    )r   c                      s   e Zd ZU dZdZded< dd fddZd d	d
ZddddZe	d!ddddddZ
e	d"ddddddZ
d#ddddddZ
eddddZeddddZeddddZ  ZS )$r   a#  
    Setuptools internal actions are organized using a *command design pattern*.
    This means that each action (or group of closely related actions) executed during
    the build should be implemented as a ``Command`` subclass.

    These commands are abstractions and do not necessarily correspond to a command that
    can (or should) be executed via a terminal, in a CLI fashion (although historically
    they would).

    When creating a new command from scratch, custom defined classes **SHOULD** inherit
    from ``setuptools.Command`` and implement a few mandatory methods.
    Between these mandatory methods, are listed:
    :meth:`initialize_options`, :meth:`finalize_options` and :meth:`run`.

    A useful analogy for command classes is to think of them as subroutines with local
    variables called "options".  The options are "declared" in :meth:`initialize_options`
    and "defined" (given their final values, aka "finalized") in :meth:`finalize_options`,
    both of which must be defined by every command class. The "body" of the subroutine,
    (where it does all the work) is the :meth:`run` method.
    Between :meth:`initialize_options` and :meth:`finalize_options`, ``setuptools`` may set
    the values for options/attributes based on user's input (or circumstance),
    which means that the implementation should be careful to not overwrite values in
    :meth:`finalize_options` unless necessary.

    Please note that other commands (or other parts of setuptools) may also overwrite
    the values of the command's options/attributes multiple times during the build
    process.
    Therefore it is important to consistently implement :meth:`initialize_options` and
    :meth:`finalize_options`. For example, all derived attributes (or attributes that
    depend on the value of other attributes) **SHOULD** be recomputed in
    :meth:`finalize_options`.

    When overwriting existing commands, custom defined classes **MUST** abide by the
    same APIs implemented by the original class. They also **SHOULD** inherit from the
    original class.
    Fr   Zdistributionr8   c                   s   t  | t| | dS )zj
        Construct the command for dist, updating
        vars(self) with any keyword parameters.
        N)r#   r$   varsupdate)r%   r6   kwr&   r   r    r$      s    zCommand.__init__Nc                 C  sB   t | |}|d kr"t| || |S t|ts>td|||f |S )Nz'%s' must be a %s (got `%s`))getattrsetattr
isinstancestrr   )r%   optionZwhatdefaultvalr   r   r    _ensure_stringlike   s    

zCommand._ensure_stringlikerD   )rE   c                 C  sp   t | |}|dkrdS t|tr6t| |td| n6t|trTtdd |D }nd}|sltd||f dS )a  Ensure that 'option' is a list of strings.  If 'option' is
        currently a string, we split it either on /,\s*/ or /\s+/, so
        "foo bar baz", "foo,bar,baz", and "foo,   bar baz" all become
        ["foo", "bar", "baz"].

        ..
           TODO: This method seems to be similar to the one in ``distutils.cmd``
           Probably it is just here for backward compatibility with old Python versions?

        :meta private:
        Nz,\s*|\s+c                 s  s   | ]}t |tV  qd S r=   )rC   rD   )r   vr   r   r    	<genexpr>   s     z-Command.ensure_string_list.<locals>.<genexpr>Fz''%s' must be a list of strings (got %r))	rA   rC   rD   rB   resplitlistallr   )r%   rE   rG   okr   r   r    ensure_string_list   s    



zCommand.ensure_string_listboolr   )commandreinit_subcommandsreturnc                 K  s   d S r=   r   r%   rR   rS   r@   r   r   r    reinitialize_command   s    zCommand.reinitialize_commandr   c                 K  s   d S r=   r   rU   r   r   r    rV      s    zstr | _Commandc                 K  s    t | ||}t|| |S r=   )r   rV   r>   r?   )r%   rR   rS   r@   cmdr   r   r    rV      s    None)rT   c                 C  s   t dS )z
        Set or (reset) all options/attributes/caches used by the command
        to their default values. Note that these values may be overwritten during
        the build.
        NNotImplementedErrorr*   r   r   r    initialize_options   s    zCommand.initialize_optionsc                 C  s   t dS )z
        Set final values for all options/attributes used by the command.
        Most of the time, each option/attribute/cache should only be set if it does not
        have any value yet (e.g. ``if self.attr is None: self.attr = val``).
        NrY   r*   r   r   r    r+      s    zCommand.finalize_optionsc                 C  s   t dS )z
        Execute the actions intended by the command.
        (Side effects **SHOULD** only take place when :meth:`run` is executed,
        for example, creating new files or writing to the terminal output).
        NrY   r*   r   r   r    run   s    zCommand.run)N)F)F)F)r,   r-   r.   r/   Zcommand_consumes_arguments__annotations__r$   rH   rP   r   rV   r   r[   r+   r\   r0   r   r   r&   r    r      s(   
%
   c                 C  s&   dd t j| ddD }tt jj|S )z%
    Find all files under 'path'
    c                 s  s,   | ]$\}}}|D ]}t j||V  qqd S r=   )ospathjoin)r   basedirsfilesfiler   r   r    rJ     s    z#_find_all_simple.<locals>.<genexpr>T)followlinks)r^   walkfilterr_   isfile)r_   Zresultsr   r   r    _find_all_simple  s    ri   c                 C  s6   t | }| tjkr.tjtjj| d}t||}t|S )z
    Find all files under 'dir' and return the list of full filenames.
    Unless dir is '.', return full filenames with dir prepended.
    )start)	ri   r^   curdir	functoolspartialr_   relpathmaprM   )dirrc   Zmake_relr   r   r    findall  s
    

rq   c                   @  s   e Zd ZdZdS )sicz;Treat this string as-is (https://en.wikipedia.org/wiki/Sic)N)r,   r-   r.   r/   r   r   r   r    rr     s   rr   )@r/   
__future__r   rl   r^   rK   sysabcr   Zcollections.abcr   typingr   r   r   r_   extendr`   dirname__file__Zvendor_pathmodulespopZ_distutils_hack.override_distutils_hack r
   r   Zdependsr   Z	discoveryr   r   r6   r   	extensionr   versionr   warningsr   Zdistutils.corer2   Zdistutils.errorsr   __all__r   Zbootstrap_install_fromfindr   r   r7   r5   r   r3   r   r   Zget_unpatchedri   rk   rq   rD   rr   Z	patch_allr   r   r   r    <module>   s\   8& 