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

# Directory Structure

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

# Files

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

```python
  1 | """Unix."""
  2 | 
  3 | from __future__ import annotations
  4 | 
  5 | import os
  6 | import sys
  7 | from configparser import ConfigParser
  8 | from pathlib import Path
  9 | from typing import Iterator, NoReturn
 10 | 
 11 | from .api import PlatformDirsABC
 12 | 
 13 | if sys.platform == "win32":
 14 | 
 15 |     def getuid() -> NoReturn:
 16 |         msg = "should only be used on Unix"
 17 |         raise RuntimeError(msg)
 18 | 
 19 | else:
 20 |     from os import getuid
 21 | 
 22 | 
 23 | class Unix(PlatformDirsABC):  # noqa: PLR0904
 24 |     """
 25 |     On Unix/Linux, we follow the `XDG Basedir Spec <https://specifications.freedesktop.org/basedir-spec/basedir-spec-
 26 |     latest.html>`_.
 27 | 
 28 |     The spec allows overriding directories with environment variables. The examples shown are the default values,
 29 |     alongside the name of the environment variable that overrides them. Makes use of the `appname
 30 |     <platformdirs.api.PlatformDirsABC.appname>`, `version <platformdirs.api.PlatformDirsABC.version>`, `multipath
 31 |     <platformdirs.api.PlatformDirsABC.multipath>`, `opinion <platformdirs.api.PlatformDirsABC.opinion>`, `ensure_exists
 32 |     <platformdirs.api.PlatformDirsABC.ensure_exists>`.
 33 | 
 34 |     """
 35 | 
 36 |     @property
 37 |     def user_data_dir(self) -> str:
 38 |         """
 39 |         :return: data directory tied to the user, e.g. ``~/.local/share/$appname/$version`` or
 40 |          ``$XDG_DATA_HOME/$appname/$version``
 41 |         """
 42 |         path = os.environ.get("XDG_DATA_HOME", "")
 43 |         if not path.strip():
 44 |             path = os.path.expanduser("~/.local/share")  # noqa: PTH111
 45 |         return self._append_app_name_and_version(path)
 46 | 
 47 |     @property
 48 |     def _site_data_dirs(self) -> list[str]:
 49 |         path = os.environ.get("XDG_DATA_DIRS", "")
 50 |         if not path.strip():
 51 |             path = f"/usr/local/share{os.pathsep}/usr/share"
 52 |         return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)]
 53 | 
 54 |     @property
 55 |     def site_data_dir(self) -> str:
 56 |         """
 57 |         :return: data directories shared by users (if `multipath <platformdirs.api.PlatformDirsABC.multipath>` is
 58 |          enabled and ``XDG_DATA_DIRS`` is set and a multi path the response is also a multi path separated by the
 59 |          OS path separator), e.g. ``/usr/local/share/$appname/$version`` or ``/usr/share/$appname/$version``
 60 |         """
 61 |         # XDG default for $XDG_DATA_DIRS; only first, if multipath is False
 62 |         dirs = self._site_data_dirs
 63 |         if not self.multipath:
 64 |             return dirs[0]
 65 |         return os.pathsep.join(dirs)
 66 | 
 67 |     @property
 68 |     def user_config_dir(self) -> str:
 69 |         """
 70 |         :return: config directory tied to the user, e.g. ``~/.config/$appname/$version`` or
 71 |          ``$XDG_CONFIG_HOME/$appname/$version``
 72 |         """
 73 |         path = os.environ.get("XDG_CONFIG_HOME", "")
 74 |         if not path.strip():
 75 |             path = os.path.expanduser("~/.config")  # noqa: PTH111
 76 |         return self._append_app_name_and_version(path)
 77 | 
 78 |     @property
 79 |     def _site_config_dirs(self) -> list[str]:
 80 |         path = os.environ.get("XDG_CONFIG_DIRS", "")
 81 |         if not path.strip():
 82 |             path = "/etc/xdg"
 83 |         return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)]
 84 | 
 85 |     @property
 86 |     def site_config_dir(self) -> str:
 87 |         """
 88 |         :return: config directories shared by users (if `multipath <platformdirs.api.PlatformDirsABC.multipath>`
 89 |          is enabled and ``XDG_CONFIG_DIRS`` is set and a multi path the response is also a multi path separated by
 90 |          the OS path separator), e.g. ``/etc/xdg/$appname/$version``
 91 |         """
 92 |         # XDG default for $XDG_CONFIG_DIRS only first, if multipath is False
 93 |         dirs = self._site_config_dirs
 94 |         if not self.multipath:
 95 |             return dirs[0]
 96 |         return os.pathsep.join(dirs)
 97 | 
 98 |     @property
 99 |     def user_cache_dir(self) -> str:
100 |         """
101 |         :return: cache directory tied to the user, e.g. ``~/.cache/$appname/$version`` or
102 |          ``~/$XDG_CACHE_HOME/$appname/$version``
103 |         """
104 |         path = os.environ.get("XDG_CACHE_HOME", "")
105 |         if not path.strip():
106 |             path = os.path.expanduser("~/.cache")  # noqa: PTH111
107 |         return self._append_app_name_and_version(path)
108 | 
109 |     @property
110 |     def site_cache_dir(self) -> str:
111 |         """:return: cache directory shared by users, e.g. ``/var/cache/$appname/$version``"""
112 |         return self._append_app_name_and_version("/var/cache")
113 | 
114 |     @property
115 |     def user_state_dir(self) -> str:
116 |         """
117 |         :return: state directory tied to the user, e.g. ``~/.local/state/$appname/$version`` or
118 |          ``$XDG_STATE_HOME/$appname/$version``
119 |         """
120 |         path = os.environ.get("XDG_STATE_HOME", "")
121 |         if not path.strip():
122 |             path = os.path.expanduser("~/.local/state")  # noqa: PTH111
123 |         return self._append_app_name_and_version(path)
124 | 
125 |     @property
126 |     def user_log_dir(self) -> str:
127 |         """:return: log directory tied to the user, same as `user_state_dir` if not opinionated else ``log`` in it"""
128 |         path = self.user_state_dir
129 |         if self.opinion:
130 |             path = os.path.join(path, "log")  # noqa: PTH118
131 |             self._optionally_create_directory(path)
132 |         return path
133 | 
134 |     @property
135 |     def user_documents_dir(self) -> str:
136 |         """:return: documents directory tied to the user, e.g. ``~/Documents``"""
137 |         return _get_user_media_dir("XDG_DOCUMENTS_DIR", "~/Documents")
138 | 
139 |     @property
140 |     def user_downloads_dir(self) -> str:
141 |         """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
142 |         return _get_user_media_dir("XDG_DOWNLOAD_DIR", "~/Downloads")
143 | 
144 |     @property
145 |     def user_pictures_dir(self) -> str:
146 |         """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
147 |         return _get_user_media_dir("XDG_PICTURES_DIR", "~/Pictures")
148 | 
149 |     @property
150 |     def user_videos_dir(self) -> str:
151 |         """:return: videos directory tied to the user, e.g. ``~/Videos``"""
152 |         return _get_user_media_dir("XDG_VIDEOS_DIR", "~/Videos")
153 | 
154 |     @property
155 |     def user_music_dir(self) -> str:
156 |         """:return: music directory tied to the user, e.g. ``~/Music``"""
157 |         return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music")
158 | 
159 |     @property
160 |     def user_desktop_dir(self) -> str:
161 |         """:return: desktop directory tied to the user, e.g. ``~/Desktop``"""
162 |         return _get_user_media_dir("XDG_DESKTOP_DIR", "~/Desktop")
163 | 
164 |     @property
165 |     def user_runtime_dir(self) -> str:
166 |         """
167 |         :return: runtime directory tied to the user, e.g. ``/run/user/$(id -u)/$appname/$version`` or
168 |          ``$XDG_RUNTIME_DIR/$appname/$version``.
169 | 
170 |          For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/user/$(id -u)/$appname/$version`` if
171 |          exists, otherwise ``/tmp/runtime-$(id -u)/$appname/$version``, if``$XDG_RUNTIME_DIR``
172 |          is not set.
173 |         """
174 |         path = os.environ.get("XDG_RUNTIME_DIR", "")
175 |         if not path.strip():
176 |             if sys.platform.startswith(("freebsd", "openbsd", "netbsd")):
177 |                 path = f"/var/run/user/{getuid()}"
178 |                 if not Path(path).exists():
179 |                     path = f"/tmp/runtime-{getuid()}"  # noqa: S108
180 |             else:
181 |                 path = f"/run/user/{getuid()}"
182 |         return self._append_app_name_and_version(path)
183 | 
184 |     @property
185 |     def site_runtime_dir(self) -> str:
186 |         """
187 |         :return: runtime directory shared by users, e.g. ``/run/$appname/$version`` or \
188 |         ``$XDG_RUNTIME_DIR/$appname/$version``.
189 | 
190 |         Note that this behaves almost exactly like `user_runtime_dir` if ``$XDG_RUNTIME_DIR`` is set, but will
191 |         fall back to paths associated to the root user instead of a regular logged-in user if it's not set.
192 | 
193 |         If you wish to ensure that a logged-in root user path is returned e.g. ``/run/user/0``, use `user_runtime_dir`
194 |         instead.
195 | 
196 |         For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/$appname/$version`` if ``$XDG_RUNTIME_DIR`` is not set.
197 |         """
198 |         path = os.environ.get("XDG_RUNTIME_DIR", "")
199 |         if not path.strip():
200 |             if sys.platform.startswith(("freebsd", "openbsd", "netbsd")):
201 |                 path = "/var/run"
202 |             else:
203 |                 path = "/run"
204 |         return self._append_app_name_and_version(path)
205 | 
206 |     @property
207 |     def site_data_path(self) -> Path:
208 |         """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
209 |         return self._first_item_as_path_if_multipath(self.site_data_dir)
210 | 
211 |     @property
212 |     def site_config_path(self) -> Path:
213 |         """:return: config path shared by the users, returns the first item, even if ``multipath`` is set to ``True``"""
214 |         return self._first_item_as_path_if_multipath(self.site_config_dir)
215 | 
216 |     @property
217 |     def site_cache_path(self) -> Path:
218 |         """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
219 |         return self._first_item_as_path_if_multipath(self.site_cache_dir)
220 | 
221 |     def _first_item_as_path_if_multipath(self, directory: str) -> Path:
222 |         if self.multipath:
223 |             # If multipath is True, the first path is returned.
224 |             directory = directory.split(os.pathsep)[0]
225 |         return Path(directory)
226 | 
227 |     def iter_config_dirs(self) -> Iterator[str]:
228 |         """:yield: all user and site configuration directories."""
229 |         yield self.user_config_dir
230 |         yield from self._site_config_dirs
231 | 
232 |     def iter_data_dirs(self) -> Iterator[str]:
233 |         """:yield: all user and site data directories."""
234 |         yield self.user_data_dir
235 |         yield from self._site_data_dirs
236 | 
237 | 
238 | def _get_user_media_dir(env_var: str, fallback_tilde_path: str) -> str:
239 |     media_dir = _get_user_dirs_folder(env_var)
240 |     if media_dir is None:
241 |         media_dir = os.environ.get(env_var, "").strip()
242 |         if not media_dir:
243 |             media_dir = os.path.expanduser(fallback_tilde_path)  # noqa: PTH111
244 | 
245 |     return media_dir
246 | 
247 | 
248 | def _get_user_dirs_folder(key: str) -> str | None:
249 |     """
250 |     Return directory from user-dirs.dirs config file.
251 | 
252 |     See https://freedesktop.org/wiki/Software/xdg-user-dirs/.
253 | 
254 |     """
255 |     user_dirs_config_path = Path(Unix().user_config_dir) / "user-dirs.dirs"
256 |     if user_dirs_config_path.exists():
257 |         parser = ConfigParser()
258 | 
259 |         with user_dirs_config_path.open() as stream:
260 |             # Add fake section header, so ConfigParser doesn't complain
261 |             parser.read_string(f"[top]\n{stream.read()}")
262 | 
263 |         if key not in parser["top"]:
264 |             return None
265 | 
266 |         path = parser["top"][key].strip('"')
267 |         # Handle relative home paths
268 |         return path.replace("$HOME", os.path.expanduser("~"))  # noqa: PTH111
269 | 
270 |     return None
271 | 
272 | 
273 | __all__ = [
274 |     "Unix",
275 | ]
276 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py:
--------------------------------------------------------------------------------

```python
  1 | # This file is dual licensed under the terms of the Apache License, Version
  2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository
  3 | # for complete details.
  4 | 
  5 | from __future__ import annotations
  6 | 
  7 | import operator
  8 | import os
  9 | import platform
 10 | import sys
 11 | from typing import Any, Callable, TypedDict, cast
 12 | 
 13 | from ._parser import MarkerAtom, MarkerList, Op, Value, Variable
 14 | from ._parser import parse_marker as _parse_marker
 15 | from ._tokenizer import ParserSyntaxError
 16 | from .specifiers import InvalidSpecifier, Specifier
 17 | from .utils import canonicalize_name
 18 | 
 19 | __all__ = [
 20 |     "InvalidMarker",
 21 |     "UndefinedComparison",
 22 |     "UndefinedEnvironmentName",
 23 |     "Marker",
 24 |     "default_environment",
 25 | ]
 26 | 
 27 | Operator = Callable[[str, str], bool]
 28 | 
 29 | 
 30 | class InvalidMarker(ValueError):
 31 |     """
 32 |     An invalid marker was found, users should refer to PEP 508.
 33 |     """
 34 | 
 35 | 
 36 | class UndefinedComparison(ValueError):
 37 |     """
 38 |     An invalid operation was attempted on a value that doesn't support it.
 39 |     """
 40 | 
 41 | 
 42 | class UndefinedEnvironmentName(ValueError):
 43 |     """
 44 |     A name was attempted to be used that does not exist inside of the
 45 |     environment.
 46 |     """
 47 | 
 48 | 
 49 | class Environment(TypedDict):
 50 |     implementation_name: str
 51 |     """The implementation's identifier, e.g. ``'cpython'``."""
 52 | 
 53 |     implementation_version: str
 54 |     """
 55 |     The implementation's version, e.g. ``'3.13.0a2'`` for CPython 3.13.0a2, or
 56 |     ``'7.3.13'`` for PyPy3.10 v7.3.13.
 57 |     """
 58 | 
 59 |     os_name: str
 60 |     """
 61 |     The value of :py:data:`os.name`. The name of the operating system dependent module
 62 |     imported, e.g. ``'posix'``.
 63 |     """
 64 | 
 65 |     platform_machine: str
 66 |     """
 67 |     Returns the machine type, e.g. ``'i386'``.
 68 | 
 69 |     An empty string if the value cannot be determined.
 70 |     """
 71 | 
 72 |     platform_release: str
 73 |     """
 74 |     The system's release, e.g. ``'2.2.0'`` or ``'NT'``.
 75 | 
 76 |     An empty string if the value cannot be determined.
 77 |     """
 78 | 
 79 |     platform_system: str
 80 |     """
 81 |     The system/OS name, e.g. ``'Linux'``, ``'Windows'`` or ``'Java'``.
 82 | 
 83 |     An empty string if the value cannot be determined.
 84 |     """
 85 | 
 86 |     platform_version: str
 87 |     """
 88 |     The system's release version, e.g. ``'#3 on degas'``.
 89 | 
 90 |     An empty string if the value cannot be determined.
 91 |     """
 92 | 
 93 |     python_full_version: str
 94 |     """
 95 |     The Python version as string ``'major.minor.patchlevel'``.
 96 | 
 97 |     Note that unlike the Python :py:data:`sys.version`, this value will always include
 98 |     the patchlevel (it defaults to 0).
 99 |     """
