From 64cc22cddd5a02de302e89092ff2ff60b3e7d8ef Mon Sep 17 00:00:00 2001 From: KYUNGMO TAK Date: Fri, 8 May 2026 15:08:04 +0900 Subject: [PATCH] First commit --- .gitignore | 7 + .../__editable__.custom_lib-1.0.3.pth | 1 + .../__editable___custom_lib_1_0_3_finder.py | 85 + ...e___custom_lib_1_0_3_finder.cpython-39.pyc | Bin 0 -> 3435 bytes .../site-packages/_distutils_hack/__init__.py | 128 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 5116 bytes .../__pycache__/override.cpython-39.pyc | Bin 0 -> 247 bytes .../site-packages/_distutils_hack/override.py | 1 + .../beautifulsoup4-4.11.2.dist-info/AUTHORS | 49 + .../beautifulsoup4-4.11.2.dist-info/INSTALLER | 1 + .../beautifulsoup4-4.11.2.dist-info/LICENSE | 31 + .../beautifulsoup4-4.11.2.dist-info/METADATA | 117 + .../beautifulsoup4-4.11.2.dist-info/RECORD | 55 + .../beautifulsoup4-4.11.2.dist-info/WHEEL | 5 + .../top_level.txt | 3 + .venv/Lib/site-packages/bs4/__init__.py | 813 ++ .../bs4/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 24207 bytes .../bs4/__pycache__/dammit.cpython-39.pyc | Bin 0 -> 25510 bytes .../bs4/__pycache__/diagnose.cpython-39.pyc | Bin 0 -> 8590 bytes .../bs4/__pycache__/element.cpython-39.pyc | Bin 0 -> 67291 bytes .../bs4/__pycache__/formatter.cpython-39.pyc | Bin 0 -> 6828 bytes .../Lib/site-packages/bs4/builder/__init__.py | 631 ++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 19099 bytes .../__pycache__/_html5lib.cpython-39.pyc | Bin 0 -> 12649 bytes .../__pycache__/_htmlparser.cpython-39.pyc | Bin 0 -> 9562 bytes .../builder/__pycache__/_lxml.cpython-39.pyc | Bin 0 -> 10149 bytes .../site-packages/bs4/builder/_html5lib.py | 479 + .../site-packages/bs4/builder/_htmlparser.py | 364 + .venv/Lib/site-packages/bs4/builder/_lxml.py | 386 + .venv/Lib/site-packages/bs4/dammit.py | 1095 +++ .venv/Lib/site-packages/bs4/diagnose.py | 248 + .venv/Lib/site-packages/bs4/element.py | 2310 +++++ .venv/Lib/site-packages/bs4/formatter.py | 185 + .venv/Lib/site-packages/bs4/tests/__init__.py | 1203 +++ .../tests/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 46690 bytes .../__pycache__/test_builder.cpython-39.pyc | Bin 0 -> 1213 bytes .../test_builder_registry.cpython-39.pyc | Bin 0 -> 4918 bytes .../__pycache__/test_dammit.cpython-39.pyc | Bin 0 -> 12658 bytes .../__pycache__/test_docs.cpython-39.pyc | Bin 0 -> 452 bytes .../__pycache__/test_element.cpython-39.pyc | Bin 0 -> 2755 bytes .../__pycache__/test_formatter.cpython-39.pyc | Bin 0 -> 3201 bytes .../__pycache__/test_html5lib.cpython-39.pyc | Bin 0 -> 8035 bytes .../test_htmlparser.cpython-39.pyc | Bin 0 -> 4463 bytes .../__pycache__/test_lxml.cpython-39.pyc | Bin 0 -> 5546 bytes .../test_navigablestring.cpython-39.pyc | Bin 0 -> 4929 bytes .../test_pageelement.cpython-39.pyc | Bin 0 -> 31129 bytes .../__pycache__/test_soup.cpython-39.pyc | Bin 0 -> 18141 bytes .../tests/__pycache__/test_tag.cpython-39.pyc | Bin 0 -> 8665 bytes .../__pycache__/test_tree.cpython-39.pyc | Bin 0 -> 51033 bytes .../site-packages/bs4/tests/test_builder.py | 29 + .../bs4/tests/test_builder_registry.py | 137 + .../site-packages/bs4/tests/test_dammit.py | 370 + .../Lib/site-packages/bs4/tests/test_docs.py | 38 + .../site-packages/bs4/tests/test_element.py | 74 + .../site-packages/bs4/tests/test_formatter.py | 113 + .../site-packages/bs4/tests/test_html5lib.py | 224 + .../bs4/tests/test_htmlparser.py | 124 + .../Lib/site-packages/bs4/tests/test_lxml.py | 201 + .../bs4/tests/test_navigablestring.py | 144 + .../bs4/tests/test_pageelement.py | 756 ++ .../Lib/site-packages/bs4/tests/test_soup.py | 462 + .venv/Lib/site-packages/bs4/tests/test_tag.py | 221 + .../Lib/site-packages/bs4/tests/test_tree.py | 1304 +++ .../certifi-2026.4.22.dist-info/INSTALLER | 1 + .../certifi-2026.4.22.dist-info/METADATA | 78 + .../certifi-2026.4.22.dist-info/RECORD | 14 + .../certifi-2026.4.22.dist-info/WHEEL | 5 + .../licenses/LICENSE | 20 + .../certifi-2026.4.22.dist-info/top_level.txt | 1 + .venv/Lib/site-packages/certifi/__init__.py | 4 + .venv/Lib/site-packages/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 293 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 429 bytes .../certifi/__pycache__/core.cpython-39.pyc | Bin 0 -> 1402 bytes .venv/Lib/site-packages/certifi/cacert.pem | 3933 ++++++++ .venv/Lib/site-packages/certifi/core.py | 83 + .venv/Lib/site-packages/certifi/py.typed | 0 .../INSTALLER | 1 + .../LICENSE | 21 + .../METADATA | 269 + .../RECORD | 33 + .../charset_normalizer-2.0.12.dist-info/WHEEL | 5 + .../entry_points.txt | 3 + .../top_level.txt | 1 + .../charset_normalizer/__init__.py | 56 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1727 bytes .../__pycache__/api.cpython-39.pyc | Bin 0 -> 11259 bytes .../__pycache__/cd.cpython-39.pyc | Bin 0 -> 8847 bytes .../__pycache__/constant.cpython-39.pyc | Bin 0 -> 13778 bytes .../__pycache__/legacy.cpython-39.pyc | Bin 0 -> 3041 bytes .../__pycache__/md.cpython-39.pyc | Bin 0 -> 14735 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 13174 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 8005 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 276 bytes .../site-packages/charset_normalizer/api.py | 608 ++ .../charset_normalizer/assets/__init__.py | 1244 +++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 7360 bytes .../site-packages/charset_normalizer/cd.py | 340 + .../charset_normalizer/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 195 bytes .../cli/__pycache__/normalizer.cpython-39.pyc | Bin 0 -> 6137 bytes .../charset_normalizer/cli/normalizer.py | 290 + .../charset_normalizer/constant.py | 503 + .../charset_normalizer/legacy.py | 95 + .../site-packages/charset_normalizer/md.py | 559 ++ .../charset_normalizer/models.py | 392 + .../site-packages/charset_normalizer/py.typed | 0 .../site-packages/charset_normalizer/utils.py | 342 + .../charset_normalizer/version.py | 6 + .../custom_lib-1.0.3.dist-info/INSTALLER | 1 + .../custom_lib-1.0.3.dist-info/METADATA | 20 + .../custom_lib-1.0.3.dist-info/RECORD | 10 + .../custom_lib-1.0.3.dist-info/REQUESTED | 0 .../custom_lib-1.0.3.dist-info/WHEEL | 5 + .../direct_url.json | 1 + .../custom_lib-1.0.3.dist-info/top_level.txt | 1 + .../site-packages/distutils-precedence.pth | 1 + .../idna-3.13.dist-info/INSTALLER | 1 + .../idna-3.13.dist-info/METADATA | 204 + .../site-packages/idna-3.13.dist-info/RECORD | 22 + .../site-packages/idna-3.13.dist-info/WHEEL | 4 + .../idna-3.13.dist-info/licenses/LICENSE.md | 31 + .venv/Lib/site-packages/idna/__init__.py | 45 + .../idna/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 841 bytes .../idna/__pycache__/codec.cpython-39.pyc | Bin 0 -> 3304 bytes .../idna/__pycache__/compat.cpython-39.pyc | Bin 0 -> 763 bytes .../idna/__pycache__/core.cpython-39.pyc | Bin 0 -> 10025 bytes .../idna/__pycache__/idnadata.cpython-39.pyc | Bin 0 -> 43466 bytes .../idna/__pycache__/intranges.cpython-39.pyc | Bin 0 -> 1986 bytes .../__pycache__/package_data.cpython-39.pyc | Bin 0 -> 201 bytes .../idna/__pycache__/uts46data.cpython-39.pyc | Bin 0 -> 143981 bytes .venv/Lib/site-packages/idna/codec.py | 122 + .venv/Lib/site-packages/idna/compat.py | 15 + .venv/Lib/site-packages/idna/core.py | 440 + .venv/Lib/site-packages/idna/idnadata.py | 4367 +++++++++ .venv/Lib/site-packages/idna/intranges.py | 57 + .venv/Lib/site-packages/idna/package_data.py | 1 + .venv/Lib/site-packages/idna/py.typed | 0 .venv/Lib/site-packages/idna/uts46data.py | 8384 ++++++++++++++++ .../pip-22.0.4.dist-info/INSTALLER | 1 + .../pip-22.0.4.dist-info/LICENSE.txt | 20 + .../pip-22.0.4.dist-info/METADATA | 92 + .../site-packages/pip-22.0.4.dist-info/RECORD | 1053 ++ .../pip-22.0.4.dist-info/REQUESTED | 0 .../site-packages/pip-22.0.4.dist-info/WHEEL | 5 + .../pip-22.0.4.dist-info/entry_points.txt | 5 + .../pip-22.0.4.dist-info/top_level.txt | 1 + .venv/Lib/site-packages/pip/__init__.py | 13 + .venv/Lib/site-packages/pip/__main__.py | 31 + .../pip/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 640 bytes .../pip/__pycache__/__main__.cpython-39.pyc | Bin 0 -> 596 bytes .../site-packages/pip/_internal/__init__.py | 19 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 761 bytes .../__pycache__/build_env.cpython-39.pyc | Bin 0 -> 9514 bytes .../__pycache__/cache.cpython-39.pyc | Bin 0 -> 8318 bytes .../__pycache__/configuration.cpython-39.pyc | Bin 0 -> 11166 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 23363 bytes .../_internal/__pycache__/main.cpython-39.pyc | Bin 0 -> 626 bytes .../__pycache__/pyproject.cpython-39.pyc | Bin 0 -> 3551 bytes .../self_outdated_check.cpython-39.pyc | Bin 0 -> 4591 bytes .../__pycache__/wheel_builder.cpython-39.pyc | Bin 0 -> 9170 bytes .../site-packages/pip/_internal/build_env.py | 296 + .../Lib/site-packages/pip/_internal/cache.py | 264 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 281 bytes .../__pycache__/autocompletion.cpython-39.pyc | Bin 0 -> 5264 bytes .../__pycache__/base_command.cpython-39.pyc | Bin 0 -> 6383 bytes .../cli/__pycache__/cmdoptions.cpython-39.pyc | Bin 0 -> 22707 bytes .../command_context.cpython-39.pyc | Bin 0 -> 1296 bytes .../cli/__pycache__/main.cpython-39.pyc | Bin 0 -> 1371 bytes .../__pycache__/main_parser.cpython-39.pyc | Bin 0 -> 2168 bytes .../cli/__pycache__/parser.cpython-39.pyc | Bin 0 -> 9952 bytes .../__pycache__/progress_bars.cpython-39.pyc | Bin 0 -> 9241 bytes .../__pycache__/req_command.cpython-39.pyc | Bin 0 -> 13450 bytes .../cli/__pycache__/spinners.cpython-39.pyc | Bin 0 -> 4951 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 0 -> 360 bytes .../pip/_internal/cli/autocompletion.py | 171 + .../pip/_internal/cli/base_command.py | 223 + .../pip/_internal/cli/cmdoptions.py | 1018 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 70 + .../pip/_internal/cli/main_parser.py | 87 + .../site-packages/pip/_internal/cli/parser.py | 292 + .../pip/_internal/cli/progress_bars.py | 321 + .../pip/_internal/cli/req_command.py | 506 + .../pip/_internal/cli/spinners.py | 157 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 127 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3058 bytes .../commands/__pycache__/cache.cpython-39.pyc | Bin 0 -> 6185 bytes .../commands/__pycache__/check.cpython-39.pyc | Bin 0 -> 1574 bytes .../__pycache__/completion.cpython-39.pyc | Bin 0 -> 3147 bytes .../__pycache__/configuration.cpython-39.pyc | Bin 0 -> 8328 bytes .../commands/__pycache__/debug.cpython-39.pyc | Bin 0 -> 6663 bytes .../__pycache__/download.cpython-39.pyc | Bin 0 -> 3991 bytes .../__pycache__/freeze.cpython-39.pyc | Bin 0 -> 2644 bytes .../commands/__pycache__/hash.cpython-39.pyc | Bin 0 -> 2140 bytes .../commands/__pycache__/help.cpython-39.pyc | Bin 0 -> 1312 bytes .../commands/__pycache__/index.cpython-39.pyc | Bin 0 -> 4602 bytes .../__pycache__/install.cpython-39.pyc | Bin 0 -> 17703 bytes .../commands/__pycache__/list.cpython-39.pyc | Bin 0 -> 10162 bytes .../__pycache__/search.cpython-39.pyc | Bin 0 -> 5330 bytes .../commands/__pycache__/show.cpython-39.pyc | Bin 0 -> 6100 bytes .../__pycache__/uninstall.cpython-39.pyc | Bin 0 -> 3108 bytes .../commands/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 4858 bytes .../pip/_internal/commands/cache.py | 223 + .../pip/_internal/commands/check.py | 53 + .../pip/_internal/commands/completion.py | 96 + .../pip/_internal/commands/configuration.py | 266 + .../pip/_internal/commands/debug.py | 202 + .../pip/_internal/commands/download.py | 140 + .../pip/_internal/commands/freeze.py | 97 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/install.py | 771 ++ .../pip/_internal/commands/list.py | 361 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 178 + .../pip/_internal/commands/uninstall.py | 105 + .../pip/_internal/commands/wheel.py | 178 + .../pip/_internal/configuration.py | 366 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 804 bytes .../__pycache__/base.cpython-39.pyc | Bin 0 -> 1879 bytes .../__pycache__/installed.cpython-39.pyc | Bin 0 -> 1237 bytes .../__pycache__/sdist.cpython-39.pyc | Bin 0 -> 4560 bytes .../__pycache__/wheel.cpython-39.pyc | Bin 0 -> 1604 bytes .../pip/_internal/distributions/base.py | 36 + .../pip/_internal/distributions/installed.py | 20 + .../pip/_internal/distributions/sdist.py | 127 + .../pip/_internal/distributions/wheel.py | 31 + .../site-packages/pip/_internal/exceptions.py | 658 ++ .../pip/_internal/index/__init__.py | 2 + .../index/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 235 bytes .../__pycache__/collector.cpython-39.pyc | Bin 0 -> 18040 bytes .../__pycache__/package_finder.cpython-39.pyc | Bin 0 -> 28090 bytes .../index/__pycache__/sources.cpython-39.pyc | Bin 0 -> 7200 bytes .../pip/_internal/index/collector.py | 610 ++ .../pip/_internal/index/package_finder.py | 1004 ++ .../pip/_internal/index/sources.py | 224 + .../pip/_internal/locations/__init__.py | 520 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 12523 bytes .../__pycache__/_distutils.cpython-39.pyc | Bin 0 -> 4674 bytes .../__pycache__/_sysconfig.cpython-39.pyc | Bin 0 -> 6265 bytes .../locations/__pycache__/base.cpython-39.pyc | Bin 0 -> 1543 bytes .../pip/_internal/locations/_distutils.py | 169 + .../pip/_internal/locations/_sysconfig.py | 219 + .../pip/_internal/locations/base.py | 52 + .venv/Lib/site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 62 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2338 bytes .../metadata/__pycache__/base.cpython-39.pyc | Bin 0 -> 21130 bytes .../__pycache__/pkg_resources.cpython-39.pyc | Bin 0 -> 9936 bytes .../pip/_internal/metadata/base.py | 546 ++ .../pip/_internal/metadata/pkg_resources.py | 256 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 269 bytes .../__pycache__/candidate.cpython-39.pyc | Bin 0 -> 1452 bytes .../__pycache__/direct_url.cpython-39.pyc | Bin 0 -> 7242 bytes .../__pycache__/format_control.cpython-39.pyc | Bin 0 -> 2723 bytes .../models/__pycache__/index.cpython-39.pyc | Bin 0 -> 1239 bytes .../models/__pycache__/link.cpython-39.pyc | Bin 0 -> 10263 bytes .../models/__pycache__/scheme.cpython-39.pyc | Bin 0 -> 1015 bytes .../__pycache__/search_scope.cpython-39.pyc | Bin 0 -> 3484 bytes .../selection_prefs.cpython-39.pyc | Bin 0 -> 1671 bytes .../__pycache__/target_python.cpython-39.pyc | Bin 0 -> 3417 bytes .../models/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 4341 bytes .../pip/_internal/models/candidate.py | 34 + .../pip/_internal/models/direct_url.py | 220 + .../pip/_internal/models/format_control.py | 80 + .../pip/_internal/models/index.py | 28 + .../pip/_internal/models/link.py | 288 + .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 129 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 110 + .../pip/_internal/models/wheel.py | 89 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 257 bytes .../network/__pycache__/auth.cpython-39.pyc | Bin 0 -> 7489 bytes .../network/__pycache__/cache.cpython-39.pyc | Bin 0 -> 2929 bytes .../__pycache__/download.cpython-39.pyc | Bin 0 -> 5521 bytes .../__pycache__/lazy_wheel.cpython-39.pyc | Bin 0 -> 8389 bytes .../__pycache__/session.cpython-39.pyc | Bin 0 -> 10759 bytes .../network/__pycache__/utils.cpython-39.pyc | Bin 0 -> 1435 bytes .../network/__pycache__/xmlrpc.cpython-39.pyc | Bin 0 -> 2056 bytes .../pip/_internal/network/auth.py | 323 + .../pip/_internal/network/cache.py | 69 + .../pip/_internal/network/download.py | 185 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 454 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 60 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 205 bytes .../__pycache__/check.cpython-39.pyc | Bin 0 -> 4009 bytes .../__pycache__/freeze.cpython-39.pyc | Bin 0 -> 6151 bytes .../__pycache__/prepare.cpython-39.pyc | Bin 0 -> 14767 bytes .../_internal/operations/build/__init__.py | 0 .../build/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 211 bytes .../build/__pycache__/metadata.cpython-39.pyc | Bin 0 -> 1422 bytes .../metadata_editable.cpython-39.pyc | Bin 0 -> 1456 bytes .../metadata_legacy.cpython-39.pyc | Bin 0 -> 2332 bytes .../build/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 1206 bytes .../__pycache__/wheel_editable.cpython-39.pyc | Bin 0 -> 1422 bytes .../__pycache__/wheel_legacy.cpython-39.pyc | Bin 0 -> 2729 bytes .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 149 + .../pip/_internal/operations/freeze.py | 254 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 269 bytes .../editable_legacy.cpython-39.pyc | Bin 0 -> 1490 bytes .../install/__pycache__/legacy.cpython-39.pyc | Bin 0 -> 3289 bytes .../install/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 20971 bytes .../operations/install/editable_legacy.py | 47 + .../_internal/operations/install/legacy.py | 120 + .../pip/_internal/operations/install/wheel.py | 738 ++ .../pip/_internal/operations/prepare.py | 642 ++ .../site-packages/pip/_internal/pyproject.py | 168 + .../pip/_internal/req/__init__.py | 94 + .../req/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2564 bytes .../__pycache__/constructors.cpython-39.pyc | Bin 0 -> 12109 bytes .../req/__pycache__/req_file.cpython-39.pyc | Bin 0 -> 13382 bytes .../__pycache__/req_install.cpython-39.pyc | Bin 0 -> 22125 bytes .../req/__pycache__/req_set.cpython-39.pyc | Bin 0 -> 5902 bytes .../__pycache__/req_tracker.cpython-39.pyc | Bin 0 -> 4262 bytes .../__pycache__/req_uninstall.cpython-39.pyc | Bin 0 -> 18843 bytes .../pip/_internal/req/constructors.py | 490 + .../pip/_internal/req/req_file.py | 536 ++ .../pip/_internal/req/req_install.py | 858 ++ .../pip/_internal/req/req_set.py | 189 + .../pip/_internal/req/req_tracker.py | 124 + .../pip/_internal/req/req_uninstall.py | 633 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 205 bytes .../__pycache__/base.cpython-39.pyc | Bin 0 -> 1062 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 212 bytes .../__pycache__/resolver.cpython-39.pyc | Bin 0 -> 12200 bytes .../_internal/resolution/legacy/resolver.py | 467 + .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 216 bytes .../__pycache__/base.cpython-39.pyc | Bin 0 -> 6613 bytes .../__pycache__/candidates.cpython-39.pyc | Bin 0 -> 18536 bytes .../__pycache__/factory.cpython-39.pyc | Bin 0 -> 19104 bytes .../found_candidates.cpython-39.pyc | Bin 0 -> 4847 bytes .../__pycache__/provider.cpython-39.pyc | Bin 0 -> 7642 bytes .../__pycache__/reporter.cpython-39.pyc | Bin 0 -> 3277 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 0 -> 7586 bytes .../__pycache__/resolver.cpython-39.pyc | Bin 0 -> 8185 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 547 ++ .../resolution/resolvelib/factory.py | 739 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 248 + .../resolution/resolvelib/reporter.py | 68 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 298 + .../pip/_internal/self_outdated_check.py | 189 + .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 200 bytes .../utils/__pycache__/_log.cpython-39.pyc | Bin 0 -> 1525 bytes .../utils/__pycache__/appdirs.cpython-39.pyc | Bin 0 -> 1631 bytes .../utils/__pycache__/compat.cpython-39.pyc | Bin 0 -> 1519 bytes .../compatibility_tags.cpython-39.pyc | Bin 0 -> 4071 bytes .../utils/__pycache__/datetime.cpython-39.pyc | Bin 0 -> 519 bytes .../__pycache__/deprecation.cpython-39.pyc | Bin 0 -> 3257 bytes .../direct_url_helpers.cpython-39.pyc | Bin 0 -> 2090 bytes .../__pycache__/distutils_args.cpython-39.pyc | Bin 0 -> 1105 bytes .../utils/__pycache__/egg_link.cpython-39.pyc | Bin 0 -> 2146 bytes .../utils/__pycache__/encoding.cpython-39.pyc | Bin 0 -> 1309 bytes .../__pycache__/entrypoints.cpython-39.pyc | Bin 0 -> 1310 bytes .../__pycache__/filesystem.cpython-39.pyc | Bin 0 -> 5146 bytes .../__pycache__/filetypes.cpython-39.pyc | Bin 0 -> 950 bytes .../utils/__pycache__/glibc.cpython-39.pyc | Bin 0 -> 1681 bytes .../utils/__pycache__/hashes.cpython-39.pyc | Bin 0 -> 5195 bytes .../inject_securetransport.cpython-39.pyc | Bin 0 -> 989 bytes .../utils/__pycache__/logging.cpython-39.pyc | Bin 0 -> 9601 bytes .../utils/__pycache__/misc.cpython-39.pyc | Bin 0 -> 18806 bytes .../utils/__pycache__/models.cpython-39.pyc | Bin 0 -> 2068 bytes .../__pycache__/packaging.cpython-39.pyc | Bin 0 -> 2088 bytes .../setuptools_build.cpython-39.pyc | Bin 0 -> 4576 bytes .../__pycache__/subprocess.cpython-39.pyc | Bin 0 -> 5716 bytes .../utils/__pycache__/temp_dir.cpython-39.pyc | Bin 0 -> 7267 bytes .../__pycache__/unpacking.cpython-39.pyc | Bin 0 -> 6731 bytes .../utils/__pycache__/urls.cpython-39.pyc | Bin 0 -> 1604 bytes .../__pycache__/virtualenv.cpython-39.pyc | Bin 0 -> 3294 bytes .../utils/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 4484 bytes .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/distutils_args.py | 42 + .../pip/_internal/utils/egg_link.py | 75 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 27 + .../pip/_internal/utils/filesystem.py | 182 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 144 + .../_internal/utils/inject_securetransport.py | 35 + .../pip/_internal/utils/logging.py | 343 + .../site-packages/pip/_internal/utils/misc.py | 629 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 195 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 246 + .../pip/_internal/utils/unpacking.py | 258 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 136 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 523 bytes .../vcs/__pycache__/bazaar.cpython-39.pyc | Bin 0 -> 3362 bytes .../vcs/__pycache__/git.cpython-39.pyc | Bin 0 -> 12570 bytes .../vcs/__pycache__/mercurial.cpython-39.pyc | Bin 0 -> 5067 bytes .../vcs/__pycache__/subversion.cpython-39.pyc | Bin 0 -> 8484 bytes .../__pycache__/versioncontrol.cpython-39.pyc | Bin 0 -> 21190 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 101 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 377 + .../Lib/site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2913 bytes .../_vendor/__pycache__/distro.cpython-39.pyc | Bin 0 -> 38375 bytes .../_vendor/__pycache__/six.cpython-39.pyc | Bin 0 -> 27517 bytes .../typing_extensions.cpython-39.pyc | Bin 0 -> 68501 bytes .../pip/_vendor/cachecontrol/__init__.py | 18 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 651 bytes .../__pycache__/_cmd.cpython-39.pyc | Bin 0 -> 1579 bytes .../__pycache__/adapter.cpython-39.pyc | Bin 0 -> 3143 bytes .../__pycache__/cache.cpython-39.pyc | Bin 0 -> 1850 bytes .../__pycache__/compat.cpython-39.pyc | Bin 0 -> 755 bytes .../__pycache__/controller.cpython-39.pyc | Bin 0 -> 8217 bytes .../__pycache__/filewrapper.cpython-39.pyc | Bin 0 -> 2795 bytes .../__pycache__/heuristics.cpython-39.pyc | Bin 0 -> 4712 bytes .../__pycache__/serialize.cpython-39.pyc | Bin 0 -> 4259 bytes .../__pycache__/wrapper.cpython-39.pyc | Bin 0 -> 682 bytes .../pip/_vendor/cachecontrol/_cmd.py | 61 + .../pip/_vendor/cachecontrol/adapter.py | 137 + .../pip/_vendor/cachecontrol/cache.py | 43 + .../_vendor/cachecontrol/caches/__init__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 302 bytes .../__pycache__/file_cache.cpython-39.pyc | Bin 0 -> 3332 bytes .../__pycache__/redis_cache.cpython-39.pyc | Bin 0 -> 1574 bytes .../_vendor/cachecontrol/caches/file_cache.py | 150 + .../cachecontrol/caches/redis_cache.py | 37 + .../pip/_vendor/cachecontrol/compat.py | 32 + .../pip/_vendor/cachecontrol/controller.py | 415 + .../pip/_vendor/cachecontrol/filewrapper.py | 111 + .../pip/_vendor/cachecontrol/heuristics.py | 139 + .../pip/_vendor/cachecontrol/serialize.py | 186 + .../pip/_vendor/cachecontrol/wrapper.py | 33 + .../pip/_vendor/certifi/__init__.py | 3 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 284 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 461 bytes .../certifi/__pycache__/core.cpython-39.pyc | Bin 0 -> 1552 bytes .../pip/_vendor/certifi/cacert.pem | 4362 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 76 + .../pip/_vendor/chardet/__init__.py | 83 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1908 bytes .../__pycache__/big5freq.cpython-39.pyc | Bin 0 -> 27187 bytes .../__pycache__/big5prober.cpython-39.pyc | Bin 0 -> 1142 bytes .../chardistribution.cpython-39.pyc | Bin 0 -> 6228 bytes .../charsetgroupprober.cpython-39.pyc | Bin 0 -> 2269 bytes .../__pycache__/charsetprober.cpython-39.pyc | Bin 0 -> 3491 bytes .../codingstatemachine.cpython-39.pyc | Bin 0 -> 2918 bytes .../chardet/__pycache__/compat.cpython-39.pyc | Bin 0 -> 407 bytes .../__pycache__/cp949prober.cpython-39.pyc | Bin 0 -> 1149 bytes .../chardet/__pycache__/enums.cpython-39.pyc | Bin 0 -> 2656 bytes .../__pycache__/escprober.cpython-39.pyc | Bin 0 -> 2641 bytes .../chardet/__pycache__/escsm.cpython-39.pyc | Bin 0 -> 7090 bytes .../__pycache__/eucjpprober.cpython-39.pyc | Bin 0 -> 2455 bytes .../__pycache__/euckrfreq.cpython-39.pyc | Bin 0 -> 12071 bytes .../__pycache__/euckrprober.cpython-39.pyc | Bin 0 -> 1150 bytes .../__pycache__/euctwfreq.cpython-39.pyc | Bin 0 -> 27191 bytes .../__pycache__/euctwprober.cpython-39.pyc | Bin 0 -> 1150 bytes .../__pycache__/gb2312freq.cpython-39.pyc | Bin 0 -> 19115 bytes .../__pycache__/gb2312prober.cpython-39.pyc | Bin 0 -> 1158 bytes .../__pycache__/hebrewprober.cpython-39.pyc | Bin 0 -> 3027 bytes .../__pycache__/jisfreq.cpython-39.pyc | Bin 0 -> 22143 bytes .../chardet/__pycache__/jpcntx.cpython-39.pyc | Bin 0 -> 37616 bytes .../langbulgarianmodel.cpython-39.pyc | Bin 0 -> 21818 bytes .../__pycache__/langgreekmodel.cpython-39.pyc | Bin 0 -> 20494 bytes .../langhebrewmodel.cpython-39.pyc | Bin 0 -> 20562 bytes .../langhungarianmodel.cpython-39.pyc | Bin 0 -> 21763 bytes .../langrussianmodel.cpython-39.pyc | Bin 0 -> 26366 bytes .../__pycache__/langthaimodel.cpython-39.pyc | Bin 0 -> 20738 bytes .../langturkishmodel.cpython-39.pyc | Bin 0 -> 20578 bytes .../__pycache__/latin1prober.cpython-39.pyc | Bin 0 -> 2963 bytes .../mbcharsetprober.cpython-39.pyc | Bin 0 -> 2270 bytes .../mbcsgroupprober.cpython-39.pyc | Bin 0 -> 1139 bytes .../chardet/__pycache__/mbcssm.cpython-39.pyc | Bin 0 -> 15726 bytes .../sbcharsetprober.cpython-39.pyc | Bin 0 -> 3123 bytes .../sbcsgroupprober.cpython-39.pyc | Bin 0 -> 1708 bytes .../__pycache__/sjisprober.cpython-39.pyc | Bin 0 -> 2491 bytes .../universaldetector.cpython-39.pyc | Bin 0 -> 5839 bytes .../__pycache__/utf8prober.cpython-39.pyc | Bin 0 -> 2000 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 447 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 233 + .../pip/_vendor/chardet/charsetgroupprober.py | 107 + .../pip/_vendor/chardet/charsetprober.py | 145 + .../pip/_vendor/chardet/cli/__init__.py | 1 + .../cli/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 204 bytes .../cli/__pycache__/chardetect.cpython-39.pyc | Bin 0 -> 2698 bytes .../pip/_vendor/chardet/cli/chardetect.py | 84 + .../pip/_vendor/chardet/codingstatemachine.py | 88 + .../pip/_vendor/chardet/compat.py | 36 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 76 + .../pip/_vendor/chardet/escprober.py | 101 + .../pip/_vendor/chardet/escsm.py | 246 + .../pip/_vendor/chardet/eucjpprober.py | 92 + .../pip/_vendor/chardet/euckrfreq.py | 195 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 387 + .../pip/_vendor/chardet/euctwprober.py | 46 + .../pip/_vendor/chardet/gb2312freq.py | 283 + .../pip/_vendor/chardet/gb2312prober.py | 46 + .../pip/_vendor/chardet/hebrewprober.py | 292 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/jpcntx.py | 233 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4650 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4398 +++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4383 +++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4650 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5718 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4383 +++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4383 +++++++++ .../pip/_vendor/chardet/latin1prober.py | 145 + .../pip/_vendor/chardet/mbcharsetprober.py | 91 + .../pip/_vendor/chardet/mbcsgroupprober.py | 54 + .../pip/_vendor/chardet/mbcssm.py | 572 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 209 bytes .../__pycache__/languages.cpython-39.pyc | Bin 0 -> 7940 bytes .../pip/_vendor/chardet/metadata/languages.py | 310 + .../pip/_vendor/chardet/sbcharsetprober.py | 145 + .../pip/_vendor/chardet/sbcsgroupprober.py | 83 + .../pip/_vendor/chardet/sjisprober.py | 92 + .../pip/_vendor/chardet/universaldetector.py | 286 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 452 bytes .../colorama/__pycache__/ansi.cpython-39.pyc | Bin 0 -> 3237 bytes .../__pycache__/ansitowin32.cpython-39.pyc | Bin 0 -> 7703 bytes .../__pycache__/initialise.cpython-39.pyc | Bin 0 -> 1719 bytes .../colorama/__pycache__/win32.cpython-39.pyc | Bin 0 -> 3951 bytes .../__pycache__/winterm.cpython-39.pyc | Bin 0 -> 4673 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 258 + .../pip/_vendor/colorama/initialise.py | 80 + .../pip/_vendor/colorama/win32.py | 152 + .../pip/_vendor/colorama/winterm.py | 169 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1065 bytes .../distlib/__pycache__/compat.cpython-39.pyc | Bin 0 -> 31830 bytes .../__pycache__/database.cpython-39.pyc | Bin 0 -> 42489 bytes .../distlib/__pycache__/index.cpython-39.pyc | Bin 0 -> 17298 bytes .../__pycache__/locators.cpython-39.pyc | Bin 0 -> 38262 bytes .../__pycache__/manifest.cpython-39.pyc | Bin 0 -> 10201 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 4983 bytes .../__pycache__/metadata.cpython-39.pyc | Bin 0 -> 26596 bytes .../__pycache__/resources.cpython-39.pyc | Bin 0 -> 11019 bytes .../__pycache__/scripts.cpython-39.pyc | Bin 0 -> 11251 bytes .../distlib/__pycache__/util.cpython-39.pyc | Bin 0 -> 52614 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 20364 bytes .../distlib/__pycache__/wheel.cpython-39.pyc | Bin 0 -> 27177 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 492 bytes .../_backport/__pycache__/misc.cpython-39.pyc | Bin 0 -> 1112 bytes .../__pycache__/shutil.cpython-39.pyc | Bin 0 -> 21686 bytes .../__pycache__/sysconfig.cpython-39.pyc | Bin 0 -> 15976 bytes .../__pycache__/tarfile.cpython-39.pyc | Bin 0 -> 62740 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 + .../pip/_vendor/distlib/_backport/shutil.py | 764 ++ .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../_vendor/distlib/_backport/sysconfig.py | 786 ++ .../pip/_vendor/distlib/_backport/tarfile.py | 2607 +++++ .../pip/_vendor/distlib/compat.py | 1122 +++ .../pip/_vendor/distlib/database.py | 1339 +++ .../pip/_vendor/distlib/index.py | 509 + .../pip/_vendor/distlib/locators.py | 1300 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 147 + .../pip/_vendor/distlib/metadata.py | 1058 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 429 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 96768 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 180736 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 105984 bytes .../site-packages/pip/_vendor/distlib/util.py | 1969 ++++ .../pip/_vendor/distlib/version.py | 739 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 90112 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 166400 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 99840 bytes .../pip/_vendor/distlib/wheel.py | 1053 ++ .venv/Lib/site-packages/pip/_vendor/distro.py | 1386 +++ .../pip/_vendor/html5lib/__init__.py | 35 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1311 bytes .../__pycache__/_ihatexml.cpython-39.pyc | Bin 0 -> 13780 bytes .../__pycache__/_inputstream.cpython-39.pyc | Bin 0 -> 21639 bytes .../__pycache__/_tokenizer.cpython-39.pyc | Bin 0 -> 39734 bytes .../__pycache__/_utils.cpython-39.pyc | Bin 0 -> 4811 bytes .../__pycache__/constants.cpython-39.pyc | Bin 0 -> 66349 bytes .../__pycache__/html5parser.cpython-39.pyc | Bin 0 -> 91020 bytes .../__pycache__/serializer.cpython-39.pyc | Bin 0 -> 10822 bytes .../pip/_vendor/html5lib/_ihatexml.py | 289 + .../pip/_vendor/html5lib/_inputstream.py | 918 ++ .../pip/_vendor/html5lib/_tokenizer.py | 1735 ++++ .../pip/_vendor/html5lib/_trie/__init__.py | 5 + .../_trie/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 361 bytes .../_trie/__pycache__/_base.cpython-39.pyc | Bin 0 -> 1605 bytes .../_trie/__pycache__/py.cpython-39.pyc | Bin 0 -> 2266 bytes .../pip/_vendor/html5lib/_trie/_base.py | 40 + .../pip/_vendor/html5lib/_trie/py.py | 67 + .../pip/_vendor/html5lib/_utils.py | 159 + .../pip/_vendor/html5lib/constants.py | 2946 ++++++ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 209 bytes .../alphabeticalattributes.cpython-39.pyc | Bin 0 -> 1331 bytes .../filters/__pycache__/base.cpython-39.pyc | Bin 0 -> 879 bytes .../inject_meta_charset.cpython-39.pyc | Bin 0 -> 1885 bytes .../filters/__pycache__/lint.cpython-39.pyc | Bin 0 -> 2627 bytes .../__pycache__/optionaltags.cpython-39.pyc | Bin 0 -> 2772 bytes .../__pycache__/sanitizer.cpython-39.pyc | Bin 0 -> 16895 bytes .../__pycache__/whitespace.cpython-39.pyc | Bin 0 -> 1377 bytes .../filters/alphabeticalattributes.py | 29 + .../pip/_vendor/html5lib/filters/base.py | 12 + .../html5lib/filters/inject_meta_charset.py | 73 + .../pip/_vendor/html5lib/filters/lint.py | 93 + .../_vendor/html5lib/filters/optionaltags.py | 207 + .../pip/_vendor/html5lib/filters/sanitizer.py | 916 ++ .../_vendor/html5lib/filters/whitespace.py | 38 + .../pip/_vendor/html5lib/html5parser.py | 2795 ++++++ .../pip/_vendor/html5lib/serializer.py | 409 + .../_vendor/html5lib/treeadapters/__init__.py | 30 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 946 bytes .../__pycache__/genshi.cpython-39.pyc | Bin 0 -> 1554 bytes .../__pycache__/sax.cpython-39.pyc | Bin 0 -> 1473 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 + .../pip/_vendor/html5lib/treeadapters/sax.py | 50 + .../_vendor/html5lib/treebuilders/__init__.py | 88 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3341 bytes .../__pycache__/base.cpython-39.pyc | Bin 0 -> 11325 bytes .../__pycache__/dom.cpython-39.pyc | Bin 0 -> 9462 bytes .../__pycache__/etree.cpython-39.pyc | Bin 0 -> 11830 bytes .../__pycache__/etree_lxml.cpython-39.pyc | Bin 0 -> 13013 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 + .../pip/_vendor/html5lib/treebuilders/dom.py | 239 + .../_vendor/html5lib/treebuilders/etree.py | 343 + .../html5lib/treebuilders/etree_lxml.py | 392 + .../_vendor/html5lib/treewalkers/__init__.py | 154 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4007 bytes .../__pycache__/base.cpython-39.pyc | Bin 0 -> 7006 bytes .../__pycache__/dom.cpython-39.pyc | Bin 0 -> 1741 bytes .../__pycache__/etree.cpython-39.pyc | Bin 0 -> 3503 bytes .../__pycache__/etree_lxml.cpython-39.pyc | Bin 0 -> 6640 bytes .../__pycache__/genshi.cpython-39.pyc | Bin 0 -> 1897 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 + .../pip/_vendor/html5lib/treewalkers/dom.py | 43 + .../pip/_vendor/html5lib/treewalkers/etree.py | 131 + .../html5lib/treewalkers/etree_lxml.py | 215 + .../_vendor/html5lib/treewalkers/genshi.py | 69 + .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 856 bytes .../idna/__pycache__/codec.cpython-39.pyc | Bin 0 -> 3093 bytes .../idna/__pycache__/compat.cpython-39.pyc | Bin 0 -> 775 bytes .../idna/__pycache__/core.cpython-39.pyc | Bin 0 -> 9771 bytes .../idna/__pycache__/idnadata.cpython-39.pyc | Bin 0 -> 23052 bytes .../idna/__pycache__/intranges.cpython-39.pyc | Bin 0 -> 2006 bytes .../__pycache__/package_data.cpython-39.pyc | Bin 0 -> 220 bytes .../idna/__pycache__/uts46data.cpython-39.pyc | Bin 0 -> 151753 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 397 + .../pip/_vendor/idna/idnadata.py | 2137 +++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8512 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 54 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1423 bytes .../__pycache__/_version.cpython-39.pyc | Bin 0 -> 227 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 1861 bytes .../msgpack/__pycache__/ext.cpython-39.pyc | Bin 0 -> 6289 bytes .../__pycache__/fallback.cpython-39.pyc | Bin 0 -> 25628 bytes .../pip/_vendor/msgpack/_version.py | 1 + .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1012 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-39.pyc | Bin 0 -> 599 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 455 bytes .../__pycache__/_manylinux.cpython-39.pyc | Bin 0 -> 7303 bytes .../__pycache__/_musllinux.cpython-39.pyc | Bin 0 -> 4618 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 0 -> 2812 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 9462 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 0 -> 3983 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 0 -> 21530 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 0 -> 12261 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 3620 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 13161 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pep517/__init__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 322 bytes .../pep517/__pycache__/build.cpython-39.pyc | Bin 0 -> 3570 bytes .../pep517/__pycache__/check.cpython-39.pyc | Bin 0 -> 5117 bytes .../__pycache__/colorlog.cpython-39.pyc | Bin 0 -> 2947 bytes .../pep517/__pycache__/compat.cpython-39.pyc | Bin 0 -> 1538 bytes .../__pycache__/dirtools.cpython-39.pyc | Bin 0 -> 1356 bytes .../__pycache__/envbuild.cpython-39.pyc | Bin 0 -> 4516 bytes .../pep517/__pycache__/meta.cpython-39.pyc | Bin 0 -> 2929 bytes .../__pycache__/wrappers.cpython-39.pyc | Bin 0 -> 12502 bytes .../site-packages/pip/_vendor/pep517/build.py | 127 + .../site-packages/pip/_vendor/pep517/check.py | 207 + .../pip/_vendor/pep517/colorlog.py | 115 + .../pip/_vendor/pep517/compat.py | 51 + .../pip/_vendor/pep517/dirtools.py | 44 + .../pip/_vendor/pep517/envbuild.py | 171 + .../pip/_vendor/pep517/in_process/__init__.py | 17 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 924 bytes .../__pycache__/_in_process.cpython-39.pyc | Bin 0 -> 10278 bytes .../_vendor/pep517/in_process/_in_process.py | 363 + .../site-packages/pip/_vendor/pep517/meta.py | 92 + .../pip/_vendor/pep517/wrappers.py | 375 + .../pip/_vendor/pkg_resources/__init__.py | 3296 +++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 100345 bytes .../__pycache__/py31compat.cpython-39.pyc | Bin 0 -> 659 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 + .../pip/_vendor/platformdirs/__init__.py | 331 + .../pip/_vendor/platformdirs/__main__.py | 46 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 10660 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 1231 bytes .../__pycache__/android.cpython-39.pyc | Bin 0 -> 4380 bytes .../__pycache__/api.cpython-39.pyc | Bin 0 -> 5293 bytes .../__pycache__/macos.cpython-39.pyc | Bin 0 -> 3315 bytes .../__pycache__/unix.cpython-39.pyc | Bin 0 -> 7063 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 304 bytes .../__pycache__/windows.cpython-39.pyc | Bin 0 -> 6459 bytes .../pip/_vendor/platformdirs/android.py | 119 + .../pip/_vendor/platformdirs/api.py | 156 + .../pip/_vendor/platformdirs/macos.py | 64 + .../pip/_vendor/platformdirs/unix.py | 181 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 182 + .../pip/_vendor/progress/__init__.py | 189 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 5691 bytes .../progress/__pycache__/bar.cpython-39.pyc | Bin 0 -> 2736 bytes .../__pycache__/colors.cpython-39.pyc | Bin 0 -> 1509 bytes .../__pycache__/counter.cpython-39.pyc | Bin 0 -> 1634 bytes .../__pycache__/spinner.cpython-39.pyc | Bin 0 -> 1460 bytes .../site-packages/pip/_vendor/progress/bar.py | 93 + .../pip/_vendor/progress/colors.py | 79 + .../pip/_vendor/progress/counter.py | 47 + .../pip/_vendor/progress/spinner.py | 45 + .../pip/_vendor/pygments/__init__.py | 83 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3034 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 595 bytes .../__pycache__/cmdline.cpython-39.pyc | Bin 0 -> 15387 bytes .../__pycache__/console.cpython-39.pyc | Bin 0 -> 1892 bytes .../__pycache__/filter.cpython-39.pyc | Bin 0 -> 2653 bytes .../__pycache__/formatter.cpython-39.pyc | Bin 0 -> 3017 bytes .../pygments/__pycache__/lexer.cpython-39.pyc | Bin 0 -> 24447 bytes .../__pycache__/modeline.cpython-39.pyc | Bin 0 -> 1195 bytes .../__pycache__/plugin.cpython-39.pyc | Bin 0 -> 2115 bytes .../__pycache__/regexopt.cpython-39.pyc | Bin 0 -> 2949 bytes .../__pycache__/scanner.cpython-39.pyc | Bin 0 -> 3562 bytes .../__pycache__/sphinxext.cpython-39.pyc | Bin 0 -> 4567 bytes .../pygments/__pycache__/style.cpython-39.pyc | Bin 0 -> 4504 bytes .../pygments/__pycache__/token.cpython-39.pyc | Bin 0 -> 4366 bytes .../__pycache__/unistring.cpython-39.pyc | Bin 0 -> 31224 bytes .../pygments/__pycache__/util.cpython-39.pyc | Bin 0 -> 9181 bytes .../pip/_vendor/pygments/cmdline.py | 663 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 937 ++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 23402 bytes .../pip/_vendor/pygments/formatter.py | 94 + .../_vendor/pygments/formatters/__init__.py | 153 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4670 bytes .../__pycache__/_mapping.cpython-39.pyc | Bin 0 -> 5426 bytes .../__pycache__/bbcode.cpython-39.pyc | Bin 0 -> 3074 bytes .../__pycache__/groff.cpython-39.pyc | Bin 0 -> 4347 bytes .../__pycache__/html.cpython-39.pyc | Bin 0 -> 29059 bytes .../formatters/__pycache__/img.cpython-39.pyc | Bin 0 -> 17501 bytes .../formatters/__pycache__/irc.cpython-39.pyc | Bin 0 -> 4413 bytes .../__pycache__/latex.cpython-39.pyc | Bin 0 -> 13495 bytes .../__pycache__/other.cpython-39.pyc | Bin 0 -> 4797 bytes .../__pycache__/pangomarkup.cpython-39.pyc | Bin 0 -> 2099 bytes .../formatters/__pycache__/rtf.cpython-39.pyc | Bin 0 -> 4133 bytes .../formatters/__pycache__/svg.cpython-39.pyc | Bin 0 -> 6345 bytes .../__pycache__/terminal.cpython-39.pyc | Bin 0 -> 3914 bytes .../__pycache__/terminal256.cpython-39.pyc | Bin 0 -> 9224 bytes .../_vendor/pygments/formatters/_mapping.py | 84 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 168 + .../pip/_vendor/pygments/formatters/html.py | 983 ++ .../pip/_vendor/pygments/formatters/img.py | 641 ++ .../pip/_vendor/pygments/formatters/irc.py | 179 + .../pip/_vendor/pygments/formatters/latex.py | 511 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 879 ++ .../pip/_vendor/pygments/lexers/__init__.py | 341 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 9147 bytes .../__pycache__/_mapping.cpython-39.pyc | Bin 0 -> 50830 bytes .../lexers/__pycache__/python.cpython-39.pyc | Bin 0 -> 28975 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 580 ++ .../pip/_vendor/pygments/lexers/python.py | 1188 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 69 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 155 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 93 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3015 bytes .../pip/_vendor/pygments/token.py | 212 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 308 + .../pip/_vendor/pyparsing/__init__.py | 328 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 7126 bytes .../__pycache__/actions.cpython-39.pyc | Bin 0 -> 7177 bytes .../__pycache__/common.cpython-39.pyc | Bin 0 -> 10068 bytes .../pyparsing/__pycache__/core.cpython-39.pyc | Bin 0 -> 176678 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 9165 bytes .../__pycache__/helpers.cpython-39.pyc | Bin 0 -> 34713 bytes .../__pycache__/results.cpython-39.pyc | Bin 0 -> 24789 bytes .../__pycache__/testing.cpython-39.pyc | Bin 0 -> 12118 bytes .../__pycache__/unicode.cpython-39.pyc | Bin 0 -> 10259 bytes .../pyparsing/__pycache__/util.cpython-39.pyc | Bin 0 -> 8628 bytes .../pip/_vendor/pyparsing/actions.py | 207 + .../pip/_vendor/pyparsing/common.py | 424 + .../pip/_vendor/pyparsing/core.py | 5789 +++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 593 ++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 15596 bytes .../pip/_vendor/pyparsing/exceptions.py | 267 + .../pip/_vendor/pyparsing/helpers.py | 1069 +++ .../pip/_vendor/pyparsing/results.py | 760 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 332 + .../pip/_vendor/pyparsing/util.py | 235 + .../pip/_vendor/requests/__init__.py | 154 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4037 bytes .../__pycache__/__version__.cpython-39.pyc | Bin 0 -> 564 bytes .../_internal_utils.cpython-39.pyc | Bin 0 -> 1311 bytes .../__pycache__/adapters.cpython-39.pyc | Bin 0 -> 17121 bytes .../requests/__pycache__/api.cpython-39.pyc | Bin 0 -> 6728 bytes .../requests/__pycache__/auth.cpython-39.pyc | Bin 0 -> 8340 bytes .../requests/__pycache__/certs.cpython-39.pyc | Bin 0 -> 642 bytes .../__pycache__/compat.cpython-39.pyc | Bin 0 -> 1677 bytes .../__pycache__/cookies.cpython-39.pyc | Bin 0 -> 18831 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 5667 bytes .../requests/__pycache__/help.cpython-39.pyc | Bin 0 -> 2902 bytes .../requests/__pycache__/hooks.cpython-39.pyc | Bin 0 -> 999 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 24380 bytes .../__pycache__/packages.cpython-39.pyc | Bin 0 -> 511 bytes .../__pycache__/sessions.cpython-39.pyc | Bin 0 -> 19715 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 0 -> 4248 bytes .../__pycache__/structures.cpython-39.pyc | Bin 0 -> 4469 bytes .../requests/__pycache__/utils.cpython-39.pyc | Bin 0 -> 24296 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 42 + .../pip/_vendor/requests/adapters.py | 538 ++ .../site-packages/pip/_vendor/requests/api.py | 159 + .../pip/_vendor/requests/auth.py | 305 + .../pip/_vendor/requests/certs.py | 18 + .../pip/_vendor/requests/compat.py | 77 + .../pip/_vendor/requests/cookies.py | 549 ++ .../pip/_vendor/requests/exceptions.py | 133 + .../pip/_vendor/requests/help.py | 132 + .../pip/_vendor/requests/hooks.py | 34 + .../pip/_vendor/requests/models.py | 973 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 771 ++ .../pip/_vendor/requests/status_codes.py | 123 + .../pip/_vendor/requests/structures.py | 105 + .../pip/_vendor/requests/utils.py | 1060 ++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 615 bytes .../__pycache__/providers.cpython-39.pyc | Bin 0 -> 6714 bytes .../__pycache__/reporters.cpython-39.pyc | Bin 0 -> 2626 bytes .../__pycache__/resolvers.cpython-39.pyc | Bin 0 -> 15317 bytes .../__pycache__/structs.cpython-39.pyc | Bin 0 -> 7288 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 210 bytes .../collections_abc.cpython-39.pyc | Bin 0 -> 384 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 482 + .../pip/_vendor/resolvelib/structs.py | 165 + .../pip/_vendor/rich/__init__.py | 172 + .../pip/_vendor/rich/__main__.py | 280 + .../rich/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 5808 bytes .../rich/__pycache__/__main__.cpython-39.pyc | Bin 0 -> 7300 bytes .../__pycache__/_cell_widths.cpython-39.pyc | Bin 0 -> 7823 bytes .../__pycache__/_emoji_codes.cpython-39.pyc | Bin 0 -> 132710 bytes .../__pycache__/_emoji_replace.cpython-39.pyc | Bin 0 -> 1195 bytes .../__pycache__/_extension.cpython-39.pyc | Bin 0 -> 504 bytes .../rich/__pycache__/_inspect.cpython-39.pyc | Bin 0 -> 6649 bytes .../__pycache__/_log_render.cpython-39.pyc | Bin 0 -> 2587 bytes .../rich/__pycache__/_loop.cpython-39.pyc | Bin 0 -> 1277 bytes .../__pycache__/_lru_cache.cpython-39.pyc | Bin 0 -> 1593 bytes .../rich/__pycache__/_palettes.cpython-39.pyc | Bin 0 -> 5106 bytes .../rich/__pycache__/_pick.cpython-39.pyc | Bin 0 -> 647 bytes .../rich/__pycache__/_ratio.cpython-39.pyc | Bin 0 -> 5131 bytes .../rich/__pycache__/_spinners.cpython-39.pyc | Bin 0 -> 13926 bytes .../rich/__pycache__/_stack.cpython-39.pyc | Bin 0 -> 852 bytes .../rich/__pycache__/_timer.cpython-39.pyc | Bin 0 -> 699 bytes .../rich/__pycache__/_windows.cpython-39.pyc | Bin 0 -> 1875 bytes .../rich/__pycache__/_wrap.cpython-39.pyc | Bin 0 -> 1505 bytes .../rich/__pycache__/abc.cpython-39.pyc | Bin 0 -> 1313 bytes .../rich/__pycache__/align.cpython-39.pyc | Bin 0 -> 7881 bytes .../rich/__pycache__/ansi.cpython-39.pyc | Bin 0 -> 5683 bytes .../rich/__pycache__/bar.cpython-39.pyc | Bin 0 -> 2951 bytes .../rich/__pycache__/box.cpython-39.pyc | Bin 0 -> 7865 bytes .../rich/__pycache__/cells.cpython-39.pyc | Bin 0 -> 3500 bytes .../rich/__pycache__/color.cpython-39.pyc | Bin 0 -> 14759 bytes .../__pycache__/color_triplet.cpython-39.pyc | Bin 0 -> 1434 bytes .../rich/__pycache__/columns.cpython-39.pyc | Bin 0 -> 6138 bytes .../rich/__pycache__/console.cpython-39.pyc | Bin 0 -> 69760 bytes .../rich/__pycache__/constrain.cpython-39.pyc | Bin 0 -> 1672 bytes .../__pycache__/containers.cpython-39.pyc | Bin 0 -> 6433 bytes .../rich/__pycache__/control.cpython-39.pyc | Bin 0 -> 6858 bytes .../__pycache__/default_styles.cpython-39.pyc | Bin 0 -> 5125 bytes .../rich/__pycache__/diagnose.cpython-39.pyc | Bin 0 -> 358 bytes .../rich/__pycache__/emoji.cpython-39.pyc | Bin 0 -> 3211 bytes .../rich/__pycache__/errors.cpython-39.pyc | Bin 0 -> 1678 bytes .../__pycache__/file_proxy.cpython-39.pyc | Bin 0 -> 2252 bytes .../rich/__pycache__/filesize.cpython-39.pyc | Bin 0 -> 2621 bytes .../__pycache__/highlighter.cpython-39.pyc | Bin 0 -> 5326 bytes .../rich/__pycache__/json.cpython-39.pyc | Bin 0 -> 4712 bytes .../rich/__pycache__/jupyter.cpython-39.pyc | Bin 0 -> 3852 bytes .../rich/__pycache__/layout.cpython-39.pyc | Bin 0 -> 14694 bytes .../rich/__pycache__/live.cpython-39.pyc | Bin 0 -> 11294 bytes .../__pycache__/live_render.cpython-39.pyc | Bin 0 -> 3399 bytes .../rich/__pycache__/logging.cpython-39.pyc | Bin 0 -> 9238 bytes .../rich/__pycache__/markup.cpython-39.pyc | Bin 0 -> 5905 bytes .../rich/__pycache__/measure.cpython-39.pyc | Bin 0 -> 4986 bytes .../rich/__pycache__/padding.cpython-39.pyc | Bin 0 -> 4415 bytes .../rich/__pycache__/pager.cpython-39.pyc | Bin 0 -> 1481 bytes .../rich/__pycache__/palette.cpython-39.pyc | Bin 0 -> 3697 bytes .../rich/__pycache__/panel.cpython-39.pyc | Bin 0 -> 6402 bytes .../rich/__pycache__/pretty.cpython-39.pyc | Bin 0 -> 24927 bytes .../rich/__pycache__/progress.cpython-39.pyc | Bin 0 -> 32961 bytes .../__pycache__/progress_bar.cpython-39.pyc | Bin 0 -> 6626 bytes .../rich/__pycache__/prompt.cpython-39.pyc | Bin 0 -> 11366 bytes .../rich/__pycache__/protocol.cpython-39.pyc | Bin 0 -> 1367 bytes .../rich/__pycache__/region.cpython-39.pyc | Bin 0 -> 534 bytes .../rich/__pycache__/repr.cpython-39.pyc | Bin 0 -> 4046 bytes .../rich/__pycache__/rule.cpython-39.pyc | Bin 0 -> 3710 bytes .../rich/__pycache__/scope.cpython-39.pyc | Bin 0 -> 2972 bytes .../rich/__pycache__/screen.cpython-39.pyc | Bin 0 -> 1831 bytes .../rich/__pycache__/segment.cpython-39.pyc | Bin 0 -> 20312 bytes .../rich/__pycache__/spinner.cpython-39.pyc | Bin 0 -> 4352 bytes .../rich/__pycache__/status.cpython-39.pyc | Bin 0 -> 4584 bytes .../rich/__pycache__/style.cpython-39.pyc | Bin 0 -> 20612 bytes .../rich/__pycache__/styled.cpython-39.pyc | Bin 0 -> 1697 bytes .../rich/__pycache__/syntax.cpython-39.pyc | Bin 0 -> 18813 bytes .../rich/__pycache__/table.cpython-39.pyc | Bin 0 -> 26679 bytes .../rich/__pycache__/tabulate.cpython-39.pyc | Bin 0 -> 1739 bytes .../__pycache__/terminal_theme.cpython-39.pyc | Bin 0 -> 1709 bytes .../rich/__pycache__/text.cpython-39.pyc | Bin 0 -> 39459 bytes .../rich/__pycache__/theme.cpython-39.pyc | Bin 0 -> 4689 bytes .../rich/__pycache__/themes.cpython-39.pyc | Bin 0 -> 302 bytes .../rich/__pycache__/traceback.cpython-39.pyc | Bin 0 -> 19369 bytes .../rich/__pycache__/tree.cpython-39.pyc | Bin 0 -> 7219 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_extension.py | 10 + .../pip/_vendor/rich/_inspect.py | 210 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_lru_cache.py | 34 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 848 ++ .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_windows.py | 72 + .../site-packages/pip/_vendor/rich/_wrap.py | 55 + .../Lib/site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 312 + .../site-packages/pip/_vendor/rich/ansi.py | 228 + .../Lib/site-packages/pip/_vendor/rich/bar.py | 94 + .../Lib/site-packages/pip/_vendor/rich/box.py | 483 + .../site-packages/pip/_vendor/rich/cells.py | 147 + .../site-packages/pip/_vendor/rich/color.py | 581 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2211 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 175 + .../pip/_vendor/rich/default_styles.py | 183 + .../pip/_vendor/rich/diagnose.py | 6 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 54 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 147 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 92 + .../site-packages/pip/_vendor/rich/layout.py | 444 + .../site-packages/pip/_vendor/rich/live.py | 365 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 268 + .../site-packages/pip/_vendor/rich/markup.py | 244 + .../site-packages/pip/_vendor/rich/measure.py | 149 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 250 + .../site-packages/pip/_vendor/rich/pretty.py | 903 ++ .../pip/_vendor/rich/progress.py | 1036 ++ .../pip/_vendor/rich/progress_bar.py | 216 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 151 + .../site-packages/pip/_vendor/rich/rule.py | 115 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 720 ++ .../site-packages/pip/_vendor/rich/spinner.py | 134 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 785 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 735 ++ .../site-packages/pip/_vendor/rich/table.py | 968 ++ .../pip/_vendor/rich/tabulate.py | 51 + .../pip/_vendor/rich/terminal_theme.py | 55 + .../site-packages/pip/_vendor/rich/text.py | 1282 +++ .../site-packages/pip/_vendor/rich/theme.py | 112 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 678 ++ .../site-packages/pip/_vendor/rich/tree.py | 249 + .venv/Lib/site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 517 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 16288 bytes .../__pycache__/_asyncio.cpython-39.pyc | Bin 0 -> 2603 bytes .../__pycache__/_utils.cpython-39.pyc | Bin 0 -> 1240 bytes .../tenacity/__pycache__/after.cpython-39.pyc | Bin 0 -> 1219 bytes .../__pycache__/before.cpython-39.pyc | Bin 0 -> 1107 bytes .../__pycache__/before_sleep.cpython-39.pyc | Bin 0 -> 1399 bytes .../tenacity/__pycache__/nap.cpython-39.pyc | Bin 0 -> 1201 bytes .../tenacity/__pycache__/retry.cpython-39.pyc | Bin 0 -> 8789 bytes .../tenacity/__pycache__/stop.cpython-39.pyc | Bin 0 -> 4253 bytes .../__pycache__/tornadoweb.cpython-39.pyc | Bin 0 -> 1753 bytes .../tenacity/__pycache__/wait.cpython-39.pyc | Bin 0 -> 7965 bytes .../pip/_vendor/tenacity/_asyncio.py | 92 + .../pip/_vendor/tenacity/_utils.py | 68 + .../pip/_vendor/tenacity/after.py | 46 + .../pip/_vendor/tenacity/before.py | 41 + .../pip/_vendor/tenacity/before_sleep.py | 58 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 213 + .../pip/_vendor/tenacity/stop.py | 96 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 191 + .../pip/_vendor/tomli/__init__.py | 6 + .../tomli/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 388 bytes .../tomli/__pycache__/_parser.cpython-39.pyc | Bin 0 -> 16363 bytes .../tomli/__pycache__/_re.cpython-39.pyc | Bin 0 -> 2438 bytes .../pip/_vendor/tomli/_parser.py | 703 ++ .../site-packages/pip/_vendor/tomli/_re.py | 83 + .../pip/_vendor/typing_extensions.py | 2296 +++++ .../pip/_vendor/urllib3/__init__.py | 85 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2198 bytes .../__pycache__/_collections.cpython-39.pyc | Bin 0 -> 10793 bytes .../__pycache__/_version.cpython-39.pyc | Bin 0 -> 222 bytes .../__pycache__/connection.cpython-39.pyc | Bin 0 -> 13687 bytes .../__pycache__/connectionpool.cpython-39.pyc | Bin 0 -> 25371 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 11655 bytes .../urllib3/__pycache__/fields.cpython-39.pyc | Bin 0 -> 8170 bytes .../__pycache__/filepost.cpython-39.pyc | Bin 0 -> 2771 bytes .../__pycache__/poolmanager.cpython-39.pyc | Bin 0 -> 15173 bytes .../__pycache__/request.cpython-39.pyc | Bin 0 -> 5634 bytes .../__pycache__/response.cpython-39.pyc | Bin 0 -> 20845 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 569 ++ .../pip/_vendor/urllib3/connectionpool.py | 1108 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 208 bytes .../_appengine_environ.cpython-39.pyc | Bin 0 -> 1428 bytes .../__pycache__/appengine.cpython-39.pyc | Bin 0 -> 8281 bytes .../__pycache__/ntlmpool.cpython-39.pyc | Bin 0 -> 3635 bytes .../__pycache__/pyopenssl.cpython-39.pyc | Bin 0 -> 15612 bytes .../securetransport.cpython-39.pyc | Bin 0 -> 21934 bytes .../contrib/__pycache__/socks.cpython-39.pyc | Bin 0 -> 5644 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 225 bytes .../__pycache__/bindings.cpython-39.pyc | Bin 0 -> 10717 bytes .../__pycache__/low_level.cpython-39.pyc | Bin 0 -> 9185 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 511 + .../urllib3/contrib/securetransport.py | 922 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 209 bytes .../packages/__pycache__/six.cpython-39.pyc | Bin 0 -> 27592 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 219 bytes .../__pycache__/makefile.cpython-39.pyc | Bin 0 -> 1317 bytes .../urllib3/packages/backports/makefile.py | 51 + .../pip/_vendor/urllib3/packages/six.py | 1077 +++ .../pip/_vendor/urllib3/poolmanager.py | 536 ++ .../pip/_vendor/urllib3/request.py | 170 + .../pip/_vendor/urllib3/response.py | 821 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1118 bytes .../__pycache__/connection.cpython-39.pyc | Bin 0 -> 3450 bytes .../util/__pycache__/proxy.cpython-39.pyc | Bin 0 -> 1354 bytes .../util/__pycache__/queue.cpython-39.pyc | Bin 0 -> 1073 bytes .../util/__pycache__/request.cpython-39.pyc | Bin 0 -> 3461 bytes .../util/__pycache__/response.cpython-39.pyc | Bin 0 -> 2358 bytes .../util/__pycache__/retry.cpython-39.pyc | Bin 0 -> 16265 bytes .../util/__pycache__/ssl_.cpython-39.pyc | Bin 0 -> 11342 bytes .../ssl_match_hostname.cpython-39.pyc | Bin 0 -> 3292 bytes .../__pycache__/ssltransport.cpython-39.pyc | Bin 0 -> 7488 bytes .../util/__pycache__/timeout.cpython-39.pyc | Bin 0 -> 8956 bytes .../util/__pycache__/url.cpython-39.pyc | Bin 0 -> 10681 bytes .../util/__pycache__/wait.cpython-39.pyc | Bin 0 -> 3141 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 143 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 161 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 268 + .../pip/_vendor/urllib3/util/url.py | 432 + .../pip/_vendor/urllib3/util/wait.py | 153 + .../Lib/site-packages/pip/_vendor/vendor.txt | 25 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 9732 bytes .../__pycache__/labels.cpython-39.pyc | Bin 0 -> 3846 bytes .../__pycache__/mklabels.cpython-39.pyc | Bin 0 -> 1916 bytes .../__pycache__/tests.cpython-39.pyc | Bin 0 -> 5080 bytes .../__pycache__/x_user_defined.cpython-39.pyc | Bin 0 -> 2676 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + .venv/Lib/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3288 +++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 100448 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 202 bytes .../__pycache__/appdirs.cpython-39.pyc | Bin 0 -> 20519 bytes .../__pycache__/pyparsing.cpython-39.pyc | Bin 0 -> 201356 bytes .../pkg_resources/_vendor/appdirs.py | 608 ++ .../_vendor/packaging/__about__.py | 27 + .../_vendor/packaging/__init__.py | 26 + .../__pycache__/__about__.cpython-39.pyc | Bin 0 -> 718 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 564 bytes .../__pycache__/_compat.cpython-39.pyc | Bin 0 -> 1162 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 0 -> 2916 bytes .../__pycache__/_typing.cpython-39.pyc | Bin 0 -> 1507 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 9323 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 0 -> 4100 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 0 -> 20599 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 0 -> 17278 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 1669 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 13336 bytes .../_vendor/packaging/_compat.py | 38 + .../_vendor/packaging/_structures.py | 86 + .../_vendor/packaging/_typing.py | 48 + .../_vendor/packaging/markers.py | 328 + .../_vendor/packaging/requirements.py | 145 + .../_vendor/packaging/specifiers.py | 863 ++ .../pkg_resources/_vendor/packaging/tags.py | 751 ++ .../pkg_resources/_vendor/packaging/utils.py | 65 + .../_vendor/packaging/version.py | 535 ++ .../pkg_resources/_vendor/pyparsing.py | 5742 +++++++++++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2891 bytes .../__pycache__/setup.cpython-39.pyc | Bin 0 -> 330 bytes .../data/my-test-package-source/setup.py | 6 + .../requests-2.26.0.dist-info/INSTALLER | 1 + .../requests-2.26.0.dist-info/LICENSE | 175 + .../requests-2.26.0.dist-info/METADATA | 120 + .../requests-2.26.0.dist-info/RECORD | 42 + .../requests-2.26.0.dist-info/WHEEL | 6 + .../requests-2.26.0.dist-info/top_level.txt | 1 + .venv/Lib/site-packages/requests/__init__.py | 152 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3866 bytes .../__pycache__/__version__.cpython-39.pyc | Bin 0 -> 544 bytes .../_internal_utils.cpython-39.pyc | Bin 0 -> 1291 bytes .../__pycache__/adapters.cpython-39.pyc | Bin 0 -> 16890 bytes .../requests/__pycache__/api.cpython-39.pyc | Bin 0 -> 6708 bytes .../requests/__pycache__/auth.cpython-39.pyc | Bin 0 -> 8320 bytes .../requests/__pycache__/certs.cpython-39.pyc | Bin 0 -> 610 bytes .../__pycache__/compat.cpython-39.pyc | Bin 0 -> 1700 bytes .../__pycache__/cookies.cpython-39.pyc | Bin 0 -> 18811 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 5382 bytes .../requests/__pycache__/help.cpython-39.pyc | Bin 0 -> 2862 bytes .../requests/__pycache__/hooks.cpython-39.pyc | Bin 0 -> 979 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 24387 bytes .../__pycache__/packages.cpython-39.pyc | Bin 0 -> 686 bytes .../__pycache__/sessions.cpython-39.pyc | Bin 0 -> 19846 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 0 -> 4228 bytes .../__pycache__/structures.cpython-39.pyc | Bin 0 -> 4449 bytes .../requests/__pycache__/utils.cpython-39.pyc | Bin 0 -> 23301 bytes .../Lib/site-packages/requests/__version__.py | 14 + .../site-packages/requests/_internal_utils.py | 42 + .venv/Lib/site-packages/requests/adapters.py | 533 ++ .venv/Lib/site-packages/requests/api.py | 159 + .venv/Lib/site-packages/requests/auth.py | 305 + .venv/Lib/site-packages/requests/certs.py | 18 + .venv/Lib/site-packages/requests/compat.py | 75 + .venv/Lib/site-packages/requests/cookies.py | 549 ++ .../Lib/site-packages/requests/exceptions.py | 127 + .venv/Lib/site-packages/requests/help.py | 135 + .venv/Lib/site-packages/requests/hooks.py | 34 + .venv/Lib/site-packages/requests/models.py | 966 ++ .venv/Lib/site-packages/requests/packages.py | 26 + .venv/Lib/site-packages/requests/sessions.py | 781 ++ .../site-packages/requests/status_codes.py | 123 + .../Lib/site-packages/requests/structures.py | 105 + .venv/Lib/site-packages/requests/utils.py | 1013 ++ .../setuptools-58.1.0.dist-info/INSTALLER | 1 + .../setuptools-58.1.0.dist-info/LICENSE | 19 + .../setuptools-58.1.0.dist-info/METADATA | 119 + .../setuptools-58.1.0.dist-info/RECORD | 296 + .../setuptools-58.1.0.dist-info/REQUESTED | 0 .../setuptools-58.1.0.dist-info/WHEEL | 5 + .../entry_points.txt | 56 + .../setuptools-58.1.0.dist-info/top_level.txt | 3 + .../Lib/site-packages/setuptools/__init__.py | 242 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 8551 bytes .../_deprecation_warning.cpython-39.pyc | Bin 0 -> 561 bytes .../__pycache__/_imp.cpython-39.pyc | Bin 0 -> 2096 bytes .../__pycache__/archive_util.cpython-39.pyc | Bin 0 -> 5825 bytes .../__pycache__/build_meta.cpython-39.pyc | Bin 0 -> 9084 bytes .../__pycache__/config.cpython-39.pyc | Bin 0 -> 20837 bytes .../__pycache__/dep_util.cpython-39.pyc | Bin 0 -> 868 bytes .../__pycache__/depends.cpython-39.pyc | Bin 0 -> 5260 bytes .../__pycache__/dist.cpython-39.pyc | Bin 0 -> 36458 bytes .../__pycache__/errors.cpython-39.pyc | Bin 0 -> 861 bytes .../__pycache__/extension.cpython-39.pyc | Bin 0 -> 1955 bytes .../__pycache__/glob.cpython-39.pyc | Bin 0 -> 3705 bytes .../__pycache__/installer.cpython-39.pyc | Bin 0 -> 2782 bytes .../__pycache__/launch.cpython-39.pyc | Bin 0 -> 912 bytes .../__pycache__/monkey.cpython-39.pyc | Bin 0 -> 4624 bytes .../__pycache__/msvc.cpython-39.pyc | Bin 0 -> 42850 bytes .../__pycache__/namespaces.cpython-39.pyc | Bin 0 -> 3611 bytes .../__pycache__/package_index.cpython-39.pyc | Bin 0 -> 32647 bytes .../__pycache__/py34compat.cpython-39.pyc | Bin 0 -> 491 bytes .../__pycache__/sandbox.cpython-39.pyc | Bin 0 -> 15767 bytes .../__pycache__/unicode_utils.cpython-39.pyc | Bin 0 -> 1125 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 335 bytes .../__pycache__/wheel.cpython-39.pyc | Bin 0 -> 7291 bytes .../windows_support.cpython-39.pyc | Bin 0 -> 1034 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 15 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 469 bytes .../__pycache__/_msvccompiler.cpython-39.pyc | Bin 0 -> 13824 bytes .../__pycache__/archive_util.cpython-39.pyc | Bin 0 -> 6656 bytes .../__pycache__/bcppcompiler.cpython-39.pyc | Bin 0 -> 6567 bytes .../__pycache__/ccompiler.cpython-39.pyc | Bin 0 -> 33435 bytes .../_distutils/__pycache__/cmd.cpython-39.pyc | Bin 0 -> 13995 bytes .../__pycache__/config.cpython-39.pyc | Bin 0 -> 3598 bytes .../__pycache__/core.cpython-39.pyc | Bin 0 -> 6723 bytes .../cygwinccompiler.cpython-39.pyc | Bin 0 -> 8803 bytes .../__pycache__/debug.cpython-39.pyc | Bin 0 -> 265 bytes .../__pycache__/dep_util.cpython-39.pyc | Bin 0 -> 2785 bytes .../__pycache__/dir_util.cpython-39.pyc | Bin 0 -> 5886 bytes .../__pycache__/dist.cpython-39.pyc | Bin 0 -> 34456 bytes .../__pycache__/errors.cpython-39.pyc | Bin 0 -> 5321 bytes .../__pycache__/extension.cpython-39.pyc | Bin 0 -> 6986 bytes .../__pycache__/fancy_getopt.cpython-39.pyc | Bin 0 -> 10694 bytes .../__pycache__/file_util.cpython-39.pyc | Bin 0 -> 6052 bytes .../__pycache__/filelist.cpython-39.pyc | Bin 0 -> 10844 bytes .../_distutils/__pycache__/log.cpython-39.pyc | Bin 0 -> 2384 bytes .../__pycache__/msvc9compiler.cpython-39.pyc | Bin 0 -> 17581 bytes .../__pycache__/msvccompiler.cpython-39.pyc | Bin 0 -> 14776 bytes .../__pycache__/py35compat.cpython-39.pyc | Bin 0 -> 641 bytes .../__pycache__/py38compat.cpython-39.pyc | Bin 0 -> 436 bytes .../__pycache__/spawn.cpython-39.pyc | Bin 0 -> 2912 bytes .../__pycache__/sysconfig.cpython-39.pyc | Bin 0 -> 12596 bytes .../__pycache__/text_file.cpython-39.pyc | Bin 0 -> 8510 bytes .../__pycache__/unixccompiler.cpython-39.pyc | Bin 0 -> 6886 bytes .../__pycache__/util.cpython-39.pyc | Bin 0 -> 14249 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 7410 bytes .../versionpredicate.cpython-39.pyc | Bin 0 -> 5194 bytes .../setuptools/_distutils/_msvccompiler.py | 561 ++ .../setuptools/_distutils/archive_util.py | 256 + .../setuptools/_distutils/bcppcompiler.py | 393 + .../setuptools/_distutils/ccompiler.py | 1123 +++ .../setuptools/_distutils/cmd.py | 403 + .../setuptools/_distutils/command/__init__.py | 31 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 544 bytes .../command/__pycache__/bdist.cpython-39.pyc | Bin 0 -> 3674 bytes .../__pycache__/bdist_dumb.cpython-39.pyc | Bin 0 -> 3657 bytes .../__pycache__/bdist_msi.cpython-39.pyc | Bin 0 -> 19839 bytes .../__pycache__/bdist_rpm.cpython-39.pyc | Bin 0 -> 12294 bytes .../__pycache__/bdist_wininst.cpython-39.pyc | Bin 0 -> 8614 bytes .../command/__pycache__/build.cpython-39.pyc | Bin 0 -> 3946 bytes .../__pycache__/build_clib.cpython-39.pyc | Bin 0 -> 4869 bytes .../__pycache__/build_ext.cpython-39.pyc | Bin 0 -> 16281 bytes .../__pycache__/build_py.cpython-39.pyc | Bin 0 -> 9864 bytes .../__pycache__/build_scripts.cpython-39.pyc | Bin 0 -> 4029 bytes .../command/__pycache__/check.cpython-39.pyc | Bin 0 -> 4978 bytes .../command/__pycache__/clean.cpython-39.pyc | Bin 0 -> 2151 bytes .../command/__pycache__/config.cpython-39.pyc | Bin 0 -> 10281 bytes .../__pycache__/install.cpython-39.pyc | Bin 0 -> 13893 bytes .../__pycache__/install_data.cpython-39.pyc | Bin 0 -> 2354 bytes .../install_egg_info.cpython-39.pyc | Bin 0 -> 3089 bytes .../install_headers.cpython-39.pyc | Bin 0 -> 1779 bytes .../__pycache__/install_lib.cpython-39.pyc | Bin 0 -> 5151 bytes .../install_scripts.cpython-39.pyc | Bin 0 -> 2202 bytes .../__pycache__/py37compat.cpython-39.pyc | Bin 0 -> 1045 bytes .../__pycache__/register.cpython-39.pyc | Bin 0 -> 8522 bytes .../command/__pycache__/sdist.cpython-39.pyc | Bin 0 -> 14549 bytes .../command/__pycache__/upload.cpython-39.pyc | Bin 0 -> 5272 bytes .../setuptools/_distutils/command/bdist.py | 143 + .../_distutils/command/bdist_dumb.py | 123 + .../_distutils/command/bdist_msi.py | 749 ++ .../_distutils/command/bdist_rpm.py | 579 ++ .../_distutils/command/bdist_wininst.py | 377 + .../setuptools/_distutils/command/build.py | 157 + .../_distutils/command/build_clib.py | 209 + .../_distutils/command/build_ext.py | 757 ++ .../setuptools/_distutils/command/build_py.py | 392 + .../_distutils/command/build_scripts.py | 152 + .../setuptools/_distutils/command/check.py | 148 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 344 + .../setuptools/_distutils/command/install.py | 678 ++ .../_distutils/command/install_data.py | 79 + .../_distutils/command/install_egg_info.py | 77 + .../_distutils/command/install_headers.py | 47 + .../_distutils/command/install_lib.py | 217 + .../_distutils/command/install_scripts.py | 60 + .../_distutils/command/py37compat.py | 30 + .../setuptools/_distutils/command/register.py | 304 + .../setuptools/_distutils/command/sdist.py | 494 + .../setuptools/_distutils/command/upload.py | 214 + .../setuptools/_distutils/config.py | 130 + .../setuptools/_distutils/core.py | 234 + .../setuptools/_distutils/cygwinccompiler.py | 414 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 92 + .../setuptools/_distutils/dir_util.py | 210 + .../setuptools/_distutils/dist.py | 1257 +++ .../setuptools/_distutils/errors.py | 97 + .../setuptools/_distutils/extension.py | 240 + .../setuptools/_distutils/fancy_getopt.py | 457 + .../setuptools/_distutils/file_util.py | 238 + .../setuptools/_distutils/filelist.py | 355 + .../setuptools/_distutils/log.py | 77 + .../setuptools/_distutils/msvc9compiler.py | 788 ++ .../setuptools/_distutils/msvccompiler.py | 643 ++ .../setuptools/_distutils/py35compat.py | 19 + .../setuptools/_distutils/py38compat.py | 7 + .../setuptools/_distutils/spawn.py | 106 + .../setuptools/_distutils/sysconfig.py | 578 ++ .../setuptools/_distutils/text_file.py | 286 + .../setuptools/_distutils/unixccompiler.py | 332 + .../setuptools/_distutils/util.py | 535 ++ .../setuptools/_distutils/version.py | 347 + .../setuptools/_distutils/versionpredicate.py | 166 + .venv/Lib/site-packages/setuptools/_imp.py | 82 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 199 bytes .../__pycache__/ordered_set.cpython-39.pyc | Bin 0 -> 16393 bytes .../__pycache__/pyparsing.cpython-39.pyc | Bin 0 -> 201353 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 280 bytes .../__pycache__/more.cpython-39.pyc | Bin 0 -> 110025 bytes .../__pycache__/recipes.cpython-39.pyc | Bin 0 -> 17945 bytes .../setuptools/_vendor/more_itertools/more.py | 3825 ++++++++ .../_vendor/more_itertools/recipes.py | 620 ++ .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 27 + .../setuptools/_vendor/packaging/__init__.py | 26 + .../__pycache__/__about__.cpython-39.pyc | Bin 0 -> 715 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 561 bytes .../__pycache__/_compat.cpython-39.pyc | Bin 0 -> 1159 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 0 -> 2913 bytes .../__pycache__/_typing.cpython-39.pyc | Bin 0 -> 1504 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 9317 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 0 -> 4094 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 0 -> 20596 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 0 -> 17275 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 1666 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 13333 bytes .../setuptools/_vendor/packaging/_compat.py | 38 + .../_vendor/packaging/_structures.py | 86 + .../setuptools/_vendor/packaging/_typing.py | 48 + .../setuptools/_vendor/packaging/markers.py | 328 + .../_vendor/packaging/requirements.py | 145 + .../_vendor/packaging/specifiers.py | 863 ++ .../setuptools/_vendor/packaging/tags.py | 751 ++ .../setuptools/_vendor/packaging/utils.py | 65 + .../setuptools/_vendor/packaging/version.py | 535 ++ .../setuptools/_vendor/pyparsing.py | 5742 +++++++++++ .../site-packages/setuptools/archive_util.py | 205 + .../site-packages/setuptools/build_meta.py | 281 + .venv/Lib/site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .venv/Lib/site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .venv/Lib/site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 8 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 388 bytes .../command/__pycache__/alias.cpython-39.pyc | Bin 0 -> 2382 bytes .../__pycache__/bdist_egg.cpython-39.pyc | Bin 0 -> 13048 bytes .../__pycache__/bdist_rpm.cpython-39.pyc | Bin 0 -> 1595 bytes .../__pycache__/build_clib.cpython-39.pyc | Bin 0 -> 2479 bytes .../__pycache__/build_ext.cpython-39.pyc | Bin 0 -> 9838 bytes .../__pycache__/build_py.cpython-39.pyc | Bin 0 -> 7829 bytes .../__pycache__/develop.cpython-39.pyc | Bin 0 -> 6148 bytes .../__pycache__/dist_info.cpython-39.pyc | Bin 0 -> 1406 bytes .../__pycache__/easy_install.cpython-39.pyc | Bin 0 -> 63599 bytes .../__pycache__/egg_info.cpython-39.pyc | Bin 0 -> 21989 bytes .../__pycache__/install.cpython-39.pyc | Bin 0 -> 4047 bytes .../install_egg_info.cpython-39.pyc | Bin 0 -> 2438 bytes .../__pycache__/install_lib.cpython-39.pyc | Bin 0 -> 4145 bytes .../install_scripts.cpython-39.pyc | Bin 0 -> 2433 bytes .../__pycache__/py36compat.cpython-39.pyc | Bin 0 -> 4600 bytes .../__pycache__/register.cpython-39.pyc | Bin 0 -> 856 bytes .../command/__pycache__/rotate.cpython-39.pyc | Bin 0 -> 2515 bytes .../__pycache__/saveopts.cpython-39.pyc | Bin 0 -> 934 bytes .../command/__pycache__/sdist.cpython-39.pyc | Bin 0 -> 6475 bytes .../command/__pycache__/setopt.cpython-39.pyc | Bin 0 -> 4685 bytes .../command/__pycache__/test.cpython-39.pyc | Bin 0 -> 8040 bytes .../command/__pycache__/upload.cpython-39.pyc | Bin 0 -> 829 bytes .../__pycache__/upload_docs.cpython-39.pyc | Bin 0 -> 6172 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 456 + .../setuptools/command/bdist_rpm.py | 40 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 328 + .../setuptools/command/build_py.py | 232 + .../setuptools/command/develop.py | 193 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2290 +++++ .../setuptools/command/egg_info.py | 734 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 62 + .../setuptools/command/install_lib.py | 122 + .../setuptools/command/install_scripts.py | 69 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 189 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 252 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 202 + .venv/Lib/site-packages/setuptools/config.py | 749 ++ .../Lib/site-packages/setuptools/dep_util.py | 25 + .venv/Lib/site-packages/setuptools/depends.py | 175 + .venv/Lib/site-packages/setuptools/dist.py | 1150 +++ .venv/Lib/site-packages/setuptools/errors.py | 16 + .../Lib/site-packages/setuptools/extension.py | 55 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2930 bytes .venv/Lib/site-packages/setuptools/glob.py | 167 + .venv/Lib/site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .venv/Lib/site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .venv/Lib/site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../Lib/site-packages/setuptools/installer.py | 97 + .venv/Lib/site-packages/setuptools/launch.py | 36 + .venv/Lib/site-packages/setuptools/monkey.py | 177 + .venv/Lib/site-packages/setuptools/msvc.py | 1805 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 +++ .../site-packages/setuptools/py34compat.py | 13 + .venv/Lib/site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + .../Lib/site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + .venv/Lib/site-packages/setuptools/version.py | 6 + .venv/Lib/site-packages/setuptools/wheel.py | 213 + .../setuptools/windows_support.py | 29 + .../soupsieve-2.8.3.dist-info/INSTALLER | 1 + .../soupsieve-2.8.3.dist-info/METADATA | 115 + .../soupsieve-2.8.3.dist-info/RECORD | 20 + .../soupsieve-2.8.3.dist-info/WHEEL | 4 + .../licenses/LICENSE.md | 21 + .venv/Lib/site-packages/soupsieve/__init__.py | 168 + .venv/Lib/site-packages/soupsieve/__meta__.py | 197 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4327 bytes .../__pycache__/__meta__.cpython-39.pyc | Bin 0 -> 5961 bytes .../__pycache__/css_match.cpython-39.pyc | Bin 0 -> 37964 bytes .../__pycache__/css_parser.cpython-39.pyc | Bin 0 -> 28874 bytes .../__pycache__/css_types.cpython-39.pyc | Bin 0 -> 12548 bytes .../__pycache__/pretty.cpython-39.pyc | Bin 0 -> 3843 bytes .../soupsieve/__pycache__/util.cpython-39.pyc | Bin 0 -> 3308 bytes .../Lib/site-packages/soupsieve/css_match.py | 1654 ++++ .../Lib/site-packages/soupsieve/css_parser.py | 1318 +++ .../Lib/site-packages/soupsieve/css_types.py | 407 + .venv/Lib/site-packages/soupsieve/pretty.py | 148 + .venv/Lib/site-packages/soupsieve/py.typed | 0 .venv/Lib/site-packages/soupsieve/util.py | 117 + .../urllib3-1.26.20.dist-info/INSTALLER | 1 + .../urllib3-1.26.20.dist-info/LICENSE.txt | 21 + .../urllib3-1.26.20.dist-info/METADATA | 1517 +++ .../urllib3-1.26.20.dist-info/RECORD | 84 + .../urllib3-1.26.20.dist-info/WHEEL | 6 + .../urllib3-1.26.20.dist-info/top_level.txt | 1 + .venv/Lib/site-packages/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2496 bytes .../__pycache__/_collections.cpython-39.pyc | Bin 0 -> 11264 bytes .../__pycache__/_version.cpython-39.pyc | Bin 0 -> 203 bytes .../__pycache__/connection.cpython-39.pyc | Bin 0 -> 13732 bytes .../__pycache__/connectionpool.cpython-39.pyc | Bin 0 -> 25932 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 11635 bytes .../urllib3/__pycache__/fields.cpython-39.pyc | Bin 0 -> 8150 bytes .../__pycache__/filepost.cpython-39.pyc | Bin 0 -> 2751 bytes .../__pycache__/poolmanager.cpython-39.pyc | Bin 0 -> 15117 bytes .../__pycache__/request.cpython-39.pyc | Bin 0 -> 6375 bytes .../__pycache__/response.cpython-39.pyc | Bin 0 -> 22483 bytes .../Lib/site-packages/urllib3/_collections.py | 355 + .venv/Lib/site-packages/urllib3/_version.py | 2 + .venv/Lib/site-packages/urllib3/connection.py | 572 ++ .../site-packages/urllib3/connectionpool.py | 1140 +++ .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 188 bytes .../_appengine_environ.cpython-39.pyc | Bin 0 -> 1408 bytes .../__pycache__/appengine.cpython-39.pyc | Bin 0 -> 8238 bytes .../__pycache__/ntlmpool.cpython-39.pyc | Bin 0 -> 3604 bytes .../__pycache__/pyopenssl.cpython-39.pyc | Bin 0 -> 15832 bytes .../securetransport.cpython-39.pyc | Bin 0 -> 21896 bytes .../contrib/__pycache__/socks.cpython-39.pyc | Bin 0 -> 5624 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 205 bytes .../__pycache__/bindings.cpython-39.pyc | Bin 0 -> 10697 bytes .../__pycache__/low_level.cpython-39.pyc | Bin 0 -> 9165 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../urllib3/contrib/appengine.py | 314 + .../site-packages/urllib3/contrib/ntlmpool.py | 130 + .../urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 920 ++ .../site-packages/urllib3/contrib/socks.py | 216 + .venv/Lib/site-packages/urllib3/exceptions.py | 323 + .venv/Lib/site-packages/urllib3/fields.py | 274 + .venv/Lib/site-packages/urllib3/filepost.py | 98 + .../urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 189 bytes .../packages/__pycache__/six.cpython-39.pyc | Bin 0 -> 27572 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 199 bytes .../__pycache__/makefile.cpython-39.pyc | Bin 0 -> 1297 bytes .../weakref_finalize.cpython-39.pyc | Bin 0 -> 4851 bytes .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../Lib/site-packages/urllib3/packages/six.py | 1076 +++ .../Lib/site-packages/urllib3/poolmanager.py | 540 ++ .venv/Lib/site-packages/urllib3/request.py | 191 + .venv/Lib/site-packages/urllib3/response.py | 885 ++ .../site-packages/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1098 bytes .../__pycache__/connection.cpython-39.pyc | Bin 0 -> 3430 bytes .../util/__pycache__/proxy.cpython-39.pyc | Bin 0 -> 1334 bytes .../util/__pycache__/queue.cpython-39.pyc | Bin 0 -> 1053 bytes .../util/__pycache__/request.cpython-39.pyc | Bin 0 -> 3491 bytes .../util/__pycache__/response.cpython-39.pyc | Bin 0 -> 2338 bytes .../util/__pycache__/retry.cpython-39.pyc | Bin 0 -> 16287 bytes .../util/__pycache__/ssl_.cpython-39.pyc | Bin 0 -> 11548 bytes .../ssl_match_hostname.cpython-39.pyc | Bin 0 -> 3252 bytes .../__pycache__/ssltransport.cpython-39.pyc | Bin 0 -> 7468 bytes .../util/__pycache__/timeout.cpython-39.pyc | Bin 0 -> 9139 bytes .../util/__pycache__/url.cpython-39.pyc | Bin 0 -> 10668 bytes .../util/__pycache__/wait.cpython-39.pyc | Bin 0 -> 3121 bytes .../site-packages/urllib3/util/connection.py | 149 + .venv/Lib/site-packages/urllib3/util/proxy.py | 57 + .venv/Lib/site-packages/urllib3/util/queue.py | 22 + .../Lib/site-packages/urllib3/util/request.py | 146 + .../site-packages/urllib3/util/response.py | 107 + .venv/Lib/site-packages/urllib3/util/retry.py | 622 ++ .venv/Lib/site-packages/urllib3/util/ssl_.py | 504 + .../urllib3/util/ssl_match_hostname.py | 159 + .../urllib3/util/ssltransport.py | 221 + .../Lib/site-packages/urllib3/util/timeout.py | 271 + .venv/Lib/site-packages/urllib3/util/url.py | 435 + .venv/Lib/site-packages/urllib3/util/wait.py | 152 + .venv/Scripts/Activate.ps1 | 437 + .venv/Scripts/activate | 66 + .venv/Scripts/activate.bat | 33 + .venv/Scripts/deactivate.bat | 21 + .venv/Scripts/normalizer.exe | Bin 0 -> 106404 bytes .venv/Scripts/pip.exe | Bin 0 -> 106389 bytes .venv/Scripts/pip3.9.exe | Bin 0 -> 106389 bytes .venv/Scripts/pip3.exe | Bin 0 -> 106389 bytes .venv/Scripts/python.exe | Bin 0 -> 599032 bytes .venv/Scripts/pythonw.exe | Bin 0 -> 598520 bytes .venv/pyvenv.cfg | 3 + Weather_Crawling.py | 325 + __init__.py | 0 custom_lib/CHANGELOG.md | 21 + custom_lib/Custom_Lib.py | 51 + custom_lib/README.md | 112 + custom_lib/__init__.py | 0 .../__pycache__/Custom_Lib.cpython-39.pyc | Bin 0 -> 1517 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 159 bytes .../__pycache__/my_file_config.cpython-39.pyc | Bin 0 -> 769 bytes .../__pycache__/my_logger.cpython-39.pyc | Bin 0 -> 982 bytes custom_lib/__pycache__/my_uuid.cpython-39.pyc | Bin 0 -> 465 bytes custom_lib/crawling/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 168 bytes .../__pycache__/my_crawling.cpython-39.pyc | Bin 0 -> 479 bytes custom_lib/crawling/my_crawling.py | 12 + custom_lib/image/__init__.py | 0 .../image/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 165 bytes .../image/__pycache__/my_image.cpython-39.pyc | Bin 0 -> 10029 bytes custom_lib/image/my_image.py | 478 + custom_lib/my_file_config.py | 31 + custom_lib/my_logger.py | 48 + custom_lib/my_uuid.py | 26 + pyproject.toml | 33 + 1660 files changed, 309750 insertions(+) create mode 100644 .gitignore create mode 100644 .venv/Lib/site-packages/__editable__.custom_lib-1.0.3.pth create mode 100644 .venv/Lib/site-packages/__editable___custom_lib_1_0_3_finder.py create mode 100644 .venv/Lib/site-packages/__pycache__/__editable___custom_lib_1_0_3_finder.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/_distutils_hack/__init__.py create mode 100644 .venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/_distutils_hack/override.py create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/AUTHORS create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/LICENSE create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/bs4/__init__.py create mode 100644 .venv/Lib/site-packages/bs4/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/__pycache__/dammit.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/__pycache__/diagnose.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/__pycache__/element.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/__pycache__/formatter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/builder/__init__.py create mode 100644 .venv/Lib/site-packages/bs4/builder/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/builder/__pycache__/_html5lib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/builder/__pycache__/_lxml.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/builder/_html5lib.py create mode 100644 .venv/Lib/site-packages/bs4/builder/_htmlparser.py create mode 100644 .venv/Lib/site-packages/bs4/builder/_lxml.py create mode 100644 .venv/Lib/site-packages/bs4/dammit.py create mode 100644 .venv/Lib/site-packages/bs4/diagnose.py create mode 100644 .venv/Lib/site-packages/bs4/element.py create mode 100644 .venv/Lib/site-packages/bs4/formatter.py create mode 100644 .venv/Lib/site-packages/bs4/tests/__init__.py create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_builder.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_dammit.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_docs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_element.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_formatter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_lxml.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_soup.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_tag.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/__pycache__/test_tree.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/bs4/tests/test_builder.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_builder_registry.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_dammit.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_docs.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_element.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_formatter.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_html5lib.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_htmlparser.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_lxml.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_navigablestring.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_pageelement.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_soup.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_tag.py create mode 100644 .venv/Lib/site-packages/bs4/tests/test_tree.py create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/licenses/LICENSE create mode 100644 .venv/Lib/site-packages/certifi-2026.4.22.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/certifi/__init__.py create mode 100644 .venv/Lib/site-packages/certifi/__main__.py create mode 100644 .venv/Lib/site-packages/certifi/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/certifi/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/certifi/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/certifi/cacert.pem create mode 100644 .venv/Lib/site-packages/certifi/core.py create mode 100644 .venv/Lib/site-packages/certifi/py.typed create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/LICENSE create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/entry_points.txt create mode 100644 .venv/Lib/site-packages/charset_normalizer-2.0.12.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/charset_normalizer/__init__.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/api.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/cd.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/constant.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/legacy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/md.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/models.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/api.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/assets/__init__.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/assets/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/cd.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/cli/__init__.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/cli/__pycache__/normalizer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/charset_normalizer/cli/normalizer.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/constant.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/legacy.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/md.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/models.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/py.typed create mode 100644 .venv/Lib/site-packages/charset_normalizer/utils.py create mode 100644 .venv/Lib/site-packages/charset_normalizer/version.py create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/REQUESTED create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/direct_url.json create mode 100644 .venv/Lib/site-packages/custom_lib-1.0.3.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/distutils-precedence.pth create mode 100644 .venv/Lib/site-packages/idna-3.13.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/idna-3.13.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/idna-3.13.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/idna-3.13.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/idna-3.13.dist-info/licenses/LICENSE.md create mode 100644 .venv/Lib/site-packages/idna/__init__.py create mode 100644 .venv/Lib/site-packages/idna/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/codec.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/idnadata.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/intranges.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/package_data.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/__pycache__/uts46data.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/idna/codec.py create mode 100644 .venv/Lib/site-packages/idna/compat.py create mode 100644 .venv/Lib/site-packages/idna/core.py create mode 100644 .venv/Lib/site-packages/idna/idnadata.py create mode 100644 .venv/Lib/site-packages/idna/intranges.py create mode 100644 .venv/Lib/site-packages/idna/package_data.py create mode 100644 .venv/Lib/site-packages/idna/py.typed create mode 100644 .venv/Lib/site-packages/idna/uts46data.py create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/LICENSE.txt create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/REQUESTED create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/entry_points.txt create mode 100644 .venv/Lib/site-packages/pip-22.0.4.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/pip/__init__.py create mode 100644 .venv/Lib/site-packages/pip/__main__.py create mode 100644 .venv/Lib/site-packages/pip/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/main.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/build_env.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cache.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/base_command.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/command_context.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/main.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/main_parser.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/parser.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/req_command.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/spinners.py create mode 100644 .venv/Lib/site-packages/pip/_internal/cli/status_codes.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/cache.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/check.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/completion.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/configuration.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/debug.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/download.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/freeze.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/hash.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/help.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/index.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/install.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/list.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/search.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/show.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/uninstall.py create mode 100644 .venv/Lib/site-packages/pip/_internal/commands/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/configuration.py create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/base.py create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/installed.py create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/sdist.py create mode 100644 .venv/Lib/site-packages/pip/_internal/distributions/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/exceptions.py create mode 100644 .venv/Lib/site-packages/pip/_internal/index/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/index/collector.py create mode 100644 .venv/Lib/site-packages/pip/_internal/index/package_finder.py create mode 100644 .venv/Lib/site-packages/pip/_internal/index/sources.py create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/_distutils.py create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 .venv/Lib/site-packages/pip/_internal/locations/base.py create mode 100644 .venv/Lib/site-packages/pip/_internal/main.py create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/base.py create mode 100644 .venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/models/candidate.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/direct_url.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/format_control.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/index.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/link.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/scheme.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/search_scope.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/target_python.py create mode 100644 .venv/Lib/site-packages/pip/_internal/models/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/network/auth.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/cache.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/download.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/session.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/utils.py create mode 100644 .venv/Lib/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/check.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/freeze.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/legacy.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/operations/prepare.py create mode 100644 .venv/Lib/site-packages/pip/_internal/pyproject.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/req/constructors.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/req_file.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/req_install.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/req_set.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/req_tracker.py create mode 100644 .venv/Lib/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/base.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 .venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 .venv/Lib/site-packages/pip/_internal/self_outdated_check.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/_log.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/appdirs.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/compat.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/datetime.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/deprecation.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/distutils_args.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/egg_link.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/encoding.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/filesystem.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/filetypes.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/glibc.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/hashes.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/logging.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/misc.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/models.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/packaging.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/subprocess.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/unpacking.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/urls.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 .venv/Lib/site-packages/pip/_internal/utils/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/git.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/subversion.py create mode 100644 .venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 .venv/Lib/site-packages/pip/_internal/wheel_builder.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 .venv/Lib/site-packages/pip/_vendor/certifi/core.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/enums.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/chardet/version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/win32.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/database.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/index.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/locators.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/markers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/resources.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/util.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 .venv/Lib/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/distro.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/constants.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/codec.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/core.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/intranges.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/package_data.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/_version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/markers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/tags.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/utils.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/packaging/version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/dirtools.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/meta.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/build.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/check.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/meta.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__pycache__/colors.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/bar.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/colors.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/counter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/progress/spinner.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/console.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/filter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/style.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/token.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pygments/util.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/__version__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/adapters.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/api.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/auth.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/certs.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/compat.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/cookies.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/help.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/hooks.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/models.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/packages.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/sessions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/structures.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/requests/utils.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__main__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_lru_cache.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tabulate.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_extension.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_loop.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_lru_cache.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_pick.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_stack.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_timer.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_windows.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/abc.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/align.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/ansi.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/bar.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/box.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/cells.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/color.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/columns.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/console.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/constrain.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/containers.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/control.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/emoji.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/errors.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/filesize.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/json.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/layout.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/live.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/live_render.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/logging.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/markup.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/measure.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/padding.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/pager.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/palette.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/panel.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/pretty.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/progress.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/prompt.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/protocol.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/region.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/repr.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/rule.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/scope.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/screen.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/segment.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/spinner.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/status.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/style.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/styled.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/syntax.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/table.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/tabulate.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/text.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/theme.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/themes.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/traceback.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/rich/tree.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/six.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/after.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/before.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/tomli/_re.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/typing_extensions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/request.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/response.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/vendor.txt create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 .venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 .venv/Lib/site-packages/pip/py.typed create mode 100644 .venv/Lib/site-packages/pkg_resources/__init__.py create mode 100644 .venv/Lib/site-packages/pkg_resources/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_typing.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 .venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 .venv/Lib/site-packages/pkg_resources/extern/__init__.py create mode 100644 .venv/Lib/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/__pycache__/setup.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/LICENSE create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/requests-2.26.0.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/requests/__init__.py create mode 100644 .venv/Lib/site-packages/requests/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/__version__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/_internal_utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/adapters.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/api.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/auth.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/certs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/cookies.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/help.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/hooks.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/models.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/packages.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/sessions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/status_codes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/structures.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/requests/__version__.py create mode 100644 .venv/Lib/site-packages/requests/_internal_utils.py create mode 100644 .venv/Lib/site-packages/requests/adapters.py create mode 100644 .venv/Lib/site-packages/requests/api.py create mode 100644 .venv/Lib/site-packages/requests/auth.py create mode 100644 .venv/Lib/site-packages/requests/certs.py create mode 100644 .venv/Lib/site-packages/requests/compat.py create mode 100644 .venv/Lib/site-packages/requests/cookies.py create mode 100644 .venv/Lib/site-packages/requests/exceptions.py create mode 100644 .venv/Lib/site-packages/requests/help.py create mode 100644 .venv/Lib/site-packages/requests/hooks.py create mode 100644 .venv/Lib/site-packages/requests/models.py create mode 100644 .venv/Lib/site-packages/requests/packages.py create mode 100644 .venv/Lib/site-packages/requests/sessions.py create mode 100644 .venv/Lib/site-packages/requests/status_codes.py create mode 100644 .venv/Lib/site-packages/requests/structures.py create mode 100644 .venv/Lib/site-packages/requests/utils.py create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/LICENSE create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/REQUESTED create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/entry_points.txt create mode 100644 .venv/Lib/site-packages/setuptools-58.1.0.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/setuptools/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/_imp.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/archive_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/build_meta.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/config.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/dep_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/depends.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/dist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/extension.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/glob.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/installer.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/launch.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/monkey.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/msvc.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/namespaces.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/package_index.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/py34compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/sandbox.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/unicode_utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/wheel.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/__pycache__/windows_support.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_deprecation_warning.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/_msvccompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/archive_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/bcppcompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/ccompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/cmd.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/config.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/core.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/cygwinccompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/debug.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/dep_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/dir_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/dist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/extension.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/fancy_getopt.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/file_util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/filelist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/log.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvc9compiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvccompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/py35compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/py38compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/spawn.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/sysconfig.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/text_file.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/unixccompiler.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/__pycache__/versionpredicate.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/archive_util.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/cmd.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_msi.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_wininst.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_clib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_ext.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_py.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_scripts.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/check.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/clean.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/config.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_data.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_egg_info.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_headers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_lib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_scripts.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/py37compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/register.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/sdist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/upload.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/build.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/check.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/clean.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/config.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/register.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/command/upload.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/config.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/core.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/debug.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/dep_util.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/dir_util.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/dist.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/errors.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/extension.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/file_util.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/filelist.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/log.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/py35compat.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/py38compat.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/spawn.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/text_file.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/util.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/version.py create mode 100644 .venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 .venv/Lib/site-packages/setuptools/_imp.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/more.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_typing.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 .venv/Lib/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 .venv/Lib/site-packages/setuptools/archive_util.py create mode 100644 .venv/Lib/site-packages/setuptools/build_meta.py create mode 100644 .venv/Lib/site-packages/setuptools/cli-32.exe create mode 100644 .venv/Lib/site-packages/setuptools/cli-64.exe create mode 100644 .venv/Lib/site-packages/setuptools/cli.exe create mode 100644 .venv/Lib/site-packages/setuptools/command/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/alias.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/build_clib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/build_ext.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/build_py.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/develop.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/dist_info.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/easy_install.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/egg_info.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/install.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/install_lib.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/install_scripts.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/py36compat.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/register.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/rotate.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/saveopts.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/sdist.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/setopt.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/test.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/upload.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/__pycache__/upload_docs.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/command/alias.py create mode 100644 .venv/Lib/site-packages/setuptools/command/bdist_egg.py create mode 100644 .venv/Lib/site-packages/setuptools/command/bdist_rpm.py create mode 100644 .venv/Lib/site-packages/setuptools/command/build_clib.py create mode 100644 .venv/Lib/site-packages/setuptools/command/build_ext.py create mode 100644 .venv/Lib/site-packages/setuptools/command/build_py.py create mode 100644 .venv/Lib/site-packages/setuptools/command/develop.py create mode 100644 .venv/Lib/site-packages/setuptools/command/dist_info.py create mode 100644 .venv/Lib/site-packages/setuptools/command/easy_install.py create mode 100644 .venv/Lib/site-packages/setuptools/command/egg_info.py create mode 100644 .venv/Lib/site-packages/setuptools/command/install.py create mode 100644 .venv/Lib/site-packages/setuptools/command/install_egg_info.py create mode 100644 .venv/Lib/site-packages/setuptools/command/install_lib.py create mode 100644 .venv/Lib/site-packages/setuptools/command/install_scripts.py create mode 100644 .venv/Lib/site-packages/setuptools/command/launcher manifest.xml create mode 100644 .venv/Lib/site-packages/setuptools/command/py36compat.py create mode 100644 .venv/Lib/site-packages/setuptools/command/register.py create mode 100644 .venv/Lib/site-packages/setuptools/command/rotate.py create mode 100644 .venv/Lib/site-packages/setuptools/command/saveopts.py create mode 100644 .venv/Lib/site-packages/setuptools/command/sdist.py create mode 100644 .venv/Lib/site-packages/setuptools/command/setopt.py create mode 100644 .venv/Lib/site-packages/setuptools/command/test.py create mode 100644 .venv/Lib/site-packages/setuptools/command/upload.py create mode 100644 .venv/Lib/site-packages/setuptools/command/upload_docs.py create mode 100644 .venv/Lib/site-packages/setuptools/config.py create mode 100644 .venv/Lib/site-packages/setuptools/dep_util.py create mode 100644 .venv/Lib/site-packages/setuptools/depends.py create mode 100644 .venv/Lib/site-packages/setuptools/dist.py create mode 100644 .venv/Lib/site-packages/setuptools/errors.py create mode 100644 .venv/Lib/site-packages/setuptools/extension.py create mode 100644 .venv/Lib/site-packages/setuptools/extern/__init__.py create mode 100644 .venv/Lib/site-packages/setuptools/extern/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/setuptools/glob.py create mode 100644 .venv/Lib/site-packages/setuptools/gui-32.exe create mode 100644 .venv/Lib/site-packages/setuptools/gui-64.exe create mode 100644 .venv/Lib/site-packages/setuptools/gui.exe create mode 100644 .venv/Lib/site-packages/setuptools/installer.py create mode 100644 .venv/Lib/site-packages/setuptools/launch.py create mode 100644 .venv/Lib/site-packages/setuptools/monkey.py create mode 100644 .venv/Lib/site-packages/setuptools/msvc.py create mode 100644 .venv/Lib/site-packages/setuptools/namespaces.py create mode 100644 .venv/Lib/site-packages/setuptools/package_index.py create mode 100644 .venv/Lib/site-packages/setuptools/py34compat.py create mode 100644 .venv/Lib/site-packages/setuptools/sandbox.py create mode 100644 .venv/Lib/site-packages/setuptools/script (dev).tmpl create mode 100644 .venv/Lib/site-packages/setuptools/script.tmpl create mode 100644 .venv/Lib/site-packages/setuptools/unicode_utils.py create mode 100644 .venv/Lib/site-packages/setuptools/version.py create mode 100644 .venv/Lib/site-packages/setuptools/wheel.py create mode 100644 .venv/Lib/site-packages/setuptools/windows_support.py create mode 100644 .venv/Lib/site-packages/soupsieve-2.8.3.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/soupsieve-2.8.3.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/soupsieve-2.8.3.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/soupsieve-2.8.3.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/soupsieve-2.8.3.dist-info/licenses/LICENSE.md create mode 100644 .venv/Lib/site-packages/soupsieve/__init__.py create mode 100644 .venv/Lib/site-packages/soupsieve/__meta__.py create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/__meta__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/css_match.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/css_parser.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/css_types.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/pretty.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/__pycache__/util.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/soupsieve/css_match.py create mode 100644 .venv/Lib/site-packages/soupsieve/css_parser.py create mode 100644 .venv/Lib/site-packages/soupsieve/css_types.py create mode 100644 .venv/Lib/site-packages/soupsieve/pretty.py create mode 100644 .venv/Lib/site-packages/soupsieve/py.typed create mode 100644 .venv/Lib/site-packages/soupsieve/util.py create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/INSTALLER create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/LICENSE.txt create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/METADATA create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/RECORD create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/WHEEL create mode 100644 .venv/Lib/site-packages/urllib3-1.26.20.dist-info/top_level.txt create mode 100644 .venv/Lib/site-packages/urllib3/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/_collections.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/_version.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/connection.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/connectionpool.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/fields.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/filepost.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/poolmanager.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/request.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/__pycache__/response.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/_collections.py create mode 100644 .venv/Lib/site-packages/urllib3/_version.py create mode 100644 .venv/Lib/site-packages/urllib3/connection.py create mode 100644 .venv/Lib/site-packages/urllib3/connectionpool.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/_appengine_environ.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/appengine.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/ntlmpool.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/securetransport.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/__pycache__/socks.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_appengine_environ.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/bindings.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/_securetransport/low_level.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/appengine.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/ntlmpool.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/pyopenssl.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/securetransport.py create mode 100644 .venv/Lib/site-packages/urllib3/contrib/socks.py create mode 100644 .venv/Lib/site-packages/urllib3/exceptions.py create mode 100644 .venv/Lib/site-packages/urllib3/fields.py create mode 100644 .venv/Lib/site-packages/urllib3/filepost.py create mode 100644 .venv/Lib/site-packages/urllib3/packages/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/packages/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/packages/__pycache__/six.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/__pycache__/makefile.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/makefile.py create mode 100644 .venv/Lib/site-packages/urllib3/packages/backports/weakref_finalize.py create mode 100644 .venv/Lib/site-packages/urllib3/packages/six.py create mode 100644 .venv/Lib/site-packages/urllib3/poolmanager.py create mode 100644 .venv/Lib/site-packages/urllib3/request.py create mode 100644 .venv/Lib/site-packages/urllib3/response.py create mode 100644 .venv/Lib/site-packages/urllib3/util/__init__.py create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/connection.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/proxy.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/queue.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/request.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/response.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/retry.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/ssl_.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/ssltransport.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/timeout.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/url.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/__pycache__/wait.cpython-39.pyc create mode 100644 .venv/Lib/site-packages/urllib3/util/connection.py create mode 100644 .venv/Lib/site-packages/urllib3/util/proxy.py create mode 100644 .venv/Lib/site-packages/urllib3/util/queue.py create mode 100644 .venv/Lib/site-packages/urllib3/util/request.py create mode 100644 .venv/Lib/site-packages/urllib3/util/response.py create mode 100644 .venv/Lib/site-packages/urllib3/util/retry.py create mode 100644 .venv/Lib/site-packages/urllib3/util/ssl_.py create mode 100644 .venv/Lib/site-packages/urllib3/util/ssl_match_hostname.py create mode 100644 .venv/Lib/site-packages/urllib3/util/ssltransport.py create mode 100644 .venv/Lib/site-packages/urllib3/util/timeout.py create mode 100644 .venv/Lib/site-packages/urllib3/util/url.py create mode 100644 .venv/Lib/site-packages/urllib3/util/wait.py create mode 100644 .venv/Scripts/Activate.ps1 create mode 100644 .venv/Scripts/activate create mode 100644 .venv/Scripts/activate.bat create mode 100644 .venv/Scripts/deactivate.bat create mode 100644 .venv/Scripts/normalizer.exe create mode 100644 .venv/Scripts/pip.exe create mode 100644 .venv/Scripts/pip3.9.exe create mode 100644 .venv/Scripts/pip3.exe create mode 100644 .venv/Scripts/python.exe create mode 100644 .venv/Scripts/pythonw.exe create mode 100644 .venv/pyvenv.cfg create mode 100644 Weather_Crawling.py create mode 100644 __init__.py create mode 100644 custom_lib/CHANGELOG.md create mode 100644 custom_lib/Custom_Lib.py create mode 100644 custom_lib/README.md create mode 100644 custom_lib/__init__.py create mode 100644 custom_lib/__pycache__/Custom_Lib.cpython-39.pyc create mode 100644 custom_lib/__pycache__/__init__.cpython-39.pyc create mode 100644 custom_lib/__pycache__/my_file_config.cpython-39.pyc create mode 100644 custom_lib/__pycache__/my_logger.cpython-39.pyc create mode 100644 custom_lib/__pycache__/my_uuid.cpython-39.pyc create mode 100644 custom_lib/crawling/__init__.py create mode 100644 custom_lib/crawling/__pycache__/__init__.cpython-39.pyc create mode 100644 custom_lib/crawling/__pycache__/my_crawling.cpython-39.pyc create mode 100644 custom_lib/crawling/my_crawling.py create mode 100644 custom_lib/image/__init__.py create mode 100644 custom_lib/image/__pycache__/__init__.cpython-39.pyc create mode 100644 custom_lib/image/__pycache__/my_image.cpython-39.pyc create mode 100644 custom_lib/image/my_image.py create mode 100644 custom_lib/my_file_config.py create mode 100644 custom_lib/my_logger.py create mode 100644 custom_lib/my_uuid.py create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa9d581 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# 20260508 tak created gitignore +.DS_Store +.idea/ +/log +/__pycache__ +/doc +/custom_lib.egg-info diff --git a/.venv/Lib/site-packages/__editable__.custom_lib-1.0.3.pth b/.venv/Lib/site-packages/__editable__.custom_lib-1.0.3.pth new file mode 100644 index 0000000..498b163 --- /dev/null +++ b/.venv/Lib/site-packages/__editable__.custom_lib-1.0.3.pth @@ -0,0 +1 @@ +import __editable___custom_lib_1_0_3_finder; __editable___custom_lib_1_0_3_finder.install() \ No newline at end of file diff --git a/.venv/Lib/site-packages/__editable___custom_lib_1_0_3_finder.py b/.venv/Lib/site-packages/__editable___custom_lib_1_0_3_finder.py new file mode 100644 index 0000000..f98d31c --- /dev/null +++ b/.venv/Lib/site-packages/__editable___custom_lib_1_0_3_finder.py @@ -0,0 +1,85 @@ +from __future__ import annotations +import sys +from importlib.machinery import ModuleSpec, PathFinder +from importlib.machinery import all_suffixes as module_suffixes +from importlib.util import spec_from_file_location +from itertools import chain +from pathlib import Path + +MAPPING: dict[str, str] = {'custom_lib': '\\\\Mac\\Home\\Repo\\01_python\\03_private\\weather_crawling\\custom_lib'} +NAMESPACES: dict[str, list[str]] = {} +PATH_PLACEHOLDER = '__editable__.custom_lib-1.0.3.finder' + ".__path_hook__" + + +class _EditableFinder: # MetaPathFinder + @classmethod + def find_spec(cls, fullname: str, path=None, target=None) -> ModuleSpec | None: # type: ignore + # Top-level packages and modules (we know these exist in the FS) + if fullname in MAPPING: + pkg_path = MAPPING[fullname] + return cls._find_spec(fullname, Path(pkg_path)) + + # Handle immediate children modules (required for namespaces to work) + # To avoid problems with case sensitivity in the file system we delegate + # to the importlib.machinery implementation. + parent, _, child = fullname.rpartition(".") + if parent and parent in MAPPING: + return PathFinder.find_spec(fullname, path=[MAPPING[parent]]) + + # Other levels of nesting should be handled automatically by importlib + # using the parent path. + return None + + @classmethod + def _find_spec(cls, fullname: str, candidate_path: Path) -> ModuleSpec | None: + init = candidate_path / "__init__.py" + candidates = (candidate_path.with_suffix(x) for x in module_suffixes()) + for candidate in chain([init], candidates): + if candidate.exists(): + return spec_from_file_location(fullname, candidate) + return None + + +class _EditableNamespaceFinder: # PathEntryFinder + @classmethod + def _path_hook(cls, path) -> type[_EditableNamespaceFinder]: + if path == PATH_PLACEHOLDER: + return cls + raise ImportError + + @classmethod + def _paths(cls, fullname: str) -> list[str]: + paths = NAMESPACES[fullname] + if not paths and fullname in MAPPING: + paths = [MAPPING[fullname]] + # Always add placeholder, for 2 reasons: + # 1. __path__ cannot be empty for the spec to be considered namespace. + # 2. In the case of nested namespaces, we need to force + # import machinery to query _EditableNamespaceFinder again. + return [*paths, PATH_PLACEHOLDER] + + @classmethod + def find_spec(cls, fullname: str, target=None) -> ModuleSpec | None: # type: ignore + if fullname in NAMESPACES: + spec = ModuleSpec(fullname, None, is_package=True) + spec.submodule_search_locations = cls._paths(fullname) + return spec + return None + + @classmethod + def find_module(cls, _fullname) -> None: + return None + + +def install(): + if not any(finder == _EditableFinder for finder in sys.meta_path): + sys.meta_path.append(_EditableFinder) + + if not NAMESPACES: + return + + if not any(hook == _EditableNamespaceFinder._path_hook for hook in sys.path_hooks): + # PathEntryFinder is needed to create NamespaceSpec without private APIS + sys.path_hooks.append(_EditableNamespaceFinder._path_hook) + if PATH_PLACEHOLDER not in sys.path: + sys.path.append(PATH_PLACEHOLDER) # Used just to trigger the path hook diff --git a/.venv/Lib/site-packages/__pycache__/__editable___custom_lib_1_0_3_finder.cpython-39.pyc b/.venv/Lib/site-packages/__pycache__/__editable___custom_lib_1_0_3_finder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a96b21ba6beb931fff1d951accc4cdf5e169b710 GIT binary patch literal 3435 zcmb7H&2JmW6`z^i<;RkuXjyJzr*YIIEy6Zt<@iz*sv#p*VEMC_h?MwKW#ApsDJh7uJ|+1Xn&|YEdzeN z`QGp2R7Dz`^)N|fw!gCzzl<`B-^#!vcl4kycj6?H$)IPC!IIb83*!`oOD6<=Z$Hby zmc&m+>)r07u-APs=tteJqv4>tdRq<;^SwdZUA-fRIz9;VsQV(qzDUcS4qqg3y4#&Q zp`qel{!Nzak5};7Hswe6Ha9=-d^TF1EhKSfS+=*0-?{f_V{7x?ryE! zu58cFymh<1+P>4?v8uME9O8DlHyAvVvPX8Be>@D<$;-b15wUsdzPmEB|H^o!Gf1P?!c=zl zlOzrMktyjY-`8o+ofD}7nxy)aq3!-XHT5NAXkM zbtc}VG%1fgy*c*mp3U5S>e2qOcb)BWCH@9}#UQcMF}zJKCF8V8x{8a857(zkQY2^+ z!}xj_>O7`!(j=p)P8nJir3c-I@sn;A=h3ZU*n1Z4Mp<{>|8nMkd0Vc^J64xSw}*%N8tx=H zvj#rQsqhMKdQD#E%kJp<1;^R2nVF#FSPf017p5v!h-RyrZsMRGLB#n}0zoFi9M2wr z_!fZi4x2cCWjipua*iuGJ7V|Q5udm@A3M7o4ixv<_Kk@*_D;kp(;wx|n2)_9AsB~~ zo_}Or<#t9jDdRNG5#__f9zVYlzXC7adWUX(8^oAxHz)jCc7m`t<$uCC&jC|g>^1Me z+qD-lQlZFtpo3_y8vgP%*Y9Gd^^E>0C{tbAjne4lP~ZI!!~fuAqgxm4G>et?8i7TU z-EB|zwOq5i95G;mf>9j^(2pmy6mGoldJ{DpFGZNr{k`XL3qYm-6|3XfqQlwO$ftSw8}p zDH}od#zG1T;+eg44MPg8jFP6p1z)}*xShQmZvwE+;SECM6(_{8s6to++)-uV4{Ah# zG?=@B*_xfLs|AZnCCoPLUaAy?NM+?Czn9G0Q!8|!YKEkV3TPVL%nygrH4{82blY|CxRqDEXrW6i`QK~G2+Z-|ew291S7g+?b&ClE|Q}3JdnWkUhIvW8D zHL5OL?uup6;6B&uSZQ6OBDAxQMi2!_Q-JClt%hclV@xzrU?f0 z&xx@yW8BZ<#MV|*MW>|m!2m6qExct?0B708u4wlbrJVbB0e4f*7CKQyEA(6^YL?_P f?J8?UmfWQTwY^8fmft!O9)E)RE7xhf+j#GP{cj?S literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/_distutils_hack/__init__.py b/.venv/Lib/site-packages/_distutils_hack/__init__.py new file mode 100644 index 0000000..5f40996 --- /dev/null +++ b/.venv/Lib/site-packages/_distutils_hack/__init__.py @@ -0,0 +1,128 @@ +import sys +import os +import re +import importlib +import warnings + + +is_pypy = '__pypy__' in sys.builtin_module_names + + +warnings.filterwarnings('ignore', + r'.+ distutils\b.+ deprecated', + DeprecationWarning) + + +def warn_distutils_present(): + if 'distutils' not in sys.modules: + return + if is_pypy and sys.version_info < (3, 7): + # PyPy for 3.6 unconditionally imports distutils, so bypass the warning + # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 + return + warnings.warn( + "Distutils was imported before Setuptools, but importing Setuptools " + "also replaces the `distutils` module in `sys.modules`. This may lead " + "to undesirable behaviors or errors. To avoid these issues, avoid " + "using distutils directly, ensure that setuptools is installed in the " + "traditional way (e.g. not an editable install), and/or make sure " + "that setuptools is always imported before distutils.") + + +def clear_distutils(): + if 'distutils' not in sys.modules: + return + warnings.warn("Setuptools is replacing distutils.") + mods = [name for name in sys.modules if re.match(r'distutils\b', name)] + for name in mods: + del sys.modules[name] + + +def enabled(): + """ + Allow selection of distutils by environment variable. + """ + which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib') + return which == 'local' + + +def ensure_local_distutils(): + clear_distutils() + distutils = importlib.import_module('setuptools._distutils') + distutils.__name__ = 'distutils' + sys.modules['distutils'] = distutils + + # sanity check that submodules load as expected + core = importlib.import_module('distutils.core') + assert '_distutils' in core.__file__, core.__file__ + + +def do_override(): + """ + Ensure that the local copy of distutils is preferred over stdlib. + + See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 + for more motivation. + """ + if enabled(): + warn_distutils_present() + ensure_local_distutils() + + +class DistutilsMetaFinder: + def find_spec(self, fullname, path, target=None): + if path is not None: + return + + method_name = 'spec_for_{fullname}'.format(**locals()) + method = getattr(self, method_name, lambda: None) + return method() + + def spec_for_distutils(self): + import importlib.abc + import importlib.util + + class DistutilsLoader(importlib.abc.Loader): + + def create_module(self, spec): + return importlib.import_module('setuptools._distutils') + + def exec_module(self, module): + pass + + return importlib.util.spec_from_loader('distutils', DistutilsLoader()) + + def spec_for_pip(self): + """ + Ensure stdlib distutils when running under pip. + See pypa/pip#8761 for rationale. + """ + if self.pip_imported_during_build(): + return + clear_distutils() + self.spec_for_distutils = lambda: None + + @staticmethod + def pip_imported_during_build(): + """ + Detect if pip is being imported in a build script. Ref #2355. + """ + import traceback + return any( + frame.f_globals['__file__'].endswith('setup.py') + for frame, line in traceback.walk_stack(None) + ) + + +DISTUTILS_FINDER = DistutilsMetaFinder() + + +def add_shim(): + sys.meta_path.insert(0, DISTUTILS_FINDER) + + +def remove_shim(): + try: + sys.meta_path.remove(DISTUTILS_FINDER) + except ValueError: + pass diff --git a/.venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-39.pyc b/.venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d54f9d280c86bf209e4b049e43dbda233d9a64cc GIT binary patch literal 5116 zcmbtYO>^7E8Qujz3Zg!&$WH3C%@mE3G@RO$?Zi!-QI!wNN!;3WYT5CW!wd{^mm*}4 zpm#yZVx>#vnI@M``wyg0x7Vlw}UYz9?uz!_T~LGX40?S-9QtN_4k$QD3)8#3wlk~og^d9Tq=hVR4f=ENH> zh;-~J*^7dv)Lzn--h+I-2VN%@{YZLY*L$FMbtP-+2NmybJJen$*!3bA2rr4fepg5x zs-S`44cQL1!&qrAR-RM}PxvDCg6%lO;I`D5QtQ41u&l4I30A%^o*>L5+CA^duI^(m zNjpe9oo@)A1C&mJD8haLkANpC5MdI=-5`QIcD=V{WwYXSQQZA-8M3c@8Ws}Z?+OQ>^-cvat#0d}eUrV4f<%v7&z z%kFmlX4t6fFp(E}LGxj-DRte?(fMukt@uC?Ccarb@A2QVN9PT{ z3spta4PGCUm2{gCa*7j`CJ3KjgrkVEfuetoY7;Abb%y3YgyY!bN0xH-_}{HZ4y=d| z=5m?T8)YlCluQeqAZfO#QMs5p-Jm1KDp3oVGA*q}FtBFa>8-ti_P6W(^9LNb|(`LcF)h$w8N1tW>F zomw#rVmMW5Z_1?1)5146mQ6~Jf5#}s%MGBqT<`nHd!P|r#FwPRQ)g#bL zSbNO3_gLa=6@;~#y@4Cu=K?g?DsD5q_B+sGt9Zcw41z!;h3dC2k3C9dtkH~-i#cN| zO?cC^G#*f%F^WiMGmlGKU&tQ)%nPK57(^)FAM=3vT498~vSn6C9h&#JKwillo^M1s zUh)$5JfuSrCW>O0xFS|g$q8+UWr_|5Of4teNXw$yL^f;iPovc96W*0vs9Du(#=YHX zX22xjDO&L5aJMlWo0qA)QZmzQNa?kcq^CbvS=kJecE16cbyg5GgO#y}S2CZ!^6sVg z&Y4GyA);M)=j!FlSKoj4;w3W~Vi)2Le10cR$n$}w83U_j+c3j;CA0Sl;Tdx>Ry!wR zpCGDG$W_QflPR*9B7~;i#M23Z+35TTMPEiG86_S_I!eM4_7je@!x06f1db?*8Qcr9 zC|oi71YWH+V}v=Eo?agX;#)EaJ`E8IRkdm8j4A0N43z9#L(%V|+Cy5?=W3p)DEJm@ zu@Iy^VE^EM<@-(oI`1LT0Rnbl?-%w82U#{SIIVlK=|e{TpIZGWB9`r+*bz~{ct(Oi zD?H`Z37anh6Fh2K%-mr*1G5j3 zL?J*r@Heg09pO!#9wJ#0C!5)CprSX)$X|fHgXu&DXvGc-kbD@Q04I48J&d z?S*Jh#0?S(>0G~$3Z9Zh?3?V)zhR%Tzpxg(CnWC*`)jskZQ0NO#}j2{a3%-rh&(DH z7m4|V>}h7Yw1;ZMCNn2yed2;oCNhFg1|uVIWi|7!!ojWwF$t#|9=5b%v&uN)GskN zqQP(_917-r|4~0MrU-|Bh2Xw7!mP;FC**o62a{><9$uTc=UVf&`hW%#fnYSlh=Sl! z2^!6GF^@GBI&`Eqbr!QpQpa>HWm-^i2hoG5F%(!ft+985#wd9Cq{{w4SX@*LrsY~^ z-N9Qq+8642%ECy2M3rkO#s>C4!6V3kd}S7hGQWm^jXVX!bOu|-@l$>>3`kjYnMh4` z+Oq4ZewR{cbJkE^FYIM;fxe>%WWo)4&%OWNZ!UQhMwE#j!6=2Hfz=ZR`vS&IP%L+s z>TPUn6D9MMmtQC%!Z?v1=Faj}yzocoHDB}*_OW<#SLWVsVloe?;tn9 zz?U#EEwmJ3XX@Z6bs`CyUEP#j`M9UnVnRSr9IN>K;G^dW_Xkxuq508th?BE8rZ!~* z2Q%1kcQ-BV1kpnuN7?2>Xq>{^F^#KF&=(R8W1CR4Yq{SIF8nAgWnL}2#&s!*dg>}w zlQNJl%F&FPj6J$uitqdsMHMva+7x0d5qbHp-O#$ z=M#uXh_qczc05?hFaZ(g>^|!*J2*n@zRtlb&i=@{)eRT9fQ+7Duo&|)tS@>@uu=3.6.0 +Description-Content-Type: text/markdown +Requires-Dist: soupsieve (>1.2) +Provides-Extra: html5lib +Requires-Dist: html5lib ; extra == 'html5lib' +Provides-Extra: lxml +Requires-Dist: lxml ; extra == 'lxml' + +Beautiful Soup is a library that makes it easy to scrape information +from web pages. It sits atop an HTML or XML parser, providing Pythonic +idioms for iterating, searching, and modifying the parse tree. + +# Quick start + +``` +>>> from bs4 import BeautifulSoup +>>> soup = BeautifulSoup("

