This is page 11 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py:
--------------------------------------------------------------------------------
```python
1 | # Automatically generated by scripts/gen_mapfiles.py.
2 | # DO NOT EDIT BY HAND; run `tox -e mapfiles` instead.
3 |
4 | FORMATTERS = {
5 | 'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'),
6 | 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
7 | 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
8 | 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'),
9 | 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ``<span>`` tags. By default, the content is enclosed in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option). The ``<div>``'s CSS class can be set by the `cssclass` option."),
10 | 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'),
11 | 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
12 | 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
13 | 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'),
14 | 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'),
15 | 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'),
16 | 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'),
17 | 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'),
18 | 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ``<text>`` element with explicit ``x`` and ``y`` coordinates containing ``<tspan>`` elements with the individual token styles.'),
19 | 'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
20 | 'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'),
21 | 'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
22 | 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'),
23 | }
24 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/jinja2/nativetypes.py:
--------------------------------------------------------------------------------
```python
1 | import typing as t
2 | from ast import literal_eval
3 | from ast import parse
4 | from itertools import chain
5 | from itertools import islice
6 | from types import GeneratorType
7 |
8 | from . import nodes
9 | from .compiler import CodeGenerator
10 | from .compiler import Frame
11 | from .compiler import has_safe_repr
12 | from .environment import Environment
13 | from .environment import Template
14 |
15 |
16 | def native_concat(values: t.Iterable[t.Any]) -> t.Optional[t.Any]:
17 | """Return a native Python type from the list of compiled nodes. If
18 | the result is a single node, its value is returned. Otherwise, the
19 | nodes are concatenated as strings. If the result can be parsed with
20 | :func:`ast.literal_eval`, the parsed value is returned. Otherwise,
21 | the string is returned.
22 |
23 | :param values: Iterable of outputs to concatenate.
24 | """
25 | head = list(islice(values, 2))
26 |
27 | if not head:
28 | return None
29 |
30 | if len(head) == 1:
31 | raw = head[0]
32 | if not isinstance(raw, str):
33 | return raw
34 | else:
35 | if isinstance(values, GeneratorType):
36 | values = chain(head, values)
37 | raw = "".join([str(v) for v in values])
38 |
39 | try:
40 | return literal_eval(
41 | # In Python 3.10+ ast.literal_eval removes leading spaces/tabs
42 | # from the given string. For backwards compatibility we need to
43 | # parse the string ourselves without removing leading spaces/tabs.
44 | parse(raw, mode="eval")
45 | )
46 | except (ValueError, SyntaxError, MemoryError):
47 | return raw
48 |
49 |
50 | class NativeCodeGenerator(CodeGenerator):
51 | """A code generator which renders Python types by not adding
52 | ``str()`` around output nodes.
53 | """
54 |
55 | @staticmethod
56 | def _default_finalize(value: t.Any) -> t.Any:
57 | return value
58 |
59 | def _output_const_repr(self, group: t.Iterable[t.Any]) -> str:
60 | return repr("".join([str(v) for v in group]))
61 |
62 | def _output_child_to_const(
63 | self, node: nodes.Expr, frame: Frame, finalize: CodeGenerator._FinalizeInfo
64 | ) -> t.Any:
65 | const = node.as_const(frame.eval_ctx)
66 |
67 | if not has_safe_repr(const):
68 | raise nodes.Impossible()
69 |
70 | if isinstance(node, nodes.TemplateData):
71 | return const
72 |
73 | return finalize.const(const) # type: ignore
74 |
75 | def _output_child_pre(
76 | self, node: nodes.Expr, frame: Frame, finalize: CodeGenerator._FinalizeInfo
77 | ) -> None:
78 | if finalize.src is not None:
79 | self.write(finalize.src)
80 |
81 | def _output_child_post(
82 | self, node: nodes.Expr, frame: Frame, finalize: CodeGenerator._FinalizeInfo
83 | ) -> None:
84 | if finalize.src is not None:
85 | self.write(")")
86 |
87 |
88 | class NativeEnvironment(Environment):
89 | """An environment that renders templates to native Python types."""
90 |
91 | code_generator_class = NativeCodeGenerator
92 | concat = staticmethod(native_concat) # type: ignore
93 |
94 |
95 | class NativeTemplate(Template):
96 | environment_class = NativeEnvironment
97 |
98 | def render(self, *args: t.Any, **kwargs: t.Any) -> t.Any:
99 | """Render the template to produce a native Python type. If the
100 | result is a single node, its value is returned. Otherwise, the
101 | nodes are concatenated as strings. If the result can be parsed
102 | with :func:`ast.literal_eval`, the parsed value is returned.
103 | Otherwise, the string is returned.
104 | """
105 | ctx = self.new_context(dict(*args, **kwargs))
106 |
107 | try:
108 | return self.environment_class.concat( # type: ignore
109 | self.root_render_func(ctx)
110 | )
111 | except Exception:
112 | return self.environment.handle_exception()
113 |
114 | async def render_async(self, *args: t.Any, **kwargs: t.Any) -> t.Any:
115 | if not self.environment.is_async:
116 | raise RuntimeError(
117 | "The environment was not created with async mode enabled."
118 | )
119 |
120 | ctx = self.new_context(dict(*args, **kwargs))
121 |
122 | try:
123 | return self.environment_class.concat( # type: ignore
124 | [n async for n in self.root_render_func(ctx)] # type: ignore
125 | )
126 | except Exception:
127 | return self.environment.handle_exception()
128 |
129 |
130 | NativeEnvironment.template_class = NativeTemplate
131 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/html/defs.py:
--------------------------------------------------------------------------------
```python
1 | # FIXME: this should all be confirmed against what a DTD says
2 | # (probably in a test; this may not match the DTD exactly, but we
3 | # should document just how it differs).
4 |
5 | """
6 | Data taken from https://www.w3.org/TR/html401/index/elements.html
7 | and https://www.w3.org/community/webed/wiki/HTML/New_HTML5_Elements
8 | for html5_tags.
9 | """
10 |
11 | empty_tags = frozenset([
12 | 'area', 'base', 'basefont', 'br', 'col', 'frame', 'hr',
13 | 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source', 'track'])
14 |
15 | deprecated_tags = frozenset([
16 | 'applet', 'basefont', 'center', 'dir', 'font', 'isindex',
17 | 'menu', 's', 'strike', 'u'])
18 |
19 | # archive actually takes a space-separated list of URIs
20 | link_attrs = frozenset([
21 | 'action', 'archive', 'background', 'cite', 'classid',
22 | 'codebase', 'data', 'href', 'longdesc', 'profile', 'src',
23 | 'usemap',
24 | # Not standard:
25 | 'dynsrc', 'lowsrc',
26 | # HTML5 formaction
27 | 'formaction'
28 | ])
29 |
30 | # Not in the HTML 4 spec:
31 | # onerror, onresize
32 | event_attrs = frozenset([
33 | 'onblur', 'onchange', 'onclick', 'ondblclick', 'onerror',
34 | 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload',
35 | 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover',
36 | 'onmouseup', 'onreset', 'onresize', 'onselect', 'onsubmit',
37 | 'onunload',
38 | ])
39 |
40 | safe_attrs = frozenset([
41 | 'abbr', 'accept', 'accept-charset', 'accesskey', 'action', 'align',
42 | 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', 'char', 'charoff',
43 | 'charset', 'checked', 'cite', 'class', 'clear', 'cols', 'colspan',
44 | 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', 'enctype',
45 | 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id',
46 | 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method',
47 | 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly',
48 | 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape',
49 | 'size', 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title',
50 | 'type', 'usemap', 'valign', 'value', 'vspace', 'width'])
51 |
52 | # From http://htmlhelp.com/reference/html40/olist.html
53 | top_level_tags = frozenset([
54 | 'html', 'head', 'body', 'frameset',
55 | ])
56 |
57 | head_tags = frozenset([
58 | 'base', 'isindex', 'link', 'meta', 'script', 'style', 'title',
59 | ])
60 |
61 | general_block_tags = frozenset([
62 | 'address',
63 | 'blockquote',
64 | 'center',
65 | 'del',
66 | 'div',
67 | 'h1',
68 | 'h2',
69 | 'h3',
70 | 'h4',
71 | 'h5',
72 | 'h6',
73 | 'hr',
74 | 'ins',
75 | 'isindex',
76 | 'noscript',
77 | 'p',
78 | 'pre',
79 | ])
80 |
81 | list_tags = frozenset([
82 | 'dir', 'dl', 'dt', 'dd', 'li', 'menu', 'ol', 'ul',
83 | ])
84 |
85 | table_tags = frozenset([
86 | 'table', 'caption', 'colgroup', 'col',
87 | 'thead', 'tfoot', 'tbody', 'tr', 'td', 'th',
88 | ])
89 |
90 | # just this one from
91 | # http://www.georgehernandez.com/h/XComputers/HTML/2BlockLevel.htm
92 | block_tags = general_block_tags | list_tags | table_tags | frozenset([
93 | # Partial form tags
94 | 'fieldset', 'form', 'legend', 'optgroup', 'option',
95 | ])
96 |
97 | form_tags = frozenset([
98 | 'form', 'button', 'fieldset', 'legend', 'input', 'label',
99 | 'select', 'optgroup', 'option', 'textarea',
100 | ])
101 |
102 | special_inline_tags = frozenset([
103 | 'a', 'applet', 'basefont', 'bdo', 'br', 'embed', 'font', 'iframe',
104 | 'img', 'map', 'area', 'object', 'param', 'q', 'script',
105 | 'span', 'sub', 'sup',
106 | ])
107 |
108 | phrase_tags = frozenset([
109 | 'abbr', 'acronym', 'cite', 'code', 'del', 'dfn', 'em',
110 | 'ins', 'kbd', 'samp', 'strong', 'var',
111 | ])
112 |
113 | font_style_tags = frozenset([
114 | 'b', 'big', 'i', 's', 'small', 'strike', 'tt', 'u',
115 | ])
116 |
117 | frame_tags = frozenset([
118 | 'frameset', 'frame', 'noframes',
119 | ])
120 |
121 | html5_tags = frozenset([
122 | 'article', 'aside', 'audio', 'canvas', 'command', 'datalist',
123 | 'details', 'embed', 'figcaption', 'figure', 'footer', 'header',
124 | 'hgroup', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
125 | 'progress', 'rp', 'rt', 'ruby', 'section', 'source', 'summary',
126 | 'svg', 'time', 'track', 'video', 'wbr'
127 | ])
128 |
129 | # These tags aren't standard
130 | nonstandard_tags = frozenset(['blink', 'marquee'])
131 |
132 |
133 | tags = (top_level_tags | head_tags | general_block_tags | list_tags
134 | | table_tags | form_tags | special_inline_tags | phrase_tags
135 | | font_style_tags | nonstandard_tags | html5_tags)
136 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/schematron.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: XML Schematron implementation
3 | * Description: interface to the XML Schematron validity checking.
4 | *
5 | * Copy: See Copyright for the status of this software.
6 | *
7 | * Author: Daniel Veillard
8 | */
9 |
10 |
11 | #ifndef __XML_SCHEMATRON_H__
12 | #define __XML_SCHEMATRON_H__
13 |
14 | #include <libxml/xmlversion.h>
15 |
16 | #ifdef LIBXML_SCHEMATRON_ENABLED
17 |
18 | #include <libxml/xmlerror.h>
19 | #include <libxml/tree.h>
20 |
21 | #ifdef __cplusplus
22 | extern "C" {
23 | #endif
24 |
25 | typedef enum {
26 | XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */
27 | XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */
28 | XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */
29 | XML_SCHEMATRON_OUT_ERROR = 1 << 3, /* output via xmlStructuredErrorFunc */
30 | XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */
31 | XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */
32 | XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */
33 | } xmlSchematronValidOptions;
34 |
35 | /**
36 | * The schemas related types are kept internal
37 | */
38 | typedef struct _xmlSchematron xmlSchematron;
39 | typedef xmlSchematron *xmlSchematronPtr;
40 |
41 | /**
42 | * xmlSchematronValidityErrorFunc:
43 | * @ctx: the validation context
44 | * @msg: the message
45 | * @...: extra arguments
46 | *
47 | * Signature of an error callback from a Schematron validation
48 | */
49 | typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...);
50 |
51 | /**
52 | * xmlSchematronValidityWarningFunc:
53 | * @ctx: the validation context
54 | * @msg: the message
55 | * @...: extra arguments
56 | *
57 | * Signature of a warning callback from a Schematron validation
58 | */
59 | typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...);
60 |
61 | /**
62 | * A schemas validation context
63 | */
64 | typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt;
65 | typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr;
66 |
67 | typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt;
68 | typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
69 |
70 | /*
71 | * Interfaces for parsing.
72 | */
73 | XMLPUBFUN xmlSchematronParserCtxtPtr
74 | xmlSchematronNewParserCtxt (const char *URL);
75 | XMLPUBFUN xmlSchematronParserCtxtPtr
76 | xmlSchematronNewMemParserCtxt(const char *buffer,
77 | int size);
78 | XMLPUBFUN xmlSchematronParserCtxtPtr
79 | xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
80 | XMLPUBFUN void
81 | xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt);
82 | /*****
83 | XMLPUBFUN void
84 | xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
85 | xmlSchematronValidityErrorFunc err,
86 | xmlSchematronValidityWarningFunc warn,
87 | void *ctx);
88 | XMLPUBFUN int
89 | xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt,
90 | xmlSchematronValidityErrorFunc * err,
91 | xmlSchematronValidityWarningFunc * warn,
92 | void **ctx);
93 | XMLPUBFUN int
94 | xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt);
95 | *****/
96 | XMLPUBFUN xmlSchematronPtr
97 | xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt);
98 | XMLPUBFUN void
99 | xmlSchematronFree (xmlSchematronPtr schema);
100 | /*
101 | * Interfaces for validating
102 | */
103 | XMLPUBFUN void
104 | xmlSchematronSetValidStructuredErrors(
105 | xmlSchematronValidCtxtPtr ctxt,
106 | xmlStructuredErrorFunc serror,
107 | void *ctx);
108 | /******
109 | XMLPUBFUN void
110 | xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt,
111 | xmlSchematronValidityErrorFunc err,
112 | xmlSchematronValidityWarningFunc warn,
113 | void *ctx);
114 | XMLPUBFUN int
115 | xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt,
116 | xmlSchematronValidityErrorFunc *err,
117 | xmlSchematronValidityWarningFunc *warn,
118 | void **ctx);
119 | XMLPUBFUN int
120 | xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt,
121 | int options);
122 | XMLPUBFUN int
123 | xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt);
124 | XMLPUBFUN int
125 | xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt,
126 | xmlNodePtr elem);
127 | *******/
128 |
129 | XMLPUBFUN xmlSchematronValidCtxtPtr
130 | xmlSchematronNewValidCtxt (xmlSchematronPtr schema,
131 | int options);
132 | XMLPUBFUN void
133 | xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt);
134 | XMLPUBFUN int
135 | xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt,
136 | xmlDocPtr instance);
137 |
138 | #ifdef __cplusplus
139 | }
140 | #endif
141 |
142 | #endif /* LIBXML_SCHEMATRON_ENABLED */
143 | #endif /* __XML_SCHEMATRON_H__ */
144 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/requests/exceptions.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | requests.exceptions
3 | ~~~~~~~~~~~~~~~~~~~
4 |
5 | This module contains the set of Requests' exceptions.
6 | """
7 | from urllib3.exceptions import HTTPError as BaseHTTPError
8 |
9 | from .compat import JSONDecodeError as CompatJSONDecodeError
10 |
11 |
12 | class RequestException(IOError):
13 | """There was an ambiguous exception that occurred while handling your
14 | request.
15 | """
16 |
17 | def __init__(self, *args, **kwargs):
18 | """Initialize RequestException with `request` and `response` objects."""
19 | response = kwargs.pop("response", None)
20 | self.response = response
21 | self.request = kwargs.pop("request", None)
22 | if response is not None and not self.request and hasattr(response, "request"):
23 | self.request = self.response.request
24 | super().__init__(*args, **kwargs)
25 |
26 |
27 | class InvalidJSONError(RequestException):
28 | """A JSON error occurred."""
29 |
30 |
31 | class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError):
32 | """Couldn't decode the text into json"""
33 |
34 | def __init__(self, *args, **kwargs):
35 | """
36 | Construct the JSONDecodeError instance first with all
37 | args. Then use it's args to construct the IOError so that
38 | the json specific args aren't used as IOError specific args
39 | and the error message from JSONDecodeError is preserved.
40 | """
41 | CompatJSONDecodeError.__init__(self, *args)
42 | InvalidJSONError.__init__(self, *self.args, **kwargs)
43 |
44 | def __reduce__(self):
45 | """
46 | The __reduce__ method called when pickling the object must
47 | be the one from the JSONDecodeError (be it json/simplejson)
48 | as it expects all the arguments for instantiation, not just
49 | one like the IOError, and the MRO would by default call the
50 | __reduce__ method from the IOError due to the inheritance order.
51 | """
52 | return CompatJSONDecodeError.__reduce__(self)
53 |
54 |
55 | class HTTPError(RequestException):
56 | """An HTTP error occurred."""
57 |
58 |
59 | class ConnectionError(RequestException):
60 | """A Connection error occurred."""
61 |
62 |
63 | class ProxyError(ConnectionError):
64 | """A proxy error occurred."""
65 |
66 |
67 | class SSLError(ConnectionError):
68 | """An SSL error occurred."""
69 |
70 |
71 | class Timeout(RequestException):
72 | """The request timed out.
73 |
74 | Catching this error will catch both
75 | :exc:`~requests.exceptions.ConnectTimeout` and
76 | :exc:`~requests.exceptions.ReadTimeout` errors.
77 | """
78 |
79 |
80 | class ConnectTimeout(ConnectionError, Timeout):
81 | """The request timed out while trying to connect to the remote server.
82 |
83 | Requests that produced this error are safe to retry.
84 | """
85 |
86 |
87 | class ReadTimeout(Timeout):
88 | """The server did not send any data in the allotted amount of time."""
89 |
90 |
91 | class URLRequired(RequestException):
92 | """A valid URL is required to make a request."""
93 |
94 |
95 | class TooManyRedirects(RequestException):
96 | """Too many redirects."""
97 |
98 |
99 | class MissingSchema(RequestException, ValueError):
100 | """The URL scheme (e.g. http or https) is missing."""
101 |
102 |
103 | class InvalidSchema(RequestException, ValueError):
104 | """The URL scheme provided is either invalid or unsupported."""
105 |
106 |
107 | class InvalidURL(RequestException, ValueError):
108 | """The URL provided was somehow invalid."""
109 |
110 |
111 | class InvalidHeader(RequestException, ValueError):
112 | """The header value provided was somehow invalid."""
113 |
114 |
115 | class InvalidProxyURL(InvalidURL):
116 | """The proxy URL provided is invalid."""
117 |
118 |
119 | class ChunkedEncodingError(RequestException):
120 | """The server declared chunked encoding but sent an invalid chunk."""
121 |
122 |
123 | class ContentDecodingError(RequestException, BaseHTTPError):
124 | """Failed to decode response content."""
125 |
126 |
127 | class StreamConsumedError(RequestException, TypeError):
128 | """The content for this response was already consumed."""
129 |
130 |
131 | class RetryError(RequestException):
132 | """Custom retries logic failed"""
133 |
134 |
135 | class UnrewindableBodyError(RequestException):
136 | """Requests encountered an error when trying to rewind a body."""
137 |
138 |
139 | # Warnings
140 |
141 |
142 | class RequestsWarning(Warning):
143 | """Base warning for Requests."""
144 |
145 |
146 | class FileModeWarning(RequestsWarning, DeprecationWarning):
147 | """A file was opened in text mode, but Requests determined its binary length."""
148 |
149 |
150 | class RequestsDependencyWarning(RequestsWarning):
151 | """An imported dependency doesn't match the expected version range."""
152 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | from typing import List, Optional, Set, Tuple
3 |
4 | from pip._vendor.packaging.tags import Tag
5 |
6 | from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot
7 | from pip._internal.utils.misc import normalize_version_info
8 |
9 |
10 | class TargetPython:
11 | """
12 | Encapsulates the properties of a Python interpreter one is targeting
13 | for a package install, download, etc.
14 | """
15 |
16 | __slots__ = [
17 | "_given_py_version_info",
18 | "abis",
19 | "implementation",
20 | "platforms",
21 | "py_version",
22 | "py_version_info",
23 | "_valid_tags",
24 | "_valid_tags_set",
25 | ]
26 |
27 | def __init__(
28 | self,
29 | platforms: Optional[List[str]] = None,
30 | py_version_info: Optional[Tuple[int, ...]] = None,
31 | abis: Optional[List[str]] = None,
32 | implementation: Optional[str] = None,
33 | ) -> None:
34 | """
35 | :param platforms: A list of strings or None. If None, searches for
36 | packages that are supported by the current system. Otherwise, will
37 | find packages that can be built on the platforms passed in. These
38 | packages will only be downloaded for distribution: they will
39 | not be built locally.
40 | :param py_version_info: An optional tuple of ints representing the
41 | Python version information to use (e.g. `sys.version_info[:3]`).
42 | This can have length 1, 2, or 3 when provided.
43 | :param abis: A list of strings or None. This is passed to
44 | compatibility_tags.py's get_supported() function as is.
45 | :param implementation: A string or None. This is passed to
46 | compatibility_tags.py's get_supported() function as is.
47 | """
48 | # Store the given py_version_info for when we call get_supported().
49 | self._given_py_version_info = py_version_info
50 |
51 | if py_version_info is None:
52 | py_version_info = sys.version_info[:3]
53 | else:
54 | py_version_info = normalize_version_info(py_version_info)
55 |
56 | py_version = ".".join(map(str, py_version_info[:2]))
57 |
58 | self.abis = abis
59 | self.implementation = implementation
60 | self.platforms = platforms
61 | self.py_version = py_version
62 | self.py_version_info = py_version_info
63 |
64 | # This is used to cache the return value of get_(un)sorted_tags.
65 | self._valid_tags: Optional[List[Tag]] = None
66 | self._valid_tags_set: Optional[Set[Tag]] = None
67 |
68 | def format_given(self) -> str:
69 | """
70 | Format the given, non-None attributes for display.
71 | """
72 | display_version = None
73 | if self._given_py_version_info is not None:
74 | display_version = ".".join(
75 | str(part) for part in self._given_py_version_info
76 | )
77 |
78 | key_values = [
79 | ("platforms", self.platforms),
80 | ("version_info", display_version),
81 | ("abis", self.abis),
82 | ("implementation", self.implementation),
83 | ]
84 | return " ".join(
85 | f"{key}={value!r}" for key, value in key_values if value is not None
86 | )
87 |
88 | def get_sorted_tags(self) -> List[Tag]:
89 | """
90 | Return the supported PEP 425 tags to check wheel candidates against.
91 |
92 | The tags are returned in order of preference (most preferred first).
93 | """
94 | if self._valid_tags is None:
95 | # Pass versions=None if no py_version_info was given since
96 | # versions=None uses special default logic.
97 | py_version_info = self._given_py_version_info
98 | if py_version_info is None:
99 | version = None
100 | else:
101 | version = version_info_to_nodot(py_version_info)
102 |
103 | tags = get_supported(
104 | version=version,
105 | platforms=self.platforms,
106 | abis=self.abis,
107 | impl=self.implementation,
108 | )
109 | self._valid_tags = tags
110 |
111 | return self._valid_tags
112 |
113 | def get_unsorted_tags(self) -> Set[Tag]:
114 | """Exactly the same as get_sorted_tags, but returns a set.
115 |
116 | This is important for performance.
117 | """
118 | if self._valid_tags_set is None:
119 | self._valid_tags_set = set(self.get_sorted_tags())
120 |
121 | return self._valid_tags_set
122 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | requests.exceptions
3 | ~~~~~~~~~~~~~~~~~~~
4 |
5 | This module contains the set of Requests' exceptions.
6 | """
7 | from pip._vendor.urllib3.exceptions import HTTPError as BaseHTTPError
8 |
9 | from .compat import JSONDecodeError as CompatJSONDecodeError
10 |
11 |
12 | class RequestException(IOError):
13 | """There was an ambiguous exception that occurred while handling your
14 | request.
15 | """
16 |
17 | def __init__(self, *args, **kwargs):
18 | """Initialize RequestException with `request` and `response` objects."""
19 | response = kwargs.pop("response", None)
20 | self.response = response
21 | self.request = kwargs.pop("request", None)
22 | if response is not None and not self.request and hasattr(response, "request"):
23 | self.request = self.response.request
24 | super().__init__(*args, **kwargs)
25 |
26 |
27 | class InvalidJSONError(RequestException):
28 | """A JSON error occurred."""
29 |
30 |
31 | class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError):
32 | """Couldn't decode the text into json"""
33 |
34 | def __init__(self, *args, **kwargs):
35 | """
36 | Construct the JSONDecodeError instance first with all
37 | args. Then use it's args to construct the IOError so that
38 | the json specific args aren't used as IOError specific args
39 | and the error message from JSONDecodeError is preserved.
40 | """
41 | CompatJSONDecodeError.__init__(self, *args)
42 | InvalidJSONError.__init__(self, *self.args, **kwargs)
43 |
44 | def __reduce__(self):
45 | """
46 | The __reduce__ method called when pickling the object must
47 | be the one from the JSONDecodeError (be it json/simplejson)
48 | as it expects all the arguments for instantiation, not just
49 | one like the IOError, and the MRO would by default call the
50 | __reduce__ method from the IOError due to the inheritance order.
51 | """
52 | return CompatJSONDecodeError.__reduce__(self)
53 |
54 |
55 | class HTTPError(RequestException):
56 | """An HTTP error occurred."""
57 |
58 |
59 | class ConnectionError(RequestException):
60 | """A Connection error occurred."""
61 |
62 |
63 | class ProxyError(ConnectionError):
64 | """A proxy error occurred."""
65 |
66 |
67 | class SSLError(ConnectionError):
68 | """An SSL error occurred."""
69 |
70 |
71 | class Timeout(RequestException):
72 | """The request timed out.
73 |
74 | Catching this error will catch both
75 | :exc:`~requests.exceptions.ConnectTimeout` and
76 | :exc:`~requests.exceptions.ReadTimeout` errors.
77 | """
78 |
79 |
80 | class ConnectTimeout(ConnectionError, Timeout):
81 | """The request timed out while trying to connect to the remote server.
82 |
83 | Requests that produced this error are safe to retry.
84 | """
85 |
86 |
87 | class ReadTimeout(Timeout):
88 | """The server did not send any data in the allotted amount of time."""
89 |
90 |
91 | class URLRequired(RequestException):
92 | """A valid URL is required to make a request."""
93 |
94 |
95 | class TooManyRedirects(RequestException):
96 | """Too many redirects."""
97 |
98 |
99 | class MissingSchema(RequestException, ValueError):
100 | """The URL scheme (e.g. http or https) is missing."""
101 |
102 |
103 | class InvalidSchema(RequestException, ValueError):
104 | """The URL scheme provided is either invalid or unsupported."""
105 |
106 |
107 | class InvalidURL(RequestException, ValueError):
108 | """The URL provided was somehow invalid."""
109 |
110 |
111 | class InvalidHeader(RequestException, ValueError):
112 | """The header value provided was somehow invalid."""
113 |
114 |
115 | class InvalidProxyURL(InvalidURL):
116 | """The proxy URL provided is invalid."""
117 |
118 |
119 | class ChunkedEncodingError(RequestException):
120 | """The server declared chunked encoding but sent an invalid chunk."""
121 |
122 |
123 | class ContentDecodingError(RequestException, BaseHTTPError):
124 | """Failed to decode response content."""
125 |
126 |
127 | class StreamConsumedError(RequestException, TypeError):
128 | """The content for this response was already consumed."""
129 |
130 |
131 | class RetryError(RequestException):
132 | """Custom retries logic failed"""
133 |
134 |
135 | class UnrewindableBodyError(RequestException):
136 | """Requests encountered an error when trying to rewind a body."""
137 |
138 |
139 | # Warnings
140 |
141 |
142 | class RequestsWarning(Warning):
143 | """Base warning for Requests."""
144 |
145 |
146 | class FileModeWarning(RequestsWarning, DeprecationWarning):
147 | """A file was opened in text mode, but Requests determined its binary length."""
148 |
149 |
150 | class RequestsDependencyWarning(RequestsWarning):
151 | """An imported dependency doesn't match the expected version range."""
152 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | import textwrap
3 | from optparse import Values
4 | from typing import List
5 |
6 | from pip._internal.cli.base_command import Command
7 | from pip._internal.cli.status_codes import SUCCESS
8 | from pip._internal.utils.misc import get_prog
9 |
10 | BASE_COMPLETION = """
11 | # pip {shell} completion start{script}# pip {shell} completion end
12 | """
13 |
14 | COMPLETION_SCRIPTS = {
15 | "bash": """
16 | _pip_completion()
17 | {{
18 | COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\
19 | COMP_CWORD=$COMP_CWORD \\
20 | PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) )
21 | }}
22 | complete -o default -F _pip_completion {prog}
23 | """,
24 | "zsh": """
25 | #compdef -P pip[0-9.]#
26 | __pip() {{
27 | compadd $( COMP_WORDS="$words[*]" \\
28 | COMP_CWORD=$((CURRENT-1)) \\
29 | PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )
30 | }}
31 | if [[ $zsh_eval_context[-1] == loadautofunc ]]; then
32 | # autoload from fpath, call function directly
33 | __pip "$@"
34 | else
35 | # eval/source/. command, register function for later
36 | compdef __pip -P 'pip[0-9.]#'
37 | fi
38 | """,
39 | "fish": """
40 | function __fish_complete_pip
41 | set -lx COMP_WORDS (commandline -o) ""
42 | set -lx COMP_CWORD ( \\
43 | math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\
44 | )
45 | set -lx PIP_AUTO_COMPLETE 1
46 | string split \\ -- (eval $COMP_WORDS[1])
47 | end
48 | complete -fa "(__fish_complete_pip)" -c {prog}
49 | """,
50 | "powershell": """
51 | if ((Test-Path Function:\\TabExpansion) -and -not `
52 | (Test-Path Function:\\_pip_completeBackup)) {{
53 | Rename-Item Function:\\TabExpansion _pip_completeBackup
54 | }}
55 | function TabExpansion($line, $lastWord) {{
56 | $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart()
57 | if ($lastBlock.StartsWith("{prog} ")) {{
58 | $Env:COMP_WORDS=$lastBlock
59 | $Env:COMP_CWORD=$lastBlock.Split().Length - 1
60 | $Env:PIP_AUTO_COMPLETE=1
61 | (& {prog}).Split()
62 | Remove-Item Env:COMP_WORDS
63 | Remove-Item Env:COMP_CWORD
64 | Remove-Item Env:PIP_AUTO_COMPLETE
65 | }}
66 | elseif (Test-Path Function:\\_pip_completeBackup) {{
67 | # Fall back on existing tab expansion
68 | _pip_completeBackup $line $lastWord
69 | }}
70 | }}
71 | """,
72 | }
73 |
74 |
75 | class CompletionCommand(Command):
76 | """A helper command to be used for command completion."""
77 |
78 | ignore_require_venv = True
79 |
80 | def add_options(self) -> None:
81 | self.cmd_opts.add_option(
82 | "--bash",
83 | "-b",
84 | action="store_const",
85 | const="bash",
86 | dest="shell",
87 | help="Emit completion code for bash",
88 | )
89 | self.cmd_opts.add_option(
90 | "--zsh",
91 | "-z",
92 | action="store_const",
93 | const="zsh",
94 | dest="shell",
95 | help="Emit completion code for zsh",
96 | )
97 | self.cmd_opts.add_option(
98 | "--fish",
99 | "-f",
100 | action="store_const",
101 | const="fish",
102 | dest="shell",
103 | help="Emit completion code for fish",
104 | )
105 | self.cmd_opts.add_option(
106 | "--powershell",
107 | "-p",
108 | action="store_const",
109 | const="powershell",
110 | dest="shell",
111 | help="Emit completion code for powershell",
112 | )
113 |
114 | self.parser.insert_option_group(0, self.cmd_opts)
115 |
116 | def run(self, options: Values, args: List[str]) -> int:
117 | """Prints the completion code of the given shell"""
118 | shells = COMPLETION_SCRIPTS.keys()
119 | shell_options = ["--" + shell for shell in sorted(shells)]
120 | if options.shell in shells:
121 | script = textwrap.dedent(
122 | COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog())
123 | )
124 | print(BASE_COMPLETION.format(script=script, shell=options.shell))
125 | return SUCCESS
126 | else:
127 | sys.stderr.write(
128 | "ERROR: You must pass {}\n".format(" or ".join(shell_options))
129 | )
130 | return SUCCESS
131 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py:
--------------------------------------------------------------------------------
```python
1 | # SPDX-FileCopyrightText: 2015 Eric Larson
2 | #
3 | # SPDX-License-Identifier: Apache-2.0
4 | from __future__ import annotations
5 |
6 | import mmap
7 | from tempfile import NamedTemporaryFile
8 | from typing import TYPE_CHECKING, Any, Callable
9 |
10 | if TYPE_CHECKING:
11 | from http.client import HTTPResponse
12 |
13 |
14 | class CallbackFileWrapper:
15 | """
16 | Small wrapper around a fp object which will tee everything read into a
17 | buffer, and when that file is closed it will execute a callback with the
18 | contents of that buffer.
19 |
20 | All attributes are proxied to the underlying file object.
21 |
22 | This class uses members with a double underscore (__) leading prefix so as
23 | not to accidentally shadow an attribute.
24 |
25 | The data is stored in a temporary file until it is all available. As long
26 | as the temporary files directory is disk-based (sometimes it's a
27 | memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory
28 | pressure is high. For small files the disk usually won't be used at all,
29 | it'll all be in the filesystem memory cache, so there should be no
30 | performance impact.
31 | """
32 |
33 | def __init__(
34 | self, fp: HTTPResponse, callback: Callable[[bytes], None] | None
35 | ) -> None:
36 | self.__buf = NamedTemporaryFile("rb+", delete=True)
37 | self.__fp = fp
38 | self.__callback = callback
39 |
40 | def __getattr__(self, name: str) -> Any:
41 | # The vaguaries of garbage collection means that self.__fp is
42 | # not always set. By using __getattribute__ and the private
43 | # name[0] allows looking up the attribute value and raising an
44 | # AttributeError when it doesn't exist. This stop thigns from
45 | # infinitely recursing calls to getattr in the case where
46 | # self.__fp hasn't been set.
47 | #
48 | # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers
49 | fp = self.__getattribute__("_CallbackFileWrapper__fp")
50 | return getattr(fp, name)
51 |
52 | def __is_fp_closed(self) -> bool:
53 | try:
54 | return self.__fp.fp is None
55 |
56 | except AttributeError:
57 | pass
58 |
59 | try:
60 | closed: bool = self.__fp.closed
61 | return closed
62 |
63 | except AttributeError:
64 | pass
65 |
66 | # We just don't cache it then.
67 | # TODO: Add some logging here...
68 | return False
69 |
70 | def _close(self) -> None:
71 | if self.__callback:
72 | if self.__buf.tell() == 0:
73 | # Empty file:
74 | result = b""
75 | else:
76 | # Return the data without actually loading it into memory,
77 | # relying on Python's buffer API and mmap(). mmap() just gives
78 | # a view directly into the filesystem's memory cache, so it
79 | # doesn't result in duplicate memory use.
80 | self.__buf.seek(0, 0)
81 | result = memoryview(
82 | mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ)
83 | )
84 | self.__callback(result)
85 |
86 | # We assign this to None here, because otherwise we can get into
87 | # really tricky problems where the CPython interpreter dead locks
88 | # because the callback is holding a reference to something which
89 | # has a __del__ method. Setting this to None breaks the cycle
90 | # and allows the garbage collector to do it's thing normally.
91 | self.__callback = None
92 |
93 | # Closing the temporary file releases memory and frees disk space.
94 | # Important when caching big files.
95 | self.__buf.close()
96 |
97 | def read(self, amt: int | None = None) -> bytes:
98 | data: bytes = self.__fp.read(amt)
99 | if data:
100 | # We may be dealing with b'', a sign that things are over:
101 | # it's passed e.g. after we've already closed self.__buf.
102 | self.__buf.write(data)
103 | if self.__is_fp_closed():
104 | self._close()
105 |
106 | return data
107 |
108 | def _safe_read(self, amt: int) -> bytes:
109 | data: bytes = self.__fp._safe_read(amt) # type: ignore[attr-defined]
110 | if amt == 2 and data == b"\r\n":
111 | # urllib executes this read to toss the CRLF at the end
112 | # of the chunk.
113 | return data
114 |
115 | self.__buf.write(data)
116 | if self.__is_fp_closed():
117 | self._close()
118 |
119 | return data
120 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py:
--------------------------------------------------------------------------------
```python
1 | r"""
2 | The ``codes`` object defines a mapping from common names for HTTP statuses
3 | to their numerical codes, accessible either as attributes or as dictionary
4 | items.
5 |
6 | Example::
7 |
8 | >>> import requests
9 | >>> requests.codes['temporary_redirect']
10 | 307
11 | >>> requests.codes.teapot
12 | 418
13 | >>> requests.codes['\o/']
14 | 200
15 |
16 | Some codes have multiple names, and both upper- and lower-case versions of
17 | the names are allowed. For example, ``codes.ok``, ``codes.OK``, and
18 | ``codes.okay`` all correspond to the HTTP status code 200.
19 | """
20 |
21 | from .structures import LookupDict
22 |
23 | _codes = {
24 | # Informational.
25 | 100: ("continue",),
26 | 101: ("switching_protocols",),
27 | 102: ("processing", "early-hints"),
28 | 103: ("checkpoint",),
29 | 122: ("uri_too_long", "request_uri_too_long"),
30 | 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"),
31 | 201: ("created",),
32 | 202: ("accepted",),
33 | 203: ("non_authoritative_info", "non_authoritative_information"),
34 | 204: ("no_content",),
35 | 205: ("reset_content", "reset"),
36 | 206: ("partial_content", "partial"),
37 | 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"),
38 | 208: ("already_reported",),
39 | 226: ("im_used",),
40 | # Redirection.
41 | 300: ("multiple_choices",),
42 | 301: ("moved_permanently", "moved", "\\o-"),
43 | 302: ("found",),
44 | 303: ("see_other", "other"),
45 | 304: ("not_modified",),
46 | 305: ("use_proxy",),
47 | 306: ("switch_proxy",),
48 | 307: ("temporary_redirect", "temporary_moved", "temporary"),
49 | 308: (
50 | "permanent_redirect",
51 | "resume_incomplete",
52 | "resume",
53 | ), # "resume" and "resume_incomplete" to be removed in 3.0
54 | # Client Error.
55 | 400: ("bad_request", "bad"),
56 | 401: ("unauthorized",),
57 | 402: ("payment_required", "payment"),
58 | 403: ("forbidden",),
59 | 404: ("not_found", "-o-"),
60 | 405: ("method_not_allowed", "not_allowed"),
61 | 406: ("not_acceptable",),
62 | 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"),
63 | 408: ("request_timeout", "timeout"),
64 | 409: ("conflict",),
65 | 410: ("gone",),
66 | 411: ("length_required",),
67 | 412: ("precondition_failed", "precondition"),
68 | 413: ("request_entity_too_large", "content_too_large"),
69 | 414: ("request_uri_too_large", "uri_too_long"),
70 | 415: ("unsupported_media_type", "unsupported_media", "media_type"),
71 | 416: (
72 | "requested_range_not_satisfiable",
73 | "requested_range",
74 | "range_not_satisfiable",
75 | ),
76 | 417: ("expectation_failed",),
77 | 418: ("im_a_teapot", "teapot", "i_am_a_teapot"),
78 | 421: ("misdirected_request",),
79 | 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"),
80 | 423: ("locked",),
81 | 424: ("failed_dependency", "dependency"),
82 | 425: ("unordered_collection", "unordered", "too_early"),
83 | 426: ("upgrade_required", "upgrade"),
84 | 428: ("precondition_required", "precondition"),
85 | 429: ("too_many_requests", "too_many"),
86 | 431: ("header_fields_too_large", "fields_too_large"),
87 | 444: ("no_response", "none"),
88 | 449: ("retry_with", "retry"),
89 | 450: ("blocked_by_windows_parental_controls", "parental_controls"),
90 | 451: ("unavailable_for_legal_reasons", "legal_reasons"),
91 | 499: ("client_closed_request",),
92 | # Server Error.
93 | 500: ("internal_server_error", "server_error", "/o\\", "✗"),
94 | 501: ("not_implemented",),
95 | 502: ("bad_gateway",),
96 | 503: ("service_unavailable", "unavailable"),
97 | 504: ("gateway_timeout",),
98 | 505: ("http_version_not_supported", "http_version"),
99 | 506: ("variant_also_negotiates",),
100 | 507: ("insufficient_storage",),
101 | 509: ("bandwidth_limit_exceeded", "bandwidth"),
102 | 510: ("not_extended",),
103 | 511: ("network_authentication_required", "network_auth", "network_authentication"),
104 | }
105 |
106 | codes = LookupDict(name="status_codes")
107 |
108 |
109 | def _init():
110 | for code, titles in _codes.items():
111 | for title in titles:
112 | setattr(codes, title, code)
113 | if not title.startswith(("\\", "/")):
114 | setattr(codes, title.upper(), code)
115 |
116 | def doc(code):
117 | names = ", ".join(f"``{n}``" for n in _codes[code])
118 | return "* %d: %s" % (code, names)
119 |
120 | global __doc__
121 | __doc__ = (
122 | __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes))
123 | if __doc__ is not None
124 | else None
125 | )
126 |
127 |
128 | _init()
129 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/requests/status_codes.py:
--------------------------------------------------------------------------------
```python
1 | r"""
2 | The ``codes`` object defines a mapping from common names for HTTP statuses
3 | to their numerical codes, accessible either as attributes or as dictionary
4 | items.
5 |
6 | Example::
7 |
8 | >>> import requests
9 | >>> requests.codes['temporary_redirect']
10 | 307
11 | >>> requests.codes.teapot
12 | 418
13 | >>> requests.codes['\o/']
14 | 200
15 |
16 | Some codes have multiple names, and both upper- and lower-case versions of
17 | the names are allowed. For example, ``codes.ok``, ``codes.OK``, and
18 | ``codes.okay`` all correspond to the HTTP status code 200.
19 | """
20 |
21 | from .structures import LookupDict
22 |
23 | _codes = {
24 | # Informational.
25 | 100: ("continue",),
26 | 101: ("switching_protocols",),
27 | 102: ("processing", "early-hints"),
28 | 103: ("checkpoint",),
29 | 122: ("uri_too_long", "request_uri_too_long"),
30 | 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"),
31 | 201: ("created",),
32 | 202: ("accepted",),
33 | 203: ("non_authoritative_info", "non_authoritative_information"),
34 | 204: ("no_content",),
35 | 205: ("reset_content", "reset"),
36 | 206: ("partial_content", "partial"),
37 | 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"),
38 | 208: ("already_reported",),
39 | 226: ("im_used",),
40 | # Redirection.
41 | 300: ("multiple_choices",),
42 | 301: ("moved_permanently", "moved", "\\o-"),
43 | 302: ("found",),
44 | 303: ("see_other", "other"),
45 | 304: ("not_modified",),
46 | 305: ("use_proxy",),
47 | 306: ("switch_proxy",),
48 | 307: ("temporary_redirect", "temporary_moved", "temporary"),
49 | 308: (
50 | "permanent_redirect",
51 | "resume_incomplete",
52 | "resume",
53 | ), # "resume" and "resume_incomplete" to be removed in 3.0
54 | # Client Error.
55 | 400: ("bad_request", "bad"),
56 | 401: ("unauthorized",),
57 | 402: ("payment_required", "payment"),
58 | 403: ("forbidden",),
59 | 404: ("not_found", "-o-"),
60 | 405: ("method_not_allowed", "not_allowed"),
61 | 406: ("not_acceptable",),
62 | 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"),
63 | 408: ("request_timeout", "timeout"),
64 | 409: ("conflict",),
65 | 410: ("gone",),
66 | 411: ("length_required",),
67 | 412: ("precondition_failed", "precondition"),
68 | 413: ("request_entity_too_large", "content_too_large"),
69 | 414: ("request_uri_too_large", "uri_too_long"),
70 | 415: ("unsupported_media_type", "unsupported_media", "media_type"),
71 | 416: (
72 | "requested_range_not_satisfiable",
73 | "requested_range",
74 | "range_not_satisfiable",
75 | ),
76 | 417: ("expectation_failed",),
77 | 418: ("im_a_teapot", "teapot", "i_am_a_teapot"),
78 | 421: ("misdirected_request",),
79 | 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"),
80 | 423: ("locked",),
81 | 424: ("failed_dependency", "dependency"),
82 | 425: ("unordered_collection", "unordered", "too_early"),
83 | 426: ("upgrade_required", "upgrade"),
84 | 428: ("precondition_required", "precondition"),
85 | 429: ("too_many_requests", "too_many"),
86 | 431: ("header_fields_too_large", "fields_too_large"),
87 | 444: ("no_response", "none"),
88 | 449: ("retry_with", "retry"),
89 | 450: ("blocked_by_windows_parental_controls", "parental_controls"),
90 | 451: ("unavailable_for_legal_reasons", "legal_reasons"),
91 | 499: ("client_closed_request",),
92 | # Server Error.
93 | 500: ("internal_server_error", "server_error", "/o\\", "✗"),
94 | 501: ("not_implemented",),
95 | 502: ("bad_gateway",),
96 | 503: ("service_unavailable", "unavailable"),
97 | 504: ("gateway_timeout",),
98 | 505: ("http_version_not_supported", "http_version"),
99 | 506: ("variant_also_negotiates",),
100 | 507: ("insufficient_storage",),
101 | 509: ("bandwidth_limit_exceeded", "bandwidth"),
102 | 510: ("not_extended",),
103 | 511: ("network_authentication_required", "network_auth", "network_authentication"),
104 | }
105 |
106 | codes = LookupDict(name="status_codes")
107 |
108 |
109 | def _init():
110 | for code, titles in _codes.items():
111 | for title in titles:
112 | setattr(codes, title, code)
113 | if not title.startswith(("\\", "/")):
114 | setattr(codes, title.upper(), code)
115 |
116 | def doc(code):
117 | names = ", ".join(f"``{n}``" for n in _codes[code])
118 | return "* %d: %s" % (code, names)
119 |
120 | global __doc__
121 | __doc__ = (
122 | __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes))
123 | if __doc__ is not None
124 | else None
125 | )
126 |
127 |
128 | _init()
129 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py:
--------------------------------------------------------------------------------
```python
1 | """A single place for constructing and exposing the main parser
2 | """
3 |
4 | import os
5 | import subprocess
6 | import sys
7 | from typing import List, Optional, Tuple
8 |
9 | from pip._internal.build_env import get_runnable_pip
10 | from pip._internal.cli import cmdoptions
11 | from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
12 | from pip._internal.commands import commands_dict, get_similar_commands
13 | from pip._internal.exceptions import CommandError
14 | from pip._internal.utils.misc import get_pip_version, get_prog
15 |
16 | __all__ = ["create_main_parser", "parse_command"]
17 |
18 |
19 | def create_main_parser() -> ConfigOptionParser:
20 | """Creates and returns the main parser for pip's CLI"""
21 |
22 | parser = ConfigOptionParser(
23 | usage="\n%prog <command> [options]",
24 | add_help_option=False,
25 | formatter=UpdatingDefaultsHelpFormatter(),
26 | name="global",
27 | prog=get_prog(),
28 | )
29 | parser.disable_interspersed_args()
30 |
31 | parser.version = get_pip_version()
32 |
33 | # add the general options
34 | gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
35 | parser.add_option_group(gen_opts)
36 |
37 | # so the help formatter knows
38 | parser.main = True # type: ignore
39 |
40 | # create command listing for description
41 | description = [""] + [
42 | f"{name:27} {command_info.summary}"
43 | for name, command_info in commands_dict.items()
44 | ]
45 | parser.description = "\n".join(description)
46 |
47 | return parser
48 |
49 |
50 | def identify_python_interpreter(python: str) -> Optional[str]:
51 | # If the named file exists, use it.
52 | # If it's a directory, assume it's a virtual environment and
53 | # look for the environment's Python executable.
54 | if os.path.exists(python):
55 | if os.path.isdir(python):
56 | # bin/python for Unix, Scripts/python.exe for Windows
57 | # Try both in case of odd cases like cygwin.
58 | for exe in ("bin/python", "Scripts/python.exe"):
59 | py = os.path.join(python, exe)
60 | if os.path.exists(py):
61 | return py
62 | else:
63 | return python
64 |
65 | # Could not find the interpreter specified
66 | return None
67 |
68 |
69 | def parse_command(args: List[str]) -> Tuple[str, List[str]]:
70 | parser = create_main_parser()
71 |
72 | # Note: parser calls disable_interspersed_args(), so the result of this
73 | # call is to split the initial args into the general options before the
74 | # subcommand and everything else.
75 | # For example:
76 | # args: ['--timeout=5', 'install', '--user', 'INITools']
77 | # general_options: ['--timeout==5']
78 | # args_else: ['install', '--user', 'INITools']
79 | general_options, args_else = parser.parse_args(args)
80 |
81 | # --python
82 | if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
83 | # Re-invoke pip using the specified Python interpreter
84 | interpreter = identify_python_interpreter(general_options.python)
85 | if interpreter is None:
86 | raise CommandError(
87 | f"Could not locate Python interpreter {general_options.python}"
88 | )
89 |
90 | pip_cmd = [
91 | interpreter,
92 | get_runnable_pip(),
93 | ]
94 | pip_cmd.extend(args)
95 |
96 | # Set a flag so the child doesn't re-invoke itself, causing
97 | # an infinite loop.
98 | os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1"
99 | returncode = 0
100 | try:
101 | proc = subprocess.run(pip_cmd)
102 | returncode = proc.returncode
103 | except (subprocess.SubprocessError, OSError) as exc:
104 | raise CommandError(f"Failed to run pip under {interpreter}: {exc}")
105 | sys.exit(returncode)
106 |
107 | # --version
108 | if general_options.version:
109 | sys.stdout.write(parser.version)
110 | sys.stdout.write(os.linesep)
111 | sys.exit()
112 |
113 | # pip || pip help -> print_help()
114 | if not args_else or (args_else[0] == "help" and len(args_else) == 1):
115 | parser.print_help()
116 | sys.exit()
117 |
118 | # the subcommand name
119 | cmd_name = args_else[0]
120 |
121 | if cmd_name not in commands_dict:
122 | guess = get_similar_commands(cmd_name)
123 |
124 | msg = [f'unknown command "{cmd_name}"']
125 | if guess:
126 | msg.append(f'maybe you meant "{guess}"')
127 |
128 | raise CommandError(" - ".join(msg))
129 |
130 | # all the args without the subcommand
131 | cmd_args = args[:]
132 | cmd_args.remove(cmd_name)
133 |
134 | return cmd_name, cmd_args
135 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py:
--------------------------------------------------------------------------------
```python
1 | import contextlib
2 | import functools
3 | import os
4 | import sys
5 | from typing import TYPE_CHECKING, List, Optional, Type, cast
6 |
7 | from pip._internal.utils.misc import strtobool
8 |
9 | from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
10 |
11 | if TYPE_CHECKING:
12 | from typing import Literal, Protocol
13 | else:
14 | Protocol = object
15 |
16 | __all__ = [
17 | "BaseDistribution",
18 | "BaseEnvironment",
19 | "FilesystemWheel",
20 | "MemoryWheel",
21 | "Wheel",
22 | "get_default_environment",
23 | "get_environment",
24 | "get_wheel_distribution",
25 | "select_backend",
26 | ]
27 |
28 |
29 | def _should_use_importlib_metadata() -> bool:
30 | """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend.
31 |
32 | By default, pip uses ``importlib.metadata`` on Python 3.11+, and
33 | ``pkg_resourcess`` otherwise. This can be overridden by a couple of ways:
34 |
35 | * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it
36 | dictates whether ``importlib.metadata`` is used, regardless of Python
37 | version.
38 | * On Python 3.11+, Python distributors can patch ``importlib.metadata``
39 | to add a global constant ``_PIP_USE_IMPORTLIB_METADATA = False``. This
40 | makes pip use ``pkg_resources`` (unless the user set the aforementioned
41 | environment variable to *True*).
42 | """
43 | with contextlib.suppress(KeyError, ValueError):
44 | return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"]))
45 | if sys.version_info < (3, 11):
46 | return False
47 | import importlib.metadata
48 |
49 | return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True))
50 |
51 |
52 | class Backend(Protocol):
53 | NAME: 'Literal["importlib", "pkg_resources"]'
54 | Distribution: Type[BaseDistribution]
55 | Environment: Type[BaseEnvironment]
56 |
57 |
58 | @functools.lru_cache(maxsize=None)
59 | def select_backend() -> Backend:
60 | if _should_use_importlib_metadata():
61 | from . import importlib
62 |
63 | return cast(Backend, importlib)
64 | from . import pkg_resources
65 |
66 | return cast(Backend, pkg_resources)
67 |
68 |
69 | def get_default_environment() -> BaseEnvironment:
70 | """Get the default representation for the current environment.
71 |
72 | This returns an Environment instance from the chosen backend. The default
73 | Environment instance should be built from ``sys.path`` and may use caching
74 | to share instance state accorss calls.
75 | """
76 | return select_backend().Environment.default()
77 |
78 |
79 | def get_environment(paths: Optional[List[str]]) -> BaseEnvironment:
80 | """Get a representation of the environment specified by ``paths``.
81 |
82 | This returns an Environment instance from the chosen backend based on the
83 | given import paths. The backend must build a fresh instance representing
84 | the state of installed distributions when this function is called.
85 | """
86 | return select_backend().Environment.from_paths(paths)
87 |
88 |
89 | def get_directory_distribution(directory: str) -> BaseDistribution:
90 | """Get the distribution metadata representation in the specified directory.
91 |
92 | This returns a Distribution instance from the chosen backend based on
93 | the given on-disk ``.dist-info`` directory.
94 | """
95 | return select_backend().Distribution.from_directory(directory)
96 |
97 |
98 | def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution:
99 | """Get the representation of the specified wheel's distribution metadata.
100 |
101 | This returns a Distribution instance from the chosen backend based on
102 | the given wheel's ``.dist-info`` directory.
103 |
104 | :param canonical_name: Normalized project name of the given wheel.
105 | """
106 | return select_backend().Distribution.from_wheel(wheel, canonical_name)
107 |
108 |
109 | def get_metadata_distribution(
110 | metadata_contents: bytes,
111 | filename: str,
112 | canonical_name: str,
113 | ) -> BaseDistribution:
114 | """Get the dist representation of the specified METADATA file contents.
115 |
116 | This returns a Distribution instance from the chosen backend sourced from the data
117 | in `metadata_contents`.
118 |
119 | :param metadata_contents: Contents of a METADATA file within a dist, or one served
120 | via PEP 658.
121 | :param filename: Filename for the dist this metadata represents.
122 | :param canonical_name: Normalized project name of the given dist.
123 | """
124 | return select_backend().Distribution.from_metadata_file_contents(
125 | metadata_contents,
126 | filename,
127 | canonical_name,
128 | )
129 |
```