100 | 
101 |     platform_python_implementation: str
102 |     """
103 |     A string identifying the Python implementation, e.g. ``'CPython'``.
104 |     """
105 | 
106 |     python_version: str
107 |     """The Python version as string ``'major.minor'``."""
108 | 
109 |     sys_platform: str
110 |     """
111 |     This string contains a platform identifier that can be used to append
112 |     platform-specific components to :py:data:`sys.path`, for instance.
113 | 
114 |     For Unix systems, except on Linux and AIX, this is the lowercased OS name as
115 |     returned by ``uname -s`` with the first part of the version as returned by
116 |     ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, at the time when Python
117 |     was built.
118 |     """
119 | 
120 | 
121 | def _normalize_extra_values(results: Any) -> Any:
122 |     """
123 |     Normalize extra values.
124 |     """
125 |     if isinstance(results[0], tuple):
126 |         lhs, op, rhs = results[0]
127 |         if isinstance(lhs, Variable) and lhs.value == "extra":
128 |             normalized_extra = canonicalize_name(rhs.value)
129 |             rhs = Value(normalized_extra)
130 |         elif isinstance(rhs, Variable) and rhs.value == "extra":
131 |             normalized_extra = canonicalize_name(lhs.value)
132 |             lhs = Value(normalized_extra)
133 |         results[0] = lhs, op, rhs
134 |     return results
135 | 
136 | 
137 | def _format_marker(
138 |     marker: list[str] | MarkerAtom | str, first: bool | None = True
139 | ) -> str:
140 |     assert isinstance(marker, (list, tuple, str))
141 | 
142 |     # Sometimes we have a structure like [[...]] which is a single item list
143 |     # where the single item is itself it's own list. In that case we want skip
144 |     # the rest of this function so that we don't get extraneous () on the
145 |     # outside.
146 |     if (
147 |         isinstance(marker, list)
148 |         and len(marker) == 1
149 |         and isinstance(marker[0], (list, tuple))
150 |     ):
151 |         return _format_marker(marker[0])
152 | 
153 |     if isinstance(marker, list):
154 |         inner = (_format_marker(m, first=False) for m in marker)
155 |         if first:
156 |             return " ".join(inner)
157 |         else:
158 |             return "(" + " ".join(inner) + ")"
159 |     elif isinstance(marker, tuple):
160 |         return " ".join([m.serialize() for m in marker])
161 |     else:
162 |         return marker
163 | 
164 | 
165 | _operators: dict[str, Operator] = {
166 |     "in": lambda lhs, rhs: lhs in rhs,
167 |     "not in": lambda lhs, rhs: lhs not in rhs,
168 |     "<": operator.lt,
169 |     "<=": operator.le,
170 |     "==": operator.eq,
171 |     "!=": operator.ne,
172 |     ">=": operator.ge,
173 |     ">": operator.gt,
174 | }
175 | 
176 | 
177 | def _eval_op(lhs: str, op: Op, rhs: str) -> bool:
178 |     try:
179 |         spec = Specifier("".join([op.serialize(), rhs]))
180 |     except InvalidSpecifier:
181 |         pass
182 |     else:
183 |         return spec.contains(lhs, prereleases=True)
184 | 
185 |     oper: Operator | None = _operators.get(op.serialize())
186 |     if oper is None:
187 |         raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.")
188 | 
189 |     return oper(lhs, rhs)
190 | 
191 | 
192 | def _normalize(*values: str, key: str) -> tuple[str, ...]:
193 |     # PEP 685 – Comparison of extra names for optional distribution dependencies
194 |     # https://peps.python.org/pep-0685/
195 |     # > When comparing extra names, tools MUST normalize the names being
196 |     # > compared using the semantics outlined in PEP 503 for names
197 |     if key == "extra":
198 |         return tuple(canonicalize_name(v) for v in values)
199 | 
200 |     # other environment markers don't have such standards
201 |     return values
202 | 
203 | 
204 | def _evaluate_markers(markers: MarkerList, environment: dict[str, str]) -> bool:
205 |     groups: list[list[bool]] = [[]]
206 | 
207 |     for marker in markers:
208 |         assert isinstance(marker, (list, tuple, str))
209 | 
210 |         if isinstance(marker, list):
211 |             groups[-1].append(_evaluate_markers(marker, environment))
212 |         elif isinstance(marker, tuple):
213 |             lhs, op, rhs = marker
214 | 
215 |             if isinstance(lhs, Variable):
216 |                 environment_key = lhs.value
217 |                 lhs_value = environment[environment_key]
218 |                 rhs_value = rhs.value
219 |             else:
220 |                 lhs_value = lhs.value
221 |                 environment_key = rhs.value
222 |                 rhs_value = environment[environment_key]
223 | 
224 |             lhs_value, rhs_value = _normalize(lhs_value, rhs_value, key=environment_key)
225 |             groups[-1].append(_eval_op(lhs_value, op, rhs_value))
226 |         else:
227 |             assert marker in ["and", "or"]
228 |             if marker == "or":
229 |                 groups.append([])
230 | 
231 |     return any(all(item) for item in groups)
232 | 
233 | 
234 | def format_full_version(info: sys._version_info) -> str:
235 |     version = "{0.major}.{0.minor}.{0.micro}".format(info)
236 |     kind = info.releaselevel
237 |     if kind != "final":
238 |         version += kind[0] + str(info.serial)
239 |     return version
240 | 
241 | 
242 | def default_environment() -> Environment:
243 |     iver = format_full_version(sys.implementation.version)
244 |     implementation_name = sys.implementation.name
245 |     return {
246 |         "implementation_name": implementation_name,
247 |         "implementation_version": iver,
248 |         "os_name": os.name,
249 |         "platform_machine": platform.machine(),
250 |         "platform_release": platform.release(),
251 |         "platform_system": platform.system(),
252 |         "platform_version": platform.version(),
253 |         "python_full_version": platform.python_version(),
254 |         "platform_python_implementation": platform.python_implementation(),
255 |         "python_version": ".".join(platform.python_version_tuple()[:2]),
256 |         "sys_platform": sys.platform,
257 |     }
258 | 
259 | 
260 | class Marker:
261 |     def __init__(self, marker: str) -> None:
262 |         # Note: We create a Marker object without calling this constructor in
263 |         #       packaging.requirements.Requirement. If any additional logic is
264 |         #       added here, make sure to mirror/adapt Requirement.
265 |         try:
266 |             self._markers = _normalize_extra_values(_parse_marker(marker))
267 |             # The attribute `_markers` can be described in terms of a recursive type:
268 |             # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]]
269 |             #
270 |             # For example, the following expression:
271 |             # python_version > "3.6" or (python_version == "3.6" and os_name == "unix")
272 |             #
273 |             # is parsed into:
274 |             # [
275 |             #     (<Variable('python_version')>, <Op('>')>, <Value('3.6')>),
276 |             #     'and',
277 |             #     [
278 |             #         (<Variable('python_version')>, <Op('==')>, <Value('3.6')>),
279 |             #         'or',
280 |             #         (<Variable('os_name')>, <Op('==')>, <Value('unix')>)
281 |             #     ]
282 |             # ]
283 |         except ParserSyntaxError as e:
284 |             raise InvalidMarker(str(e)) from e
285 | 
286 |     def __str__(self) -> str:
287 |         return _format_marker(self._markers)
288 | 
289 |     def __repr__(self) -> str:
290 |         return f"<Marker('{self}')>"
291 | 
292 |     def __hash__(self) -> int:
293 |         return hash((self.__class__.__name__, str(self)))
294 | 
295 |     def __eq__(self, other: Any) -> bool:
296 |         if not isinstance(other, Marker):
297 |             return NotImplemented
298 | 
299 |         return str(self) == str(other)
300 | 
301 |     def evaluate(self, environment: dict[str, str] | None = None) -> bool:
302 |         """Evaluate a marker.
303 | 
304 |         Return the boolean from evaluating the given marker against the
305 |         environment. environment is an optional argument to override all or
306 |         part of the determined environment.
307 | 
308 |         The environment is determined from the current Python process.
309 |         """
310 |         current_environment = cast("dict[str, str]", default_environment())
311 |         current_environment["extra"] = ""
312 |         # Work around platform.python_version() returning something that is not PEP 440
313 |         # compliant for non-tagged Python builds. We preserve default_environment()'s
314 |         # behavior of returning platform.python_version() verbatim, and leave it to the
315 |         # caller to provide a syntactically valid version if they want to override it.
316 |         if current_environment["python_full_version"].endswith("+"):
317 |             current_environment["python_full_version"] += "local"
318 |         if environment is not None:
319 |             current_environment.update(environment)
320 |             # The API used to allow setting extra to None. We need to handle this
321 |             # case for backwards compatibility.
322 |             if current_environment["extra"] is None:
323 |                 current_environment["extra"] = ""
324 | 
325 |         return _evaluate_markers(self._markers, current_environment)
326 | 
```

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

```python
  1 | from __future__ import annotations
  2 | 
  3 | import codecs
  4 | import re
  5 | 
  6 | from .structures import ImmutableList
  7 | 
  8 | 
  9 | class Accept(ImmutableList):
 10 |     """An :class:`Accept` object is just a list subclass for lists of
 11 |     ``(value, quality)`` tuples.  It is automatically sorted by specificity
 12 |     and quality.
 13 | 
 14 |     All :class:`Accept` objects work similar to a list but provide extra
 15 |     functionality for working with the data.  Containment checks are
 16 |     normalized to the rules of that header:
 17 | 
 18 |     >>> a = CharsetAccept([('ISO-8859-1', 1), ('utf-8', 0.7)])
 19 |     >>> a.best
 20 |     'ISO-8859-1'
 21 |     >>> 'iso-8859-1' in a
 22 |     True
 23 |     >>> 'UTF8' in a
 24 |     True
 25 |     >>> 'utf7' in a
 26 |     False
 27 | 
 28 |     To get the quality for an item you can use normal item lookup:
 29 | 
 30 |     >>> print a['utf-8']
 31 |     0.7
 32 |     >>> a['utf7']
 33 |     0
 34 | 
 35 |     .. versionchanged:: 0.5
 36 |        :class:`Accept` objects are forced immutable now.
 37 | 
 38 |     .. versionchanged:: 1.0.0
 39 |        :class:`Accept` internal values are no longer ordered
 40 |        alphabetically for equal quality tags. Instead the initial
 41 |        order is preserved.
 42 | 
 43 |     """
 44 | 
 45 |     def __init__(self, values=()):
 46 |         if values is None:
 47 |             list.__init__(self)
 48 |             self.provided = False
 49 |         elif isinstance(values, Accept):
 50 |             self.provided = values.provided
 51 |             list.__init__(self, values)
 52 |         else:
 53 |             self.provided = True
 54 |             values = sorted(
 55 |                 values, key=lambda x: (self._specificity(x[0]), x[1]), reverse=True
 56 |             )
 57 |             list.__init__(self, values)
 58 | 
 59 |     def _specificity(self, value):
 60 |         """Returns a tuple describing the value's specificity."""
 61 |         return (value != "*",)
 62 | 
 63 |     def _value_matches(self, value, item):
 64 |         """Check if a value matches a given accept item."""
 65 |         return item == "*" or item.lower() == value.lower()
 66 | 
 67 |     def __getitem__(self, key):
 68 |         """Besides index lookup (getting item n) you can also pass it a string
 69 |         to get the quality for the item.  If the item is not in the list, the
 70 |         returned quality is ``0``.
 71 |         """
 72 |         if isinstance(key, str):
 73 |             return self.quality(key)
 74 |         return list.__getitem__(self, key)
 75 | 
 76 |     def quality(self, key):
 77 |         """Returns the quality of the key.
 78 | 
 79 |         .. versionadded:: 0.6
 80 |            In previous versions you had to use the item-lookup syntax
 81 |            (eg: ``obj[key]`` instead of ``obj.quality(key)``)
 82 |         """
 83 |         for item, quality in self:
 84 |             if self._value_matches(key, item):
 85 |                 return quality
 86 |         return 0
 87 | 
 88 |     def __contains__(self, value):
 89 |         for item, _quality in self:
 90 |             if self._value_matches(value, item):
 91 |                 return True
 92 |         return False
 93 | 
 94 |     def __repr__(self):
 95 |         pairs_str = ", ".join(f"({x!r}, {y})" for x, y in self)
 96 |         return f"{type(self).__name__}([{pairs_str}])"
 97 | 
 98 |     def index(self, key):
 99 |         """Get the position of an entry or raise :exc:`ValueError`.
100 | 
101 |         :param key: The key to be looked up.
102 | 
103 |         .. versionchanged:: 0.5
104 |            This used to raise :exc:`IndexError`, which was inconsistent
105 |            with the list API.
106 |         """
107 |         if isinstance(key, str):
108 |             for idx, (item, _quality) in enumerate(self):
109 |                 if self._value_matches(key, item):
110 |                     return idx
111 |             raise ValueError(key)
112 |         return list.index(self, key)
113 | 
114 |     def find(self, key):
115 |         """Get the position of an entry or return -1.
116 | 
117 |         :param key: The key to be looked up.
118 |         """
119 |         try:
120 |             return self.index(key)
121 |         except ValueError:
122 |             return -1
123 | 
124 |     def values(self):
125 |         """Iterate over all values."""
126 |         for item in self:
127 |             yield item[0]
128 | 
129 |     def to_header(self):
130 |         """Convert the header set into an HTTP header string."""
131 |         result = []
132 |         for value, quality in self:
133 |             if quality != 1:
134 |                 value = f"{value};q={quality}"
135 |             result.append(value)
136 |         return ",".join(result)
137 | 
138 |     def __str__(self):
139 |         return self.to_header()
140 | 
141 |     def _best_single_match(self, match):
142 |         for client_item, quality in self:
143 |             if self._value_matches(match, client_item):
144 |                 # self is sorted by specificity descending, we can exit
145 |                 return client_item, quality
146 |         return None
147 | 
148 |     def best_match(self, matches, default=None):
149 |         """Returns the best match from a list of possible matches based
150 |         on the specificity and quality of the client. If two items have the
151 |         same quality and specificity, the one is returned that comes first.
152 | 
153 |         :param matches: a list of matches to check for
154 |         :param default: the value that is returned if none match
155 |         """
156 |         result = default
157 |         best_quality = -1
158 |         best_specificity = (-1,)
159 |         for server_item in matches:
160 |             match = self._best_single_match(server_item)
161 |             if not match:
162 |                 continue
163 |             client_item, quality = match
164 |             specificity = self._specificity(client_item)
165 |             if quality <= 0 or quality < best_quality:
166 |                 continue
167 |             # better quality or same quality but more specific => better match
168 |             if quality > best_quality or specificity > best_specificity:
169 |                 result = server_item
170 |                 best_quality = quality
171 |                 best_specificity = specificity
172 |         return result
173 | 
174 |     @property
175 |     def best(self):
176 |         """The best match as value."""
177 |         if self:
178 |             return self[0][0]
179 | 
180 | 
181 | _mime_split_re = re.compile(r"/|(?:\s*;\s*)")
182 | 
183 | 
184 | def _normalize_mime(value):
185 |     return _mime_split_re.split(value.lower())
186 | 
187 | 
188 | class MIMEAccept(Accept):
189 |     """Like :class:`Accept` but with special methods and behavior for
190 |     mimetypes.
191 |     """
192 | 
193 |     def _specificity(self, value):
194 |         return tuple(x != "*" for x in _mime_split_re.split(value))
195 | 
196 |     def _value_matches(self, value, item):
197 |         # item comes from the client, can't match if it's invalid.
198 |         if "/" not in item:
199 |             return False
200 | 
201 |         # value comes from the application, tell the developer when it
202 |         # doesn't look valid.
203 |         if "/" not in value:
204 |             raise ValueError(f"invalid mimetype {value!r}")
205 | 
206 |         # Split the match value into type, subtype, and a sorted list of parameters.
207 |         normalized_value = _normalize_mime(value)
208 |         value_type, value_subtype = normalized_value[:2]
209 |         value_params = sorted(normalized_value[2:])
210 | 
211 |         # "*/*" is the only valid value that can start with "*".
212 |         if value_type == "*" and value_subtype != "*":
213 |             raise ValueError(f"invalid mimetype {value!r}")
214 | 
215 |         # Split the accept item into type, subtype, and parameters.
216 |         normalized_item = _normalize_mime(item)
217 |         item_type, item_subtype = normalized_item[:2]
218 |         item_params = sorted(normalized_item[2:])
219 | 
220 |         # "*/not-*" from the client is invalid, can't match.
221 |         if item_type == "*" and item_subtype != "*":
222 |             return False
223 | 
224 |         return (
225 |             (item_type == "*" and item_subtype == "*")
226 |             or (value_type == "*" and value_subtype == "*")
227 |         ) or (
228 |             item_type == value_type
229 |             and (
230 |                 item_subtype == "*"
231 |                 or value_subtype == "*"
232 |                 or (item_subtype == value_subtype and item_params == value_params)
233 |             )
234 |         )
235 | 
236 |     @property
237 |     def accept_html(self):
238 |         """True if this object accepts HTML."""
239 |         return (
240 |             "text/html" in self or "application/xhtml+xml" in self or self.accept_xhtml
241 |         )
242 | 
243 |     @property
244 |     def accept_xhtml(self):
245 |         """True if this object accepts XHTML."""
246 |         return "application/xhtml+xml" in self or "application/xml" in self
247 | 
248 |     @property
249 |     def accept_json(self):
250 |         """True if this object accepts JSON."""
251 |         return "application/json" in self
252 | 
253 | 
254 | _locale_delim_re = re.compile(r"[_-]")
255 | 
256 | 
257 | def _normalize_lang(value):
258 |     """Process a language tag for matching."""
259 |     return _locale_delim_re.split(value.lower())
260 | 
261 | 
262 | class LanguageAccept(Accept):
263 |     """Like :class:`Accept` but with normalization for language tags."""
264 | 
265 |     def _value_matches(self, value, item):
266 |         return item == "*" or _normalize_lang(value) == _normalize_lang(item)
267 | 
268 |     def best_match(self, matches, default=None):
269 |         """Given a list of supported values, finds the best match from
270 |         the list of accepted values.
271 | 
272 |         Language tags are normalized for the purpose of matching, but
273 |         are returned unchanged.
274 | 
275 |         If no exact match is found, this will fall back to matching
276 |         the first subtag (primary language only), first with the
277 |         accepted values then with the match values. This partial is not
278 |         applied to any other language subtags.
279 | 
280 |         The default is returned if no exact or fallback match is found.
281 | 
282 |         :param matches: A list of supported languages to find a match.
283 |         :param default: The value that is returned if none match.
284 |         """
285 |         # Look for an exact match first. If a client accepts "en-US",
286 |         # "en-US" is a valid match at this point.
287 |         result = super().best_match(matches)
288 | 
289 |         if result is not None:
290 |             return result
291 | 
292 |         # Fall back to accepting primary tags. If a client accepts
293 |         # "en-US", "en" is a valid match at this point. Need to use
294 |         # re.split to account for 2 or 3 letter codes.
295 |         fallback = Accept(
296 |             [(_locale_delim_re.split(item[0], 1)[0], item[1]) for item in self]
297 |         )
298 |         result = fallback.best_match(matches)
299 | 
300 |         if result is not None:
301 |             return result
302 | 
303 |         # Fall back to matching primary tags. If the client accepts
304 |         # "en", "en-US" is a valid match at this point.
305 |         fallback_matches = [_locale_delim_re.split(item, 1)[0] for item in matches]
306 |         result = super().best_match(fallback_matches)
307 | 
308 |         # Return a value from the original match list. Find the first
309 |         # original value that starts with the matched primary tag.
310 |         if result is not None:
311 |             return next(item for item in matches if item.startswith(result))
312 | 
313 |         return default
314 | 
315 | 
316 | class CharsetAccept(Accept):
317 |     """Like :class:`Accept` but with normalization for charsets."""
318 | 
319 |     def _value_matches(self, value, item):
320 |         def _normalize(name):
321 |             try:
322 |                 return codecs.lookup(name).name
323 |             except LookupError:
324 |                 return name.lower()
325 | 
326 |         return item == "*" or _normalize(value) == _normalize(item)
327 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/jinja2/idtracking.py:
--------------------------------------------------------------------------------

