#
tokens: 48234/50000 8/808 files (page 22/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 22 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/_internal/resolution/resolvelib/found_candidates.py:
--------------------------------------------------------------------------------

```python
  1 | """Utilities to lazily create and visit candidates found.
  2 | 
  3 | Creating and visiting a candidate is a *very* costly operation. It involves
  4 | fetching, extracting, potentially building modules from source, and verifying
  5 | distribution metadata. It is therefore crucial for performance to keep
  6 | everything here lazy all the way down, so we only touch candidates that we
  7 | absolutely need, and not "download the world" when we only need one version of
  8 | something.
  9 | """
 10 | 
 11 | import functools
 12 | import logging
 13 | from collections.abc import Sequence
 14 | from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Set, Tuple
 15 | 
 16 | from pip._vendor.packaging.version import _BaseVersion
 17 | 
 18 | from pip._internal.exceptions import MetadataInvalid
 19 | 
 20 | from .base import Candidate
 21 | 
 22 | logger = logging.getLogger(__name__)
 23 | 
 24 | IndexCandidateInfo = Tuple[_BaseVersion, Callable[[], Optional[Candidate]]]
 25 | 
 26 | if TYPE_CHECKING:
 27 |     SequenceCandidate = Sequence[Candidate]
 28 | else:
 29 |     # For compatibility: Python before 3.9 does not support using [] on the
 30 |     # Sequence class.
 31 |     #
 32 |     # >>> from collections.abc import Sequence
 33 |     # >>> Sequence[str]
 34 |     # Traceback (most recent call last):
 35 |     #   File "<stdin>", line 1, in <module>
 36 |     # TypeError: 'ABCMeta' object is not subscriptable
 37 |     #
 38 |     # TODO: Remove this block after dropping Python 3.8 support.
 39 |     SequenceCandidate = Sequence
 40 | 
 41 | 
 42 | def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]:
 43 |     """Iterator for ``FoundCandidates``.
 44 | 
 45 |     This iterator is used when the package is not already installed. Candidates
 46 |     from index come later in their normal ordering.
 47 |     """
 48 |     versions_found: Set[_BaseVersion] = set()
 49 |     for version, func in infos:
 50 |         if version in versions_found:
 51 |             continue
 52 |         try:
 53 |             candidate = func()
 54 |         except MetadataInvalid as e:
 55 |             logger.warning(
 56 |                 "Ignoring version %s of %s since it has invalid metadata:\n"
 57 |                 "%s\n"
 58 |                 "Please use pip<24.1 if you need to use this version.",
 59 |                 version,
 60 |                 e.ireq.name,
 61 |                 e,
 62 |             )
 63 |             # Mark version as found to avoid trying other candidates with the same
 64 |             # version, since they most likely have invalid metadata as well.
 65 |             versions_found.add(version)
 66 |         else:
 67 |             if candidate is None:
 68 |                 continue
 69 |             yield candidate
 70 |             versions_found.add(version)
 71 | 
 72 | 
 73 | def _iter_built_with_prepended(
 74 |     installed: Candidate, infos: Iterator[IndexCandidateInfo]
 75 | ) -> Iterator[Candidate]:
 76 |     """Iterator for ``FoundCandidates``.
 77 | 
 78 |     This iterator is used when the resolver prefers the already-installed
 79 |     candidate and NOT to upgrade. The installed candidate is therefore
 80 |     always yielded first, and candidates from index come later in their
 81 |     normal ordering, except skipped when the version is already installed.
 82 |     """
 83 |     yield installed
 84 |     versions_found: Set[_BaseVersion] = {installed.version}
 85 |     for version, func in infos:
 86 |         if version in versions_found:
 87 |             continue
 88 |         candidate = func()
 89 |         if candidate is None:
 90 |             continue
 91 |         yield candidate
 92 |         versions_found.add(version)
 93 | 
 94 | 
 95 | def _iter_built_with_inserted(
 96 |     installed: Candidate, infos: Iterator[IndexCandidateInfo]
 97 | ) -> Iterator[Candidate]:
 98 |     """Iterator for ``FoundCandidates``.
 99 | 
100 |     This iterator is used when the resolver prefers to upgrade an
101 |     already-installed package. Candidates from index are returned in their
102 |     normal ordering, except replaced when the version is already installed.
103 | 
104 |     The implementation iterates through and yields other candidates, inserting
105 |     the installed candidate exactly once before we start yielding older or
106 |     equivalent candidates, or after all other candidates if they are all newer.
107 |     """
108 |     versions_found: Set[_BaseVersion] = set()
109 |     for version, func in infos:
110 |         if version in versions_found:
111 |             continue
112 |         # If the installed candidate is better, yield it first.
113 |         if installed.version >= version:
114 |             yield installed
115 |             versions_found.add(installed.version)
116 |         candidate = func()
117 |         if candidate is None:
118 |             continue
119 |         yield candidate
120 |         versions_found.add(version)
121 | 
122 |     # If the installed candidate is older than all other candidates.
123 |     if installed.version not in versions_found:
124 |         yield installed
125 | 
126 | 
127 | class FoundCandidates(SequenceCandidate):
128 |     """A lazy sequence to provide candidates to the resolver.
129 | 
130 |     The intended usage is to return this from `find_matches()` so the resolver
131 |     can iterate through the sequence multiple times, but only access the index
132 |     page when remote packages are actually needed. This improve performances
133 |     when suitable candidates are already installed on disk.
134 |     """
135 | 
136 |     def __init__(
137 |         self,
138 |         get_infos: Callable[[], Iterator[IndexCandidateInfo]],
139 |         installed: Optional[Candidate],
140 |         prefers_installed: bool,
141 |         incompatible_ids: Set[int],
142 |     ):
143 |         self._get_infos = get_infos
144 |         self._installed = installed
145 |         self._prefers_installed = prefers_installed
146 |         self._incompatible_ids = incompatible_ids
147 | 
148 |     def __getitem__(self, index: Any) -> Any:
149 |         # Implemented to satisfy the ABC check. This is not needed by the
150 |         # resolver, and should not be used by the provider either (for
151 |         # performance reasons).
152 |         raise NotImplementedError("don't do this")
153 | 
154 |     def __iter__(self) -> Iterator[Candidate]:
155 |         infos = self._get_infos()
156 |         if not self._installed:
157 |             iterator = _iter_built(infos)
158 |         elif self._prefers_installed:
159 |             iterator = _iter_built_with_prepended(self._installed, infos)
160 |         else:
161 |             iterator = _iter_built_with_inserted(self._installed, infos)
162 |         return (c for c in iterator if id(c) not in self._incompatible_ids)
163 | 
164 |     def __len__(self) -> int:
165 |         # Implemented to satisfy the ABC check. This is not needed by the
166 |         # resolver, and should not be used by the provider either (for
167 |         # performance reasons).
168 |         raise NotImplementedError("don't do this")
169 | 
170 |     @functools.lru_cache(maxsize=1)
171 |     def __bool__(self) -> bool:
172 |         if self._prefers_installed and self._installed:
173 |             return True
174 |         return any(self)
175 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | import os
  3 | import shutil
  4 | from optparse import Values
  5 | from typing import List
  6 | 
  7 | from pip._internal.cache import WheelCache
  8 | from pip._internal.cli import cmdoptions
  9 | from pip._internal.cli.req_command import RequirementCommand, with_cleanup
 10 | from pip._internal.cli.status_codes import SUCCESS
 11 | from pip._internal.exceptions import CommandError
 12 | from pip._internal.operations.build.build_tracker import get_build_tracker
 13 | from pip._internal.req.req_install import (
 14 |     InstallRequirement,
 15 |     check_legacy_setup_py_options,
 16 | )
 17 | from pip._internal.utils.misc import ensure_dir, normalize_path
 18 | from pip._internal.utils.temp_dir import TempDirectory
 19 | from pip._internal.wheel_builder import build, should_build_for_wheel_command
 20 | 
 21 | logger = logging.getLogger(__name__)
 22 | 
 23 | 
 24 | class WheelCommand(RequirementCommand):
 25 |     """
 26 |     Build Wheel archives for your requirements and dependencies.
 27 | 
 28 |     Wheel is a built-package format, and offers the advantage of not
 29 |     recompiling your software during every install. For more details, see the
 30 |     wheel docs: https://wheel.readthedocs.io/en/latest/
 31 | 
 32 |     'pip wheel' uses the build system interface as described here:
 33 |     https://pip.pypa.io/en/stable/reference/build-system/
 34 | 
 35 |     """
 36 | 
 37 |     usage = """
 38 |       %prog [options] <requirement specifier> ...
 39 |       %prog [options] -r <requirements file> ...
 40 |       %prog [options] [-e] <vcs project url> ...
 41 |       %prog [options] [-e] <local project path> ...
 42 |       %prog [options] <archive url/path> ..."""
 43 | 
 44 |     def add_options(self) -> None:
 45 |         self.cmd_opts.add_option(
 46 |             "-w",
 47 |             "--wheel-dir",
 48 |             dest="wheel_dir",
 49 |             metavar="dir",
 50 |             default=os.curdir,
 51 |             help=(
 52 |                 "Build wheels into <dir>, where the default is the "
 53 |                 "current working directory."
 54 |             ),
 55 |         )
 56 |         self.cmd_opts.add_option(cmdoptions.no_binary())
 57 |         self.cmd_opts.add_option(cmdoptions.only_binary())
 58 |         self.cmd_opts.add_option(cmdoptions.prefer_binary())
 59 |         self.cmd_opts.add_option(cmdoptions.no_build_isolation())
 60 |         self.cmd_opts.add_option(cmdoptions.use_pep517())
 61 |         self.cmd_opts.add_option(cmdoptions.no_use_pep517())
 62 |         self.cmd_opts.add_option(cmdoptions.check_build_deps())
 63 |         self.cmd_opts.add_option(cmdoptions.constraints())
 64 |         self.cmd_opts.add_option(cmdoptions.editable())
 65 |         self.cmd_opts.add_option(cmdoptions.requirements())
 66 |         self.cmd_opts.add_option(cmdoptions.src())
 67 |         self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
 68 |         self.cmd_opts.add_option(cmdoptions.no_deps())
 69 |         self.cmd_opts.add_option(cmdoptions.progress_bar())
 70 | 
 71 |         self.cmd_opts.add_option(
 72 |             "--no-verify",
 73 |             dest="no_verify",
 74 |             action="store_true",
 75 |             default=False,
 76 |             help="Don't verify if built wheel is valid.",
 77 |         )
 78 | 
 79 |         self.cmd_opts.add_option(cmdoptions.config_settings())
 80 |         self.cmd_opts.add_option(cmdoptions.build_options())
 81 |         self.cmd_opts.add_option(cmdoptions.global_options())
 82 | 
 83 |         self.cmd_opts.add_option(
 84 |             "--pre",
 85 |             action="store_true",
 86 |             default=False,
 87 |             help=(
 88 |                 "Include pre-release and development versions. By default, "
 89 |                 "pip only finds stable versions."
 90 |             ),
 91 |         )
 92 | 
 93 |         self.cmd_opts.add_option(cmdoptions.require_hashes())
 94 | 
 95 |         index_opts = cmdoptions.make_option_group(
 96 |             cmdoptions.index_group,
 97 |             self.parser,
 98 |         )
 99 | 
100 |         self.parser.insert_option_group(0, index_opts)
101 |         self.parser.insert_option_group(0, self.cmd_opts)
102 | 
103 |     @with_cleanup
104 |     def run(self, options: Values, args: List[str]) -> int:
105 |         session = self.get_default_session(options)
106 | 
107 |         finder = self._build_package_finder(options, session)
108 | 
109 |         options.wheel_dir = normalize_path(options.wheel_dir)
110 |         ensure_dir(options.wheel_dir)
111 | 
112 |         build_tracker = self.enter_context(get_build_tracker())
113 | 
114 |         directory = TempDirectory(
115 |             delete=not options.no_clean,
116 |             kind="wheel",
117 |             globally_managed=True,
118 |         )
119 | 
120 |         reqs = self.get_requirements(args, options, finder, session)
121 |         check_legacy_setup_py_options(options, reqs)
122 | 
123 |         wheel_cache = WheelCache(options.cache_dir)
124 | 
125 |         preparer = self.make_requirement_preparer(
126 |             temp_build_dir=directory,
127 |             options=options,
128 |             build_tracker=build_tracker,
129 |             session=session,
130 |             finder=finder,
131 |             download_dir=options.wheel_dir,
132 |             use_user_site=False,
133 |             verbosity=self.verbosity,
134 |         )
135 | 
136 |         resolver = self.make_resolver(
137 |             preparer=preparer,
138 |             finder=finder,
139 |             options=options,
140 |             wheel_cache=wheel_cache,
141 |             ignore_requires_python=options.ignore_requires_python,
142 |             use_pep517=options.use_pep517,
143 |         )
144 | 
145 |         self.trace_basic_info(finder)
146 | 
147 |         requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
148 | 
149 |         reqs_to_build: List[InstallRequirement] = []
150 |         for req in requirement_set.requirements.values():
151 |             if req.is_wheel:
152 |                 preparer.save_linked_requirement(req)
153 |             elif should_build_for_wheel_command(req):
154 |                 reqs_to_build.append(req)
155 | 
156 |         preparer.prepare_linked_requirements_more(requirement_set.requirements.values())
157 | 
158 |         # build wheels
159 |         build_successes, build_failures = build(
160 |             reqs_to_build,
161 |             wheel_cache=wheel_cache,
162 |             verify=(not options.no_verify),
163 |             build_options=options.build_options or [],
164 |             global_options=options.global_options or [],
165 |         )
166 |         for req in build_successes:
167 |             assert req.link and req.link.is_wheel
168 |             assert req.local_file_path
169 |             # copy from cache to target directory
170 |             try:
171 |                 shutil.copy(req.local_file_path, options.wheel_dir)
172 |             except OSError as e:
173 |                 logger.warning(
174 |                     "Building wheel for %s failed: %s",
175 |                     req.name,
176 |                     e,
177 |                 )
178 |                 build_failures.append(req)
179 |         if len(build_failures) != 0:
180 |             raise CommandError("Failed to build one or more wheels")
181 | 
182 |         return SUCCESS
183 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/style.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 |     pygments.style
  3 |     ~~~~~~~~~~~~~~
  4 | 
  5 |     Basic style object.
  6 | 
  7 |     :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
  8 |     :license: BSD, see LICENSE for details.
  9 | """
 10 | 
 11 | from pip._vendor.pygments.token import Token, STANDARD_TYPES
 12 | 
 13 | # Default mapping of ansixxx to RGB colors.
 14 | _ansimap = {
 15 |     # dark
 16 |     'ansiblack': '000000',
 17 |     'ansired': '7f0000',
 18 |     'ansigreen': '007f00',
 19 |     'ansiyellow': '7f7fe0',
 20 |     'ansiblue': '00007f',
 21 |     'ansimagenta': '7f007f',
 22 |     'ansicyan': '007f7f',
 23 |     'ansigray': 'e5e5e5',
 24 |     # normal
 25 |     'ansibrightblack': '555555',
 26 |     'ansibrightred': 'ff0000',
 27 |     'ansibrightgreen': '00ff00',
 28 |     'ansibrightyellow': 'ffff00',
 29 |     'ansibrightblue': '0000ff',
 30 |     'ansibrightmagenta': 'ff00ff',
 31 |     'ansibrightcyan': '00ffff',
 32 |     'ansiwhite': 'ffffff',
 33 | }
 34 | # mapping of deprecated #ansixxx colors to new color names
 35 | _deprecated_ansicolors = {
 36 |     # dark
 37 |     '#ansiblack': 'ansiblack',
 38 |     '#ansidarkred': 'ansired',
 39 |     '#ansidarkgreen': 'ansigreen',
 40 |     '#ansibrown': 'ansiyellow',
 41 |     '#ansidarkblue': 'ansiblue',
 42 |     '#ansipurple': 'ansimagenta',
 43 |     '#ansiteal': 'ansicyan',
 44 |     '#ansilightgray': 'ansigray',
 45 |     # normal
 46 |     '#ansidarkgray': 'ansibrightblack',
 47 |     '#ansired': 'ansibrightred',
 48 |     '#ansigreen': 'ansibrightgreen',
 49 |     '#ansiyellow': 'ansibrightyellow',
 50 |     '#ansiblue': 'ansibrightblue',
 51 |     '#ansifuchsia': 'ansibrightmagenta',
 52 |     '#ansiturquoise': 'ansibrightcyan',
 53 |     '#ansiwhite': 'ansiwhite',
 54 | }
 55 | ansicolors = set(_ansimap)
 56 | 
 57 | 
 58 | class StyleMeta(type):
 59 | 
 60 |     def __new__(mcs, name, bases, dct):
 61 |         obj = type.__new__(mcs, name, bases, dct)
 62 |         for token in STANDARD_TYPES:
 63 |             if token not in obj.styles:
 64 |                 obj.styles[token] = ''
 65 | 
 66 |         def colorformat(text):
 67 |             if text in ansicolors:
 68 |                 return text
 69 |             if text[0:1] == '#':
 70 |                 col = text[1:]
 71 |                 if len(col) == 6:
 72 |                     return col
 73 |                 elif len(col) == 3:
 74 |                     return col[0] * 2 + col[1] * 2 + col[2] * 2
 75 |             elif text == '':
 76 |                 return ''
 77 |             elif text.startswith('var') or text.startswith('calc'):
 78 |                 return text
 79 |             assert False, f"wrong color format {text!r}"
 80 | 
 81 |         _styles = obj._styles = {}
 82 | 
 83 |         for ttype in obj.styles:
 84 |             for token in ttype.split():
 85 |                 if token in _styles:
 86 |                     continue
 87 |                 ndef = _styles.get(token.parent, None)
 88 |                 styledefs = obj.styles.get(token, '').split()
 89 |                 if not ndef or token is None:
 90 |                     ndef = ['', 0, 0, 0, '', '', 0, 0, 0]
 91 |                 elif 'noinherit' in styledefs and token is not Token:
 92 |                     ndef = _styles[Token][:]
 93 |                 else:
 94 |                     ndef = ndef[:]
 95 |                 _styles[token] = ndef
 96 |                 for styledef in obj.styles.get(token, '').split():
 97 |                     if styledef == 'noinherit':
 98 |                         pass
 99 |                     elif styledef == 'bold':
100 |                         ndef[1] = 1
101 |                     elif styledef == 'nobold':
102 |                         ndef[1] = 0
103 |                     elif styledef == 'italic':
104 |                         ndef[2] = 1
105 |                     elif styledef == 'noitalic':
106 |                         ndef[2] = 0
107 |                     elif styledef == 'underline':
108 |                         ndef[3] = 1
109 |                     elif styledef == 'nounderline':
110 |                         ndef[3] = 0
111 |                     elif styledef[:3] == 'bg:':
112 |                         ndef[4] = colorformat(styledef[3:])
113 |                     elif styledef[:7] == 'border:':
114 |                         ndef[5] = colorformat(styledef[7:])
115 |                     elif styledef == 'roman':
116 |                         ndef[6] = 1
117 |                     elif styledef == 'sans':
118 |                         ndef[7] = 1
119 |                     elif styledef == 'mono':
120 |                         ndef[8] = 1
121 |                     else:
122 |                         ndef[0] = colorformat(styledef)
123 | 
124 |         return obj
125 | 
126 |     def style_for_token(cls, token):
127 |         t = cls._styles[token]
128 |         ansicolor = bgansicolor = None
129 |         color = t[0]
130 |         if color in _deprecated_ansicolors:
131 |             color = _deprecated_ansicolors[color]
132 |         if color in ansicolors:
133 |             ansicolor = color
134 |             color = _ansimap[color]
135 |         bgcolor = t[4]
136 |         if bgcolor in _deprecated_ansicolors:
137 |             bgcolor = _deprecated_ansicolors[bgcolor]
138 |         if bgcolor in ansicolors:
139 |             bgansicolor = bgcolor
140 |             bgcolor = _ansimap[bgcolor]
141 | 
142 |         return {
143 |             'color':        color or None,
144 |             'bold':         bool(t[1]),
145 |             'italic':       bool(t[2]),
146 |             'underline':    bool(t[3]),
147 |             'bgcolor':      bgcolor or None,
148 |             'border':       t[5] or None,
149 |             'roman':        bool(t[6]) or None,
150 |             'sans':         bool(t[7]) or None,
151 |             'mono':         bool(t[8]) or None,
152 |             'ansicolor':    ansicolor,
153 |             'bgansicolor':  bgansicolor,
154 |         }
155 | 
156 |     def list_styles(cls):
157 |         return list(cls)
158 | 
159 |     def styles_token(cls, ttype):
160 |         return ttype in cls._styles
161 | 
162 |     def __iter__(cls):
163 |         for token in cls._styles:
164 |             yield token, cls.style_for_token(token)
165 | 
166 |     def __len__(cls):
167 |         return len(cls._styles)
168 | 
169 | 
170 | class Style(metaclass=StyleMeta):
171 | 
172 |     #: overall background color (``None`` means transparent)
173 |     background_color = '#ffffff'
174 | 
175 |     #: highlight background color
176 |     highlight_color = '#ffffcc'
177 | 
178 |     #: line number font color
179 |     line_number_color = 'inherit'
180 | 
181 |     #: line number background color
182 |     line_number_background_color = 'transparent'
183 | 
184 |     #: special line number font color
185 |     line_number_special_color = '#000000'
186 | 
187 |     #: special line number background color
188 |     line_number_special_background_color = '#ffffc0'
189 | 
190 |     #: Style definitions for individual token types.
191 |     styles = {}
192 | 
193 |     #: user-friendly style name (used when selecting the style, so this
194 |     # should be all-lowercase, no spaces, hyphens)
195 |     name = 'unnamed'
196 | 
197 |     aliases = []
198 | 
199 |     # Attribute for lexers defined within Pygments. If set
200 |     # to True, the style is not shown in the style gallery
201 |     # on the website. This is intended for language-specific
202 |     # styles.
203 |     web_style_gallery_exclude = False
204 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/urls.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import codecs
  4 | import re
  5 | import typing as t
  6 | import urllib.parse
  7 | from urllib.parse import quote
  8 | from urllib.parse import unquote
  9 | from urllib.parse import urlencode
 10 | from urllib.parse import urlsplit
 11 | from urllib.parse import urlunsplit
 12 | 
 13 | from .datastructures import iter_multi_items
 14 | 
 15 | 
 16 | def _codec_error_url_quote(e: UnicodeError) -> tuple[str, int]:
 17 |     """Used in :func:`uri_to_iri` after unquoting to re-quote any
 18 |     invalid bytes.
 19 |     """
 20 |     # the docs state that UnicodeError does have these attributes,
 21 |     # but mypy isn't picking them up
 22 |     out = quote(e.object[e.start : e.end], safe="")  # type: ignore
 23 |     return out, e.end  # type: ignore
 24 | 
 25 | 
 26 | codecs.register_error("werkzeug.url_quote", _codec_error_url_quote)
 27 | 
 28 | 
 29 | def _make_unquote_part(name: str, chars: str) -> t.Callable[[str], str]:
 30 |     """Create a function that unquotes all percent encoded characters except those
 31 |     given. This allows working with unquoted characters if possible while not changing
 32 |     the meaning of a given part of a URL.
 33 |     """
 34 |     choices = "|".join(f"{ord(c):02X}" for c in sorted(chars))
 35 |     pattern = re.compile(f"((?:%(?:{choices}))+)", re.I)
 36 | 
 37 |     def _unquote_partial(value: str) -> str:
 38 |         parts = iter(pattern.split(value))
 39 |         out = []
 40 | 
 41 |         for part in parts:
 42 |             out.append(unquote(part, "utf-8", "werkzeug.url_quote"))
 43 |             out.append(next(parts, ""))
 44 | 
 45 |         return "".join(out)
 46 | 
 47 |     _unquote_partial.__name__ = f"_unquote_{name}"
 48 |     return _unquote_partial
 49 | 
 50 | 
 51 | # characters that should remain quoted in URL parts
 52 | # based on https://url.spec.whatwg.org/#percent-encoded-bytes
 53 | # always keep all controls, space, and % quoted
 54 | _always_unsafe = bytes((*range(0x21), 0x25, 0x7F)).decode()
 55 | _unquote_fragment = _make_unquote_part("fragment", _always_unsafe)
 56 | _unquote_query = _make_unquote_part("query", _always_unsafe + "&=+#")
 57 | _unquote_path = _make_unquote_part("path", _always_unsafe + "/?#")
 58 | _unquote_user = _make_unquote_part("user", _always_unsafe + ":@/?#")
 59 | 
 60 | 
 61 | def uri_to_iri(uri: str) -> str:
 62 |     """Convert a URI to an IRI. All valid UTF-8 characters are unquoted,
 63 |     leaving all reserved and invalid characters quoted. If the URL has
 64 |     a domain, it is decoded from Punycode.
 65 | 
 66 |     >>> uri_to_iri("http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF")
 67 |     'http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF'
 68 | 
 69 |     :param uri: The URI to convert.
 70 | 
 71 |     .. versionchanged:: 3.0
 72 |         Passing a tuple or bytes, and the ``charset`` and ``errors`` parameters,
 73 |         are removed.
 74 | 
 75 |     .. versionchanged:: 2.3
 76 |         Which characters remain quoted is specific to each part of the URL.
 77 | 
 78 |     .. versionchanged:: 0.15
 79 |         All reserved and invalid characters remain quoted. Previously,
 80 |         only some reserved characters were preserved, and invalid bytes
 81 |         were replaced instead of left quoted.
 82 | 
 83 |     .. versionadded:: 0.6
 84 |     """
 85 |     parts = urlsplit(uri)
 86 |     path = _unquote_path(parts.path)
 87 |     query = _unquote_query(parts.query)
 88 |     fragment = _unquote_fragment(parts.fragment)
 89 | 
 90 |     if parts.hostname:
 91 |         netloc = _decode_idna(parts.hostname)
 92 |     else:
 93 |         netloc = ""
 94 | 
 95 |     if ":" in netloc:
 96 |         netloc = f"[{netloc}]"
 97 | 
 98 |     if parts.port:
 99 |         netloc = f"{netloc}:{parts.port}"
100 | 
101 |     if parts.username:
102 |         auth = _unquote_user(parts.username)
103 | 
104 |         if parts.password:
105 |             password = _unquote_user(parts.password)
106 |             auth = f"{auth}:{password}"
107 | 
108 |         netloc = f"{auth}@{netloc}"
109 | 
110 |     return urlunsplit((parts.scheme, netloc, path, query, fragment))
111 | 
112 | 
113 | def iri_to_uri(iri: str) -> str:
114 |     """Convert an IRI to a URI. All non-ASCII and unsafe characters are
115 |     quoted. If the URL has a domain, it is encoded to Punycode.
116 | 
117 |     >>> iri_to_uri('http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF')
118 |     'http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF'
119 | 
120 |     :param iri: The IRI to convert.
121 | 
122 |     .. versionchanged:: 3.0
123 |         Passing a tuple or bytes, the ``charset`` and ``errors`` parameters,
124 |         and the ``safe_conversion`` parameter, are removed.
125 | 
126 |     .. versionchanged:: 2.3
127 |         Which characters remain unquoted is specific to each part of the URL.
128 | 
129 |     .. versionchanged:: 0.15
130 |         All reserved characters remain unquoted. Previously, only some reserved
131 |         characters were left unquoted.
132 | 
133 |     .. versionchanged:: 0.9.6
134 |        The ``safe_conversion`` parameter was added.
135 | 
136 |     .. versionadded:: 0.6
137 |     """
138 |     parts = urlsplit(iri)
139 |     # safe = https://url.spec.whatwg.org/#url-path-segment-string
140 |     # as well as percent for things that are already quoted
141 |     path = quote(parts.path, safe="%!$&'()*+,/:;=@")
142 |     query = quote(parts.query, safe="%!$&'()*+,/:;=?@")
143 |     fragment = quote(parts.fragment, safe="%!#$&'()*+,/:;=?@")
144 | 
145 |     if parts.hostname:
146 |         netloc = parts.hostname.encode("idna").decode("ascii")
147 |     else:
148 |         netloc = ""
149 | 
150 |     if ":" in netloc:
151 |         netloc = f"[{netloc}]"
152 | 
153 |     if parts.port:
154 |         netloc = f"{netloc}:{parts.port}"
155 | 
156 |     if parts.username:
157 |         auth = quote(parts.username, safe="%!$&'()*+,;=")
158 | 
159 |         if parts.password:
160 |             password = quote(parts.password, safe="%!$&'()*+,;=")
161 |             auth = f"{auth}:{password}"
162 | 
163 |         netloc = f"{auth}@{netloc}"
164 | 
165 |     return urlunsplit((parts.scheme, netloc, path, query, fragment))
166 | 
167 | 
168 | # Python < 3.12
169 | # itms-services was worked around in previous iri_to_uri implementations, but
170 | # we can tell Python directly that it needs to preserve the //.
171 | if "itms-services" not in urllib.parse.uses_netloc:
172 |     urllib.parse.uses_netloc.append("itms-services")
173 | 
174 | 
175 | def _decode_idna(domain: str) -> str:
176 |     try:
177 |         data = domain.encode("ascii")
178 |     except UnicodeEncodeError:
179 |         # If the domain is not ASCII, it's decoded already.
180 |         return domain
181 | 
182 |     try:
183 |         # Try decoding in one shot.
184 |         return data.decode("idna")
185 |     except UnicodeDecodeError:
186 |         pass
187 | 
188 |     # Decode each part separately, leaving invalid parts as punycode.
189 |     parts = []
190 | 
191 |     for part in data.split(b"."):
192 |         try:
193 |             parts.append(part.decode("idna"))
194 |         except UnicodeDecodeError:
195 |             parts.append(part.decode("ascii"))
196 | 
197 |     return ".".join(parts)
198 | 
199 | 
200 | def _urlencode(query: t.Mapping[str, str] | t.Iterable[tuple[str, str]]) -> str:
201 |     items = [x for x in iter_multi_items(query) if x[1] is not None]
202 |     # safe = https://url.spec.whatwg.org/#percent-encoded-bytes
203 |     return urlencode(items, safe="!$'()*,/:;?@")
204 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | requests.api
  3 | ~~~~~~~~~~~~
  4 | 
  5 | This module implements the Requests API.
  6 | 
  7 | :copyright: (c) 2012 by Kenneth Reitz.
  8 | :license: Apache2, see LICENSE for more details.
  9 | """
 10 | 
 11 | from . import sessions
 12 | 
 13 | 
 14 | def request(method, url, **kwargs):
 15 |     """Constructs and sends a :class:`Request <Request>`.
 16 | 
 17 |     :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
 18 |     :param url: URL for the new :class:`Request` object.
 19 |     :param params: (optional) Dictionary, list of tuples or bytes to send
 20 |         in the query string for the :class:`Request`.
 21 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
 22 |         object to send in the body of the :class:`Request`.
 23 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
 24 |     :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
 25 |     :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
 26 |     :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
 27 |         ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
 28 |         or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string
 29 |         defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
 30 |         to add for the file.
 31 |     :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
 32 |     :param timeout: (optional) How many seconds to wait for the server to send data
 33 |         before giving up, as a float, or a :ref:`(connect timeout, read
 34 |         timeout) <timeouts>` tuple.
 35 |     :type timeout: float or tuple
 36 |     :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
 37 |     :type allow_redirects: bool
 38 |     :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
 39 |     :param verify: (optional) Either a boolean, in which case it controls whether we verify
 40 |             the server's TLS certificate, or a string, in which case it must be a path
 41 |             to a CA bundle to use. Defaults to ``True``.
 42 |     :param stream: (optional) if ``False``, the response content will be immediately downloaded.
 43 |     :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
 44 |     :return: :class:`Response <Response>` object
 45 |     :rtype: requests.Response
 46 | 
 47 |     Usage::
 48 | 
 49 |       >>> import requests
 50 |       >>> req = requests.request('GET', 'https://httpbin.org/get')
 51 |       >>> req
 52 |       <Response [200]>
 53 |     """
 54 | 
 55 |     # By using the 'with' statement we are sure the session is closed, thus we
 56 |     # avoid leaving sockets open which can trigger a ResourceWarning in some
 57 |     # cases, and look like a memory leak in others.
 58 |     with sessions.Session() as session:
 59 |         return session.request(method=method, url=url, **kwargs)
 60 | 
 61 | 
 62 | def get(url, params=None, **kwargs):
 63 |     r"""Sends a GET request.
 64 | 
 65 |     :param url: URL for the new :class:`Request` object.
 66 |     :param params: (optional) Dictionary, list of tuples or bytes to send
 67 |         in the query string for the :class:`Request`.
 68 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
 69 |     :return: :class:`Response <Response>` object
 70 |     :rtype: requests.Response
 71 |     """
 72 | 
 73 |     return request("get", url, params=params, **kwargs)
 74 | 
 75 | 
 76 | def options(url, **kwargs):
 77 |     r"""Sends an OPTIONS request.
 78 | 
 79 |     :param url: URL for the new :class:`Request` object.
 80 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
 81 |     :return: :class:`Response <Response>` object
 82 |     :rtype: requests.Response
 83 |     """
 84 | 
 85 |     return request("options", url, **kwargs)
 86 | 
 87 | 
 88 | def head(url, **kwargs):
 89 |     r"""Sends a HEAD request.
 90 | 
 91 |     :param url: URL for the new :class:`Request` object.
 92 |     :param \*\*kwargs: Optional arguments that ``request`` takes. If
 93 |         `allow_redirects` is not provided, it will be set to `False` (as
 94 |         opposed to the default :meth:`request` behavior).
 95 |     :return: :class:`Response <Response>` object
 96 |     :rtype: requests.Response
 97 |     """
 98 | 
 99 |     kwargs.setdefault("allow_redirects", False)
100 |     return request("head", url, **kwargs)
101 | 
102 | 
103 | def post(url, data=None, json=None, **kwargs):
104 |     r"""Sends a POST request.
105 | 
106 |     :param url: URL for the new :class:`Request` object.
107 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
108 |         object to send in the body of the :class:`Request`.
109 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
110 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
111 |     :return: :class:`Response <Response>` object
112 |     :rtype: requests.Response
113 |     """
114 | 
115 |     return request("post", url, data=data, json=json, **kwargs)
116 | 
117 | 
118 | def put(url, data=None, **kwargs):
119 |     r"""Sends a PUT request.
120 | 
121 |     :param url: URL for the new :class:`Request` object.
122 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
123 |         object to send in the body of the :class:`Request`.
124 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
125 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
126 |     :return: :class:`Response <Response>` object
127 |     :rtype: requests.Response
128 |     """
129 | 
130 |     return request("put", url, data=data, **kwargs)
131 | 
132 | 
133 | def patch(url, data=None, **kwargs):
134 |     r"""Sends a PATCH request.
135 | 
136 |     :param url: URL for the new :class:`Request` object.
137 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
138 |         object to send in the body of the :class:`Request`.
139 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
140 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
141 |     :return: :class:`Response <Response>` object
142 |     :rtype: requests.Response
143 |     """
144 | 
145 |     return request("patch", url, data=data, **kwargs)
146 | 
147 | 
148 | def delete(url, **kwargs):
149 |     r"""Sends a DELETE request.
150 | 
151 |     :param url: URL for the new :class:`Request` object.
152 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
153 |     :return: :class:`Response <Response>` object
154 |     :rtype: requests.Response
155 |     """
156 | 
157 |     return request("delete", url, **kwargs)
158 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/requests/api.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | requests.api
  3 | ~~~~~~~~~~~~
  4 | 
  5 | This module implements the Requests API.
  6 | 
  7 | :copyright: (c) 2012 by Kenneth Reitz.
  8 | :license: Apache2, see LICENSE for more details.
  9 | """
 10 | 
 11 | from . import sessions
 12 | 
 13 | 
 14 | def request(method, url, **kwargs):
 15 |     """Constructs and sends a :class:`Request <Request>`.
 16 | 
 17 |     :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
 18 |     :param url: URL for the new :class:`Request` object.
 19 |     :param params: (optional) Dictionary, list of tuples or bytes to send
 20 |         in the query string for the :class:`Request`.
 21 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
 22 |         object to send in the body of the :class:`Request`.
 23 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
 24 |     :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
 25 |     :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
 26 |     :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
 27 |         ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
 28 |         or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string
 29 |         defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
 30 |         to add for the file.
 31 |     :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
 32 |     :param timeout: (optional) How many seconds to wait for the server to send data
 33 |         before giving up, as a float, or a :ref:`(connect timeout, read
 34 |         timeout) <timeouts>` tuple.
 35 |     :type timeout: float or tuple
 36 |     :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
 37 |     :type allow_redirects: bool
 38 |     :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
 39 |     :param verify: (optional) Either a boolean, in which case it controls whether we verify
 40 |             the server's TLS certificate, or a string, in which case it must be a path
 41 |             to a CA bundle to use. Defaults to ``True``.
 42 |     :param stream: (optional) if ``False``, the response content will be immediately downloaded.
 43 |     :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
 44 |     :return: :class:`Response <Response>` object
 45 |     :rtype: requests.Response
 46 | 
 47 |     Usage::
 48 | 
 49 |       >>> import requests
 50 |       >>> req = requests.request('GET', 'https://httpbin.org/get')
 51 |       >>> req
 52 |       <Response [200]>
 53 |     """
 54 | 
 55 |     # By using the 'with' statement we are sure the session is closed, thus we
 56 |     # avoid leaving sockets open which can trigger a ResourceWarning in some
 57 |     # cases, and look like a memory leak in others.
 58 |     with sessions.Session() as session:
 59 |         return session.request(method=method, url=url, **kwargs)
 60 | 
 61 | 
 62 | def get(url, params=None, **kwargs):
 63 |     r"""Sends a GET request.
 64 | 
 65 |     :param url: URL for the new :class:`Request` object.
 66 |     :param params: (optional) Dictionary, list of tuples or bytes to send
 67 |         in the query string for the :class:`Request`.
 68 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
 69 |     :return: :class:`Response <Response>` object
 70 |     :rtype: requests.Response
 71 |     """
 72 | 
 73 |     return request("get", url, params=params, **kwargs)
 74 | 
 75 | 
 76 | def options(url, **kwargs):
 77 |     r"""Sends an OPTIONS request.
 78 | 
 79 |     :param url: URL for the new :class:`Request` object.
 80 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
 81 |     :return: :class:`Response <Response>` object
 82 |     :rtype: requests.Response
 83 |     """
 84 | 
 85 |     return request("options", url, **kwargs)
 86 | 
 87 | 
 88 | def head(url, **kwargs):
 89 |     r"""Sends a HEAD request.
 90 | 
 91 |     :param url: URL for the new :class:`Request` object.
 92 |     :param \*\*kwargs: Optional arguments that ``request`` takes. If
 93 |         `allow_redirects` is not provided, it will be set to `False` (as
 94 |         opposed to the default :meth:`request` behavior).
 95 |     :return: :class:`Response <Response>` object
 96 |     :rtype: requests.Response
 97 |     """
 98 | 
 99 |     kwargs.setdefault("allow_redirects", False)
100 |     return request("head", url, **kwargs)
101 | 
102 | 
103 | def post(url, data=None, json=None, **kwargs):
104 |     r"""Sends a POST request.
105 | 
106 |     :param url: URL for the new :class:`Request` object.
107 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
108 |         object to send in the body of the :class:`Request`.
109 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
110 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
111 |     :return: :class:`Response <Response>` object
112 |     :rtype: requests.Response
113 |     """
114 | 
115 |     return request("post", url, data=data, json=json, **kwargs)
116 | 
117 | 
118 | def put(url, data=None, **kwargs):
119 |     r"""Sends a PUT request.
120 | 
121 |     :param url: URL for the new :class:`Request` object.
122 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
123 |         object to send in the body of the :class:`Request`.
124 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
125 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
126 |     :return: :class:`Response <Response>` object
127 |     :rtype: requests.Response
128 |     """
129 | 
130 |     return request("put", url, data=data, **kwargs)
131 | 
132 | 
133 | def patch(url, data=None, **kwargs):
134 |     r"""Sends a PATCH request.
135 | 
136 |     :param url: URL for the new :class:`Request` object.
137 |     :param data: (optional) Dictionary, list of tuples, bytes, or file-like
138 |         object to send in the body of the :class:`Request`.
139 |     :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
140 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
141 |     :return: :class:`Response <Response>` object
142 |     :rtype: requests.Response
143 |     """
144 | 
145 |     return request("patch", url, data=data, **kwargs)
146 | 
147 | 
148 | def delete(url, **kwargs):
149 |     r"""Sends a DELETE request.
150 | 
151 |     :param url: URL for the new :class:`Request` object.
152 |     :param \*\*kwargs: Optional arguments that ``request`` takes.
153 |     :return: :class:`Response <Response>` object
154 |     :rtype: requests.Response
155 |     """
156 | 
157 |     return request("delete", url, **kwargs)
158 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py:
--------------------------------------------------------------------------------

```python
  1 | """ PEP 610 """
  2 | 
  3 | import json
  4 | import re
  5 | import urllib.parse
  6 | from dataclasses import dataclass
  7 | from typing import Any, ClassVar, Dict, Iterable, Optional, Type, TypeVar, Union
  8 | 
  9 | __all__ = [
 10 |     "DirectUrl",
 11 |     "DirectUrlValidationError",
 12 |     "DirInfo",
 13 |     "ArchiveInfo",
 14 |     "VcsInfo",
 15 | ]
 16 | 
 17 | T = TypeVar("T")
 18 | 
 19 | DIRECT_URL_METADATA_NAME = "direct_url.json"
 20 | ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$")
 21 | 
 22 | 
 23 | class DirectUrlValidationError(Exception):
 24 |     pass
 25 | 
 26 | 
 27 | def _get(
 28 |     d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None
 29 | ) -> Optional[T]:
 30 |     """Get value from dictionary and verify expected type."""
 31 |     if key not in d:
 32 |         return default
 33 |     value = d[key]
 34 |     if not isinstance(value, expected_type):
 35 |         raise DirectUrlValidationError(
 36 |             f"{value!r} has unexpected type for {key} (expected {expected_type})"
 37 |         )
 38 |     return value
 39 | 
 40 | 
 41 | def _get_required(
 42 |     d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None
 43 | ) -> T:
 44 |     value = _get(d, expected_type, key, default)
 45 |     if value is None:
 46 |         raise DirectUrlValidationError(f"{key} must have a value")
 47 |     return value
 48 | 
 49 | 
 50 | def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType":
 51 |     infos = [info for info in infos if info is not None]
 52 |     if not infos:
 53 |         raise DirectUrlValidationError(
 54 |             "missing one of archive_info, dir_info, vcs_info"
 55 |         )
 56 |     if len(infos) > 1:
 57 |         raise DirectUrlValidationError(
 58 |             "more than one of archive_info, dir_info, vcs_info"
 59 |         )
 60 |     assert infos[0] is not None
 61 |     return infos[0]
 62 | 
 63 | 
 64 | def _filter_none(**kwargs: Any) -> Dict[str, Any]:
 65 |     """Make dict excluding None values."""
 66 |     return {k: v for k, v in kwargs.items() if v is not None}
 67 | 
 68 | 
 69 | @dataclass
 70 | class VcsInfo:
 71 |     name: ClassVar = "vcs_info"
 72 | 
 73 |     vcs: str
 74 |     commit_id: str
 75 |     requested_revision: Optional[str] = None
 76 | 
 77 |     @classmethod
 78 |     def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]:
 79 |         if d is None:
 80 |             return None
 81 |         return cls(
 82 |             vcs=_get_required(d, str, "vcs"),
 83 |             commit_id=_get_required(d, str, "commit_id"),
 84 |             requested_revision=_get(d, str, "requested_revision"),
 85 |         )
 86 | 
 87 |     def _to_dict(self) -> Dict[str, Any]:
 88 |         return _filter_none(
 89 |             vcs=self.vcs,
 90 |             requested_revision=self.requested_revision,
 91 |             commit_id=self.commit_id,
 92 |         )
 93 | 
 94 | 
 95 | class ArchiveInfo:
 96 |     name = "archive_info"
 97 | 
 98 |     def __init__(
 99 |         self,
100 |         hash: Optional[str] = None,
101 |         hashes: Optional[Dict[str, str]] = None,
102 |     ) -> None:
103 |         # set hashes before hash, since the hash setter will further populate hashes
104 |         self.hashes = hashes
105 |         self.hash = hash
106 | 
107 |     @property
108 |     def hash(self) -> Optional[str]:
109 |         return self._hash
110 | 
111 |     @hash.setter
112 |     def hash(self, value: Optional[str]) -> None:
113 |         if value is not None:
114 |             # Auto-populate the hashes key to upgrade to the new format automatically.
115 |             # We don't back-populate the legacy hash key from hashes.
116 |             try:
117 |                 hash_name, hash_value = value.split("=", 1)
118 |             except ValueError:
119 |                 raise DirectUrlValidationError(
120 |                     f"invalid archive_info.hash format: {value!r}"
121 |                 )
122 |             if self.hashes is None:
123 |                 self.hashes = {hash_name: hash_value}
124 |             elif hash_name not in self.hashes:
125 |                 self.hashes = self.hashes.copy()
126 |                 self.hashes[hash_name] = hash_value
127 |         self._hash = value
128 | 
129 |     @classmethod
130 |     def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]:
131 |         if d is None:
132 |             return None
133 |         return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes"))
134 | 
135 |     def _to_dict(self) -> Dict[str, Any]:
136 |         return _filter_none(hash=self.hash, hashes=self.hashes)
137 | 
138 | 
139 | @dataclass
140 | class DirInfo:
141 |     name: ClassVar = "dir_info"
142 | 
143 |     editable: bool = False
144 | 
145 |     @classmethod
146 |     def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]:
147 |         if d is None:
148 |             return None
149 |         return cls(editable=_get_required(d, bool, "editable", default=False))
150 | 
151 |     def _to_dict(self) -> Dict[str, Any]:
152 |         return _filter_none(editable=self.editable or None)
153 | 
154 | 
155 | InfoType = Union[ArchiveInfo, DirInfo, VcsInfo]
156 | 
157 | 
158 | @dataclass
159 | class DirectUrl:
160 |     url: str
161 |     info: InfoType
162 |     subdirectory: Optional[str] = None
163 | 
164 |     def _remove_auth_from_netloc(self, netloc: str) -> str:
165 |         if "@" not in netloc:
166 |             return netloc
167 |         user_pass, netloc_no_user_pass = netloc.split("@", 1)
168 |         if (
169 |             isinstance(self.info, VcsInfo)
170 |             and self.info.vcs == "git"
171 |             and user_pass == "git"
172 |         ):
173 |             return netloc
174 |         if ENV_VAR_RE.match(user_pass):
175 |             return netloc
176 |         return netloc_no_user_pass
177 | 
178 |     @property
179 |     def redacted_url(self) -> str:
180 |         """url with user:password part removed unless it is formed with
181 |         environment variables as specified in PEP 610, or it is ``git``
182 |         in the case of a git URL.
183 |         """
184 |         purl = urllib.parse.urlsplit(self.url)
185 |         netloc = self._remove_auth_from_netloc(purl.netloc)
186 |         surl = urllib.parse.urlunsplit(
187 |             (purl.scheme, netloc, purl.path, purl.query, purl.fragment)
188 |         )
189 |         return surl
190 | 
191 |     def validate(self) -> None:
192 |         self.from_dict(self.to_dict())
193 | 
194 |     @classmethod
195 |     def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl":
196 |         return DirectUrl(
197 |             url=_get_required(d, str, "url"),
198 |             subdirectory=_get(d, str, "subdirectory"),
199 |             info=_exactly_one_of(
200 |                 [
201 |                     ArchiveInfo._from_dict(_get(d, dict, "archive_info")),
202 |                     DirInfo._from_dict(_get(d, dict, "dir_info")),
203 |                     VcsInfo._from_dict(_get(d, dict, "vcs_info")),
204 |                 ]
205 |             ),
206 |         )
207 | 
208 |     def to_dict(self) -> Dict[str, Any]:
209 |         res = _filter_none(
210 |             url=self.redacted_url,
211 |             subdirectory=self.subdirectory,
212 |         )
213 |         res[self.info.name] = self.info._to_dict()
214 |         return res
215 | 
216 |     @classmethod
217 |     def from_json(cls, s: str) -> "DirectUrl":
218 |         return cls.from_dict(json.loads(s))
219 | 
220 |     def to_json(self) -> str:
221 |         return json.dumps(self.to_dict(), sort_keys=True)
222 | 
223 |     def is_local_editable(self) -> bool:
224 |         return isinstance(self.info, DirInfo) and self.info.editable
225 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py:
--------------------------------------------------------------------------------

