cli-ih 0.6.3__py3-none-any.whl → 0.6.3.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cli_ih/asyncClient.py +13 -7
- cli_ih/client.py +13 -6
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/METADATA +1 -1
- cli_ih-0.6.3.1.dist-info/RECORD +425 -0
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/WHEEL +1 -1
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/top_level.txt +1 -0
- venv/Lib/site-packages/__editable___cli_ih_0_6_3_1_finder.py +85 -0
- venv/Lib/site-packages/pip/__init__.py +13 -0
- venv/Lib/site-packages/pip/__main__.py +24 -0
- venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
- venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
- venv/Lib/site-packages/pip/_internal/build_env.py +349 -0
- venv/Lib/site-packages/pip/_internal/cache.py +291 -0
- venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
- venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
- venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
- venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1138 -0
- venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
- venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
- venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
- venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
- venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
- venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
- venv/Lib/site-packages/pip/_internal/cli/req_command.py +351 -0
- venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
- venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
- venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
- venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
- venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
- venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
- venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
- venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
- venv/Lib/site-packages/pip/_internal/commands/download.py +145 -0
- venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
- venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
- venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
- venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
- venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
- venv/Lib/site-packages/pip/_internal/commands/install.py +798 -0
- venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
- venv/Lib/site-packages/pip/_internal/commands/lock.py +170 -0
- venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
- venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
- venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
- venv/Lib/site-packages/pip/_internal/commands/wheel.py +181 -0
- venv/Lib/site-packages/pip/_internal/configuration.py +397 -0
- venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
- venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
- venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
- venv/Lib/site-packages/pip/_internal/distributions/sdist.py +165 -0
- venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
- venv/Lib/site-packages/pip/_internal/exceptions.py +881 -0
- venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
- venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
- venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
- venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
- venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
- venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
- venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
- venv/Lib/site-packages/pip/_internal/main.py +12 -0
- venv/Lib/site-packages/pip/_internal/metadata/__init__.py +164 -0
- venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
- venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +223 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
- venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
- venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
- venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
- venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
- venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
- venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
- venv/Lib/site-packages/pip/_internal/models/link.py +613 -0
- venv/Lib/site-packages/pip/_internal/models/pylock.py +188 -0
- venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
- venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
- venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +53 -0
- venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
- venv/Lib/site-packages/pip/_internal/models/wheel.py +141 -0
- venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
- venv/Lib/site-packages/pip/_internal/network/cache.py +133 -0
- venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
- venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +213 -0
- venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
- venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
- venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
- venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +73 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +119 -0
- venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
- venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
- venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +48 -0
- venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
- venv/Lib/site-packages/pip/_internal/operations/prepare.py +742 -0
- venv/Lib/site-packages/pip/_internal/pyproject.py +182 -0
- venv/Lib/site-packages/pip/_internal/req/__init__.py +105 -0
- venv/Lib/site-packages/pip/_internal/req/constructors.py +562 -0
- venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
- venv/Lib/site-packages/pip/_internal/req/req_file.py +620 -0
- venv/Lib/site-packages/pip/_internal/req/req_install.py +937 -0
- venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
- venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
- venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +582 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +814 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +276 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +85 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +336 -0
- venv/Lib/site-packages/pip/_internal/self_outdated_check.py +254 -0
- venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
- venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
- venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
- venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
- venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
- venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
- venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
- venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
- venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
- venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
- venv/Lib/site-packages/pip/_internal/utils/filesystem.py +152 -0
- venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
- venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
- venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
- venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
- venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
- venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
- venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
- venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +149 -0
- venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
- venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
- venv/Lib/site-packages/pip/_internal/utils/unpacking.py +337 -0
- venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
- venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
- venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
- venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
- venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
- venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
- venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
- venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
- venv/Lib/site-packages/pip/_internal/wheel_builder.py +334 -0
- venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
- venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
- venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
- venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
- venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
- venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
- venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
- venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
- venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
- venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
- venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
- venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
- venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
- venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
- venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
- venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
- venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
- venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
- venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
- venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
- venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
- venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
- venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
- venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
- venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
- venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
- venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +144 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +21 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
- venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
- venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
- venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
- venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
- venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
- venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
- venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
- venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
- venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
- venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
- venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
- venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
- venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
- venv/Lib/site-packages/pip/_vendor/requests/adapters.py +719 -0
- venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
- venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
- venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
- venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
- venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
- venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
- venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
- venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
- venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
- venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
- venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
- venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
- venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
- venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +622 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
- venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
- venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
- venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
- venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
- venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
- venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
- venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
- venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
- venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
- venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
- venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
- venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
- venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
- venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
- venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
- venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
- venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
- venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
- venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
- venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
- venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
- venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
- venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
- venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
- venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
- venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
- venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
- venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
- venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
- venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
- venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
- venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
- venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
- venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
- venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
- venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
- venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
- venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
- venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
- venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
- venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
- venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
- venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
- venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
- venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
- venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
- venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
- venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
- venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
- venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
- venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
- venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
- venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
- venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
- venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
- venv/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
- venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
- venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
- venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
- venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
- venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
- venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
- venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
- venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
- venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +770 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_re.py +112 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
- venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_api.py +333 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +66 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
- venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
- venv/Lib/site-packages/pip/py.typed +4 -0
- cli_ih-0.6.3.dist-info/RECORD +0 -8
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2015 Eric Larson
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import functools
|
|
7
|
+
import types
|
|
8
|
+
import weakref
|
|
9
|
+
import zlib
|
|
10
|
+
from typing import TYPE_CHECKING, Any, Collection, Mapping
|
|
11
|
+
|
|
12
|
+
from pip._vendor.requests.adapters import HTTPAdapter
|
|
13
|
+
|
|
14
|
+
from pip._vendor.cachecontrol.cache import DictCache
|
|
15
|
+
from pip._vendor.cachecontrol.controller import PERMANENT_REDIRECT_STATUSES, CacheController
|
|
16
|
+
from pip._vendor.cachecontrol.filewrapper import CallbackFileWrapper
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from pip._vendor.requests import PreparedRequest, Response
|
|
20
|
+
from pip._vendor.urllib3 import HTTPResponse
|
|
21
|
+
|
|
22
|
+
from pip._vendor.cachecontrol.cache import BaseCache
|
|
23
|
+
from pip._vendor.cachecontrol.heuristics import BaseHeuristic
|
|
24
|
+
from pip._vendor.cachecontrol.serialize import Serializer
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CacheControlAdapter(HTTPAdapter):
|
|
28
|
+
invalidating_methods = {"PUT", "PATCH", "DELETE"}
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
cache: BaseCache | None = None,
|
|
33
|
+
cache_etags: bool = True,
|
|
34
|
+
controller_class: type[CacheController] | None = None,
|
|
35
|
+
serializer: Serializer | None = None,
|
|
36
|
+
heuristic: BaseHeuristic | None = None,
|
|
37
|
+
cacheable_methods: Collection[str] | None = None,
|
|
38
|
+
*args: Any,
|
|
39
|
+
**kw: Any,
|
|
40
|
+
) -> None:
|
|
41
|
+
super().__init__(*args, **kw)
|
|
42
|
+
self.cache = DictCache() if cache is None else cache
|
|
43
|
+
self.heuristic = heuristic
|
|
44
|
+
self.cacheable_methods = cacheable_methods or ("GET",)
|
|
45
|
+
|
|
46
|
+
controller_factory = controller_class or CacheController
|
|
47
|
+
self.controller = controller_factory(
|
|
48
|
+
self.cache, cache_etags=cache_etags, serializer=serializer
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
def send(
|
|
52
|
+
self,
|
|
53
|
+
request: PreparedRequest,
|
|
54
|
+
stream: bool = False,
|
|
55
|
+
timeout: None | float | tuple[float, float] | tuple[float, None] = None,
|
|
56
|
+
verify: bool | str = True,
|
|
57
|
+
cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None,
|
|
58
|
+
proxies: Mapping[str, str] | None = None,
|
|
59
|
+
cacheable_methods: Collection[str] | None = None,
|
|
60
|
+
) -> Response:
|
|
61
|
+
"""
|
|
62
|
+
Send a request. Use the request information to see if it
|
|
63
|
+
exists in the cache and cache the response if we need to and can.
|
|
64
|
+
"""
|
|
65
|
+
cacheable = cacheable_methods or self.cacheable_methods
|
|
66
|
+
if request.method in cacheable:
|
|
67
|
+
try:
|
|
68
|
+
cached_response = self.controller.cached_request(request)
|
|
69
|
+
except zlib.error:
|
|
70
|
+
cached_response = None
|
|
71
|
+
if cached_response:
|
|
72
|
+
return self.build_response(request, cached_response, from_cache=True)
|
|
73
|
+
|
|
74
|
+
# check for etags and add headers if appropriate
|
|
75
|
+
request.headers.update(self.controller.conditional_headers(request))
|
|
76
|
+
|
|
77
|
+
resp = super().send(request, stream, timeout, verify, cert, proxies)
|
|
78
|
+
|
|
79
|
+
return resp
|
|
80
|
+
|
|
81
|
+
def build_response( # type: ignore[override]
|
|
82
|
+
self,
|
|
83
|
+
request: PreparedRequest,
|
|
84
|
+
response: HTTPResponse,
|
|
85
|
+
from_cache: bool = False,
|
|
86
|
+
cacheable_methods: Collection[str] | None = None,
|
|
87
|
+
) -> Response:
|
|
88
|
+
"""
|
|
89
|
+
Build a response by making a request or using the cache.
|
|
90
|
+
|
|
91
|
+
This will end up calling send and returning a potentially
|
|
92
|
+
cached response
|
|
93
|
+
"""
|
|
94
|
+
cacheable = cacheable_methods or self.cacheable_methods
|
|
95
|
+
if not from_cache and request.method in cacheable:
|
|
96
|
+
# Check for any heuristics that might update headers
|
|
97
|
+
# before trying to cache.
|
|
98
|
+
if self.heuristic:
|
|
99
|
+
response = self.heuristic.apply(response)
|
|
100
|
+
|
|
101
|
+
# apply any expiration heuristics
|
|
102
|
+
if response.status == 304:
|
|
103
|
+
# We must have sent an ETag request. This could mean
|
|
104
|
+
# that we've been expired already or that we simply
|
|
105
|
+
# have an etag. In either case, we want to try and
|
|
106
|
+
# update the cache if that is the case.
|
|
107
|
+
cached_response = self.controller.update_cached_response(
|
|
108
|
+
request, response
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if cached_response is not response:
|
|
112
|
+
from_cache = True
|
|
113
|
+
|
|
114
|
+
# We are done with the server response, read a
|
|
115
|
+
# possible response body (compliant servers will
|
|
116
|
+
# not return one, but we cannot be 100% sure) and
|
|
117
|
+
# release the connection back to the pool.
|
|
118
|
+
response.read(decode_content=False)
|
|
119
|
+
response.release_conn()
|
|
120
|
+
|
|
121
|
+
response = cached_response
|
|
122
|
+
|
|
123
|
+
# We always cache the 301 responses
|
|
124
|
+
elif int(response.status) in PERMANENT_REDIRECT_STATUSES:
|
|
125
|
+
self.controller.cache_response(request, response)
|
|
126
|
+
else:
|
|
127
|
+
# Wrap the response file with a wrapper that will cache the
|
|
128
|
+
# response when the stream has been consumed.
|
|
129
|
+
response._fp = CallbackFileWrapper( # type: ignore[assignment]
|
|
130
|
+
response._fp, # type: ignore[arg-type]
|
|
131
|
+
functools.partial(
|
|
132
|
+
self.controller.cache_response, request, weakref.ref(response)
|
|
133
|
+
),
|
|
134
|
+
)
|
|
135
|
+
if response.chunked:
|
|
136
|
+
super_update_chunk_length = response.__class__._update_chunk_length
|
|
137
|
+
|
|
138
|
+
def _update_chunk_length(
|
|
139
|
+
weak_self: weakref.ReferenceType[HTTPResponse],
|
|
140
|
+
) -> None:
|
|
141
|
+
self = weak_self()
|
|
142
|
+
if self is None:
|
|
143
|
+
return
|
|
144
|
+
|
|
145
|
+
super_update_chunk_length(self)
|
|
146
|
+
if self.chunk_left == 0:
|
|
147
|
+
self._fp._close() # type: ignore[union-attr]
|
|
148
|
+
|
|
149
|
+
response._update_chunk_length = functools.partial( # type: ignore[method-assign]
|
|
150
|
+
_update_chunk_length, weakref.ref(response)
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
resp: Response = super().build_response(request, response)
|
|
154
|
+
|
|
155
|
+
# See if we should invalidate the cache.
|
|
156
|
+
if request.method in self.invalidating_methods and resp.ok:
|
|
157
|
+
assert request.url is not None
|
|
158
|
+
cache_url = self.controller.cache_url(request.url)
|
|
159
|
+
self.cache.delete(cache_url)
|
|
160
|
+
|
|
161
|
+
# Give the request a from_cache attr to let people use it
|
|
162
|
+
resp.from_cache = from_cache # type: ignore[attr-defined]
|
|
163
|
+
|
|
164
|
+
return resp
|
|
165
|
+
|
|
166
|
+
def close(self) -> None:
|
|
167
|
+
self.cache.close()
|
|
168
|
+
super().close() # type: ignore[no-untyped-call]
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2015 Eric Larson
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
The cache object API for implementing caches. The default is a thread
|
|
7
|
+
safe in-memory dictionary.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from threading import Lock
|
|
13
|
+
from typing import IO, TYPE_CHECKING, MutableMapping
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BaseCache:
|
|
20
|
+
def get(self, key: str) -> bytes | None:
|
|
21
|
+
raise NotImplementedError()
|
|
22
|
+
|
|
23
|
+
def set(
|
|
24
|
+
self, key: str, value: bytes, expires: int | datetime | None = None
|
|
25
|
+
) -> None:
|
|
26
|
+
raise NotImplementedError()
|
|
27
|
+
|
|
28
|
+
def delete(self, key: str) -> None:
|
|
29
|
+
raise NotImplementedError()
|
|
30
|
+
|
|
31
|
+
def close(self) -> None:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class DictCache(BaseCache):
|
|
36
|
+
def __init__(self, init_dict: MutableMapping[str, bytes] | None = None) -> None:
|
|
37
|
+
self.lock = Lock()
|
|
38
|
+
self.data = init_dict or {}
|
|
39
|
+
|
|
40
|
+
def get(self, key: str) -> bytes | None:
|
|
41
|
+
return self.data.get(key, None)
|
|
42
|
+
|
|
43
|
+
def set(
|
|
44
|
+
self, key: str, value: bytes, expires: int | datetime | None = None
|
|
45
|
+
) -> None:
|
|
46
|
+
with self.lock:
|
|
47
|
+
self.data.update({key: value})
|
|
48
|
+
|
|
49
|
+
def delete(self, key: str) -> None:
|
|
50
|
+
with self.lock:
|
|
51
|
+
if key in self.data:
|
|
52
|
+
self.data.pop(key)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class SeparateBodyBaseCache(BaseCache):
|
|
56
|
+
"""
|
|
57
|
+
In this variant, the body is not stored mixed in with the metadata, but is
|
|
58
|
+
passed in (as a bytes-like object) in a separate call to ``set_body()``.
|
|
59
|
+
|
|
60
|
+
That is, the expected interaction pattern is::
|
|
61
|
+
|
|
62
|
+
cache.set(key, serialized_metadata)
|
|
63
|
+
cache.set_body(key)
|
|
64
|
+
|
|
65
|
+
Similarly, the body should be loaded separately via ``get_body()``.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
def set_body(self, key: str, body: bytes) -> None:
|
|
69
|
+
raise NotImplementedError()
|
|
70
|
+
|
|
71
|
+
def get_body(self, key: str) -> IO[bytes] | None:
|
|
72
|
+
"""
|
|
73
|
+
Return the body as file-like object.
|
|
74
|
+
"""
|
|
75
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2015 Eric Larson
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from pip._vendor.cachecontrol.caches.file_cache import FileCache, SeparateBodyFileCache
|
|
6
|
+
from pip._vendor.cachecontrol.caches.redis_cache import RedisCache
|
|
7
|
+
|
|
8
|
+
__all__ = ["FileCache", "SeparateBodyFileCache", "RedisCache"]
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2015 Eric Larson
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import hashlib
|
|
7
|
+
import os
|
|
8
|
+
import tempfile
|
|
9
|
+
from textwrap import dedent
|
|
10
|
+
from typing import IO, TYPE_CHECKING
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache
|
|
14
|
+
from pip._vendor.cachecontrol.controller import CacheController
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from datetime import datetime
|
|
18
|
+
|
|
19
|
+
from filelock import BaseFileLock
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class _FileCacheMixin:
|
|
23
|
+
"""Shared implementation for both FileCache variants."""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
directory: str | Path,
|
|
28
|
+
forever: bool = False,
|
|
29
|
+
filemode: int = 0o0600,
|
|
30
|
+
dirmode: int = 0o0700,
|
|
31
|
+
lock_class: type[BaseFileLock] | None = None,
|
|
32
|
+
) -> None:
|
|
33
|
+
try:
|
|
34
|
+
if lock_class is None:
|
|
35
|
+
from filelock import FileLock
|
|
36
|
+
|
|
37
|
+
lock_class = FileLock
|
|
38
|
+
except ImportError:
|
|
39
|
+
notice = dedent(
|
|
40
|
+
"""
|
|
41
|
+
NOTE: In order to use the FileCache you must have
|
|
42
|
+
filelock installed. You can install it via pip:
|
|
43
|
+
pip install cachecontrol[filecache]
|
|
44
|
+
"""
|
|
45
|
+
)
|
|
46
|
+
raise ImportError(notice)
|
|
47
|
+
|
|
48
|
+
self.directory = directory
|
|
49
|
+
self.forever = forever
|
|
50
|
+
self.filemode = filemode
|
|
51
|
+
self.dirmode = dirmode
|
|
52
|
+
self.lock_class = lock_class
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def encode(x: str) -> str:
|
|
56
|
+
return hashlib.sha224(x.encode()).hexdigest()
|
|
57
|
+
|
|
58
|
+
def _fn(self, name: str) -> str:
|
|
59
|
+
# NOTE: This method should not change as some may depend on it.
|
|
60
|
+
# See: https://github.com/ionrock/cachecontrol/issues/63
|
|
61
|
+
hashed = self.encode(name)
|
|
62
|
+
parts = list(hashed[:5]) + [hashed]
|
|
63
|
+
return os.path.join(self.directory, *parts)
|
|
64
|
+
|
|
65
|
+
def get(self, key: str) -> bytes | None:
|
|
66
|
+
name = self._fn(key)
|
|
67
|
+
try:
|
|
68
|
+
with open(name, "rb") as fh:
|
|
69
|
+
return fh.read()
|
|
70
|
+
|
|
71
|
+
except FileNotFoundError:
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
def set(
|
|
75
|
+
self, key: str, value: bytes, expires: int | datetime | None = None
|
|
76
|
+
) -> None:
|
|
77
|
+
name = self._fn(key)
|
|
78
|
+
self._write(name, value)
|
|
79
|
+
|
|
80
|
+
def _write(self, path: str, data: bytes) -> None:
|
|
81
|
+
"""
|
|
82
|
+
Safely write the data to the given path.
|
|
83
|
+
"""
|
|
84
|
+
# Make sure the directory exists
|
|
85
|
+
dirname = os.path.dirname(path)
|
|
86
|
+
os.makedirs(dirname, self.dirmode, exist_ok=True)
|
|
87
|
+
|
|
88
|
+
with self.lock_class(path + ".lock"):
|
|
89
|
+
# Write our actual file
|
|
90
|
+
(fd, name) = tempfile.mkstemp(dir=dirname)
|
|
91
|
+
try:
|
|
92
|
+
os.write(fd, data)
|
|
93
|
+
finally:
|
|
94
|
+
os.close(fd)
|
|
95
|
+
os.chmod(name, self.filemode)
|
|
96
|
+
os.replace(name, path)
|
|
97
|
+
|
|
98
|
+
def _delete(self, key: str, suffix: str) -> None:
|
|
99
|
+
name = self._fn(key) + suffix
|
|
100
|
+
if not self.forever:
|
|
101
|
+
try:
|
|
102
|
+
os.remove(name)
|
|
103
|
+
except FileNotFoundError:
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class FileCache(_FileCacheMixin, BaseCache):
|
|
108
|
+
"""
|
|
109
|
+
Traditional FileCache: body is stored in memory, so not suitable for large
|
|
110
|
+
downloads.
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
def delete(self, key: str) -> None:
|
|
114
|
+
self._delete(key, "")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache):
|
|
118
|
+
"""
|
|
119
|
+
Memory-efficient FileCache: body is stored in a separate file, reducing
|
|
120
|
+
peak memory usage.
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
def get_body(self, key: str) -> IO[bytes] | None:
|
|
124
|
+
name = self._fn(key) + ".body"
|
|
125
|
+
try:
|
|
126
|
+
return open(name, "rb")
|
|
127
|
+
except FileNotFoundError:
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
def set_body(self, key: str, body: bytes) -> None:
|
|
131
|
+
name = self._fn(key) + ".body"
|
|
132
|
+
self._write(name, body)
|
|
133
|
+
|
|
134
|
+
def delete(self, key: str) -> None:
|
|
135
|
+
self._delete(key, "")
|
|
136
|
+
self._delete(key, ".body")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def url_to_file_path(url: str, filecache: FileCache) -> str:
|
|
140
|
+
"""Return the file cache path based on the URL.
|
|
141
|
+
|
|
142
|
+
This does not ensure the file exists!
|
|
143
|
+
"""
|
|
144
|
+
key = CacheController.cache_url(url)
|
|
145
|
+
return filecache._fn(key)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2015 Eric Larson
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
from datetime import datetime, timezone
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from pip._vendor.cachecontrol.cache import BaseCache
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from redis import Redis
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RedisCache(BaseCache):
|
|
17
|
+
def __init__(self, conn: Redis[bytes]) -> None:
|
|
18
|
+
self.conn = conn
|
|
19
|
+
|
|
20
|
+
def get(self, key: str) -> bytes | None:
|
|
21
|
+
return self.conn.get(key)
|
|
22
|
+
|
|
23
|
+
def set(
|
|
24
|
+
self, key: str, value: bytes, expires: int | datetime | None = None
|
|
25
|
+
) -> None:
|
|
26
|
+
if not expires:
|
|
27
|
+
self.conn.set(key, value)
|
|
28
|
+
elif isinstance(expires, datetime):
|
|
29
|
+
now_utc = datetime.now(timezone.utc)
|
|
30
|
+
if expires.tzinfo is None:
|
|
31
|
+
now_utc = now_utc.replace(tzinfo=None)
|
|
32
|
+
delta = expires - now_utc
|
|
33
|
+
self.conn.setex(key, int(delta.total_seconds()), value)
|
|
34
|
+
else:
|
|
35
|
+
self.conn.setex(key, expires, value)
|
|
36
|
+
|
|
37
|
+
def delete(self, key: str) -> None:
|
|
38
|
+
self.conn.delete(key)
|
|
39
|
+
|
|
40
|
+
def clear(self) -> None:
|
|
41
|
+
"""Helper for clearing all the keys in a database. Use with
|
|
42
|
+
caution!"""
|
|
43
|
+
for key in self.conn.keys():
|
|
44
|
+
self.conn.delete(key)
|
|
45
|
+
|
|
46
|
+
def close(self) -> None:
|
|
47
|
+
"""Redis uses connection pooling, no need to close the connection."""
|
|
48
|
+
pass
|