SomebadHTML") +>>> print(soup.prettify()) + + +

+ Some + + bad + + HTML + + +

+ + +>>> soup.find(text="bad") +'bad' +>>> soup.i +HTML +# +>>> soup = BeautifulSoup("SomebadXML", "xml") +# +>>> print(soup.prettify()) + + + Some + + bad + + XML + + +``` + +To go beyond the basics, [comprehensive documentation is available](https://www.crummy.com/software/BeautifulSoup/bs4/doc/). + +# Links + +* [Homepage](https://www.crummy.com/software/BeautifulSoup/bs4/) +* [Documentation](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) +* [Discussion group](https://groups.google.com/group/beautifulsoup/) +* [Development](https://code.launchpad.net/beautifulsoup/) +* [Bug tracker](https://bugs.launchpad.net/beautifulsoup/) +* [Complete changelog](https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG) + +# Note on Python 2 sunsetting + +Beautiful Soup's support for Python 2 was discontinued on December 31, +2020: one year after the sunset date for Python 2 itself. From this +point onward, new Beautiful Soup development will exclusively target +Python 3. The final release of Beautiful Soup 4 to support Python 2 +was 4.9.3. + +# Supporting the project + +If you use Beautiful Soup as part of your professional work, please consider a +[Tidelift subscription](https://tidelift.com/subscription/pkg/pypi-beautifulsoup4?utm_source=pypi-beautifulsoup4&utm_medium=referral&utm_campaign=readme). +This will support many of the free software projects your organization +depends on, not just Beautiful Soup. + +If you use Beautiful Soup for personal projects, the best way to say +thank you is to read +[Tool Safety](https://www.crummy.com/software/BeautifulSoup/zine/), a zine I +wrote about what Beautiful Soup has taught me about software +development. + +# Building the documentation + +The bs4/doc/ directory contains full documentation in Sphinx +format. Run `make html` in that directory to create HTML +documentation. + +# Running the unit tests + +Beautiful Soup supports unit test discovery using Pytest: + +``` +$ pytest +``` + + + diff --git a/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/RECORD b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/RECORD new file mode 100644 index 0000000..9debe32 --- /dev/null +++ b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/RECORD @@ -0,0 +1,55 @@ +beautifulsoup4-4.11.2.dist-info/AUTHORS,sha256=uSIdbrBb1sobdXl7VrlUvuvim2dN9kF3MH4Edn0WKGE,2176 +beautifulsoup4-4.11.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +beautifulsoup4-4.11.2.dist-info/LICENSE,sha256=VbTY1LHlvIbRDvrJG3TIe8t3UmsPW57a-LnNKtxzl7I,1441 +beautifulsoup4-4.11.2.dist-info/METADATA,sha256=jVN3HgxwfZMiRGCvQ-M26DbYTna1JZHIhGoQpsF_dDY,3481 +beautifulsoup4-4.11.2.dist-info/RECORD,, +beautifulsoup4-4.11.2.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92 +beautifulsoup4-4.11.2.dist-info/top_level.txt,sha256=gpUVJcTwW3q7-QGp6tAEomZsskknmgSqVe6xn1C0jJI,26 +bs4/__init__.py,sha256=_8wGj0EDYCD1EKXJGc1c0cuwlt6WNrk_yf6BMrz1ATU,32908 +bs4/__pycache__/__init__.cpython-39.pyc,, +bs4/__pycache__/dammit.cpython-39.pyc,, +bs4/__pycache__/diagnose.cpython-39.pyc,, +bs4/__pycache__/element.cpython-39.pyc,, +bs4/__pycache__/formatter.cpython-39.pyc,, +bs4/builder/__init__.py,sha256=KGBl_FgX1KV1wBIshW4EXlWjP3KLcRiF2opZ-zVcyAc,24393 +bs4/builder/__pycache__/__init__.cpython-39.pyc,, +bs4/builder/__pycache__/_html5lib.cpython-39.pyc,, +bs4/builder/__pycache__/_htmlparser.cpython-39.pyc,, +bs4/builder/__pycache__/_lxml.cpython-39.pyc,, +bs4/builder/_html5lib.py,sha256=LnhimXrUdKujKoHHbmzwNk8OBb11YfTRFXUwhZjwqow,19078 +bs4/builder/_htmlparser.py,sha256=K4wEtxzvg8Zxace9UyqNLJpy9ADZRvlpMzM8BGbPhLI,13736 +bs4/builder/_lxml.py,sha256=ik6BFGnxAzV2-21S_Wc-7ZeA174muSA_ZhmpnAe3g0E,14904 +bs4/dammit.py,sha256=G0cQfsEqfwJ-FIQMkXgCJwSHMn7t9vPepCrud6fZEKk,41158 +bs4/diagnose.py,sha256=MRbN2bJSpa8VFt8HemqP8BK9hL5ronCxZmrfGRZYwBg,7911 +bs4/element.py,sha256=NF3n9C9g8jFPNG3HhCKSIla2Kdv8o8kIJzEg_rcoqsU,87687 +bs4/formatter.py,sha256=1LbCGDzW6k4FmxoP3QyLKLzzrP5Qm2eOwAawVB0nLLE,7192 +bs4/tests/__init__.py,sha256=_bTVNKsMjaB0z7u_jk8WCBgfyp7cUGG-FNPl3AI-keY,49569 +bs4/tests/__pycache__/__init__.cpython-39.pyc,, +bs4/tests/__pycache__/test_builder.cpython-39.pyc,, +bs4/tests/__pycache__/test_builder_registry.cpython-39.pyc,, +bs4/tests/__pycache__/test_dammit.cpython-39.pyc,, +bs4/tests/__pycache__/test_docs.cpython-39.pyc,, +bs4/tests/__pycache__/test_element.cpython-39.pyc,, +bs4/tests/__pycache__/test_formatter.cpython-39.pyc,, +bs4/tests/__pycache__/test_html5lib.cpython-39.pyc,, +bs4/tests/__pycache__/test_htmlparser.cpython-39.pyc,, +bs4/tests/__pycache__/test_lxml.cpython-39.pyc,, +bs4/tests/__pycache__/test_navigablestring.cpython-39.pyc,, +bs4/tests/__pycache__/test_pageelement.cpython-39.pyc,, +bs4/tests/__pycache__/test_soup.cpython-39.pyc,, +bs4/tests/__pycache__/test_tag.cpython-39.pyc,, +bs4/tests/__pycache__/test_tree.cpython-39.pyc,, +bs4/tests/test_builder.py,sha256=nc2JE5EMrEf-p24qhf2R8qAV5PpFiOuNpYCmtmCjlTI,1115 +bs4/tests/test_builder_registry.py,sha256=7WLj2prjSHGphebnrjQuI6JYr03Uy_c9_CkaFSQ9HRo,5114 +bs4/tests/test_dammit.py,sha256=MbSmRN6VEP0Rm56-w6Ja0TW8eC-8ZxOJ-wXWVf_hRi8,15451 +bs4/tests/test_docs.py,sha256=xoAxnUfoQ7aRqGImwW_9BJDU8WNMZHIuvWqVepvWXt8,1127 +bs4/tests/test_element.py,sha256=92oRSRoGk8gIXAbAGHErKzocx2MK32TqcQdUJ-dGQMo,2377 +bs4/tests/test_formatter.py,sha256=0qV9H7mMDBcnFFH-dwNCrSm2zNi_40WMB2GMcV35PoY,4128 +bs4/tests/test_html5lib.py,sha256=2-ipm-_MaPt37WTxEd5DodUTNhS4EbLFKPRaO6XSCW4,8322 +bs4/tests/test_htmlparser.py,sha256=rcRtGJR-VOhc7-1c2CjlvMBMVncvmOA8JaWis-XUL4k,5119 +bs4/tests/test_lxml.py,sha256=Pn__rhKDKd7vcvRLRRF28N0y8xxnfg6OG6ZQLxZ9_j4,7504 +bs4/tests/test_navigablestring.py,sha256=RGSgziNf7cZnYdEPsoqL1B2I68TUJp1JmEQVxbh_ryA,5081 +bs4/tests/test_pageelement.py,sha256=E5GaojisoP3IgAXzRmW3uZ_PuF3ztoIngHoED3aXQJg,28009 +bs4/tests/test_soup.py,sha256=GVmaD6ngxs9yTtenuODPVFYGBabvm2qFiDMXqN0ORGU,18035 +bs4/tests/test_tag.py,sha256=f19uie7QehvgvhIqNWfjDRR4TKa-ftm_RRoo6LXZyqk,9016 +bs4/tests/test_tree.py,sha256=n9nTQOzJb3-ZnZ6AkmMdZQ5TYcTUPnqHoVgal0mYXfg,48129 diff --git a/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/WHEEL b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/WHEEL new file mode 100644 index 0000000..b552003 --- /dev/null +++ b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.34.2) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/top_level.txt b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/top_level.txt new file mode 100644 index 0000000..34b5955 --- /dev/null +++ b/.venv/Lib/site-packages/beautifulsoup4-4.11.2.dist-info/top_level.txt @@ -0,0 +1,3 @@ +bs4 +bs4/builder +bs4/tests diff --git a/.venv/Lib/site-packages/bs4/__init__.py b/.venv/Lib/site-packages/bs4/__init__.py new file mode 100644 index 0000000..db71cc7 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/__init__.py @@ -0,0 +1,813 @@ +"""Beautiful Soup Elixir and Tonic - "The Screen-Scraper's Friend". + +http://www.crummy.com/software/BeautifulSoup/ + +Beautiful Soup uses a pluggable XML or HTML parser to parse a +(possibly invalid) document into a tree representation. Beautiful Soup +provides methods and Pythonic idioms that make it easy to navigate, +search, and modify the parse tree. + +Beautiful Soup works with Python 3.6 and up. It works better if lxml +and/or html5lib is installed. + +For more than you ever wanted to know about Beautiful Soup, see the +documentation: http://www.crummy.com/software/BeautifulSoup/bs4/doc/ +""" + +__author__ = "Leonard Richardson (leonardr@segfault.org)" +__version__ = "4.11.2" +__copyright__ = "Copyright (c) 2004-2023 Leonard Richardson" +# Use of this source code is governed by the MIT license. +__license__ = "MIT" + +__all__ = ['BeautifulSoup'] + +from collections import Counter +import os +import re +import sys +import traceback +import warnings + +# The very first thing we do is give a useful error if someone is +# running this code under Python 2. +if sys.version_info.major < 3: + raise ImportError('You are trying to use a Python 3-specific version of Beautiful Soup under Python 2. This will not work. The final version of Beautiful Soup to support Python 2 was 4.9.3.') + +from .builder import ( + builder_registry, + ParserRejectedMarkup, + XMLParsedAsHTMLWarning, +) +from .dammit import UnicodeDammit +from .element import ( + CData, + Comment, + DEFAULT_OUTPUT_ENCODING, + Declaration, + Doctype, + NavigableString, + PageElement, + ProcessingInstruction, + PYTHON_SPECIFIC_ENCODINGS, + ResultSet, + Script, + Stylesheet, + SoupStrainer, + Tag, + TemplateString, + ) + +# Define some custom warnings. +class GuessedAtParserWarning(UserWarning): + """The warning issued when BeautifulSoup has to guess what parser to + use -- probably because no parser was specified in the constructor. + """ + +class MarkupResemblesLocatorWarning(UserWarning): + """The warning issued when BeautifulSoup is given 'markup' that + actually looks like a resource locator -- a URL or a path to a file + on disk. + """ + + +class BeautifulSoup(Tag): + """A data structure representing a parsed HTML or XML document. + + Most of the methods you'll call on a BeautifulSoup object are inherited from + PageElement or Tag. + + Internally, this class defines the basic interface called by the + tree builders when converting an HTML/XML document into a data + structure. The interface abstracts away the differences between + parsers. To write a new tree builder, you'll need to understand + these methods as a whole. + + These methods will be called by the BeautifulSoup constructor: + * reset() + * feed(markup) + + The tree builder may call these methods from its feed() implementation: + * handle_starttag(name, attrs) # See note about return value + * handle_endtag(name) + * handle_data(data) # Appends to the current data node + * endData(containerClass) # Ends the current data node + + No matter how complicated the underlying parser is, you should be + able to build a tree using 'start tag' events, 'end tag' events, + 'data' events, and "done with data" events. + + If you encounter an empty-element tag (aka a self-closing tag, + like HTML's
tag), call handle_starttag and then + handle_endtag. + """ + + # Since BeautifulSoup subclasses Tag, it's possible to treat it as + # a Tag with a .name. This name makes it clear the BeautifulSoup + # object isn't a real markup tag. + ROOT_TAG_NAME = '[document]' + + # If the end-user gives no indication which tree builder they + # want, look for one with these features. + DEFAULT_BUILDER_FEATURES = ['html', 'fast'] + + # A string containing all ASCII whitespace characters, used in + # endData() to detect data chunks that seem 'empty'. + ASCII_SPACES = '\x20\x0a\x09\x0c\x0d' + + NO_PARSER_SPECIFIED_WARNING = "No parser was explicitly specified, so I'm using the best available %(markup_type)s parser for this system (\"%(parser)s\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n\nThe code that caused this warning is on line %(line_number)s of the file %(filename)s. To get rid of this warning, pass the additional argument 'features=\"%(parser)s\"' to the BeautifulSoup constructor.\n" + + def __init__(self, markup="", features=None, builder=None, + parse_only=None, from_encoding=None, exclude_encodings=None, + element_classes=None, **kwargs): + """Constructor. + + :param markup: A string or a file-like object representing + markup to be parsed. + + :param features: Desirable features of the parser to be + used. This may be the name of a specific parser ("lxml", + "lxml-xml", "html.parser", or "html5lib") or it may be the + type of markup to be used ("html", "html5", "xml"). It's + recommended that you name a specific parser, so that + Beautiful Soup gives you the same results across platforms + and virtual environments. + + :param builder: A TreeBuilder subclass to instantiate (or + instance to use) instead of looking one up based on + `features`. You only need to use this if you've implemented a + custom TreeBuilder. + + :param parse_only: A SoupStrainer. Only parts of the document + matching the SoupStrainer will be considered. This is useful + when parsing part of a document that would otherwise be too + large to fit into memory. + + :param from_encoding: A string indicating the encoding of the + document to be parsed. Pass this in if Beautiful Soup is + guessing wrongly about the document's encoding. + + :param exclude_encodings: A list of strings indicating + encodings known to be wrong. Pass this in if you don't know + the document's encoding but you know Beautiful Soup's guess is + wrong. + + :param element_classes: A dictionary mapping BeautifulSoup + classes like Tag and NavigableString, to other classes you'd + like to be instantiated instead as the parse tree is + built. This is useful for subclassing Tag or NavigableString + to modify default behavior. + + :param kwargs: For backwards compatibility purposes, the + constructor accepts certain keyword arguments used in + Beautiful Soup 3. None of these arguments do anything in + Beautiful Soup 4; they will result in a warning and then be + ignored. + + Apart from this, any keyword arguments passed into the + BeautifulSoup constructor are propagated to the TreeBuilder + constructor. This makes it possible to configure a + TreeBuilder by passing in arguments, not just by saying which + one to use. + """ + if 'convertEntities' in kwargs: + del kwargs['convertEntities'] + warnings.warn( + "BS4 does not respect the convertEntities argument to the " + "BeautifulSoup constructor. Entities are always converted " + "to Unicode characters.") + + if 'markupMassage' in kwargs: + del kwargs['markupMassage'] + warnings.warn( + "BS4 does not respect the markupMassage argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for any necessary markup massage.") + + if 'smartQuotesTo' in kwargs: + del kwargs['smartQuotesTo'] + warnings.warn( + "BS4 does not respect the smartQuotesTo argument to the " + "BeautifulSoup constructor. Smart quotes are always converted " + "to Unicode characters.") + + if 'selfClosingTags' in kwargs: + del kwargs['selfClosingTags'] + warnings.warn( + "BS4 does not respect the selfClosingTags argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for understanding self-closing tags.") + + if 'isHTML' in kwargs: + del kwargs['isHTML'] + warnings.warn( + "BS4 does not respect the isHTML argument to the " + "BeautifulSoup constructor. Suggest you use " + "features='lxml' for HTML and features='lxml-xml' for " + "XML.") + + def deprecated_argument(old_name, new_name): + if old_name in kwargs: + warnings.warn( + 'The "%s" argument to the BeautifulSoup constructor ' + 'has been renamed to "%s."' % (old_name, new_name), + DeprecationWarning, stacklevel=3 + ) + return kwargs.pop(old_name) + return None + + parse_only = parse_only or deprecated_argument( + "parseOnlyThese", "parse_only") + + from_encoding = from_encoding or deprecated_argument( + "fromEncoding", "from_encoding") + + if from_encoding and isinstance(markup, str): + warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") + from_encoding = None + + self.element_classes = element_classes or dict() + + # We need this information to track whether or not the builder + # was specified well enough that we can omit the 'you need to + # specify a parser' warning. + original_builder = builder + original_features = features + + if isinstance(builder, type): + # A builder class was passed in; it needs to be instantiated. + builder_class = builder + builder = None + elif builder is None: + if isinstance(features, str): + features = [features] + if features is None or len(features) == 0: + features = self.DEFAULT_BUILDER_FEATURES + builder_class = builder_registry.lookup(*features) + if builder_class is None: + raise FeatureNotFound( + "Couldn't find a tree builder with the features you " + "requested: %s. Do you need to install a parser library?" + % ",".join(features)) + + # At this point either we have a TreeBuilder instance in + # builder, or we have a builder_class that we can instantiate + # with the remaining **kwargs. + if builder is None: + builder = builder_class(**kwargs) + if not original_builder and not ( + original_features == builder.NAME or + original_features in builder.ALTERNATE_NAMES + ) and markup: + # The user did not tell us which TreeBuilder to use, + # and we had to guess. Issue a warning. + if builder.is_xml: + markup_type = "XML" + else: + markup_type = "HTML" + + # This code adapted from warnings.py so that we get the same line + # of code as our warnings.warn() call gets, even if the answer is wrong + # (as it may be in a multithreading situation). + caller = None + try: + caller = sys._getframe(1) + except ValueError: + pass + if caller: + globals = caller.f_globals + line_number = caller.f_lineno + else: + globals = sys.__dict__ + line_number= 1 + filename = globals.get('__file__') + if filename: + fnl = filename.lower() + if fnl.endswith((".pyc", ".pyo")): + filename = filename[:-1] + if filename: + # If there is no filename at all, the user is most likely in a REPL, + # and the warning is not necessary. + values = dict( + filename=filename, + line_number=line_number, + parser=builder.NAME, + markup_type=markup_type + ) + warnings.warn( + self.NO_PARSER_SPECIFIED_WARNING % values, + GuessedAtParserWarning, stacklevel=2 + ) + else: + if kwargs: + warnings.warn("Keyword arguments to the BeautifulSoup constructor will be ignored. These would normally be passed into the TreeBuilder constructor, but a TreeBuilder instance was passed in as `builder`.") + + self.builder = builder + self.is_xml = builder.is_xml + self.known_xml = self.is_xml + self._namespaces = dict() + self.parse_only = parse_only + + if hasattr(markup, 'read'): # It's a file-type object. + markup = markup.read() + elif len(markup) <= 256 and ( + (isinstance(markup, bytes) and not b'<' in markup) + or (isinstance(markup, str) and not '<' in markup) + ): + # Issue warnings for a couple beginner problems + # involving passing non-markup to Beautiful Soup. + # Beautiful Soup will still parse the input as markup, + # since that is sometimes the intended behavior. + if not self._markup_is_url(markup): + self._markup_resembles_filename(markup) + + rejections = [] + success = False + for (self.markup, self.original_encoding, self.declared_html_encoding, + self.contains_replacement_characters) in ( + self.builder.prepare_markup( + markup, from_encoding, exclude_encodings=exclude_encodings)): + self.reset() + self.builder.initialize_soup(self) + try: + self._feed() + success = True + break + except ParserRejectedMarkup as e: + rejections.append(e) + pass + + if not success: + other_exceptions = [str(e) for e in rejections] + raise ParserRejectedMarkup( + "The markup you provided was rejected by the parser. Trying a different parser or a different encoding may help.\n\nOriginal exception(s) from parser:\n " + "\n ".join(other_exceptions) + ) + + # Clear out the markup and remove the builder's circular + # reference to this object. + self.markup = None + self.builder.soup = None + + def __copy__(self): + """Copy a BeautifulSoup object by converting the document to a string and parsing it again.""" + copy = type(self)( + self.encode('utf-8'), builder=self.builder, from_encoding='utf-8' + ) + + # Although we encoded the tree to UTF-8, that may not have + # been the encoding of the original markup. Set the copy's + # .original_encoding to reflect the original object's + # .original_encoding. + copy.original_encoding = self.original_encoding + return copy + + def __getstate__(self): + # Frequently a tree builder can't be pickled. + d = dict(self.__dict__) + if 'builder' in d and d['builder'] is not None and not self.builder.picklable: + d['builder'] = None + return d + + @classmethod + def _decode_markup(cls, markup): + """Ensure `markup` is bytes so it's safe to send into warnings.warn. + + TODO: warnings.warn had this problem back in 2010 but it might not + anymore. + """ + if isinstance(markup, bytes): + decoded = markup.decode('utf-8', 'replace') + else: + decoded = markup + return decoded + + @classmethod + def _markup_is_url(cls, markup): + """Error-handling method to raise a warning if incoming markup looks + like a URL. + + :param markup: A string. + :return: Whether or not the markup resembles a URL + closely enough to justify a warning. + """ + if isinstance(markup, bytes): + space = b' ' + cant_start_with = (b"http:", b"https:") + elif isinstance(markup, str): + space = ' ' + cant_start_with = ("http:", "https:") + else: + return False + + if any(markup.startswith(prefix) for prefix in cant_start_with): + if not space in markup: + warnings.warn( + 'The input looks more like a URL than markup. You may want to use' + ' an HTTP client like requests to get the document behind' + ' the URL, and feed that document to Beautiful Soup.', + MarkupResemblesLocatorWarning, + stacklevel=3 + ) + return True + return False + + @classmethod + def _markup_resembles_filename(cls, markup): + """Error-handling method to raise a warning if incoming markup + resembles a filename. + + :param markup: A bytestring or string. + :return: Whether or not the markup resembles a filename + closely enough to justify a warning. + """ + path_characters = '/\\' + extensions = ['.html', '.htm', '.xml', '.xhtml', '.txt'] + if isinstance(markup, bytes): + path_characters = path_characters.encode("utf8") + extensions = [x.encode('utf8') for x in extensions] + filelike = False + if any(x in markup for x in path_characters): + filelike = True + else: + lower = markup.lower() + if any(lower.endswith(ext) for ext in extensions): + filelike = True + if filelike: + warnings.warn( + 'The input looks more like a filename than markup. You may' + ' want to open this file and pass the filehandle into' + ' Beautiful Soup.', + MarkupResemblesLocatorWarning, stacklevel=3 + ) + return True + return False + + def _feed(self): + """Internal method that parses previously set markup, creating a large + number of Tag and NavigableString objects. + """ + # Convert the document to Unicode. + self.builder.reset() + + self.builder.feed(self.markup) + # Close out any unfinished strings and close all the open tags. + self.endData() + while self.currentTag.name != self.ROOT_TAG_NAME: + self.popTag() + + def reset(self): + """Reset this object to a state as though it had never parsed any + markup. + """ + Tag.__init__(self, self, self.builder, self.ROOT_TAG_NAME) + self.hidden = 1 + self.builder.reset() + self.current_data = [] + self.currentTag = None + self.tagStack = [] + self.open_tag_counter = Counter() + self.preserve_whitespace_tag_stack = [] + self.string_container_stack = [] + self.pushTag(self) + + def new_tag(self, name, namespace=None, nsprefix=None, attrs={}, + sourceline=None, sourcepos=None, **kwattrs): + """Create a new Tag associated with this BeautifulSoup object. + + :param name: The name of the new Tag. + :param namespace: The URI of the new Tag's XML namespace, if any. + :param prefix: The prefix for the new Tag's XML namespace, if any. + :param attrs: A dictionary of this Tag's attribute values; can + be used instead of `kwattrs` for attributes like 'class' + that are reserved words in Python. + :param sourceline: The line number where this tag was + (purportedly) found in its source document. + :param sourcepos: The character position within `sourceline` where this + tag was (purportedly) found. + :param kwattrs: Keyword arguments for the new Tag's attribute values. + + """ + kwattrs.update(attrs) + return self.element_classes.get(Tag, Tag)( + None, self.builder, name, namespace, nsprefix, kwattrs, + sourceline=sourceline, sourcepos=sourcepos + ) + + def string_container(self, base_class=None): + container = base_class or NavigableString + + # There may be a general override of NavigableString. + container = self.element_classes.get( + container, container + ) + + # On top of that, we may be inside a tag that needs a special + # container class. + if self.string_container_stack and container is NavigableString: + container = self.builder.string_containers.get( + self.string_container_stack[-1].name, container + ) + return container + + def new_string(self, s, subclass=None): + """Create a new NavigableString associated with this BeautifulSoup + object. + """ + container = self.string_container(subclass) + return container(s) + + def insert_before(self, *args): + """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement + it because there is nothing before or after it in the parse tree. + """ + raise NotImplementedError("BeautifulSoup objects don't support insert_before().") + + def insert_after(self, *args): + """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement + it because there is nothing before or after it in the parse tree. + """ + raise NotImplementedError("BeautifulSoup objects don't support insert_after().") + + def popTag(self): + """Internal method called by _popToTag when a tag is closed.""" + tag = self.tagStack.pop() + if tag.name in self.open_tag_counter: + self.open_tag_counter[tag.name] -= 1 + if self.preserve_whitespace_tag_stack and tag == self.preserve_whitespace_tag_stack[-1]: + self.preserve_whitespace_tag_stack.pop() + if self.string_container_stack and tag == self.string_container_stack[-1]: + self.string_container_stack.pop() + #print("Pop", tag.name) + if self.tagStack: + self.currentTag = self.tagStack[-1] + return self.currentTag + + def pushTag(self, tag): + """Internal method called by handle_starttag when a tag is opened.""" + #print("Push", tag.name) + if self.currentTag is not None: + self.currentTag.contents.append(tag) + self.tagStack.append(tag) + self.currentTag = self.tagStack[-1] + if tag.name != self.ROOT_TAG_NAME: + self.open_tag_counter[tag.name] += 1 + if tag.name in self.builder.preserve_whitespace_tags: + self.preserve_whitespace_tag_stack.append(tag) + if tag.name in self.builder.string_containers: + self.string_container_stack.append(tag) + + def endData(self, containerClass=None): + """Method called by the TreeBuilder when the end of a data segment + occurs. + """ + if self.current_data: + current_data = ''.join(self.current_data) + # If whitespace is not preserved, and this string contains + # nothing but ASCII spaces, replace it with a single space + # or newline. + if not self.preserve_whitespace_tag_stack: + strippable = True + for i in current_data: + if i not in self.ASCII_SPACES: + strippable = False + break + if strippable: + if '\n' in current_data: + current_data = '\n' + else: + current_data = ' ' + + # Reset the data collector. + self.current_data = [] + + # Should we add this string to the tree at all? + if self.parse_only and len(self.tagStack) <= 1 and \ + (not self.parse_only.text or \ + not self.parse_only.search(current_data)): + return + + containerClass = self.string_container(containerClass) + o = containerClass(current_data) + self.object_was_parsed(o) + + def object_was_parsed(self, o, parent=None, most_recent_element=None): + """Method called by the TreeBuilder to integrate an object into the parse tree.""" + if parent is None: + parent = self.currentTag + if most_recent_element is not None: + previous_element = most_recent_element + else: + previous_element = self._most_recent_element + + next_element = previous_sibling = next_sibling = None + if isinstance(o, Tag): + next_element = o.next_element + next_sibling = o.next_sibling + previous_sibling = o.previous_sibling + if previous_element is None: + previous_element = o.previous_element + + fix = parent.next_element is not None + + o.setup(parent, previous_element, next_element, previous_sibling, next_sibling) + + self._most_recent_element = o + parent.contents.append(o) + + # Check if we are inserting into an already parsed node. + if fix: + self._linkage_fixer(parent) + + def _linkage_fixer(self, el): + """Make sure linkage of this fragment is sound.""" + + first = el.contents[0] + child = el.contents[-1] + descendant = child + + if child is first and el.parent is not None: + # Parent should be linked to first child + el.next_element = child + # We are no longer linked to whatever this element is + prev_el = child.previous_element + if prev_el is not None and prev_el is not el: + prev_el.next_element = None + # First child should be linked to the parent, and no previous siblings. + child.previous_element = el + child.previous_sibling = None + + # We have no sibling as we've been appended as the last. + child.next_sibling = None + + # This index is a tag, dig deeper for a "last descendant" + if isinstance(child, Tag) and child.contents: + descendant = child._last_descendant(False) + + # As the final step, link last descendant. It should be linked + # to the parent's next sibling (if found), else walk up the chain + # and find a parent with a sibling. It should have no next sibling. + descendant.next_element = None + descendant.next_sibling = None + target = el + while True: + if target is None: + break + elif target.next_sibling is not None: + descendant.next_element = target.next_sibling + target.next_sibling.previous_element = child + break + target = target.parent + + def _popToTag(self, name, nsprefix=None, inclusivePop=True): + """Pops the tag stack up to and including the most recent + instance of the given tag. + + If there are no open tags with the given name, nothing will be + popped. + + :param name: Pop up to the most recent tag with this name. + :param nsprefix: The namespace prefix that goes with `name`. + :param inclusivePop: It this is false, pops the tag stack up + to but *not* including the most recent instqance of the + given tag. + + """ + #print("Popping to %s" % name) + if name == self.ROOT_TAG_NAME: + # The BeautifulSoup object itself can never be popped. + return + + most_recently_popped = None + + stack_size = len(self.tagStack) + for i in range(stack_size - 1, 0, -1): + if not self.open_tag_counter.get(name): + break + t = self.tagStack[i] + if (name == t.name and nsprefix == t.prefix): + if inclusivePop: + most_recently_popped = self.popTag() + break + most_recently_popped = self.popTag() + + return most_recently_popped + + def handle_starttag(self, name, namespace, nsprefix, attrs, sourceline=None, + sourcepos=None, namespaces=None): + """Called by the tree builder when a new tag is encountered. + + :param name: Name of the tag. + :param nsprefix: Namespace prefix for the tag. + :param attrs: A dictionary of attribute values. + :param sourceline: The line number where this tag was found in its + source document. + :param sourcepos: The character position within `sourceline` where this + tag was found. + :param namespaces: A dictionary of all namespace prefix mappings + currently in scope in the document. + + If this method returns None, the tag was rejected by an active + SoupStrainer. You should proceed as if the tag had not occurred + in the document. For instance, if this was a self-closing tag, + don't call handle_endtag. + """ + # print("Start tag %s: %s" % (name, attrs)) + self.endData() + + if (self.parse_only and len(self.tagStack) <= 1 + and (self.parse_only.text + or not self.parse_only.search_tag(name, attrs))): + return None + + tag = self.element_classes.get(Tag, Tag)( + self, self.builder, name, namespace, nsprefix, attrs, + self.currentTag, self._most_recent_element, + sourceline=sourceline, sourcepos=sourcepos, + namespaces=namespaces + ) + if tag is None: + return tag + if self._most_recent_element is not None: + self._most_recent_element.next_element = tag + self._most_recent_element = tag + self.pushTag(tag) + return tag + + def handle_endtag(self, name, nsprefix=None): + """Called by the tree builder when an ending tag is encountered. + + :param name: Name of the tag. + :param nsprefix: Namespace prefix for the tag. + """ + #print("End tag: " + name) + self.endData() + self._popToTag(name, nsprefix) + + def handle_data(self, data): + """Called by the tree builder when a chunk of textual data is encountered.""" + self.current_data.append(data) + + def decode(self, pretty_print=False, + eventual_encoding=DEFAULT_OUTPUT_ENCODING, + formatter="minimal"): + """Returns a string or Unicode representation of the parse tree + as an HTML or XML document. + + :param pretty_print: If this is True, indentation will be used to + make the document more readable. + :param eventual_encoding: The encoding of the final document. + If this is None, the document will be a Unicode string. + """ + if self.is_xml: + # Print the XML declaration + encoding_part = '' + if eventual_encoding in PYTHON_SPECIFIC_ENCODINGS: + # This is a special Python encoding; it can't actually + # go into an XML document because it means nothing + # outside of Python. + eventual_encoding = None + if eventual_encoding != None: + encoding_part = ' encoding="%s"' % eventual_encoding + prefix = '\n' % encoding_part + else: + prefix = '' + if not pretty_print: + indent_level = None + else: + indent_level = 0 + return prefix + super(BeautifulSoup, self).decode( + indent_level, eventual_encoding, formatter) + +# Aliases to make it easier to get started quickly, e.g. 'from bs4 import _soup' +_s = BeautifulSoup +_soup = BeautifulSoup + +class BeautifulStoneSoup(BeautifulSoup): + """Deprecated interface to an XML parser.""" + + def __init__(self, *args, **kwargs): + kwargs['features'] = 'xml' + warnings.warn( + 'The BeautifulStoneSoup class is deprecated. Instead of using ' + 'it, pass features="xml" into the BeautifulSoup constructor.', + DeprecationWarning, stacklevel=2 + ) + super(BeautifulStoneSoup, self).__init__(*args, **kwargs) + + +class StopParsing(Exception): + """Exception raised by a TreeBuilder if it's unable to continue parsing.""" + pass + +class FeatureNotFound(ValueError): + """Exception raised by the BeautifulSoup constructor if no parser with the + requested features is found. + """ + pass + + +#If this file is run as a script, act as an HTML pretty-printer. +if __name__ == '__main__': + import sys + soup = BeautifulSoup(sys.stdin) + print((soup.prettify())) diff --git a/.venv/Lib/site-packages/bs4/__pycache__/__init__.cpython-39.pyc b/.venv/Lib/site-packages/bs4/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40f8abb77cbf9e57589964173d84f4fae848f8ef GIT binary patch literal 24207 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 Idacs?-@(NC7XSbN literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/__pycache__/diagnose.cpython-39.pyc b/.venv/Lib/site-packages/bs4/__pycache__/diagnose.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..997445213b5282211330b420939b49d6e93252b0 GIT binary patch literal 8590 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 0: + feature = features.pop() + we_have_the_feature = self.builders_for_feature.get(feature, []) + if len(we_have_the_feature) > 0: + if candidates is None: + candidates = we_have_the_feature + candidate_set = set(candidates) + else: + # Eliminate any candidates that don't have this feature. + candidate_set = candidate_set.intersection( + set(we_have_the_feature)) + + # The only valid candidates are the ones in candidate_set. + # Go through the original list of candidates and pick the first one + # that's in candidate_set. + if candidate_set is None: + return None + for candidate in candidates: + if candidate in candidate_set: + return candidate + return None + +# The BeautifulSoup class will take feature lists from developers and use them +# to look up builders in this registry. +builder_registry = TreeBuilderRegistry() + +class TreeBuilder(object): + """Turn a textual document into a Beautiful Soup object tree.""" + + NAME = "[Unknown tree builder]" + ALTERNATE_NAMES = [] + features = [] + + is_xml = False + picklable = False + empty_element_tags = None # A tag will be considered an empty-element + # tag when and only when it has no contents. + + # A value for these tag/attribute combinations is a space- or + # comma-separated list of CDATA, rather than a single CDATA. + DEFAULT_CDATA_LIST_ATTRIBUTES = defaultdict(list) + + # Whitespace should be preserved inside these tags. + DEFAULT_PRESERVE_WHITESPACE_TAGS = set() + + # The textual contents of tags with these names should be + # instantiated with some class other than NavigableString. + DEFAULT_STRING_CONTAINERS = {} + + USE_DEFAULT = object() + + # Most parsers don't keep track of line numbers. + TRACKS_LINE_NUMBERS = False + + def __init__(self, multi_valued_attributes=USE_DEFAULT, + preserve_whitespace_tags=USE_DEFAULT, + store_line_numbers=USE_DEFAULT, + string_containers=USE_DEFAULT, + ): + """Constructor. + + :param multi_valued_attributes: If this is set to None, the + TreeBuilder will not turn any values for attributes like + 'class' into lists. Setting this to a dictionary will + customize this behavior; look at DEFAULT_CDATA_LIST_ATTRIBUTES + for an example. + + Internally, these are called "CDATA list attributes", but that + probably doesn't make sense to an end-user, so the argument name + is `multi_valued_attributes`. + + :param preserve_whitespace_tags: A list of tags to treat + the way
 tags are treated in HTML. Tags in this list
