├── .bumpversion.cfg ├── .codecov.yml ├── .coveragerc ├── .editorconfig ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── documentation-report.yml │ └── feature-request.yml ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── ci-sage.yml │ └── main.yml ├── .gitignore ├── .mergify.yml ├── .readthedocs.yaml ├── LICENSE ├── MANIFEST.in ├── NEWS.rst ├── README.rst ├── SECURITY.md ├── _distutils_hack ├── __init__.py └── override.py ├── bootstrap.egg-info ├── PKG-INFO └── entry_points.txt ├── conftest.py ├── docs ├── artwork.rst ├── build_meta.rst ├── conf.py ├── deprecated │ ├── changed_keywords.rst │ ├── commands.rst │ ├── dependency_links.rst │ ├── distutils-legacy.rst │ ├── distutils │ │ ├── _setuptools_disclaimer.rst │ │ ├── apiref.rst │ │ ├── builtdist.rst │ │ ├── commandref.rst │ │ ├── configfile.rst │ │ ├── examples.rst │ │ ├── extending.rst │ │ ├── index.rst │ │ ├── introduction.rst │ │ ├── packageindex.rst │ │ ├── setupscript.rst │ │ ├── sourcedist.rst │ │ └── uploading.rst │ ├── easy_install.rst │ ├── functionalities.rst │ ├── index.rst │ ├── python_eggs.rst │ ├── resource_extraction.rst │ └── zip_safe.rst ├── development │ ├── developer-guide.rst │ ├── index.rst │ └── releases.rst ├── history.rst ├── images │ ├── banner-640x320.svg │ ├── banner-negative-640x320.svg │ ├── favicon.svg │ ├── logo-demo-editable-inkscape.svg │ ├── logo-demo.svg │ ├── logo-editable-inkscape.svg │ ├── logo-inline-negative.svg │ ├── logo-inline.svg │ ├── logo-negative.svg │ ├── logo-over-white.svg │ ├── logo-symbol-only.svg │ ├── logo-text-only.svg │ └── logo.svg ├── index.rst ├── pkg_resources.rst ├── python 2 sunset.rst ├── references │ └── keywords.rst ├── roadmap.rst ├── setuptools.rst └── userguide │ ├── datafiles.rst │ ├── declarative_config.rst │ ├── dependency_management.rst │ ├── development_mode.rst │ ├── distribution.rst │ ├── entry_point.rst │ ├── ext_modules.rst │ ├── extension.rst │ ├── index.rst │ ├── miscellaneous.rst │ ├── package_discovery.rst │ ├── pyproject_config.rst │ └── quickstart.rst ├── exercises.py ├── launcher.c ├── launcher └── CMakeLists.txt ├── mypy.ini ├── newsfragments ├── .gitignore ├── 3903.feature.rst ├── 3904.feature.1.rst ├── 3904.feature.2.rst ├── 4023.misc.rst ├── 4027.misc.1.rst ├── 4027.misc.2.rst └── README.rst ├── pkg_resources ├── __init__.py ├── _vendor │ ├── __init__.py │ ├── importlib_resources-5.10.2.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── importlib_resources │ │ ├── __init__.py │ │ ├── _adapters.py │ │ ├── _common.py │ │ ├── _compat.py │ │ ├── _itertools.py │ │ ├── _legacy.py │ │ ├── abc.py │ │ ├── py.typed │ │ ├── readers.py │ │ ├── simple.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── _compat.py │ │ │ ├── _path.py │ │ │ ├── data01 │ │ │ ├── __init__.py │ │ │ ├── binary.file │ │ │ ├── subdirectory │ │ │ │ ├── __init__.py │ │ │ │ └── binary.file │ │ │ ├── utf-16.file │ │ │ └── utf-8.file │ │ │ ├── data02 │ │ │ ├── __init__.py │ │ │ ├── one │ │ │ │ ├── __init__.py │ │ │ │ └── resource1.txt │ │ │ └── two │ │ │ │ ├── __init__.py │ │ │ │ └── resource2.txt │ │ │ ├── namespacedata01 │ │ │ ├── binary.file │ │ │ ├── utf-16.file │ │ │ └── utf-8.file │ │ │ ├── test_compatibilty_files.py │ │ │ ├── test_contents.py │ │ │ ├── test_files.py │ │ │ ├── test_open.py │ │ │ ├── test_path.py │ │ │ ├── test_read.py │ │ │ ├── test_reader.py │ │ │ ├── test_resource.py │ │ │ ├── update-zips.py │ │ │ ├── util.py │ │ │ ├── zipdata01 │ │ │ ├── __init__.py │ │ │ └── ziptestdata.zip │ │ │ └── zipdata02 │ │ │ ├── __init__.py │ │ │ └── ziptestdata.zip │ ├── jaraco.context-4.3.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco.functools-3.6.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco.text-3.7.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco │ │ ├── __init__.py │ │ ├── context.py │ │ ├── functools.py │ │ └── text │ │ │ ├── Lorem ipsum.txt │ │ │ └── __init__.py │ ├── more_itertools-9.1.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ └── WHEEL │ ├── more_itertools │ │ ├── __init__.py │ │ ├── __init__.pyi │ │ ├── more.py │ │ ├── more.pyi │ │ ├── py.typed │ │ ├── recipes.py │ │ └── recipes.pyi │ ├── packaging-23.1.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── LICENSE.APACHE │ │ ├── LICENSE.BSD │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ └── WHEEL │ ├── packaging │ │ ├── __init__.py │ │ ├── _elffile.py │ │ ├── _manylinux.py │ │ ├── _musllinux.py │ │ ├── _parser.py │ │ ├── _structures.py │ │ ├── _tokenizer.py │ │ ├── markers.py │ │ ├── metadata.py │ │ ├── py.typed │ │ ├── requirements.py │ │ ├── specifiers.py │ │ ├── tags.py │ │ ├── utils.py │ │ └── version.py │ ├── platformdirs-2.6.2.dist-info │ │ ├── INSTALLER │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── licenses │ │ │ └── LICENSE │ ├── platformdirs │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── android.py │ │ ├── api.py │ │ ├── macos.py │ │ ├── py.typed │ │ ├── unix.py │ │ ├── version.py │ │ └── windows.py │ ├── typing_extensions-4.4.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ └── WHEEL │ ├── typing_extensions.py │ ├── vendored.txt │ ├── zipp-3.7.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ └── zipp.py ├── api_tests.txt ├── extern │ └── __init__.py └── tests │ ├── __init__.py │ ├── data │ ├── my-test-package-source │ │ ├── setup.cfg │ │ └── setup.py │ ├── my-test-package-zip │ │ └── my-test-package.zip │ ├── my-test-package_unpacked-egg │ │ └── my_test_package-1.0-py3.7.egg │ │ │ └── EGG-INFO │ │ │ ├── PKG-INFO │ │ │ ├── SOURCES.txt │ │ │ ├── dependency_links.txt │ │ │ ├── top_level.txt │ │ │ └── zip-safe │ └── my-test-package_zipped-egg │ │ └── my_test_package-1.0-py3.7.egg │ ├── test_find_distributions.py │ ├── test_markers.py │ ├── test_pkg_resources.py │ ├── test_resources.py │ └── test_working_set.py ├── pyproject.toml ├── pytest.ini ├── setup.cfg ├── setup.py ├── setuptools ├── __init__.py ├── _core_metadata.py ├── _distutils │ ├── __init__.py │ ├── _collections.py │ ├── _functools.py │ ├── _log.py │ ├── _macos_compat.py │ ├── _msvccompiler.py │ ├── archive_util.py │ ├── bcppcompiler.py │ ├── ccompiler.py │ ├── cmd.py │ ├── command │ │ ├── __init__.py │ │ ├── _framework_compat.py │ │ ├── bdist.py │ │ ├── bdist_dumb.py │ │ ├── bdist_rpm.py │ │ ├── build.py │ │ ├── build_clib.py │ │ ├── build_ext.py │ │ ├── build_py.py │ │ ├── build_scripts.py │ │ ├── check.py │ │ ├── clean.py │ │ ├── command_template │ │ ├── config.py │ │ ├── install.py │ │ ├── install_data.py │ │ ├── install_egg_info.py │ │ ├── install_headers.py │ │ ├── install_lib.py │ │ ├── install_scripts.py │ │ ├── py37compat.py │ │ ├── register.py │ │ ├── sdist.py │ │ ├── upload.py │ │ ├── wininst-10.0-amd64.exe │ │ ├── wininst-10.0.exe │ │ ├── wininst-14.0-amd64.exe │ │ ├── wininst-14.0.exe │ │ ├── wininst-6.0.exe │ │ ├── wininst-7.1.exe │ │ ├── wininst-8.0.exe │ │ ├── wininst-9.0-amd64.exe │ │ └── wininst-9.0.exe │ ├── config.py │ ├── core.py │ ├── cygwinccompiler.py │ ├── debug.py │ ├── dep_util.py │ ├── dir_util.py │ ├── dist.py │ ├── errors.py │ ├── extension.py │ ├── fancy_getopt.py │ ├── file_util.py │ ├── filelist.py │ ├── log.py │ ├── msvc9compiler.py │ ├── msvccompiler.py │ ├── py38compat.py │ ├── py39compat.py │ ├── spawn.py │ ├── sysconfig.py │ ├── tests │ │ ├── Setup.sample │ │ ├── __init__.py │ │ ├── includetest.rst │ │ ├── py37compat.py │ │ ├── py38compat.py │ │ ├── support.py │ │ ├── test_archive_util.py │ │ ├── test_bdist.py │ │ ├── test_bdist_dumb.py │ │ ├── test_bdist_rpm.py │ │ ├── test_build.py │ │ ├── test_build_clib.py │ │ ├── test_build_ext.py │ │ ├── test_build_py.py │ │ ├── test_build_scripts.py │ │ ├── test_ccompiler.py │ │ ├── test_check.py │ │ ├── test_clean.py │ │ ├── test_cmd.py │ │ ├── test_config.py │ │ ├── test_config_cmd.py │ │ ├── test_core.py │ │ ├── test_cygwinccompiler.py │ │ ├── test_dep_util.py │ │ ├── test_dir_util.py │ │ ├── test_dist.py │ │ ├── test_extension.py │ │ ├── test_file_util.py │ │ ├── test_filelist.py │ │ ├── test_install.py │ │ ├── test_install_data.py │ │ ├── test_install_headers.py │ │ ├── test_install_lib.py │ │ ├── test_install_scripts.py │ │ ├── test_log.py │ │ ├── test_msvc9compiler.py │ │ ├── test_msvccompiler.py │ │ ├── test_register.py │ │ ├── test_sdist.py │ │ ├── test_spawn.py │ │ ├── test_sysconfig.py │ │ ├── test_text_file.py │ │ ├── test_unixccompiler.py │ │ ├── test_upload.py │ │ ├── test_util.py │ │ ├── test_version.py │ │ ├── test_versionpredicate.py │ │ ├── unix_compat.py │ │ ├── xxmodule-3.8.c │ │ └── xxmodule.c │ ├── text_file.py │ ├── unixccompiler.py │ ├── util.py │ ├── version.py │ └── versionpredicate.py ├── _entry_points.py ├── _imp.py ├── _importlib.py ├── _itertools.py ├── _normalization.py ├── _path.py ├── _reqs.py ├── _vendor │ ├── __init__.py │ ├── importlib_metadata-6.0.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── importlib_metadata │ │ ├── __init__.py │ │ ├── _adapters.py │ │ ├── _collections.py │ │ ├── _compat.py │ │ ├── _functools.py │ │ ├── _itertools.py │ │ ├── _meta.py │ │ ├── _py39compat.py │ │ ├── _text.py │ │ └── py.typed │ ├── importlib_resources-5.10.2.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── importlib_resources │ │ ├── __init__.py │ │ ├── _adapters.py │ │ ├── _common.py │ │ ├── _compat.py │ │ ├── _itertools.py │ │ ├── _legacy.py │ │ ├── abc.py │ │ ├── py.typed │ │ ├── readers.py │ │ ├── simple.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── _compat.py │ │ │ ├── _path.py │ │ │ ├── data01 │ │ │ ├── __init__.py │ │ │ ├── binary.file │ │ │ ├── subdirectory │ │ │ │ ├── __init__.py │ │ │ │ └── binary.file │ │ │ ├── utf-16.file │ │ │ └── utf-8.file │ │ │ ├── data02 │ │ │ ├── __init__.py │ │ │ ├── one │ │ │ │ ├── __init__.py │ │ │ │ └── resource1.txt │ │ │ └── two │ │ │ │ ├── __init__.py │ │ │ │ └── resource2.txt │ │ │ ├── namespacedata01 │ │ │ ├── binary.file │ │ │ ├── utf-16.file │ │ │ └── utf-8.file │ │ │ ├── test_compatibilty_files.py │ │ │ ├── test_contents.py │ │ │ ├── test_files.py │ │ │ ├── test_open.py │ │ │ ├── test_path.py │ │ │ ├── test_read.py │ │ │ ├── test_reader.py │ │ │ ├── test_resource.py │ │ │ ├── update-zips.py │ │ │ ├── util.py │ │ │ ├── zipdata01 │ │ │ ├── __init__.py │ │ │ └── ziptestdata.zip │ │ │ └── zipdata02 │ │ │ ├── __init__.py │ │ │ └── ziptestdata.zip │ ├── jaraco.context-4.3.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco.functools-3.6.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco.text-3.7.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── jaraco │ │ ├── __init__.py │ │ ├── context.py │ │ ├── functools.py │ │ └── text │ │ │ ├── Lorem ipsum.txt │ │ │ └── __init__.py │ ├── more_itertools-8.8.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── more_itertools │ │ ├── __init__.py │ │ ├── __init__.pyi │ │ ├── more.py │ │ ├── more.pyi │ │ ├── py.typed │ │ ├── recipes.py │ │ └── recipes.pyi │ ├── ordered_set-3.1.1.dist-info │ │ ├── INSTALLER │ │ ├── METADATA │ │ ├── MIT-LICENSE │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ ├── ordered_set.py │ ├── packaging-23.1.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── LICENSE.APACHE │ │ ├── LICENSE.BSD │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ └── WHEEL │ ├── packaging │ │ ├── __init__.py │ │ ├── _elffile.py │ │ ├── _manylinux.py │ │ ├── _musllinux.py │ │ ├── _parser.py │ │ ├── _structures.py │ │ ├── _tokenizer.py │ │ ├── markers.py │ │ ├── metadata.py │ │ ├── py.typed │ │ ├── requirements.py │ │ ├── specifiers.py │ │ ├── tags.py │ │ ├── utils.py │ │ └── version.py │ ├── tomli-2.0.1.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ └── WHEEL │ ├── tomli │ │ ├── __init__.py │ │ ├── _parser.py │ │ ├── _re.py │ │ ├── _types.py │ │ └── py.typed │ ├── typing_extensions-4.0.1.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ └── WHEEL │ ├── typing_extensions.py │ ├── vendored.txt │ ├── zipp-3.7.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ └── zipp.py ├── archive_util.py ├── build_meta.py ├── cli-32.exe ├── cli-64.exe ├── cli-arm64.exe ├── cli.exe ├── command │ ├── __init__.py │ ├── _requirestxt.py │ ├── alias.py │ ├── bdist_egg.py │ ├── bdist_rpm.py │ ├── build.py │ ├── build_clib.py │ ├── build_ext.py │ ├── build_py.py │ ├── develop.py │ ├── dist_info.py │ ├── easy_install.py │ ├── editable_wheel.py │ ├── egg_info.py │ ├── install.py │ ├── install_egg_info.py │ ├── install_lib.py │ ├── install_scripts.py │ ├── launcher manifest.xml │ ├── register.py │ ├── rotate.py │ ├── saveopts.py │ ├── sdist.py │ ├── setopt.py │ ├── test.py │ ├── upload.py │ └── upload_docs.py ├── config │ ├── __init__.py │ ├── _apply_pyprojecttoml.py │ ├── _validate_pyproject │ │ ├── NOTICE │ │ ├── __init__.py │ │ ├── error_reporting.py │ │ ├── extra_validations.py │ │ ├── fastjsonschema_exceptions.py │ │ ├── fastjsonschema_validations.py │ │ └── formats.py │ ├── expand.py │ ├── pyprojecttoml.py │ └── setupcfg.py ├── dep_util.py ├── depends.py ├── discovery.py ├── dist.py ├── errors.py ├── extension.py ├── extern │ └── __init__.py ├── glob.py ├── gui-32.exe ├── gui-64.exe ├── gui-arm64.exe ├── gui.exe ├── installer.py ├── launch.py ├── logging.py ├── monkey.py ├── msvc.py ├── namespaces.py ├── package_index.py ├── py312compat.py ├── sandbox.py ├── script (dev).tmpl ├── script.tmpl ├── tests │ ├── __init__.py │ ├── config │ │ ├── __init__.py │ │ ├── downloads │ │ │ ├── .gitignore │ │ │ ├── __init__.py │ │ │ └── preload.py │ │ ├── setupcfg_examples.txt │ │ ├── test_apply_pyprojecttoml.py │ │ ├── test_expand.py │ │ ├── test_pyprojecttoml.py │ │ ├── test_pyprojecttoml_dynamic_deps.py │ │ └── test_setupcfg.py │ ├── contexts.py │ ├── environment.py │ ├── fixtures.py │ ├── indexes │ │ └── test_links_priority │ │ │ ├── external.html │ │ │ └── simple │ │ │ └── foobar │ │ │ └── index.html │ ├── integration │ │ ├── __init__.py │ │ ├── helpers.py │ │ └── test_pip_install_sdist.py │ ├── mod_with_constant.py │ ├── namespaces.py │ ├── script-with-bom.py │ ├── server.py │ ├── test_archive_util.py │ ├── test_bdist_deprecations.py │ ├── test_bdist_egg.py │ ├── test_build.py │ ├── test_build_clib.py │ ├── test_build_ext.py │ ├── test_build_meta.py │ ├── test_build_py.py │ ├── test_config_discovery.py │ ├── test_core_metadata.py │ ├── test_dep_util.py │ ├── test_depends.py │ ├── test_develop.py │ ├── test_dist.py │ ├── test_dist_info.py │ ├── test_distutils_adoption.py │ ├── test_easy_install.py │ ├── test_editable_install.py │ ├── test_egg_info.py │ ├── test_extern.py │ ├── test_find_packages.py │ ├── test_find_py_modules.py │ ├── test_glob.py │ ├── test_install_scripts.py │ ├── test_integration.py │ ├── test_logging.py │ ├── test_manifest.py │ ├── test_msvc14.py │ ├── test_namespaces.py │ ├── test_packageindex.py │ ├── test_register.py │ ├── test_sandbox.py │ ├── test_sdist.py │ ├── test_setopt.py │ ├── test_setuptools.py │ ├── test_test.py │ ├── test_unicode_utils.py │ ├── test_upload.py │ ├── test_virtualenv.py │ ├── test_warnings.py │ ├── test_wheel.py │ ├── test_windows_wrappers.py │ ├── text.py │ └── textwrap.py ├── unicode_utils.py ├── version.py ├── warnings.py ├── wheel.py └── windows_support.py ├── tools ├── build_launchers.py ├── finalize.py ├── generate_validation_code.py ├── ppc64le-patch.py └── vendored.py ├── towncrier.toml └── tox.ini /.bumpversion.cfg: -------------------------------------------------------------------------------- 1 | [bumpversion] 2 | current_version = 68.1.2 3 | commit = True 4 | tag = True 5 | 6 | [bumpversion:file:setup.cfg] 7 | -------------------------------------------------------------------------------- /.codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | coverage: 3 | status: 4 | project: 5 | default: 6 | informational: true # Treat coverage info as informational only 7 | threshold: 0.5% 8 | patch: 9 | default: 10 | informational: true # Treat coverage info as informational only 11 | github_checks: 12 | annotations: false # Codecov may pollute the "files" diff view 13 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = 3 | # leading `*/` for pytest-dev/pytest-cov#456 4 | */.tox/* 5 | disable_warnings = 6 | couldnt-parse 7 | 8 | # local 9 | */_validate_pyproject/* # generated code, tested in `validate-pyproject` 10 | 11 | [report] 12 | show_missing = True 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = tab 6 | indent_size = 4 7 | insert_final_newline = true 8 | end_of_line = lf 9 | 10 | [*.py] 11 | indent_style = space 12 | max_line_length = 88 13 | 14 | [*.{yml,yaml}] 15 | indent_style = space 16 | indent_size = 2 17 | 18 | [*.rst] 19 | indent_style = space 20 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | tidelift: pypi/setuptools 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: 🤔 Have questions or need support? 3 | url: https://github.com/pypa/setuptools/discussions 4 | about: This is a place for the community to exchange ideas and recipes 5 | - name: 💬 Discourse 6 | url: https://discuss.python.org/c/packaging 7 | about: | 8 | Please ask typical Q&A here: general ideas for Python packaging, 9 | questions about structuring projects and so on 10 | - name: 💬 Discord (chat) 11 | url: https://discord.com/invite/pypa 12 | about: Chat with devs 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "pip" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | allow: 8 | - dependency-type: "all" 9 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ## Summary of changes 5 | 6 | 7 | 8 | Closes 9 | 10 | ### Pull Request Checklist 11 | - [ ] Changes have tests 12 | - [ ] News fragment added in [`newsfragments/`]. 13 | _(See [documentation][PR docs] for details)_ 14 | 15 | 16 | [`newsfragments/`]: https://github.com/pypa/setuptools/tree/master/newsfragments 17 | [PR docs]: 18 | https://setuptools.pypa.io/en/latest/development/developer-guide.html#making-a-pull-request 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # syntax: glob 2 | bin 3 | build 4 | dist 5 | docs/build 6 | include 7 | lib 8 | distribute.egg-info 9 | setuptools.egg-info 10 | .coverage 11 | .eggs 12 | .tox 13 | .venv 14 | *.egg 15 | *.py[cod] 16 | *.swp 17 | *~ 18 | .hg* 19 | .cache 20 | .idea/ 21 | .pytest_cache/ 22 | .mypy_cache/ 23 | -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: auto-merge 3 | conditions: 4 | - base=master 5 | - label=auto-merge 6 | - status-success=continuous-integration/appveyor/pr 7 | - status-success=continuous-integration/travis-ci/pr 8 | - status-success=deploy/netlify 9 | actions: 10 | merge: 11 | method: merge 12 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | python: 3 | install: 4 | - path: . 5 | extra_requirements: 6 | - docs 7 | 8 | # required boilerplate readthedocs/readthedocs.org#10401 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3" 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy 2 | of this software and associated documentation files (the "Software"), to 3 | deal in the Software without restriction, including without limitation the 4 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 5 | sell copies of the Software, and to permit persons to whom the Software is 6 | furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in 9 | all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 16 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 17 | IN THE SOFTWARE. 18 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include setuptools *.py *.exe *.xml *.tmpl 2 | recursive-include tests *.py 3 | recursive-include setuptools/tests *.html 4 | recursive-include docs *.py *.txt *.rst *.conf *.css *.css_t Makefile indexsidebar.html 5 | recursive-include setuptools/_vendor *.py *.txt 6 | recursive-include pkg_resources *.py *.txt 7 | recursive-include pkg_resources/tests/data * 8 | recursive-include tools * 9 | recursive-include newsfragments * 10 | include *.py 11 | include *.rst 12 | include MANIFEST.in 13 | include LICENSE 14 | include launcher.c 15 | include msvc-build-launcher.cmd 16 | include pytest.ini 17 | include tox.ini 18 | include setuptools/tests/config/setupcfg_examples.txt 19 | global-exclude *.py[cod] __pycache__ 20 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Contact 2 | 3 | To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. 4 | -------------------------------------------------------------------------------- /_distutils_hack/override.py: -------------------------------------------------------------------------------- 1 | __import__('_distutils_hack').do_override() 2 | -------------------------------------------------------------------------------- /bootstrap.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Name: setuptools-bootstrap 2 | Version: 1.0 3 | -------------------------------------------------------------------------------- /bootstrap.egg-info/entry_points.txt: -------------------------------------------------------------------------------- 1 | [distutils.commands] 2 | egg_info = setuptools.command.egg_info:egg_info 3 | build_py = setuptools.command.build_py:build_py 4 | sdist = setuptools.command.sdist:sdist 5 | editable_wheel = setuptools.command.editable_wheel:editable_wheel 6 | 7 | [distutils.setup_keywords] 8 | include_package_data = setuptools.dist:assert_bool 9 | install_requires = setuptools.dist:check_requirements 10 | extras_require = setuptools.dist:check_extras 11 | entry_points = setuptools.dist:check_entry_points 12 | exclude_package_data = setuptools.dist:check_package_data 13 | namespace_packages = setuptools.dist:check_nsp 14 | 15 | [egg_info.writers] 16 | PKG-INFO = setuptools.command.egg_info:write_pkg_info 17 | dependency_links.txt = setuptools.command.egg_info:overwrite_arg 18 | entry_points.txt = setuptools.command.egg_info:write_entries 19 | requires.txt = setuptools.command.egg_info:write_requirements 20 | -------------------------------------------------------------------------------- /conftest.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | import pytest 4 | 5 | 6 | pytest_plugins = 'setuptools.tests.fixtures' 7 | 8 | 9 | def pytest_addoption(parser): 10 | parser.addoption( 11 | "--package_name", 12 | action="append", 13 | default=[], 14 | help="list of package_name to pass to test functions", 15 | ) 16 | parser.addoption( 17 | "--integration", 18 | action="store_true", 19 | default=False, 20 | help="run integration tests (only)", 21 | ) 22 | 23 | 24 | def pytest_configure(config): 25 | config.addinivalue_line("markers", "integration: integration tests") 26 | config.addinivalue_line("markers", "uses_network: tests may try to download files") 27 | 28 | 29 | collect_ignore = [ 30 | 'tests/manual_test.py', 31 | 'setuptools/tests/mod_with_constant.py', 32 | 'setuptools/_distutils', 33 | '_distutils_hack', 34 | 'setuptools/extern', 35 | 'pkg_resources/extern', 36 | 'pkg_resources/tests/data', 37 | 'setuptools/_vendor', 38 | 'pkg_resources/_vendor', 39 | 'setuptools/config/_validate_pyproject', 40 | ] 41 | 42 | 43 | if sys.version_info < (3, 6): 44 | collect_ignore.append('docs/conf.py') # uses f-strings 45 | collect_ignore.append('pavement.py') 46 | 47 | 48 | if sys.version_info < (3, 9) or sys.platform == 'cygwin': 49 | collect_ignore.append('tools/finalize.py') 50 | 51 | 52 | @pytest.fixture(autouse=True) 53 | def _skip_integration(request): 54 | running_integration_tests = request.config.getoption("--integration") 55 | is_integration_test = request.node.get_closest_marker("integration") 56 | if running_integration_tests and not is_integration_test: 57 | pytest.skip("running integration tests only") 58 | if not running_integration_tests and is_integration_test: 59 | pytest.skip("skipping integration tests") 60 | -------------------------------------------------------------------------------- /docs/deprecated/distutils/_setuptools_disclaimer.rst: -------------------------------------------------------------------------------- 1 | .. note:: 2 | 3 | This document is being retained solely until the ``setuptools`` documentation 4 | at https://setuptools.pypa.io/en/latest/setuptools.html 5 | independently covers all of the relevant information currently included here. 6 | -------------------------------------------------------------------------------- /docs/deprecated/distutils/index.rst: -------------------------------------------------------------------------------- 1 | .. _distutils-index: 2 | 3 | ############################################## 4 | Distributing Python Modules (Legacy version) 5 | ############################################## 6 | 7 | :Authors: Greg Ward, Anthony Baxter 8 | :Email: distutils-sig@python.org 9 | 10 | .. seealso:: 11 | 12 | :ref:`distributing-index` 13 | The up to date module distribution documentations 14 | 15 | .. include:: ./_setuptools_disclaimer.rst 16 | 17 | .. note:: 18 | 19 | This guide only covers the basic tools for building and distributing 20 | extensions that are provided as part of this version of Python. Third party 21 | tools offer easier to use and more secure alternatives. Refer to the `quick 22 | recommendations section `__ 23 | in the Python Packaging User Guide for more information. 24 | 25 | This document describes the Python Distribution Utilities ("Distutils") from 26 | the module developer's point of view, describing the underlying capabilities 27 | that ``setuptools`` builds on to allow Python developers to make Python modules 28 | and extensions readily available to a wider audience. 29 | 30 | .. toctree:: 31 | :maxdepth: 2 32 | :numbered: 33 | 34 | introduction.rst 35 | setupscript.rst 36 | configfile.rst 37 | sourcedist.rst 38 | builtdist.rst 39 | examples.rst 40 | extending.rst 41 | commandref.rst 42 | apiref.rst 43 | -------------------------------------------------------------------------------- /docs/deprecated/distutils/packageindex.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _package-index: 4 | 5 | ******************************* 6 | The Python Package Index (PyPI) 7 | ******************************* 8 | 9 | The `Python Package Index (PyPI)`_ stores metadata describing distributions 10 | packaged with distutils and other publishing tools, as well the distribution 11 | archives themselves. 12 | 13 | References to up to date PyPI documentation can be found at 14 | :ref:`publishing-python-packages`. 15 | 16 | .. _Python Package Index (PyPI): https://pypi.org 17 | -------------------------------------------------------------------------------- /docs/deprecated/distutils/uploading.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | *************************************** 4 | Uploading Packages to the Package Index 5 | *************************************** 6 | 7 | References to up to date PyPI documentation can be found at 8 | :ref:`publishing-python-packages`. 9 | -------------------------------------------------------------------------------- /docs/deprecated/functionalities.rst: -------------------------------------------------------------------------------- 1 | "Eggsecutable" Scripts 2 | ---------------------- 3 | 4 | .. deprecated:: 45.3.0 5 | 6 | Occasionally, there are situations where it's desirable to make an ``.egg`` 7 | file directly executable. You can do this by including an entry point such 8 | as the following:: 9 | 10 | setup( 11 | # other arguments here... 12 | entry_points={ 13 | "setuptools.installation": [ 14 | "eggsecutable = my_package.some_module:main_func", 15 | ] 16 | } 17 | ) 18 | 19 | Any eggs built from the above setup script will include a short executable 20 | prelude that imports and calls ``main_func()`` from ``my_package.some_module``. 21 | The prelude can be run on Unix-like platforms (including Mac and Linux) by 22 | invoking the egg with ``/bin/sh``, or by enabling execute permissions on the 23 | ``.egg`` file. For the executable prelude to run, the appropriate version of 24 | Python must be available via the ``PATH`` environment variable, under its 25 | "long" name. That is, if the egg is built for Python 2.3, there must be a 26 | ``python2.3`` executable present in a directory on ``PATH``. 27 | 28 | IMPORTANT NOTE: Eggs with an "eggsecutable" header cannot be renamed, or 29 | invoked via symlinks. They *must* be invoked using their original filename, in 30 | order to ensure that, once running, ``pkg_resources`` will know what project 31 | and version is in use. The header script will check this and exit with an 32 | error if the ``.egg`` file has been renamed or is invoked via a symlink that 33 | changes its base name. 34 | -------------------------------------------------------------------------------- /docs/deprecated/index.rst: -------------------------------------------------------------------------------- 1 | ====================================================== 2 | Guides on backward compatibility & deprecated practice 3 | ====================================================== 4 | 5 | ``Setuptools`` has undergone tremendous changes since its first debut. As its 6 | development continues to roll forward, many of the practice and mechanisms it 7 | had established are now considered deprecated. But they still remain relevant 8 | as a plethora of libraries continue to depend on them. Many people also find 9 | it necessary to equip themselves with the knowledge to better support backward 10 | compatibility. This guide aims to provide the essential information for such 11 | objectives. 12 | 13 | .. toctree:: 14 | :maxdepth: 1 15 | 16 | changed_keywords 17 | dependency_links 18 | python_eggs 19 | easy_install 20 | zip_safe 21 | resource_extraction 22 | distutils/index 23 | distutils-legacy 24 | functionalities 25 | commands 26 | -------------------------------------------------------------------------------- /docs/development/index.rst: -------------------------------------------------------------------------------- 1 | ------------------------- 2 | Development on Setuptools 3 | ------------------------- 4 | 5 | Setuptools is maintained by the Python community under the Python Packaging 6 | Authority (PyPA) and led by Jason R. Coombs. 7 | 8 | This document describes the process by which Setuptools is developed. 9 | This document assumes the reader has some passing familiarity with 10 | *using* setuptools, the ``pkg_resources`` module, and pip. It 11 | does not attempt to explain basic concepts like inter-project 12 | dependencies, nor does it contain detailed lexical syntax for most 13 | file formats. Neither does it explain concepts like "namespace 14 | packages" or "resources" in any detail, as all of these subjects are 15 | covered at length in the setuptools developer's guide and the 16 | ``pkg_resources`` reference manual. 17 | 18 | Instead, this is **internal** documentation for how those concepts and 19 | features are *implemented* in concrete terms. It is intended for people 20 | who are working on the setuptools code base, who want to be able to 21 | troubleshoot setuptools problems, want to write code that reads the file 22 | formats involved, or want to otherwise tinker with setuptools-generated 23 | files and directories. 24 | 25 | Note, however, that these are all internal implementation details and 26 | are therefore subject to change; stick to the published API if you don't 27 | want to be responsible for keeping your code from breaking when 28 | setuptools changes. You have been warned. 29 | 30 | .. toctree:: 31 | :maxdepth: 1 32 | 33 | developer-guide 34 | releases 35 | -------------------------------------------------------------------------------- /docs/development/releases.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Release Process 3 | =============== 4 | 5 | In order to allow for rapid, predictable releases, Setuptools uses a 6 | mechanical technique for releases, enacted on tagged commits by 7 | continuous integration. 8 | 9 | To finalize a release, run ``tox -e finalize``, review, then push 10 | the changes. 11 | 12 | If tests pass, the release will be uploaded to PyPI. 13 | 14 | Release Frequency 15 | ----------------- 16 | 17 | Some have asked why Setuptools is released so frequently. Because Setuptools 18 | uses a mechanical release process, it's very easy to make releases whenever the 19 | code is stable (tests are passing). As a result, the philosophy is to release 20 | early and often. 21 | 22 | While some find the frequent releases somewhat surprising, they only empower 23 | the user. Although releases are made frequently, users can choose the frequency 24 | at which they use those releases. If instead Setuptools contributions were only 25 | released in batches, the user would be constrained to only use Setuptools when 26 | those official releases were made. With frequent releases, the user can govern 27 | exactly how often he wishes to update. 28 | 29 | Frequent releases also then obviate the need for dev or beta releases in most 30 | cases. Because releases are made early and often, bugs are discovered and 31 | corrected quickly, in many cases before other users have yet to encounter them. 32 | 33 | Release Managers 34 | ---------------- 35 | 36 | Additionally, anyone with push access to the master branch has access to cut 37 | releases. 38 | -------------------------------------------------------------------------------- /docs/history.rst: -------------------------------------------------------------------------------- 1 | :tocdepth: 2 2 | 3 | .. _changes: 4 | 5 | History 6 | ******* 7 | 8 | .. towncrier-draft-entries:: DRAFT, unreleased as on |today| 9 | 10 | .. include:: ../NEWS (links).rst 11 | 12 | Credits 13 | ******* 14 | 15 | * The original design for the ``.egg`` format and the ``pkg_resources`` API was 16 | co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first 17 | version of ``pkg_resources``, and supplied the macOS operating system version 18 | compatibility algorithm. 19 | 20 | * Ian Bicking implemented many early "creature comfort" features of 21 | easy_install, including support for downloading via Sourceforge and 22 | Subversion repositories. Ian's comments on the Web-SIG about WSGI 23 | application deployment also inspired the concept of "entry points" in eggs, 24 | and he has given talks at PyCon and elsewhere to inform and educate the 25 | community about eggs and setuptools. 26 | 27 | * Jim Fulton contributed time and effort to build automated tests of various 28 | aspects of ``easy_install``, and supplied the doctests for the command-line 29 | ``.exe`` wrappers on Windows. 30 | 31 | * Phillip J. Eby is the seminal author of setuptools, and 32 | first proposed the idea of an importable binary distribution format for 33 | Python application plug-ins. 34 | 35 | * Significant parts of the implementation of setuptools were funded by the Open 36 | Source Applications Foundation, to provide a plug-in infrastructure for the 37 | Chandler PIM application. In addition, many OSAF staffers (such as Mike 38 | "Code Bear" Taylor) contributed their time and stress as guinea pigs for the 39 | use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) 40 | 41 | * Tarek Ziadé is the principal author of the Distribute fork, which 42 | re-invigorated the community on the project, encouraged renewed innovation, 43 | and addressed many defects. 44 | 45 | * Jason R. Coombs performed the merge with Distribute, maintaining the 46 | project for several years in coordination with the Python Packaging 47 | Authority (PyPA). 48 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | .. image:: images/banner-640x320.svg 2 | :align: center 3 | 4 | Documentation 5 | ============= 6 | 7 | Setuptools is a fully-featured, actively-maintained, and stable library 8 | designed to facilitate packaging Python projects. 9 | 10 | It helps developers to easily share reusable code (in the form of a library) 11 | and programs (e.g., CLI/GUI tools implemented in Python), that can be installed 12 | with :pypi:`pip` and uploaded to `PyPI `_. 13 | 14 | .. sidebar-links:: 15 | :home: 16 | :pypi: 17 | 18 | .. toctree:: 19 | :maxdepth: 1 20 | :hidden: 21 | 22 | User guide 23 | build_meta 24 | pkg_resources 25 | references/keywords 26 | setuptools 27 | 28 | .. toctree:: 29 | :caption: Project 30 | :maxdepth: 1 31 | :hidden: 32 | 33 | roadmap 34 | Development guide 35 | Backward compatibility & deprecated practice 36 | Changelog 37 | artwork 38 | 39 | .. tidelift-referral-banner:: 40 | -------------------------------------------------------------------------------- /docs/roadmap.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Roadmap 3 | ======= 4 | 5 | Setuptools maintains a series of `milestones 6 | `_ to track 7 | a roadmap of large-scale goals. 8 | -------------------------------------------------------------------------------- /docs/userguide/index.rst: -------------------------------------------------------------------------------- 1 | ================================================== 2 | Building and Distributing Packages with Setuptools 3 | ================================================== 4 | 5 | The first step towards sharing a Python library or program is to build a 6 | distribution package [#package-overload]_. This includes adding a set of 7 | additional files containing metadata and configuration to not only instruct 8 | ``setuptools`` on how the distribution should be built but also 9 | to help installer (such as :pypi:`pip`) during the installation process. 10 | 11 | This document contains information to help Python developers through this 12 | process. Please check the :doc:`/userguide/quickstart` for an overview of 13 | the workflow. 14 | 15 | Also note that ``setuptools`` is what is known in the community as :pep:`build 16 | backend <517#terminology-and-goals>`, user facing interfaces are provided by tools 17 | such as :pypi:`pip` and :pypi:`build`. To use ``setuptools``, one must 18 | explicitly create a ``pyproject.toml`` file as described :doc:`/build_meta`. 19 | 20 | 21 | Contents 22 | ======== 23 | 24 | .. toctree:: 25 | :maxdepth: 1 26 | 27 | quickstart 28 | package_discovery 29 | dependency_management 30 | development_mode 31 | entry_point 32 | datafiles 33 | ext_modules 34 | distribution 35 | miscellaneous 36 | extension 37 | declarative_config 38 | pyproject_config 39 | 40 | --- 41 | 42 | .. rubric:: Notes 43 | 44 | .. [#package-overload] 45 | A :term:`Distribution Package` is also referred in the Python community simply as "package" 46 | Unfortunately, this jargon might be a bit confusing for new users because the term package 47 | can also to refer any :term:`directory ` (or sub directory) used to organize 48 | :term:`modules ` and auxiliary files. 49 | -------------------------------------------------------------------------------- /exercises.py: -------------------------------------------------------------------------------- 1 | def measure_startup_perf(): 2 | # run by pytest_perf 3 | import subprocess 4 | import sys # end warmup 5 | 6 | subprocess.check_call([sys.executable, '-c', 'pass']) 7 | -------------------------------------------------------------------------------- /launcher/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.17.0) 2 | set (CMAKE_SYSTEM_VERSION 6.1 CACHE TYPE INTERNAL FORCE) 3 | project (launcher C) 4 | add_definitions(-DGUI=${GUI} -DWIN32_LEAN_AND_MEAN) 5 | add_executable(launcher ../launcher.c) 6 | -------------------------------------------------------------------------------- /mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | ignore_missing_imports = True 3 | # required to support namespace packages 4 | # https://github.com/python/mypy/issues/14057 5 | explicit_package_bases = True 6 | -------------------------------------------------------------------------------- /newsfragments/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/newsfragments/.gitignore -------------------------------------------------------------------------------- /newsfragments/3903.feature.rst: -------------------------------------------------------------------------------- 1 | Rework how ``setuptools`` internally handles ``dependencies/install_requires`` 2 | and ``optional-dependencies/extras_require``. 3 | -------------------------------------------------------------------------------- /newsfragments/3904.feature.1.rst: -------------------------------------------------------------------------------- 1 | Improve the generated ``PKG-INFO`` files, by adding ``Requires-Dist`` fields. 2 | Previously, these fields would be omitted in favour of a non-standard 3 | ``*.egg-info/requires.txt`` file (which is still generated for the time being). 4 | -------------------------------------------------------------------------------- /newsfragments/3904.feature.2.rst: -------------------------------------------------------------------------------- 1 | Improve atomicity when writing ``PKG-INFO`` files to avoid race 2 | conditions with ``importlib.metadata``. 3 | -------------------------------------------------------------------------------- /newsfragments/4023.misc.rst: -------------------------------------------------------------------------------- 1 | Avoid circular imports (particularly between ``setuptools/{__init__,dist,monkey}.py``), 2 | or at least delay them, so tools like ``sphinx`` don't have problems analysing the codebase. 3 | -------------------------------------------------------------------------------- /newsfragments/4027.misc.1.rst: -------------------------------------------------------------------------------- 1 | Removed ``pandas`` from integration tests. 2 | -------------------------------------------------------------------------------- /newsfragments/4027.misc.2.rst: -------------------------------------------------------------------------------- 1 | Added ``pyyaml``, ``charset-normalizer`` and ``protobuf`` to integration tests. 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources-5.10.2.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources-5.10.2.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources-5.10.2.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources-5.10.2.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources-5.10.2.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | importlib_resources 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/__init__.py: -------------------------------------------------------------------------------- 1 | """Read resources contained within a package.""" 2 | 3 | from ._common import ( 4 | as_file, 5 | files, 6 | Package, 7 | ) 8 | 9 | from ._legacy import ( 10 | contents, 11 | open_binary, 12 | read_binary, 13 | open_text, 14 | read_text, 15 | is_resource, 16 | path, 17 | Resource, 18 | ) 19 | 20 | from .abc import ResourceReader 21 | 22 | 23 | __all__ = [ 24 | 'Package', 25 | 'Resource', 26 | 'ResourceReader', 27 | 'as_file', 28 | 'contents', 29 | 'files', 30 | 'is_resource', 31 | 'open_binary', 32 | 'open_text', 33 | 'path', 34 | 'read_binary', 35 | 'read_text', 36 | ] 37 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/_itertools.py: -------------------------------------------------------------------------------- 1 | from itertools import filterfalse 2 | 3 | from typing import ( 4 | Callable, 5 | Iterable, 6 | Iterator, 7 | Optional, 8 | Set, 9 | TypeVar, 10 | Union, 11 | ) 12 | 13 | # Type and type variable definitions 14 | _T = TypeVar('_T') 15 | _U = TypeVar('_U') 16 | 17 | 18 | def unique_everseen( 19 | iterable: Iterable[_T], key: Optional[Callable[[_T], _U]] = None 20 | ) -> Iterator[_T]: 21 | "List unique elements, preserving order. Remember all elements ever seen." 22 | # unique_everseen('AAAABBBCCDAABBB') --> A B C D 23 | # unique_everseen('ABBCcAD', str.lower) --> A B C D 24 | seen: Set[Union[_T, _U]] = set() 25 | seen_add = seen.add 26 | if key is None: 27 | for element in filterfalse(seen.__contains__, iterable): 28 | seen_add(element) 29 | yield element 30 | else: 31 | for element in iterable: 32 | k = key(element) 33 | if k not in seen: 34 | seen_add(k) 35 | yield element 36 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/py.typed -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/_compat.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | try: 5 | from test.support import import_helper # type: ignore 6 | except ImportError: 7 | # Python 3.9 and earlier 8 | class import_helper: # type: ignore 9 | from test.support import ( 10 | modules_setup, 11 | modules_cleanup, 12 | DirsOnSysPath, 13 | CleanImport, 14 | ) 15 | 16 | 17 | try: 18 | from test.support import os_helper # type: ignore 19 | except ImportError: 20 | # Python 3.9 compat 21 | class os_helper: # type:ignore 22 | from test.support import temp_dir 23 | 24 | 25 | try: 26 | # Python 3.10 27 | from test.support.os_helper import unlink 28 | except ImportError: 29 | from test.support import unlink as _unlink 30 | 31 | def unlink(target): 32 | return _unlink(os.fspath(target)) 33 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/_path.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | import functools 3 | 4 | 5 | #### 6 | # from jaraco.path 3.4 7 | 8 | 9 | def build(spec, prefix=pathlib.Path()): 10 | """ 11 | Build a set of files/directories, as described by the spec. 12 | 13 | Each key represents a pathname, and the value represents 14 | the content. Content may be a nested directory. 15 | 16 | >>> spec = { 17 | ... 'README.txt': "A README file", 18 | ... "foo": { 19 | ... "__init__.py": "", 20 | ... "bar": { 21 | ... "__init__.py": "", 22 | ... }, 23 | ... "baz.py": "# Some code", 24 | ... } 25 | ... } 26 | >>> tmpdir = getfixture('tmpdir') 27 | >>> build(spec, tmpdir) 28 | """ 29 | for name, contents in spec.items(): 30 | create(contents, pathlib.Path(prefix) / name) 31 | 32 | 33 | @functools.singledispatch 34 | def create(content, path): 35 | path.mkdir(exist_ok=True) 36 | build(content, prefix=path) # type: ignore 37 | 38 | 39 | @create.register 40 | def _(content: bytes, path): 41 | path.write_bytes(content) 42 | 43 | 44 | @create.register 45 | def _(content: str, path): 46 | path.write_text(content) 47 | 48 | 49 | # end from jaraco.path 50 | #### 51 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data01/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/subdirectory/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/utf-16.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data01/utf-16.file -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data01/utf-8.file: -------------------------------------------------------------------------------- 1 | Hello, UTF-8 world! 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data02/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data02/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data02/one/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data02/one/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data02/one/resource1.txt: -------------------------------------------------------------------------------- 1 | one resource 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data02/two/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/data02/two/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/data02/two/resource2.txt: -------------------------------------------------------------------------------- 1 | two resource 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/namespacedata01/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/namespacedata01/utf-16.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/namespacedata01/utf-16.file -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/namespacedata01/utf-8.file: -------------------------------------------------------------------------------- 1 | Hello, UTF-8 world! 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/test_contents.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import importlib_resources as resources 3 | 4 | from . import data01 5 | from . import util 6 | 7 | 8 | class ContentsTests: 9 | expected = { 10 | '__init__.py', 11 | 'binary.file', 12 | 'subdirectory', 13 | 'utf-16.file', 14 | 'utf-8.file', 15 | } 16 | 17 | def test_contents(self): 18 | contents = {path.name for path in resources.files(self.data).iterdir()} 19 | assert self.expected <= contents 20 | 21 | 22 | class ContentsDiskTests(ContentsTests, unittest.TestCase): 23 | def setUp(self): 24 | self.data = data01 25 | 26 | 27 | class ContentsZipTests(ContentsTests, util.ZipSetup, unittest.TestCase): 28 | pass 29 | 30 | 31 | class ContentsNamespaceTests(ContentsTests, unittest.TestCase): 32 | expected = { 33 | # no __init__ because of namespace design 34 | # no subdirectory as incidental difference in fixture 35 | 'binary.file', 36 | 'utf-16.file', 37 | 'utf-8.file', 38 | } 39 | 40 | def setUp(self): 41 | from . import namespacedata01 42 | 43 | self.data = namespacedata01 44 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/update-zips.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generate the zip test data files. 3 | 4 | Run to build the tests/zipdataNN/ziptestdata.zip files from 5 | files in tests/dataNN. 6 | 7 | Replaces the file with the working copy, but does commit anything 8 | to the source repo. 9 | """ 10 | 11 | import contextlib 12 | import os 13 | import pathlib 14 | import zipfile 15 | 16 | 17 | def main(): 18 | """ 19 | >>> from unittest import mock 20 | >>> monkeypatch = getfixture('monkeypatch') 21 | >>> monkeypatch.setattr(zipfile, 'ZipFile', mock.MagicMock()) 22 | >>> print(); main() # print workaround for bpo-32509 23 | 24 | ...data01... -> ziptestdata/... 25 | ... 26 | ...data02... -> ziptestdata/... 27 | ... 28 | """ 29 | suffixes = '01', '02' 30 | tuple(map(generate, suffixes)) 31 | 32 | 33 | def generate(suffix): 34 | root = pathlib.Path(__file__).parent.relative_to(os.getcwd()) 35 | zfpath = root / f'zipdata{suffix}/ziptestdata.zip' 36 | with zipfile.ZipFile(zfpath, 'w') as zf: 37 | for src, rel in walk(root / f'data{suffix}'): 38 | dst = 'ziptestdata' / pathlib.PurePosixPath(rel.as_posix()) 39 | print(src, '->', dst) 40 | zf.write(src, dst) 41 | 42 | 43 | def walk(datapath): 44 | for dirpath, dirnames, filenames in os.walk(datapath): 45 | with contextlib.suppress(ValueError): 46 | dirnames.remove('__pycache__') 47 | for filename in filenames: 48 | res = pathlib.Path(dirpath) / filename 49 | rel = res.relative_to(datapath) 50 | yield res, rel 51 | 52 | 53 | __name__ == '__main__' and main() 54 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/zipdata01/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/zipdata01/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/zipdata01/ziptestdata.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/zipdata01/ziptestdata.zip -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/zipdata02/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/zipdata02/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/importlib_resources/tests/zipdata02/ziptestdata.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/importlib_resources/tests/zipdata02/ziptestdata.zip -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.context-4.3.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.context-4.3.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.context-4.3.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.context-4.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.context-4.3.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.context-4.3.0.dist-info/METADATA,sha256=GqMykAm33E7Tt_t_MHc5O7GJN62Qwp6MEHX9WD-LPow,2958 4 | jaraco.context-4.3.0.dist-info/RECORD,, 5 | jaraco.context-4.3.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 6 | jaraco.context-4.3.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 7 | jaraco/__pycache__/context.cpython-311.pyc,, 8 | jaraco/context.py,sha256=vlyDzb_PvZ9H7R9bbTr_CMRnveW5Dc56eC7eyd_GfoA,7460 9 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.context-4.3.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.context-4.3.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.functools-3.6.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.functools-3.6.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.functools-3.6.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.functools-3.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.functools-3.6.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.functools-3.6.0.dist-info/METADATA,sha256=ImGoa1WEbhsibIb288yWqkDAvqLwlPzayjravRvW_Bs,3136 4 | jaraco.functools-3.6.0.dist-info/RECORD,, 5 | jaraco.functools-3.6.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 6 | jaraco.functools-3.6.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 7 | jaraco/__pycache__/functools.cpython-311.pyc,, 8 | jaraco/functools.py,sha256=GhSJGMVMcb0U4-axXaY_au30hT-ceW-HM1EbV1_9NzI,15035 9 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.functools-3.6.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.functools-3.6.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.text-3.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.text-3.7.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.text-3.7.0.dist-info/METADATA,sha256=5mcR1dY0cJNrM-VIkAFkpjOgvgzmq6nM1GfD0gwTIhs,2136 4 | jaraco.text-3.7.0.dist-info/RECORD,, 5 | jaraco.text-3.7.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | jaraco.text-3.7.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 7 | jaraco.text-3.7.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 8 | jaraco/text/Lorem ipsum.txt,sha256=N_7c_79zxOufBY9HZ3yzMgOkNv-TkOTTio4BydrSjgs,1335 9 | jaraco/text/__init__.py,sha256=I56MW2ZFwPrYXIxzqxMBe2A1t-T4uZBgEgAKe9-JoqM,15538 10 | jaraco/text/__pycache__/__init__.cpython-311.pyc,, 11 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.37.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco.text-3.7.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/jaraco/__init__.py -------------------------------------------------------------------------------- /pkg_resources/_vendor/jaraco/text/Lorem ipsum.txt: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 2 | Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst. 3 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools-9.1.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools-9.1.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Erik Rose 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools-9.1.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | more_itertools-9.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | more_itertools-9.1.0.dist-info/LICENSE,sha256=CfHIyelBrz5YTVlkHqm4fYPAyw_QB-te85Gn4mQ8GkY,1053 3 | more_itertools-9.1.0.dist-info/METADATA,sha256=qP4FQl-r_CTDFj9wwQAf_KrRs4u_HZBIeyc2WCLW69c,32271 4 | more_itertools-9.1.0.dist-info/RECORD,, 5 | more_itertools-9.1.0.dist-info/WHEEL,sha256=rSgq_JpHF9fHR1lx53qwg_1-2LypZE_qmcuXbVUq948,81 6 | more_itertools/__init__.py,sha256=mTzXsWGDHiVW5x8zHzcRu1imUMzrEtJnUhfsN-dBrV4,148 7 | more_itertools/__init__.pyi,sha256=5B3eTzON1BBuOLob1vCflyEb2lSd6usXQQ-Cv-hXkeA,43 8 | more_itertools/__pycache__/__init__.cpython-311.pyc,, 9 | more_itertools/__pycache__/more.cpython-311.pyc,, 10 | more_itertools/__pycache__/recipes.cpython-311.pyc,, 11 | more_itertools/more.py,sha256=YlrEMtcLMdcmcwL-T9YIQvMKjrAomEDbvQxQd4i5LnA,134968 12 | more_itertools/more.pyi,sha256=tZNfrCeIQLfOYhRyp0Wq7no_ryJ5h3FDskNNUBD-zmU,20105 13 | more_itertools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 14 | more_itertools/recipes.py,sha256=lgw5bP3UoNfvUPhRaz1VIAfRFkF9pKWN-8UB6H0W5Eo,25416 15 | more_itertools/recipes.pyi,sha256=Um3BGANEFi4papnQfKBJnlEEuSpXS8-nbxro8OyuOt8,4056 16 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools-9.1.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.8.0 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools/__init__.py: -------------------------------------------------------------------------------- 1 | """More routines for operating on iterables, beyond itertools""" 2 | 3 | from .more import * # noqa 4 | from .recipes import * # noqa 5 | 6 | __version__ = '9.1.0' 7 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools/__init__.pyi: -------------------------------------------------------------------------------- 1 | from .more import * 2 | from .recipes import * 3 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/more_itertools/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/more_itertools/py.typed -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging-23.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging-23.1.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | This software is made available under the terms of *either* of the licenses 2 | found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made 3 | under the terms of *both* these licenses. 4 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging-23.1.dist-info/LICENSE.BSD: -------------------------------------------------------------------------------- 1 | Copyright (c) Donald Stufft and individual contributors. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging-23.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/packaging-23.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging-23.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.8.0 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is dual licensed under the terms of the Apache License, Version 2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository 3 | # for complete details. 4 | 5 | __title__ = "packaging" 6 | __summary__ = "Core utilities for Python packages" 7 | __uri__ = "https://github.com/pypa/packaging" 8 | 9 | __version__ = "23.1" 10 | 11 | __author__ = "Donald Stufft and individual contributors" 12 | __email__ = "donald@stufft.io" 13 | 14 | __license__ = "BSD-2-Clause or Apache-2.0" 15 | __copyright__ = "2014-2019 %s" % __author__ 16 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging/_structures.py: -------------------------------------------------------------------------------- 1 | # This file is dual licensed under the terms of the Apache License, Version 2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository 3 | # for complete details. 4 | 5 | 6 | class InfinityType: 7 | def __repr__(self) -> str: 8 | return "Infinity" 9 | 10 | def __hash__(self) -> int: 11 | return hash(repr(self)) 12 | 13 | def __lt__(self, other: object) -> bool: 14 | return False 15 | 16 | def __le__(self, other: object) -> bool: 17 | return False 18 | 19 | def __eq__(self, other: object) -> bool: 20 | return isinstance(other, self.__class__) 21 | 22 | def __gt__(self, other: object) -> bool: 23 | return True 24 | 25 | def __ge__(self, other: object) -> bool: 26 | return True 27 | 28 | def __neg__(self: object) -> "NegativeInfinityType": 29 | return NegativeInfinity 30 | 31 | 32 | Infinity = InfinityType() 33 | 34 | 35 | class NegativeInfinityType: 36 | def __repr__(self) -> str: 37 | return "-Infinity" 38 | 39 | def __hash__(self) -> int: 40 | return hash(repr(self)) 41 | 42 | def __lt__(self, other: object) -> bool: 43 | return True 44 | 45 | def __le__(self, other: object) -> bool: 46 | return True 47 | 48 | def __eq__(self, other: object) -> bool: 49 | return isinstance(other, self.__class__) 50 | 51 | def __gt__(self, other: object) -> bool: 52 | return False 53 | 54 | def __ge__(self, other: object) -> bool: 55 | return False 56 | 57 | def __neg__(self: object) -> InfinityType: 58 | return Infinity 59 | 60 | 61 | NegativeInfinity = NegativeInfinityType() 62 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/packaging/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/packaging/py.typed -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs-2.6.2.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs-2.6.2.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | platformdirs-2.6.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | platformdirs-2.6.2.dist-info/METADATA,sha256=rDoFsb9-2tVym02IIeYCoKgGaCpY2v8xw8WWXywxhIM,9502 3 | platformdirs-2.6.2.dist-info/RECORD,, 4 | platformdirs-2.6.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 5 | platformdirs-2.6.2.dist-info/WHEEL,sha256=NaLmgHHW_f9jTvv_wRh9vcK7c7EK9o5fwsIXMOzoGgM,87 6 | platformdirs-2.6.2.dist-info/licenses/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089 7 | platformdirs/__init__.py,sha256=td0a-fHENmnG8ess2WRoysKv9ud5j6TQ-p_iUM_uE18,12864 8 | platformdirs/__main__.py,sha256=VsC0t5m-6f0YVr96PVks93G3EDF8MSNY4KpUMvPahDA,1164 9 | platformdirs/__pycache__/__init__.cpython-311.pyc,, 10 | platformdirs/__pycache__/__main__.cpython-311.pyc,, 11 | platformdirs/__pycache__/android.cpython-311.pyc,, 12 | platformdirs/__pycache__/api.cpython-311.pyc,, 13 | platformdirs/__pycache__/macos.cpython-311.pyc,, 14 | platformdirs/__pycache__/unix.cpython-311.pyc,, 15 | platformdirs/__pycache__/version.cpython-311.pyc,, 16 | platformdirs/__pycache__/windows.cpython-311.pyc,, 17 | platformdirs/android.py,sha256=GKizhyS7ESRiU67u8UnBJLm46goau9937EchXWbPBlk,4068 18 | platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910 19 | platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655 20 | platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 21 | platformdirs/unix.py,sha256=P-WQjSSieE38DXjMDa1t4XHnKJQ5idEaKT0PyXwm8KQ,6911 22 | platformdirs/version.py,sha256=qaN-fw_htIgKUVXoAuAEVgKxQu3tZ9qE2eiKkWIS7LA,160 23 | platformdirs/windows.py,sha256=LOrXLgI0CjQldDo2zhOZYGYZ6g4e_cJOCB_pF9aMRWQ,6596 24 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs-2.6.2.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/platformdirs-2.6.2.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs-2.6.2.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: hatchling 1.11.1 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs-2.6.2.dist-info/licenses/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2010-202x The platformdirs developers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs/__main__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from platformdirs import PlatformDirs, __version__ 4 | 5 | PROPS = ( 6 | "user_data_dir", 7 | "user_config_dir", 8 | "user_cache_dir", 9 | "user_state_dir", 10 | "user_log_dir", 11 | "user_documents_dir", 12 | "user_runtime_dir", 13 | "site_data_dir", 14 | "site_config_dir", 15 | ) 16 | 17 | 18 | def main() -> None: 19 | app_name = "MyApp" 20 | app_author = "MyCompany" 21 | 22 | print(f"-- platformdirs {__version__} --") 23 | 24 | print("-- app dirs (with optional 'version')") 25 | dirs = PlatformDirs(app_name, app_author, version="1.0") 26 | for prop in PROPS: 27 | print(f"{prop}: {getattr(dirs, prop)}") 28 | 29 | print("\n-- app dirs (without optional 'version')") 30 | dirs = PlatformDirs(app_name, app_author) 31 | for prop in PROPS: 32 | print(f"{prop}: {getattr(dirs, prop)}") 33 | 34 | print("\n-- app dirs (without optional 'appauthor')") 35 | dirs = PlatformDirs(app_name) 36 | for prop in PROPS: 37 | print(f"{prop}: {getattr(dirs, prop)}") 38 | 39 | print("\n-- app dirs (with disabled 'appauthor')") 40 | dirs = PlatformDirs(app_name, appauthor=False) 41 | for prop in PROPS: 42 | print(f"{prop}: {getattr(dirs, prop)}") 43 | 44 | 45 | if __name__ == "__main__": 46 | main() 47 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/platformdirs/py.typed -------------------------------------------------------------------------------- /pkg_resources/_vendor/platformdirs/version.py: -------------------------------------------------------------------------------- 1 | # file generated by setuptools_scm 2 | # don't change, don't track in version control 3 | __version__ = version = '2.6.2' 4 | __version_tuple__ = version_tuple = (2, 6, 2) 5 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/typing_extensions-4.4.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/typing_extensions-4.4.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/typing_extensions.cpython-311.pyc,, 2 | typing_extensions-4.4.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | typing_extensions-4.4.0.dist-info/LICENSE,sha256=x6-2XnVXB7n7kEhziaF20-09ADHVExr95FwjcV_16JE,12787 4 | typing_extensions-4.4.0.dist-info/METADATA,sha256=1zSh1eMLnLkLMMC6aZSGRKx3eRnivEGDFWGSVD1zqhA,7249 5 | typing_extensions-4.4.0.dist-info/RECORD,, 6 | typing_extensions-4.4.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | typing_extensions-4.4.0.dist-info/WHEEL,sha256=4TfKIB_xu-04bc2iKz6_zFt-gEFEEDU_31HGhqzOCE8,81 8 | typing_extensions.py,sha256=ipqWiq5AHzrwczt6c26AP05Llh6a5_GaXRpOBqbogHA,80078 9 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/typing_extensions-4.4.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/typing_extensions-4.4.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/typing_extensions-4.4.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.7.1 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/vendored.txt: -------------------------------------------------------------------------------- 1 | packaging==23.1 2 | 3 | platformdirs==2.6.2 4 | # required for platformdirs on Python < 3.8 5 | typing_extensions==4.4.0 6 | 7 | jaraco.text==3.7.0 8 | # required for jaraco.text on older Pythons 9 | importlib_resources==5.10.2 10 | # required for importlib_resources on older Pythons 11 | zipp==3.7.0 12 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/zipp.cpython-311.pyc,, 2 | zipp-3.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | zipp-3.7.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 4 | zipp-3.7.0.dist-info/METADATA,sha256=ZLzgaXTyZX_MxTU0lcGfhdPY4CjFrT_3vyQ2Fo49pl8,2261 5 | zipp-3.7.0.dist-info/RECORD,, 6 | zipp-3.7.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | zipp-3.7.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 8 | zipp-3.7.0.dist-info/top_level.txt,sha256=iAbdoSHfaGqBfVb2XuR9JqSQHCoOsOtG6y9C_LSpqFw,5 9 | zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425 10 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/_vendor/zipp-3.7.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.37.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /pkg_resources/_vendor/zipp-3.7.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | zipp 2 | -------------------------------------------------------------------------------- /pkg_resources/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/tests/__init__.py -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package-source/setup.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/tests/data/my-test-package-source/setup.cfg -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package-source/setup.py: -------------------------------------------------------------------------------- 1 | import setuptools 2 | 3 | setuptools.setup( 4 | name="my-test-package", 5 | version="1.0", 6 | zip_safe=True, 7 | ) 8 | -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package-zip/my-test-package.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/tests/data/my-test-package-zip/my-test-package.zip -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.0 2 | Name: my-test-package 3 | Version: 1.0 4 | Summary: UNKNOWN 5 | Home-page: UNKNOWN 6 | Author: UNKNOWN 7 | Author-email: UNKNOWN 8 | License: UNKNOWN 9 | Description: UNKNOWN 10 | Platform: UNKNOWN 11 | -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt: -------------------------------------------------------------------------------- 1 | setup.cfg 2 | setup.py 3 | my_test_package.egg-info/PKG-INFO 4 | my_test_package.egg-info/SOURCES.txt 5 | my_test_package.egg-info/dependency_links.txt 6 | my_test_package.egg-info/top_level.txt 7 | my_test_package.egg-info/zip-safe -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safe: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg -------------------------------------------------------------------------------- /pkg_resources/tests/test_find_distributions.py: -------------------------------------------------------------------------------- 1 | import py 2 | import pytest 3 | import pkg_resources 4 | 5 | 6 | TESTS_DATA_DIR = py.path.local(__file__).dirpath('data') 7 | 8 | 9 | class TestFindDistributions: 10 | @pytest.fixture 11 | def target_dir(self, tmpdir): 12 | target_dir = tmpdir.mkdir('target') 13 | # place a .egg named directory in the target that is not an egg: 14 | target_dir.mkdir('not.an.egg') 15 | return target_dir 16 | 17 | def test_non_egg_dir_named_egg(self, target_dir): 18 | dists = pkg_resources.find_distributions(str(target_dir)) 19 | assert not list(dists) 20 | 21 | def test_standalone_egg_directory(self, target_dir): 22 | (TESTS_DATA_DIR / 'my-test-package_unpacked-egg').copy(target_dir) 23 | dists = pkg_resources.find_distributions(str(target_dir)) 24 | assert [dist.project_name for dist in dists] == ['my-test-package'] 25 | dists = pkg_resources.find_distributions(str(target_dir), only=True) 26 | assert not list(dists) 27 | 28 | def test_zipped_egg(self, target_dir): 29 | (TESTS_DATA_DIR / 'my-test-package_zipped-egg').copy(target_dir) 30 | dists = pkg_resources.find_distributions(str(target_dir)) 31 | assert [dist.project_name for dist in dists] == ['my-test-package'] 32 | dists = pkg_resources.find_distributions(str(target_dir), only=True) 33 | assert not list(dists) 34 | 35 | def test_zipped_sdist_one_level_removed(self, target_dir): 36 | (TESTS_DATA_DIR / 'my-test-package-zip').copy(target_dir) 37 | dists = pkg_resources.find_distributions( 38 | str(target_dir / "my-test-package.zip") 39 | ) 40 | assert [dist.project_name for dist in dists] == ['my-test-package'] 41 | dists = pkg_resources.find_distributions( 42 | str(target_dir / "my-test-package.zip"), only=True 43 | ) 44 | assert not list(dists) 45 | -------------------------------------------------------------------------------- /pkg_resources/tests/test_markers.py: -------------------------------------------------------------------------------- 1 | from unittest import mock 2 | 3 | from pkg_resources import evaluate_marker 4 | 5 | 6 | @mock.patch('platform.python_version', return_value='2.7.10') 7 | def test_ordering(python_version_mock): 8 | assert evaluate_marker("python_full_version > '2.7.3'") is True 9 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = [] 3 | build-backend = "setuptools.build_meta" 4 | backend-path = ["."] 5 | 6 | [tool.black] 7 | skip-string-normalization = true 8 | extend_exclude = "_vendor" 9 | 10 | [tool.setuptools_scm] 11 | 12 | [tool.pytest-enabler.mypy] 13 | # disabled 14 | -------------------------------------------------------------------------------- /setuptools/_distutils/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import importlib 3 | 4 | __version__, _, _ = sys.version.partition(' ') 5 | 6 | 7 | try: 8 | # Allow Debian and pkgsrc (only) to customize system 9 | # behavior. Ref pypa/distutils#2 and pypa/distutils#16. 10 | # This hook is deprecated and no other environments 11 | # should use it. 12 | importlib.import_module('_distutils_system_mod') 13 | except ImportError: 14 | pass 15 | -------------------------------------------------------------------------------- /setuptools/_distutils/_functools.py: -------------------------------------------------------------------------------- 1 | import functools 2 | 3 | 4 | # from jaraco.functools 3.5 5 | def pass_none(func): 6 | """ 7 | Wrap func so it's not called if its first param is None 8 | 9 | >>> print_text = pass_none(print) 10 | >>> print_text('text') 11 | text 12 | >>> print_text(None) 13 | """ 14 | 15 | @functools.wraps(func) 16 | def wrapper(param, *args, **kwargs): 17 | if param is not None: 18 | return func(param, *args, **kwargs) 19 | 20 | return wrapper 21 | -------------------------------------------------------------------------------- /setuptools/_distutils/_log.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | 4 | log = logging.getLogger() 5 | -------------------------------------------------------------------------------- /setuptools/_distutils/_macos_compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import importlib 3 | 4 | 5 | def bypass_compiler_fixup(cmd, args): 6 | return cmd 7 | 8 | 9 | if sys.platform == 'darwin': 10 | compiler_fixup = importlib.import_module('_osx_support').compiler_fixup 11 | else: 12 | compiler_fixup = bypass_compiler_fixup 13 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/__init__.py: -------------------------------------------------------------------------------- 1 | """distutils.command 2 | 3 | Package containing implementation of all the standard Distutils 4 | commands.""" 5 | 6 | __all__ = [ # noqa: F822 7 | 'build', 8 | 'build_py', 9 | 'build_ext', 10 | 'build_clib', 11 | 'build_scripts', 12 | 'clean', 13 | 'install', 14 | 'install_lib', 15 | 'install_headers', 16 | 'install_scripts', 17 | 'install_data', 18 | 'sdist', 19 | 'register', 20 | 'bdist', 21 | 'bdist_dumb', 22 | 'bdist_rpm', 23 | 'check', 24 | 'upload', 25 | ] 26 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/_framework_compat.py: -------------------------------------------------------------------------------- 1 | """ 2 | Backward compatibility for homebrew builds on macOS. 3 | """ 4 | 5 | 6 | import sys 7 | import os 8 | import functools 9 | import subprocess 10 | import sysconfig 11 | 12 | 13 | @functools.lru_cache() 14 | def enabled(): 15 | """ 16 | Only enabled for Python 3.9 framework homebrew builds 17 | except ensurepip and venv. 18 | """ 19 | PY39 = (3, 9) < sys.version_info < (3, 10) 20 | framework = sys.platform == 'darwin' and sys._framework 21 | homebrew = "Cellar" in sysconfig.get_config_var('projectbase') 22 | venv = sys.prefix != sys.base_prefix 23 | ensurepip = os.environ.get("ENSUREPIP_OPTIONS") 24 | return PY39 and framework and homebrew and not venv and not ensurepip 25 | 26 | 27 | schemes = dict( 28 | osx_framework_library=dict( 29 | stdlib='{installed_base}/{platlibdir}/python{py_version_short}', 30 | platstdlib='{platbase}/{platlibdir}/python{py_version_short}', 31 | purelib='{homebrew_prefix}/lib/python{py_version_short}/site-packages', 32 | platlib='{homebrew_prefix}/{platlibdir}/python{py_version_short}/site-packages', 33 | include='{installed_base}/include/python{py_version_short}{abiflags}', 34 | platinclude='{installed_platbase}/include/python{py_version_short}{abiflags}', 35 | scripts='{homebrew_prefix}/bin', 36 | data='{homebrew_prefix}', 37 | ) 38 | ) 39 | 40 | 41 | @functools.lru_cache() 42 | def vars(): 43 | if not enabled(): 44 | return {} 45 | homebrew_prefix = subprocess.check_output(['brew', '--prefix'], text=True).strip() 46 | return locals() 47 | 48 | 49 | def scheme(name): 50 | """ 51 | Override the selected scheme for posix_prefix. 52 | """ 53 | if not enabled() or not name.endswith('_prefix'): 54 | return name 55 | return 'osx_framework_library' 56 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/command_template: -------------------------------------------------------------------------------- 1 | """distutils.command.x 2 | 3 | Implements the Distutils 'x' command. 4 | """ 5 | 6 | # created 2000/mm/dd, John Doe 7 | 8 | __revision__ = "$Id$" 9 | 10 | from distutils.core import Command 11 | 12 | 13 | class x(Command): 14 | 15 | # Brief (40-50 characters) description of the command 16 | description = "" 17 | 18 | # List of option tuples: long name, short name (None if no short 19 | # name), and help string. 20 | user_options = [('', '', 21 | ""), 22 | ] 23 | 24 | def initialize_options(self): 25 | self. = None 26 | self. = None 27 | self. = None 28 | 29 | def finalize_options(self): 30 | if self.x is None: 31 | self.x = 32 | 33 | def run(self): 34 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/install_headers.py: -------------------------------------------------------------------------------- 1 | """distutils.command.install_headers 2 | 3 | Implements the Distutils 'install_headers' command, to install C/C++ header 4 | files to the Python include directory.""" 5 | 6 | from ..core import Command 7 | 8 | 9 | # XXX force is never used 10 | class install_headers(Command): 11 | description = "install C/C++ header files" 12 | 13 | user_options = [ 14 | ('install-dir=', 'd', "directory to install header files to"), 15 | ('force', 'f', "force installation (overwrite existing files)"), 16 | ] 17 | 18 | boolean_options = ['force'] 19 | 20 | def initialize_options(self): 21 | self.install_dir = None 22 | self.force = 0 23 | self.outfiles = [] 24 | 25 | def finalize_options(self): 26 | self.set_undefined_options( 27 | 'install', ('install_headers', 'install_dir'), ('force', 'force') 28 | ) 29 | 30 | def run(self): 31 | headers = self.distribution.headers 32 | if not headers: 33 | return 34 | 35 | self.mkpath(self.install_dir) 36 | for header in headers: 37 | (out, _) = self.copy_file(header, self.install_dir) 38 | self.outfiles.append(out) 39 | 40 | def get_inputs(self): 41 | return self.distribution.headers or [] 42 | 43 | def get_outputs(self): 44 | return self.outfiles 45 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/install_scripts.py: -------------------------------------------------------------------------------- 1 | """distutils.command.install_scripts 2 | 3 | Implements the Distutils 'install_scripts' command, for installing 4 | Python scripts.""" 5 | 6 | # contributed by Bastian Kleineidam 7 | 8 | import os 9 | from ..core import Command 10 | from distutils._log import log 11 | from stat import ST_MODE 12 | 13 | 14 | class install_scripts(Command): 15 | description = "install scripts (Python or otherwise)" 16 | 17 | user_options = [ 18 | ('install-dir=', 'd', "directory to install scripts to"), 19 | ('build-dir=', 'b', "build directory (where to install from)"), 20 | ('force', 'f', "force installation (overwrite existing files)"), 21 | ('skip-build', None, "skip the build steps"), 22 | ] 23 | 24 | boolean_options = ['force', 'skip-build'] 25 | 26 | def initialize_options(self): 27 | self.install_dir = None 28 | self.force = 0 29 | self.build_dir = None 30 | self.skip_build = None 31 | 32 | def finalize_options(self): 33 | self.set_undefined_options('build', ('build_scripts', 'build_dir')) 34 | self.set_undefined_options( 35 | 'install', 36 | ('install_scripts', 'install_dir'), 37 | ('force', 'force'), 38 | ('skip_build', 'skip_build'), 39 | ) 40 | 41 | def run(self): 42 | if not self.skip_build: 43 | self.run_command('build_scripts') 44 | self.outfiles = self.copy_tree(self.build_dir, self.install_dir) 45 | if os.name == 'posix': 46 | # Set the executable bits (owner, group, and world) on 47 | # all the scripts we just installed. 48 | for file in self.get_outputs(): 49 | if self.dry_run: 50 | log.info("changing mode of %s", file) 51 | else: 52 | mode = ((os.stat(file)[ST_MODE]) | 0o555) & 0o7777 53 | log.info("changing mode of %s to %o", file, mode) 54 | os.chmod(file, mode) 55 | 56 | def get_inputs(self): 57 | return self.distribution.scripts or [] 58 | 59 | def get_outputs(self): 60 | return self.outfiles or [] 61 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/py37compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | 4 | def _pythonlib_compat(): 5 | """ 6 | On Python 3.7 and earlier, distutils would include the Python 7 | library. See pypa/distutils#9. 8 | """ 9 | from distutils import sysconfig 10 | 11 | if not sysconfig.get_config_var('Py_ENABLED_SHARED'): 12 | return 13 | 14 | yield 'python{}.{}{}'.format( 15 | sys.hexversion >> 24, 16 | (sys.hexversion >> 16) & 0xFF, 17 | sysconfig.get_config_var('ABIFLAGS'), 18 | ) 19 | 20 | 21 | def compose(f1, f2): 22 | return lambda *args, **kwargs: f1(f2(*args, **kwargs)) 23 | 24 | 25 | pythonlib = ( 26 | compose(list, _pythonlib_compat) 27 | if sys.version_info < (3, 8) 28 | and sys.platform != 'darwin' 29 | and sys.platform[:3] != 'aix' 30 | else list 31 | ) 32 | -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-10.0-amd64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-10.0-amd64.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-10.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-10.0.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-14.0-amd64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-14.0-amd64.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-14.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-14.0.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-6.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-6.0.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-7.1.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-7.1.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-8.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-8.0.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-9.0-amd64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-9.0-amd64.exe -------------------------------------------------------------------------------- /setuptools/_distutils/command/wininst-9.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/command/wininst-9.0.exe -------------------------------------------------------------------------------- /setuptools/_distutils/debug.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # If DISTUTILS_DEBUG is anything other than the empty string, we run in 4 | # debug mode. 5 | DEBUG = os.environ.get('DISTUTILS_DEBUG') 6 | -------------------------------------------------------------------------------- /setuptools/_distutils/log.py: -------------------------------------------------------------------------------- 1 | """ 2 | A simple log mechanism styled after PEP 282. 3 | 4 | Retained for compatibility and should not be used. 5 | """ 6 | 7 | import logging 8 | import warnings 9 | 10 | from ._log import log as _global_log 11 | 12 | 13 | DEBUG = logging.DEBUG 14 | INFO = logging.INFO 15 | WARN = logging.WARN 16 | ERROR = logging.ERROR 17 | FATAL = logging.FATAL 18 | 19 | log = _global_log.log 20 | debug = _global_log.debug 21 | info = _global_log.info 22 | warn = _global_log.warning 23 | error = _global_log.error 24 | fatal = _global_log.fatal 25 | 26 | 27 | def set_threshold(level): 28 | orig = _global_log.level 29 | _global_log.setLevel(level) 30 | return orig 31 | 32 | 33 | def set_verbosity(v): 34 | if v <= 0: 35 | set_threshold(logging.WARN) 36 | elif v == 1: 37 | set_threshold(logging.INFO) 38 | elif v >= 2: 39 | set_threshold(logging.DEBUG) 40 | 41 | 42 | class Log(logging.Logger): 43 | """distutils.log.Log is deprecated, please use an alternative from `logging`.""" 44 | 45 | def __init__(self, threshold=WARN): 46 | warnings.warn(Log.__doc__) # avoid DeprecationWarning to ensure warn is shown 47 | super().__init__(__name__, level=threshold) 48 | 49 | @property 50 | def threshold(self): 51 | return self.level 52 | 53 | @threshold.setter 54 | def threshold(self, level): 55 | self.setLevel(level) 56 | 57 | warn = logging.Logger.warning 58 | -------------------------------------------------------------------------------- /setuptools/_distutils/py38compat.py: -------------------------------------------------------------------------------- 1 | def aix_platform(osname, version, release): 2 | try: 3 | import _aix_support 4 | 5 | return _aix_support.aix_platform() 6 | except ImportError: 7 | pass 8 | return "{}-{}.{}".format(osname, version, release) 9 | -------------------------------------------------------------------------------- /setuptools/_distutils/py39compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import platform 3 | 4 | 5 | def add_ext_suffix_39(vars): 6 | """ 7 | Ensure vars contains 'EXT_SUFFIX'. pypa/distutils#130 8 | """ 9 | import _imp 10 | 11 | ext_suffix = _imp.extension_suffixes()[0] 12 | vars.update( 13 | EXT_SUFFIX=ext_suffix, 14 | # sysconfig sets SO to match EXT_SUFFIX, so maintain 15 | # that expectation. 16 | # https://github.com/python/cpython/blob/785cc6770588de087d09e89a69110af2542be208/Lib/sysconfig.py#L671-L673 17 | SO=ext_suffix, 18 | ) 19 | 20 | 21 | needs_ext_suffix = sys.version_info < (3, 10) and platform.system() == 'Windows' 22 | add_ext_suffix = add_ext_suffix_39 if needs_ext_suffix else lambda vars: None 23 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Test suite for distutils. 3 | 4 | Tests for the command classes in the distutils.command package are 5 | included in distutils.tests as well, instead of using a separate 6 | distutils.command.tests package, since command identification is done 7 | by import rather than matching pre-defined names. 8 | """ 9 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/includetest.rst: -------------------------------------------------------------------------------- 1 | This should be included. 2 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/py37compat.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import platform 4 | 5 | 6 | def subprocess_args_compat(*args): 7 | return list(map(os.fspath, args)) 8 | 9 | 10 | def subprocess_args_passthrough(*args): 11 | return list(args) 12 | 13 | 14 | subprocess_args = ( 15 | subprocess_args_compat 16 | if platform.system() == "Windows" and sys.version_info < (3, 8) 17 | else subprocess_args_passthrough 18 | ) 19 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/py38compat.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | 3 | import contextlib 4 | import builtins 5 | import sys 6 | 7 | from test.support import requires_zlib 8 | import test.support 9 | 10 | 11 | ModuleNotFoundError = getattr(builtins, 'ModuleNotFoundError', ImportError) 12 | 13 | try: 14 | from test.support.warnings_helper import check_warnings 15 | except (ModuleNotFoundError, ImportError): 16 | from test.support import check_warnings 17 | 18 | 19 | try: 20 | from test.support.os_helper import ( 21 | rmtree, 22 | EnvironmentVarGuard, 23 | unlink, 24 | skip_unless_symlink, 25 | temp_dir, 26 | ) 27 | except (ModuleNotFoundError, ImportError): 28 | from test.support import ( 29 | rmtree, 30 | EnvironmentVarGuard, 31 | unlink, 32 | skip_unless_symlink, 33 | temp_dir, 34 | ) 35 | 36 | 37 | try: 38 | from test.support.import_helper import ( 39 | DirsOnSysPath, 40 | CleanImport, 41 | ) 42 | except (ModuleNotFoundError, ImportError): 43 | from test.support import ( 44 | DirsOnSysPath, 45 | CleanImport, 46 | ) 47 | 48 | 49 | if sys.version_info < (3, 9): 50 | requires_zlib = lambda: test.support.requires_zlib 51 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_bdist.py: -------------------------------------------------------------------------------- 1 | """Tests for distutils.command.bdist.""" 2 | from distutils.command.bdist import bdist 3 | from distutils.tests import support 4 | 5 | 6 | class TestBuild(support.TempdirManager): 7 | def test_formats(self): 8 | # let's create a command and make sure 9 | # we can set the format 10 | dist = self.create_dist()[1] 11 | cmd = bdist(dist) 12 | cmd.formats = ['gztar'] 13 | cmd.ensure_finalized() 14 | assert cmd.formats == ['gztar'] 15 | 16 | # what formats does bdist offer? 17 | formats = [ 18 | 'bztar', 19 | 'gztar', 20 | 'rpm', 21 | 'tar', 22 | 'xztar', 23 | 'zip', 24 | 'ztar', 25 | ] 26 | found = sorted(cmd.format_commands) 27 | assert found == formats 28 | 29 | def test_skip_build(self): 30 | # bug #10946: bdist --skip-build should trickle down to subcommands 31 | dist = self.create_dist()[1] 32 | cmd = bdist(dist) 33 | cmd.skip_build = 1 34 | cmd.ensure_finalized() 35 | dist.command_obj['bdist'] = cmd 36 | 37 | names = [ 38 | 'bdist_dumb', 39 | ] # bdist_rpm does not support --skip-build 40 | 41 | for name in names: 42 | subcmd = cmd.get_finalized_command(name) 43 | if getattr(subcmd, '_unsupported', False): 44 | # command is not supported on this build 45 | continue 46 | assert subcmd.skip_build, '%s should take --skip-build from bdist' % name 47 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_build.py: -------------------------------------------------------------------------------- 1 | """Tests for distutils.command.build.""" 2 | import os 3 | import sys 4 | 5 | from distutils.command.build import build 6 | from distutils.tests import support 7 | from sysconfig import get_platform 8 | 9 | 10 | class TestBuild(support.TempdirManager): 11 | def test_finalize_options(self): 12 | pkg_dir, dist = self.create_dist() 13 | cmd = build(dist) 14 | cmd.finalize_options() 15 | 16 | # if not specified, plat_name gets the current platform 17 | assert cmd.plat_name == get_platform() 18 | 19 | # build_purelib is build + lib 20 | wanted = os.path.join(cmd.build_base, 'lib') 21 | assert cmd.build_purelib == wanted 22 | 23 | # build_platlib is 'build/lib.platform-cache_tag[-pydebug]' 24 | # examples: 25 | # build/lib.macosx-10.3-i386-cpython39 26 | plat_spec = '.{}-{}'.format(cmd.plat_name, sys.implementation.cache_tag) 27 | if hasattr(sys, 'gettotalrefcount'): 28 | assert cmd.build_platlib.endswith('-pydebug') 29 | plat_spec += '-pydebug' 30 | wanted = os.path.join(cmd.build_base, 'lib' + plat_spec) 31 | assert cmd.build_platlib == wanted 32 | 33 | # by default, build_lib = build_purelib 34 | assert cmd.build_lib == cmd.build_purelib 35 | 36 | # build_temp is build/temp. 37 | wanted = os.path.join(cmd.build_base, 'temp' + plat_spec) 38 | assert cmd.build_temp == wanted 39 | 40 | # build_scripts is build/scripts-x.x 41 | wanted = os.path.join(cmd.build_base, 'scripts-%d.%d' % sys.version_info[:2]) 42 | assert cmd.build_scripts == wanted 43 | 44 | # executable is os.path.normpath(sys.executable) 45 | assert cmd.executable == os.path.normpath(sys.executable) 46 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_clean.py: -------------------------------------------------------------------------------- 1 | """Tests for distutils.command.clean.""" 2 | import os 3 | 4 | from distutils.command.clean import clean 5 | from distutils.tests import support 6 | 7 | 8 | class TestClean(support.TempdirManager): 9 | def test_simple_run(self): 10 | pkg_dir, dist = self.create_dist() 11 | cmd = clean(dist) 12 | 13 | # let's add some elements clean should remove 14 | dirs = [ 15 | (d, os.path.join(pkg_dir, d)) 16 | for d in ( 17 | 'build_temp', 18 | 'build_lib', 19 | 'bdist_base', 20 | 'build_scripts', 21 | 'build_base', 22 | ) 23 | ] 24 | 25 | for name, path in dirs: 26 | os.mkdir(path) 27 | setattr(cmd, name, path) 28 | if name == 'build_base': 29 | continue 30 | for f in ('one', 'two', 'three'): 31 | self.write_file(os.path.join(path, f)) 32 | 33 | # let's run the command 34 | cmd.all = 1 35 | cmd.ensure_finalized() 36 | cmd.run() 37 | 38 | # make sure the files where removed 39 | for name, path in dirs: 40 | assert not os.path.exists(path), '%s was not removed' % path 41 | 42 | # let's run the command again (should spit warnings but succeed) 43 | cmd.all = 1 44 | cmd.ensure_finalized() 45 | cmd.run() 46 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_install_headers.py: -------------------------------------------------------------------------------- 1 | """Tests for distutils.command.install_headers.""" 2 | import os 3 | 4 | import pytest 5 | 6 | from distutils.command.install_headers import install_headers 7 | from distutils.tests import support 8 | 9 | 10 | @pytest.mark.usefixtures('save_env') 11 | class TestInstallHeaders( 12 | support.TempdirManager, 13 | ): 14 | def test_simple_run(self): 15 | # we have two headers 16 | header_list = self.mkdtemp() 17 | header1 = os.path.join(header_list, 'header1') 18 | header2 = os.path.join(header_list, 'header2') 19 | self.write_file(header1) 20 | self.write_file(header2) 21 | headers = [header1, header2] 22 | 23 | pkg_dir, dist = self.create_dist(headers=headers) 24 | cmd = install_headers(dist) 25 | assert cmd.get_inputs() == headers 26 | 27 | # let's run the command 28 | cmd.install_dir = os.path.join(pkg_dir, 'inst') 29 | cmd.ensure_finalized() 30 | cmd.run() 31 | 32 | # let's check the results 33 | assert len(cmd.get_outputs()) == 2 34 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_log.py: -------------------------------------------------------------------------------- 1 | """Tests for distutils.log""" 2 | 3 | import logging 4 | 5 | from distutils._log import log 6 | 7 | 8 | class TestLog: 9 | def test_non_ascii(self, caplog): 10 | caplog.set_level(logging.DEBUG) 11 | log.debug('Dεbug\tMėssãge') 12 | log.fatal('Fαtal\tÈrrōr') 13 | assert caplog.messages == ['Dεbug\tMėssãge', 'Fαtal\tÈrrōr'] 14 | -------------------------------------------------------------------------------- /setuptools/_distutils/tests/test_versionpredicate.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_distutils/tests/test_versionpredicate.py -------------------------------------------------------------------------------- /setuptools/_distutils/tests/unix_compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | try: 4 | import grp 5 | import pwd 6 | except ImportError: 7 | grp = pwd = None 8 | 9 | import pytest 10 | 11 | 12 | UNIX_ID_SUPPORT = grp and pwd 13 | UID_0_SUPPORT = UNIX_ID_SUPPORT and sys.platform != "cygwin" 14 | 15 | require_unix_id = pytest.mark.skipif( 16 | not UNIX_ID_SUPPORT, reason="Requires grp and pwd support" 17 | ) 18 | require_uid_0 = pytest.mark.skipif(not UID_0_SUPPORT, reason="Requires UID 0 support") 19 | -------------------------------------------------------------------------------- /setuptools/_importlib.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | 4 | def disable_importlib_metadata_finder(metadata): 5 | """ 6 | Ensure importlib_metadata doesn't provide older, incompatible 7 | Distributions. 8 | 9 | Workaround for #3102. 10 | """ 11 | try: 12 | import importlib_metadata 13 | except ImportError: 14 | return 15 | except AttributeError: 16 | from .warnings import SetuptoolsWarning 17 | 18 | SetuptoolsWarning.emit( 19 | "Incompatibility problem.", 20 | """ 21 | `importlib-metadata` version is incompatible with `setuptools`. 22 | This problem is likely to be solved by installing an updated version of 23 | `importlib-metadata`. 24 | """, 25 | see_url="https://github.com/python/importlib_metadata/issues/396", 26 | ) # Ensure a descriptive message is shown. 27 | raise # This exception can be suppressed by _distutils_hack 28 | 29 | if importlib_metadata is metadata: 30 | return 31 | to_remove = [ 32 | ob 33 | for ob in sys.meta_path 34 | if isinstance(ob, importlib_metadata.MetadataPathFinder) 35 | ] 36 | for item in to_remove: 37 | sys.meta_path.remove(item) 38 | 39 | 40 | if sys.version_info < (3, 10): 41 | from setuptools.extern import importlib_metadata as metadata 42 | 43 | disable_importlib_metadata_finder(metadata) 44 | else: 45 | import importlib.metadata as metadata # noqa: F401 46 | 47 | 48 | if sys.version_info < (3, 9): 49 | from setuptools.extern import importlib_resources as resources 50 | else: 51 | import importlib.resources as resources # noqa: F401 52 | -------------------------------------------------------------------------------- /setuptools/_itertools.py: -------------------------------------------------------------------------------- 1 | from setuptools.extern.more_itertools import consume # noqa: F401 2 | 3 | 4 | # copied from jaraco.itertools 6.1 5 | def ensure_unique(iterable, key=lambda x: x): 6 | """ 7 | Wrap an iterable to raise a ValueError if non-unique values are encountered. 8 | 9 | >>> list(ensure_unique('abc')) 10 | ['a', 'b', 'c'] 11 | >>> consume(ensure_unique('abca')) 12 | Traceback (most recent call last): 13 | ... 14 | ValueError: Duplicate element 'a' encountered. 15 | """ 16 | seen = set() 17 | seen_add = seen.add 18 | for element in iterable: 19 | k = key(element) 20 | if k in seen: 21 | raise ValueError(f"Duplicate element {element!r} encountered.") 22 | seen_add(k) 23 | yield element 24 | -------------------------------------------------------------------------------- /setuptools/_path.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | from typing import Union 4 | 5 | _Path = Union[str, os.PathLike] 6 | 7 | 8 | def ensure_directory(path): 9 | """Ensure that the parent directory of `path` exists""" 10 | dirname = os.path.dirname(path) 11 | os.makedirs(dirname, exist_ok=True) 12 | 13 | 14 | def same_path(p1: _Path, p2: _Path) -> bool: 15 | """Differs from os.path.samefile because it does not require paths to exist. 16 | Purely string based (no comparison between i-nodes). 17 | >>> same_path("a/b", "./a/b") 18 | True 19 | >>> same_path("a/b", "a/./b") 20 | True 21 | >>> same_path("a/b", "././a/b") 22 | True 23 | >>> same_path("a/b", "./a/b/c/..") 24 | True 25 | >>> same_path("a/b", "../a/b/c") 26 | False 27 | >>> same_path("a", "a/b") 28 | False 29 | """ 30 | return normpath(p1) == normpath(p2) 31 | 32 | 33 | def normpath(filename: _Path) -> str: 34 | """Normalize a file/dir name for comparison purposes.""" 35 | # See pkg_resources.normalize_path for notes about cygwin 36 | file = os.path.abspath(filename) if sys.platform == 'cygwin' else filename 37 | return os.path.normcase(os.path.realpath(os.path.normpath(file))) 38 | -------------------------------------------------------------------------------- /setuptools/_reqs.py: -------------------------------------------------------------------------------- 1 | from typing import Callable, Iterable, Iterator, TypeVar, Union, overload 2 | 3 | import setuptools.extern.jaraco.text as text 4 | from setuptools.extern.packaging.requirements import Requirement 5 | 6 | _T = TypeVar("_T") 7 | _StrOrIter = Union[str, Iterable[str]] 8 | 9 | 10 | def parse_strings(strs: _StrOrIter) -> Iterator[str]: 11 | """ 12 | Yield requirement strings for each specification in `strs`. 13 | 14 | `strs` must be a string, or a (possibly-nested) iterable thereof. 15 | """ 16 | return text.join_continuation(map(text.drop_comment, text.yield_lines(strs))) 17 | 18 | 19 | @overload 20 | def parse(strs: _StrOrIter) -> Iterator[Requirement]: 21 | ... 22 | 23 | 24 | @overload 25 | def parse(strs: _StrOrIter, parser: Callable[[str], _T]) -> Iterator[_T]: 26 | ... 27 | 28 | 29 | def parse(strs, parser=Requirement): 30 | """ 31 | Replacement for ``pkg_resources.parse_requirements`` that uses ``packaging``. 32 | """ 33 | return map(parser, parse_strings(strs)) 34 | -------------------------------------------------------------------------------- /setuptools/_vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata-6.0.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata-6.0.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | importlib_metadata-6.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | importlib_metadata-6.0.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358 3 | importlib_metadata-6.0.0.dist-info/METADATA,sha256=tZIEx9HdEXD34SWuitkNXaYBqSnyNukx2l4FKQAz9hY,4958 4 | importlib_metadata-6.0.0.dist-info/RECORD,, 5 | importlib_metadata-6.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | importlib_metadata-6.0.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 7 | importlib_metadata-6.0.0.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19 8 | importlib_metadata/__init__.py,sha256=wiMJxNXXhPtRRHSX2N9gGLnTh0YszmE1rn3uKYRrNcs,26490 9 | importlib_metadata/__pycache__/__init__.cpython-311.pyc,, 10 | importlib_metadata/__pycache__/_adapters.cpython-311.pyc,, 11 | importlib_metadata/__pycache__/_collections.cpython-311.pyc,, 12 | importlib_metadata/__pycache__/_compat.cpython-311.pyc,, 13 | importlib_metadata/__pycache__/_functools.cpython-311.pyc,, 14 | importlib_metadata/__pycache__/_itertools.cpython-311.pyc,, 15 | importlib_metadata/__pycache__/_meta.cpython-311.pyc,, 16 | importlib_metadata/__pycache__/_py39compat.cpython-311.pyc,, 17 | importlib_metadata/__pycache__/_text.cpython-311.pyc,, 18 | importlib_metadata/_adapters.py,sha256=i8S6Ib1OQjcILA-l4gkzktMZe18TaeUNI49PLRp6OBU,2454 19 | importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743 20 | importlib_metadata/_compat.py,sha256=9zOKf0eDgkCMnnaEhU5kQVxHd1P8BIYV7Stso7av5h8,1857 21 | importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895 22 | importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068 23 | importlib_metadata/_meta.py,sha256=v5e1ZDG7yZTH3h7TjbS5bM5p8AGzMPVOu8skDMv4h6k,1165 24 | importlib_metadata/_py39compat.py,sha256=2Tk5twb_VgLCY-1NEAQjdZp_S9OFMC-pUzP2isuaPsQ,1098 25 | importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166 26 | importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 27 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata-6.0.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_metadata-6.0.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata-6.0.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata-6.0.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | importlib_metadata 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata/_collections.py: -------------------------------------------------------------------------------- 1 | import collections 2 | 3 | 4 | # from jaraco.collections 3.3 5 | class FreezableDefaultDict(collections.defaultdict): 6 | """ 7 | Often it is desirable to prevent the mutation of 8 | a default dict after its initial construction, such 9 | as to prevent mutation during iteration. 10 | 11 | >>> dd = FreezableDefaultDict(list) 12 | >>> dd[0].append('1') 13 | >>> dd.freeze() 14 | >>> dd[1] 15 | [] 16 | >>> len(dd) 17 | 1 18 | """ 19 | 20 | def __missing__(self, key): 21 | return getattr(self, '_frozen', super().__missing__)(key) 22 | 23 | def freeze(self): 24 | self._frozen = lambda key: self.default_factory() 25 | 26 | 27 | class Pair(collections.namedtuple('Pair', 'name value')): 28 | @classmethod 29 | def parse(cls, text): 30 | return cls(*map(str.strip, text.split("=", 1))) 31 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata/_compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import platform 3 | 4 | 5 | __all__ = ['install', 'NullFinder', 'Protocol'] 6 | 7 | 8 | try: 9 | from typing import Protocol 10 | except ImportError: # pragma: no cover 11 | # Python 3.7 compatibility 12 | from ..typing_extensions import Protocol # type: ignore 13 | 14 | 15 | def install(cls): 16 | """ 17 | Class decorator for installation on sys.meta_path. 18 | 19 | Adds the backport DistributionFinder to sys.meta_path and 20 | attempts to disable the finder functionality of the stdlib 21 | DistributionFinder. 22 | """ 23 | sys.meta_path.append(cls()) 24 | disable_stdlib_finder() 25 | return cls 26 | 27 | 28 | def disable_stdlib_finder(): 29 | """ 30 | Give the backport primacy for discovering path-based distributions 31 | by monkey-patching the stdlib O_O. 32 | 33 | See #91 for more background for rationale on this sketchy 34 | behavior. 35 | """ 36 | 37 | def matches(finder): 38 | return getattr( 39 | finder, '__module__', None 40 | ) == '_frozen_importlib_external' and hasattr(finder, 'find_distributions') 41 | 42 | for finder in filter(matches, sys.meta_path): # pragma: nocover 43 | del finder.find_distributions 44 | 45 | 46 | class NullFinder: 47 | """ 48 | A "Finder" (aka "MetaClassFinder") that never finds any modules, 49 | but may find distributions. 50 | """ 51 | 52 | @staticmethod 53 | def find_spec(*args, **kwargs): 54 | return None 55 | 56 | # In Python 2, the import system requires finders 57 | # to have a find_module() method, but this usage 58 | # is deprecated in Python 3 in favor of find_spec(). 59 | # For the purposes of this finder (i.e. being present 60 | # on sys.meta_path but having no other import 61 | # system functionality), the two methods are identical. 62 | find_module = find_spec 63 | 64 | 65 | def pypy_partial(val): 66 | """ 67 | Adjust for variable stacklevel on partial under PyPy. 68 | 69 | Workaround for #327. 70 | """ 71 | is_pypy = platform.python_implementation() == 'PyPy' 72 | return val + is_pypy 73 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata/_meta.py: -------------------------------------------------------------------------------- 1 | from ._compat import Protocol 2 | from typing import Any, Dict, Iterator, List, TypeVar, Union 3 | 4 | 5 | _T = TypeVar("_T") 6 | 7 | 8 | class PackageMetadata(Protocol): 9 | def __len__(self) -> int: 10 | ... # pragma: no cover 11 | 12 | def __contains__(self, item: str) -> bool: 13 | ... # pragma: no cover 14 | 15 | def __getitem__(self, key: str) -> str: 16 | ... # pragma: no cover 17 | 18 | def __iter__(self) -> Iterator[str]: 19 | ... # pragma: no cover 20 | 21 | def get_all(self, name: str, failobj: _T = ...) -> Union[List[Any], _T]: 22 | """ 23 | Return all values associated with a possibly multi-valued key. 24 | """ 25 | 26 | @property 27 | def json(self) -> Dict[str, Union[str, List[str]]]: 28 | """ 29 | A JSON-compatible form of the metadata. 30 | """ 31 | 32 | 33 | class SimplePath(Protocol[_T]): 34 | """ 35 | A minimal subset of pathlib.Path required by PathDistribution. 36 | """ 37 | 38 | def joinpath(self) -> _T: 39 | ... # pragma: no cover 40 | 41 | def __truediv__(self, other: Union[str, _T]) -> _T: 42 | ... # pragma: no cover 43 | 44 | @property 45 | def parent(self) -> _T: 46 | ... # pragma: no cover 47 | 48 | def read_text(self) -> str: 49 | ... # pragma: no cover 50 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata/_py39compat.py: -------------------------------------------------------------------------------- 1 | """ 2 | Compatibility layer with Python 3.8/3.9 3 | """ 4 | from typing import TYPE_CHECKING, Any, Optional 5 | 6 | if TYPE_CHECKING: # pragma: no cover 7 | # Prevent circular imports on runtime. 8 | from . import Distribution, EntryPoint 9 | else: 10 | Distribution = EntryPoint = Any 11 | 12 | 13 | def normalized_name(dist: Distribution) -> Optional[str]: 14 | """ 15 | Honor name normalization for distributions that don't provide ``_normalized_name``. 16 | """ 17 | try: 18 | return dist._normalized_name 19 | except AttributeError: 20 | from . import Prepared # -> delay to prevent circular imports. 21 | 22 | return Prepared.normalize(getattr(dist, "name", None) or dist.metadata['Name']) 23 | 24 | 25 | def ep_matches(ep: EntryPoint, **params) -> bool: 26 | """ 27 | Workaround for ``EntryPoint`` objects without the ``matches`` method. 28 | """ 29 | try: 30 | return ep.matches(**params) 31 | except AttributeError: 32 | from . import EntryPoint # -> delay to prevent circular imports. 33 | 34 | # Reconstruct the EntryPoint object to make sure it is compatible. 35 | return EntryPoint(ep.name, ep.value, ep.group).matches(**params) 36 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_metadata/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_metadata/py.typed -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources-5.10.2.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources-5.10.2.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources-5.10.2.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources-5.10.2.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources-5.10.2.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | importlib_resources 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/__init__.py: -------------------------------------------------------------------------------- 1 | """Read resources contained within a package.""" 2 | 3 | from ._common import ( 4 | as_file, 5 | files, 6 | Package, 7 | ) 8 | 9 | from ._legacy import ( 10 | contents, 11 | open_binary, 12 | read_binary, 13 | open_text, 14 | read_text, 15 | is_resource, 16 | path, 17 | Resource, 18 | ) 19 | 20 | from .abc import ResourceReader 21 | 22 | 23 | __all__ = [ 24 | 'Package', 25 | 'Resource', 26 | 'ResourceReader', 27 | 'as_file', 28 | 'contents', 29 | 'files', 30 | 'is_resource', 31 | 'open_binary', 32 | 'open_text', 33 | 'path', 34 | 'read_binary', 35 | 'read_text', 36 | ] 37 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/_itertools.py: -------------------------------------------------------------------------------- 1 | from itertools import filterfalse 2 | 3 | from typing import ( 4 | Callable, 5 | Iterable, 6 | Iterator, 7 | Optional, 8 | Set, 9 | TypeVar, 10 | Union, 11 | ) 12 | 13 | # Type and type variable definitions 14 | _T = TypeVar('_T') 15 | _U = TypeVar('_U') 16 | 17 | 18 | def unique_everseen( 19 | iterable: Iterable[_T], key: Optional[Callable[[_T], _U]] = None 20 | ) -> Iterator[_T]: 21 | "List unique elements, preserving order. Remember all elements ever seen." 22 | # unique_everseen('AAAABBBCCDAABBB') --> A B C D 23 | # unique_everseen('ABBCcAD', str.lower) --> A B C D 24 | seen: Set[Union[_T, _U]] = set() 25 | seen_add = seen.add 26 | if key is None: 27 | for element in filterfalse(seen.__contains__, iterable): 28 | seen_add(element) 29 | yield element 30 | else: 31 | for element in iterable: 32 | k = key(element) 33 | if k not in seen: 34 | seen_add(k) 35 | yield element 36 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/py.typed -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/_compat.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | try: 5 | from test.support import import_helper # type: ignore 6 | except ImportError: 7 | # Python 3.9 and earlier 8 | class import_helper: # type: ignore 9 | from test.support import ( 10 | modules_setup, 11 | modules_cleanup, 12 | DirsOnSysPath, 13 | CleanImport, 14 | ) 15 | 16 | 17 | try: 18 | from test.support import os_helper # type: ignore 19 | except ImportError: 20 | # Python 3.9 compat 21 | class os_helper: # type:ignore 22 | from test.support import temp_dir 23 | 24 | 25 | try: 26 | # Python 3.10 27 | from test.support.os_helper import unlink 28 | except ImportError: 29 | from test.support import unlink as _unlink 30 | 31 | def unlink(target): 32 | return _unlink(os.fspath(target)) 33 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/_path.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | import functools 3 | 4 | 5 | #### 6 | # from jaraco.path 3.4 7 | 8 | 9 | def build(spec, prefix=pathlib.Path()): 10 | """ 11 | Build a set of files/directories, as described by the spec. 12 | 13 | Each key represents a pathname, and the value represents 14 | the content. Content may be a nested directory. 15 | 16 | >>> spec = { 17 | ... 'README.txt': "A README file", 18 | ... "foo": { 19 | ... "__init__.py": "", 20 | ... "bar": { 21 | ... "__init__.py": "", 22 | ... }, 23 | ... "baz.py": "# Some code", 24 | ... } 25 | ... } 26 | >>> tmpdir = getfixture('tmpdir') 27 | >>> build(spec, tmpdir) 28 | """ 29 | for name, contents in spec.items(): 30 | create(contents, pathlib.Path(prefix) / name) 31 | 32 | 33 | @functools.singledispatch 34 | def create(content, path): 35 | path.mkdir(exist_ok=True) 36 | build(content, prefix=path) # type: ignore 37 | 38 | 39 | @create.register 40 | def _(content: bytes, path): 41 | path.write_bytes(content) 42 | 43 | 44 | @create.register 45 | def _(content: str, path): 46 | path.write_text(content) 47 | 48 | 49 | # end from jaraco.path 50 | #### 51 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data01/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/utf-16.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data01/utf-16.file -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data01/utf-8.file: -------------------------------------------------------------------------------- 1 | Hello, UTF-8 world! 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data02/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data02/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txt: -------------------------------------------------------------------------------- 1 | one resource 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt: -------------------------------------------------------------------------------- 1 | two resource 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/namespacedata01/binary.file: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.file: -------------------------------------------------------------------------------- 1 | Hello, UTF-8 world! 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/test_contents.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import importlib_resources as resources 3 | 4 | from . import data01 5 | from . import util 6 | 7 | 8 | class ContentsTests: 9 | expected = { 10 | '__init__.py', 11 | 'binary.file', 12 | 'subdirectory', 13 | 'utf-16.file', 14 | 'utf-8.file', 15 | } 16 | 17 | def test_contents(self): 18 | contents = {path.name for path in resources.files(self.data).iterdir()} 19 | assert self.expected <= contents 20 | 21 | 22 | class ContentsDiskTests(ContentsTests, unittest.TestCase): 23 | def setUp(self): 24 | self.data = data01 25 | 26 | 27 | class ContentsZipTests(ContentsTests, util.ZipSetup, unittest.TestCase): 28 | pass 29 | 30 | 31 | class ContentsNamespaceTests(ContentsTests, unittest.TestCase): 32 | expected = { 33 | # no __init__ because of namespace design 34 | # no subdirectory as incidental difference in fixture 35 | 'binary.file', 36 | 'utf-16.file', 37 | 'utf-8.file', 38 | } 39 | 40 | def setUp(self): 41 | from . import namespacedata01 42 | 43 | self.data = namespacedata01 44 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/update-zips.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generate the zip test data files. 3 | 4 | Run to build the tests/zipdataNN/ziptestdata.zip files from 5 | files in tests/dataNN. 6 | 7 | Replaces the file with the working copy, but does commit anything 8 | to the source repo. 9 | """ 10 | 11 | import contextlib 12 | import os 13 | import pathlib 14 | import zipfile 15 | 16 | 17 | def main(): 18 | """ 19 | >>> from unittest import mock 20 | >>> monkeypatch = getfixture('monkeypatch') 21 | >>> monkeypatch.setattr(zipfile, 'ZipFile', mock.MagicMock()) 22 | >>> print(); main() # print workaround for bpo-32509 23 | 24 | ...data01... -> ziptestdata/... 25 | ... 26 | ...data02... -> ziptestdata/... 27 | ... 28 | """ 29 | suffixes = '01', '02' 30 | tuple(map(generate, suffixes)) 31 | 32 | 33 | def generate(suffix): 34 | root = pathlib.Path(__file__).parent.relative_to(os.getcwd()) 35 | zfpath = root / f'zipdata{suffix}/ziptestdata.zip' 36 | with zipfile.ZipFile(zfpath, 'w') as zf: 37 | for src, rel in walk(root / f'data{suffix}'): 38 | dst = 'ziptestdata' / pathlib.PurePosixPath(rel.as_posix()) 39 | print(src, '->', dst) 40 | zf.write(src, dst) 41 | 42 | 43 | def walk(datapath): 44 | for dirpath, dirnames, filenames in os.walk(datapath): 45 | with contextlib.suppress(ValueError): 46 | dirnames.remove('__pycache__') 47 | for filename in filenames: 48 | res = pathlib.Path(dirpath) / filename 49 | rel = res.relative_to(datapath) 50 | yield res, rel 51 | 52 | 53 | __name__ == '__main__' and main() 54 | -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/zipdata01/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/zipdata01/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/zipdata01/ziptestdata.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/zipdata01/ziptestdata.zip -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/zipdata02/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/zipdata02/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/importlib_resources/tests/zipdata02/ziptestdata.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/importlib_resources/tests/zipdata02/ziptestdata.zip -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.context-4.3.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.context-4.3.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.context-4.3.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.context-4.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.context-4.3.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.context-4.3.0.dist-info/METADATA,sha256=GqMykAm33E7Tt_t_MHc5O7GJN62Qwp6MEHX9WD-LPow,2958 4 | jaraco.context-4.3.0.dist-info/RECORD,, 5 | jaraco.context-4.3.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 6 | jaraco.context-4.3.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 7 | jaraco/__pycache__/context.cpython-311.pyc,, 8 | jaraco/context.py,sha256=vlyDzb_PvZ9H7R9bbTr_CMRnveW5Dc56eC7eyd_GfoA,7460 9 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.context-4.3.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.context-4.3.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.functools-3.6.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.functools-3.6.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.functools-3.6.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.functools-3.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.functools-3.6.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.functools-3.6.0.dist-info/METADATA,sha256=ImGoa1WEbhsibIb288yWqkDAvqLwlPzayjravRvW_Bs,3136 4 | jaraco.functools-3.6.0.dist-info/RECORD,, 5 | jaraco.functools-3.6.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 6 | jaraco.functools-3.6.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 7 | jaraco/__pycache__/functools.cpython-311.pyc,, 8 | jaraco/functools.py,sha256=GhSJGMVMcb0U4-axXaY_au30hT-ceW-HM1EbV1_9NzI,15035 9 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.functools-3.6.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.38.4) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.functools-3.6.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | jaraco.text-3.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | jaraco.text-3.7.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 3 | jaraco.text-3.7.0.dist-info/METADATA,sha256=5mcR1dY0cJNrM-VIkAFkpjOgvgzmq6nM1GfD0gwTIhs,2136 4 | jaraco.text-3.7.0.dist-info/RECORD,, 5 | jaraco.text-3.7.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | jaraco.text-3.7.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 7 | jaraco.text-3.7.0.dist-info/top_level.txt,sha256=0JnN3LfXH4LIRfXL-QFOGCJzQWZO3ELx4R1d_louoQM,7 8 | jaraco/text/Lorem ipsum.txt,sha256=N_7c_79zxOufBY9HZ3yzMgOkNv-TkOTTio4BydrSjgs,1335 9 | jaraco/text/__init__.py,sha256=I56MW2ZFwPrYXIxzqxMBe2A1t-T4uZBgEgAKe9-JoqM,15538 10 | jaraco/text/__pycache__/__init__.cpython-311.pyc,, 11 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/jaraco.text-3.7.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.37.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco.text-3.7.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | jaraco 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/jaraco/__init__.py -------------------------------------------------------------------------------- /setuptools/_vendor/jaraco/text/Lorem ipsum.txt: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 2 | Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst. 3 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Erik Rose 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | more_itertools-8.8.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | more_itertools-8.8.0.dist-info/LICENSE,sha256=CfHIyelBrz5YTVlkHqm4fYPAyw_QB-te85Gn4mQ8GkY,1053 3 | more_itertools-8.8.0.dist-info/METADATA,sha256=Gke9w7RnfiAvveik_iBBrzd0RjrDhsQ8uRYNBJdo4qQ,40482 4 | more_itertools-8.8.0.dist-info/RECORD,, 5 | more_itertools-8.8.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | more_itertools-8.8.0.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 7 | more_itertools-8.8.0.dist-info/top_level.txt,sha256=fAuqRXu9LPhxdB9ujJowcFOu1rZ8wzSpOW9_jlKis6M,15 8 | more_itertools/__init__.py,sha256=C7sXffHTXM3P-iaLPPfqfmDoxOflQMJLcM7ed9p3jak,82 9 | more_itertools/__init__.pyi,sha256=5B3eTzON1BBuOLob1vCflyEb2lSd6usXQQ-Cv-hXkeA,43 10 | more_itertools/__pycache__/__init__.cpython-311.pyc,, 11 | more_itertools/__pycache__/more.cpython-311.pyc,, 12 | more_itertools/__pycache__/recipes.cpython-311.pyc,, 13 | more_itertools/more.py,sha256=DlZa8v6JihVwfQ5zHidOA-xDE0orcQIUyxVnCaUoDKE,117968 14 | more_itertools/more.pyi,sha256=r32pH2raBC1zih3evK4fyvAXvrUamJqc6dgV7QCRL_M,14977 15 | more_itertools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 16 | more_itertools/recipes.py,sha256=UkNkrsZyqiwgLHANBTmvMhCvaNSvSNYhyOpz_Jc55DY,16256 17 | more_itertools/recipes.pyi,sha256=9BpeKd5_qalYVSnuHfqPSCfoGgqnQY2Xu9pNwrDlHU8,3551 18 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/more_itertools-8.8.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.36.2) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools-8.8.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | more_itertools 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools/__init__.py: -------------------------------------------------------------------------------- 1 | from .more import * # noqa 2 | from .recipes import * # noqa 3 | 4 | __version__ = '8.8.0' 5 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools/__init__.pyi: -------------------------------------------------------------------------------- 1 | from .more import * 2 | from .recipes import * 3 | -------------------------------------------------------------------------------- /setuptools/_vendor/more_itertools/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/more_itertools/py.typed -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Luminoso Technologies, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a 4 | copy of this software and associated documentation files (the "Software"), 5 | to deal in the Software without restriction, including without limitation 6 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | and/or sell copies of the Software, and to permit persons to whom the 8 | Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/ordered_set.cpython-311.pyc,, 2 | ordered_set-3.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | ordered_set-3.1.1.dist-info/METADATA,sha256=qEaJM9CbGNixB_jvfohisKbXTUjcef6nCCcBJju6f4U,5357 4 | ordered_set-3.1.1.dist-info/MIT-LICENSE,sha256=TvRE7qUSUBcd0ols7wgNf3zDEEJWW7kv7WDRySrMBBE,1071 5 | ordered_set-3.1.1.dist-info/RECORD,, 6 | ordered_set-3.1.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | ordered_set-3.1.1.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110 8 | ordered_set-3.1.1.dist-info/top_level.txt,sha256=NTY2_aDi1Do9fl3Z9EmWPxasFkUeW2dzO2D3RDx5CfM,12 9 | ordered_set.py,sha256=dbaCcs27dyN9gnMWGF5nA_BrVn6Q-NrjKYJpV9_fgBs,15130 10 | -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/ordered_set-3.1.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.40.0) 3 | Root-Is-Purelib: true 4 | Tag: py2-none-any 5 | Tag: py3-none-any 6 | 7 | -------------------------------------------------------------------------------- /setuptools/_vendor/ordered_set-3.1.1.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | ordered_set 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging-23.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging-23.1.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | This software is made available under the terms of *either* of the licenses 2 | found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made 3 | under the terms of *both* these licenses. 4 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging-23.1.dist-info/LICENSE.BSD: -------------------------------------------------------------------------------- 1 | Copyright (c) Donald Stufft and individual contributors. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging-23.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/packaging-23.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/packaging-23.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.8.0 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is dual licensed under the terms of the Apache License, Version 2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository 3 | # for complete details. 4 | 5 | __title__ = "packaging" 6 | __summary__ = "Core utilities for Python packages" 7 | __uri__ = "https://github.com/pypa/packaging" 8 | 9 | __version__ = "23.1" 10 | 11 | __author__ = "Donald Stufft and individual contributors" 12 | __email__ = "donald@stufft.io" 13 | 14 | __license__ = "BSD-2-Clause or Apache-2.0" 15 | __copyright__ = "2014-2019 %s" % __author__ 16 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging/_structures.py: -------------------------------------------------------------------------------- 1 | # This file is dual licensed under the terms of the Apache License, Version 2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository 3 | # for complete details. 4 | 5 | 6 | class InfinityType: 7 | def __repr__(self) -> str: 8 | return "Infinity" 9 | 10 | def __hash__(self) -> int: 11 | return hash(repr(self)) 12 | 13 | def __lt__(self, other: object) -> bool: 14 | return False 15 | 16 | def __le__(self, other: object) -> bool: 17 | return False 18 | 19 | def __eq__(self, other: object) -> bool: 20 | return isinstance(other, self.__class__) 21 | 22 | def __gt__(self, other: object) -> bool: 23 | return True 24 | 25 | def __ge__(self, other: object) -> bool: 26 | return True 27 | 28 | def __neg__(self: object) -> "NegativeInfinityType": 29 | return NegativeInfinity 30 | 31 | 32 | Infinity = InfinityType() 33 | 34 | 35 | class NegativeInfinityType: 36 | def __repr__(self) -> str: 37 | return "-Infinity" 38 | 39 | def __hash__(self) -> int: 40 | return hash(repr(self)) 41 | 42 | def __lt__(self, other: object) -> bool: 43 | return True 44 | 45 | def __le__(self, other: object) -> bool: 46 | return True 47 | 48 | def __eq__(self, other: object) -> bool: 49 | return isinstance(other, self.__class__) 50 | 51 | def __gt__(self, other: object) -> bool: 52 | return False 53 | 54 | def __ge__(self, other: object) -> bool: 55 | return False 56 | 57 | def __neg__(self: object) -> InfinityType: 58 | return Infinity 59 | 60 | 61 | NegativeInfinity = NegativeInfinityType() 62 | -------------------------------------------------------------------------------- /setuptools/_vendor/packaging/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/packaging/py.typed -------------------------------------------------------------------------------- /setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Taneli Hukkinen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli-2.0.1.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | tomli-2.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | tomli-2.0.1.dist-info/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072 3 | tomli-2.0.1.dist-info/METADATA,sha256=zPDceKmPwJGLWtZykrHixL7WVXWmJGzZ1jyRT5lCoPI,8875 4 | tomli-2.0.1.dist-info/RECORD,, 5 | tomli-2.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | tomli-2.0.1.dist-info/WHEEL,sha256=jPMR_Dzkc4X4icQtmz81lnNY_kAsfog7ry7qoRvYLXw,81 7 | tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396 8 | tomli/__pycache__/__init__.cpython-311.pyc,, 9 | tomli/__pycache__/_parser.cpython-311.pyc,, 10 | tomli/__pycache__/_re.cpython-311.pyc,, 11 | tomli/__pycache__/_types.cpython-311.pyc,, 12 | tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633 13 | tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943 14 | tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 15 | tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 16 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.6.0 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MIT 2 | # SPDX-FileCopyrightText: 2021 Taneli Hukkinen 3 | # Licensed to PSF under a Contributor Agreement. 4 | 5 | __all__ = ("loads", "load", "TOMLDecodeError") 6 | __version__ = "2.0.1" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT 7 | 8 | from ._parser import TOMLDecodeError, load, loads 9 | 10 | # Pretend this exception was created here. 11 | TOMLDecodeError.__module__ = __name__ 12 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli/_types.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MIT 2 | # SPDX-FileCopyrightText: 2021 Taneli Hukkinen 3 | # Licensed to PSF under a Contributor Agreement. 4 | 5 | from typing import Any, Callable, Tuple 6 | 7 | # Type annotations 8 | ParseFloat = Callable[[str], Any] 9 | Key = Tuple[str, ...] 10 | Pos = int 11 | -------------------------------------------------------------------------------- /setuptools/_vendor/tomli/py.typed: -------------------------------------------------------------------------------- 1 | # Marker file for PEP 561 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/typing_extensions-4.0.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/typing_extensions-4.0.1.dist-info/METADATA: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: typing_extensions 3 | Version: 4.0.1 4 | Summary: Backported and Experimental Type Hints for Python 3.6+ 5 | Keywords: annotations,backport,checker,checking,function,hinting,hints,type,typechecking,typehinting,typehints,typing 6 | Author-email: "Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee" 7 | Requires-Python: >=3.6 8 | Description-Content-Type: text/x-rst 9 | Classifier: Development Status :: 3 - Alpha 10 | Classifier: Environment :: Console 11 | Classifier: Intended Audience :: Developers 12 | Classifier: License :: OSI Approved :: Python Software Foundation License 13 | Classifier: Operating System :: OS Independent 14 | Classifier: Programming Language :: Python :: 3 15 | Classifier: Programming Language :: Python :: 3 :: Only 16 | Classifier: Programming Language :: Python :: 3.6 17 | Classifier: Programming Language :: Python :: 3.7 18 | Classifier: Programming Language :: Python :: 3.8 19 | Classifier: Programming Language :: Python :: 3.9 20 | Classifier: Programming Language :: Python :: 3.10 21 | Classifier: Topic :: Software Development 22 | Project-URL: Home, https://github.com/python/typing/blob/master/typing_extensions/README.rst 23 | 24 | Typing Extensions -- Backported and Experimental Type Hints for Python 25 | 26 | The ``typing`` module was added to the standard library in Python 3.5, but 27 | many new features have been added to the module since then. 28 | This means users of older Python versions who are unable to upgrade will not be 29 | able to take advantage of new types added to the ``typing`` module, such as 30 | ``typing.Protocol`` or ``typing.TypedDict``. 31 | 32 | The ``typing_extensions`` module contains backports of these changes. 33 | Experimental types that may eventually be added to the ``typing`` 34 | module are also included in ``typing_extensions``. 35 | 36 | -------------------------------------------------------------------------------- /setuptools/_vendor/typing_extensions-4.0.1.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/typing_extensions.cpython-311.pyc,, 2 | typing_extensions-4.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | typing_extensions-4.0.1.dist-info/LICENSE,sha256=_xfOlOECAk3raHc-scx0ynbaTmWPNzUx8Kwi1oprsa0,12755 4 | typing_extensions-4.0.1.dist-info/METADATA,sha256=iZ_5HONZZBXtF4kroz-IPZYIl9M8IE1B00R82dWcBqE,1736 5 | typing_extensions-4.0.1.dist-info/RECORD,, 6 | typing_extensions-4.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | typing_extensions-4.0.1.dist-info/WHEEL,sha256=LVOPL_YDMEiGvRLgDK1hLkfhFCnTcxcAYZJtpNFses0,81 8 | typing_extensions.py,sha256=1uqi_RSlI7gos4eJB_NEV3d5wQwzTUQHd3_jrkbTo8Q,87149 9 | -------------------------------------------------------------------------------- /setuptools/_vendor/typing_extensions-4.0.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/typing_extensions-4.0.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/typing_extensions-4.0.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.5.1 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /setuptools/_vendor/vendored.txt: -------------------------------------------------------------------------------- 1 | packaging==23.1 2 | ordered-set==3.1.1 3 | more_itertools==8.8.0 4 | jaraco.text==3.7.0 5 | importlib_resources==5.10.2 6 | importlib_metadata==6.0.0 7 | # required for importlib_metadata on older Pythons 8 | typing_extensions==4.0.1 9 | # required for importlib_resources and _metadata on older Pythons 10 | zipp==3.7.0 11 | tomli==2.0.1 12 | -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/zipp.cpython-311.pyc,, 2 | zipp-3.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | zipp-3.7.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 4 | zipp-3.7.0.dist-info/METADATA,sha256=ZLzgaXTyZX_MxTU0lcGfhdPY4CjFrT_3vyQ2Fo49pl8,2261 5 | zipp-3.7.0.dist-info/RECORD,, 6 | zipp-3.7.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | zipp-3.7.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 8 | zipp-3.7.0.dist-info/top_level.txt,sha256=iAbdoSHfaGqBfVb2XuR9JqSQHCoOsOtG6y9C_LSpqFw,5 9 | zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425 10 | -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/_vendor/zipp-3.7.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.37.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /setuptools/_vendor/zipp-3.7.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | zipp 2 | -------------------------------------------------------------------------------- /setuptools/cli-32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/cli-32.exe -------------------------------------------------------------------------------- /setuptools/cli-64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/cli-64.exe -------------------------------------------------------------------------------- /setuptools/cli-arm64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/cli-arm64.exe -------------------------------------------------------------------------------- /setuptools/cli.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/cli.exe -------------------------------------------------------------------------------- /setuptools/command/__init__.py: -------------------------------------------------------------------------------- 1 | from distutils.command.bdist import bdist 2 | import sys 3 | 4 | if 'egg' not in bdist.format_commands: 5 | try: 6 | bdist.format_commands['egg'] = ('bdist_egg', "Python .egg file") 7 | except TypeError: 8 | # For backward compatibility with older distutils (stdlib) 9 | bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") 10 | bdist.format_commands.append('egg') 11 | 12 | del bdist, sys 13 | -------------------------------------------------------------------------------- /setuptools/command/bdist_rpm.py: -------------------------------------------------------------------------------- 1 | import distutils.command.bdist_rpm as orig 2 | 3 | from ..warnings import SetuptoolsDeprecationWarning 4 | 5 | 6 | class bdist_rpm(orig.bdist_rpm): 7 | """ 8 | Override the default bdist_rpm behavior to do the following: 9 | 10 | 1. Run egg_info to ensure the name and version are properly calculated. 11 | 2. Always run 'install' using --single-version-externally-managed to 12 | disable eggs in RPM distributions. 13 | """ 14 | 15 | def run(self): 16 | SetuptoolsDeprecationWarning.emit( 17 | "Deprecated command", 18 | """ 19 | bdist_rpm is deprecated and will be removed in a future version. 20 | Use bdist_wheel (wheel packages) instead. 21 | """, 22 | see_url="https://github.com/pypa/setuptools/issues/1988", 23 | due_date=(2023, 10, 30), # Deprecation introduced in 22 Oct 2021. 24 | ) 25 | 26 | # ensure distro name is up-to-date 27 | self.run_command('egg_info') 28 | 29 | orig.bdist_rpm.run(self) 30 | 31 | def _make_spec_file(self): 32 | spec = orig.bdist_rpm._make_spec_file(self) 33 | spec = [ 34 | line.replace( 35 | "setup.py install ", 36 | "setup.py install --single-version-externally-managed ", 37 | ).replace("%setup", "%setup -n %{name}-%{unmangled_version}") 38 | for line in spec 39 | ] 40 | return spec 41 | -------------------------------------------------------------------------------- /setuptools/command/launcher manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /setuptools/command/register.py: -------------------------------------------------------------------------------- 1 | from distutils import log 2 | import distutils.command.register as orig 3 | 4 | from setuptools.errors import RemovedCommandError 5 | 6 | 7 | class register(orig.register): 8 | """Formerly used to register packages on PyPI.""" 9 | 10 | def run(self): 11 | msg = ( 12 | "The register command has been removed, use twine to upload " 13 | + "instead (https://pypi.org/p/twine)" 14 | ) 15 | 16 | self.announce("ERROR: " + msg, log.ERROR) 17 | 18 | raise RemovedCommandError(msg) 19 | -------------------------------------------------------------------------------- /setuptools/command/saveopts.py: -------------------------------------------------------------------------------- 1 | from setuptools.command.setopt import edit_config, option_base 2 | 3 | 4 | class saveopts(option_base): 5 | """Save command-line options to a file""" 6 | 7 | description = "save supplied options to setup.cfg or other config file" 8 | 9 | def run(self): 10 | dist = self.distribution 11 | settings = {} 12 | 13 | for cmd in dist.command_options: 14 | if cmd == 'saveopts': 15 | continue # don't save our own options! 16 | 17 | for opt, (src, val) in dist.get_option_dict(cmd).items(): 18 | if src == "command line": 19 | settings.setdefault(cmd, {})[opt] = val 20 | 21 | edit_config(self.filename, settings, self.dry_run) 22 | -------------------------------------------------------------------------------- /setuptools/command/upload.py: -------------------------------------------------------------------------------- 1 | from distutils import log 2 | from distutils.command import upload as orig 3 | 4 | from setuptools.errors import RemovedCommandError 5 | 6 | 7 | class upload(orig.upload): 8 | """Formerly used to upload packages to PyPI.""" 9 | 10 | def run(self): 11 | msg = ( 12 | "The upload command has been removed, use twine to upload " 13 | + "instead (https://pypi.org/p/twine)" 14 | ) 15 | 16 | self.announce("ERROR: " + msg, log.ERROR) 17 | raise RemovedCommandError(msg) 18 | -------------------------------------------------------------------------------- /setuptools/config/__init__.py: -------------------------------------------------------------------------------- 1 | """For backward compatibility, expose main functions from 2 | ``setuptools.config.setupcfg`` 3 | """ 4 | from functools import wraps 5 | from typing import Callable, TypeVar, cast 6 | 7 | from ..warnings import SetuptoolsDeprecationWarning 8 | from . import setupcfg 9 | 10 | Fn = TypeVar("Fn", bound=Callable) 11 | 12 | __all__ = ('parse_configuration', 'read_configuration') 13 | 14 | 15 | def _deprecation_notice(fn: Fn) -> Fn: 16 | @wraps(fn) 17 | def _wrapper(*args, **kwargs): 18 | SetuptoolsDeprecationWarning.emit( 19 | "Deprecated API usage.", 20 | f""" 21 | As setuptools moves its configuration towards `pyproject.toml`, 22 | `{__name__}.{fn.__name__}` became deprecated. 23 | 24 | For the time being, you can use the `{setupcfg.__name__}` module 25 | to access a backward compatible API, but this module is provisional 26 | and might be removed in the future. 27 | 28 | To read project metadata, consider using 29 | ``build.util.project_wheel_metadata`` (https://pypi.org/project/build/). 30 | For simple scenarios, you can also try parsing the file directly 31 | with the help of ``configparser``. 32 | """, 33 | # due_date not defined yet, because the community still heavily relies on it 34 | # Warning introduced in 24 Mar 2022 35 | ) 36 | return fn(*args, **kwargs) 37 | 38 | return cast(Fn, _wrapper) 39 | 40 | 41 | read_configuration = _deprecation_notice(setupcfg.read_configuration) 42 | parse_configuration = _deprecation_notice(setupcfg.parse_configuration) 43 | -------------------------------------------------------------------------------- /setuptools/config/_validate_pyproject/__init__.py: -------------------------------------------------------------------------------- 1 | from functools import reduce 2 | from typing import Any, Callable, Dict 3 | 4 | from . import formats 5 | from .error_reporting import detailed_errors, ValidationError 6 | from .extra_validations import EXTRA_VALIDATIONS 7 | from .fastjsonschema_exceptions import JsonSchemaException, JsonSchemaValueException 8 | from .fastjsonschema_validations import validate as _validate 9 | 10 | __all__ = [ 11 | "validate", 12 | "FORMAT_FUNCTIONS", 13 | "EXTRA_VALIDATIONS", 14 | "ValidationError", 15 | "JsonSchemaException", 16 | "JsonSchemaValueException", 17 | ] 18 | 19 | 20 | FORMAT_FUNCTIONS: Dict[str, Callable[[str], bool]] = { 21 | fn.__name__.replace("_", "-"): fn 22 | for fn in formats.__dict__.values() 23 | if callable(fn) and not fn.__name__.startswith("_") 24 | } 25 | 26 | 27 | def validate(data: Any) -> bool: 28 | """Validate the given ``data`` object using JSON Schema 29 | This function raises ``ValidationError`` if ``data`` is invalid. 30 | """ 31 | with detailed_errors(): 32 | _validate(data, custom_formats=FORMAT_FUNCTIONS) 33 | reduce(lambda acc, fn: fn(acc), EXTRA_VALIDATIONS, data) 34 | return True 35 | -------------------------------------------------------------------------------- /setuptools/config/_validate_pyproject/extra_validations.py: -------------------------------------------------------------------------------- 1 | """The purpose of this module is implement PEP 621 validations that are 2 | difficult to express as a JSON Schema (or that are not supported by the current 3 | JSON Schema library). 4 | """ 5 | 6 | from typing import Mapping, TypeVar 7 | 8 | from .error_reporting import ValidationError 9 | 10 | T = TypeVar("T", bound=Mapping) 11 | 12 | 13 | class RedefiningStaticFieldAsDynamic(ValidationError): 14 | """According to PEP 621: 15 | 16 | Build back-ends MUST raise an error if the metadata specifies a field 17 | statically as well as being listed in dynamic. 18 | """ 19 | 20 | 21 | def validate_project_dynamic(pyproject: T) -> T: 22 | project_table = pyproject.get("project", {}) 23 | dynamic = project_table.get("dynamic", []) 24 | 25 | for field in dynamic: 26 | if field in project_table: 27 | msg = f"You cannot provide a value for `project.{field}` and " 28 | msg += "list it under `project.dynamic` at the same time" 29 | name = f"data.project.{field}" 30 | value = {field: project_table[field], "...": " # ...", "dynamic": dynamic} 31 | raise RedefiningStaticFieldAsDynamic(msg, value, name, rule="PEP 621") 32 | 33 | return pyproject 34 | 35 | 36 | EXTRA_VALIDATIONS = (validate_project_dynamic,) 37 | -------------------------------------------------------------------------------- /setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | SPLIT_RE = re.compile(r'[\.\[\]]+') 5 | 6 | 7 | class JsonSchemaException(ValueError): 8 | """ 9 | Base exception of ``fastjsonschema`` library. 10 | """ 11 | 12 | 13 | class JsonSchemaValueException(JsonSchemaException): 14 | """ 15 | Exception raised by validation function. Available properties: 16 | 17 | * ``message`` containing human-readable information what is wrong (e.g. ``data.property[index] must be smaller than or equal to 42``), 18 | * invalid ``value`` (e.g. ``60``), 19 | * ``name`` of a path in the data structure (e.g. ``data.property[index]``), 20 | * ``path`` as an array in the data structure (e.g. ``['data', 'property', 'index']``), 21 | * the whole ``definition`` which the ``value`` has to fulfil (e.g. ``{'type': 'number', 'maximum': 42}``), 22 | * ``rule`` which the ``value`` is breaking (e.g. ``maximum``) 23 | * and ``rule_definition`` (e.g. ``42``). 24 | 25 | .. versionchanged:: 2.14.0 26 | Added all extra properties. 27 | """ 28 | 29 | def __init__(self, message, value=None, name=None, definition=None, rule=None): 30 | super().__init__(message) 31 | self.message = message 32 | self.value = value 33 | self.name = name 34 | self.definition = definition 35 | self.rule = rule 36 | 37 | @property 38 | def path(self): 39 | return [item for item in SPLIT_RE.split(self.name) if item != ''] 40 | 41 | @property 42 | def rule_definition(self): 43 | if not self.rule or not self.definition: 44 | return None 45 | return self.definition.get(self.rule) 46 | 47 | 48 | class JsonSchemaDefinitionException(JsonSchemaException): 49 | """ 50 | Exception raised by generator of validation function. 51 | """ 52 | -------------------------------------------------------------------------------- /setuptools/dep_util.py: -------------------------------------------------------------------------------- 1 | from distutils.dep_util import newer_group 2 | 3 | 4 | # yes, this is was almost entirely copy-pasted from 5 | # 'newer_pairwise()', this is just another convenience 6 | # function. 7 | def newer_pairwise_group(sources_groups, targets): 8 | """Walk both arguments in parallel, testing if each source group is newer 9 | than its corresponding target. Returns a pair of lists (sources_groups, 10 | targets) where sources is newer than target, according to the semantics 11 | of 'newer_group()'. 12 | """ 13 | if len(sources_groups) != len(targets): 14 | raise ValueError("'sources_group' and 'targets' must be the same length") 15 | 16 | # build a pair of lists (sources_groups, targets) where source is newer 17 | n_sources = [] 18 | n_targets = [] 19 | for i in range(len(sources_groups)): 20 | if newer_group(sources_groups[i], targets[i]): 21 | n_sources.append(sources_groups[i]) 22 | n_targets.append(targets[i]) 23 | 24 | return n_sources, n_targets 25 | -------------------------------------------------------------------------------- /setuptools/gui-32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/gui-32.exe -------------------------------------------------------------------------------- /setuptools/gui-64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/gui-64.exe -------------------------------------------------------------------------------- /setuptools/gui-arm64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/gui-arm64.exe -------------------------------------------------------------------------------- /setuptools/gui.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/gui.exe -------------------------------------------------------------------------------- /setuptools/launch.py: -------------------------------------------------------------------------------- 1 | """ 2 | Launch the Python script on the command line after 3 | setuptools is bootstrapped via import. 4 | """ 5 | 6 | # Note that setuptools gets imported implicitly by the 7 | # invocation of this script using python -m setuptools.launch 8 | 9 | import tokenize 10 | import sys 11 | 12 | 13 | def run(): 14 | """ 15 | Run the script in sys.argv[1] as if it had 16 | been invoked naturally. 17 | """ 18 | __builtins__ 19 | script_name = sys.argv[1] 20 | namespace = dict( 21 | __file__=script_name, 22 | __name__='__main__', 23 | __doc__=None, 24 | ) 25 | sys.argv[:] = sys.argv[1:] 26 | 27 | open_ = getattr(tokenize, 'open', open) 28 | with open_(script_name) as fid: 29 | script = fid.read() 30 | norm_script = script.replace('\\r\\n', '\\n') 31 | code = compile(norm_script, script_name, 'exec') 32 | exec(code, namespace) 33 | 34 | 35 | if __name__ == '__main__': 36 | run() 37 | -------------------------------------------------------------------------------- /setuptools/logging.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import inspect 3 | import logging 4 | import distutils.log 5 | from . import monkey 6 | 7 | 8 | def _not_warning(record): 9 | return record.levelno < logging.WARNING 10 | 11 | 12 | def configure(): 13 | """ 14 | Configure logging to emit warning and above to stderr 15 | and everything else to stdout. This behavior is provided 16 | for compatibility with distutils.log but may change in 17 | the future. 18 | """ 19 | err_handler = logging.StreamHandler() 20 | err_handler.setLevel(logging.WARNING) 21 | out_handler = logging.StreamHandler(sys.stdout) 22 | out_handler.addFilter(_not_warning) 23 | handlers = err_handler, out_handler 24 | logging.basicConfig( 25 | format="{message}", style='{', handlers=handlers, level=logging.DEBUG 26 | ) 27 | if inspect.ismodule(distutils.dist.log): 28 | monkey.patch_func(set_threshold, distutils.log, 'set_threshold') 29 | # For some reason `distutils.log` module is getting cached in `distutils.dist` 30 | # and then loaded again when patched, 31 | # implying: id(distutils.log) != id(distutils.dist.log). 32 | # Make sure the same module object is used everywhere: 33 | distutils.dist.log = distutils.log 34 | 35 | 36 | def set_threshold(level): 37 | logging.root.setLevel(level * 10) 38 | return set_threshold.unpatched(level) 39 | -------------------------------------------------------------------------------- /setuptools/py312compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import shutil 3 | 4 | 5 | def shutil_rmtree(path, ignore_errors=False, onexc=None): 6 | if sys.version_info >= (3, 12): 7 | return shutil.rmtree(path, ignore_errors, onexc=onexc) 8 | 9 | def _handler(fn, path, excinfo): 10 | return onexc(fn, path, excinfo[1]) 11 | 12 | return shutil.rmtree(path, ignore_errors, onerror=_handler) 13 | -------------------------------------------------------------------------------- /setuptools/script (dev).tmpl: -------------------------------------------------------------------------------- 1 | # EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r 2 | __requires__ = %(spec)r 3 | __import__('pkg_resources').require(%(spec)r) 4 | __file__ = %(dev_path)r 5 | with open(__file__) as f: 6 | exec(compile(f.read(), __file__, 'exec')) 7 | -------------------------------------------------------------------------------- /setuptools/script.tmpl: -------------------------------------------------------------------------------- 1 | # EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r 2 | __requires__ = %(spec)r 3 | __import__('pkg_resources').run_script(%(spec)r, %(script_name)r) 4 | -------------------------------------------------------------------------------- /setuptools/tests/__init__.py: -------------------------------------------------------------------------------- 1 | import locale 2 | 3 | import pytest 4 | 5 | 6 | __all__ = ['fail_on_ascii'] 7 | 8 | 9 | is_ascii = locale.getpreferredencoding() == 'ANSI_X3.4-1968' 10 | fail_on_ascii = pytest.mark.xfail(is_ascii, reason="Test fails in this locale") 11 | -------------------------------------------------------------------------------- /setuptools/tests/config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/tests/config/__init__.py -------------------------------------------------------------------------------- /setuptools/tests/config/downloads/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | !__init__.py 4 | !preload.py 5 | -------------------------------------------------------------------------------- /setuptools/tests/config/downloads/__init__.py: -------------------------------------------------------------------------------- 1 | import re 2 | import time 3 | from pathlib import Path 4 | from urllib.error import HTTPError 5 | from urllib.request import urlopen 6 | 7 | __all__ = ["DOWNLOAD_DIR", "retrieve_file", "output_file", "urls_from_file"] 8 | 9 | 10 | NAME_REMOVE = ("http://", "https://", "github.com/", "/raw/") 11 | DOWNLOAD_DIR = Path(__file__).parent 12 | 13 | 14 | # ---------------------------------------------------------------------- 15 | # Please update ./preload.py accordingly when modifying this file 16 | # ---------------------------------------------------------------------- 17 | 18 | 19 | def output_file(url: str, download_dir: Path = DOWNLOAD_DIR): 20 | file_name = url.strip() 21 | for part in NAME_REMOVE: 22 | file_name = file_name.replace(part, '').strip().strip('/:').strip() 23 | return Path(download_dir, re.sub(r"[^\-_\.\w\d]+", "_", file_name)) 24 | 25 | 26 | def retrieve_file(url: str, download_dir: Path = DOWNLOAD_DIR, wait: float = 5): 27 | path = output_file(url, download_dir) 28 | if path.exists(): 29 | print(f"Skipping {url} (already exists: {path})") 30 | else: 31 | download_dir.mkdir(exist_ok=True, parents=True) 32 | print(f"Downloading {url} to {path}") 33 | try: 34 | download(url, path) 35 | except HTTPError: 36 | time.sleep(wait) # wait a few seconds and try again. 37 | download(url, path) 38 | return path 39 | 40 | 41 | def urls_from_file(list_file: Path): 42 | """``list_file`` should be a text file where each line corresponds to a URL to 43 | download. 44 | """ 45 | print(f"file: {list_file}") 46 | content = list_file.read_text(encoding="utf-8") 47 | return [url for url in content.splitlines() if not url.startswith("#")] 48 | 49 | 50 | def download(url: str, dest: Path): 51 | with urlopen(url) as f: 52 | data = f.read() 53 | 54 | with open(dest, "wb") as f: 55 | f.write(data) 56 | 57 | assert Path(dest).exists() 58 | -------------------------------------------------------------------------------- /setuptools/tests/config/downloads/preload.py: -------------------------------------------------------------------------------- 1 | """This file can be used to preload files needed for testing. 2 | 3 | For example you can use:: 4 | 5 | cd setuptools/tests/config 6 | python -m downloads.preload setupcfg_examples.txt 7 | 8 | to make sure the `setup.cfg` examples are downloaded before starting the tests. 9 | """ 10 | import sys 11 | from pathlib import Path 12 | 13 | from . import retrieve_file, urls_from_file 14 | 15 | 16 | if __name__ == "__main__": 17 | urls = urls_from_file(Path(sys.argv[1])) 18 | list(map(retrieve_file, urls)) 19 | -------------------------------------------------------------------------------- /setuptools/tests/config/setupcfg_examples.txt: -------------------------------------------------------------------------------- 1 | # ==================================================================== 2 | # Some popular packages that use setup.cfg (and others not so popular) 3 | # Reference: https://hugovk.github.io/top-pypi-packages/ 4 | # ==================================================================== 5 | https://github.com/pypa/setuptools/raw/52c990172fec37766b3566679724aa8bf70ae06d/setup.cfg 6 | https://github.com/pypa/wheel/raw/0acd203cd896afec7f715aa2ff5980a403459a3b/setup.cfg 7 | https://github.com/python/importlib_metadata/raw/2f05392ca980952a6960d82b2f2d2ea10aa53239/setup.cfg 8 | https://github.com/jaraco/skeleton/raw/d9008b5c510cd6969127a6a2ab6f832edddef296/setup.cfg 9 | https://github.com/jaraco/zipp/raw/700d3a96390e970b6b962823bfea78b4f7e1c537/setup.cfg 10 | https://github.com/pallets/jinja/raw/7d72eb7fefb7dce065193967f31f805180508448/setup.cfg 11 | https://github.com/tkem/cachetools/raw/2fd87a94b8d3861d80e9e4236cd480bfdd21c90d/setup.cfg 12 | https://github.com/aio-libs/aiohttp/raw/5e0e6b7080f2408d5f1dd544c0e1cf88378b7b10/setup.cfg 13 | https://github.com/pallets/flask/raw/9486b6cf57bd6a8a261f67091aca8ca78eeec1e3/setup.cfg 14 | https://github.com/pallets/click/raw/6411f425fae545f42795665af4162006b36c5e4a/setup.cfg 15 | https://github.com/sqlalchemy/sqlalchemy/raw/533f5718904b620be8d63f2474229945d6f8ba5d/setup.cfg 16 | https://github.com/pytest-dev/pluggy/raw/461ef63291d13589c4e21aa182cd1529257e9a0a/setup.cfg 17 | https://github.com/pytest-dev/pytest/raw/c7be96dae487edbd2f55b561b31b68afac1dabe6/setup.cfg 18 | https://github.com/tqdm/tqdm/raw/fc69d5dcf578f7c7986fa76841a6b793f813df35/setup.cfg 19 | https://github.com/platformdirs/platformdirs/raw/7b7852128dd6f07511b618d6edea35046bd0c6ff/setup.cfg 20 | https://github.com/pandas-dev/pandas/raw/bc17343f934a33dc231c8c74be95d8365537c376/setup.cfg 21 | https://github.com/django/django/raw/4e249d11a6e56ca8feb4b055b681cec457ef3a3d/setup.cfg 22 | https://github.com/pyscaffold/pyscaffold/raw/de7aa5dc059fbd04307419c667cc4961bc9df4b8/setup.cfg 23 | https://github.com/pypa/virtualenv/raw/f92eda6e3da26a4d28c2663ffb85c4960bdb990c/setup.cfg 24 | -------------------------------------------------------------------------------- /setuptools/tests/indexes/test_links_priority/external.html: -------------------------------------------------------------------------------- 1 | 2 | bad old link 3 | 4 | -------------------------------------------------------------------------------- /setuptools/tests/indexes/test_links_priority/simple/foobar/index.html: -------------------------------------------------------------------------------- 1 | 2 | foobar-0.1.tar.gz
3 | external homepage
4 | 5 | -------------------------------------------------------------------------------- /setuptools/tests/integration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Python-Repository-Hub/setuptools/1ef36f2d336e239bd8f83507cb9447e060b6ed60/setuptools/tests/integration/__init__.py -------------------------------------------------------------------------------- /setuptools/tests/mod_with_constant.py: -------------------------------------------------------------------------------- 1 | value = 'three, sir!' 2 | -------------------------------------------------------------------------------- /setuptools/tests/script-with-bom.py: -------------------------------------------------------------------------------- 1 | result = 'passed' 2 | -------------------------------------------------------------------------------- /setuptools/tests/test_archive_util.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | import tarfile 4 | import io 5 | 6 | import pytest 7 | 8 | from setuptools import archive_util 9 | 10 | 11 | @pytest.fixture 12 | def tarfile_with_unicode(tmpdir): 13 | """ 14 | Create a tarfile containing only a file whose name is 15 | a zero byte file called testimäge.png. 16 | """ 17 | tarobj = io.BytesIO() 18 | 19 | with tarfile.open(fileobj=tarobj, mode="w:gz") as tgz: 20 | data = b"" 21 | 22 | filename = "testimäge.png" 23 | 24 | t = tarfile.TarInfo(filename) 25 | t.size = len(data) 26 | 27 | tgz.addfile(t, io.BytesIO(data)) 28 | 29 | target = tmpdir / 'unicode-pkg-1.0.tar.gz' 30 | with open(str(target), mode='wb') as tf: 31 | tf.write(tarobj.getvalue()) 32 | return str(target) 33 | 34 | 35 | @pytest.mark.xfail(reason="#710 and #712") 36 | def test_unicode_files(tarfile_with_unicode, tmpdir): 37 | target = tmpdir / 'out' 38 | archive_util.unpack_archive(tarfile_with_unicode, str(target)) 39 | -------------------------------------------------------------------------------- /setuptools/tests/test_bdist_deprecations.py: -------------------------------------------------------------------------------- 1 | """develop tests 2 | """ 3 | import sys 4 | from unittest import mock 5 | 6 | import pytest 7 | 8 | from setuptools.dist import Distribution 9 | from setuptools import SetuptoolsDeprecationWarning 10 | 11 | 12 | @pytest.mark.skipif(sys.platform == 'win32', reason='non-Windows only') 13 | @mock.patch('distutils.command.bdist_rpm.bdist_rpm') 14 | def test_bdist_rpm_warning(distutils_cmd, tmpdir_cwd): 15 | dist = Distribution( 16 | dict( 17 | script_name='setup.py', 18 | script_args=['bdist_rpm'], 19 | name='foo', 20 | py_modules=['hi'], 21 | ) 22 | ) 23 | dist.parse_command_line() 24 | with pytest.warns(SetuptoolsDeprecationWarning): 25 | dist.run_commands() 26 | 27 | distutils_cmd.run.assert_called_once() 28 | -------------------------------------------------------------------------------- /setuptools/tests/test_bdist_egg.py: -------------------------------------------------------------------------------- 1 | """develop tests 2 | """ 3 | import os 4 | import re 5 | import zipfile 6 | 7 | import pytest 8 | 9 | from setuptools.dist import Distribution 10 | 11 | from . import contexts 12 | 13 | SETUP_PY = """\ 14 | from setuptools import setup 15 | 16 | setup(py_modules=['hi']) 17 | """ 18 | 19 | 20 | @pytest.fixture(scope='function') 21 | def setup_context(tmpdir): 22 | with (tmpdir / 'setup.py').open('w') as f: 23 | f.write(SETUP_PY) 24 | with (tmpdir / 'hi.py').open('w') as f: 25 | f.write('1\n') 26 | with tmpdir.as_cwd(): 27 | yield tmpdir 28 | 29 | 30 | class Test: 31 | def test_bdist_egg(self, setup_context, user_override): 32 | dist = Distribution( 33 | dict( 34 | script_name='setup.py', 35 | script_args=['bdist_egg'], 36 | name='foo', 37 | py_modules=['hi'], 38 | ) 39 | ) 40 | os.makedirs(os.path.join('build', 'src')) 41 | with contexts.quiet(): 42 | dist.parse_command_line() 43 | dist.run_commands() 44 | 45 | # let's see if we got our egg link at the right place 46 | [content] = os.listdir('dist') 47 | assert re.match(r'foo-0.0.0-py[23].\d+.egg$', content) 48 | 49 | @pytest.mark.xfail( 50 | os.environ.get('PYTHONDONTWRITEBYTECODE'), 51 | reason="Byte code disabled", 52 | ) 53 | def test_exclude_source_files(self, setup_context, user_override): 54 | dist = Distribution( 55 | dict( 56 | script_name='setup.py', 57 | script_args=['bdist_egg', '--exclude-source-files'], 58 | py_modules=['hi'], 59 | ) 60 | ) 61 | with contexts.quiet(): 62 | dist.parse_command_line() 63 | dist.run_commands() 64 | [dist_name] = os.listdir('dist') 65 | dist_filename = os.path.join('dist', dist_name) 66 | zip = zipfile.ZipFile(dist_filename) 67 | names = list(zi.filename for zi in zip.filelist) 68 | assert 'hi.pyc' in names 69 | assert 'hi.py' not in names 70 | -------------------------------------------------------------------------------- /setuptools/tests/test_build.py: -------------------------------------------------------------------------------- 1 | from contextlib import contextmanager 2 | from setuptools import Command, SetuptoolsDeprecationWarning 3 | from setuptools.dist import Distribution 4 | from setuptools.command.build import build 5 | from distutils.command.build import build as distutils_build 6 | 7 | import pytest 8 | 9 | 10 | def test_distribution_gives_setuptools_build_obj(tmpdir_cwd): 11 | """ 12 | Check that the setuptools Distribution uses the 13 | setuptools specific build object. 14 | """ 15 | 16 | dist = Distribution( 17 | dict( 18 | script_name='setup.py', 19 | script_args=['build'], 20 | packages=[], 21 | package_data={'': ['path/*']}, 22 | ) 23 | ) 24 | assert isinstance(dist.get_command_obj("build"), build) 25 | 26 | 27 | @contextmanager 28 | def _restore_sub_commands(): 29 | orig = distutils_build.sub_commands[:] 30 | try: 31 | yield 32 | finally: 33 | distutils_build.sub_commands = orig 34 | 35 | 36 | class Subcommand(Command): 37 | """Dummy command to be used in tests""" 38 | 39 | def initialize_options(self): 40 | pass 41 | 42 | def finalize_options(self): 43 | pass 44 | 45 | def run(self): 46 | raise NotImplementedError("just to check if the command runs") 47 | 48 | 49 | @_restore_sub_commands() 50 | def test_subcommand_in_distutils(tmpdir_cwd): 51 | """ 52 | Ensure that sub commands registered in ``distutils`` run, 53 | after instructing the users to migrate to ``setuptools``. 54 | """ 55 | dist = Distribution( 56 | dict( 57 | packages=[], 58 | cmdclass={'subcommand': Subcommand}, 59 | ) 60 | ) 61 | distutils_build.sub_commands.append(('subcommand', None)) 62 | 63 | warning_msg = "please use .setuptools.command.build." 64 | with pytest.warns(SetuptoolsDeprecationWarning, match=warning_msg): 65 | # For backward compatibility, the subcommand should run anyway: 66 | with pytest.raises(NotImplementedError, match="the command runs"): 67 | dist.run_command("build") 68 | -------------------------------------------------------------------------------- /setuptools/tests/test_dep_util.py: -------------------------------------------------------------------------------- 1 | from setuptools.dep_util import newer_pairwise_group 2 | import os 3 | import pytest 4 | 5 | 6 | @pytest.fixture 7 | def groups_target(tmpdir): 8 | """Sets up some older sources, a target and newer sources. 9 | Returns a 3-tuple in this order. 10 | """ 11 | creation_order = ['older.c', 'older.h', 'target.o', 'newer.c', 'newer.h'] 12 | mtime = 0 13 | 14 | for i in range(len(creation_order)): 15 | creation_order[i] = os.path.join(str(tmpdir), creation_order[i]) 16 | with open(creation_order[i], 'w'): 17 | pass 18 | 19 | # make sure modification times are sequential 20 | os.utime(creation_order[i], (mtime, mtime)) 21 | mtime += 1 22 | 23 | return creation_order[:2], creation_order[2], creation_order[3:] 24 | 25 | 26 | def test_newer_pairwise_group(groups_target): 27 | older = newer_pairwise_group([groups_target[0]], [groups_target[1]]) 28 | newer = newer_pairwise_group([groups_target[2]], [groups_target[1]]) 29 | assert older == ([], []) 30 | assert newer == ([groups_target[2]], [groups_target[1]]) 31 | -------------------------------------------------------------------------------- /setuptools/tests/test_depends.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from setuptools import depends 4 | 5 | 6 | class TestGetModuleConstant: 7 | def test_basic(self): 8 | """ 9 | Invoke get_module_constant on a module in 10 | the test package. 11 | """ 12 | mod_name = 'setuptools.tests.mod_with_constant' 13 | val = depends.get_module_constant(mod_name, 'value') 14 | assert val == 'three, sir!' 15 | assert 'setuptools.tests.mod_with_constant' not in sys.modules 16 | -------------------------------------------------------------------------------- /setuptools/tests/test_extern.py: -------------------------------------------------------------------------------- 1 | import importlib 2 | import pickle 3 | 4 | from setuptools import Distribution 5 | from setuptools.extern import ordered_set 6 | 7 | 8 | def test_reimport_extern(): 9 | ordered_set2 = importlib.import_module(ordered_set.__name__) 10 | assert ordered_set is ordered_set2 11 | 12 | 13 | def test_orderedset_pickle_roundtrip(): 14 | o1 = ordered_set.OrderedSet([1, 2, 5]) 15 | o2 = pickle.loads(pickle.dumps(o1)) 16 | assert o1 == o2 17 | 18 | 19 | def test_distribution_picklable(): 20 | pickle.loads(pickle.dumps(Distribution())) 21 | -------------------------------------------------------------------------------- /setuptools/tests/test_glob.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from jaraco import path 3 | 4 | from setuptools.glob import glob 5 | 6 | 7 | @pytest.mark.parametrize( 8 | 'tree, pattern, matches', 9 | ( 10 | ('', b'', []), 11 | ('', '', []), 12 | ( 13 | ''' 14 | appveyor.yml 15 | CHANGES.rst 16 | LICENSE 17 | MANIFEST.in 18 | pyproject.toml 19 | README.rst 20 | setup.cfg 21 | setup.py 22 | ''', 23 | '*.rst', 24 | ('CHANGES.rst', 'README.rst'), 25 | ), 26 | ( 27 | ''' 28 | appveyor.yml 29 | CHANGES.rst 30 | LICENSE 31 | MANIFEST.in 32 | pyproject.toml 33 | README.rst 34 | setup.cfg 35 | setup.py 36 | ''', 37 | b'*.rst', 38 | (b'CHANGES.rst', b'README.rst'), 39 | ), 40 | ), 41 | ) 42 | def test_glob(monkeypatch, tmpdir, tree, pattern, matches): 43 | monkeypatch.chdir(tmpdir) 44 | path.build({name: '' for name in tree.split()}) 45 | assert list(sorted(glob(pattern))) == list(sorted(matches)) 46 | -------------------------------------------------------------------------------- /setuptools/tests/test_logging.py: -------------------------------------------------------------------------------- 1 | import inspect 2 | import logging 3 | import os 4 | 5 | import pytest 6 | 7 | 8 | setup_py = """\ 9 | from setuptools import setup 10 | 11 | setup( 12 | name="test_logging", 13 | version="0.0" 14 | ) 15 | """ 16 | 17 | 18 | @pytest.mark.parametrize( 19 | "flag, expected_level", [("--dry-run", "INFO"), ("--verbose", "DEBUG")] 20 | ) 21 | def test_verbosity_level(tmp_path, monkeypatch, flag, expected_level): 22 | """Make sure the correct verbosity level is set (issue #3038)""" 23 | import setuptools # noqa: F401 # import setuptools to monkeypatch distutils 24 | import distutils # <- load distutils after all the patches take place 25 | 26 | logger = logging.Logger(__name__) 27 | monkeypatch.setattr(logging, "root", logger) 28 | unset_log_level = logger.getEffectiveLevel() 29 | assert logging.getLevelName(unset_log_level) == "NOTSET" 30 | 31 | setup_script = tmp_path / "setup.py" 32 | setup_script.write_text(setup_py) 33 | dist = distutils.core.run_setup(setup_script, stop_after="init") 34 | dist.script_args = [flag, "sdist"] 35 | dist.parse_command_line() # <- where the log level is set 36 | log_level = logger.getEffectiveLevel() 37 | log_level_name = logging.getLevelName(log_level) 38 | assert log_level_name == expected_level 39 | 40 | 41 | def test_patching_does_not_cause_problems(): 42 | # Ensure `dist.log` is only patched if necessary 43 | 44 | import setuptools.logging 45 | from distutils import dist 46 | 47 | setuptools.logging.configure() 48 | 49 | if os.getenv("SETUPTOOLS_USE_DISTUTILS", "local").lower() == "local": 50 | # Modern logging infra, no problematic patching. 51 | assert isinstance(dist.log, logging.Logger) 52 | else: 53 | assert inspect.ismodule(dist.log) 54 | -------------------------------------------------------------------------------- /setuptools/tests/test_register.py: -------------------------------------------------------------------------------- 1 | from setuptools.command.register import register 2 | from setuptools.dist import Distribution 3 | from setuptools.errors import RemovedCommandError 4 | 5 | from unittest import mock 6 | 7 | import pytest 8 | 9 | 10 | class TestRegister: 11 | def test_register_exception(self): 12 | """Ensure that the register command has been properly removed.""" 13 | dist = Distribution() 14 | dist.dist_files = [(mock.Mock(), mock.Mock(), mock.Mock())] 15 | 16 | cmd = register(dist) 17 | 18 | with pytest.raises(RemovedCommandError): 19 | cmd.run() 20 | -------------------------------------------------------------------------------- /setuptools/tests/test_setopt.py: -------------------------------------------------------------------------------- 1 | import io 2 | import configparser 3 | 4 | from setuptools.command import setopt 5 | 6 | 7 | class TestEdit: 8 | @staticmethod 9 | def parse_config(filename): 10 | parser = configparser.ConfigParser() 11 | with io.open(filename, encoding='utf-8') as reader: 12 | parser.read_file(reader) 13 | return parser 14 | 15 | @staticmethod 16 | def write_text(file, content): 17 | with io.open(file, 'wb') as strm: 18 | strm.write(content.encode('utf-8')) 19 | 20 | def test_utf8_encoding_retained(self, tmpdir): 21 | """ 22 | When editing a file, non-ASCII characters encoded in 23 | UTF-8 should be retained. 24 | """ 25 | config = tmpdir.join('setup.cfg') 26 | self.write_text(str(config), '[names]\njaraco=джарако') 27 | setopt.edit_config(str(config), dict(names=dict(other='yes'))) 28 | parser = self.parse_config(str(config)) 29 | assert parser.get('names', 'jaraco') == 'джарако' 30 | assert parser.get('names', 'other') == 'yes' 31 | 32 | def test_case_retained(self, tmpdir): 33 | """ 34 | When editing a file, case of keys should be retained. 35 | """ 36 | config = tmpdir.join('setup.cfg') 37 | self.write_text(str(config), '[names]\nFoO=bAr') 38 | setopt.edit_config(str(config), dict(names=dict(oTher='yes'))) 39 | actual = config.read_text(encoding='ascii') 40 | assert 'FoO' in actual 41 | assert 'oTher' in actual 42 | -------------------------------------------------------------------------------- /setuptools/tests/test_test.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from jaraco import path 3 | 4 | from setuptools.command.test import test 5 | from setuptools.dist import Distribution 6 | 7 | from .textwrap import DALS 8 | 9 | 10 | @pytest.mark.usefixtures('tmpdir_cwd') 11 | def test_tests_are_run_once(capfd): 12 | params = dict( 13 | packages=['dummy'], 14 | ) 15 | files = { 16 | 'setup.py': 'from setuptools import setup; setup(' 17 | + ','.join(f'{name}={params[name]!r}' for name in params) 18 | + ')', 19 | 'dummy': { 20 | '__init__.py': '', 21 | 'test_dummy.py': DALS( 22 | """ 23 | import unittest 24 | class TestTest(unittest.TestCase): 25 | def test_test(self): 26 | print('Foo') 27 | """ 28 | ), 29 | }, 30 | } 31 | path.build(files) 32 | dist = Distribution(params) 33 | dist.script_name = 'setup.py' 34 | cmd = test(dist) 35 | cmd.ensure_finalized() 36 | cmd.run() 37 | out, err = capfd.readouterr() 38 | assert out.endswith('Foo\n') 39 | assert len(out.split('Foo')) == 2 40 | -------------------------------------------------------------------------------- /setuptools/tests/test_unicode_utils.py: -------------------------------------------------------------------------------- 1 | from setuptools import unicode_utils 2 | 3 | 4 | def test_filesys_decode_fs_encoding_is_None(monkeypatch): 5 | """ 6 | Test filesys_decode does not raise TypeError when 7 | getfilesystemencoding returns None. 8 | """ 9 | monkeypatch.setattr('sys.getfilesystemencoding', lambda: None) 10 | unicode_utils.filesys_decode(b'test') 11 | -------------------------------------------------------------------------------- /setuptools/tests/test_upload.py: -------------------------------------------------------------------------------- 1 | from setuptools.command.upload import upload 2 | from setuptools.dist import Distribution 3 | from setuptools.errors import RemovedCommandError 4 | 5 | from unittest import mock 6 | 7 | import pytest 8 | 9 | 10 | class TestUpload: 11 | def test_upload_exception(self): 12 | """Ensure that the register command has been properly removed.""" 13 | dist = Distribution() 14 | dist.dist_files = [(mock.Mock(), mock.Mock(), mock.Mock())] 15 | 16 | cmd = upload(dist) 17 | 18 | with pytest.raises(RemovedCommandError): 19 | cmd.run() 20 | -------------------------------------------------------------------------------- /setuptools/tests/text.py: -------------------------------------------------------------------------------- 1 | class Filenames: 2 | unicode = 'smörbröd.py' 3 | latin_1 = unicode.encode('latin-1') 4 | utf_8 = unicode.encode('utf-8') 5 | -------------------------------------------------------------------------------- /setuptools/tests/textwrap.py: -------------------------------------------------------------------------------- 1 | import textwrap 2 | 3 | 4 | def DALS(s): 5 | "dedent and left-strip" 6 | return textwrap.dedent(s).lstrip() 7 | -------------------------------------------------------------------------------- /setuptools/unicode_utils.py: -------------------------------------------------------------------------------- 1 | import unicodedata 2 | import sys 3 | 4 | 5 | # HFS Plus uses decomposed UTF-8 6 | def decompose(path): 7 | if isinstance(path, str): 8 | return unicodedata.normalize('NFD', path) 9 | try: 10 | path = path.decode('utf-8') 11 | path = unicodedata.normalize('NFD', path) 12 | path = path.encode('utf-8') 13 | except UnicodeError: 14 | pass # Not UTF-8 15 | return path 16 | 17 | 18 | def filesys_decode(path): 19 | """ 20 | Ensure that the given path is decoded, 21 | NONE when no expected encoding works 22 | """ 23 | 24 | if isinstance(path, str): 25 | return path 26 | 27 | fs_enc = sys.getfilesystemencoding() or 'utf-8' 28 | candidates = fs_enc, 'utf-8' 29 | 30 | for enc in candidates: 31 | try: 32 | return path.decode(enc) 33 | except UnicodeDecodeError: 34 | continue 35 | 36 | 37 | def try_encode(string, enc): 38 | "turn unicode encoding into a functional routine" 39 | try: 40 | return string.encode(enc) 41 | except UnicodeEncodeError: 42 | return None 43 | -------------------------------------------------------------------------------- /setuptools/version.py: -------------------------------------------------------------------------------- 1 | from ._importlib import metadata 2 | 3 | try: 4 | __version__ = metadata.version('setuptools') or '0.dev0+unknown' 5 | except Exception: 6 | __version__ = '0.dev0+unknown' 7 | -------------------------------------------------------------------------------- /setuptools/windows_support.py: -------------------------------------------------------------------------------- 1 | import platform 2 | 3 | 4 | def windows_only(func): 5 | if platform.system() != 'Windows': 6 | return lambda *args, **kwargs: None 7 | return func 8 | 9 | 10 | @windows_only 11 | def hide_file(path): 12 | """ 13 | Set the hidden attribute on a file or directory. 14 | 15 | From http://stackoverflow.com/questions/19622133/ 16 | 17 | `path` must be text. 18 | """ 19 | import ctypes 20 | 21 | __import__('ctypes.wintypes') 22 | SetFileAttributes = ctypes.windll.kernel32.SetFileAttributesW 23 | SetFileAttributes.argtypes = ctypes.wintypes.LPWSTR, ctypes.wintypes.DWORD 24 | SetFileAttributes.restype = ctypes.wintypes.BOOL 25 | 26 | FILE_ATTRIBUTE_HIDDEN = 0x02 27 | 28 | ret = SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN) 29 | if not ret: 30 | raise ctypes.WinError() 31 | -------------------------------------------------------------------------------- /tools/finalize.py: -------------------------------------------------------------------------------- 1 | """ 2 | Finalize the repo for a release. Invokes towncrier and bumpversion. 3 | """ 4 | 5 | __requires__ = ['bump2version', 'towncrier', 'jaraco.develop>=7.21'] 6 | 7 | 8 | import subprocess 9 | import pathlib 10 | import re 11 | import sys 12 | 13 | from jaraco.develop import towncrier 14 | 15 | 16 | bump_version_command = [ 17 | sys.executable, 18 | '-m', 19 | 'bumpversion', 20 | towncrier.release_kind(), 21 | ] 22 | 23 | 24 | def get_version(): 25 | cmd = bump_version_command + ['--dry-run', '--verbose'] 26 | out = subprocess.check_output(cmd, text=True) 27 | return re.search('^new_version=(.*)', out, re.MULTILINE).group(1) 28 | 29 | 30 | def update_changelog(): 31 | towncrier.run('build', '--yes') 32 | _repair_changelog() 33 | 34 | 35 | def _repair_changelog(): 36 | """ 37 | Workaround for #2666 38 | """ 39 | changelog_fn = pathlib.Path('NEWS.rst') 40 | changelog = changelog_fn.read_text(encoding='utf-8') 41 | fixed = re.sub(r'^(v[0-9.]+)v[0-9.]+$', r'\1', changelog, flags=re.M) 42 | changelog_fn.write_text(fixed, encoding='utf-8') 43 | subprocess.check_output(['git', 'add', changelog_fn]) 44 | 45 | 46 | def bump_version(): 47 | cmd = bump_version_command + ['--allow-dirty'] 48 | subprocess.check_call(cmd) 49 | 50 | 51 | def ensure_config(): 52 | """ 53 | Double-check that Git has an e-mail configured. 54 | """ 55 | subprocess.check_output(['git', 'config', 'user.email']) 56 | 57 | 58 | if __name__ == '__main__': 59 | print("Cutting release at", get_version()) 60 | ensure_config() 61 | towncrier.check_changes() 62 | update_changelog() 63 | bump_version() 64 | -------------------------------------------------------------------------------- /tools/generate_validation_code.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import sys 3 | 4 | from pathlib import Path 5 | 6 | 7 | def generate_pyproject_validation(dest: Path): 8 | """ 9 | Generates validation code for ``pyproject.toml`` based on JSON schemas and the 10 | ``validate-pyproject`` library. 11 | """ 12 | cmd = [ 13 | sys.executable, 14 | "-m", 15 | "validate_pyproject.vendoring", 16 | f"--output-dir={dest}", 17 | "--enable-plugins", 18 | "setuptools", 19 | "distutils", 20 | "--very-verbose", 21 | ] 22 | subprocess.check_call(cmd) 23 | print(f"Validation code generated at: {dest}") 24 | 25 | 26 | def main(): 27 | generate_pyproject_validation(Path("setuptools/config/_validate_pyproject")) 28 | 29 | 30 | __name__ == '__main__' and main() 31 | -------------------------------------------------------------------------------- /tools/ppc64le-patch.py: -------------------------------------------------------------------------------- 1 | """ 2 | Except on bionic, Travis Linux base image for PPC64LE 3 | platform lacks the proper 4 | permissions to the directory ~/.cache/pip/wheels that allow 5 | the user running travis build to install pip packages. 6 | TODO: is someone tracking this issue? Maybe just move to bionic? 7 | """ 8 | 9 | import subprocess 10 | import collections 11 | import os 12 | 13 | 14 | def patch(): 15 | env = collections.defaultdict(str, os.environ) 16 | if env['TRAVIS_CPU_ARCH'] != 'ppc64le': 17 | return 18 | cmd = [ 19 | 'sudo', 20 | 'chown', 21 | '-Rfv', 22 | '{USER}:{GROUP}'.format_map(env), 23 | os.path.expanduser('~/.cache/pip/wheels'), 24 | ] 25 | subprocess.Popen(cmd) 26 | 27 | 28 | __name__ == '__main__' and patch() 29 | -------------------------------------------------------------------------------- /towncrier.toml: -------------------------------------------------------------------------------- 1 | [tool.towncrier] 2 | title_format = "{version}" 3 | # workaround for sphinx-contrib/sphinxcontrib-towncrier#83 4 | directory = "newsfragments" 5 | --------------------------------------------------------------------------------