
     f#                        d Z ddlZddl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 ddlZddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ g dZej        j         Z dZ!ej"        Z#ej"        Z$d Z%d Z&d Z'ej(        j'        j         e'_          ej)        ej(        j*                  Z+ G d de+          Z*d Z,ej-        fdZ. ej/        e          d             Z G d de0          Z1 ej2                     dS )z@Extensions to the 'distutils' for large or complex distributions    N)DistutilsOptionError)convert_path   )SetuptoolsDeprecationWarning)	Extension)Distribution)Require)PackageFinderPEP420PackageFinder)monkey)logging)setupr   Commandr   r	   r   find_packagesfind_namespace_packagesc                      G d dt           j        j                  } ||           }|                    d           |j        rt          |           d S d S )Nc                   4     e Zd ZdZ fdZd fd	Zd Z xZS )4_install_setup_requires.<locals>.MinimalDistributionzl
        A minimal version of a distribution for supporting the
        fetch_build_eggs interface.
        c                     d}fdt          |          t                    z  D             }t                                          |           | j                                         d S )N)dependency_linkssetup_requiresc                 "    i | ]}||         S  r   ).0kattrss     V/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/setuptools/__init__.py
<dictcomp>zQ_install_setup_requires.<locals>.MinimalDistribution.__init__.<locals>.<dictcomp>8   s    EEE58EEE    )setsuper__init__set_defaults_disable)selfr   _inclfiltered	__class__s    `  r   r"   z=_install_setup_requires.<locals>.MinimalDistribution.__init__6   sf    8EEEEESZZ#e**-DEEEHGGX&&&&&(((((r   Nc                 ~    	 t                                          |          \  }}|dfS # t          $ r |dfcY S w xY w)zAIgnore ``pyproject.toml``, they are not related to setup_requiresr   )r!    _split_standard_project_metadata	Exception)r%   	filenamescfgtomlr(   s       r   _get_project_config_fileszN_install_setup_requires.<locals>.MinimalDistribution._get_project_config_files=   sW    %!GGDDYOO	TBw % % % "}$$$%s   '+ <<c                     dS )zl
            Disable finalize_options to avoid building the working set.
            Ref #2158.
            Nr   )r%   s    r   finalize_optionszE_install_setup_requires.<locals>.MinimalDistribution.finalize_optionsE   s      r   N)__name__
__module____qualname____doc__r"   r/   r1   __classcell__r(   s   @r   MinimalDistributionr   0   so        	 	
	) 	) 	) 	) 	)	% 	% 	% 	% 	% 	%	 	 	 	 	 	 	r   r9   T)ignore_option_errors)	distutilscorer   parse_config_filesr   _fetch_build_eggs)r   r9   dists      r   _install_setup_requiresr@   -   s        in9   6 u%%D 	666  $   r   c                     	 |                      | j                   d S # t          $ rU}d}d|j        j        v r?t          |d          r|                    |           n|                     d| d            d }~ww xY w)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.
        InvalidVersionadd_note
)fetch_build_eggsr   r+   r(   r3   hasattrrC   announce)r?   exmsgs      r   r>   r>   S   s    d122222    r|444r:&& ,C    l3lll+++s    
A=AA88A=c                  r    t          j                     t          |            t          j        j        di | S )Nr   )r   	configurer@   r;   r<   r   )r   s    r   r   r   h   s8    E""">((%(((r   c                   <     e Zd ZdZdZ fdZd	dZd Zd
dZ x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:

    .. method:: initialize_options(self)

        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.

    .. method:: finalize_options(self)

        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``).

    .. method:: run(self)

        Execute the actions intended by the command.
        (Side effects **SHOULD** only take place when ``run`` is executed,
        for example, creating new files or writing to the terminal output).

    A useful analogy for command classes is to think of them as subroutines with local
    variables called "options".  The options are "declared" in ``initialize_options()``
    and "defined" (given their final values, aka "finalized") in ``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 ``run()`` method.
    Between ``initialize_options()`` and ``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
    ``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 ``initialize_options()`` and
    ``finalize_options()``. For example, all derived attributes (or attributes that
    depend on the value of other attributes) **SHOULD** be recomputed in
    ``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.
    Fc                     t                                          |           t          |                               |           dS )zj
        Construct the command for dist, updating
        vars(self) with any keyword parameters.
        N)r!   r"   varsupdate)r%   r?   kwr(   s      r   r"   zCommand.__init__   s=    
 	T

"r   Nc           	          t          | |          }|t          | ||           |S t          |t                    st	          d|d|d|d          |S )N'z' must be a z (got `z`))getattrsetattr
isinstancestrr   )r%   optionwhatdefaultvals        r   _ensure_stringlikezCommand._ensure_stringlike   sq    dF##;D&'***NC%% 	&&28&&$$$D   
r   c                 6   t          | |          }|dS t          |t                    r&t          | |t	          j        d|                     dS t          |t                    rt          d |D                       }nd}|st          d|d|d          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              3   @   K   | ]}t          |t                    V  d S r2   )rU   rV   )r   vs     r   	<genexpr>z-Command.ensure_string_list.<locals>.<genexpr>   s,      99As++999999r   FrR   z!' must be a list of strings (got ))	rS   rU   rV   rT   resplitlistallr   )r%   rW   rZ   oks       r   ensure_string_listzCommand.ensure_string_list   s     dF##;FS!! 
	D&"(;"<"<=====#t$$ 99S99999 **AGM   r   r   c                     t                               | ||          }t          |                              |           |S r2   )_Commandreinitialize_commandrN   rO   )r%   commandreinit_subcommandsrP   cmds        r   ri   zCommand.reinitialize_command   s9    ++D';MNNS		
r   r2   )r   )
r3   r4   r5   r6   command_consumes_argumentsr"   r[   rf   ri   r7   r8   s   @r   r   r   u   s        4 4l "'    	 	 	 	  6       r   r   c                     d t          j        | d          D             }t          t           j        j        |          S )z%
    Find all files under 'path'
    c              3   h   K   | ]-\  }}}|D ]$}t           j                            ||          V  %.d S r2   )ospathjoin)r   basedirsfilesfiles        r   r_   z#_find_all_simple.<locals>.<genexpr>   sc        D$   	T4        r   T)followlinks)rp   walkfilterrq   isfile)rq   resultss     r   _find_all_simpler|      sE     !#4!@!@!@  G
 "'.'***r   c                     t          |           }| t          j        k    r5t          j        t          j        j        |           }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)	r|   rp   curdir	functoolspartialrq   relpathmaprc   )dirru   make_rels      r   findallr      sR    
 S!!E
bi$RW_C@@@He$$;;r   c                 v    ddl m} d}t          j         ||          t                     t          |           S )Nr   )cleandocz
    The function `convert_path` is considered internal and not part of the public API.
    Its direct usage by 3rd-party packages is considered deprecated and the function
    may be removed in the future.
    )inspectr   warningswarnr   _convert_path)pathnamer   rI   s      r   r   r      sF          C
 M((3--!=>>>"""r   c                       e Zd ZdZdS )sicz;Treat this string as-is (https://en.wikipedia.org/wiki/Sic)N)r3   r4   r5   r6   r   r   r   r   r     s        EEEEr   r   )3r6   r   rp   ra   r   _distutils_hack.override_distutils_hackdistutils.corer;   distutils.errorsr   distutils.utilr   r   _deprecation_warningr   setuptools.version
setuptoolssetuptools.extensionr   setuptools.distr   setuptools.dependsr	   setuptools.discoveryr
   r    r   r   __all__version__version__bootstrap_install_fromfindr   r   r@   r>   r   r<   get_unpatchedr   rh   r|   r   r   wrapsrV   r   	patch_allr   r   r   <module>r      s]   F F     				 				          1 1 1 1 1 1 8 8 8 8 8 8 > > > > > >     * * * * * * ( ( ( ( ( ( & & & & & & C C C C C C C C            	 	 	  ,  "-2 #  #  # L  *) ) ) $,  6	 677j j j j jh j j jZ	+ 	+ 	+ 	 	 	 	 	 	# 	#  	#F F F F F# F F F
       r   