+         are immune from pretty-printing; their contents will always be
+         output as-is.
+
+        :param string_containers: A dictionary mapping tag names to
+        the classes that should be instantiated to contain the textual
+        contents of those tags. The default is to use NavigableString
+        for every tag, no matter what the name. You can override the
+        default by changing DEFAULT_STRING_CONTAINERS.
+
+        :param store_line_numbers: If the parser keeps track of the
+         line numbers and positions of the original markup, that
+         information will, by default, be stored in each corresponding
+         `Tag` object. You can turn this off by passing
+         store_line_numbers=False. If the parser you're using doesn't 
+         keep track of this information, then setting store_line_numbers=True
+         will do nothing.
+        """
+        self.soup = None
+        if multi_valued_attributes is self.USE_DEFAULT:
+            multi_valued_attributes = self.DEFAULT_CDATA_LIST_ATTRIBUTES
+        self.cdata_list_attributes = multi_valued_attributes
+        if preserve_whitespace_tags is self.USE_DEFAULT:
+            preserve_whitespace_tags = self.DEFAULT_PRESERVE_WHITESPACE_TAGS
+        self.preserve_whitespace_tags = preserve_whitespace_tags
+        if store_line_numbers == self.USE_DEFAULT:
+            store_line_numbers = self.TRACKS_LINE_NUMBERS
+        self.store_line_numbers = store_line_numbers 
+        if string_containers == self.USE_DEFAULT:
+            string_containers = self.DEFAULT_STRING_CONTAINERS
+        self.string_containers = string_containers
+        
+    def initialize_soup(self, soup):
+        """The BeautifulSoup object has been initialized and is now
+        being associated with the TreeBuilder.
+
+        :param soup: A BeautifulSoup object.
+        """
+        self.soup = soup
+        
+    def reset(self):
+        """Do any work necessary to reset the underlying parser
+        for a new document.
+
+        By default, this does nothing.
+        """
+        pass
+
+    def can_be_empty_element(self, tag_name):
+        """Might a tag with this name be an empty-element tag?
+
+        The final markup may or may not actually present this tag as
+        self-closing.
+
+        For instance: an HTMLBuilder does not consider a 

