#
tokens: 46402/50000 2/808 files (page 90/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 90 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

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

```python
  1 | import errno
  2 | import json
  3 | import operator
  4 | import os
  5 | import shutil
  6 | import site
  7 | from optparse import SUPPRESS_HELP, Values
  8 | from typing import List, Optional
  9 | 
 10 | from pip._vendor.packaging.utils import canonicalize_name
 11 | from pip._vendor.rich import print_json
 12 | 
 13 | from pip._internal.cache import WheelCache
 14 | from pip._internal.cli import cmdoptions
 15 | from pip._internal.cli.cmdoptions import make_target_python
 16 | from pip._internal.cli.req_command import (
 17 |     RequirementCommand,
 18 |     with_cleanup,
 19 | )
 20 | from pip._internal.cli.status_codes import ERROR, SUCCESS
 21 | from pip._internal.exceptions import CommandError, InstallationError
 22 | from pip._internal.locations import get_scheme
 23 | from pip._internal.metadata import get_environment
 24 | from pip._internal.models.installation_report import InstallationReport
 25 | from pip._internal.operations.build.build_tracker import get_build_tracker
 26 | from pip._internal.operations.check import ConflictDetails, check_install_conflicts
 27 | from pip._internal.req import install_given_reqs
 28 | from pip._internal.req.req_install import (
 29 |     InstallRequirement,
 30 |     check_legacy_setup_py_options,
 31 | )
 32 | from pip._internal.utils.compat import WINDOWS
 33 | from pip._internal.utils.filesystem import test_writable_dir
 34 | from pip._internal.utils.logging import getLogger
 35 | from pip._internal.utils.misc import (
 36 |     check_externally_managed,
 37 |     ensure_dir,
 38 |     get_pip_version,
 39 |     protect_pip_from_modification_on_windows,
 40 |     warn_if_run_as_root,
 41 |     write_output,
 42 | )
 43 | from pip._internal.utils.temp_dir import TempDirectory
 44 | from pip._internal.utils.virtualenv import (
 45 |     running_under_virtualenv,
 46 |     virtualenv_no_global,
 47 | )
 48 | from pip._internal.wheel_builder import build, should_build_for_install_command
 49 | 
 50 | logger = getLogger(__name__)
 51 | 
 52 | 
 53 | class InstallCommand(RequirementCommand):
 54 |     """
 55 |     Install packages from:
 56 | 
 57 |     - PyPI (and other indexes) using requirement specifiers.
 58 |     - VCS project urls.
 59 |     - Local project directories.
 60 |     - Local or remote source archives.
 61 | 
 62 |     pip also supports installing from "requirements files", which provide
 63 |     an easy way to specify a whole environment to be installed.
 64 |     """
 65 | 
 66 |     usage = """
 67 |       %prog [options] <requirement specifier> [package-index-options] ...
 68 |       %prog [options] -r <requirements file> [package-index-options] ...
 69 |       %prog [options] [-e] <vcs project url> ...
 70 |       %prog [options] [-e] <local project path> ...
 71 |       %prog [options] <archive url/path> ..."""
 72 | 
 73 |     def add_options(self) -> None:
 74 |         self.cmd_opts.add_option(cmdoptions.requirements())
 75 |         self.cmd_opts.add_option(cmdoptions.constraints())
 76 |         self.cmd_opts.add_option(cmdoptions.no_deps())
 77 |         self.cmd_opts.add_option(cmdoptions.pre())
 78 | 
 79 |         self.cmd_opts.add_option(cmdoptions.editable())
 80 |         self.cmd_opts.add_option(
 81 |             "--dry-run",
 82 |             action="store_true",
 83 |             dest="dry_run",
 84 |             default=False,
 85 |             help=(
 86 |                 "Don't actually install anything, just print what would be. "
 87 |                 "Can be used in combination with --ignore-installed "
 88 |                 "to 'resolve' the requirements."
 89 |             ),
 90 |         )
 91 |         self.cmd_opts.add_option(
 92 |             "-t",
 93 |             "--target",
 94 |             dest="target_dir",
 95 |             metavar="dir",
 96 |             default=None,
 97 |             help=(
 98 |                 "Install packages into <dir>. "
 99 |                 "By default this will not replace existing files/folders in "
100 |                 "<dir>. Use --upgrade to replace existing packages in <dir> "
101 |                 "with new versions."
102 |             ),
103 |         )
104 |         cmdoptions.add_target_python_options(self.cmd_opts)
105 | 
106 |         self.cmd_opts.add_option(
107 |             "--user",
108 |             dest="use_user_site",
109 |             action="store_true",
110 |             help=(
111 |                 "Install to the Python user install directory for your "
112 |                 "platform. Typically ~/.local/, or %APPDATA%\\Python on "
113 |                 "Windows. (See the Python documentation for site.USER_BASE "
114 |                 "for full details.)"
115 |             ),
116 |         )
117 |         self.cmd_opts.add_option(
118 |             "--no-user",
119 |             dest="use_user_site",
120 |             action="store_false",
121 |             help=SUPPRESS_HELP,
122 |         )
123 |         self.cmd_opts.add_option(
124 |             "--root",
125 |             dest="root_path",
126 |             metavar="dir",
127 |             default=None,
128 |             help="Install everything relative to this alternate root directory.",
129 |         )
130 |         self.cmd_opts.add_option(
131 |             "--prefix",
132 |             dest="prefix_path",
133 |             metavar="dir",
134 |             default=None,
135 |             help=(
136 |                 "Installation prefix where lib, bin and other top-level "
137 |                 "folders are placed. Note that the resulting installation may "
138 |                 "contain scripts and other resources which reference the "
139 |                 "Python interpreter of pip, and not that of ``--prefix``. "
140 |                 "See also the ``--python`` option if the intention is to "
141 |                 "install packages into another (possibly pip-free) "
142 |                 "environment."
143 |             ),
144 |         )
145 | 
146 |         self.cmd_opts.add_option(cmdoptions.src())
147 | 
148 |         self.cmd_opts.add_option(
149 |             "-U",
150 |             "--upgrade",
151 |             dest="upgrade",
152 |             action="store_true",
153 |             help=(
154 |                 "Upgrade all specified packages to the newest available "
155 |                 "version. The handling of dependencies depends on the "
156 |                 "upgrade-strategy used."
157 |             ),
158 |         )
159 | 
160 |         self.cmd_opts.add_option(
161 |             "--upgrade-strategy",
162 |             dest="upgrade_strategy",
163 |             default="only-if-needed",
164 |             choices=["only-if-needed", "eager"],
165 |             help=(
166 |                 "Determines how dependency upgrading should be handled "
167 |                 "[default: %default]. "
168 |                 '"eager" - dependencies are upgraded regardless of '
169 |                 "whether the currently installed version satisfies the "
170 |                 "requirements of the upgraded package(s). "
171 |                 '"only-if-needed" -  are upgraded only when they do not '
172 |                 "satisfy the requirements of the upgraded package(s)."
173 |             ),
174 |         )
175 | 
176 |         self.cmd_opts.add_option(
177 |             "--force-reinstall",
178 |             dest="force_reinstall",
179 |             action="store_true",
180 |             help="Reinstall all packages even if they are already up-to-date.",
181 |         )
182 | 
183 |         self.cmd_opts.add_option(
184 |             "-I",
185 |             "--ignore-installed",
186 |             dest="ignore_installed",
187 |             action="store_true",
188 |             help=(
189 |                 "Ignore the installed packages, overwriting them. "
190 |                 "This can break your system if the existing package "
191 |                 "is of a different version or was installed "
192 |                 "with a different package manager!"
193 |             ),
194 |         )
195 | 
196 |         self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
197 |         self.cmd_opts.add_option(cmdoptions.no_build_isolation())
198 |         self.cmd_opts.add_option(cmdoptions.use_pep517())
199 |         self.cmd_opts.add_option(cmdoptions.no_use_pep517())
200 |         self.cmd_opts.add_option(cmdoptions.check_build_deps())
201 |         self.cmd_opts.add_option(cmdoptions.override_externally_managed())
202 | 
203 |         self.cmd_opts.add_option(cmdoptions.config_settings())
204 |         self.cmd_opts.add_option(cmdoptions.global_options())
205 | 
206 |         self.cmd_opts.add_option(
207 |             "--compile",
208 |             action="store_true",
209 |             dest="compile",
210 |             default=True,
211 |             help="Compile Python source files to bytecode",
212 |         )
213 | 
214 |         self.cmd_opts.add_option(
215 |             "--no-compile",
216 |             action="store_false",
217 |             dest="compile",
218 |             help="Do not compile Python source files to bytecode",
219 |         )
220 | 
221 |         self.cmd_opts.add_option(
222 |             "--no-warn-script-location",
223 |             action="store_false",
224 |             dest="warn_script_location",
225 |             default=True,
226 |             help="Do not warn when installing scripts outside PATH",
227 |         )
228 |         self.cmd_opts.add_option(
229 |             "--no-warn-conflicts",
230 |             action="store_false",
231 |             dest="warn_about_conflicts",
232 |             default=True,
233 |             help="Do not warn about broken dependencies",
234 |         )
235 |         self.cmd_opts.add_option(cmdoptions.no_binary())
236 |         self.cmd_opts.add_option(cmdoptions.only_binary())
237 |         self.cmd_opts.add_option(cmdoptions.prefer_binary())
238 |         self.cmd_opts.add_option(cmdoptions.require_hashes())
239 |         self.cmd_opts.add_option(cmdoptions.progress_bar())
240 |         self.cmd_opts.add_option(cmdoptions.root_user_action())
241 | 
242 |         index_opts = cmdoptions.make_option_group(
243 |             cmdoptions.index_group,
244 |             self.parser,
245 |         )
246 | 
247 |         self.parser.insert_option_group(0, index_opts)
248 |         self.parser.insert_option_group(0, self.cmd_opts)
249 | 
250 |         self.cmd_opts.add_option(
251 |             "--report",
252 |             dest="json_report_file",
253 |             metavar="file",
254 |             default=None,
255 |             help=(
256 |                 "Generate a JSON file describing what pip did to install "
257 |                 "the provided requirements. "
258 |                 "Can be used in combination with --dry-run and --ignore-installed "
259 |                 "to 'resolve' the requirements. "
260 |                 "When - is used as file name it writes to stdout. "
261 |                 "When writing to stdout, please combine with the --quiet option "
262 |                 "to avoid mixing pip logging output with JSON output."
263 |             ),
264 |         )
265 | 
266 |     @with_cleanup
267 |     def run(self, options: Values, args: List[str]) -> int:
268 |         if options.use_user_site and options.target_dir is not None:
269 |             raise CommandError("Can not combine '--user' and '--target'")
270 | 
271 |         # Check whether the environment we're installing into is externally
272 |         # managed, as specified in PEP 668. Specifying --root, --target, or
273 |         # --prefix disables the check, since there's no reliable way to locate
274 |         # the EXTERNALLY-MANAGED file for those cases. An exception is also
275 |         # made specifically for "--dry-run --report" for convenience.
276 |         installing_into_current_environment = (
277 |             not (options.dry_run and options.json_report_file)
278 |             and options.root_path is None
279 |             and options.target_dir is None
280 |             and options.prefix_path is None
281 |         )
282 |         if (
283 |             installing_into_current_environment
284 |             and not options.override_externally_managed
285 |         ):
286 |             check_externally_managed()
287 | 
288 |         upgrade_strategy = "to-satisfy-only"
289 |         if options.upgrade:
290 |             upgrade_strategy = options.upgrade_strategy
291 | 
292 |         cmdoptions.check_dist_restriction(options, check_target=True)
293 | 
294 |         logger.verbose("Using %s", get_pip_version())
295 |         options.use_user_site = decide_user_install(
296 |             options.use_user_site,
297 |             prefix_path=options.prefix_path,
298 |             target_dir=options.target_dir,
299 |             root_path=options.root_path,
300 |             isolated_mode=options.isolated_mode,
301 |         )
302 | 
303 |         target_temp_dir: Optional[TempDirectory] = None
304 |         target_temp_dir_path: Optional[str] = None
305 |         if options.target_dir:
306 |             options.ignore_installed = True
307 |             options.target_dir = os.path.abspath(options.target_dir)
308 |             if (
309 |                 # fmt: off
310 |                 os.path.exists(options.target_dir) and
311 |                 not os.path.isdir(options.target_dir)
312 |                 # fmt: on
313 |             ):
314 |                 raise CommandError(
315 |                     "Target path exists but is not a directory, will not continue."
316 |                 )
317 | 
318 |             # Create a target directory for using with the target option
319 |             target_temp_dir = TempDirectory(kind="target")
320 |             target_temp_dir_path = target_temp_dir.path
321 |             self.enter_context(target_temp_dir)
322 | 
323 |         global_options = options.global_options or []
324 | 
325 |         session = self.get_default_session(options)
326 | 
327 |         target_python = make_target_python(options)
328 |         finder = self._build_package_finder(
329 |             options=options,
330 |             session=session,
331 |             target_python=target_python,
332 |             ignore_requires_python=options.ignore_requires_python,
333 |         )
334 |         build_tracker = self.enter_context(get_build_tracker())
335 | 
336 |         directory = TempDirectory(
337 |             delete=not options.no_clean,
338 |             kind="install",
339 |             globally_managed=True,
340 |         )
341 | 
342 |         try:
343 |             reqs = self.get_requirements(args, options, finder, session)
344 |             check_legacy_setup_py_options(options, reqs)
345 | 
346 |             wheel_cache = WheelCache(options.cache_dir)
347 | 
348 |             # Only when installing is it permitted to use PEP 660.
349 |             # In other circumstances (pip wheel, pip download) we generate
350 |             # regular (i.e. non editable) metadata and wheels.
351 |             for req in reqs:
352 |                 req.permit_editable_wheels = True
353 | 
354 |             preparer = self.make_requirement_preparer(
355 |                 temp_build_dir=directory,
356 |                 options=options,
357 |                 build_tracker=build_tracker,
358 |                 session=session,
359 |                 finder=finder,
360 |                 use_user_site=options.use_user_site,
361 |                 verbosity=self.verbosity,
362 |             )
363 |             resolver = self.make_resolver(
364 |                 preparer=preparer,
365 |                 finder=finder,
366 |                 options=options,
367 |                 wheel_cache=wheel_cache,
368 |                 use_user_site=options.use_user_site,
369 |                 ignore_installed=options.ignore_installed,
370 |                 ignore_requires_python=options.ignore_requires_python,
371 |                 force_reinstall=options.force_reinstall,
372 |                 upgrade_strategy=upgrade_strategy,
373 |                 use_pep517=options.use_pep517,
374 |                 py_version_info=options.python_version,
375 |             )
376 | 
377 |             self.trace_basic_info(finder)
378 | 
379 |             requirement_set = resolver.resolve(
380 |                 reqs, check_supported_wheels=not options.target_dir
381 |             )
382 | 
383 |             if options.json_report_file:
384 |                 report = InstallationReport(requirement_set.requirements_to_install)
385 |                 if options.json_report_file == "-":
386 |                     print_json(data=report.to_dict())
387 |                 else:
388 |                     with open(options.json_report_file, "w", encoding="utf-8") as f:
389 |                         json.dump(report.to_dict(), f, indent=2, ensure_ascii=False)
390 | 
391 |             if options.dry_run:
392 |                 would_install_items = sorted(
393 |                     (r.metadata["name"], r.metadata["version"])
394 |                     for r in requirement_set.requirements_to_install
395 |                 )
396 |                 if would_install_items:
397 |                     write_output(
398 |                         "Would install %s",
399 |                         " ".join("-".join(item) for item in would_install_items),
400 |                     )
401 |                 return SUCCESS
402 | 
403 |             try:
404 |                 pip_req = requirement_set.get_requirement("pip")
405 |             except KeyError:
406 |                 modifying_pip = False
407 |             else:
408 |                 # If we're not replacing an already installed pip,
409 |                 # we're not modifying it.
410 |                 modifying_pip = pip_req.satisfied_by is None
411 |                 if modifying_pip:
412 |                     # Eagerly import this module to avoid crashes. Otherwise, this
413 |                     # module would be imported *after* pip was replaced, resulting in
414 |                     # crashes if the new self_outdated_check module was incompatible
415 |                     # with the rest of pip that's already imported.
416 |                     import pip._internal.self_outdated_check  # noqa: F401
417 |             protect_pip_from_modification_on_windows(modifying_pip=modifying_pip)
418 | 
419 |             reqs_to_build = [
420 |                 r
421 |                 for r in requirement_set.requirements.values()
422 |                 if should_build_for_install_command(r)
423 |             ]
424 | 
425 |             _, build_failures = build(
426 |                 reqs_to_build,
427 |                 wheel_cache=wheel_cache,
428 |                 verify=True,
429 |                 build_options=[],
430 |                 global_options=global_options,
431 |             )
432 | 
433 |             if build_failures:
434 |                 raise InstallationError(
435 |                     "ERROR: Failed to build installable wheels for some "
436 |                     "pyproject.toml based projects ({})".format(
437 |                         ", ".join(r.name for r in build_failures)  # type: ignore
438 |                     )
439 |                 )
440 | 
441 |             to_install = resolver.get_installation_order(requirement_set)
442 | 
443 |             # Check for conflicts in the package set we're installing.
444 |             conflicts: Optional[ConflictDetails] = None
445 |             should_warn_about_conflicts = (
446 |                 not options.ignore_dependencies and options.warn_about_conflicts
447 |             )
448 |             if should_warn_about_conflicts:
449 |                 conflicts = self._determine_conflicts(to_install)
450 | 
451 |             # Don't warn about script install locations if
452 |             # --target or --prefix has been specified
453 |             warn_script_location = options.warn_script_location
454 |             if options.target_dir or options.prefix_path:
455 |                 warn_script_location = False
456 | 
457 |             installed = install_given_reqs(
458 |                 to_install,
459 |                 global_options,
460 |                 root=options.root_path,
461 |                 home=target_temp_dir_path,
462 |                 prefix=options.prefix_path,
463 |                 warn_script_location=warn_script_location,
464 |                 use_user_site=options.use_user_site,
465 |                 pycompile=options.compile,
466 |             )
467 | 
468 |             lib_locations = get_lib_location_guesses(
469 |                 user=options.use_user_site,
470 |                 home=target_temp_dir_path,
471 |                 root=options.root_path,
472 |                 prefix=options.prefix_path,
473 |                 isolated=options.isolated_mode,
474 |             )
475 |             env = get_environment(lib_locations)
476 | 
477 |             # Display a summary of installed packages, with extra care to
478 |             # display a package name as it was requested by the user.
479 |             installed.sort(key=operator.attrgetter("name"))
480 |             summary = []
481 |             installed_versions = {}
482 |             for distribution in env.iter_all_distributions():
483 |                 installed_versions[distribution.canonical_name] = distribution.version
484 |             for package in installed:
485 |                 display_name = package.name
486 |                 version = installed_versions.get(canonicalize_name(display_name), None)
487 |                 if version:
488 |                     text = f"{display_name}-{version}"
489 |                 else:
490 |                     text = display_name
491 |                 summary.append(text)
492 | 
493 |             if conflicts is not None:
494 |                 self._warn_about_conflicts(
495 |                     conflicts,
496 |                     resolver_variant=self.determine_resolver_variant(options),
497 |                 )
498 | 
499 |             installed_desc = " ".join(summary)
500 |             if installed_desc:
501 |                 write_output(
502 |                     "Successfully installed %s",
503 |                     installed_desc,
504 |                 )
505 |         except OSError as error:
506 |             show_traceback = self.verbosity >= 1
507 | 
508 |             message = create_os_error_message(
509 |                 error,
510 |                 show_traceback,
511 |                 options.use_user_site,
512 |             )
513 |             logger.error(message, exc_info=show_traceback)
514 | 
515 |             return ERROR
516 | 
517 |         if options.target_dir:
518 |             assert target_temp_dir
519 |             self._handle_target_dir(
520 |                 options.target_dir, target_temp_dir, options.upgrade
521 |             )
522 |         if options.root_user_action == "warn":
523 |             warn_if_run_as_root()
524 |         return SUCCESS
525 | 
526 |     def _handle_target_dir(
527 |         self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool
528 |     ) -> None:
529 |         ensure_dir(target_dir)
530 | 
531 |         # Checking both purelib and platlib directories for installed
532 |         # packages to be moved to target directory
533 |         lib_dir_list = []
534 | 
535 |         # Checking both purelib and platlib directories for installed
536 |         # packages to be moved to target directory
537 |         scheme = get_scheme("", home=target_temp_dir.path)
538 |         purelib_dir = scheme.purelib
539 |         platlib_dir = scheme.platlib
540 |         data_dir = scheme.data
541 | 
542 |         if os.path.exists(purelib_dir):
543 |             lib_dir_list.append(purelib_dir)
544 |         if os.path.exists(platlib_dir) and platlib_dir != purelib_dir:
545 |             lib_dir_list.append(platlib_dir)
546 |         if os.path.exists(data_dir):
547 |             lib_dir_list.append(data_dir)
548 | 
549 |         for lib_dir in lib_dir_list:
550 |             for item in os.listdir(lib_dir):
551 |                 if lib_dir == data_dir:
552 |                     ddir = os.path.join(data_dir, item)
553 |                     if any(s.startswith(ddir) for s in lib_dir_list[:-1]):
554 |                         continue
555 |                 target_item_dir = os.path.join(target_dir, item)
556 |                 if os.path.exists(target_item_dir):
557 |                     if not upgrade:
558 |                         logger.warning(
559 |                             "Target directory %s already exists. Specify "
560 |                             "--upgrade to force replacement.",
561 |                             target_item_dir,
562 |                         )
563 |                         continue
564 |                     if os.path.islink(target_item_dir):
565 |                         logger.warning(
566 |                             "Target directory %s already exists and is "
567 |                             "a link. pip will not automatically replace "
568 |                             "links, please remove if replacement is "
569 |                             "desired.",
570 |                             target_item_dir,
571 |                         )
572 |                         continue
573 |                     if os.path.isdir(target_item_dir):
574 |                         shutil.rmtree(target_item_dir)
575 |                     else:
576 |                         os.remove(target_item_dir)
577 | 
578 |                 shutil.move(os.path.join(lib_dir, item), target_item_dir)
579 | 
580 |     def _determine_conflicts(
581 |         self, to_install: List[InstallRequirement]
582 |     ) -> Optional[ConflictDetails]:
583 |         try:
584 |             return check_install_conflicts(to_install)
585 |         except Exception:
586 |             logger.exception(
587 |                 "Error while checking for conflicts. Please file an issue on "
588 |                 "pip's issue tracker: https://github.com/pypa/pip/issues/new"
589 |             )
590 |             return None
591 | 
592 |     def _warn_about_conflicts(
593 |         self, conflict_details: ConflictDetails, resolver_variant: str
594 |     ) -> None:
595 |         package_set, (missing, conflicting) = conflict_details
596 |         if not missing and not conflicting:
597 |             return
598 | 
599 |         parts: List[str] = []
600 |         if resolver_variant == "legacy":
601 |             parts.append(
602 |                 "pip's legacy dependency resolver does not consider dependency "
603 |                 "conflicts when selecting packages. This behaviour is the "
604 |                 "source of the following dependency conflicts."
605 |             )
606 |         else:
607 |             assert resolver_variant == "resolvelib"
608 |             parts.append(
609 |                 "pip's dependency resolver does not currently take into account "
610 |                 "all the packages that are installed. This behaviour is the "
611 |                 "source of the following dependency conflicts."
612 |             )
613 | 
614 |         # NOTE: There is some duplication here, with commands/check.py
615 |         for project_name in missing:
616 |             version = package_set[project_name][0]
617 |             for dependency in missing[project_name]:
618 |                 message = (
619 |                     f"{project_name} {version} requires {dependency[1]}, "
620 |                     "which is not installed."
621 |                 )
622 |                 parts.append(message)
623 | 
624 |         for project_name in conflicting:
625 |             version = package_set[project_name][0]
626 |             for dep_name, dep_version, req in conflicting[project_name]:
627 |                 message = (
628 |                     "{name} {version} requires {requirement}, but {you} have "
629 |                     "{dep_name} {dep_version} which is incompatible."
630 |                 ).format(
631 |                     name=project_name,
632 |                     version=version,
633 |                     requirement=req,
634 |                     dep_name=dep_name,
635 |                     dep_version=dep_version,
636 |                     you=("you" if resolver_variant == "resolvelib" else "you'll"),
637 |                 )
638 |                 parts.append(message)
639 | 
640 |         logger.critical("\n".join(parts))
641 | 
642 | 
643 | def get_lib_location_guesses(
644 |     user: bool = False,
645 |     home: Optional[str] = None,
646 |     root: Optional[str] = None,
647 |     isolated: bool = False,
648 |     prefix: Optional[str] = None,
649 | ) -> List[str]:
650 |     scheme = get_scheme(
651 |         "",
652 |         user=user,
653 |         home=home,
654 |         root=root,
655 |         isolated=isolated,
656 |         prefix=prefix,
657 |     )
658 |     return [scheme.purelib, scheme.platlib]
659 | 
660 | 
661 | def site_packages_writable(root: Optional[str], isolated: bool) -> bool:
662 |     return all(
663 |         test_writable_dir(d)
664 |         for d in set(get_lib_location_guesses(root=root, isolated=isolated))
665 |     )
666 | 
667 | 
668 | def decide_user_install(
669 |     use_user_site: Optional[bool],
670 |     prefix_path: Optional[str] = None,
671 |     target_dir: Optional[str] = None,
672 |     root_path: Optional[str] = None,
673 |     isolated_mode: bool = False,
674 | ) -> bool:
675 |     """Determine whether to do a user install based on the input options.
676 | 
677 |     If use_user_site is False, no additional checks are done.
678 |     If use_user_site is True, it is checked for compatibility with other
679 |     options.
680 |     If use_user_site is None, the default behaviour depends on the environment,
681 |     which is provided by the other arguments.
682 |     """
683 |     # In some cases (config from tox), use_user_site can be set to an integer
684 |     # rather than a bool, which 'use_user_site is False' wouldn't catch.
685 |     if (use_user_site is not None) and (not use_user_site):
686 |         logger.debug("Non-user install by explicit request")
687 |         return False
688 | 
689 |     if use_user_site:
690 |         if prefix_path:
691 |             raise CommandError(
692 |                 "Can not combine '--user' and '--prefix' as they imply "
693 |                 "different installation locations"
694 |             )
695 |         if virtualenv_no_global():
696 |             raise InstallationError(
697 |                 "Can not perform a '--user' install. User site-packages "
698 |                 "are not visible in this virtualenv."
699 |             )
700 |         logger.debug("User install by explicit request")
701 |         return True
702 | 
703 |     # If we are here, user installs have not been explicitly requested/avoided
704 |     assert use_user_site is None
705 | 
706 |     # user install incompatible with --prefix/--target
707 |     if prefix_path or target_dir:
708 |         logger.debug("Non-user install due to --prefix or --target option")
709 |         return False
710 | 
711 |     # If user installs are not enabled, choose a non-user install
712 |     if not site.ENABLE_USER_SITE:
713 |         logger.debug("Non-user install because user site-packages disabled")
714 |         return False
715 | 
716 |     # If we have permission for a non-user install, do that,
717 |     # otherwise do a user install.
718 |     if site_packages_writable(root=root_path, isolated=isolated_mode):
719 |         logger.debug("Non-user install because site-packages writeable")
720 |         return False
721 | 
722 |     logger.info(
723 |         "Defaulting to user installation because normal site-packages "
724 |         "is not writeable"
725 |     )
726 |     return True
727 | 
728 | 
729 | def create_os_error_message(
730 |     error: OSError, show_traceback: bool, using_user_site: bool
731 | ) -> str:
732 |     """Format an error message for an OSError
733 | 
734 |     It may occur anytime during the execution of the install command.
735 |     """
736 |     parts = []
737 | 
738 |     # Mention the error if we are not going to show a traceback
739 |     parts.append("Could not install packages due to an OSError")
740 |     if not show_traceback:
741 |         parts.append(": ")
742 |         parts.append(str(error))
743 |     else:
744 |         parts.append(".")
745 | 
746 |     # Spilt the error indication from a helper message (if any)
747 |     parts[-1] += "\n"
748 | 
749 |     # Suggest useful actions to the user:
750 |     #  (1) using user site-packages or (2) verifying the permissions
751 |     if error.errno == errno.EACCES:
752 |         user_option_part = "Consider using the `--user` option"
753 |         permissions_part = "Check the permissions"
754 | 
755 |         if not running_under_virtualenv() and not using_user_site:
756 |             parts.extend(
757 |                 [
758 |                     user_option_part,
759 |                     " or ",
760 |                     permissions_part.lower(),
761 |                 ]
762 |             )
763 |         else:
764 |             parts.append(permissions_part)
765 |         parts.append(".\n")
766 | 
767 |     # Suggest the user to enable Long Paths if path length is
768 |     # more than 260
769 |     if (
770 |         WINDOWS
771 |         and error.errno == errno.ENOENT
772 |         and error.filename
773 |         and len(error.filename) > 260
774 |     ):
775 |         parts.append(
776 |             "HINT: This error might have occurred since "
777 |             "this system does not have Windows Long Path "
778 |             "support enabled. You can find information on "
779 |             "how to enable this at "
780 |             "https://pip.pypa.io/warnings/enable-long-paths\n"
781 |         )
782 | 
783 |     return "".join(parts).strip() + "\n"
784 | 
```

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

```python
  1 | from __future__ import absolute_import
  2 | 
  3 | import linecache
  4 | import os
  5 | import platform
  6 | import sys
  7 | from dataclasses import dataclass, field
  8 | from traceback import walk_tb
  9 | from types import ModuleType, TracebackType
 10 | from typing import (
 11 |     Any,
 12 |     Callable,
 13 |     Dict,
 14 |     Iterable,
 15 |     List,
 16 |     Optional,
 17 |     Sequence,
 18 |     Tuple,
 19 |     Type,
 20 |     Union,
 21 | )
 22 | 
 23 | from pip._vendor.pygments.lexers import guess_lexer_for_filename
 24 | from pip._vendor.pygments.token import Comment, Keyword, Name, Number, Operator, String
 25 | from pip._vendor.pygments.token import Text as TextToken
 26 | from pip._vendor.pygments.token import Token
 27 | from pip._vendor.pygments.util import ClassNotFound
 28 | 
 29 | from . import pretty
 30 | from ._loop import loop_last
 31 | from .columns import Columns
 32 | from .console import Console, ConsoleOptions, ConsoleRenderable, RenderResult, group
 33 | from .constrain import Constrain
 34 | from .highlighter import RegexHighlighter, ReprHighlighter
 35 | from .panel import Panel
 36 | from .scope import render_scope
 37 | from .style import Style
 38 | from .syntax import Syntax
 39 | from .text import Text
 40 | from .theme import Theme
 41 | 
 42 | WINDOWS = platform.system() == "Windows"
 43 | 
 44 | LOCALS_MAX_LENGTH = 10
 45 | LOCALS_MAX_STRING = 80
 46 | 
 47 | 
 48 | def install(
 49 |     *,
 50 |     console: Optional[Console] = None,
 51 |     width: Optional[int] = 100,
 52 |     extra_lines: int = 3,
 53 |     theme: Optional[str] = None,
 54 |     word_wrap: bool = False,
 55 |     show_locals: bool = False,
 56 |     locals_max_length: int = LOCALS_MAX_LENGTH,
 57 |     locals_max_string: int = LOCALS_MAX_STRING,
 58 |     locals_hide_dunder: bool = True,
 59 |     locals_hide_sunder: Optional[bool] = None,
 60 |     indent_guides: bool = True,
 61 |     suppress: Iterable[Union[str, ModuleType]] = (),
 62 |     max_frames: int = 100,
 63 | ) -> Callable[[Type[BaseException], BaseException, Optional[TracebackType]], Any]:
 64 |     """Install a rich traceback handler.
 65 | 
 66 |     Once installed, any tracebacks will be printed with syntax highlighting and rich formatting.
 67 | 
 68 | 
 69 |     Args:
 70 |         console (Optional[Console], optional): Console to write exception to. Default uses internal Console instance.
 71 |         width (Optional[int], optional): Width (in characters) of traceback. Defaults to 100.
 72 |         extra_lines (int, optional): Extra lines of code. Defaults to 3.
 73 |         theme (Optional[str], optional): Pygments theme to use in traceback. Defaults to ``None`` which will pick
 74 |             a theme appropriate for the platform.
 75 |         word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False.
 76 |         show_locals (bool, optional): Enable display of local variables. Defaults to False.
 77 |         locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
 78 |             Defaults to 10.
 79 |         locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
 80 |         locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True.
 81 |         locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False.
 82 |         indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True.
 83 |         suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback.
 84 | 
 85 |     Returns:
 86 |         Callable: The previous exception handler that was replaced.
 87 | 
 88 |     """
 89 |     traceback_console = Console(stderr=True) if console is None else console
 90 | 
 91 |     locals_hide_sunder = (
 92 |         True
 93 |         if (traceback_console.is_jupyter and locals_hide_sunder is None)
 94 |         else locals_hide_sunder
 95 |     )
 96 | 
 97 |     def excepthook(
 98 |         type_: Type[BaseException],
 99 |         value: BaseException,
100 |         traceback: Optional[TracebackType],
101 |     ) -> None:
102 |         traceback_console.print(
103 |             Traceback.from_exception(
104 |                 type_,
105 |                 value,
106 |                 traceback,
107 |                 width=width,
108 |                 extra_lines=extra_lines,
109 |                 theme=theme,
110 |                 word_wrap=word_wrap,
111 |                 show_locals=show_locals,
112 |                 locals_max_length=locals_max_length,
113 |                 locals_max_string=locals_max_string,
114 |                 locals_hide_dunder=locals_hide_dunder,
115 |                 locals_hide_sunder=bool(locals_hide_sunder),
116 |                 indent_guides=indent_guides,
117 |                 suppress=suppress,
118 |                 max_frames=max_frames,
119 |             )
120 |         )
121 | 
122 |     def ipy_excepthook_closure(ip: Any) -> None:  # pragma: no cover
123 |         tb_data = {}  # store information about showtraceback call
124 |         default_showtraceback = ip.showtraceback  # keep reference of default traceback
125 | 
126 |         def ipy_show_traceback(*args: Any, **kwargs: Any) -> None:
127 |             """wrap the default ip.showtraceback to store info for ip._showtraceback"""
128 |             nonlocal tb_data
129 |             tb_data = kwargs
130 |             default_showtraceback(*args, **kwargs)
131 | 
132 |         def ipy_display_traceback(
133 |             *args: Any, is_syntax: bool = False, **kwargs: Any
134 |         ) -> None:
135 |             """Internally called traceback from ip._showtraceback"""
136 |             nonlocal tb_data
137 |             exc_tuple = ip._get_exc_info()
138 | 
139 |             # do not display trace on syntax error
140 |             tb: Optional[TracebackType] = None if is_syntax else exc_tuple[2]
141 | 
142 |             # determine correct tb_offset
143 |             compiled = tb_data.get("running_compiled_code", False)
144 |             tb_offset = tb_data.get("tb_offset", 1 if compiled else 0)
145 |             # remove ipython internal frames from trace with tb_offset
146 |             for _ in range(tb_offset):
147 |                 if tb is None:
148 |                     break
149 |                 tb = tb.tb_next
150 | 
151 |             excepthook(exc_tuple[0], exc_tuple[1], tb)
152 |             tb_data = {}  # clear data upon usage
153 | 
154 |         # replace _showtraceback instead of showtraceback to allow ipython features such as debugging to work
155 |         # this is also what the ipython docs recommends to modify when subclassing InteractiveShell
156 |         ip._showtraceback = ipy_display_traceback
157 |         # add wrapper to capture tb_data
158 |         ip.showtraceback = ipy_show_traceback
159 |         ip.showsyntaxerror = lambda *args, **kwargs: ipy_display_traceback(
160 |             *args, is_syntax=True, **kwargs
161 |         )
162 | 
163 |     try:  # pragma: no cover
164 |         # if within ipython, use customized traceback
165 |         ip = get_ipython()  # type: ignore[name-defined]
166 |         ipy_excepthook_closure(ip)
167 |         return sys.excepthook
168 |     except Exception:
169 |         # otherwise use default system hook
170 |         old_excepthook = sys.excepthook
171 |         sys.excepthook = excepthook
172 |         return old_excepthook
173 | 
174 | 
175 | @dataclass
176 | class Frame:
177 |     filename: str
178 |     lineno: int
179 |     name: str
180 |     line: str = ""
181 |     locals: Optional[Dict[str, pretty.Node]] = None
182 | 
183 | 
184 | @dataclass
185 | class _SyntaxError:
186 |     offset: int
187 |     filename: str
188 |     line: str
189 |     lineno: int
190 |     msg: str
191 | 
192 | 
193 | @dataclass
194 | class Stack:
195 |     exc_type: str
196 |     exc_value: str
197 |     syntax_error: Optional[_SyntaxError] = None
198 |     is_cause: bool = False
199 |     frames: List[Frame] = field(default_factory=list)
200 | 
201 | 
202 | @dataclass
203 | class Trace:
204 |     stacks: List[Stack]
205 | 
206 | 
207 | class PathHighlighter(RegexHighlighter):
208 |     highlights = [r"(?P<dim>.*/)(?P<bold>.+)"]
209 | 
210 | 
211 | class Traceback:
212 |     """A Console renderable that renders a traceback.
213 | 
214 |     Args:
215 |         trace (Trace, optional): A `Trace` object produced from `extract`. Defaults to None, which uses
216 |             the last exception.
217 |         width (Optional[int], optional): Number of characters used to traceback. Defaults to 100.
218 |         extra_lines (int, optional): Additional lines of code to render. Defaults to 3.
219 |         theme (str, optional): Override pygments theme used in traceback.
220 |         word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False.
221 |         show_locals (bool, optional): Enable display of local variables. Defaults to False.
222 |         indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True.
223 |         locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
224 |             Defaults to 10.
225 |         locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
226 |         locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True.
227 |         locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False.
228 |         suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback.
229 |         max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100.
230 | 
231 |     """
232 | 
233 |     LEXERS = {
234 |         "": "text",
235 |         ".py": "python",
236 |         ".pxd": "cython",
237 |         ".pyx": "cython",
238 |         ".pxi": "pyrex",
239 |     }
240 | 
241 |     def __init__(
242 |         self,
243 |         trace: Optional[Trace] = None,
244 |         *,
245 |         width: Optional[int] = 100,
246 |         extra_lines: int = 3,
247 |         theme: Optional[str] = None,
248 |         word_wrap: bool = False,
249 |         show_locals: bool = False,
250 |         locals_max_length: int = LOCALS_MAX_LENGTH,
251 |         locals_max_string: int = LOCALS_MAX_STRING,
252 |         locals_hide_dunder: bool = True,
253 |         locals_hide_sunder: bool = False,
254 |         indent_guides: bool = True,
255 |         suppress: Iterable[Union[str, ModuleType]] = (),
256 |         max_frames: int = 100,
257 |     ):
258 |         if trace is None:
259 |             exc_type, exc_value, traceback = sys.exc_info()
260 |             if exc_type is None or exc_value is None or traceback is None:
261 |                 raise ValueError(
262 |                     "Value for 'trace' required if not called in except: block"
263 |                 )
264 |             trace = self.extract(
265 |                 exc_type, exc_value, traceback, show_locals=show_locals
266 |             )
267 |         self.trace = trace
268 |         self.width = width
269 |         self.extra_lines = extra_lines
270 |         self.theme = Syntax.get_theme(theme or "ansi_dark")
271 |         self.word_wrap = word_wrap
272 |         self.show_locals = show_locals
273 |         self.indent_guides = indent_guides
274 |         self.locals_max_length = locals_max_length
275 |         self.locals_max_string = locals_max_string
276 |         self.locals_hide_dunder = locals_hide_dunder
277 |         self.locals_hide_sunder = locals_hide_sunder
278 | 
279 |         self.suppress: Sequence[str] = []
280 |         for suppress_entity in suppress:
281 |             if not isinstance(suppress_entity, str):
282 |                 assert (
283 |                     suppress_entity.__file__ is not None
284 |                 ), f"{suppress_entity!r} must be a module with '__file__' attribute"
285 |                 path = os.path.dirname(suppress_entity.__file__)
286 |             else:
287 |                 path = suppress_entity
288 |             path = os.path.normpath(os.path.abspath(path))
289 |             self.suppress.append(path)
290 |         self.max_frames = max(4, max_frames) if max_frames > 0 else 0
291 | 
292 |     @classmethod
293 |     def from_exception(
294 |         cls,
295 |         exc_type: Type[Any],
296 |         exc_value: BaseException,
297 |         traceback: Optional[TracebackType],
298 |         *,
299 |         width: Optional[int] = 100,
300 |         extra_lines: int = 3,
301 |         theme: Optional[str] = None,
302 |         word_wrap: bool = False,
303 |         show_locals: bool = False,
304 |         locals_max_length: int = LOCALS_MAX_LENGTH,
305 |         locals_max_string: int = LOCALS_MAX_STRING,
306 |         locals_hide_dunder: bool = True,
307 |         locals_hide_sunder: bool = False,
308 |         indent_guides: bool = True,
309 |         suppress: Iterable[Union[str, ModuleType]] = (),
310 |         max_frames: int = 100,
311 |     ) -> "Traceback":
312 |         """Create a traceback from exception info
313 | 
314 |         Args:
315 |             exc_type (Type[BaseException]): Exception type.
316 |             exc_value (BaseException): Exception value.
317 |             traceback (TracebackType): Python Traceback object.
318 |             width (Optional[int], optional): Number of characters used to traceback. Defaults to 100.
319 |             extra_lines (int, optional): Additional lines of code to render. Defaults to 3.
320 |             theme (str, optional): Override pygments theme used in traceback.
321 |             word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False.
322 |             show_locals (bool, optional): Enable display of local variables. Defaults to False.
323 |             indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True.
324 |             locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
325 |                 Defaults to 10.
326 |             locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
327 |             locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True.
328 |             locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False.
329 |             suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback.
330 |             max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100.
331 | 
332 |         Returns:
333 |             Traceback: A Traceback instance that may be printed.
334 |         """
335 |         rich_traceback = cls.extract(
336 |             exc_type,
337 |             exc_value,
338 |             traceback,
339 |             show_locals=show_locals,
340 |             locals_max_length=locals_max_length,
341 |             locals_max_string=locals_max_string,
342 |             locals_hide_dunder=locals_hide_dunder,
343 |             locals_hide_sunder=locals_hide_sunder,
344 |         )
345 | 
346 |         return cls(
347 |             rich_traceback,
348 |             width=width,
349 |             extra_lines=extra_lines,
350 |             theme=theme,
351 |             word_wrap=word_wrap,
352 |             show_locals=show_locals,
353 |             indent_guides=indent_guides,
354 |             locals_max_length=locals_max_length,
355 |             locals_max_string=locals_max_string,
356 |             locals_hide_dunder=locals_hide_dunder,
357 |             locals_hide_sunder=locals_hide_sunder,
358 |             suppress=suppress,
359 |             max_frames=max_frames,
360 |         )
361 | 
362 |     @classmethod
363 |     def extract(
364 |         cls,
365 |         exc_type: Type[BaseException],
366 |         exc_value: BaseException,
367 |         traceback: Optional[TracebackType],
368 |         *,
369 |         show_locals: bool = False,
370 |         locals_max_length: int = LOCALS_MAX_LENGTH,
371 |         locals_max_string: int = LOCALS_MAX_STRING,
372 |         locals_hide_dunder: bool = True,
373 |         locals_hide_sunder: bool = False,
374 |     ) -> Trace:
375 |         """Extract traceback information.
376 | 
377 |         Args:
378 |             exc_type (Type[BaseException]): Exception type.
379 |             exc_value (BaseException): Exception value.
380 |             traceback (TracebackType): Python Traceback object.
381 |             show_locals (bool, optional): Enable display of local variables. Defaults to False.
382 |             locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
383 |                 Defaults to 10.
384 |             locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
385 |             locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True.
386 |             locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False.
387 | 
388 |         Returns:
389 |             Trace: A Trace instance which you can use to construct a `Traceback`.
390 |         """
391 | 
392 |         stacks: List[Stack] = []
393 |         is_cause = False
394 | 
395 |         from pip._vendor.rich import _IMPORT_CWD
396 | 
397 |         def safe_str(_object: Any) -> str:
398 |             """Don't allow exceptions from __str__ to propagate."""
399 |             try:
400 |                 return str(_object)
401 |             except Exception:
402 |                 return "<exception str() failed>"
403 | 
404 |         while True:
405 |             stack = Stack(
406 |                 exc_type=safe_str(exc_type.__name__),
407 |                 exc_value=safe_str(exc_value),
408 |                 is_cause=is_cause,
409 |             )
410 | 
411 |             if isinstance(exc_value, SyntaxError):
412 |                 stack.syntax_error = _SyntaxError(
413 |                     offset=exc_value.offset or 0,
414 |                     filename=exc_value.filename or "?",
415 |                     lineno=exc_value.lineno or 0,
416 |                     line=exc_value.text or "",
417 |                     msg=exc_value.msg,
418 |                 )
419 | 
420 |             stacks.append(stack)
421 |             append = stack.frames.append
422 | 
423 |             def get_locals(
424 |                 iter_locals: Iterable[Tuple[str, object]]
425 |             ) -> Iterable[Tuple[str, object]]:
426 |                 """Extract locals from an iterator of key pairs."""
427 |                 if not (locals_hide_dunder or locals_hide_sunder):
428 |                     yield from iter_locals
429 |                     return
430 |                 for key, value in iter_locals:
431 |                     if locals_hide_dunder and key.startswith("__"):
432 |                         continue
433 |                     if locals_hide_sunder and key.startswith("_"):
434 |                         continue
435 |                     yield key, value
436 | 
437 |             for frame_summary, line_no in walk_tb(traceback):
438 |                 filename = frame_summary.f_code.co_filename
439 |                 if filename and not filename.startswith("<"):
440 |                     if not os.path.isabs(filename):
441 |                         filename = os.path.join(_IMPORT_CWD, filename)
442 |                 if frame_summary.f_locals.get("_rich_traceback_omit", False):
443 |                     continue
444 | 
445 |                 frame = Frame(
446 |                     filename=filename or "?",
447 |                     lineno=line_no,
448 |                     name=frame_summary.f_code.co_name,
449 |                     locals={
450 |                         key: pretty.traverse(
451 |                             value,
452 |                             max_length=locals_max_length,
453 |                             max_string=locals_max_string,
454 |                         )
455 |                         for key, value in get_locals(frame_summary.f_locals.items())
456 |                     }
457 |                     if show_locals
458 |                     else None,
459 |                 )
460 |                 append(frame)
461 |                 if frame_summary.f_locals.get("_rich_traceback_guard", False):
462 |                     del stack.frames[:]
463 | 
464 |             cause = getattr(exc_value, "__cause__", None)
465 |             if cause:
466 |                 exc_type = cause.__class__
467 |                 exc_value = cause
468 |                 # __traceback__ can be None, e.g. for exceptions raised by the
469 |                 # 'multiprocessing' module
470 |                 traceback = cause.__traceback__
471 |                 is_cause = True
472 |                 continue
473 | 
474 |             cause = exc_value.__context__
475 |             if cause and not getattr(exc_value, "__suppress_context__", False):
476 |                 exc_type = cause.__class__
477 |                 exc_value = cause
478 |                 traceback = cause.__traceback__
479 |                 is_cause = False
480 |                 continue
481 |             # No cover, code is reached but coverage doesn't recognize it.
482 |             break  # pragma: no cover
483 | 
484 |         trace = Trace(stacks=stacks)
485 |         return trace
486 | 
487 |     def __rich_console__(
488 |         self, console: Console, options: ConsoleOptions
489 |     ) -> RenderResult:
490 |         theme = self.theme
491 |         background_style = theme.get_background_style()
492 |         token_style = theme.get_style_for_token
493 | 
494 |         traceback_theme = Theme(
495 |             {
496 |                 "pretty": token_style(TextToken),
497 |                 "pygments.text": token_style(Token),
498 |                 "pygments.string": token_style(String),
499 |                 "pygments.function": token_style(Name.Function),
500 |                 "pygments.number": token_style(Number),
501 |                 "repr.indent": token_style(Comment) + Style(dim=True),
502 |                 "repr.str": token_style(String),
503 |                 "repr.brace": token_style(TextToken) + Style(bold=True),
504 |                 "repr.number": token_style(Number),
505 |                 "repr.bool_true": token_style(Keyword.Constant),
506 |                 "repr.bool_false": token_style(Keyword.Constant),
507 |                 "repr.none": token_style(Keyword.Constant),
508 |                 "scope.border": token_style(String.Delimiter),
509 |                 "scope.equals": token_style(Operator),
510 |                 "scope.key": token_style(Name),
511 |                 "scope.key.special": token_style(Name.Constant) + Style(dim=True),
512 |             },
513 |             inherit=False,
514 |         )
515 | 
516 |         highlighter = ReprHighlighter()
517 |         for last, stack in loop_last(reversed(self.trace.stacks)):
518 |             if stack.frames:
519 |                 stack_renderable: ConsoleRenderable = Panel(
520 |                     self._render_stack(stack),
521 |                     title="[traceback.title]Traceback [dim](most recent call last)",
522 |                     style=background_style,
523 |                     border_style="traceback.border",
524 |                     expand=True,
525 |                     padding=(0, 1),
526 |                 )
527 |                 stack_renderable = Constrain(stack_renderable, self.width)
528 |                 with console.use_theme(traceback_theme):
529 |                     yield stack_renderable
530 |             if stack.syntax_error is not None:
531 |                 with console.use_theme(traceback_theme):
532 |                     yield Constrain(
533 |                         Panel(
534 |                             self._render_syntax_error(stack.syntax_error),
535 |                             style=background_style,
536 |                             border_style="traceback.border.syntax_error",
537 |                             expand=True,
538 |                             padding=(0, 1),
539 |                             width=self.width,
540 |                         ),
541 |                         self.width,
542 |                     )
543 |                 yield Text.assemble(
544 |                     (f"{stack.exc_type}: ", "traceback.exc_type"),
545 |                     highlighter(stack.syntax_error.msg),
546 |                 )
547 |             elif stack.exc_value:
548 |                 yield Text.assemble(
549 |                     (f"{stack.exc_type}: ", "traceback.exc_type"),
550 |                     highlighter(stack.exc_value),
551 |                 )
552 |             else:
553 |                 yield Text.assemble((f"{stack.exc_type}", "traceback.exc_type"))
554 | 
555 |             if not last:
556 |                 if stack.is_cause:
557 |                     yield Text.from_markup(
558 |                         "\n[i]The above exception was the direct cause of the following exception:\n",
559 |                     )
560 |                 else:
561 |                     yield Text.from_markup(
562 |                         "\n[i]During handling of the above exception, another exception occurred:\n",
563 |                     )
564 | 
565 |     @group()
566 |     def _render_syntax_error(self, syntax_error: _SyntaxError) -> RenderResult:
567 |         highlighter = ReprHighlighter()
568 |         path_highlighter = PathHighlighter()
569 |         if syntax_error.filename != "<stdin>":
570 |             if os.path.exists(syntax_error.filename):
571 |                 text = Text.assemble(
572 |                     (f" {syntax_error.filename}", "pygments.string"),
573 |                     (":", "pygments.text"),
574 |                     (str(syntax_error.lineno), "pygments.number"),
575 |                     style="pygments.text",
576 |                 )
577 |                 yield path_highlighter(text)
578 |         syntax_error_text = highlighter(syntax_error.line.rstrip())
579 |         syntax_error_text.no_wrap = True
580 |         offset = min(syntax_error.offset - 1, len(syntax_error_text))
581 |         syntax_error_text.stylize("bold underline", offset, offset)
582 |         syntax_error_text += Text.from_markup(
583 |             "\n" + " " * offset + "[traceback.offset]▲[/]",
584 |             style="pygments.text",
585 |         )
586 |         yield syntax_error_text
587 | 
588 |     @classmethod
589 |     def _guess_lexer(cls, filename: str, code: str) -> str:
590 |         ext = os.path.splitext(filename)[-1]
591 |         if not ext:
592 |             # No extension, look at first line to see if it is a hashbang
593 |             # Note, this is an educated guess and not a guarantee
594 |             # If it fails, the only downside is that the code is highlighted strangely
595 |             new_line_index = code.index("\n")
596 |             first_line = code[:new_line_index] if new_line_index != -1 else code
597 |             if first_line.startswith("#!") and "python" in first_line.lower():
598 |                 return "python"
599 |         try:
600 |             return cls.LEXERS.get(ext) or guess_lexer_for_filename(filename, code).name
601 |         except ClassNotFound:
602 |             return "text"
603 | 
604 |     @group()
605 |     def _render_stack(self, stack: Stack) -> RenderResult:
606 |         path_highlighter = PathHighlighter()
607 |         theme = self.theme
608 | 
609 |         def read_code(filename: str) -> str:
610 |             """Read files, and cache results on filename.
611 | 
612 |             Args:
613 |                 filename (str): Filename to read
614 | 
615 |             Returns:
616 |                 str: Contents of file
617 |             """
618 |             return "".join(linecache.getlines(filename))
619 | 
620 |         def render_locals(frame: Frame) -> Iterable[ConsoleRenderable]:
621 |             if frame.locals:
622 |                 yield render_scope(
623 |                     frame.locals,
624 |                     title="locals",
625 |                     indent_guides=self.indent_guides,
626 |                     max_length=self.locals_max_length,
627 |                     max_string=self.locals_max_string,
628 |                 )
629 | 
630 |         exclude_frames: Optional[range] = None
631 |         if self.max_frames != 0:
632 |             exclude_frames = range(
633 |                 self.max_frames // 2,
634 |                 len(stack.frames) - self.max_frames // 2,
635 |             )
636 | 
637 |         excluded = False
638 |         for frame_index, frame in enumerate(stack.frames):
639 |             if exclude_frames and frame_index in exclude_frames:
640 |                 excluded = True
641 |                 continue
642 | 
643 |             if excluded:
644 |                 assert exclude_frames is not None
645 |                 yield Text(
646 |                     f"\n... {len(exclude_frames)} frames hidden ...",
647 |                     justify="center",
648 |                     style="traceback.error",
649 |                 )
650 |                 excluded = False
651 | 
652 |             first = frame_index == 0
653 |             frame_filename = frame.filename
654 |             suppressed = any(frame_filename.startswith(path) for path in self.suppress)
655 | 
656 |             if os.path.exists(frame.filename):
657 |                 text = Text.assemble(
658 |                     path_highlighter(Text(frame.filename, style="pygments.string")),
659 |                     (":", "pygments.text"),
660 |                     (str(frame.lineno), "pygments.number"),
661 |                     " in ",
662 |                     (frame.name, "pygments.function"),
663 |                     style="pygments.text",
664 |                 )
665 |             else:
666 |                 text = Text.assemble(
667 |                     "in ",
668 |                     (frame.name, "pygments.function"),
669 |                     (":", "pygments.text"),
670 |                     (str(frame.lineno), "pygments.number"),
671 |                     style="pygments.text",
672 |                 )
673 |             if not frame.filename.startswith("<") and not first:
674 |                 yield ""
675 |             yield text
676 |             if frame.filename.startswith("<"):
677 |                 yield from render_locals(frame)
678 |                 continue
679 |             if not suppressed:
680 |                 try:
681 |                     code = read_code(frame.filename)
682 |                     if not code:
683 |                         # code may be an empty string if the file doesn't exist, OR
684 |                         # if the traceback filename is generated dynamically
685 |                         continue
686 |                     lexer_name = self._guess_lexer(frame.filename, code)
687 |                     syntax = Syntax(
688 |                         code,
689 |                         lexer_name,
690 |                         theme=theme,
691 |                         line_numbers=True,
692 |                         line_range=(
693 |                             frame.lineno - self.extra_lines,
694 |                             frame.lineno + self.extra_lines,
695 |                         ),
696 |                         highlight_lines={frame.lineno},
697 |                         word_wrap=self.word_wrap,
698 |                         code_width=88,
699 |                         indent_guides=self.indent_guides,
700 |                         dedent=False,
701 |                     )
702 |                     yield ""
703 |                 except Exception as error:
704 |                     yield Text.assemble(
705 |                         (f"\n{error}", "traceback.error"),
706 |                     )
707 |                 else:
708 |                     yield (
709 |                         Columns(
710 |                             [
711 |                                 syntax,
712 |                                 *render_locals(frame),
713 |                             ],
714 |                             padding=1,
715 |                         )
716 |                         if frame.locals
717 |                         else syntax
718 |                     )
719 | 
720 | 
721 | if __name__ == "__main__":  # pragma: no cover
722 |     from .console import Console
723 | 
724 |     console = Console()
725 |     import sys
726 | 
727 |     def bar(a: Any) -> None:  # 这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑
728 |         one = 1
729 |         print(one / a)
730 | 
731 |     def foo(a: Any) -> None:
732 |         _rich_traceback_guard = True
733 |         zed = {
734 |             "characters": {
735 |                 "Paul Atreides",
736 |                 "Vladimir Harkonnen",
737 |                 "Thufir Hawat",
738 |                 "Duncan Idaho",
739 |             },
740 |             "atomic_types": (None, False, True),
741 |         }
742 |         bar(a)
743 | 
744 |     def error() -> None:
745 |         try:
746 |             try:
747 |                 foo(0)
748 |             except:
749 |                 slfkjsldkfj  # type: ignore[name-defined]
750 |         except:
751 |             console.print_exception(show_locals=True)
752 | 
753 |     error()
754 | 
```
Page 90/168FirstPrevNextLast