#
tokens: 48462/50000 6/808 files (page 30/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 30 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/lxml/includes/libxml/xmlunicode.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: Unicode character APIs
  3 |  * Description: API for the Unicode character APIs
  4 |  *
  5 |  * This file is automatically generated from the
  6 |  * UCS description files of the Unicode Character Database
  7 |  * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html
  8 |  * using the genUnicode.py Python script.
  9 |  *
 10 |  * Generation date: Mon Mar 27 11:09:52 2006
 11 |  * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt
 12 |  * Author: Daniel Veillard
 13 |  */
 14 | 
 15 | #ifndef __XML_UNICODE_H__
 16 | #define __XML_UNICODE_H__
 17 | 
 18 | #include <libxml/xmlversion.h>
 19 | 
 20 | #ifdef LIBXML_UNICODE_ENABLED
 21 | 
 22 | #ifdef __cplusplus
 23 | extern "C" {
 24 | #endif
 25 | 
 26 | XMLPUBFUN int xmlUCSIsAegeanNumbers	(int code);
 27 | XMLPUBFUN int xmlUCSIsAlphabeticPresentationForms	(int code);
 28 | XMLPUBFUN int xmlUCSIsArabic	(int code);
 29 | XMLPUBFUN int xmlUCSIsArabicPresentationFormsA	(int code);
 30 | XMLPUBFUN int xmlUCSIsArabicPresentationFormsB	(int code);
 31 | XMLPUBFUN int xmlUCSIsArmenian	(int code);
 32 | XMLPUBFUN int xmlUCSIsArrows	(int code);
 33 | XMLPUBFUN int xmlUCSIsBasicLatin	(int code);
 34 | XMLPUBFUN int xmlUCSIsBengali	(int code);
 35 | XMLPUBFUN int xmlUCSIsBlockElements	(int code);
 36 | XMLPUBFUN int xmlUCSIsBopomofo	(int code);
 37 | XMLPUBFUN int xmlUCSIsBopomofoExtended	(int code);
 38 | XMLPUBFUN int xmlUCSIsBoxDrawing	(int code);
 39 | XMLPUBFUN int xmlUCSIsBraillePatterns	(int code);
 40 | XMLPUBFUN int xmlUCSIsBuhid	(int code);
 41 | XMLPUBFUN int xmlUCSIsByzantineMusicalSymbols	(int code);
 42 | XMLPUBFUN int xmlUCSIsCJKCompatibility	(int code);
 43 | XMLPUBFUN int xmlUCSIsCJKCompatibilityForms	(int code);
 44 | XMLPUBFUN int xmlUCSIsCJKCompatibilityIdeographs	(int code);
 45 | XMLPUBFUN int xmlUCSIsCJKCompatibilityIdeographsSupplement	(int code);
 46 | XMLPUBFUN int xmlUCSIsCJKRadicalsSupplement	(int code);
 47 | XMLPUBFUN int xmlUCSIsCJKSymbolsandPunctuation	(int code);
 48 | XMLPUBFUN int xmlUCSIsCJKUnifiedIdeographs	(int code);
 49 | XMLPUBFUN int xmlUCSIsCJKUnifiedIdeographsExtensionA	(int code);
 50 | XMLPUBFUN int xmlUCSIsCJKUnifiedIdeographsExtensionB	(int code);
 51 | XMLPUBFUN int xmlUCSIsCherokee	(int code);
 52 | XMLPUBFUN int xmlUCSIsCombiningDiacriticalMarks	(int code);
 53 | XMLPUBFUN int xmlUCSIsCombiningDiacriticalMarksforSymbols	(int code);
 54 | XMLPUBFUN int xmlUCSIsCombiningHalfMarks	(int code);
 55 | XMLPUBFUN int xmlUCSIsCombiningMarksforSymbols	(int code);
 56 | XMLPUBFUN int xmlUCSIsControlPictures	(int code);
 57 | XMLPUBFUN int xmlUCSIsCurrencySymbols	(int code);
 58 | XMLPUBFUN int xmlUCSIsCypriotSyllabary	(int code);
 59 | XMLPUBFUN int xmlUCSIsCyrillic	(int code);
 60 | XMLPUBFUN int xmlUCSIsCyrillicSupplement	(int code);
 61 | XMLPUBFUN int xmlUCSIsDeseret	(int code);
 62 | XMLPUBFUN int xmlUCSIsDevanagari	(int code);
 63 | XMLPUBFUN int xmlUCSIsDingbats	(int code);
 64 | XMLPUBFUN int xmlUCSIsEnclosedAlphanumerics	(int code);
 65 | XMLPUBFUN int xmlUCSIsEnclosedCJKLettersandMonths	(int code);
 66 | XMLPUBFUN int xmlUCSIsEthiopic	(int code);
 67 | XMLPUBFUN int xmlUCSIsGeneralPunctuation	(int code);
 68 | XMLPUBFUN int xmlUCSIsGeometricShapes	(int code);
 69 | XMLPUBFUN int xmlUCSIsGeorgian	(int code);
 70 | XMLPUBFUN int xmlUCSIsGothic	(int code);
 71 | XMLPUBFUN int xmlUCSIsGreek	(int code);
 72 | XMLPUBFUN int xmlUCSIsGreekExtended	(int code);
 73 | XMLPUBFUN int xmlUCSIsGreekandCoptic	(int code);
 74 | XMLPUBFUN int xmlUCSIsGujarati	(int code);
 75 | XMLPUBFUN int xmlUCSIsGurmukhi	(int code);
 76 | XMLPUBFUN int xmlUCSIsHalfwidthandFullwidthForms	(int code);
 77 | XMLPUBFUN int xmlUCSIsHangulCompatibilityJamo	(int code);
 78 | XMLPUBFUN int xmlUCSIsHangulJamo	(int code);
 79 | XMLPUBFUN int xmlUCSIsHangulSyllables	(int code);
 80 | XMLPUBFUN int xmlUCSIsHanunoo	(int code);
 81 | XMLPUBFUN int xmlUCSIsHebrew	(int code);
 82 | XMLPUBFUN int xmlUCSIsHighPrivateUseSurrogates	(int code);
 83 | XMLPUBFUN int xmlUCSIsHighSurrogates	(int code);
 84 | XMLPUBFUN int xmlUCSIsHiragana	(int code);
 85 | XMLPUBFUN int xmlUCSIsIPAExtensions	(int code);
 86 | XMLPUBFUN int xmlUCSIsIdeographicDescriptionCharacters	(int code);
 87 | XMLPUBFUN int xmlUCSIsKanbun	(int code);
 88 | XMLPUBFUN int xmlUCSIsKangxiRadicals	(int code);
 89 | XMLPUBFUN int xmlUCSIsKannada	(int code);
 90 | XMLPUBFUN int xmlUCSIsKatakana	(int code);
 91 | XMLPUBFUN int xmlUCSIsKatakanaPhoneticExtensions	(int code);
 92 | XMLPUBFUN int xmlUCSIsKhmer	(int code);
 93 | XMLPUBFUN int xmlUCSIsKhmerSymbols	(int code);
 94 | XMLPUBFUN int xmlUCSIsLao	(int code);
 95 | XMLPUBFUN int xmlUCSIsLatin1Supplement	(int code);
 96 | XMLPUBFUN int xmlUCSIsLatinExtendedA	(int code);
 97 | XMLPUBFUN int xmlUCSIsLatinExtendedB	(int code);
 98 | XMLPUBFUN int xmlUCSIsLatinExtendedAdditional	(int code);
 99 | XMLPUBFUN int xmlUCSIsLetterlikeSymbols	(int code);
100 | XMLPUBFUN int xmlUCSIsLimbu	(int code);
101 | XMLPUBFUN int xmlUCSIsLinearBIdeograms	(int code);
102 | XMLPUBFUN int xmlUCSIsLinearBSyllabary	(int code);
103 | XMLPUBFUN int xmlUCSIsLowSurrogates	(int code);
104 | XMLPUBFUN int xmlUCSIsMalayalam	(int code);
105 | XMLPUBFUN int xmlUCSIsMathematicalAlphanumericSymbols	(int code);
106 | XMLPUBFUN int xmlUCSIsMathematicalOperators	(int code);
107 | XMLPUBFUN int xmlUCSIsMiscellaneousMathematicalSymbolsA	(int code);
108 | XMLPUBFUN int xmlUCSIsMiscellaneousMathematicalSymbolsB	(int code);
109 | XMLPUBFUN int xmlUCSIsMiscellaneousSymbols	(int code);
110 | XMLPUBFUN int xmlUCSIsMiscellaneousSymbolsandArrows	(int code);
111 | XMLPUBFUN int xmlUCSIsMiscellaneousTechnical	(int code);
112 | XMLPUBFUN int xmlUCSIsMongolian	(int code);
113 | XMLPUBFUN int xmlUCSIsMusicalSymbols	(int code);
114 | XMLPUBFUN int xmlUCSIsMyanmar	(int code);
115 | XMLPUBFUN int xmlUCSIsNumberForms	(int code);
116 | XMLPUBFUN int xmlUCSIsOgham	(int code);
117 | XMLPUBFUN int xmlUCSIsOldItalic	(int code);
118 | XMLPUBFUN int xmlUCSIsOpticalCharacterRecognition	(int code);
119 | XMLPUBFUN int xmlUCSIsOriya	(int code);
120 | XMLPUBFUN int xmlUCSIsOsmanya	(int code);
121 | XMLPUBFUN int xmlUCSIsPhoneticExtensions	(int code);
122 | XMLPUBFUN int xmlUCSIsPrivateUse	(int code);
123 | XMLPUBFUN int xmlUCSIsPrivateUseArea	(int code);
124 | XMLPUBFUN int xmlUCSIsRunic	(int code);
125 | XMLPUBFUN int xmlUCSIsShavian	(int code);
126 | XMLPUBFUN int xmlUCSIsSinhala	(int code);
127 | XMLPUBFUN int xmlUCSIsSmallFormVariants	(int code);
128 | XMLPUBFUN int xmlUCSIsSpacingModifierLetters	(int code);
129 | XMLPUBFUN int xmlUCSIsSpecials	(int code);
130 | XMLPUBFUN int xmlUCSIsSuperscriptsandSubscripts	(int code);
131 | XMLPUBFUN int xmlUCSIsSupplementalArrowsA	(int code);
132 | XMLPUBFUN int xmlUCSIsSupplementalArrowsB	(int code);
133 | XMLPUBFUN int xmlUCSIsSupplementalMathematicalOperators	(int code);
134 | XMLPUBFUN int xmlUCSIsSupplementaryPrivateUseAreaA	(int code);
135 | XMLPUBFUN int xmlUCSIsSupplementaryPrivateUseAreaB	(int code);
136 | XMLPUBFUN int xmlUCSIsSyriac	(int code);
137 | XMLPUBFUN int xmlUCSIsTagalog	(int code);
138 | XMLPUBFUN int xmlUCSIsTagbanwa	(int code);
139 | XMLPUBFUN int xmlUCSIsTags	(int code);
140 | XMLPUBFUN int xmlUCSIsTaiLe	(int code);
141 | XMLPUBFUN int xmlUCSIsTaiXuanJingSymbols	(int code);
142 | XMLPUBFUN int xmlUCSIsTamil	(int code);
143 | XMLPUBFUN int xmlUCSIsTelugu	(int code);
144 | XMLPUBFUN int xmlUCSIsThaana	(int code);
145 | XMLPUBFUN int xmlUCSIsThai	(int code);
146 | XMLPUBFUN int xmlUCSIsTibetan	(int code);
147 | XMLPUBFUN int xmlUCSIsUgaritic	(int code);
148 | XMLPUBFUN int xmlUCSIsUnifiedCanadianAboriginalSyllabics	(int code);
149 | XMLPUBFUN int xmlUCSIsVariationSelectors	(int code);
150 | XMLPUBFUN int xmlUCSIsVariationSelectorsSupplement	(int code);
151 | XMLPUBFUN int xmlUCSIsYiRadicals	(int code);
152 | XMLPUBFUN int xmlUCSIsYiSyllables	(int code);
153 | XMLPUBFUN int xmlUCSIsYijingHexagramSymbols	(int code);
154 | 
155 | XMLPUBFUN int xmlUCSIsBlock	(int code, const char *block);
156 | 
157 | XMLPUBFUN int xmlUCSIsCatC	(int code);
158 | XMLPUBFUN int xmlUCSIsCatCc	(int code);
159 | XMLPUBFUN int xmlUCSIsCatCf	(int code);
160 | XMLPUBFUN int xmlUCSIsCatCo	(int code);
161 | XMLPUBFUN int xmlUCSIsCatCs	(int code);
162 | XMLPUBFUN int xmlUCSIsCatL	(int code);
163 | XMLPUBFUN int xmlUCSIsCatLl	(int code);
164 | XMLPUBFUN int xmlUCSIsCatLm	(int code);
165 | XMLPUBFUN int xmlUCSIsCatLo	(int code);
166 | XMLPUBFUN int xmlUCSIsCatLt	(int code);
167 | XMLPUBFUN int xmlUCSIsCatLu	(int code);
168 | XMLPUBFUN int xmlUCSIsCatM	(int code);
169 | XMLPUBFUN int xmlUCSIsCatMc	(int code);
170 | XMLPUBFUN int xmlUCSIsCatMe	(int code);
171 | XMLPUBFUN int xmlUCSIsCatMn	(int code);
172 | XMLPUBFUN int xmlUCSIsCatN	(int code);
173 | XMLPUBFUN int xmlUCSIsCatNd	(int code);
174 | XMLPUBFUN int xmlUCSIsCatNl	(int code);
175 | XMLPUBFUN int xmlUCSIsCatNo	(int code);
176 | XMLPUBFUN int xmlUCSIsCatP	(int code);
177 | XMLPUBFUN int xmlUCSIsCatPc	(int code);
178 | XMLPUBFUN int xmlUCSIsCatPd	(int code);
179 | XMLPUBFUN int xmlUCSIsCatPe	(int code);
180 | XMLPUBFUN int xmlUCSIsCatPf	(int code);
181 | XMLPUBFUN int xmlUCSIsCatPi	(int code);
182 | XMLPUBFUN int xmlUCSIsCatPo	(int code);
183 | XMLPUBFUN int xmlUCSIsCatPs	(int code);
184 | XMLPUBFUN int xmlUCSIsCatS	(int code);
185 | XMLPUBFUN int xmlUCSIsCatSc	(int code);
186 | XMLPUBFUN int xmlUCSIsCatSk	(int code);
187 | XMLPUBFUN int xmlUCSIsCatSm	(int code);
188 | XMLPUBFUN int xmlUCSIsCatSo	(int code);
189 | XMLPUBFUN int xmlUCSIsCatZ	(int code);
190 | XMLPUBFUN int xmlUCSIsCatZl	(int code);
191 | XMLPUBFUN int xmlUCSIsCatZp	(int code);
192 | XMLPUBFUN int xmlUCSIsCatZs	(int code);
193 | 
194 | XMLPUBFUN int xmlUCSIsCat	(int code, const char *cat);
195 | 
196 | #ifdef __cplusplus
197 | }
198 | #endif
199 | 
200 | #endif /* LIBXML_UNICODE_ENABLED */
201 | 
202 | #endif /* __XML_UNICODE_H__ */
203 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/index/sources.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | import mimetypes
  3 | import os
  4 | from collections import defaultdict
  5 | from typing import Callable, Dict, Iterable, List, Optional, Tuple
  6 | 
  7 | from pip._vendor.packaging.utils import (
  8 |     InvalidSdistFilename,
  9 |     InvalidVersion,
 10 |     InvalidWheelFilename,
 11 |     canonicalize_name,
 12 |     parse_sdist_filename,
 13 |     parse_wheel_filename,
 14 | )
 15 | 
 16 | from pip._internal.models.candidate import InstallationCandidate
 17 | from pip._internal.models.link import Link
 18 | from pip._internal.utils.urls import path_to_url, url_to_path
 19 | from pip._internal.vcs import is_url
 20 | 
 21 | logger = logging.getLogger(__name__)
 22 | 
 23 | FoundCandidates = Iterable[InstallationCandidate]
 24 | FoundLinks = Iterable[Link]
 25 | CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]]
 26 | PageValidator = Callable[[Link], bool]
 27 | 
 28 | 
 29 | class LinkSource:
 30 |     @property
 31 |     def link(self) -> Optional[Link]:
 32 |         """Returns the underlying link, if there's one."""
 33 |         raise NotImplementedError()
 34 | 
 35 |     def page_candidates(self) -> FoundCandidates:
 36 |         """Candidates found by parsing an archive listing HTML file."""
 37 |         raise NotImplementedError()
 38 | 
 39 |     def file_links(self) -> FoundLinks:
 40 |         """Links found by specifying archives directly."""
 41 |         raise NotImplementedError()
 42 | 
 43 | 
 44 | def _is_html_file(file_url: str) -> bool:
 45 |     return mimetypes.guess_type(file_url, strict=False)[0] == "text/html"
 46 | 
 47 | 
 48 | class _FlatDirectoryToUrls:
 49 |     """Scans directory and caches results"""
 50 | 
 51 |     def __init__(self, path: str) -> None:
 52 |         self._path = path
 53 |         self._page_candidates: List[str] = []
 54 |         self._project_name_to_urls: Dict[str, List[str]] = defaultdict(list)
 55 |         self._scanned_directory = False
 56 | 
 57 |     def _scan_directory(self) -> None:
 58 |         """Scans directory once and populates both page_candidates
 59 |         and project_name_to_urls at the same time
 60 |         """
 61 |         for entry in os.scandir(self._path):
 62 |             url = path_to_url(entry.path)
 63 |             if _is_html_file(url):
 64 |                 self._page_candidates.append(url)
 65 |                 continue
 66 | 
 67 |             # File must have a valid wheel or sdist name,
 68 |             # otherwise not worth considering as a package
 69 |             try:
 70 |                 project_filename = parse_wheel_filename(entry.name)[0]
 71 |             except (InvalidWheelFilename, InvalidVersion):
 72 |                 try:
 73 |                     project_filename = parse_sdist_filename(entry.name)[0]
 74 |                 except (InvalidSdistFilename, InvalidVersion):
 75 |                     continue
 76 | 
 77 |             self._project_name_to_urls[project_filename].append(url)
 78 |         self._scanned_directory = True
 79 | 
 80 |     @property
 81 |     def page_candidates(self) -> List[str]:
 82 |         if not self._scanned_directory:
 83 |             self._scan_directory()
 84 | 
 85 |         return self._page_candidates
 86 | 
 87 |     @property
 88 |     def project_name_to_urls(self) -> Dict[str, List[str]]:
 89 |         if not self._scanned_directory:
 90 |             self._scan_directory()
 91 | 
 92 |         return self._project_name_to_urls
 93 | 
 94 | 
 95 | class _FlatDirectorySource(LinkSource):
 96 |     """Link source specified by ``--find-links=<path-to-dir>``.
 97 | 
 98 |     This looks the content of the directory, and returns:
 99 | 
100 |     * ``page_candidates``: Links listed on each HTML file in the directory.
101 |     * ``file_candidates``: Archives in the directory.
102 |     """
103 | 
104 |     _paths_to_urls: Dict[str, _FlatDirectoryToUrls] = {}
105 | 
106 |     def __init__(
107 |         self,
108 |         candidates_from_page: CandidatesFromPage,
109 |         path: str,
110 |         project_name: str,
111 |     ) -> None:
112 |         self._candidates_from_page = candidates_from_page
113 |         self._project_name = canonicalize_name(project_name)
114 | 
115 |         # Get existing instance of _FlatDirectoryToUrls if it exists
116 |         if path in self._paths_to_urls:
117 |             self._path_to_urls = self._paths_to_urls[path]
118 |         else:
119 |             self._path_to_urls = _FlatDirectoryToUrls(path=path)
120 |             self._paths_to_urls[path] = self._path_to_urls
121 | 
122 |     @property
123 |     def link(self) -> Optional[Link]:
124 |         return None
125 | 
126 |     def page_candidates(self) -> FoundCandidates:
127 |         for url in self._path_to_urls.page_candidates:
128 |             yield from self._candidates_from_page(Link(url))
129 | 
130 |     def file_links(self) -> FoundLinks:
131 |         for url in self._path_to_urls.project_name_to_urls[self._project_name]:
132 |             yield Link(url)
133 | 
134 | 
135 | class _LocalFileSource(LinkSource):
136 |     """``--find-links=<path-or-url>`` or ``--[extra-]index-url=<path-or-url>``.
137 | 
138 |     If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to
139 |     the option, it is converted to a URL first. This returns:
140 | 
141 |     * ``page_candidates``: Links listed on an HTML file.
142 |     * ``file_candidates``: The non-HTML file.
143 |     """
144 | 
145 |     def __init__(
146 |         self,
147 |         candidates_from_page: CandidatesFromPage,
148 |         link: Link,
149 |     ) -> None:
150 |         self._candidates_from_page = candidates_from_page
151 |         self._link = link
152 | 
153 |     @property
154 |     def link(self) -> Optional[Link]:
155 |         return self._link
156 | 
157 |     def page_candidates(self) -> FoundCandidates:
158 |         if not _is_html_file(self._link.url):
159 |             return
160 |         yield from self._candidates_from_page(self._link)
161 | 
162 |     def file_links(self) -> FoundLinks:
163 |         if _is_html_file(self._link.url):
164 |             return
165 |         yield self._link
166 | 
167 | 
168 | class _RemoteFileSource(LinkSource):
169 |     """``--find-links=<url>`` or ``--[extra-]index-url=<url>``.
170 | 
171 |     This returns:
172 | 
173 |     * ``page_candidates``: Links listed on an HTML file.
174 |     * ``file_candidates``: The non-HTML file.
175 |     """
176 | 
177 |     def __init__(
178 |         self,
179 |         candidates_from_page: CandidatesFromPage,
180 |         page_validator: PageValidator,
181 |         link: Link,
182 |     ) -> None:
183 |         self._candidates_from_page = candidates_from_page
184 |         self._page_validator = page_validator
185 |         self._link = link
186 | 
187 |     @property
188 |     def link(self) -> Optional[Link]:
189 |         return self._link
190 | 
191 |     def page_candidates(self) -> FoundCandidates:
192 |         if not self._page_validator(self._link):
193 |             return
194 |         yield from self._candidates_from_page(self._link)
195 | 
196 |     def file_links(self) -> FoundLinks:
197 |         yield self._link
198 | 
199 | 
200 | class _IndexDirectorySource(LinkSource):
201 |     """``--[extra-]index-url=<path-to-directory>``.
202 | 
203 |     This is treated like a remote URL; ``candidates_from_page`` contains logic
204 |     for this by appending ``index.html`` to the link.
205 |     """
206 | 
207 |     def __init__(
208 |         self,
209 |         candidates_from_page: CandidatesFromPage,
210 |         link: Link,
211 |     ) -> None:
212 |         self._candidates_from_page = candidates_from_page
213 |         self._link = link
214 | 
215 |     @property
216 |     def link(self) -> Optional[Link]:
217 |         return self._link
218 | 
219 |     def page_candidates(self) -> FoundCandidates:
220 |         yield from self._candidates_from_page(self._link)
221 | 
222 |     def file_links(self) -> FoundLinks:
223 |         return ()
224 | 
225 | 
226 | def build_source(
227 |     location: str,
228 |     *,
229 |     candidates_from_page: CandidatesFromPage,
230 |     page_validator: PageValidator,
231 |     expand_dir: bool,
232 |     cache_link_parsing: bool,
233 |     project_name: str,
234 | ) -> Tuple[Optional[str], Optional[LinkSource]]:
235 |     path: Optional[str] = None
236 |     url: Optional[str] = None
237 |     if os.path.exists(location):  # Is a local path.
238 |         url = path_to_url(location)
239 |         path = location
240 |     elif location.startswith("file:"):  # A file: URL.
241 |         url = location
242 |         path = url_to_path(location)
243 |     elif is_url(location):
244 |         url = location
245 | 
246 |     if url is None:
247 |         msg = (
248 |             "Location '%s' is ignored: "
249 |             "it is either a non-existing path or lacks a specific scheme."
250 |         )
251 |         logger.warning(msg, location)
252 |         return (None, None)
253 | 
254 |     if path is None:
255 |         source: LinkSource = _RemoteFileSource(
256 |             candidates_from_page=candidates_from_page,
257 |             page_validator=page_validator,
258 |             link=Link(url, cache_link_parsing=cache_link_parsing),
259 |         )
260 |         return (url, source)
261 | 
262 |     if os.path.isdir(path):
263 |         if expand_dir:
264 |             source = _FlatDirectorySource(
265 |                 candidates_from_page=candidates_from_page,
266 |                 path=path,
267 |                 project_name=project_name,
268 |             )
269 |         else:
270 |             source = _IndexDirectorySource(
271 |                 candidates_from_page=candidates_from_page,
272 |                 link=Link(url, cache_link_parsing=cache_link_parsing),
273 |             )
274 |         return (url, source)
275 |     elif os.path.isfile(path):
276 |         source = _LocalFileSource(
277 |             candidates_from_page=candidates_from_page,
278 |             link=Link(url, cache_link_parsing=cache_link_parsing),
279 |         )
280 |         return (url, source)
281 |     logger.warning(
282 |         "Location '%s' is ignored: it is neither a file nor a directory.",
283 |         location,
284 |     )
285 |     return (url, None)
286 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import os
  4 | import typing
  5 | 
  6 | # use http.client.HTTPException for consistency with non-emscripten
  7 | from http.client import HTTPException as HTTPException  # noqa: F401
  8 | from http.client import ResponseNotReady
  9 | 
 10 | from ..._base_connection import _TYPE_BODY
 11 | from ...connection import HTTPConnection, ProxyConfig, port_by_scheme
 12 | from ...exceptions import TimeoutError
 13 | from ...response import BaseHTTPResponse
 14 | from ...util.connection import _TYPE_SOCKET_OPTIONS
 15 | from ...util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT
 16 | from ...util.url import Url
 17 | from .fetch import _RequestError, _TimeoutError, send_request, send_streaming_request
 18 | from .request import EmscriptenRequest
 19 | from .response import EmscriptenHttpResponseWrapper, EmscriptenResponse
 20 | 
 21 | if typing.TYPE_CHECKING:
 22 |     from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection
 23 | 
 24 | 
 25 | class EmscriptenHTTPConnection:
 26 |     default_port: typing.ClassVar[int] = port_by_scheme["http"]
 27 |     default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS]
 28 | 
 29 |     timeout: None | (float)
 30 | 
 31 |     host: str
 32 |     port: int
 33 |     blocksize: int
 34 |     source_address: tuple[str, int] | None
 35 |     socket_options: _TYPE_SOCKET_OPTIONS | None
 36 | 
 37 |     proxy: Url | None
 38 |     proxy_config: ProxyConfig | None
 39 | 
 40 |     is_verified: bool = False
 41 |     proxy_is_verified: bool | None = None
 42 | 
 43 |     _response: EmscriptenResponse | None
 44 | 
 45 |     def __init__(
 46 |         self,
 47 |         host: str,
 48 |         port: int = 0,
 49 |         *,
 50 |         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
 51 |         source_address: tuple[str, int] | None = None,
 52 |         blocksize: int = 8192,
 53 |         socket_options: _TYPE_SOCKET_OPTIONS | None = None,
 54 |         proxy: Url | None = None,
 55 |         proxy_config: ProxyConfig | None = None,
 56 |     ) -> None:
 57 |         self.host = host
 58 |         self.port = port
 59 |         self.timeout = timeout if isinstance(timeout, float) else 0.0
 60 |         self.scheme = "http"
 61 |         self._closed = True
 62 |         self._response = None
 63 |         # ignore these things because we don't
 64 |         # have control over that stuff
 65 |         self.proxy = None
 66 |         self.proxy_config = None
 67 |         self.blocksize = blocksize
 68 |         self.source_address = None
 69 |         self.socket_options = None
 70 |         self.is_verified = False
 71 | 
 72 |     def set_tunnel(
 73 |         self,
 74 |         host: str,
 75 |         port: int | None = 0,
 76 |         headers: typing.Mapping[str, str] | None = None,
 77 |         scheme: str = "http",
 78 |     ) -> None:
 79 |         pass
 80 | 
 81 |     def connect(self) -> None:
 82 |         pass
 83 | 
 84 |     def request(
 85 |         self,
 86 |         method: str,
 87 |         url: str,
 88 |         body: _TYPE_BODY | None = None,
 89 |         headers: typing.Mapping[str, str] | None = None,
 90 |         # We know *at least* botocore is depending on the order of the
 91 |         # first 3 parameters so to be safe we only mark the later ones
 92 |         # as keyword-only to ensure we have space to extend.
 93 |         *,
 94 |         chunked: bool = False,
 95 |         preload_content: bool = True,
 96 |         decode_content: bool = True,
 97 |         enforce_content_length: bool = True,
 98 |     ) -> None:
 99 |         self._closed = False