tag to be + an empty-element tag (it's not in + HTMLBuilder.empty_element_tags). This means an empty

tag + will be presented as "

", not "

" or "

". + + The default implementation has no opinion about which tags are + empty-element tags, so a tag will be presented as an + empty-element tag if and only if it has no children. + "" will become "", and "bar" will + be left alone. + + :param tag_name: The name of a markup tag. + """ + if self.empty_element_tags is None: + return True + return tag_name in self.empty_element_tags + + def feed(self, markup): + """Run some incoming markup through some parsing process, + populating the `BeautifulSoup` object in self.soup. + + This method is not implemented in TreeBuilder; it must be + implemented in subclasses. + + :return: None. + """ + raise NotImplementedError() + + def prepare_markup(self, markup, user_specified_encoding=None, + document_declared_encoding=None, exclude_encodings=None): + """Run any preliminary steps necessary to make incoming markup + acceptable to the parser. + + :param markup: Some markup -- probably a bytestring. + :param user_specified_encoding: The user asked to try this encoding. + :param document_declared_encoding: The markup itself claims to be + in this encoding. NOTE: This argument is not used by the + calling code and can probably be removed. + :param exclude_encodings: The user asked _not_ to try any of + these encodings. + + :yield: A series of 4-tuples: + (markup, encoding, declared encoding, + has undergone character replacement) + + Each 4-tuple represents a strategy for converting the + document to Unicode and parsing it. Each strategy will be tried + in turn. + + By default, the only strategy is to parse the markup + as-is. See `LXMLTreeBuilderForXML` and + `HTMLParserTreeBuilder` for implementations that take into + account the quirks of particular parsers. + """ + yield markup, None, None, False + + def test_fragment_to_document(self, fragment): + """Wrap an HTML fragment to make it look like a document. + + Different parsers do this differently. For instance, lxml + introduces an empty tag, and html5lib + doesn't. Abstracting this away lets us write simple tests + which run HTML fragments through the parser and compare the + results against other HTML fragments. + + This method should not be used outside of tests. + + :param fragment: A string -- fragment of HTML. + :return: A string -- a full HTML document. + """ + return fragment + + def set_up_substitutions(self, tag): + """Set up any substitutions that will need to be performed on + a `Tag` when it's output as a string. + + By default, this does nothing. See `HTMLTreeBuilder` for a + case where this is used. + + :param tag: A `Tag` + :return: Whether or not a substitution was performed. + """ + return False + + def _replace_cdata_list_attribute_values(self, tag_name, attrs): + """When an attribute value is associated with a tag that can + have multiple values for that attribute, convert the string + value to a list of strings. + + Basically, replaces class="foo bar" with class=["foo", "bar"] + + NOTE: This method modifies its input in place. + + :param tag_name: The name of a tag. + :param attrs: A dictionary containing the tag's attributes. + Any appropriate attribute values will be modified in place. + """ + if not attrs: + return attrs + if self.cdata_list_attributes: + universal = self.cdata_list_attributes.get('*', []) + tag_specific = self.cdata_list_attributes.get( + tag_name.lower(), None) + for attr in list(attrs.keys()): + if attr in universal or (tag_specific and attr in tag_specific): + # We have a "class"-type attribute whose string + # value is a whitespace-separated list of + # values. Split it into a list. + value = attrs[attr] + if isinstance(value, str): + values = nonwhitespace_re.findall(value) + else: + # html5lib sometimes calls setAttributes twice + # for the same tag when rearranging the parse + # tree. On the second call the attribute value + # here is already a list. If this happens, + # leave the value alone rather than trying to + # split it again. + values = value + attrs[attr] = values + return attrs + +class SAXTreeBuilder(TreeBuilder): + """A Beautiful Soup treebuilder that listens for SAX events. + + This is not currently used for anything, but it demonstrates + how a simple TreeBuilder would work. + """ + + def feed(self, markup): + raise NotImplementedError() + + def close(self): + pass + + def startElement(self, name, attrs): + attrs = dict((key[1], value) for key, value in list(attrs.items())) + #print("Start %s, %r" % (name, attrs)) + self.soup.handle_starttag(name, attrs) + + def endElement(self, name): + #print("End %s" % name) + self.soup.handle_endtag(name) + + def startElementNS(self, nsTuple, nodeName, attrs): + # Throw away (ns, nodeName) for now. + self.startElement(nodeName, attrs) + + def endElementNS(self, nsTuple, nodeName): + # Throw away (ns, nodeName) for now. + self.endElement(nodeName) + #handler.endElementNS((ns, node.nodeName), node.nodeName) + + def startPrefixMapping(self, prefix, nodeValue): + # Ignore the prefix for now. + pass + + def endPrefixMapping(self, prefix): + # Ignore the prefix for now. + # handler.endPrefixMapping(prefix) + pass + + def characters(self, content): + self.soup.handle_data(content) + + def startDocument(self): + pass + + def endDocument(self): + pass + + +class HTMLTreeBuilder(TreeBuilder): + """This TreeBuilder knows facts about HTML. + + Such as which tags are empty-element tags. + """ + + empty_element_tags = set([ + # These are from HTML5. + 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', + + # These are from earlier versions of HTML and are removed in HTML5. + 'basefont', 'bgsound', 'command', 'frame', 'image', 'isindex', 'nextid', 'spacer' + ]) + + # The HTML standard defines these as block-level elements. Beautiful + # Soup does not treat these elements differently from other elements, + # but it may do so eventually, and this information is available if + # you need to use it. + block_elements = set(["address", "article", "aside", "blockquote", "canvas", "dd", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hr", "li", "main", "nav", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video"]) + + # These HTML tags need special treatment so they can be + # represented by a string class other than NavigableString. + # + # For some of these tags, it's because the HTML standard defines + # an unusual content model for them. I made this list by going + # through the HTML spec + # (https://html.spec.whatwg.org/#metadata-content) and looking for + # "metadata content" elements that can contain strings. + # + # The Ruby tags ( and ) are here despite being normal + # "phrasing content" tags, because the content they contain is + # qualitatively different from other text in the document, and it + # can be useful to be able to distinguish it. + # + # TODO: Arguably

 in HTML
+        documents) should not.
+        """
+        return (
+            indent_level is not None
+            and (
+                not self.preserve_whitespace_tags
+                or self.name not in self.preserve_whitespace_tags
+            )
+        )
+
+    def prettify(self, encoding=None, formatter="minimal"):
+        """Pretty-print this PageElement as a string.
+
+        :param encoding: The eventual encoding of the string. If this is None,
+            a Unicode string will be returned.
+        :param formatter: A Formatter object, or a string naming one of
+            the standard formatters.
+        :return: A Unicode string (if encoding==None) or a bytestring 
+            (otherwise).
+        """
+        if encoding is None:
+            return self.decode(True, formatter=formatter)
+        else:
+            return self.encode(encoding, True, formatter=formatter)
+
+    def decode_contents(self, indent_level=None,
+                       eventual_encoding=DEFAULT_OUTPUT_ENCODING,
+                       formatter="minimal"):
+        """Renders the contents of this tag as a Unicode string.
+
+        :param indent_level: Each line of the rendering will be
+           indented this many levels. (The formatter decides what a
+           'level' means in terms of spaces or other characters
+           output.) Used internally in recursive calls while
+           pretty-printing.
+
+        :param eventual_encoding: The tag is destined to be
+           encoded into this encoding. decode_contents() is _not_
+           responsible for performing that encoding. This information
+           is passed in so that it can be substituted in if the
+           document contains a  tag that mentions the document's
+           encoding.
+
+        :param formatter: A Formatter object, or a string naming one of
+            the standard Formatters.
+
+        """
+        # First off, turn a string formatter into a Formatter object. This
+        # will stop the lookup from happening over and over again.
+        if not isinstance(formatter, Formatter):
+            formatter = self.formatter_for_name(formatter)
+
+        pretty_print = (indent_level is not None)
+        s = []
+        for c in self:
+            text = None
+            if isinstance(c, NavigableString):
+                text = c.output_ready(formatter)
+            elif isinstance(c, Tag):
+                s.append(c.decode(indent_level, eventual_encoding,
+                                  formatter))
+            preserve_whitespace = (
+                self.preserve_whitespace_tags and self.name in self.preserve_whitespace_tags
+            )
+            if text and indent_level and not preserve_whitespace:
+                text = text.strip()
+            if text:
+                if pretty_print and not preserve_whitespace:
+                    s.append(formatter.indent * (indent_level - 1))
+                s.append(text)
+                if pretty_print and not preserve_whitespace:
+                    s.append("\n")
+        return ''.join(s)
+       
+    def encode_contents(
+        self, indent_level=None, encoding=DEFAULT_OUTPUT_ENCODING,
+        formatter="minimal"):
+        """Renders the contents of this PageElement as a bytestring.
+
+        :param indent_level: Each line of the rendering will be
+           indented this many levels. (The formatter decides what a
+           'level' means in terms of spaces or other characters
+           output.) Used internally in recursive calls while
+           pretty-printing.
+
+        :param eventual_encoding: The bytestring will be in this encoding.
+
+        :param formatter: A Formatter object, or a string naming one of
+            the standard Formatters.
+
+        :return: A bytestring.
+        """
+        contents = self.decode_contents(indent_level, encoding, formatter)
+        return contents.encode(encoding)
+
+    # Old method for BS3 compatibility
+    def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING,
+                       prettyPrint=False, indentLevel=0):
+        """Deprecated method for BS3 compatibility."""
+        if not prettyPrint:
+            indentLevel = None
+        return self.encode_contents(
+            indent_level=indentLevel, encoding=encoding)
+
+    #Soup methods
+
+    def find(self, name=None, attrs={}, recursive=True, string=None,
+             **kwargs):
+        """Look in the children of this PageElement and find the first
+        PageElement that matches the given criteria.
+
+        All find_* methods take a common set of arguments. See the online
+        documentation for detailed explanations.
+
+        :param name: A filter on tag name.
+        :param attrs: A dictionary of filters on attribute values.
+        :param recursive: If this is True, find() will perform a
+            recursive search of this PageElement's children. Otherwise,
+            only the direct children will be considered.
+        :param limit: Stop looking after finding this many results.
+        :kwargs: A dictionary of filters on attribute values.
+        :return: A PageElement.
+        :rtype: bs4.element.Tag | bs4.element.NavigableString
+        """
+        r = None
+        l = self.find_all(name, attrs, recursive, string, 1, _stacklevel=3,
+                          **kwargs)
+        if l:
+            r = l[0]
+        return r
+    findChild = find #BS2
+
+    def find_all(self, name=None, attrs={}, recursive=True, string=None,
+                 limit=None, **kwargs):
+        """Look in the children of this PageElement and find all
+        PageElements that match the given criteria.
+
+        All find_* methods take a common set of arguments. See the online
+        documentation for detailed explanations.
+
+        :param name: A filter on tag name.
+        :param attrs: A dictionary of filters on attribute values.
+        :param recursive: If this is True, find_all() will perform a
+            recursive search of this PageElement's children. Otherwise,
+            only the direct children will be considered.
+        :param limit: Stop looking after finding this many results.
+        :kwargs: A dictionary of filters on attribute values.
+        :return: A ResultSet of PageElements.
+        :rtype: bs4.element.ResultSet
+        """
+        generator = self.descendants
+        if not recursive:
+            generator = self.children
+        _stacklevel = kwargs.pop('_stacklevel', 2)
+        return self._find_all(name, attrs, string, limit, generator,
+                              _stacklevel=_stacklevel+1, **kwargs)
+    findAll = find_all       # BS3
+    findChildren = find_all  # BS2
+
+    #Generator methods
+    @property
+    def children(self):
+        """Iterate over all direct children of this PageElement.
+
+        :yield: A sequence of PageElements.
+        """
+        # return iter() to make the purpose of the method clear
+        return iter(self.contents)  # XXX This seems to be untested.
+
+    @property
+    def descendants(self):
+        """Iterate over all children of this PageElement in a
+        breadth-first sequence.
+
+        :yield: A sequence of PageElements.
+        """
+        if not len(self.contents):
+            return
+        stopNode = self._last_descendant().next_element
+        current = self.contents[0]
+        while current is not stopNode:
+            yield current
+            current = current.next_element
+
+    # CSS selector code
+    def select_one(self, selector, namespaces=None, **kwargs):
+        """Perform a CSS selection operation on the current element.
+
+        :param selector: A CSS selector.
+
+        :param namespaces: A dictionary mapping namespace prefixes
+           used in the CSS selector to namespace URIs. By default,
+           Beautiful Soup will use the prefixes it encountered while
+           parsing the document.
+
+        :param kwargs: Keyword arguments to be passed into SoupSieve's 
+           soupsieve.select() method.
+
+        :return: A Tag.
+        :rtype: bs4.element.Tag
+        """
+        value = self.select(selector, namespaces, 1, **kwargs)
+        if value:
+            return value[0]
+        return None
+
+    def select(self, selector, namespaces=None, limit=None, **kwargs):
+        """Perform a CSS selection operation on the current element.
+
+        This uses the SoupSieve library.
+
+        :param selector: A string containing a CSS selector.
+
+        :param namespaces: A dictionary mapping namespace prefixes
+           used in the CSS selector to namespace URIs. By default,
+           Beautiful Soup will use the prefixes it encountered while
+           parsing the document.
+
+        :param limit: After finding this number of results, stop looking.
+
+        :param kwargs: Keyword arguments to be passed into SoupSieve's 
+           soupsieve.select() method.
+
+        :return: A ResultSet of Tags.
+        :rtype: bs4.element.ResultSet
+        """
+        if namespaces is None:
+            namespaces = self._namespaces
+        
+        if limit is None:
+            limit = 0
+        if soupsieve is None:
+            raise NotImplementedError(
+                "Cannot execute CSS selectors because the soupsieve package is not installed."
+            )
+            
+        results = soupsieve.select(selector, self, namespaces, limit, **kwargs)
+
+        # We do this because it's more consistent and because
+        # ResultSet.__getattr__ has a helpful error message.
+        return ResultSet(None, results)
+
+    # Old names for backwards compatibility
+    def childGenerator(self):
+        """Deprecated generator."""
+        return self.children
+
+    def recursiveChildGenerator(self):
+        """Deprecated generator."""
+        return self.descendants
+
+    def has_key(self, key):
+        """Deprecated method. This was kind of misleading because has_key()
+        (attributes) was different from __in__ (contents).
+
+        has_key() is gone in Python 3, anyway.
+        """
+        warnings.warn(
+            'has_key is deprecated. Use has_attr(key) instead.',
+            DeprecationWarning, stacklevel=2
+        )
+        return self.has_attr(key)
+
+# Next, a couple classes to represent queries and their results.
+class SoupStrainer(object):
+    """Encapsulates a number of ways of matching a markup element (tag or
+    string).
+
+    This is primarily used to underpin the find_* methods, but you can
+    create one yourself and pass it in as `parse_only` to the
+    `BeautifulSoup` constructor, to parse a subset of a large
+    document.
+    """
+
+    def __init__(self, name=None, attrs={}, string=None, **kwargs):
+        """Constructor.
+
+        The SoupStrainer constructor takes the same arguments passed
+        into the find_* methods. See the online documentation for
+        detailed explanations.
+
+        :param name: A filter on tag name.
+        :param attrs: A dictionary of filters on attribute values.
+        :param string: A filter for a NavigableString with specific text.
+        :kwargs: A dictionary of filters on attribute values.
+        """        
+        if string is None and 'text' in kwargs:
+            string = kwargs.pop('text')
+            warnings.warn(
+                "The 'text' argument to the SoupStrainer constructor is deprecated. Use 'string' instead.",
+                DeprecationWarning, stacklevel=2
+            )
+
+        self.name = self._normalize_search_value(name)
+        if not isinstance(attrs, dict):
+            # Treat a non-dict value for attrs as a search for the 'class'
+            # attribute.
+            kwargs['class'] = attrs
+            attrs = None
+
+        if 'class_' in kwargs:
+            # Treat class_="foo" as a search for the 'class'
+            # attribute, overriding any non-dict value for attrs.
+            kwargs['class'] = kwargs['class_']
+            del kwargs['class_']
+
+        if kwargs:
+            if attrs:
+                attrs = attrs.copy()
+                attrs.update(kwargs)
+            else:
+                attrs = kwargs
+        normalized_attrs = {}
+        for key, value in list(attrs.items()):
+            normalized_attrs[key] = self._normalize_search_value(value)
+
+        self.attrs = normalized_attrs
+        self.string = self._normalize_search_value(string)
+
+        # DEPRECATED but just in case someone is checking this.
+        self.text = self.string
+
+    def _normalize_search_value(self, value):
+        # Leave it alone if it's a Unicode string, a callable, a
+        # regular expression, a boolean, or None.
+        if (isinstance(value, str) or isinstance(value, Callable) or hasattr(value, 'match')
+            or isinstance(value, bool) or value is None):
+            return value
+
+        # If it's a bytestring, convert it to Unicode, treating it as UTF-8.
+        if isinstance(value, bytes):
+            return value.decode("utf8")
+
+        # If it's listlike, convert it into a list of strings.
+        if hasattr(value, '__iter__'):
+            new_value = []
+            for v in value:
+                if (hasattr(v, '__iter__') and not isinstance(v, bytes)
+                    and not isinstance(v, str)):
+                    # This is almost certainly the user's mistake. In the
+                    # interests of avoiding infinite loops, we'll let
+                    # it through as-is rather than doing a recursive call.
+                    new_value.append(v)
+                else:
+                    new_value.append(self._normalize_search_value(v))
+            return new_value
+
+        # Otherwise, convert it into a Unicode string.
+        # The unicode(str()) thing is so this will do the same thing on Python 2
+        # and Python 3.
+        return str(str(value))
+
+    def __str__(self):
+        """A human-readable representation of this SoupStrainer."""
+        if self.string:
+            return self.string
+        else:
+            return "%s|%s" % (self.name, self.attrs)
+
+    def search_tag(self, markup_name=None, markup_attrs={}):
+        """Check whether a Tag with the given name and attributes would
+        match this SoupStrainer.
+
+        Used prospectively to decide whether to even bother creating a Tag
+        object.
+
+        :param markup_name: A tag name as found in some markup.
+        :param markup_attrs: A dictionary of attributes as found in some markup.
+
+        :return: True if the prospective tag would match this SoupStrainer;
+            False otherwise.
+        """
+        found = None
+        markup = None
+        if isinstance(markup_name, Tag):
+            markup = markup_name
+            markup_attrs = markup
+
+        if isinstance(self.name, str):
+            # Optimization for a very common case where the user is
+            # searching for a tag with one specific name, and we're
+            # looking at a tag with a different name.
+            if markup and not markup.prefix and self.name != markup.name:
+                 return False
+            
+        call_function_with_tag_data = (
+            isinstance(self.name, Callable)
+            and not isinstance(markup_name, Tag))
+
+        if ((not self.name)
+            or call_function_with_tag_data
+            or (markup and self._matches(markup, self.name))
+            or (not markup and self._matches(markup_name, self.name))):
+            if call_function_with_tag_data:
+                match = self.name(markup_name, markup_attrs)
+            else:
+                match = True
+                markup_attr_map = None
+                for attr, match_against in list(self.attrs.items()):
+                    if not markup_attr_map:
+                        if hasattr(markup_attrs, 'get'):
+                            markup_attr_map = markup_attrs
+                        else:
+                            markup_attr_map = {}
+                            for k, v in markup_attrs:
+                                markup_attr_map[k] = v
+                    attr_value = markup_attr_map.get(attr)
+                    if not self._matches(attr_value, match_against):
+                        match = False
+                        break
+            if match:
+                if markup:
+                    found = markup
+                else:
+                    found = markup_name
+        if found and self.string and not self._matches(found.string, self.string):
+            found = None
+        return found
+
+    # For BS3 compatibility.
+    searchTag = search_tag
+
+    def search(self, markup):
+        """Find all items in `markup` that match this SoupStrainer.
+
+        Used by the core _find_all() method, which is ultimately
+        called by all find_* methods.
+
+        :param markup: A PageElement or a list of them.
+        """
+        # print('looking for %s in %s' % (self, markup))
+        found = None
+        # If given a list of items, scan it for a text element that
+        # matches.
+        if hasattr(markup, '__iter__') and not isinstance(markup, (Tag, str)):
+            for element in markup:
+                if isinstance(element, NavigableString) \
+                       and self.search(element):
+                    found = element
+                    break
+        # If it's a Tag, make sure its name or attributes match.
+        # Don't bother with Tags if we're searching for text.
+        elif isinstance(markup, Tag):
+            if not self.string or self.name or self.attrs:
+                found = self.search_tag(markup)
+        # If it's text, make sure the text matches.
+        elif isinstance(markup, NavigableString) or \
+                 isinstance(markup, str):
+            if not self.name and not self.attrs and self._matches(markup, self.string):
+                found = markup
+        else:
+            raise Exception(
+                "I don't know how to match against a %s" % markup.__class__)
+        return found
+
+    def _matches(self, markup, match_against, already_tried=None):
+        # print(u"Matching %s against %s" % (markup, match_against))
+        result = False
+        if isinstance(markup, list) or isinstance(markup, tuple):
+            # This should only happen when searching a multi-valued attribute
+            # like 'class'.
+            for item in markup:
+                if self._matches(item, match_against):
+                    return True
+            # We didn't match any particular value of the multivalue
+            # attribute, but maybe we match the attribute value when
+            # considered as a string.
+            if self._matches(' '.join(markup), match_against):
+                return True
+            return False
+        
+        if match_against is True:
+            # True matches any non-None value.
+            return markup is not None
+
+        if isinstance(match_against, Callable):
+            return match_against(markup)
+
+        # Custom callables take the tag as an argument, but all
+        # other ways of matching match the tag name as a string.
+        original_markup = markup
+        if isinstance(markup, Tag):
+            markup = markup.name
+
+        # Ensure that `markup` is either a Unicode string, or None.
+        markup = self._normalize_search_value(markup)
+
+        if markup is None:
+            # None matches None, False, an empty string, an empty list, and so on.
+            return not match_against
+
+        if (hasattr(match_against, '__iter__')
+            and not isinstance(match_against, str)):
+            # We're asked to match against an iterable of items.
+            # The markup must be match at least one item in the
+            # iterable. We'll try each one in turn.
+            #
+            # To avoid infinite recursion we need to keep track of
+            # items we've already seen.
+            if not already_tried:
+                already_tried = set()
+            for item in match_against:
+                if item.__hash__:
+                    key = item
+                else:
+                    key = id(item)
+                if key in already_tried:
+                    continue
+                else:
+                    already_tried.add(key)
+                    if self._matches(original_markup, item, already_tried):
+                        return True
+            else:
+                return False
+        
+        # Beyond this point we might need to run the test twice: once against
+        # the tag's name and once against its prefixed name.
+        match = False
+        
+        if not match and isinstance(match_against, str):
+            # Exact string match
+            match = markup == match_against
+
+        if not match and hasattr(match_against, 'search'):
+            # Regexp match
+            return match_against.search(markup)
+
+        if (not match
+            and isinstance(original_markup, Tag)
+            and original_markup.prefix):
+            # Try the whole thing again with the prefixed tag name.
+            return self._matches(
+                original_markup.prefix + ':' + original_markup.name, match_against
+            )
+
+        return match
+
+
+class ResultSet(list):
+    """A ResultSet is just a list that keeps track of the SoupStrainer
+    that created it."""
+    def __init__(self, source, result=()):
+        """Constructor.
+
+        :param source: A SoupStrainer.
+        :param result: A list of PageElements.
+        """
+        super(ResultSet, self).__init__(result)
+        self.source = source
+
+    def __getattr__(self, key):
+        """Raise a helpful exception to explain a common code fix."""
+        raise AttributeError(
+            "ResultSet object has no attribute '%s'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?" % key
+        )
diff --git a/.venv/Lib/site-packages/bs4/formatter.py b/.venv/Lib/site-packages/bs4/formatter.py
new file mode 100644
index 0000000..83cc1c5
--- /dev/null
+++ b/.venv/Lib/site-packages/bs4/formatter.py
@@ -0,0 +1,185 @@
+from bs4.dammit import EntitySubstitution
+
+class Formatter(EntitySubstitution):
+    """Describes a strategy to use when outputting a parse tree to a string.
+
+    Some parts of this strategy come from the distinction between
+    HTML4, HTML5, and XML. Others are configurable by the user.
+
+    Formatters are passed in as the `formatter` argument to methods
+    like `PageElement.encode`. Most people won't need to think about
+    formatters, and most people who need to think about them can pass
+    in one of these predefined strings as `formatter` rather than
+    making a new Formatter object:
+
+    For HTML documents:
+     * 'html' - HTML entity substitution for generic HTML documents. (default)
+     * 'html5' - HTML entity substitution for HTML5 documents, as
+                 well as some optimizations in the way tags are rendered.
+     * 'minimal' - Only make the substitutions necessary to guarantee
+                   valid HTML.
+     * None - Do not perform any substitution. This will be faster
+              but may result in invalid markup.
+
+    For XML documents:
+     * 'html' - Entity substitution for XHTML documents.
+     * 'minimal' - Only make the substitutions necessary to guarantee
+                   valid XML. (default)
+     * None - Do not perform any substitution. This will be faster
+              but may result in invalid markup.
+    """
+    # Registries of XML and HTML formatters.
+    XML_FORMATTERS = {}
+    HTML_FORMATTERS = {}
+
+    HTML = 'html'
+    XML = 'xml'
+
+    HTML_DEFAULTS = dict(
+        cdata_containing_tags=set(["script", "style"]),
+    )
+
+    def _default(self, language, value, kwarg):
+        if value is not None:
+            return value
+        if language == self.XML:
+            return set()
+        return self.HTML_DEFAULTS[kwarg]
+
+    def __init__(
+            self, language=None, entity_substitution=None,
+            void_element_close_prefix='/', cdata_containing_tags=None,
+            empty_attributes_are_booleans=False, indent=1,
+    ):
+        """Constructor.
+
+        :param language: This should be Formatter.XML if you are formatting
+           XML markup and Formatter.HTML if you are formatting HTML markup.
+
+        :param entity_substitution: A function to call to replace special
+           characters with XML/HTML entities. For examples, see 
+           bs4.dammit.EntitySubstitution.substitute_html and substitute_xml.
+        :param void_element_close_prefix: By default, void elements
+           are represented as  (XML rules) rather than 
+           (HTML rules). To get , pass in the empty string.
+        :param cdata_containing_tags: The list of tags that are defined
+           as containing CDATA in this dialect. For example, in HTML,
+           
+
This numeric entity is missing the final semicolon:
+ +
a
+
This document contains (do you see it?)
+
This document ends with That attribute value was bogus
+The doctype is invalid because it contains extra whitespace +
That boolean attribute had no value
+
Here's a nonexistent entity: &#foo; (do you see it?)
+
This document ends before the entity finishes: > +

