a oe#@sDdZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl mZmZddl mZddlmZdd lmZmZdd lmZdd lmZdd lmZgd ZejZdZej Z!ej Z"ddZ#ddZ$ddZ%ej&j%je%_e'ej&j(Z)Gddde)Z(ddZ*ej+fddZ,e-e ddZ Gddde.Z/e0dS)z@Extensions to the 'distutils' for large or complex distributionsN)DistutilsOptionError) convert_path)loggingmonkey)version)Require) PackageFinderPEP420PackageFinder) Distribution) Extension)SetuptoolsDeprecationWarning)setupr Commandr rr find_packagesfind_namespace_packagescCs:Gdddtjj}||}|jdd|jr6t|dS)Ncs6eZdZdZfddZd fdd ZddZZS) z4_install_setup_requires..MinimalDistributionzl A minimal version of a distribution for supporting the fetch_build_eggs interface. cs<d}fddt|t@D}t||jdS)N)Zdependency_linkssetup_requirescsi|]}||qSr).0kattrsr4C:\Program Files\Certbot\pkgs\setuptools\__init__.py 3zQ_install_setup_requires..MinimalDistribution.__init__..)setsuper__init__ set_defaultsZ_disable)selfrZ_inclZfiltered __class__rrr1s z=_install_setup_requires..MinimalDistribution.__init__Ncs:zt|\}}|dfWSty4|dfYS0dS)zAIgnore ``pyproject.toml``, they are not related to setup_requiresrN)rZ _split_standard_project_metadata Exception)r filenamesZcfgZtomlr rr_get_project_config_files8s   zN_install_setup_requires..MinimalDistribution._get_project_config_filescSsdS)zl Disable finalize_options to avoid building the working set. Ref #2158. Nr)rrrrfinalize_options@szE_install_setup_requires..MinimalDistribution.finalize_options)N)__name__ __module__ __qualname____doc__rr$r% __classcell__rrr rMinimalDistribution+s r+T)Zignore_option_errors) distutilscorer Zparse_config_filesr_fetch_build_eggs)rr+distrrr_install_setup_requires(s  r0c Cstz||jWn^tyn}zFd}d|jjvrXt|drF||n|d|dWYd}~n d}~00dS)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. ZInvalidVersionadd_note )Zfetch_build_eggsrr"r!r&hasattrr1Zannounce)r/exmsgrrrr.Ns   r.cKs"tt|tjjfi|SN)rZ configurer0r,r-rrrrrrcsrcs@eZdZdZdZfddZd ddZdd Zdd d ZZ S)ra 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 st|t||dS)zj Construct the command for dist, updating vars(self) with any keyword parameters. N)rrvarsupdate)rr/kwr rrrs zCommand.__init__NcCsBt||}|dur"t||||St|ts>td|||f|S)Nz'%s' must be a %s (got `%s`))getattrsetattr isinstancestrr)roptionZwhatdefaultvalrrr_ensure_stringlikes    zCommand._ensure_stringlikecCspt||}|durdSt|tr6t||td|n6t|trTtdd|D}nd}|sltd||fdS)aEnsure 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+css|]}t|tVqdSr6)r<r=)rvrrr rz-Command.ensure_string_list..Fz''%s' must be a list of strings (got %r)) r:r<r=r;resplitlistallr)rr>r@okrrrensure_string_lists    zCommand.ensure_string_listrcKs t|||}t|||Sr6)_Commandreinitialize_commandr7r8)rZcommandZreinit_subcommandsr9cmdrrrrKszCommand.reinitialize_command)N)r) r&r'r(r)Zcommand_consumes_argumentsrrArIrKr*rrr rrps 6  rcCs&ddtj|ddD}ttjj|S)z% Find all files under 'path' css,|]$\}}}|D]}tj||VqqdSr6)ospathjoin)rbasedirsfilesfilerrrrCsz#_find_all_simple..T) followlinks)rMwalkfilterrNisfile)rNresultsrrr_find_all_simples rYcCs6t|}|tjkr.tjtjj|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) rYrMcurdir functoolspartialrNrelpathmaprF)dirrRZmake_relrrrfindalls   racCstjddddt|S)NzAccess to implementation detaila The function `convert_path` is not provided by setuptools itself, and therefore not part of the public API. Its direct usage by 3rd-party packages is considered improper and the function may be removed in the future. )i )Zdue_date)r emit _convert_path)pathnamerrrrs  rc@seZdZdZdS)sicz;Treat this string as-is (https://en.wikipedia.org/wiki/Sic)N)r&r'r(r)rrrrrgsrg)1r)r\rMrDZ_distutils_hack.overrideZ_distutils_hackZdistutils.corer,Zdistutils.errorsrZdistutils.utilrrerrrZ_version_moduleZdependsrZ discoveryr r r/r extensionr warningsr __all__ __version__Zbootstrap_install_fromfindrrr0r.rr-Z get_unpatchedrrJrYr[rawrapsr=rgZ patch_allrrrrs>        & m