```python
  1 | import typing as t
  2 | 
  3 | from . import nodes
  4 | from .visitor import NodeVisitor
  5 | 
  6 | VAR_LOAD_PARAMETER = "param"
  7 | VAR_LOAD_RESOLVE = "resolve"
  8 | VAR_LOAD_ALIAS = "alias"
  9 | VAR_LOAD_UNDEFINED = "undefined"
 10 | 
 11 | 
 12 | def find_symbols(
 13 |     nodes: t.Iterable[nodes.Node], parent_symbols: t.Optional["Symbols"] = None
 14 | ) -> "Symbols":
 15 |     sym = Symbols(parent=parent_symbols)
 16 |     visitor = FrameSymbolVisitor(sym)
 17 |     for node in nodes:
 18 |         visitor.visit(node)
 19 |     return sym
 20 | 
 21 | 
 22 | def symbols_for_node(
 23 |     node: nodes.Node, parent_symbols: t.Optional["Symbols"] = None
 24 | ) -> "Symbols":
 25 |     sym = Symbols(parent=parent_symbols)
 26 |     sym.analyze_node(node)
 27 |     return sym
 28 | 
 29 | 
 30 | class Symbols:
 31 |     def __init__(
 32 |         self, parent: t.Optional["Symbols"] = None, level: t.Optional[int] = None
 33 |     ) -> None:
 34 |         if level is None:
 35 |             if parent is None:
 36 |                 level = 0
 37 |             else:
 38 |                 level = parent.level + 1
 39 | 
 40 |         self.level: int = level
 41 |         self.parent = parent
 42 |         self.refs: t.Dict[str, str] = {}
 43 |         self.loads: t.Dict[str, t.Any] = {}
 44 |         self.stores: t.Set[str] = set()
 45 | 
 46 |     def analyze_node(self, node: nodes.Node, **kwargs: t.Any) -> None:
 47 |         visitor = RootVisitor(self)
 48 |         visitor.visit(node, **kwargs)
 49 | 
 50 |     def _define_ref(
 51 |         self, name: str, load: t.Optional[t.Tuple[str, t.Optional[str]]] = None
 52 |     ) -> str:
 53 |         ident = f"l_{self.level}_{name}"
 54 |         self.refs[name] = ident
 55 |         if load is not None:
 56 |             self.loads[ident] = load
 57 |         return ident
 58 | 
 59 |     def find_load(self, target: str) -> t.Optional[t.Any]:
 60 |         if target in self.loads:
 61 |             return self.loads[target]
 62 | 
 63 |         if self.parent is not None:
 64 |             return self.parent.find_load(target)
 65 | 
 66 |         return None
 67 | 
 68 |     def find_ref(self, name: str) -> t.Optional[str]:
 69 |         if name in self.refs:
 70 |             return self.refs[name]
 71 | 
 72 |         if self.parent is not None:
 73 |             return self.parent.find_ref(name)
 74 | 
 75 |         return None
 76 | 
 77 |     def ref(self, name: str) -> str:
 78 |         rv = self.find_ref(name)
 79 |         if rv is None:
 80 |             raise AssertionError(
 81 |                 "Tried to resolve a name to a reference that was"
 82 |                 f" unknown to the frame ({name!r})"
 83 |             )
 84 |         return rv
 85 | 
 86 |     def copy(self) -> "Symbols":
 87 |         rv = object.__new__(self.__class__)
 88 |         rv.__dict__.update(self.__dict__)
 89 |         rv.refs = self.refs.copy()
 90 |         rv.loads = self.loads.copy()
 91 |         rv.stores = self.stores.copy()
 92 |         return rv
 93 | 
 94 |     def store(self, name: str) -> None:
 95 |         self.stores.add(name)
 96 | 
 97 |         # If we have not see the name referenced yet, we need to figure
 98 |         # out what to set it to.
 99 |         if name not in self.refs:
100 |             # If there is a parent scope we check if the name has a
101 |             # reference there.  If it does it means we might have to alias
102 |             # to a variable there.
103 |             if self.parent is not None:
104 |                 outer_ref = self.parent.find_ref(name)
105 |                 if outer_ref is not None:
106 |                     self._define_ref(name, load=(VAR_LOAD_ALIAS, outer_ref))
107 |                     return
108 | 
109 |             # Otherwise we can just set it to undefined.
110 |             self._define_ref(name, load=(VAR_LOAD_UNDEFINED, None))
111 | 
112 |     def declare_parameter(self, name: str) -> str:
113 |         self.stores.add(name)
114 |         return self._define_ref(name, load=(VAR_LOAD_PARAMETER, None))
115 | 
116 |     def load(self, name: str) -> None:
117 |         if self.find_ref(name) is None:
118 |             self._define_ref(name, load=(VAR_LOAD_RESOLVE, name))
119 | 
120 |     def branch_update(self, branch_symbols: t.Sequence["Symbols"]) -> None:
121 |         stores: t.Dict[str, int] = {}
122 |         for branch in branch_symbols:
123 |             for target in branch.stores:
124 |                 if target in self.stores:
125 |                     continue
126 |                 stores[target] = stores.get(target, 0) + 1
127 | 
128 |         for sym in branch_symbols:
129 |             self.refs.update(sym.refs)
130 |             self.loads.update(sym.loads)
131 |             self.stores.update(sym.stores)
132 | 
133 |         for name, branch_count in stores.items():
134 |             if branch_count == len(branch_symbols):
135 |                 continue
136 | 
137 |             target = self.find_ref(name)  # type: ignore
138 |             assert target is not None, "should not happen"
139 | 
140 |             if self.parent is not None:
141 |                 outer_target = self.parent.find_ref(name)
142 |                 if outer_target is not None:
143 |                     self.loads[target] = (VAR_LOAD_ALIAS, outer_target)
144 |                     continue
145 |             self.loads[target] = (VAR_LOAD_RESOLVE, name)
146 | 
147 |     def dump_stores(self) -> t.Dict[str, str]:
148 |         rv: t.Dict[str, str] = {}
149 |         node: t.Optional["Symbols"] = self
150 | 
151 |         while node is not None:
152 |             for name in sorted(node.stores):
153 |                 if name not in rv:
154 |                     rv[name] = self.find_ref(name)  # type: ignore
155 | 
156 |             node = node.parent
157 | 
158 |         return rv
159 | 
160 |     def dump_param_targets(self) -> t.Set[str]:
161 |         rv = set()
162 |         node: t.Optional["Symbols"] = self
163 | 
164 |         while node is not None:
165 |             for target, (instr, _) in self.loads.items():
166 |                 if instr == VAR_LOAD_PARAMETER:
167 |                     rv.add(target)
168 | 
169 |             node = node.parent
170 | 
171 |         return rv
172 | 
173 | 
174 | class RootVisitor(NodeVisitor):
175 |     def __init__(self, symbols: "Symbols") -> None:
176 |         self.sym_visitor = FrameSymbolVisitor(symbols)
177 | 
178 |     def _simple_visit(self, node: nodes.Node, **kwargs: t.Any) -> None:
179 |         for child in node.iter_child_nodes():
180 |             self.sym_visitor.visit(child)
181 | 
182 |     visit_Template = _simple_visit
183 |     visit_Block = _simple_visit
184 |     visit_Macro = _simple_visit
185 |     visit_FilterBlock = _simple_visit
186 |     visit_Scope = _simple_visit
187 |     visit_If = _simple_visit
188 |     visit_ScopedEvalContextModifier = _simple_visit
189 | 
190 |     def visit_AssignBlock(self, node: nodes.AssignBlock, **kwargs: t.Any) -> None:
191 |         for child in node.body:
192 |             self.sym_visitor.visit(child)
193 | 
194 |     def visit_CallBlock(self, node: nodes.CallBlock, **kwargs: t.Any) -> None:
195 |         for child in node.iter_child_nodes(exclude=("call",)):
196 |             self.sym_visitor.visit(child)
197 | 
198 |     def visit_OverlayScope(self, node: nodes.OverlayScope, **kwargs: t.Any) -> None:
199 |         for child in node.body:
200 |             self.sym_visitor.visit(child)
201 | 
202 |     def visit_For(
203 |         self, node: nodes.For, for_branch: str = "body", **kwargs: t.Any
204 |     ) -> None:
205 |         if for_branch == "body":
206 |             self.sym_visitor.visit(node.target, store_as_param=True)
207 |             branch = node.body
208 |         elif for_branch == "else":
209 |             branch = node.else_
210 |         elif for_branch == "test":
211 |             self.sym_visitor.visit(node.target, store_as_param=True)
212 |             if node.test is not None:
213 |                 self.sym_visitor.visit(node.test)
214 |             return
215 |         else:
216 |             raise RuntimeError("Unknown for branch")
217 | 
218 |         if branch:
219 |             for item in branch:
220 |                 self.sym_visitor.visit(item)
221 | 
222 |     def visit_With(self, node: nodes.With, **kwargs: t.Any) -> None:
223 |         for target in node.targets:
224 |             self.sym_visitor.visit(target)
225 |         for child in node.body:
226 |             self.sym_visitor.visit(child)
227 | 
228 |     def generic_visit(self, node: nodes.Node, *args: t.Any, **kwargs: t.Any) -> None:
229 |         raise NotImplementedError(f"Cannot find symbols for {type(node).__name__!r}")
230 | 
231 | 
232 | class FrameSymbolVisitor(NodeVisitor):
233 |     """A visitor for `Frame.inspect`."""
234 | 
235 |     def __init__(self, symbols: "Symbols") -> None:
236 |         self.symbols = symbols
237 | 
238 |     def visit_Name(
239 |         self, node: nodes.Name, store_as_param: bool = False, **kwargs: t.Any
240 |     ) -> None:
241 |         """All assignments to names go through this function."""
242 |         if store_as_param or node.ctx == "param":
243 |             self.symbols.declare_parameter(node.name)
244 |         elif node.ctx == "store":
245 |             self.symbols.store(node.name)
246 |         elif node.ctx == "load":
247 |             self.symbols.load(node.name)
248 | 
249 |     def visit_NSRef(self, node: nodes.NSRef, **kwargs: t.Any) -> None:
250 |         self.symbols.load(node.name)
251 | 
252 |     def visit_If(self, node: nodes.If, **kwargs: t.Any) -> None:
253 |         self.visit(node.test, **kwargs)
254 |         original_symbols = self.symbols
255 | 
256 |         def inner_visit(nodes: t.Iterable[nodes.Node]) -> "Symbols":
257 |             self.symbols = rv = original_symbols.copy()
258 | 
259 |             for subnode in nodes:
260 |                 self.visit(subnode, **kwargs)
261 | 
262 |             self.symbols = original_symbols
263 |             return rv
264 | 
265 |         body_symbols = inner_visit(node.body)
266 |         elif_symbols = inner_visit(node.elif_)
267 |         else_symbols = inner_visit(node.else_ or ())
268 |         self.symbols.branch_update([body_symbols, elif_symbols, else_symbols])
269 | 
270 |     def visit_Macro(self, node: nodes.Macro, **kwargs: t.Any) -> None:
271 |         self.symbols.store(node.name)
272 | 
273 |     def visit_Import(self, node: nodes.Import, **kwargs: t.Any) -> None:
274 |         self.generic_visit(node, **kwargs)
275 |         self.symbols.store(node.target)
276 | 
277 |     def visit_FromImport(self, node: nodes.FromImport, **kwargs: t.Any) -> None:
278 |         self.generic_visit(node, **kwargs)
279 | 
280 |         for name in node.names:
281 |             if isinstance(name, tuple):
282 |                 self.symbols.store(name[1])
283 |             else:
284 |                 self.symbols.store(name)
285 | 
286 |     def visit_Assign(self, node: nodes.Assign, **kwargs: t.Any) -> None:
287 |         """Visit assignments in the correct order."""
288 |         self.visit(node.node, **kwargs)
289 |         self.visit(node.target, **kwargs)
290 | 
291 |     def visit_For(self, node: nodes.For, **kwargs: t.Any) -> None:
292 |         """Visiting stops at for blocks.  However the block sequence
293 |         is visited as part of the outer scope.
294 |         """
295 |         self.visit(node.iter, **kwargs)
296 | 
297 |     def visit_CallBlock(self, node: nodes.CallBlock, **kwargs: t.Any) -> None:
298 |         self.visit(node.call, **kwargs)
299 | 
300 |     def visit_FilterBlock(self, node: nodes.FilterBlock, **kwargs: t.Any) -> None:
301 |         self.visit(node.filter, **kwargs)
302 | 
303 |     def visit_With(self, node: nodes.With, **kwargs: t.Any) -> None:
304 |         for target in node.values:
305 |             self.visit(target)
306 | 
307 |     def visit_AssignBlock(self, node: nodes.AssignBlock, **kwargs: t.Any) -> None:
308 |         """Stop visiting at block assigns."""
309 |         self.visit(node.target, **kwargs)
310 | 
311 |     def visit_Scope(self, node: nodes.Scope, **kwargs: t.Any) -> None:
312 |         """Stop visiting at scopes."""
313 | 
314 |     def visit_Block(self, node: nodes.Block, **kwargs: t.Any) -> None:
315 |         """Stop visiting at blocks."""
316 | 
317 |     def visit_OverlayScope(self, node: nodes.OverlayScope, **kwargs: t.Any) -> None:
318 |         """Do not visit into overlay scopes."""
319 | 
```

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