Paragraphs shouldn't contain block display elements, but this one does:

you see?

+Multiple values for the same attribute. +
Here's a table
+
+
This tag contains nothing but whitespace:
+

This p tag is cut off by

the end of the blockquote tag
+
Here's a nested table:
foo
This table contains bare markup
+ +
This document contains a surprise doctype
+ +
Tag name contains Unicode characters
+ + +""" + + +class SoupTest(object): + + @property + def default_builder(self): + return default_builder + + def soup(self, markup, **kwargs): + """Build a Beautiful Soup object from markup.""" + builder = kwargs.pop('builder', self.default_builder) + return BeautifulSoup(markup, builder=builder, **kwargs) + + def document_for(self, markup, **kwargs): + """Turn an HTML fragment into a document. + + The details depend on the builder. + """ + return self.default_builder(**kwargs).test_fragment_to_document(markup) + + def assert_soup(self, to_parse, compare_parsed_to=None): + """Parse some markup using Beautiful Soup and verify that + the output markup is as expected. + """ + builder = self.default_builder + obj = BeautifulSoup(to_parse, builder=builder) + if compare_parsed_to is None: + compare_parsed_to = to_parse + + # Verify that the documents come out the same. + assert obj.decode() == self.document_for(compare_parsed_to) + + # Also run some checks on the BeautifulSoup object itself: + + # Verify that every tag that was opened was eventually closed. + + # There are no tags in the open tag counter. + assert all(v==0 for v in list(obj.open_tag_counter.values())) + + # The only tag in the tag stack is the one for the root + # document. + assert [obj.ROOT_TAG_NAME] == [x.name for x in obj.tagStack] + + assertSoupEquals = assert_soup + + def assertConnectedness(self, element): + """Ensure that next_element and previous_element are properly + set for all descendants of the given element. + """ + earlier = None + for e in element.descendants: + if earlier: + assert e == earlier.next_element + assert earlier == e.previous_element + earlier = e + + def linkage_validator(self, el, _recursive_call=False): + """Ensure proper linkage throughout the document.""" + descendant = None + # Document element should have no previous element or previous sibling. + # It also shouldn't have a next sibling. + if el.parent is None: + assert el.previous_element is None,\ + "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + el, el.previous_element, None + ) + assert el.previous_sibling is None,\ + "Bad previous_sibling\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + el, el.previous_sibling, None + ) + assert el.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( + el, el.next_sibling, None + ) + + idx = 0 + child = None + last_child = None + last_idx = len(el.contents) - 1 + for child in el.contents: + descendant = None + + # Parent should link next element to their first child + # That child should have no previous sibling + if idx == 0: + if el.parent is not None: + assert el.next_element is child,\ + "Bad next_element\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( + el, el.next_element, child + ) + assert child.previous_element is el,\ + "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + child, child.previous_element, el + ) + assert child.previous_sibling is None,\ + "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED: {}".format( + child, child.previous_sibling, None + ) + + # If not the first child, previous index should link as sibling to this index + # Previous element should match the last index or the last bubbled up descendant + else: + assert child.previous_sibling is el.contents[idx - 1],\ + "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED {}".format( + child, child.previous_sibling, el.contents[idx - 1] + ) + assert el.contents[idx - 1].next_sibling is child,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + el.contents[idx - 1], el.contents[idx - 1].next_sibling, child + ) + + if last_child is not None: + assert child.previous_element is last_child,\ + "Bad previous_element\nNODE: {}\nPREV {}\nEXPECTED {}\nCONTENTS {}".format( + child, child.previous_element, last_child, child.parent.contents + ) + assert last_child.next_element is child,\ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + last_child, last_child.next_element, child + ) + + if isinstance(child, Tag) and child.contents: + descendant = self.linkage_validator(child, True) + # A bubbled up descendant should have no next siblings + assert descendant.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + descendant, descendant.next_sibling, None + ) + + # Mark last child as either the bubbled up descendant or the current child + if descendant is not None: + last_child = descendant + else: + last_child = child + + # If last child, there are non next siblings + if idx == last_idx: + assert child.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_sibling, None + ) + idx += 1 + + child = descendant if descendant is not None else child + if child is None: + child = el + + if not _recursive_call and child is not None: + target = el + while True: + if target is None: + assert child.next_element is None, \ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_element, None + ) + break + elif target.next_sibling is not None: + assert child.next_element is target.next_sibling, \ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_element, target.next_sibling + ) + break + target = target.parent + + # We are done, so nothing to return + return None + else: + # Return the child to the recursive caller + return child + + def assert_selects(self, tags, should_match): + """Make sure that the given tags have the correct text. + + This is used in tests that define a bunch of tags, each + containing a single string, and then select certain strings by + some mechanism. + """ + assert [tag.string for tag in tags] == should_match + + def assert_selects_ids(self, tags, should_match): + """Make sure that the given tags have the correct IDs. + + This is used in tests that define a bunch of tags, each + containing a single string, and then select certain strings by + some mechanism. + """ + assert [tag['id'] for tag in tags] == should_match + + +class TreeBuilderSmokeTest(object): + # Tests that are common to HTML and XML tree builders. + + @pytest.mark.parametrize( + "multi_valued_attributes", + [None, {}, dict(b=['class']), {'*': ['notclass']}] + ) + def test_attribute_not_multi_valued(self, multi_valued_attributes): + markup = '' + soup = self.soup(markup, multi_valued_attributes=multi_valued_attributes) + assert soup.a['class'] == 'a b c' + + @pytest.mark.parametrize( + "multi_valued_attributes", [dict(a=['class']), {'*': ['class']}] + ) + def test_attribute_multi_valued(self, multi_valued_attributes): + markup = '' + soup = self.soup( + markup, multi_valued_attributes=multi_valued_attributes + ) + assert soup.a['class'] == ['a', 'b', 'c'] + + def test_fuzzed_input(self): + # This test centralizes in one place the various fuzz tests + # for Beautiful Soup created by the oss-fuzz project. + + # These strings superficially resemble markup, but they + # generally can't be parsed into anything. The best we can + # hope for is that parsing these strings won't crash the + # parser. + # + # n.b. This markup is commented out because these fuzz tests + # _do_ crash the parser. However the crashes are due to bugs + # in html.parser, not Beautiful Soup -- otherwise I'd fix the + # bugs! + + bad_markup = [ + # https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28873 + # https://github.com/guidovranken/python-library-fuzzers/blob/master/corp-html/519e5b4269a01185a0d5e76295251921da2f0700 + # https://bugs.python.org/issue37747 + # + #b'\nSome CSS" + ) + assert isinstance(soup.style.string, Stylesheet) + assert isinstance(soup.script.string, Script) + + soup = self.soup( + "" + ) + assert isinstance(soup.style.string, Stylesheet) + # The contents of the style tag resemble an HTML comment, but + # it's not treated as a comment. + assert soup.style.string == "" + assert isinstance(soup.style.string, Stylesheet) + + def test_pickle_and_unpickle_identity(self): + # Pickling a tree, then unpickling it, yields a tree identical + # to the original. + tree = self.soup("foo") + dumped = pickle.dumps(tree, 2) + loaded = pickle.loads(dumped) + assert loaded.__class__ == BeautifulSoup + assert loaded.decode() == tree.decode() + + def assertDoctypeHandled(self, doctype_fragment): + """Assert that a given doctype string is handled correctly.""" + doctype_str, soup = self._document_with_doctype(doctype_fragment) + + # Make sure a Doctype object was created. + doctype = soup.contents[0] + assert doctype.__class__ == Doctype + assert doctype == doctype_fragment + assert soup.encode("utf8")[:len(doctype_str)] == doctype_str + + # Make sure that the doctype was correctly associated with the + # parse tree and that the rest of the document parsed. + assert soup.p.contents[0] == 'foo' + + def _document_with_doctype(self, doctype_fragment, doctype_string="DOCTYPE"): + """Generate and parse a document with the given doctype.""" + doctype = '' % (doctype_string, doctype_fragment) + markup = doctype + '\n

foo

' + soup = self.soup(markup) + return doctype.encode("utf8"), soup + + def test_normal_doctypes(self): + """Make sure normal, everyday HTML doctypes are handled correctly.""" + self.assertDoctypeHandled("html") + self.assertDoctypeHandled( + 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"') + + def test_empty_doctype(self): + soup = self.soup("") + doctype = soup.contents[0] + assert "" == doctype.strip() + + def test_mixed_case_doctype(self): + # A lowercase or mixed-case doctype becomes a Doctype. + for doctype_fragment in ("doctype", "DocType"): + doctype_str, soup = self._document_with_doctype( + "html", doctype_fragment + ) + + # Make sure a Doctype object was created and that the DOCTYPE + # is uppercase. + doctype = soup.contents[0] + assert doctype.__class__ == Doctype + assert doctype == "html" + assert soup.encode("utf8")[:len(doctype_str)] == b"" + + # Make sure that the doctype was correctly associated with the + # parse tree and that the rest of the document parsed. + assert soup.p.contents[0] == 'foo' + + def test_public_doctype_with_url(self): + doctype = 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' + self.assertDoctypeHandled(doctype) + + def test_system_doctype(self): + self.assertDoctypeHandled('foo SYSTEM "http://www.example.com/"') + + def test_namespaced_system_doctype(self): + # We can handle a namespaced doctype with a system ID. + self.assertDoctypeHandled('xsl:stylesheet SYSTEM "htmlent.dtd"') + + def test_namespaced_public_doctype(self): + # Test a namespaced doctype with a public id. + self.assertDoctypeHandled('xsl:stylesheet PUBLIC "htmlent.dtd"') + + def test_real_xhtml_document(self): + """A real XHTML document should come out more or less the same as it went in.""" + markup = b""" + + +Hello. +Goodbye. +""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + assert soup.encode("utf-8").replace(b"\n", b"") == markup.replace(b"\n", b"") + + # No warning was issued about parsing an XML document as HTML, + # because XHTML is both. + assert w == [] + + + def test_namespaced_html(self): + # When a namespaced XML document is parsed as HTML it should + # be treated as HTML with weird tag names. + markup = b"""content""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + + assert 2 == len(soup.find_all("ns1:foo")) + + # n.b. no "you're parsing XML as HTML" warning was given + # because there was no XML declaration. + assert [] == w + + def test_detect_xml_parsed_as_html(self): + # A warning is issued when parsing an XML document as HTML, + # but basic stuff should still work. + markup = b"""string""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + assert soup.tag.string == 'string' + [warning] = w + assert isinstance(warning.message, XMLParsedAsHTMLWarning) + assert str(warning.message) == XMLParsedAsHTMLWarning.MESSAGE + + # NOTE: the warning is not issued if the document appears to + # be XHTML (tested with test_real_xhtml_document in the + # superclass) or if there is no XML declaration (tested with + # test_namespaced_html in the superclass). + + def test_processing_instruction(self): + # We test both Unicode and bytestring to verify that + # process_markup correctly sets processing_instruction_class + # even when the markup is already Unicode and there is no + # need to process anything. + markup = """""" + soup = self.soup(markup) + assert markup == soup.decode() + + markup = b"""""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_deepcopy(self): + """Make sure you can copy the tree builder. + + This is important because the builder is part of a + BeautifulSoup object, and we want to be able to copy that. + """ + copy.deepcopy(self.default_builder) + + def test_p_tag_is_never_empty_element(self): + """A

