├── .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 |
--------------------------------------------------------------------------------