```python
  1 | import sys
  2 | import time
  3 | from typing import TYPE_CHECKING, Callable, Dict, Iterable, List, Union
  4 | 
  5 | if sys.version_info >= (3, 8):
  6 |     from typing import Final
  7 | else:
  8 |     from pip._vendor.typing_extensions import Final  # pragma: no cover
  9 | 
 10 | from .segment import ControlCode, ControlType, Segment
 11 | 
 12 | if TYPE_CHECKING:
 13 |     from .console import Console, ConsoleOptions, RenderResult
 14 | 
 15 | STRIP_CONTROL_CODES: Final = [
 16 |     7,  # Bell
 17 |     8,  # Backspace
 18 |     11,  # Vertical tab
 19 |     12,  # Form feed
 20 |     13,  # Carriage return
 21 | ]
 22 | _CONTROL_STRIP_TRANSLATE: Final = {
 23 |     _codepoint: None for _codepoint in STRIP_CONTROL_CODES
 24 | }
 25 | 
 26 | CONTROL_ESCAPE: Final = {
 27 |     7: "\\a",
 28 |     8: "\\b",
 29 |     11: "\\v",
 30 |     12: "\\f",
 31 |     13: "\\r",
 32 | }
 33 | 
 34 | CONTROL_CODES_FORMAT: Dict[int, Callable[..., str]] = {
 35 |     ControlType.BELL: lambda: "\x07",
 36 |     ControlType.CARRIAGE_RETURN: lambda: "\r",
 37 |     ControlType.HOME: lambda: "\x1b[H",
 38 |     ControlType.CLEAR: lambda: "\x1b[2J",
 39 |     ControlType.ENABLE_ALT_SCREEN: lambda: "\x1b[?1049h",
 40 |     ControlType.DISABLE_ALT_SCREEN: lambda: "\x1b[?1049l",
 41 |     ControlType.SHOW_CURSOR: lambda: "\x1b[?25h",
 42 |     ControlType.HIDE_CURSOR: lambda: "\x1b[?25l",
 43 |     ControlType.CURSOR_UP: lambda param: f"\x1b[{param}A",
 44 |     ControlType.CURSOR_DOWN: lambda param: f"\x1b[{param}B",
 45 |     ControlType.CURSOR_FORWARD: lambda param: f"\x1b[{param}C",
 46 |     ControlType.CURSOR_BACKWARD: lambda param: f"\x1b[{param}D",
 47 |     ControlType.CURSOR_MOVE_TO_COLUMN: lambda param: f"\x1b[{param+1}G",
 48 |     ControlType.ERASE_IN_LINE: lambda param: f"\x1b[{param}K",
 49 |     ControlType.CURSOR_MOVE_TO: lambda x, y: f"\x1b[{y+1};{x+1}H",
 50 |     ControlType.SET_WINDOW_TITLE: lambda title: f"\x1b]0;{title}\x07",
 51 | }
 52 | 
 53 | 
 54 | class Control:
 55 |     """A renderable that inserts a control code (non printable but may move cursor).
 56 | 
 57 |     Args:
 58 |         *codes (str): Positional arguments are either a :class:`~rich.segment.ControlType` enum or a
 59 |             tuple of ControlType and an integer parameter
 60 |     """
 61 | 
 62 |     __slots__ = ["segment"]
 63 | 
 64 |     def __init__(self, *codes: Union[ControlType, ControlCode]) -> None:
 65 |         control_codes: List[ControlCode] = [
 66 |             (code,) if isinstance(code, ControlType) else code for code in codes
 67 |         ]
 68 |         _format_map = CONTROL_CODES_FORMAT
 69 |         rendered_codes = "".join(
 70 |             _format_map[code](*parameters) for code, *parameters in control_codes
 71 |         )
 72 |         self.segment = Segment(rendered_codes, None, control_codes)
 73 | 
 74 |     @classmethod
 75 |     def bell(cls) -> "Control":
 76 |         """Ring the 'bell'."""
 77 |         return cls(ControlType.BELL)
 78 | 
 79 |     @classmethod
 80 |     def home(cls) -> "Control":
 81 |         """Move cursor to 'home' position."""
 82 |         return cls(ControlType.HOME)
 83 | 
 84 |     @classmethod
 85 |     def move(cls, x: int = 0, y: int = 0) -> "Control":
 86 |         """Move cursor relative to current position.
 87 | 
 88 |         Args:
 89 |             x (int): X offset.
 90 |             y (int): Y offset.
 91 | 
 92 |         Returns:
 93 |             ~Control: Control object.
 94 | 
 95 |         """
 96 | 
 97 |         def get_codes() -> Iterable[ControlCode]:
 98 |             control = ControlType
 99 |             if x:
100 |                 yield (
101 |                     control.CURSOR_FORWARD if x > 0 else control.CURSOR_BACKWARD,
102 |                     abs(x),
103 |                 )
104 |             if y:
105 |                 yield (
106 |                     control.CURSOR_DOWN if y > 0 else control.CURSOR_UP,
107 |                     abs(y),
108 |                 )
109 | 
110 |         control = cls(*get_codes())
111 |         return control
112 | 
113 |     @classmethod
114 |     def move_to_column(cls, x: int, y: int = 0) -> "Control":
115 |         """Move to the given column, optionally add offset to row.
116 | 
117 |         Returns:
118 |             x (int): absolute x (column)
119 |             y (int): optional y offset (row)
120 | 
121 |         Returns:
122 |             ~Control: Control object.
123 |         """
124 | 
125 |         return (
126 |             cls(
127 |                 (ControlType.CURSOR_MOVE_TO_COLUMN, x),
128 |                 (
129 |                     ControlType.CURSOR_DOWN if y > 0 else ControlType.CURSOR_UP,
130 |                     abs(y),
131 |                 ),
132 |             )
133 |             if y
134 |             else cls((ControlType.CURSOR_MOVE_TO_COLUMN, x))
135 |         )
136 | 
137 |     @classmethod
138 |     def move_to(cls, x: int, y: int) -> "Control":
139 |         """Move cursor to absolute position.
140 | 
141 |         Args:
142 |             x (int): x offset (column)
143 |             y (int): y offset (row)
144 | 
145 |         Returns:
146 |             ~Control: Control object.
147 |         """
148 |         return cls((ControlType.CURSOR_MOVE_TO, x, y))
149 | 
150 |     @classmethod
151 |     def clear(cls) -> "Control":
152 |         """Clear the screen."""
153 |         return cls(ControlType.CLEAR)
154 | 
155 |     @classmethod
156 |     def show_cursor(cls, show: bool) -> "Control":
157 |         """Show or hide the cursor."""
158 |         return cls(ControlType.SHOW_CURSOR if show else ControlType.HIDE_CURSOR)
159 | 
160 |     @classmethod
161 |     def alt_screen(cls, enable: bool) -> "Control":
162 |         """Enable or disable alt screen."""
163 |         if enable:
164 |             return cls(ControlType.ENABLE_ALT_SCREEN, ControlType.HOME)
165 |         else:
166 |             return cls(ControlType.DISABLE_ALT_SCREEN)
167 | 
168 |     @classmethod
169 |     def title(cls, title: str) -> "Control":
170 |         """Set the terminal window title
171 | 
172 |         Args:
173 |             title (str): The new terminal window title
174 |         """
175 |         return cls((ControlType.SET_WINDOW_TITLE, title))
176 | 
177 |     def __str__(self) -> str:
178 |         return self.segment.text
179 | 
180 |     def __rich_console__(
181 |         self, console: "Console", options: "ConsoleOptions"
182 |     ) -> "RenderResult":
183 |         if self.segment.text:
184 |             yield self.segment
185 | 
186 | 
187 | def strip_control_codes(
188 |     text: str, _translate_table: Dict[int, None] = _CONTROL_STRIP_TRANSLATE
189 | ) -> str:
190 |     """Remove control codes from text.
191 | 
192 |     Args:
193 |         text (str): A string possibly contain control codes.
194 | 
195 |     Returns:
196 |         str: String with control codes removed.
197 |     """
198 |     return text.translate(_translate_table)
199 | 
200 | 
201 | def escape_control_codes(
202 |     text: str,
203 |     _translate_table: Dict[int, str] = CONTROL_ESCAPE,
204 | ) -> str:
205 |     """Replace control codes with their "escaped" equivalent in the given text.
206 |     (e.g. "\b" becomes "\\b")
207 | 
208 |     Args:
209 |         text (str): A string possibly containing control codes.
210 | 
211 |     Returns:
212 |         str: String with control codes replaced with their escaped version.
213 |     """
214 |     return text.translate(_translate_table)
215 | 
216 | 
217 | if __name__ == "__main__":  # pragma: no cover
218 |     from pip._vendor.rich.console import Console
219 | 
220 |     console = Console()
221 |     console.print("Look at the title of your terminal window ^")
222 |     # console.print(Control((ControlType.SET_WINDOW_TITLE, "Hello, world!")))
223 |     for i in range(10):
224 |         console.set_window_title("🚀 Loading" + "." * i)
225 |         time.sleep(0.5)
226 | 
```
Page 22/168FirstPrevNextLast