tag is never designated as an empty-element tag. + + Even if the markup shows it as an empty-element tag, it + shouldn't be presented that way. + """ + soup = self.soup("

") + assert not soup.p.is_empty_element + assert str(soup.p) == "

" + + def test_unclosed_tags_get_closed(self): + """A tag that's not closed by the end of the document should be closed. + + This applies to all tags except empty-element tags. + """ + self.assert_soup("

", "

") + self.assert_soup("", "") + + self.assert_soup("
", "
") + + def test_br_is_always_empty_element_tag(self): + """A
tag is designated as an empty-element tag. + + Some parsers treat

as one
tag, some parsers as + two tags, but it should always be an empty-element tag. + """ + soup = self.soup("

") + assert soup.br.is_empty_element + assert str(soup.br) == "
" + + def test_nested_formatting_elements(self): + self.assert_soup("") + + def test_double_head(self): + html = ''' + + +Ordinary HEAD element test + + + +Hello, world! + + +''' + soup = self.soup(html) + assert "text/javascript" == soup.find('script')['type'] + + def test_comment(self): + # Comments are represented as Comment objects. + markup = "

foobaz

" + self.assert_soup(markup) + + soup = self.soup(markup) + comment = soup.find(string="foobar") + assert comment.__class__ == Comment + + # The comment is properly integrated into the tree. + foo = soup.find(string="foo") + assert comment == foo.next_element + baz = soup.find(string="baz") + assert comment == baz.previous_element + + def test_preserved_whitespace_in_pre_and_textarea(self): + """Whitespace must be preserved in
 and "