100 |         if url.startswith("/"):
101 |             # no scheme / host / port included, make a full url
102 |             url = f"{self.scheme}://{self.host}:{self.port}" + url
103 |         request = EmscriptenRequest(
104 |             url=url,
105 |             method=method,
106 |             timeout=self.timeout if self.timeout else 0,
107 |             decode_content=decode_content,
108 |         )
109 |         request.set_body(body)
110 |         if headers:
111 |             for k, v in headers.items():
112 |                 request.set_header(k, v)
113 |         self._response = None
114 |         try:
115 |             if not preload_content:
116 |                 self._response = send_streaming_request(request)
117 |             if self._response is None:
118 |                 self._response = send_request(request)
119 |         except _TimeoutError as e:
120 |             raise TimeoutError(e.message) from e
121 |         except _RequestError as e:
122 |             raise HTTPException(e.message) from e
123 | 
124 |     def getresponse(self) -> BaseHTTPResponse:
125 |         if self._response is not None:
126 |             return EmscriptenHttpResponseWrapper(
127 |                 internal_response=self._response,
128 |                 url=self._response.request.url,
129 |                 connection=self,
130 |             )
131 |         else:
132 |             raise ResponseNotReady()
133 | 
134 |     def close(self) -> None:
135 |         self._closed = True
136 |         self._response = None
137 | 
138 |     @property
139 |     def is_closed(self) -> bool:
140 |         """Whether the connection either is brand new or has been previously closed.
141 |         If this property is True then both ``is_connected`` and ``has_connected_to_proxy``
142 |         properties must be False.
143 |         """
144 |         return self._closed
145 | 
146 |     @property
147 |     def is_connected(self) -> bool:
148 |         """Whether the connection is actively connected to any origin (proxy or target)"""
149 |         return True
150 | 
151 |     @property
152 |     def has_connected_to_proxy(self) -> bool:
153 |         """Whether the connection has successfully connected to its proxy.
154 |         This returns False if no proxy is in use. Used to determine whether
155 |         errors are coming from the proxy layer or from tunnelling to the target origin.
156 |         """
157 |         return False
158 | 
159 | 
160 | class EmscriptenHTTPSConnection(EmscriptenHTTPConnection):
161 |     default_port = port_by_scheme["https"]
162 |     # all this is basically ignored, as browser handles https
163 |     cert_reqs: int | str | None = None
164 |     ca_certs: str | None = None
165 |     ca_cert_dir: str | None = None
166 |     ca_cert_data: None | str | bytes = None
167 |     cert_file: str | None
168 |     key_file: str | None
169 |     key_password: str | None
170 |     ssl_context: typing.Any | None
171 |     ssl_version: int | str | None = None
172 |     ssl_minimum_version: int | None = None
173 |     ssl_maximum_version: int | None = None
174 |     assert_hostname: None | str | typing.Literal[False]
175 |     assert_fingerprint: str | None = None
176 | 
177 |     def __init__(
178 |         self,
179 |         host: str,
180 |         port: int = 0,
181 |         *,
182 |         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
183 |         source_address: tuple[str, int] | None = None,
184 |         blocksize: int = 16384,
185 |         socket_options: None
186 |         | _TYPE_SOCKET_OPTIONS = HTTPConnection.default_socket_options,
187 |         proxy: Url | None = None,
188 |         proxy_config: ProxyConfig | None = None,
189 |         cert_reqs: int | str | None = None,
190 |         assert_hostname: None | str | typing.Literal[False] = None,
191 |         assert_fingerprint: str | None = None,
192 |         server_hostname: str | None = None,
193 |         ssl_context: typing.Any | None = None,
194 |         ca_certs: str | None = None,
195 |         ca_cert_dir: str | None = None,
196 |         ca_cert_data: None | str | bytes = None,
197 |         ssl_minimum_version: int | None = None,
198 |         ssl_maximum_version: int | None = None,
199 |         ssl_version: int | str | None = None,  # Deprecated
200 |         cert_file: str | None = None,
201 |         key_file: str | None = None,
202 |         key_password: str | None = None,
203 |     ) -> None:
204 |         super().__init__(
205 |             host,
206 |             port=port,
207 |             timeout=timeout,
208 |             source_address=source_address,
209 |             blocksize=blocksize,
210 |             socket_options=socket_options,
211 |             proxy=proxy,
212 |             proxy_config=proxy_config,
213 |         )
214 |         self.scheme = "https"
215 | 
216 |         self.key_file = key_file
217 |         self.cert_file = cert_file
218 |         self.key_password = key_password
219 |         self.ssl_context = ssl_context
220 |         self.server_hostname = server_hostname
221 |         self.assert_hostname = assert_hostname
222 |         self.assert_fingerprint = assert_fingerprint
223 |         self.ssl_version = ssl_version
224 |         self.ssl_minimum_version = ssl_minimum_version
225 |         self.ssl_maximum_version = ssl_maximum_version
226 |         self.ca_certs = ca_certs and os.path.expanduser(ca_certs)
227 |         self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir)
228 |         self.ca_cert_data = ca_cert_data
229 | 
230 |         self.cert_reqs = None
231 | 
232 |         # The browser will automatically verify all requests.
233 |         # We have no control over that setting.
234 |         self.is_verified = True
235 | 
236 |     def set_cert(
237 |         self,
238 |         key_file: str | None = None,
239 |         cert_file: str | None = None,
240 |         cert_reqs: int | str | None = None,
241 |         key_password: str | None = None,
242 |         ca_certs: str | None = None,
243 |         assert_hostname: None | str | typing.Literal[False] = None,
244 |         assert_fingerprint: str | None = None,
245 |         ca_cert_dir: str | None = None,
246 |         ca_cert_data: None | str | bytes = None,
247 |     ) -> None:
248 |         pass
249 | 
250 | 
251 | # verify that this class implements BaseHTTP(s) connection correctly
252 | if typing.TYPE_CHECKING:
253 |     _supports_http_protocol: BaseHTTPConnection = EmscriptenHTTPConnection("", 0)
254 |     _supports_https_protocol: BaseHTTPSConnection = EmscriptenHTTPSConnection("", 0)
255 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import io
  4 | import socket
  5 | import ssl
  6 | import typing
  7 | 
  8 | from ..exceptions import ProxySchemeUnsupported
  9 | 
 10 | if typing.TYPE_CHECKING:
 11 |     from typing_extensions import Self
 12 | 
 13 |     from .ssl_ import _TYPE_PEER_CERT_RET, _TYPE_PEER_CERT_RET_DICT
 14 | 
 15 | 
 16 | _WriteBuffer = typing.Union[bytearray, memoryview]
 17 | _ReturnValue = typing.TypeVar("_ReturnValue")
 18 | 
 19 | SSL_BLOCKSIZE = 16384
 20 | 
 21 | 
 22 | class SSLTransport:
 23 |     """
 24 |     The SSLTransport wraps an existing socket and establishes an SSL connection.
 25 | 
 26 |     Contrary to Python's implementation of SSLSocket, it allows you to chain
 27 |     multiple TLS connections together. It's particularly useful if you need to
 28 |     implement TLS within TLS.
 29 | 
 30 |     The class supports most of the socket API operations.
 31 |     """
 32 | 
 33 |     @staticmethod
 34 |     def _validate_ssl_context_for_tls_in_tls(ssl_context: ssl.SSLContext) -> None:
 35 |         """
 36 |         Raises a ProxySchemeUnsupported if the provided ssl_context can't be used
 37 |         for TLS in TLS.
 38 | 
 39 |         The only requirement is that the ssl_context provides the 'wrap_bio'
 40 |         methods.
 41 |         """
 42 | 
 43 |         if not hasattr(ssl_context, "wrap_bio"):
 44 |             raise ProxySchemeUnsupported(
 45 |                 "TLS in TLS requires SSLContext.wrap_bio() which isn't "
 46 |                 "available on non-native SSLContext"
 47 |             )
 48 | 
 49 |     def __init__(
 50 |         self,
 51 |         socket: socket.socket,
 52 |         ssl_context: ssl.SSLContext,
 53 |         server_hostname: str | None = None,
 54 |         suppress_ragged_eofs: bool = True,
 55 |     ) -> None:
 56 |         """
 57 |         Create an SSLTransport around socket using the provided ssl_context.
 58 |         """
 59 |         self.incoming = ssl.MemoryBIO()
 60 |         self.outgoing = ssl.MemoryBIO()
 61 | 
 62 |         self.suppress_ragged_eofs = suppress_ragged_eofs
 63 |         self.socket = socket
 64 | 
 65 |         self.sslobj = ssl_context.wrap_bio(
 66 |             self.incoming, self.outgoing, server_hostname=server_hostname
 67 |         )
 68 | 
 69 |         # Perform initial handshake.
 70 |         self._ssl_io_loop(self.sslobj.do_handshake)
 71 | 
 72 |     def __enter__(self) -> Self:
 73 |         return self
 74 | 
 75 |     def __exit__(self, *_: typing.Any) -> None:
 76 |         self.close()
 77 | 
 78 |     def fileno(self) -> int:
 79 |         return self.socket.fileno()
 80 | 
 81 |     def read(self, len: int = 1024, buffer: typing.Any | None = None) -> int | bytes:
 82 |         return self._wrap_ssl_read(len, buffer)
 83 | 
 84 |     def recv(self, buflen: int = 1024, flags: int = 0) -> int | bytes:
 85 |         if flags != 0:
 86 |             raise ValueError("non-zero flags not allowed in calls to recv")
 87 |         return self._wrap_ssl_read(buflen)
 88 | 
 89 |     def recv_into(
 90 |         self,
 91 |         buffer: _WriteBuffer,
 92 |         nbytes: int | None = None,
 93 |         flags: int = 0,
 94 |     ) -> None | int | bytes:
 95 |         if flags != 0:
 96 |             raise ValueError("non-zero flags not allowed in calls to recv_into")
 97 |         if nbytes is None:
 98 |             nbytes = len(buffer)
 99 |         return self.read(nbytes, buffer)