```python
  1 | from typing import TYPE_CHECKING, Optional
  2 | 
  3 | from .align import AlignMethod
  4 | from .box import ROUNDED, Box
  5 | from .cells import cell_len
  6 | from .jupyter import JupyterMixin
  7 | from .measure import Measurement, measure_renderables
  8 | from .padding import Padding, PaddingDimensions
  9 | from .segment import Segment
 10 | from .style import Style, StyleType
 11 | from .text import Text, TextType
 12 | 
 13 | if TYPE_CHECKING:
 14 |     from .console import Console, ConsoleOptions, RenderableType, RenderResult
 15 | 
 16 | 
 17 | class Panel(JupyterMixin):
 18 |     """A console renderable that draws a border around its contents.
 19 | 
 20 |     Example:
 21 |         >>> console.print(Panel("Hello, World!"))
 22 | 
 23 |     Args:
 24 |         renderable (RenderableType): A console renderable object.
 25 |         box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`.
 26 |             Defaults to box.ROUNDED.
 27 |         safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
 28 |         expand (bool, optional): If True the panel will stretch to fill the console
 29 |             width, otherwise it will be sized to fit the contents. Defaults to True.
 30 |         style (str, optional): The style of the panel (border and contents). Defaults to "none".
 31 |         border_style (str, optional): The style of the border. Defaults to "none".
 32 |         width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect.
 33 |         height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect.
 34 |         padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0.
 35 |         highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False.
 36 |     """
 37 | 
 38 |     def __init__(
 39 |         self,
 40 |         renderable: "RenderableType",
 41 |         box: Box = ROUNDED,
 42 |         *,
 43 |         title: Optional[TextType] = None,
 44 |         title_align: AlignMethod = "center",
 45 |         subtitle: Optional[TextType] = None,
 46 |         subtitle_align: AlignMethod = "center",
 47 |         safe_box: Optional[bool] = None,
 48 |         expand: bool = True,
 49 |         style: StyleType = "none",
 50 |         border_style: StyleType = "none",
 51 |         width: Optional[int] = None,
 52 |         height: Optional[int] = None,
 53 |         padding: PaddingDimensions = (0, 1),
 54 |         highlight: bool = False,
 55 |     ) -> None:
 56 |         self.renderable = renderable
 57 |         self.box = box
 58 |         self.title = title
 59 |         self.title_align: AlignMethod = title_align
 60 |         self.subtitle = subtitle
 61 |         self.subtitle_align = subtitle_align
 62 |         self.safe_box = safe_box
 63 |         self.expand = expand
 64 |         self.style = style
 65 |         self.border_style = border_style
 66 |         self.width = width
 67 |         self.height = height
 68 |         self.padding = padding
 69 |         self.highlight = highlight
 70 | 
 71 |     @classmethod
 72 |     def fit(
 73 |         cls,
 74 |         renderable: "RenderableType",
 75 |         box: Box = ROUNDED,
 76 |         *,
 77 |         title: Optional[TextType] = None,
 78 |         title_align: AlignMethod = "center",
 79 |         subtitle: Optional[TextType] = None,
 80 |         subtitle_align: AlignMethod = "center",
 81 |         safe_box: Optional[bool] = None,
 82 |         style: StyleType = "none",
 83 |         border_style: StyleType = "none",
 84 |         width: Optional[int] = None,
 85 |         height: Optional[int] = None,
 86 |         padding: PaddingDimensions = (0, 1),
 87 |         highlight: bool = False,
 88 |     ) -> "Panel":
 89 |         """An alternative constructor that sets expand=False."""
 90 |         return cls(
 91 |             renderable,
 92 |             box,
 93 |             title=title,
 94 |             title_align=title_align,
 95 |             subtitle=subtitle,
 96 |             subtitle_align=subtitle_align,
 97 |             safe_box=safe_box,
 98 |             style=style,
 99 |             border_style=border_style,
100 |             width=width,
101 |             height=height,
102 |             padding=padding,
103 |             highlight=highlight,
104 |             expand=False,
105 |         )
106 | 
107 |     @property
108 |     def _title(self) -> Optional[Text]:
109 |         if self.title:
110 |             title_text = (
111 |                 Text.from_markup(self.title)
112 |                 if isinstance(self.title, str)
113 |                 else self.title.copy()
114 |             )
115 |             title_text.end = ""
116 |             title_text.plain = title_text.plain.replace("\n", " ")
117 |             title_text.no_wrap = True
118 |             title_text.expand_tabs()
119 |             title_text.pad(1)
120 |             return title_text
121 |         return None
122 | 
123 |     @property
124 |     def _subtitle(self) -> Optional[Text]:
125 |         if self.subtitle:
126 |             subtitle_text = (
127 |                 Text.from_markup(self.subtitle)
128 |                 if isinstance(self.subtitle, str)
129 |                 else self.subtitle.copy()
130 |             )
131 |             subtitle_text.end = ""
132 |             subtitle_text.plain = subtitle_text.plain.replace("\n", " ")
133 |             subtitle_text.no_wrap = True
134 |             subtitle_text.expand_tabs()
135 |             subtitle_text.pad(1)
136 |             return subtitle_text
137 |         return None
138 | 
139 |     def __rich_console__(
140 |         self, console: "Console", options: "ConsoleOptions"
141 |     ) -> "RenderResult":
142 |         _padding = Padding.unpack(self.padding)
143 |         renderable = (
144 |             Padding(self.renderable, _padding) if any(_padding) else self.renderable
145 |         )
146 |         style = console.get_style(self.style)
147 |         border_style = style + console.get_style(self.border_style)
148 |         width = (
149 |             options.max_width
150 |             if self.width is None
151 |             else min(options.max_width, self.width)
152 |         )
153 | 
154 |         safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box
155 |         box = self.box.substitute(options, safe=safe_box)
156 | 
157 |         def align_text(
158 |             text: Text, width: int, align: str, character: str, style: Style
159 |         ) -> Text:
160 |             """Gets new aligned text.
161 | 
162 |             Args:
163 |                 text (Text): Title or subtitle text.
164 |                 width (int): Desired width.
165 |                 align (str): Alignment.
166 |                 character (str): Character for alignment.
167 |                 style (Style): Border style
168 | 
169 |             Returns:
170 |                 Text: New text instance
171 |             """
172 |             text = text.copy()
173 |             text.truncate(width)
174 |             excess_space = width - cell_len(text.plain)
175 |             if excess_space:
176 |                 if align == "left":
177 |                     return Text.assemble(
178 |                         text,
179 |                         (character * excess_space, style),
180 |                         no_wrap=True,
181 |                         end="",
182 |                     )
183 |                 elif align == "center":
184 |                     left = excess_space // 2
185 |                     return Text.assemble(
186 |                         (character * left, style),
187 |                         text,
188 |                         (character * (excess_space - left), style),
189 |                         no_wrap=True,
190 |                         end="",
191 |                     )
192 |                 else:
193 |                     return Text.assemble(
194 |                         (character * excess_space, style),
195 |                         text,
196 |                         no_wrap=True,
197 |                         end="",
198 |                     )
199 |             return text
200 | 
201 |         title_text = self._title
202 |         if title_text is not None:
203 |             title_text.stylize_before(border_style)
204 | 
205 |         child_width = (
206 |             width - 2
207 |             if self.expand
208 |             else console.measure(
209 |                 renderable, options=options.update_width(width - 2)
210 |             ).maximum
211 |         )
212 |         child_height = self.height or options.height or None
213 |         if child_height:
214 |             child_height -= 2
215 |         if title_text is not None:
216 |             child_width = min(
217 |                 options.max_width - 2, max(child_width, title_text.cell_len + 2)
218 |             )
219 | 
220 |         width = child_width + 2
221 |         child_options = options.update(
222 |             width=child_width, height=child_height, highlight=self.highlight
223 |         )
224 |         lines = console.render_lines(renderable, child_options, style=style)
225 | 
226 |         line_start = Segment(box.mid_left, border_style)
227 |         line_end = Segment(f"{box.mid_right}", border_style)
228 |         new_line = Segment.line()
229 |         if title_text is None or width <= 4:
230 |             yield Segment(box.get_top([width - 2]), border_style)
231 |         else:
232 |             title_text = align_text(
233 |                 title_text,
234 |                 width - 4,
235 |                 self.title_align,
236 |                 box.top,
237 |                 border_style,
238 |             )
239 |             yield Segment(box.top_left + box.top, border_style)
240 |             yield from console.render(title_text, child_options.update_width(width - 4))
241 |             yield Segment(box.top + box.top_right, border_style)
242 | 
243 |         yield new_line
244 |         for line in lines:
245 |             yield line_start
246 |             yield from line
247 |             yield line_end
248 |             yield new_line
249 | 
250 |         subtitle_text = self._subtitle
251 |         if subtitle_text is not None:
252 |             subtitle_text.stylize_before(border_style)
253 | 
254 |         if subtitle_text is None or width <= 4:
255 |             yield Segment(box.get_bottom([width - 2]), border_style)
256 |         else:
257 |             subtitle_text = align_text(
258 |                 subtitle_text,
259 |                 width - 4,
260 |                 self.subtitle_align,
261 |                 box.bottom,
262 |                 border_style,
263 |             )
264 |             yield Segment(box.bottom_left + box.bottom, border_style)
265 |             yield from console.render(
266 |                 subtitle_text, child_options.update_width(width - 4)
267 |             )
268 |             yield Segment(box.bottom + box.bottom_right, border_style)
269 | 
270 |         yield new_line
271 | 
272 |     def __rich_measure__(
273 |         self, console: "Console", options: "ConsoleOptions"
274 |     ) -> "Measurement":
275 |         _title = self._title
276 |         _, right, _, left = Padding.unpack(self.padding)
277 |         padding = left + right
278 |         renderables = [self.renderable, _title] if _title else [self.renderable]
279 | 
280 |         if self.width is None:
281 |             width = (
282 |                 measure_renderables(
283 |                     console,
284 |                     options.update_width(options.max_width - padding - 2),
285 |                     renderables,
286 |                 ).maximum
287 |                 + padding
288 |                 + 2
289 |             )
290 |         else:
291 |             width = self.width
292 |         return Measurement(width, width)
293 | 
294 | 
295 | if __name__ == "__main__":  # pragma: no cover
296 |     from .console import Console
297 | 
298 |     c = Console()
299 | 
300 |     from .box import DOUBLE, ROUNDED
301 |     from .padding import Padding
302 | 
303 |     p = Panel(
304 |         "Hello, World!",
305 |         title="rich.Panel",
306 |         style="white on blue",
307 |         box=DOUBLE,
308 |         padding=1,
309 |     )
310 | 
311 |     c.print()
312 |     c.print(p)
313 | 
```
Page 40/168FirstPrevNextLast