+        self.assert_soup(pre_markup)
+        self.assert_soup(textarea_markup)
+
+        soup = self.soup(pre_markup)
+        assert soup.pre.prettify() == pre_markup
+
+        soup = self.soup(textarea_markup)
+        assert soup.textarea.prettify() == textarea_markup
+
+        soup = self.soup("")
+        assert soup.textarea.prettify() == ""
+
+    def test_nested_inline_elements(self):
+        """Inline elements can be nested indefinitely."""
+        b_tag = "Inside a B tag"
+        self.assert_soup(b_tag)
+
+        nested_b_tag = "

A nested tag

" + self.assert_soup(nested_b_tag) + + double_nested_b_tag = "

A doubly nested tag

" + self.assert_soup(nested_b_tag) + + def test_nested_block_level_elements(self): + """Block elements can be nested.""" + soup = self.soup('

Foo

') + blockquote = soup.blockquote + assert blockquote.p.b.string == 'Foo' + assert blockquote.b.string == 'Foo' + + def test_correctly_nested_tables(self): + """One table can go inside another one.""" + markup = ('' + '' + "') + + self.assert_soup( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assert_soup( + "" + "" + "
Foo
Bar
Baz
") + + def test_multivalued_attribute_with_whitespace(self): + # Whitespace separating the values of a multi-valued attribute + # should be ignored. + + markup = '
' + soup = self.soup(markup) + assert ['foo', 'bar'] == soup.div['class'] + + # If you search by the literal name of the class it's like the whitespace + # wasn't there. + assert soup.div == soup.find('div', class_="foo bar") + + def test_deeply_nested_multivalued_attribute(self): + # html5lib can set the attributes of the same tag many times + # as it rearranges the tree. This has caused problems with + # multivalued attributes. + markup = '
' + soup = self.soup(markup) + assert ["css"] == soup.div.div['class'] + + def test_multivalued_attribute_on_html(self): + # html5lib uses a different API to set the attributes ot the + # tag. This has caused problems with multivalued + # attributes. + markup = '' + soup = self.soup(markup) + assert ["a", "b"] == soup.html['class'] + + def test_angle_brackets_in_attribute_values_are_escaped(self): + self.assert_soup('', '') + + def test_strings_resembling_character_entity_references(self): + # "&T" and "&p" look like incomplete character entities, but they are + # not. + self.assert_soup( + "

• AT&T is in the s&p 500

", + "

\u2022 AT&T is in the s&p 500

" + ) + + def test_apos_entity(self): + self.assert_soup( + "

Bob's Bar

", + "

Bob's Bar

", + ) + + def test_entities_in_foreign_document_encoding(self): + # “ and ” are invalid numeric entities referencing + # Windows-1252 characters. - references a character common + # to Windows-1252 and Unicode, and ☃ references a + # character only found in Unicode. + # + # All of these entities should be converted to Unicode + # characters. + markup = "

“Hello” -☃

" + soup = self.soup(markup) + assert "“Hello” -☃" == soup.p.string + + def test_entities_in_attributes_converted_to_unicode(self): + expect = '

' + self.assert_soup('

', expect) + self.assert_soup('

', expect) + self.assert_soup('

', expect) + self.assert_soup('

', expect) + + def test_entities_in_text_converted_to_unicode(self): + expect = '

pi\N{LATIN SMALL LETTER N WITH TILDE}ata

' + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + + def test_quot_entity_converted_to_quotation_mark(self): + self.assert_soup("

I said "good day!"

", + '

I said "good day!"

') + + def test_out_of_range_entity(self): + expect = "\N{REPLACEMENT CHARACTER}" + self.assert_soup("�", expect) + self.assert_soup("�", expect) + self.assert_soup("�", expect) + + def test_multipart_strings(self): + "Mostly to prevent a recurrence of a bug in the html5lib treebuilder." + soup = self.soup("

\nfoo

") + assert "p" == soup.h2.string.next_element.name + assert "p" == soup.p.name + self.assertConnectedness(soup) + + def test_empty_element_tags(self): + """Verify consistent handling of empty-element tags, + no matter how they come in through the markup. + """ + self.assert_soup('


', "


") + self.assert_soup('


', "


") + + def test_head_tag_between_head_and_body(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + foo + +""" + soup = self.soup(content) + assert soup.html.body is not None + self.assertConnectedness(soup) + + def test_multiple_copies_of_a_tag(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + + + + +""" + soup = self.soup(content) + self.assertConnectedness(soup.article) + + def test_basic_namespaces(self): + """Parsers don't need to *understand* namespaces, but at the + very least they should not choke on namespaces or lose + data.""" + + markup = b'4' + soup = self.soup(markup) + assert markup == soup.encode() + html = soup.html + assert 'http://www.w3.org/1999/xhtml' == soup.html['xmlns'] + assert 'http://www.w3.org/1998/Math/MathML' == soup.html['xmlns:mathml'] + assert 'http://www.w3.org/2000/svg' == soup.html['xmlns:svg'] + + def test_multivalued_attribute_value_becomes_list(self): + markup = b'' + soup = self.soup(markup) + assert ['foo', 'bar'] == soup.a['class'] + + # + # Generally speaking, tests below this point are more tests of + # Beautiful Soup than tests of the tree builders. But parsers are + # weird, so we run these tests separately for every tree builder + # to detect any differences between them. + # + + def test_can_parse_unicode_document(self): + # A seemingly innocuous document... but it's in Unicode! And + # it contains characters that can't be represented in the + # encoding found in the declaration! The horror! + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.body.string + + def test_soupstrainer(self): + """Parsers should be able to work with SoupStrainers.""" + strainer = SoupStrainer("b") + soup = self.soup("A bold statement", + parse_only=strainer) + assert soup.decode() == "bold" + + def test_single_quote_attribute_values_become_double_quotes(self): + self.assert_soup("", + '') + + def test_attribute_values_with_nested_quotes_are_left_alone(self): + text = """a""" + self.assert_soup(text) + + def test_attribute_values_with_double_nested_quotes_get_quoted(self): + text = """a""" + soup = self.soup(text) + soup.foo['attr'] = 'Brawls happen at "Bob\'s Bar"' + self.assert_soup( + soup.foo.decode(), + """a""") + + def test_ampersand_in_attribute_value_gets_escaped(self): + self.assert_soup('', + '') + + self.assert_soup( + 'foo', + 'foo') + + def test_escaped_ampersand_in_attribute_value_is_left_alone(self): + self.assert_soup('') + + def test_entities_in_strings_converted_during_parsing(self): + # Both XML and HTML entities are converted to Unicode characters + # during parsing. + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

" + self.assert_soup(text, expected) + + def test_smart_quotes_converted_on_the_way_in(self): + # Microsoft smart quotes are converted to Unicode characters during + # parsing. + quote = b"

\x91Foo\x92

" + soup = self.soup(quote) + assert soup.p.string == "\N{LEFT SINGLE QUOTATION MARK}Foo\N{RIGHT SINGLE QUOTATION MARK}" + + def test_non_breaking_spaces_converted_on_the_way_in(self): + soup = self.soup("  ") + assert soup.a.string == "\N{NO-BREAK SPACE}" * 2 + + def test_entities_converted_on_the_way_out(self): + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

".encode("utf-8") + soup = self.soup(text) + assert soup.p.encode("utf-8") == expected + + def test_real_iso_8859_document(self): + # Smoke test of interrelated functionality, using an + # easy-to-understand document. + + # Here it is in Unicode. Note that it claims to be in ISO-8859-1. + unicode_html = '

Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!

' + + # That's because we're going to encode it into ISO-8859-1, + # and use that to test. + iso_latin_html = unicode_html.encode("iso-8859-1") + + # Parse the ISO-8859-1 HTML. + soup = self.soup(iso_latin_html) + + # Encode it to UTF-8. + result = soup.encode("utf-8") + + # What do we expect the result to look like? Well, it would + # look like unicode_html, except that the META tag would say + # UTF-8 instead of ISO-8859-1. + expected = unicode_html.replace("ISO-8859-1", "utf-8") + + # And, of course, it would be in UTF-8, not Unicode. + expected = expected.encode("utf-8") + + # Ta-da! + assert result == expected + + def test_real_shift_jis_document(self): + # Smoke test to make sure the parser can handle a document in + # Shift-JIS encoding, without choking. + shift_jis_html = ( + b'
'
+            b'\x82\xb1\x82\xea\x82\xcdShift-JIS\x82\xc5\x83R\x81[\x83f'
+            b'\x83B\x83\x93\x83O\x82\xb3\x82\xea\x82\xbd\x93\xfa\x96{\x8c'
+            b'\xea\x82\xcc\x83t\x83@\x83C\x83\x8b\x82\xc5\x82\xb7\x81B'
+            b'
') + unicode_html = shift_jis_html.decode("shift-jis") + soup = self.soup(unicode_html) + + # Make sure the parse tree is correctly encoded to various + # encodings. + assert soup.encode("utf-8") == unicode_html.encode("utf-8") + assert soup.encode("euc_jp") == unicode_html.encode("euc_jp") + + def test_real_hebrew_document(self): + # A real-world test to make sure we can convert ISO-8859-9 (a + # Hebrew encoding) to UTF-8. + hebrew_document = b'Hebrew (ISO 8859-8) in Visual Directionality

Hebrew (ISO 8859-8) in Visual Directionality

\xed\xe5\xec\xf9' + soup = self.soup( + hebrew_document, from_encoding="iso8859-8") + # Some tree builders call it iso8859-8, others call it iso-8859-9. + # That's not a difference we really care about. + assert soup.original_encoding in ('iso8859-8', 'iso-8859-8') + assert soup.encode('utf-8') == ( + hebrew_document.decode("iso8859-8").encode("utf-8") + ) + + def test_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', {'http-equiv': 'Content-type'}) + content = parsed_meta['content'] + assert 'text/html; charset=x-sjis' == content + + # But that value is actually a ContentMetaAttributeValue object. + assert isinstance(content, ContentMetaAttributeValue) + + # And it will take on a value that reflects its current + # encoding. + assert 'text/html; charset=utf8' == content.encode("utf8") + + # For the rest of the story, see TestSubstitutions in + # test_tree.py. + + def test_html5_style_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', id="encoding") + charset = parsed_meta['charset'] + assert 'x-sjis' == charset + + # But that value is actually a CharsetMetaAttributeValue object. + assert isinstance(charset, CharsetMetaAttributeValue) + + # And it will take on a value that reflects its current + # encoding. + assert 'utf8' == charset.encode("utf8") + + def test_python_specific_encodings_not_used_in_charset(self): + # You can encode an HTML document using a Python-specific + # encoding, but that encoding won't be mentioned _inside_ the + # resulting document. Instead, the document will appear to + # have no encoding. + for markup in [ + b'' + b'' + ]: + soup = self.soup(markup) + for encoding in PYTHON_SPECIFIC_ENCODINGS: + if encoding in ( + 'idna', 'mbcs', 'oem', 'undefined', + 'string_escape', 'string-escape' + ): + # For one reason or another, these will raise an + # exception if we actually try to use them, so don't + # bother. + continue + encoded = soup.encode(encoding) + assert b'meta charset=""' in encoded + assert encoding.encode("ascii") not in encoded + + def test_tag_with_no_attributes_can_have_attributes_added(self): + data = self.soup("text") + data.a['foo'] = 'bar' + assert 'text' == data.a.decode() + + def test_closing_tag_with_no_opening_tag(self): + # Without BeautifulSoup.open_tag_counter, the tag will + # cause _popToTag to be called over and over again as we look + # for a tag that wasn't there. The result is that 'text2' + # will show up outside the body of the document. + soup = self.soup("

text1

text2
") + assert "

text1

text2
" == soup.body.decode() + + def test_worst_case(self): + """Test the worst case (currently) for linking issues.""" + + soup = self.soup(BAD_DOCUMENT) + self.linkage_validator(soup) + + +class XMLTreeBuilderSmokeTest(TreeBuilderSmokeTest): + + def test_pickle_and_unpickle_identity(self): + # Pickling a tree, then unpickling it, yields a tree identical + # to the original. + tree = self.soup("foo") + dumped = pickle.dumps(tree, 2) + loaded = pickle.loads(dumped) + assert loaded.__class__ == BeautifulSoup + assert loaded.decode() == tree.decode() + + def test_docstring_generated(self): + soup = self.soup("") + assert soup.encode() == b'\n' + + def test_xml_declaration(self): + markup = b"""\n""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_python_specific_encodings_not_used_in_xml_declaration(self): + # You can encode an XML document using a Python-specific + # encoding, but that encoding won't be mentioned _inside_ the + # resulting document. + markup = b"""\n""" + soup = self.soup(markup) + for encoding in PYTHON_SPECIFIC_ENCODINGS: + if encoding in ( + 'idna', 'mbcs', 'oem', 'undefined', + 'string_escape', 'string-escape' + ): + # For one reason or another, these will raise an + # exception if we actually try to use them, so don't + # bother. + continue + encoded = soup.encode(encoding) + assert b'' in encoded + assert encoding.encode("ascii") not in encoded + + def test_processing_instruction(self): + markup = b"""\n""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_real_xhtml_document(self): + """A real XHTML document should come out *exactly* the same as it went in.""" + markup = b""" + + +Hello. +Goodbye. +""" + soup = self.soup(markup) + assert soup.encode("utf-8") == markup + + def test_nested_namespaces(self): + doc = b""" + + + + + +""" + soup = self.soup(doc) + assert doc == soup.encode() + + def test_formatter_processes_script_tag_for_xml_documents(self): + doc = """ + +""" + soup = BeautifulSoup(doc, "lxml-xml") + # lxml would have stripped this while parsing, but we can add + # it later. + soup.script.string = 'console.log("< < hey > > ");' + encoded = soup.encode() + assert b"< < hey > >" in encoded + + def test_can_parse_unicode_document(self): + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.root.string + + def test_can_parse_unicode_document_begining_with_bom(self): + markup = '\N{BYTE ORDER MARK}Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.root.string + + def test_popping_namespaced_tag(self): + markup = 'b2012-07-02T20:33:42Zcd' + soup = self.soup(markup) + assert str(soup.rss) == markup + + def test_docstring_includes_correct_encoding(self): + soup = self.soup("") + assert soup.encode("latin1") == b'\n' + + def test_large_xml_document(self): + """A large XML document should come out the same as it went in.""" + markup = (b'\n' + + b'0' * (2**12) + + b'') + soup = self.soup(markup) + assert soup.encode("utf-8") == markup + + def test_tags_are_empty_element_if_and_only_if_they_are_empty(self): + self.assert_soup("

", "

") + self.assert_soup("

foo

") + + def test_namespaces_are_preserved(self): + markup = 'This tag is in the a namespaceThis tag is in the b namespace' + soup = self.soup(markup) + root = soup.root + assert "http://example.com/" == root['xmlns:a'] + assert "http://example.net/" == root['xmlns:b'] + + def test_closing_namespaced_tag(self): + markup = '

20010504