100 | 
101 |     def sendall(self, data: bytes, flags: int = 0) -> None:
102 |         if flags != 0:
103 |             raise ValueError("non-zero flags not allowed in calls to sendall")
104 |         count = 0
105 |         with memoryview(data) as view, view.cast("B") as byte_view:
106 |             amount = len(byte_view)
107 |             while count < amount:
108 |                 v = self.send(byte_view[count:])
109 |                 count += v
110 | 
111 |     def send(self, data: bytes, flags: int = 0) -> int:
112 |         if flags != 0:
113 |             raise ValueError("non-zero flags not allowed in calls to send")
114 |         return self._ssl_io_loop(self.sslobj.write, data)
115 | 
116 |     def makefile(
117 |         self,
118 |         mode: str,
119 |         buffering: int | None = None,
120 |         *,
121 |         encoding: str | None = None,
122 |         errors: str | None = None,
123 |         newline: str | None = None,
124 |     ) -> typing.BinaryIO | typing.TextIO | socket.SocketIO:
125 |         """
126 |         Python's httpclient uses makefile and buffered io when reading HTTP
127 |         messages and we need to support it.
128 | 
129 |         This is unfortunately a copy and paste of socket.py makefile with small
130 |         changes to point to the socket directly.
131 |         """
132 |         if not set(mode) <= {"r", "w", "b"}:
133 |             raise ValueError(f"invalid mode {mode!r} (only r, w, b allowed)")
134 | 
135 |         writing = "w" in mode
136 |         reading = "r" in mode or not writing
137 |         assert reading or writing
138 |         binary = "b" in mode
139 |         rawmode = ""
140 |         if reading:
141 |             rawmode += "r"
142 |         if writing:
143 |             rawmode += "w"
144 |         raw = socket.SocketIO(self, rawmode)  # type: ignore[arg-type]
145 |         self.socket._io_refs += 1  # type: ignore[attr-defined]
146 |         if buffering is None:
147 |             buffering = -1
148 |         if buffering < 0:
149 |             buffering = io.DEFAULT_BUFFER_SIZE
150 |         if buffering == 0:
151 |             if not binary:
152 |                 raise ValueError("unbuffered streams must be binary")
153 |             return raw
154 |         buffer: typing.BinaryIO
155 |         if reading and writing:
156 |             buffer = io.BufferedRWPair(raw, raw, buffering)  # type: ignore[assignment]
157 |         elif reading:
158 |             buffer = io.BufferedReader(raw, buffering)
159 |         else:
160 |             assert writing
161 |             buffer = io.BufferedWriter(raw, buffering)
162 |         if binary:
163 |             return buffer
164 |         text = io.TextIOWrapper(buffer, encoding, errors, newline)
165 |         text.mode = mode  # type: ignore[misc]
166 |         return text
167 | 
168 |     def unwrap(self) -> None:
169 |         self._ssl_io_loop(self.sslobj.unwrap)
170 | 
171 |     def close(self) -> None:
172 |         self.socket.close()
173 | 
174 |     @typing.overload
175 |     def getpeercert(
176 |         self, binary_form: typing.Literal[False] = ...
177 |     ) -> _TYPE_PEER_CERT_RET_DICT | None:
178 |         ...
179 | 
180 |     @typing.overload
181 |     def getpeercert(self, binary_form: typing.Literal[True]) -> bytes | None:
182 |         ...
183 | 
184 |     def getpeercert(self, binary_form: bool = False) -> _TYPE_PEER_CERT_RET:
185 |         return self.sslobj.getpeercert(binary_form)  # type: ignore[return-value]
186 | 
187 |     def version(self) -> str | None:
188 |         return self.sslobj.version()
189 | 
190 |     def cipher(self) -> tuple[str, str, int] | None:
191 |         return self.sslobj.cipher()
192 | 
193 |     def selected_alpn_protocol(self) -> str | None:
194 |         return self.sslobj.selected_alpn_protocol()
195 | 
196 |     def shared_ciphers(self) -> list[tuple[str, str, int]] | None:
197 |         return self.sslobj.shared_ciphers()
198 | 
199 |     def compression(self) -> str | None:
200 |         return self.sslobj.compression()
201 | 
202 |     def settimeout(self, value: float | None) -> None:
203 |         self.socket.settimeout(value)
204 | 
205 |     def gettimeout(self) -> float | None:
206 |         return self.socket.gettimeout()
207 | 
208 |     def _decref_socketios(self) -> None:
209 |         self.socket._decref_socketios()  # type: ignore[attr-defined]
210 | 
211 |     def _wrap_ssl_read(self, len: int, buffer: bytearray | None = None) -> int | bytes:
212 |         try:
213 |             return self._ssl_io_loop(self.sslobj.read, len, buffer)
214 |         except ssl.SSLError as e:
215 |             if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs:
216 |                 return 0  # eof, return 0.
217 |             else:
218 |                 raise
219 | 
220 |     # func is sslobj.do_handshake or sslobj.unwrap
221 |     @typing.overload
222 |     def _ssl_io_loop(self, func: typing.Callable[[], None]) -> None:
223 |         ...
224 | 
225 |     # func is sslobj.write, arg1 is data
226 |     @typing.overload
227 |     def _ssl_io_loop(self, func: typing.Callable[[bytes], int], arg1: bytes) -> int:
228 |         ...
229 | 
230 |     # func is sslobj.read, arg1 is len, arg2 is buffer
231 |     @typing.overload
232 |     def _ssl_io_loop(
233 |         self,
234 |         func: typing.Callable[[int, bytearray | None], bytes],
235 |         arg1: int,
236 |         arg2: bytearray | None,
237 |     ) -> bytes:
238 |         ...
239 | 
240 |     def _ssl_io_loop(
241 |         self,
242 |         func: typing.Callable[..., _ReturnValue],
243 |         arg1: None | bytes | int = None,
244 |         arg2: bytearray | None = None,
245 |     ) -> _ReturnValue:
246 |         """Performs an I/O loop between incoming/outgoing and the socket."""
247 |         should_loop = True
248 |         ret = None
249 | 
250 |         while should_loop:
251 |             errno = None
252 |             try:
253 |                 if arg1 is None and arg2 is None:
254 |                     ret = func()
255 |                 elif arg2 is None:
256 |                     ret = func(arg1)
257 |                 else:
258 |                     ret = func(arg1, arg2)
259 |             except ssl.SSLError as e:
260 |                 if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE):
261 |                     # WANT_READ, and WANT_WRITE are expected, others are not.
262 |                     raise e
263 |                 errno = e.errno
264 | 
265 |             buf = self.outgoing.read()
266 |             self.socket.sendall(buf)
267 | 
268 |             if errno is None:
269 |                 should_loop = False
270 |             elif errno == ssl.SSL_ERROR_WANT_READ:
271 |                 buf = self.socket.recv(SSL_BLOCKSIZE)
272 |                 if buf:
273 |                     self.incoming.write(buf)
274 |                 else:
275 |                     self.incoming.write_eof()
276 |         return typing.cast(_ReturnValue, ret)
277 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | import os
  3 | import shlex
  4 | import subprocess
  5 | from typing import Any, Callable, Iterable, List, Literal, Mapping, Optional, Union
  6 | 
  7 | from pip._vendor.rich.markup import escape
  8 | 
  9 | from pip._internal.cli.spinners import SpinnerInterface, open_spinner
 10 | from pip._internal.exceptions import InstallationSubprocessError
 11 | from pip._internal.utils.logging import VERBOSE, subprocess_logger
 12 | from pip._internal.utils.misc import HiddenText
 13 | 
 14 | CommandArgs = List[Union[str, HiddenText]]
 15 | 
 16 | 
 17 | def make_command(*args: Union[str, HiddenText, CommandArgs]) -> CommandArgs:
 18 |     """
 19 |     Create a CommandArgs object.
 20 |     """
 21 |     command_args: CommandArgs = []
 22 |     for arg in args:
 23 |         # Check for list instead of CommandArgs since CommandArgs is
 24 |         # only known during type-checking.
 25 |         if isinstance(arg, list):
 26 |             command_args.extend(arg)
 27 |         else:
 28 |             # Otherwise, arg is str or HiddenText.
 29 |             command_args.append(arg)
 30 | 
 31 |     return command_args
 32 | 
 33 | 
 34 | def format_command_args(args: Union[List[str], CommandArgs]) -> str:
 35 |     """
 36 |     Format command arguments for display.
 37 |     """
 38 |     # For HiddenText arguments, display the redacted form by calling str().
 39 |     # Also, we don't apply str() to arguments that aren't HiddenText since
 40 |     # this can trigger a UnicodeDecodeError in Python 2 if the argument
 41 |     # has type unicode and includes a non-ascii character.  (The type
 42 |     # checker doesn't ensure the annotations are correct in all cases.)
 43 |     return " ".join(
 44 |         shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg)
 45 |         for arg in args
 46 |     )
 47 | 
 48 | 
 49 | def reveal_command_args(args: Union[List[str], CommandArgs]) -> List[str]:
 50 |     """
 51 |     Return the arguments in their raw, unredacted form.
 52 |     """
 53 |     return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args]
 54 | 
 55 | 
 56 | def call_subprocess(
 57 |     cmd: Union[List[str], CommandArgs],
 58 |     show_stdout: bool = False,
 59 |     cwd: Optional[str] = None,
 60 |     on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise",
 61 |     extra_ok_returncodes: Optional[Iterable[int]] = None,
 62 |     extra_environ: Optional[Mapping[str, Any]] = None,
 63 |     unset_environ: Optional[Iterable[str]] = None,
 64 |     spinner: Optional[SpinnerInterface] = None,
 65 |     log_failed_cmd: Optional[bool] = True,
 66 |     stdout_only: Optional[bool] = False,
 67 |     *,
 68 |     command_desc: str,
 69 | ) -> str:
 70 |     """
 71 |     Args:
 72 |       show_stdout: if true, use INFO to log the subprocess's stderr and
 73 |         stdout streams.  Otherwise, use DEBUG.  Defaults to False.
 74 |       extra_ok_returncodes: an iterable of integer return codes that are
 75 |         acceptable, in addition to 0. Defaults to None, which means [].
 76 |       unset_environ: an iterable of environment variable names to unset
 77 |         prior to calling subprocess.Popen().
 78 |       log_failed_cmd: if false, failed commands are not logged, only raised.
 79 |       stdout_only: if true, return only stdout, else return both. When true,
 80 |         logging of both stdout and stderr occurs when the subprocess has
 81 |         terminated, else logging occurs as subprocess output is produced.
 82 |     """
 83 |     if extra_ok_returncodes is None:
 84 |         extra_ok_returncodes = []
 85 |     if unset_environ is None:
 86 |         unset_environ = []
 87 |     # Most places in pip use show_stdout=False. What this means is--
 88 |     #
 89 |     # - We connect the child's output (combined stderr and stdout) to a
 90 |     #   single pipe, which we read.
 91 |     # - We log this output to stderr at DEBUG level as it is received.
 92 |     # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't
 93 |     #   requested), then we show a spinner so the user can still see the
 94 |     #   subprocess is in progress.
 95 |     # - If the subprocess exits with an error, we log the output to stderr
 96 |     #   at ERROR level if it hasn't already been displayed to the console
 97 |     #   (e.g. if --verbose logging wasn't enabled).  This way we don't log
 98 |     #   the output to the console twice.
 99 |     #
100 |     # If show_stdout=True, then the above is still done, but with DEBUG
101 |     # replaced by INFO.
102 |     if show_stdout:
103 |         # Then log the subprocess output at INFO level.
104 |         log_subprocess: Callable[..., None] = subprocess_logger.info
105 |         used_level = logging.INFO
106 |     else:
107 |         # Then log the subprocess output using VERBOSE.  This also ensures
108 |         # it will be logged to the log file (aka user_log), if enabled.
109 |         log_subprocess = subprocess_logger.verbose
110 |         used_level = VERBOSE
111 | 
112 |     # Whether the subprocess will be visible in the console.
113 |     showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level
114 | 
115 |     # Only use the spinner if we're not showing the subprocess output
116 |     # and we have a spinner.
117 |     use_spinner = not showing_subprocess and spinner is not None
118 | 
119 |     log_subprocess("Running command %s", command_desc)
120 |     env = os.environ.copy()
121 |     if extra_environ:
122 |         env.update(extra_environ)
123 |     for name in unset_environ:
124 |         env.pop(name, None)
125 |     try:
126 |         proc = subprocess.Popen(
127 |             # Convert HiddenText objects to the underlying str.
128 |             reveal_command_args(cmd),
129 |             stdin=subprocess.PIPE,
130 |             stdout=subprocess.PIPE,
131 |             stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE,
132 |             cwd=cwd,
133 |             env=env,
134 |             errors="backslashreplace",
135 |         )
136 |     except Exception as exc:
137 |         if log_failed_cmd:
138 |             subprocess_logger.critical(
139 |                 "Error %s while executing command %s",
140 |                 exc,
141 |                 command_desc,
142 |             )
143 |         raise
144 |     all_output = []
145 |     if not stdout_only:
146 |         assert proc.stdout
147 |         assert proc.stdin
148 |         proc.stdin.close()
149 |         # In this mode, stdout and stderr are in the same pipe.
150 |         while True:
151 |             line: str = proc.stdout.readline()
152 |             if not line:
153 |                 break
154 |             line = line.rstrip()
155 |             all_output.append(line + "\n")
156 | 
157 |             # Show the line immediately.
158 |             log_subprocess(line)
159 |             # Update the spinner.
160 |             if use_spinner:
161 |                 assert spinner
162 |                 spinner.spin()
163 |         try:
164 |             proc.wait()
165 |         finally:
166 |             if proc.stdout:
167 |                 proc.stdout.close()
168 |         output = "".join(all_output)
169 |     else:
170 |         # In this mode, stdout and stderr are in different pipes.
171 |         # We must use communicate() which is the only safe way to read both.
172 |         out, err = proc.communicate()
173 |         # log line by line to preserve pip log indenting
174 |         for out_line in out.splitlines():
175 |             log_subprocess(out_line)
176 |         all_output.append(out)
177 |         for err_line in err.splitlines():
178 |             log_subprocess(err_line)
179 |         all_output.append(err)
180 |         output = out
181 | 
182 |     proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes
183 |     if use_spinner:
184 |         assert spinner
185 |         if proc_had_error:
186 |             spinner.finish("error")
187 |         else:
188 |             spinner.finish("done")
189 |     if proc_had_error:
190 |         if on_returncode == "raise":
191 |             error = InstallationSubprocessError(
192 |                 command_description=command_desc,
193 |                 exit_code=proc.returncode,
194 |                 output_lines=all_output if not showing_subprocess else None,
195 |             )
196 |             if log_failed_cmd:
197 |                 subprocess_logger.error("%s", error, extra={"rich": True})
198 |                 subprocess_logger.verbose(
199 |                     "[bold magenta]full command[/]: [blue]%s[/]",
200 |                     escape(format_command_args(cmd)),
201 |                     extra={"markup": True},
202 |                 )
203 |                 subprocess_logger.verbose(
204 |                     "[bold magenta]cwd[/]: %s",
205 |                     escape(cwd or "[inherit]"),
206 |                     extra={"markup": True},
207 |                 )
208 | 
209 |             raise error
210 |         elif on_returncode == "warn":
211 |             subprocess_logger.warning(
212 |                 'Command "%s" had error code %s in %s',
213 |                 command_desc,
214 |                 proc.returncode,
215 |                 cwd,
216 |             )
217 |         elif on_returncode == "ignore":
218 |             pass
219 |         else:
220 |             raise ValueError(f"Invalid value: on_returncode={on_returncode!r}")
221 |     return output
222 | 
223 | 
224 | def runner_with_spinner_message(message: str) -> Callable[..., None]:
225 |     """Provide a subprocess_runner that shows a spinner message.
226 | 
227 |     Intended for use with for BuildBackendHookCaller. Thus, the runner has
228 |     an API that matches what's expected by BuildBackendHookCaller.subprocess_runner.
229 |     """
230 | 
231 |     def runner(
232 |         cmd: List[str],
233 |         cwd: Optional[str] = None,
234 |         extra_environ: Optional[Mapping[str, Any]] = None,
235 |     ) -> None:
236 |         with open_spinner(message) as spinner:
237 |             call_subprocess(
238 |                 cmd,
239 |                 command_desc=message,
240 |                 cwd=cwd,
241 |                 extra_environ=extra_environ,
242 |                 spinner=spinner,
243 |             )
244 | 
245 |     return runner
246 | 
```

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

```python
  1 | """Base API."""
  2 | 
  3 | from __future__ import annotations
  4 | 
  5 | import os
  6 | from abc import ABC, abstractmethod
  7 | from pathlib import Path
  8 | from typing import TYPE_CHECKING
  9 | 
 10 | if TYPE_CHECKING:
 11 |     from typing import Iterator, Literal
 12 | 
 13 | 
 14 | class PlatformDirsABC(ABC):  # noqa: PLR0904
 15 |     """Abstract base class for platform directories."""
 16 | 
 17 |     def __init__(  # noqa: PLR0913, PLR0917
 18 |         self,
 19 |         appname: str | None = None,
 20 |         appauthor: str | None | Literal[False] = None,
 21 |         version: str | None = None,
 22 |         roaming: bool = False,  # noqa: FBT001, FBT002
 23 |         multipath: bool = False,  # noqa: FBT001, FBT002
 24 |         opinion: bool = True,  # noqa: FBT001, FBT002
 25 |         ensure_exists: bool = False,  # noqa: FBT001, FBT002
 26 |     ) -> None:
 27 |         """
 28 |         Create a new platform directory.
 29 | 
 30 |         :param appname: See `appname`.
 31 |         :param appauthor: See `appauthor`.
 32 |         :param version: See `version`.
 33 |         :param roaming: See `roaming`.
 34 |         :param multipath: See `multipath`.
 35 |         :param opinion: See `opinion`.
 36 |         :param ensure_exists: See `ensure_exists`.
 37 | 
 38 |         """
 39 |         self.appname = appname  #: The name of application.
 40 |         self.appauthor = appauthor
 41 |         """
 42 |         The name of the app author or distributing body for this application.
 43 | 
 44 |         Typically, it is the owning company name. Defaults to `appname`. You may pass ``False`` to disable it.
 45 | 
 46 |         """
 47 |         self.version = version
 48 |         """
 49 |         An optional version path element to append to the path.
 50 | 
 51 |         You might want to use this if you want multiple versions of your app to be able to run independently. If used,
 52 |         this would typically be ``<major>.<minor>``.
 53 | 
 54 |         """
 55 |         self.roaming = roaming
 56 |         """
 57 |         Whether to use the roaming appdata directory on Windows.
 58 | 
 59 |         That means that for users on a Windows network setup for roaming profiles, this user data will be synced on
 60 |         login (see
 61 |         `here <https://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>`_).
 62 | 
 63 |         """
 64 |         self.multipath = multipath
 65 |         """
 66 |         An optional parameter which indicates that the entire list of data dirs should be returned.
 67 | 
 68 |         By default, the first item would only be returned.
 69 | 
 70 |         """
 71 |         self.opinion = opinion  #: A flag to indicating to use opinionated values.
 72 |         self.ensure_exists = ensure_exists
 73 |         """
 74 |         Optionally create the directory (and any missing parents) upon access if it does not exist.
 75 | 
 76 |         By default, no directories are created.
 77 | 
 78 |         """
 79 | 
 80 |     def _append_app_name_and_version(self, *base: str) -> str:
 81 |         params = list(base[1:])
 82 |         if self.appname:
 83 |             params.append(self.appname)
 84 |             if self.version:
 85 |                 params.append(self.version)
 86 |         path = os.path.join(base[0], *params)  # noqa: PTH118
 87 |         self._optionally_create_directory(path)
 88 |         return path
 89 | 
 90 |     def _optionally_create_directory(self, path: str) -> None:
 91 |         if self.ensure_exists:
 92 |             Path(path).mkdir(parents=True, exist_ok=True)
 93 | 
 94 |     @property
 95 |     @abstractmethod
 96 |     def user_data_dir(self) -> str:
 97 |         """:return: data directory tied to the user"""
 98 | 
 99 |     @property