' + soup = self.soup(markup) + assert str(soup.p) == markup + + def test_namespaced_attributes(self): + markup = '' + soup = self.soup(markup) + assert str(soup.foo) == markup + + def test_namespaced_attributes_xml_namespace(self): + markup = 'bar' + soup = self.soup(markup) + assert str(soup.foo) == markup + + def test_find_by_prefixed_name(self): + doc = """ +foo + bar + baz + +""" + soup = self.soup(doc) + + # There are three tags. + assert 3 == len(soup.find_all('tag')) + + # But two of them are ns1:tag and one of them is ns2:tag. + assert 2 == len(soup.find_all('ns1:tag')) + assert 1 == len(soup.find_all('ns2:tag')) + + assert 1, len(soup.find_all('ns2:tag', key='value')) + assert 3, len(soup.find_all(['ns1:tag', 'ns2:tag'])) + + def test_copy_tag_preserves_namespace(self): + xml = """ +""" + + soup = self.soup(xml) + tag = soup.document + duplicate = copy.copy(tag) + + # The two tags have the same namespace prefix. + assert tag.prefix == duplicate.prefix + + def test_worst_case(self): + """Test the worst case (currently) for linking issues.""" + + soup = self.soup(BAD_DOCUMENT) + self.linkage_validator(soup) + + +class HTML5TreeBuilderSmokeTest(HTMLTreeBuilderSmokeTest): + """Smoke test for a tree builder that supports HTML5.""" + + def test_real_xhtml_document(self): + # Since XHTML is not HTML5, HTML5 parsers are not tested to handle + # XHTML documents in any particular way. + pass + + def test_html_tags_have_namespace(self): + markup = "" + soup = self.soup(markup) + assert "http://www.w3.org/1999/xhtml" == soup.a.namespace + + def test_svg_tags_have_namespace(self): + markup = '' + soup = self.soup(markup) + namespace = "http://www.w3.org/2000/svg" + assert namespace == soup.svg.namespace + assert namespace == soup.circle.namespace + + + def test_mathml_tags_have_namespace(self): + markup = '5' + soup = self.soup(markup) + namespace = 'http://www.w3.org/1998/Math/MathML' + assert namespace == soup.math.namespace + assert namespace == soup.msqrt.namespace + + def test_xml_declaration_becomes_comment(self): + markup = '' + soup = self.soup(markup) + assert isinstance(soup.contents[0], Comment) + assert soup.contents[0] == '?xml version="1.0" encoding="utf-8"?' + assert "html" == soup.contents[0].next_element.name diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/__init__.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b65759497f8a1efb255c95ae95c8a2cb4aab0980 GIT binary patch literal 46690 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 literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_builder.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_builder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ac9938ecf4df532a6a66b1b1b7fd295ef380b6d GIT binary patch literal 1213 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 BgH-?k literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_element.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_element.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90fb1868ddd146dacf072101f631c8cb158edbef GIT binary patch literal 2755 zcmb_eTW{Mo6c!~}QQRc!+H7lfRf~3*fyB+QVwW~6GGy7M+q_{3Ho!1I&?0RsktLU; za}ko4raxqR%wOW`p86LC4A?nT>^MP^wZIhcgghkA;rY(ZY<9Nlz_-5pPxAe=#oLaSbwkecWQQnE-lqn@tlw^@eMPFpPKG?5UtD8L$Nx{-|KWZo4@v)_) zXp?mpqhDB8te58(BbM=~!FG}^Yo}sE%OvYYOG{NIMWjKG;3!>*0h3INsFS2Z)vGVS zBB$n=g|!}&O6Z@2W?yNz+#YK28%u`*w(?BFi!Ru@*7+AZlOff%Fn5dQSInM4IYd& z80u>v8eQfbxrgL{aI)>HH=j7qh~>Hy+{F?1h>TCJB9A-ZFt1@Md;K(1#yKVugW}jV zz7lE25O(ayIpF+Fn-5#Rib395{+JH-buZ6a%b(DJOm+bE)~;Z>CnSv}+fBhit@@70 zc3M9s?UqWkSOO@w!KbR#RuAr@*OaC7G$@R9Cd~i>+GqQ;Eohc!g65L;6Qw}r>uB^0 z5QkLBjEf^A#TSLdHUM28yTi*sHr}4tQgK-pDtNezXg%gIf3y(c) zUvAi^)-X0oF`6hUo(>^8Qb;kXa~kJqp3zaBa;j`5-vQwYLk=x1e!kkuSC)Rp>;ROY zCYwA1n3QI7@5nnmNf|qL56FQFsdRUgG~9(0^9});0}uEsW4>?C`@r|NJ+*nl_u)Ls ztN_0P{B)dXl@d&O6Ohagqm0OF7t{PRwRJ41@imqh-R6gFy8CZy#nsHsxg&-pMFl$sez zpAK1Svz^N8@Fa;3lk-Rxkeud?oni9GDIhqpsS&ziHJl24%e}l7M{xeM7DF8d=h!+7 z&MWINRKUR0(Ef3)w+-U=ME6d*$HuU&bfSkk$+KdxCZuN2bH?GQB5X!nsHB@gJJNa7 zV>{5DpvlE$`@voa%W4E)C&^eE@jM=4KaA8!wryl^7tSRzg2Wk$y1j5Fim?TZqxcCd zFp9CPb7%n&o%1%@V7`T`J9Y&T{fEolKaummav+w0<5|u(KEL*4n@ zRG5mBq~=M~YUXm8bn)@jKF$Opi*qiHT^qipV!0EJvjy+A4cNGBwX_dyn2vEP<*a~g zWq+u6A%x`|xj~8_UfLaHnZHW@{{&wNRtX=ZJiu2u2Vc-A7PQ#Y_j|gZJ{r0H%M#Jz ztqZmgWcfbWU);K2*McuUfNk&qwtX2Pxs3$t<~gY4UEr<5D8VEnFdMas#40bbtH^hO zm?=sj{wTFqCd8bk+Iw*9GZ+f1W=MQLoR-LI)T;6x{BK@^PF_E0-!?qT7h-6ZEf6o7 iAa8GpSlb-6_b*ar!j-ZxJjUNTHo5&^zB1!o|L9-+h|iAz literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_formatter.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_formatter.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3709fe51515b442eac0a2d2229e0d91d5dcda7d1 GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..108b6ff870bec3e2defcef1e01ae061de65d12fb GIT binary patch literal 4463 zcmbtX&2JmW72hwCON#oi8ryZ8ri7BvW$RLQ>;y(c6LB2dao{qB<)Xnt?RLo-(n~GL z)y%FG5fo6=2J8eV&;q^|kb4P?_Si$tJ@+rzqkHnH1%g}x6zT8HQW7OARgo^SZ)V=S zd3^KU`@NaC6c9p5Yie_07O^Ox0SB zh1Lo(y{wb%<(!3XXSZ%E9d{x2UaBEE@$s0;u1J#jg(v!czk}r`-{W2! z`RzDZ9>n3^>gPJCHxirJWODL-nw(I&+#9TNnrV?GlaGPHyLjbo5Ux2o9BXh>Ina2Z zIT>a$3vHHVSQc%L<(Q2Y4r2whc{at0XbWtb&7hrPvuqA+ksX5z=aWX&TXLxS704 zGj8AOaft<-xpGrRyyvn(E7}bCJlRRU(~RMzZ{1?`zbiS~1A-8d?!36$Q;wLy@I@oT zxEc7Z9V1Ub<~taaN``z@e~+^~l2pZ5cQm6v)02~NS-YnnldG?&q^D95EM$|r^!nK zff@+TN?tnx07JjEN@1_=$_%G#UcJ_=w+DmTqE~-TVQW-!NGrf4$*KiB$*{N=$|MsE zJSLNZFa5rZync&2xiPjAiy~jK#55FO0D}Pwtm4ec(lXBWl2oVwom2@hUhn$SP5+F& z3=Pr-(X4`A)C>CX{1Hj?qK`M`+?c^ZJp?dttQc@__d^My+4~A9viy z>&Vw&v4Xt@Zw#*<;fw!8|X)uRpkJ!n+h5Jl4p=CFqLkt)&MnN4B+6-oljIQ1_Rt@=TiYPTUF|Mky zMdNJ?K?m}{eV@1^t&8Hqk@zL$snq1FP-#Sz=LXu9ztnvpr9&A_+}=k?*mBjR?bx_$B6sg$&7`Fjwif2uvwx3xzaRZGNA@1hQ#(h!?c8nKS9 zcp1gJsCZO2b(U3}>%@7eJ=EKVI)m*k@+6~FC5F#hD*ef^cy=-wS2|682=Ykp!V4pKgtBm?Q_eAC!V@MuK|E{16B)%x zeWN^~V4H2=T6AL2cUc_b;KT9ndQl|&W{jhNfGB=Mq(bD!AQfYrP##j}CtxHt|0LwC z2&J2n=cyrHCt0fSX(FjIJ~ys(yShKXyrhz+>6UJNlQrkfm-OLBM`X?6c2;Y_pydU! zUOo6P%Ejkf$V3q#*I}u_GDtN^35c(?gcSFh^2zpYQ?=cfS*4m1F|5RK7-%z=Ks6*UCl7> zoH7sj^`mNMdgjQ8y*>QhFMn zR;A$ZD9~j_l3O&(!kIj;zogHbGkKiOX3?~*;alHnfBQ;89?Hr3t9WG>gz4{Vzx?%z zxrKth1@Mma6WW%giaeEVeJeA{Y#UFstt!H%7;BaSO0H3vt(e2(!Nx7#PCH96Wz@5W4`dE)Sp=RCOAxlpy#eEa z9M6CDxw^6JFd>jBH`-z;rc(E>KR*70q|GT7=5pnJhp(+I#l(E}>F0m{BGsO9)#Cmj zTKbAA#ozvtE+s~)7M;|nKaZyx=~TA77NhsIzVId8coraSm+7|8FD`whcJb)1U(&s5 zhY5kH@?8>W zcBn4AMW}f8+2enH@tf3PV?JcEWe=ws%s->dKckkdbAc-dm?Om;;kwHF_4*sKwn(j{ zTC|UYvJkZ|q4MH`1?4Y~4fFtAE`S_$T$)&yWO=`Z@Ky4vm^ssaKa6n&OD|u}%pi_v z9QS>a+8vMQ(<*o!|Ln|e`1r!wTMEUhVmd{d*im?}QXE%MBMaZ!tH| z##PTo=_nf14i}FA*g;*5%5-A8>I=u4CUv%BI*bC@_;JSjc!kJ~f?ZrXl zj<3;T7FMkTnJ6xu7F3u{Y8Wdg)Bz3$(gp5!opSO3uj%c6H*jRFytKpALe6Dk#s@ cpB-jpV%JiK)Cnk(?6pjCw5`usMSafr4=xg;mH+?% literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_lxml.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_lxml.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55ba54cfbd35b12b947497251ea8134e8821c79e GIT binary patch literal 5546 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 R5wMWM*`X@c)64zVe*q(J=Pm#M literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f40e80b95d8550e2d0842c074fc71791db771660 GIT binary patch literal 4929 zcmb_g&2JmW72nxiE|(M~%Z}qZX`IkO(THs=%SlkT4$IhsS8D9PTr@7@R_h?#;;d~2^t9WoV+VG}37n1_xSc{! z=y-wGDF(%kANZY8Q0kO}a%Uo#U>0|{+pcsbgGpw+XYm5}9$MTJliN-(g?5qqX#1vp zjI$-HR{9FFS&OxDT9{vmbd(n7yPb|mbULvhn(atNI_@TEaiQDPTRo8;TZ}g2R9oA0x7tFj3!&4gWzp%iBb|%- zieV)+mikNGes5VQ-K3@Mzic!v<5sVL2rFRR3T)1}{m=>=+B%*tFJN0<`T|KfwAd!i zFuF+J1>Ezv)z8qQq4RC_fN2QC)7Cb3@N_sEvK?pFx?`)E_pP5Z?he_8L%My;z^fY` zYcWmy!Zz`4X5(_6XLx-7xSiszWw-;wwTE^-!>>%cIJEc8@Vjh`k!I&J{2?2c^RgNK zw13>*41Y0Pf9T{h{Dayp3#)Z|Q4>9Jsv%HqIX6QT+l8`>4szyW9Z2}=tKXzHOEixjq8>xw6~oQ7r6 z0>Mr_VG=%L)qLsUAqfc5p>Dq=bf|%|)NRK~r$rK!v{W!{B=!Ukb52?bqjr1Ls=2AF zM0+h|DlIg*L4Gqs{u4`{f#`p>f=es6M6bItcOmR;>Gf{1GWS;4lkp}XyK+xN0K5#F zGP>8sj4QL7BH3K|AYNTju@>igQS(mJ5^7~ty?tH-i^|Y28Tn7Ptl8dHdWO2qCc>zB zw;$ts_*~c#n3JoMSd02Dh~@eWKYN;;G`~~hH+Pzy0PmD@nhh=-0sPr-oZ*05kZOJ0 z#w`}{GPHK!7`to(uE8xp941#UlUcR1GLgvukwV9=zA%ZD)ft6Xp3UK3cn-?AMG4uHW#gWqJCIzaG zK{$J4h1M^vHK>9+5B&#d??6?%SpEuINTdLq)JZN0J(+xCf_U=MR|{`4a!Kj zOsfQImIrqz-&Uc5n2TyuHTk^SUEL5(a88J$?(fA{;-$wl}cbi(a2t~pX-xFAs60rCLQnHZl_^eDJ z{nB$_;~ByZsD?rdsb`*Mpwe@s8cKRQ%v6S__rezvToq#m#rnJ0@4F48E7EIF>GpN6 zuR|#!zLn>&l<~t+Xgb^Dxb_b5agKMN4Q8KbPvegd?1PrESMh#{#{LkFy3J`hCL&Ri zcR32_$7~_1QnL_Fg@6YjFrDWWjPo{%IHQ!Zk=smtN_sGS9~E?IXlu4@tAx0wRo=Gc z(CDg+CbG7=2hdxI*&ISRO8jp(_3AcqeRZh8+AqJiV@Ge zAK3fIhD)SPicT%;{&pENvkmJv_FZ==%LnAwVQ3Oy7(TI6dv-2m_YWJXT&H3a^C)7~S0Vm66ms_5xqGo*hl=vL z{@l6!T1wr%Ui(q4k_8%bswmOc=#U=xR65XcA$5rOBi%|;SWv-UVZeBm>VA2JzA~yY zaV(GZRAmIk+yJT9iR7Jr@37up&3*kDh-gBF`VNTYxXk|Ab*5PP>q;?u_wCBlO3_CS zoGQ48cZ2%>qU-|@aWEq(WFEI#1L5SMTTp+Ot*p)qKZxIS$NGV#T-q^#5@0>%u)*1(oS zg6x{wvX_;b#jK?z9UA0|L`dSOsJu=LviV^XA2%kZC5%pre-0b&m$it+zCp9j5UCNFBXW_*kBPiPk6KLX V*R!)zgJGCS=e|8RS+S>Q{tcrm>Ky<8 literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6a899e39e57c414ea2fb7e932b072681a31971e GIT binary patch literal 31129 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 G`u_vSXkNeo literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_soup.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_soup.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3aa2d87a7eb4987654a7f289c754a3fbac10e44 GIT binary patch literal 18141 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 K4^Qr%oce$I%XaDj literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_tag.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_tag.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c61e38c8b51aedb2b12d0743687b99aa08e94a GIT binary patch literal 8665 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 QXCQJYQtmaUewsM>Kj0C{IsgCw literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/__pycache__/test_tree.cpython-39.pyc b/.venv/Lib/site-packages/bs4/tests/__pycache__/test_tree.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9cd83959b6800c8f31973641fb41e4d872b26c8 GIT binary patch literal 51033 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 literal 0 HcmV?d00001 diff --git a/.venv/Lib/site-packages/bs4/tests/test_builder.py b/.venv/Lib/site-packages/bs4/tests/test_builder.py new file mode 100644 index 0000000..7537071 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_builder.py @@ -0,0 +1,29 @@ +import pytest +from unittest.mock import patch +from bs4.builder import DetectsXMLParsedAsHTML + +class TestDetectsXMLParsedAsHTML(object): + + @pytest.mark.parametrize( + "markup,looks_like_xml", + [("No xml declaration", False), + ("obviously HTMLActually XHTML", False), + (" < html>Tricky XHTML", False), + ("", True), + ] + ) + def test_warn_if_markup_looks_like_xml(self, markup, looks_like_xml): + # Test of our ability to guess at whether markup looks XML-ish + # _and_ not HTML-ish. + with patch('bs4.builder.DetectsXMLParsedAsHTML._warn') as mock: + for data in markup, markup.encode('utf8'): + result = DetectsXMLParsedAsHTML.warn_if_markup_looks_like_xml( + data + ) + assert result == looks_like_xml + if looks_like_xml: + assert mock.called + else: + assert not mock.called + mock.reset_mock() diff --git a/.venv/Lib/site-packages/bs4/tests/test_builder_registry.py b/.venv/Lib/site-packages/bs4/tests/test_builder_registry.py new file mode 100644 index 0000000..9327174 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_builder_registry.py @@ -0,0 +1,137 @@ +"""Tests of the builder registry.""" + +import pytest +import warnings + +from bs4 import BeautifulSoup +from bs4.builder import ( + builder_registry as registry, + HTMLParserTreeBuilder, + TreeBuilderRegistry, +) + +from . import ( + HTML5LIB_PRESENT, + LXML_PRESENT, +) + +if HTML5LIB_PRESENT: + from bs4.builder import HTML5TreeBuilder + +if LXML_PRESENT: + from bs4.builder import ( + LXMLTreeBuilderForXML, + LXMLTreeBuilder, + ) + + +# TODO: Split out the lxml and html5lib tests into their own classes +# and gate with pytest.mark.skipIf. +class TestBuiltInRegistry(object): + """Test the built-in registry with the default builders registered.""" + + def test_combination(self): + assert registry.lookup('strict', 'html') == HTMLParserTreeBuilder + if LXML_PRESENT: + assert registry.lookup('fast', 'html') == LXMLTreeBuilder + assert registry.lookup('permissive', 'xml') == LXMLTreeBuilderForXML + if HTML5LIB_PRESENT: + assert registry.lookup('html5lib', 'html') == HTML5TreeBuilder + + def test_lookup_by_markup_type(self): + if LXML_PRESENT: + assert registry.lookup('html') == LXMLTreeBuilder + assert registry.lookup('xml') == LXMLTreeBuilderForXML + else: + assert registry.lookup('xml') == None + if HTML5LIB_PRESENT: + assert registry.lookup('html') == HTML5TreeBuilder + else: + assert registry.lookup('html') == HTMLParserTreeBuilder + + def test_named_library(self): + if LXML_PRESENT: + assert registry.lookup('lxml', 'xml') == LXMLTreeBuilderForXML + assert registry.lookup('lxml', 'html') == LXMLTreeBuilder + if HTML5LIB_PRESENT: + assert registry.lookup('html5lib') == HTML5TreeBuilder + + assert registry.lookup('html.parser') == HTMLParserTreeBuilder + + def test_beautifulsoup_constructor_does_lookup(self): + + with warnings.catch_warnings(record=True) as w: + # This will create a warning about not explicitly + # specifying a parser, but we'll ignore it. + + # You can pass in a string. + BeautifulSoup("", features="html") + # Or a list of strings. + BeautifulSoup("", features=["html", "fast"]) + pass + + # You'll get an exception if BS can't find an appropriate + # builder. + with pytest.raises(ValueError): + BeautifulSoup("", features="no-such-feature") + +class TestRegistry(object): + """Test the TreeBuilderRegistry class in general.""" + + def setup_method(self): + self.registry = TreeBuilderRegistry() + + def builder_for_features(self, *feature_list): + cls = type('Builder_' + '_'.join(feature_list), + (object,), {'features' : feature_list}) + + self.registry.register(cls) + return cls + + def test_register_with_no_features(self): + builder = self.builder_for_features() + + # Since the builder advertises no features, you can't find it + # by looking up features. + assert self.registry.lookup('foo') is None + + # But you can find it by doing a lookup with no features, if + # this happens to be the only registered builder. + assert self.registry.lookup() == builder + + def test_register_with_features_makes_lookup_succeed(self): + builder = self.builder_for_features('foo', 'bar') + assert self.registry.lookup('foo') is builder + assert self.registry.lookup('bar') is builder + + def test_lookup_fails_when_no_builder_implements_feature(self): + builder = self.builder_for_features('foo', 'bar') + assert self.registry.lookup('baz') is None + + def test_lookup_gets_most_recent_registration_when_no_feature_specified(self): + builder1 = self.builder_for_features('foo') + builder2 = self.builder_for_features('bar') + assert self.registry.lookup() == builder2 + + def test_lookup_fails_when_no_tree_builders_registered(self): + assert self.registry.lookup() is None + + def test_lookup_gets_most_recent_builder_supporting_all_features(self): + has_one = self.builder_for_features('foo') + has_the_other = self.builder_for_features('bar') + has_both_early = self.builder_for_features('foo', 'bar', 'baz') + has_both_late = self.builder_for_features('foo', 'bar', 'quux') + lacks_one = self.builder_for_features('bar') + has_the_other = self.builder_for_features('foo') + + # There are two builders featuring 'foo' and 'bar', but + # the one that also features 'quux' was registered later. + assert self.registry.lookup('foo', 'bar') == has_both_late + + # There is only one builder featuring 'foo', 'bar', and 'baz'. + assert self.registry.lookup('foo', 'bar', 'baz') == has_both_early + + def test_lookup_fails_when_cannot_reconcile_requested_features(self): + builder1 = self.builder_for_features('foo', 'bar') + builder2 = self.builder_for_features('foo', 'baz') + assert self.registry.lookup('bar', 'baz') is None diff --git a/.venv/Lib/site-packages/bs4/tests/test_dammit.py b/.venv/Lib/site-packages/bs4/tests/test_dammit.py new file mode 100644 index 0000000..9aad0ac --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_dammit.py @@ -0,0 +1,370 @@ +# encoding: utf-8 +import pytest +import logging +import bs4 +from bs4 import BeautifulSoup +from bs4.dammit import ( + EntitySubstitution, + EncodingDetector, + UnicodeDammit, +) + +class TestUnicodeDammit(object): + """Standalone tests of UnicodeDammit.""" + + def test_unicode_input(self): + markup = "I'm already Unicode! \N{SNOWMAN}" + dammit = UnicodeDammit(markup) + assert dammit.unicode_markup == markup + + @pytest.mark.parametrize( + "smart_quotes_to,expect_converted", + [(None, "\u2018\u2019\u201c\u201d"), + ("xml", "‘’“”"), + ("html", "‘’“”"), + ("ascii", "''" + '""'), + ] + ) + def test_smart_quotes_to(self, smart_quotes_to, expect_converted): + """Verify the functionality of the smart_quotes_to argument + to the UnicodeDammit constructor.""" + markup = b"\x91\x92\x93\x94" + converted = UnicodeDammit( + markup, known_definite_encodings=["windows-1252"], + smart_quotes_to=smart_quotes_to + ).unicode_markup + assert converted == "{}".format(expect_converted) + + def test_detect_utf8(self): + utf8 = b"Sacr\xc3\xa9 bleu! \xe2\x98\x83" + dammit = UnicodeDammit(utf8) + assert dammit.original_encoding.lower() == 'utf-8' + assert dammit.unicode_markup == 'Sacr\xe9 bleu! \N{SNOWMAN}' + + def test_convert_hebrew(self): + hebrew = b"\xed\xe5\xec\xf9" + dammit = UnicodeDammit(hebrew, ["iso-8859-8"]) + assert dammit.original_encoding.lower() == 'iso-8859-8' + assert dammit.unicode_markup == '\u05dd\u05d5\u05dc\u05e9' + + def test_dont_see_smart_quotes_where_there_are_none(self): + utf_8 = b"\343\202\261\343\203\274\343\202\277\343\202\244 Watch" + dammit = UnicodeDammit(utf_8) + assert dammit.original_encoding.lower() == 'utf-8' + assert dammit.unicode_markup.encode("utf-8") == utf_8 + + def test_ignore_inappropriate_codecs(self): + utf8_data = "Räksmörgås".encode("utf-8") + dammit = UnicodeDammit(utf8_data, ["iso-8859-8"]) + assert dammit.original_encoding.lower() == 'utf-8' + + def test_ignore_invalid_codecs(self): + utf8_data = "Räksmörgås".encode("utf-8") + for bad_encoding in ['.utf8', '...', 'utF---16.!']: + dammit = UnicodeDammit(utf8_data, [bad_encoding]) + assert dammit.original_encoding.lower() == 'utf-8' + + def test_exclude_encodings(self): + # This is UTF-8. + utf8_data = "Räksmörgås".encode("utf-8") + + # But if we exclude UTF-8 from consideration, the guess is + # Windows-1252. + dammit = UnicodeDammit(utf8_data, exclude_encodings=["utf-8"]) + assert dammit.original_encoding.lower() == 'windows-1252' + + # And if we exclude that, there is no valid guess at all. + dammit = UnicodeDammit( + utf8_data, exclude_encodings=["utf-8", "windows-1252"]) + assert dammit.original_encoding == None + +class TestEncodingDetector(object): + + def test_encoding_detector_replaces_junk_in_encoding_name_with_replacement_character(self): + detected = EncodingDetector( + b'') + encodings = list(detected.encodings) + assert 'utf-\N{REPLACEMENT CHARACTER}' in encodings + + def test_detect_html5_style_meta_tag(self): + + for data in ( + b'', + b"", + b"", + b""): + dammit = UnicodeDammit(data, is_html=True) + assert "euc-jp" == dammit.original_encoding + + def test_last_ditch_entity_replacement(self): + # This is a UTF-8 document that contains bytestrings + # completely incompatible with UTF-8 (ie. encoded with some other + # encoding). + # + # Since there is no consistent encoding for the document, + # Unicode, Dammit will eventually encode the document as UTF-8 + # and encode the incompatible characters as REPLACEMENT + # CHARACTER. + # + # If chardet is installed, it will detect that the document + # can be converted into ISO-8859-1 without errors. This happens + # to be the wrong encoding, but it is a consistent encoding, so the + # code we're testing here won't run. + # + # So we temporarily disable chardet if it's present. + doc = b"""\357\273\277 +\330\250\330\252\330\261 +\310\322\321\220\312\321\355\344""" + chardet = bs4.dammit.chardet_dammit + logging.disable(logging.WARNING) + try: + def noop(str): + return None + bs4.dammit.chardet_dammit = noop + dammit = UnicodeDammit(doc) + assert True == dammit.contains_replacement_characters + assert "\ufffd" in dammit.unicode_markup + + soup = BeautifulSoup(doc, "html.parser") + assert soup.contains_replacement_characters + finally: + logging.disable(logging.NOTSET) + bs4.dammit.chardet_dammit = chardet + + def test_byte_order_mark_removed(self): + # A document written in UTF-16LE will have its byte order marker stripped. + data = b'\xff\xfe<\x00a\x00>\x00\xe1\x00\xe9\x00<\x00/\x00a\x00>\x00' + dammit = UnicodeDammit(data) + assert "áé" == dammit.unicode_markup + assert "utf-16le" == dammit.original_encoding + + def test_known_definite_versus_user_encodings(self): + # The known_definite_encodings are used before sniffing the + # byte-order mark; the user_encodings are used afterwards. + + # Here's a document in UTF-16LE. + data = b'\xff\xfe<\x00a\x00>\x00\xe1\x00\xe9\x00<\x00/\x00a\x00>\x00' + dammit = UnicodeDammit(data) + + # We can process it as UTF-16 by passing it in as a known + # definite encoding. + before = UnicodeDammit(data, known_definite_encodings=["utf-16"]) + assert "utf-16" == before.original_encoding + + # If we pass UTF-18 as a user encoding, it's not even + # tried--the encoding sniffed from the byte-order mark takes + # precedence. + after = UnicodeDammit(data, user_encodings=["utf-8"]) + assert "utf-16le" == after.original_encoding + assert ["utf-16le"] == [x[0] for x in dammit.tried_encodings] + + # Here's a document in ISO-8859-8. + hebrew = b"\xed\xe5\xec\xf9" + dammit = UnicodeDammit(hebrew, known_definite_encodings=["utf-8"], + user_encodings=["iso-8859-8"]) + + # The known_definite_encodings don't work, BOM sniffing does + # nothing (it only works for a few UTF encodings), but one of + # the user_encodings does work. + assert "iso-8859-8" == dammit.original_encoding + assert ["utf-8", "iso-8859-8"] == [x[0] for x in dammit.tried_encodings] + + def test_deprecated_override_encodings(self): + # override_encodings is a deprecated alias for + # known_definite_encodings. + hebrew = b"\xed\xe5\xec\xf9" + dammit = UnicodeDammit( + hebrew, + known_definite_encodings=["shift-jis"], + override_encodings=["utf-8"], + user_encodings=["iso-8859-8"], + ) + assert "iso-8859-8" == dammit.original_encoding + + # known_definite_encodings and override_encodings were tried + # before user_encodings. + assert ["shift-jis", "utf-8", "iso-8859-8"] == ( + [x[0] for x in dammit.tried_encodings] + ) + + def test_detwingle(self): + # Here's a UTF8 document. + utf8 = ("\N{SNOWMAN}" * 3).encode("utf8") + + # Here's a Windows-1252 document. + windows_1252 = ( + "\N{LEFT DOUBLE QUOTATION MARK}Hi, I like Windows!" + "\N{RIGHT DOUBLE QUOTATION MARK}").encode("windows_1252") + + # Through some unholy alchemy, they've been stuck together. + doc = utf8 + windows_1252 + utf8 + + # The document can't be turned into UTF-8: + with pytest.raises(UnicodeDecodeError): + doc.decode("utf8") + + # Unicode, Dammit thinks the whole document is Windows-1252, + # and decodes it into "☃☃☃“Hi, I like Windows!”☃☃☃" + + # But if we run it through fix_embedded_windows_1252, it's fixed: + fixed = UnicodeDammit.detwingle(doc) + assert "☃☃☃“Hi, I like Windows!”☃☃☃" == fixed.decode("utf8") + + def test_detwingle_ignores_multibyte_characters(self): + # Each of these characters has a UTF-8 representation ending + # in \x93. \x93 is a smart quote if interpreted as + # Windows-1252. But our code knows to skip over multibyte + # UTF-8 characters, so they'll survive the process unscathed. + for tricky_unicode_char in ( + "\N{LATIN SMALL LIGATURE OE}", # 2-byte char '\xc5\x93' + "\N{LATIN SUBSCRIPT SMALL LETTER X}", # 3-byte char '\xe2\x82\x93' + "\xf0\x90\x90\x93", # This is a CJK character, not sure which one. + ): + input = tricky_unicode_char.encode("utf8") + assert input.endswith(b'\x93') + output = UnicodeDammit.detwingle(input) + assert output == input + + def test_find_declared_encoding(self): + # Test our ability to find a declared encoding inside an + # XML or HTML document. + # + # Even if the document comes in as Unicode, it may be + # interesting to know what encoding was claimed + # originally. + + html_unicode = '' + html_bytes = html_unicode.encode("ascii") + + xml_unicode= '' + xml_bytes = xml_unicode.encode("ascii") + + m = EncodingDetector.find_declared_encoding + assert m(html_unicode, is_html=False) is None + assert "utf-8" == m(html_unicode, is_html=True) + assert "utf-8" == m(html_bytes, is_html=True) + + assert "iso-8859-1" == m(xml_unicode) + assert "iso-8859-1" == m(xml_bytes) + + # Normally, only the first few kilobytes of a document are checked for + # an encoding. + spacer = b' ' * 5000 + assert m(spacer + html_bytes) is None + assert m(spacer + xml_bytes) is None + + # But you can tell find_declared_encoding to search an entire + # HTML document. + assert ( + m(spacer + html_bytes, is_html=True, search_entire_document=True) + == "utf-8" + ) + + # The XML encoding declaration has to be the very first thing + # in the document. We'll allow whitespace before the document + # starts, but nothing else. + assert m(xml_bytes, search_entire_document=True) == "iso-8859-1" + assert m(b' ' + xml_bytes, search_entire_document=True) == "iso-8859-1" + assert m(b'a' + xml_bytes, search_entire_document=True) is None + + +class TestEntitySubstitution(object): + """Standalone tests of the EntitySubstitution class.""" + def setup_method(self): + self.sub = EntitySubstitution + + + @pytest.mark.parametrize( + "original,substituted", + [ + # Basic case. Unicode characters corresponding to named + # HTML entites are substituted; others are not. + ("foo\u2200\N{SNOWMAN}\u00f5bar", + "foo∀\N{SNOWMAN}õbar"), + + # MS smart quotes are a common source of frustration, so we + # give them a special test. + ('‘’foo“”', "‘’foo“”"), + ] + ) + def test_substitute_html(self, original, substituted): + assert self.sub.substitute_html(original) == substituted + + def test_html5_entity(self): + for entity, u in ( + # A few spot checks of our ability to recognize + # special character sequences and convert them + # to named entities. + ('⊧', '\u22a7'), + ('𝔑', '\U0001d511'), + ('≧̸', '\u2267\u0338'), + ('¬', '\xac'), + ('⫬', '\u2aec'), + + # We _could_ convert | to &verbarr;, but we don't, because + # | is an ASCII character. + ('|' '|'), + + # Similarly for the fj ligature, which we could convert to + # fj, but we don't. + ("fj", "fj"), + + # We do convert _these_ ASCII characters to HTML entities, + # because that's required to generate valid HTML. + ('>', '>'), + ('<', '<'), + ('&', '&'), + ): + template = '3 %s 4' + raw = template % u + with_entities = template % entity + assert self.sub.substitute_html(raw) == with_entities + + def test_html5_entity_with_variation_selector(self): + # Some HTML5 entities correspond either to a single-character + # Unicode sequence _or_ to the same character plus U+FE00, + # VARIATION SELECTOR 1. We can handle this. + data = "fjords \u2294 penguins" + markup = "fjords ⊔ penguins" + assert self.sub.substitute_html(data) == markup + + data = "fjords \u2294\ufe00 penguins" + markup = "fjords ⊔︀ penguins" + assert self.sub.substitute_html(data) == markup + + def test_xml_converstion_includes_no_quotes_if_make_quoted_attribute_is_false(self): + s = 'Welcome to "my bar"' + assert self.sub.substitute_xml(s, False) == s + + def test_xml_attribute_quoting_normally_uses_double_quotes(self): + assert self.sub.substitute_xml("Welcome", True) == '"Welcome"' + assert self.sub.substitute_xml("Bob's Bar", True) == '"Bob\'s Bar"' + + def test_xml_attribute_quoting_uses_single_quotes_when_value_contains_double_quotes(self): + s = 'Welcome to "my bar"' + assert self.sub.substitute_xml(s, True) == "'Welcome to \"my bar\"'" + + def test_xml_attribute_quoting_escapes_single_quotes_when_value_contains_both_single_and_double_quotes(self): + s = 'Welcome to "Bob\'s Bar"' + assert self.sub.substitute_xml(s, True) == '"Welcome to "Bob\'s Bar""' + + def test_xml_quotes_arent_escaped_when_value_is_not_being_quoted(self): + quoted = 'Welcome to "Bob\'s Bar"' + assert self.sub.substitute_xml(quoted) == quoted + + def test_xml_quoting_handles_angle_brackets(self): + assert self.sub.substitute_xml("foo") == "foo<bar>" + + def test_xml_quoting_handles_ampersands(self): + assert self.sub.substitute_xml("AT&T") == "AT&T" + + def test_xml_quoting_including_ampersands_when_they_are_part_of_an_entity(self): + assert self.sub.substitute_xml("ÁT&T") == "&Aacute;T&T" + + def test_xml_quoting_ignoring_ampersands_when_they_are_part_of_an_entity(self): + assert self.sub.substitute_xml_containing_entities("ÁT&T") == "ÁT&T" + + def test_quotes_not_html_substituted(self): + """There's no need to do this except inside attribute values.""" + text = 'Bob\'s "bar"' + assert self.sub.substitute_html(text) == text diff --git a/.venv/Lib/site-packages/bs4/tests/test_docs.py b/.venv/Lib/site-packages/bs4/tests/test_docs.py new file mode 100644 index 0000000..0194d69 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_docs.py @@ -0,0 +1,38 @@ +"Test harness for doctests." + +# TODO: Pretty sure this isn't used and should be deleted. + +# pylint: disable-msg=E0611,W0142 + +__metaclass__ = type +__all__ = [ + 'additional_tests', + ] + +import atexit +import doctest +import os +#from pkg_resources import ( +# resource_filename, resource_exists, resource_listdir, cleanup_resources) +import unittest + +DOCTEST_FLAGS = ( + doctest.ELLIPSIS | + doctest.NORMALIZE_WHITESPACE | + doctest.REPORT_NDIFF) + + +# def additional_tests(): +# "Run the doc tests (README.txt and docs/*, if any exist)" +# doctest_files = [ +# os.path.abspath(resource_filename('bs4', 'README.txt'))] +# if resource_exists('bs4', 'docs'): +# for name in resource_listdir('bs4', 'docs'): +# if name.endswith('.txt'): +# doctest_files.append( +# os.path.abspath( +# resource_filename('bs4', 'docs/%s' % name))) +# kwargs = dict(module_relative=False, optionflags=DOCTEST_FLAGS) +# atexit.register(cleanup_resources) +# return unittest.TestSuite(( +# doctest.DocFileSuite(*doctest_files, **kwargs))) diff --git a/.venv/Lib/site-packages/bs4/tests/test_element.py b/.venv/Lib/site-packages/bs4/tests/test_element.py new file mode 100644 index 0000000..6d08ab5 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_element.py @@ -0,0 +1,74 @@ +"""Tests of classes in element.py. + +The really big classes -- Tag, PageElement, and NavigableString -- +are tested in separate files. +""" + +from bs4.element import ( + CharsetMetaAttributeValue, + ContentMetaAttributeValue, + NamespacedAttribute, +) +from . import SoupTest + + +class TestNamedspacedAttribute(object): + + def test_name_may_be_none_or_missing(self): + a = NamespacedAttribute("xmlns", None) + assert a == "xmlns" + + a = NamespacedAttribute("xmlns", "") + assert a == "xmlns" + + a = NamespacedAttribute("xmlns") + assert a == "xmlns" + + def test_namespace_may_be_none_or_missing(self): + a = NamespacedAttribute(None, "tag") + assert a == "tag" + + a = NamespacedAttribute("", "tag") + assert a == "tag" + + def test_attribute_is_equivalent_to_colon_separated_string(self): + a = NamespacedAttribute("a", "b") + assert "a:b" == a + + def test_attributes_are_equivalent_if_prefix_and_name_identical(self): + a = NamespacedAttribute("a", "b", "c") + b = NamespacedAttribute("a", "b", "c") + assert a == b + + # The actual namespace is not considered. + c = NamespacedAttribute("a", "b", None) + assert a == c + + # But name and prefix are important. + d = NamespacedAttribute("a", "z", "c") + assert a != d + + e = NamespacedAttribute("z", "b", "c") + assert a != e + + +class TestAttributeValueWithCharsetSubstitution(object): + """Certain attributes are designed to have the charset of the + final document substituted into their value. + """ + + def test_content_meta_attribute_value(self): + # The value of a CharsetMetaAttributeValue is whatever + # encoding the string is in. + value = CharsetMetaAttributeValue("euc-jp") + assert "euc-jp" == value + assert "euc-jp" == value.original_value + assert "utf8" == value.encode("utf8") + assert "ascii" == value.encode("ascii") + + def test_content_meta_attribute_value(self): + value = ContentMetaAttributeValue("text/html; charset=euc-jp") + assert "text/html; charset=euc-jp" == value + assert "text/html; charset=euc-jp" == value.original_value + assert "text/html; charset=utf8" == value.encode("utf8") + assert "text/html; charset=ascii" == value.encode("ascii") diff --git a/.venv/Lib/site-packages/bs4/tests/test_formatter.py b/.venv/Lib/site-packages/bs4/tests/test_formatter.py new file mode 100644 index 0000000..84d4e3b --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_formatter.py @@ -0,0 +1,113 @@ +import pytest + +from bs4.element import Tag +from bs4.formatter import ( + Formatter, + HTMLFormatter, + XMLFormatter, +) +from . import SoupTest + +class TestFormatter(SoupTest): + + def test_default_attributes(self): + # Test the default behavior of Formatter.attributes(). + formatter = Formatter() + tag = Tag(name="tag") + tag['b'] = 1 + tag['a'] = 2 + + # Attributes come out sorted by name. In Python 3, attributes + # normally come out of a dictionary in the order they were + # added. + assert [('a', 2), ('b', 1)] == formatter.attributes(tag) + + # This works even if Tag.attrs is None, though this shouldn't + # normally happen. + tag.attrs = None + assert [] == formatter.attributes(tag) + + assert ' ' == formatter.indent + + def test_sort_attributes(self): + # Test the ability to override Formatter.attributes() to, + # e.g., disable the normal sorting of attributes. + class UnsortedFormatter(Formatter): + def attributes(self, tag): + self.called_with = tag + for k, v in sorted(tag.attrs.items()): + if k == 'ignore': + continue + yield k,v + + soup = self.soup('

') + formatter = UnsortedFormatter() + decoded = soup.decode(formatter=formatter) + + # attributes() was called on the

tag. It filtered out one + # attribute and sorted the other two. + assert formatter.called_with == soup.p + assert '

' == decoded + + def test_empty_attributes_are_booleans(self): + # Test the behavior of empty_attributes_are_booleans as well + # as which Formatters have it enabled. + + for name in ('html', 'minimal', None): + formatter = HTMLFormatter.REGISTRY[name] + assert False == formatter.empty_attributes_are_booleans + + formatter = XMLFormatter.REGISTRY[None] + assert False == formatter.empty_attributes_are_booleans + + formatter = HTMLFormatter.REGISTRY['html5'] + assert True == formatter.empty_attributes_are_booleans + + # Verify that the constructor sets the value. + formatter = Formatter(empty_attributes_are_booleans=True) + assert True == formatter.empty_attributes_are_booleans + + # Now demonstrate what it does to markup. + for markup in ( + "", + '' + ): + soup = self.soup(markup) + for formatter in ('html', 'minimal', 'xml', None): + assert b'' == soup.option.encode(formatter='html') + assert b'' == soup.option.encode(formatter='html5') + + @pytest.mark.parametrize( + "indent,expect", + [ + (None, '\n\ntext\n\n'), + (-1, '\n\ntext\n\n'), + (0, '\n\ntext\n\n'), + ("", '\n\ntext\n\n'), + + (1, '\n \n text\n \n'), + (2, '\n \n text\n \n'), + + ("\t", '\n\t\n\t\ttext\n\t\n'), + ('abc', '\nabc\nabcabctext\nabc\n'), + + # Some invalid inputs -- the default behavior is used. + (object(), '\n \n text\n \n'), + (b'bytes', '\n \n text\n \n'), + ] + ) + def test_indent(self, indent, expect): + # Pretty-print a tree with a Formatter set to + # indent in a certain way and verify the results. + soup = self.soup("text") + formatter = Formatter(indent=indent) + assert soup.prettify(formatter=formatter) == expect + + # Pretty-printing only happens with prettify(), not + # encode(). + assert soup.encode(formatter=formatter) != expect + + def test_default_indent_value(self): + formatter = Formatter() + assert formatter.indent == ' ' + diff --git a/.venv/Lib/site-packages/bs4/tests/test_html5lib.py b/.venv/Lib/site-packages/bs4/tests/test_html5lib.py new file mode 100644 index 0000000..4197720 --- /dev/null +++ b/.venv/Lib/site-packages/bs4/tests/test_html5lib.py @@ -0,0 +1,224 @@ +"""Tests to ensure that the html5lib tree builder generates good trees.""" + +import pytest +import warnings + +from bs4 import BeautifulSoup +from bs4.element import SoupStrainer +from . import ( + HTML5LIB_PRESENT, + HTML5TreeBuilderSmokeTest, + SoupTest, +) + +@pytest.mark.skipif( + not HTML5LIB_PRESENT, + reason="html5lib seems not to be present, not testing its tree builder." +) +class TestHTML5LibBuilder(SoupTest, HTML5TreeBuilderSmokeTest): + """See ``HTML5TreeBuilderSmokeTest``.""" + + @property + def default_builder(self): + from bs4.builder import HTML5TreeBuilder + return HTML5TreeBuilder + + def test_soupstrainer(self): + # The html5lib tree builder does not support SoupStrainers. + strainer = SoupStrainer("b") + markup = "

A bold statement.

" + with warnings.catch_warnings(record=True) as w: + soup = BeautifulSoup(markup, "html5lib", parse_only=strainer) + assert soup.decode() == self.document_for(markup) + + [warning] = w + assert warning.filename == __file__ + assert "the html5lib tree builder doesn't support parse_only" in str(warning.message) + + def test_correctly_nested_tables(self): + """html5lib inserts tags where other parsers don't.""" + markup = ('' + '' + "') + + self.assert_soup( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assert_soup( + "" + "" + "
Foo
Bar
Baz
") + + def test_xml_declaration_followed_by_doctype(self): + markup = ''' + + + + + +

foo

+ +''' + soup = self.soup(markup) + # Verify that we can reach the

tag; this means the tree is connected. + assert b"

foo

" == soup.p.encode() + + def test_reparented_markup(self): + markup = '

foo

\n

bar

' + soup = self.soup(markup) + assert "

foo

\n

bar

" == soup.body.decode() + assert 2 == len(soup.find_all('p')) + + + def test_reparented_markup_ends_with_whitespace(self): + markup = '

foo

\n

bar

\n' + soup = self.soup(markup) + assert "

foo

\n

bar

\n" == soup.body.decode() + assert 2 == len(soup.find_all('p')) + + def test_reparented_markup_containing_identical_whitespace_nodes(self): + """Verify that we keep the two whitespace nodes in this + document distinct when reparenting the adjacent tags. + """ + markup = '
' + soup = self.soup(markup) + space1, space2 = soup.find_all(string=' ') + tbody1, tbody2 = soup.find_all('tbody') + assert space1.next_element is tbody1 + assert tbody2.next_element is space2 + + def test_reparented_markup_containing_children(self): + markup = '' + soup = self.soup(markup) + noscript = soup.noscript + assert "target" == noscript.next_element + target = soup.find(string='target') + + # The 'aftermath' string was duplicated; we want the second one. + final_aftermath = soup.find_all(string='aftermath')[-1] + + # The