100 |     @abstractmethod
101 |     def site_data_dir(self) -> str:
102 |         """:return: data directory shared by users"""
103 | 
104 |     @property
105 |     @abstractmethod
106 |     def user_config_dir(self) -> str:
107 |         """:return: config directory tied to the user"""
108 | 
109 |     @property
110 |     @abstractmethod
111 |     def site_config_dir(self) -> str:
112 |         """:return: config directory shared by the users"""
113 | 
114 |     @property
115 |     @abstractmethod
116 |     def user_cache_dir(self) -> str:
117 |         """:return: cache directory tied to the user"""
118 | 
119 |     @property
120 |     @abstractmethod
121 |     def site_cache_dir(self) -> str:
122 |         """:return: cache directory shared by users"""
123 | 
124 |     @property
125 |     @abstractmethod
126 |     def user_state_dir(self) -> str:
127 |         """:return: state directory tied to the user"""
128 | 
129 |     @property
130 |     @abstractmethod
131 |     def user_log_dir(self) -> str:
132 |         """:return: log directory tied to the user"""
133 | 
134 |     @property
135 |     @abstractmethod
136 |     def user_documents_dir(self) -> str:
137 |         """:return: documents directory tied to the user"""
138 | 
139 |     @property
140 |     @abstractmethod
141 |     def user_downloads_dir(self) -> str:
142 |         """:return: downloads directory tied to the user"""
143 | 
144 |     @property
145 |     @abstractmethod
146 |     def user_pictures_dir(self) -> str:
147 |         """:return: pictures directory tied to the user"""
148 | 
149 |     @property
150 |     @abstractmethod
151 |     def user_videos_dir(self) -> str:
152 |         """:return: videos directory tied to the user"""
153 | 
154 |     @property
155 |     @abstractmethod
156 |     def user_music_dir(self) -> str:
157 |         """:return: music directory tied to the user"""
158 | 
159 |     @property
160 |     @abstractmethod
161 |     def user_desktop_dir(self) -> str:
162 |         """:return: desktop directory tied to the user"""
163 | 
164 |     @property
165 |     @abstractmethod
166 |     def user_runtime_dir(self) -> str:
167 |         """:return: runtime directory tied to the user"""
168 | 
169 |     @property
170 |     @abstractmethod
171 |     def site_runtime_dir(self) -> str:
172 |         """:return: runtime directory shared by users"""
173 | 
174 |     @property
175 |     def user_data_path(self) -> Path:
176 |         """:return: data path tied to the user"""
177 |         return Path(self.user_data_dir)
178 | 
179 |     @property
180 |     def site_data_path(self) -> Path:
181 |         """:return: data path shared by users"""
182 |         return Path(self.site_data_dir)
183 | 
184 |     @property
185 |     def user_config_path(self) -> Path:
186 |         """:return: config path tied to the user"""
187 |         return Path(self.user_config_dir)
188 | 
189 |     @property
190 |     def site_config_path(self) -> Path:
191 |         """:return: config path shared by the users"""
192 |         return Path(self.site_config_dir)
193 | 
194 |     @property
195 |     def user_cache_path(self) -> Path:
196 |         """:return: cache path tied to the user"""
197 |         return Path(self.user_cache_dir)
198 | 
199 |     @property
200 |     def site_cache_path(self) -> Path:
201 |         """:return: cache path shared by users"""
202 |         return Path(self.site_cache_dir)
203 | 
204 |     @property
205 |     def user_state_path(self) -> Path:
206 |         """:return: state path tied to the user"""
207 |         return Path(self.user_state_dir)
208 | 
209 |     @property
210 |     def user_log_path(self) -> Path:
211 |         """:return: log path tied to the user"""
212 |         return Path(self.user_log_dir)
213 | 
214 |     @property
215 |     def user_documents_path(self) -> Path:
216 |         """:return: documents a path tied to the user"""
217 |         return Path(self.user_documents_dir)
218 | 
219 |     @property
220 |     def user_downloads_path(self) -> Path:
221 |         """:return: downloads path tied to the user"""
222 |         return Path(self.user_downloads_dir)
223 | 
224 |     @property
225 |     def user_pictures_path(self) -> Path:
226 |         """:return: pictures path tied to the user"""
227 |         return Path(self.user_pictures_dir)
228 | 
229 |     @property
230 |     def user_videos_path(self) -> Path:
231 |         """:return: videos path tied to the user"""
232 |         return Path(self.user_videos_dir)
233 | 
234 |     @property
235 |     def user_music_path(self) -> Path:
236 |         """:return: music path tied to the user"""
237 |         return Path(self.user_music_dir)
238 | 
239 |     @property
240 |     def user_desktop_path(self) -> Path:
241 |         """:return: desktop path tied to the user"""
242 |         return Path(self.user_desktop_dir)
243 | 
244 |     @property
245 |     def user_runtime_path(self) -> Path:
246 |         """:return: runtime path tied to the user"""
247 |         return Path(self.user_runtime_dir)
248 | 
249 |     @property
250 |     def site_runtime_path(self) -> Path:
251 |         """:return: runtime path shared by users"""
252 |         return Path(self.site_runtime_dir)
253 | 
254 |     def iter_config_dirs(self) -> Iterator[str]:
255 |         """:yield: all user and site configuration directories."""
256 |         yield self.user_config_dir
257 |         yield self.site_config_dir
258 | 
259 |     def iter_data_dirs(self) -> Iterator[str]:
260 |         """:yield: all user and site data directories."""
261 |         yield self.user_data_dir
262 |         yield self.site_data_dir
263 | 
264 |     def iter_cache_dirs(self) -> Iterator[str]:
265 |         """:yield: all user and site cache directories."""
266 |         yield self.user_cache_dir
267 |         yield self.site_cache_dir
268 | 
269 |     def iter_runtime_dirs(self) -> Iterator[str]:
270 |         """:yield: all user and site runtime directories."""
271 |         yield self.user_runtime_dir
272 |         yield self.site_runtime_dir
273 | 
274 |     def iter_config_paths(self) -> Iterator[Path]:
275 |         """:yield: all user and site configuration paths."""
276 |         for path in self.iter_config_dirs():
277 |             yield Path(path)
278 | 
279 |     def iter_data_paths(self) -> Iterator[Path]:
280 |         """:yield: all user and site data paths."""
281 |         for path in self.iter_data_dirs():
282 |             yield Path(path)
283 | 
284 |     def iter_cache_paths(self) -> Iterator[Path]:
285 |         """:yield: all user and site cache paths."""
286 |         for path in self.iter_cache_dirs():
287 |             yield Path(path)
288 | 
289 |     def iter_runtime_paths(self) -> Iterator[Path]:
290 |         """:yield: all user and site runtime paths."""
291 |         for path in self.iter_runtime_dirs():
292 |             yield Path(path)
293 | 
```
Page 30/168FirstPrevNextLast