#
tokens: 48701/50000 6/808 files (page 32/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 32 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/click/exceptions.py:
--------------------------------------------------------------------------------

```python
  1 | import typing as t
  2 | from gettext import gettext as _
  3 | from gettext import ngettext
  4 | 
  5 | from ._compat import get_text_stderr
  6 | from .utils import echo
  7 | from .utils import format_filename
  8 | 
  9 | if t.TYPE_CHECKING:
 10 |     from .core import Command
 11 |     from .core import Context
 12 |     from .core import Parameter
 13 | 
 14 | 
 15 | def _join_param_hints(
 16 |     param_hint: t.Optional[t.Union[t.Sequence[str], str]]
 17 | ) -> t.Optional[str]:
 18 |     if param_hint is not None and not isinstance(param_hint, str):
 19 |         return " / ".join(repr(x) for x in param_hint)
 20 | 
 21 |     return param_hint
 22 | 
 23 | 
 24 | class ClickException(Exception):
 25 |     """An exception that Click can handle and show to the user."""
 26 | 
 27 |     #: The exit code for this exception.
 28 |     exit_code = 1
 29 | 
 30 |     def __init__(self, message: str) -> None:
 31 |         super().__init__(message)
 32 |         self.message = message
 33 | 
 34 |     def format_message(self) -> str:
 35 |         return self.message
 36 | 
 37 |     def __str__(self) -> str:
 38 |         return self.message
 39 | 
 40 |     def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:
 41 |         if file is None:
 42 |             file = get_text_stderr()
 43 | 
 44 |         echo(_("Error: {message}").format(message=self.format_message()), file=file)
 45 | 
 46 | 
 47 | class UsageError(ClickException):
 48 |     """An internal exception that signals a usage error.  This typically
 49 |     aborts any further handling.
 50 | 
 51 |     :param message: the error message to display.
 52 |     :param ctx: optionally the context that caused this error.  Click will
 53 |                 fill in the context automatically in some situations.
 54 |     """
 55 | 
 56 |     exit_code = 2
 57 | 
 58 |     def __init__(self, message: str, ctx: t.Optional["Context"] = None) -> None:
 59 |         super().__init__(message)
 60 |         self.ctx = ctx
 61 |         self.cmd: t.Optional["Command"] = self.ctx.command if self.ctx else None
 62 | 
 63 |     def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:
 64 |         if file is None:
 65 |             file = get_text_stderr()
 66 |         color = None
 67 |         hint = ""
 68 |         if (
 69 |             self.ctx is not None
 70 |             and self.ctx.command.get_help_option(self.ctx) is not None
 71 |         ):
 72 |             hint = _("Try '{command} {option}' for help.").format(
 73 |                 command=self.ctx.command_path, option=self.ctx.help_option_names[0]
 74 |             )
 75 |             hint = f"{hint}\n"
 76 |         if self.ctx is not None:
 77 |             color = self.ctx.color
 78 |             echo(f"{self.ctx.get_usage()}\n{hint}", file=file, color=color)
 79 |         echo(
 80 |             _("Error: {message}").format(message=self.format_message()),
 81 |             file=file,
 82 |             color=color,
 83 |         )
 84 | 
 85 | 
 86 | class BadParameter(UsageError):
 87 |     """An exception that formats out a standardized error message for a
 88 |     bad parameter.  This is useful when thrown from a callback or type as
 89 |     Click will attach contextual information to it (for instance, which
 90 |     parameter it is).
 91 | 
 92 |     .. versionadded:: 2.0
 93 | 
 94 |     :param param: the parameter object that caused this error.  This can
 95 |                   be left out, and Click will attach this info itself
 96 |                   if possible.
 97 |     :param param_hint: a string that shows up as parameter name.  This
 98 |                        can be used as alternative to `param` in cases
 99 |                        where custom validation should happen.  If it is
100 |                        a string it's used as such, if it's a list then
101 |                        each item is quoted and separated.
102 |     """
103 | 
104 |     def __init__(
105 |         self,
106 |         message: str,
107 |         ctx: t.Optional["Context"] = None,
108 |         param: t.Optional["Parameter"] = None,
109 |         param_hint: t.Optional[str] = None,
110 |     ) -> None:
111 |         super().__init__(message, ctx)
112 |         self.param = param
113 |         self.param_hint = param_hint
114 | 
115 |     def format_message(self) -> str:
116 |         if self.param_hint is not None:
117 |             param_hint = self.param_hint
118 |         elif self.param is not None:
119 |             param_hint = self.param.get_error_hint(self.ctx)  # type: ignore
120 |         else:
121 |             return _("Invalid value: {message}").format(message=self.message)
122 | 
123 |         return _("Invalid value for {param_hint}: {message}").format(
124 |             param_hint=_join_param_hints(param_hint), message=self.message
125 |         )
126 | 
127 | 
128 | class MissingParameter(BadParameter):
129 |     """Raised if click required an option or argument but it was not
130 |     provided when invoking the script.
131 | 
132 |     .. versionadded:: 4.0
133 | 
134 |     :param param_type: a string that indicates the type of the parameter.
135 |                        The default is to inherit the parameter type from
136 |                        the given `param`.  Valid values are ``'parameter'``,
137 |                        ``'option'`` or ``'argument'``.
138 |     """
139 | 
140 |     def __init__(
141 |         self,
142 |         message: t.Optional[str] = None,
143 |         ctx: t.Optional["Context"] = None,
144 |         param: t.Optional["Parameter"] = None,
145 |         param_hint: t.Optional[str] = None,
146 |         param_type: t.Optional[str] = None,
147 |     ) -> None:
148 |         super().__init__(message or "", ctx, param, param_hint)
149 |         self.param_type = param_type
150 | 
151 |     def format_message(self) -> str:
152 |         if self.param_hint is not None:
153 |             param_hint: t.Optional[str] = self.param_hint
154 |         elif self.param is not None:
155 |             param_hint = self.param.get_error_hint(self.ctx)  # type: ignore
156 |         else:
157 |             param_hint = None
158 | 
159 |         param_hint = _join_param_hints(param_hint)
160 |         param_hint = f" {param_hint}" if param_hint else ""
161 | 
162 |         param_type = self.param_type
163 |         if param_type is None and self.param is not None:
164 |             param_type = self.param.param_type_name
165 | 
166 |         msg = self.message
167 |         if self.param is not None:
168 |             msg_extra = self.param.type.get_missing_message(self.param)
169 |             if msg_extra:
170 |                 if msg:
171 |                     msg += f". {msg_extra}"
172 |                 else:
173 |                     msg = msg_extra
174 | 
175 |         msg = f" {msg}" if msg else ""
176 | 
177 |         # Translate param_type for known types.
178 |         if param_type == "argument":
179 |             missing = _("Missing argument")
180 |         elif param_type == "option":
181 |             missing = _("Missing option")
182 |         elif param_type == "parameter":
183 |             missing = _("Missing parameter")
184 |         else:
185 |             missing = _("Missing {param_type}").format(param_type=param_type)
186 | 
187 |         return f"{missing}{param_hint}.{msg}"
188 | 
189 |     def __str__(self) -> str:
190 |         if not self.message:
191 |             param_name = self.param.name if self.param else None
192 |             return _("Missing parameter: {param_name}").format(param_name=param_name)
193 |         else:
194 |             return self.message
195 | 
196 | 
197 | class NoSuchOption(UsageError):
198 |     """Raised if click attempted to handle an option that does not
199 |     exist.
200 | 
201 |     .. versionadded:: 4.0
202 |     """
203 | 
204 |     def __init__(
205 |         self,
206 |         option_name: str,
207 |         message: t.Optional[str] = None,
208 |         possibilities: t.Optional[t.Sequence[str]] = None,
209 |         ctx: t.Optional["Context"] = None,
210 |     ) -> None:
211 |         if message is None:
212 |             message = _("No such option: {name}").format(name=option_name)
213 | 
214 |         super().__init__(message, ctx)
215 |         self.option_name = option_name
216 |         self.possibilities = possibilities
217 | 
218 |     def format_message(self) -> str:
219 |         if not self.possibilities:
220 |             return self.message
221 | 
222 |         possibility_str = ", ".join(sorted(self.possibilities))
223 |         suggest = ngettext(
224 |             "Did you mean {possibility}?",
225 |             "(Possible options: {possibilities})",
226 |             len(self.possibilities),
227 |         ).format(possibility=possibility_str, possibilities=possibility_str)
228 |         return f"{self.message} {suggest}"
229 | 
230 | 
231 | class BadOptionUsage(UsageError):
232 |     """Raised if an option is generally supplied but the use of the option
233 |     was incorrect.  This is for instance raised if the number of arguments
234 |     for an option is not correct.
235 | 
236 |     .. versionadded:: 4.0
237 | 
238 |     :param option_name: the name of the option being used incorrectly.
239 |     """
240 | 
241 |     def __init__(
242 |         self, option_name: str, message: str, ctx: t.Optional["Context"] = None
243 |     ) -> None:
244 |         super().__init__(message, ctx)
245 |         self.option_name = option_name
246 | 
247 | 
248 | class BadArgumentUsage(UsageError):
249 |     """Raised if an argument is generally supplied but the use of the argument
250 |     was incorrect.  This is for instance raised if the number of values
251 |     for an argument is not correct.
252 | 
253 |     .. versionadded:: 6.0
254 |     """
255 | 
256 | 
257 | class FileError(ClickException):
258 |     """Raised if a file cannot be opened."""
259 | 
260 |     def __init__(self, filename: str, hint: t.Optional[str] = None) -> None:
261 |         if hint is None:
262 |             hint = _("unknown error")
263 | 
264 |         super().__init__(hint)
265 |         self.ui_filename: str = format_filename(filename)
266 |         self.filename = filename
267 | 
268 |     def format_message(self) -> str:
269 |         return _("Could not open file {filename!r}: {message}").format(
270 |             filename=self.ui_filename, message=self.message
271 |         )
272 | 
273 | 
274 | class Abort(RuntimeError):
275 |     """An internal signalling exception that signals Click to abort."""
276 | 
277 | 
278 | class Exit(RuntimeError):
279 |     """An exception that indicates that the application should exit with some
280 |     status code.
281 | 
282 |     :param code: the status code to exit with.
283 |     """
284 | 
285 |     __slots__ = ("exit_code",)
286 | 
287 |     def __init__(self, code: int = 0) -> None:
288 |         self.exit_code: int = code
289 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/flask/json/tag.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | Tagged JSON
  3 | ~~~~~~~~~~~
  4 | 
  5 | A compact representation for lossless serialization of non-standard JSON
  6 | types. :class:`~flask.sessions.SecureCookieSessionInterface` uses this
  7 | to serialize the session data, but it may be useful in other places. It
  8 | can be extended to support other types.
  9 | 
 10 | .. autoclass:: TaggedJSONSerializer
 11 |     :members:
 12 | 
 13 | .. autoclass:: JSONTag
 14 |     :members:
 15 | 
 16 | Let's see an example that adds support for
 17 | :class:`~collections.OrderedDict`. Dicts don't have an order in JSON, so
 18 | to handle this we will dump the items as a list of ``[key, value]``
 19 | pairs. Subclass :class:`JSONTag` and give it the new key ``' od'`` to
 20 | identify the type. The session serializer processes dicts first, so
 21 | insert the new tag at the front of the order since ``OrderedDict`` must
 22 | be processed before ``dict``.
 23 | 
 24 | .. code-block:: python
 25 | 
 26 |     from flask.json.tag import JSONTag
 27 | 
 28 |     class TagOrderedDict(JSONTag):
 29 |         __slots__ = ('serializer',)
 30 |         key = ' od'
 31 | 
 32 |         def check(self, value):
 33 |             return isinstance(value, OrderedDict)
 34 | 
 35 |         def to_json(self, value):
 36 |             return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]
 37 | 
 38 |         def to_python(self, value):
 39 |             return OrderedDict(value)
 40 | 
 41 |     app.session_interface.serializer.register(TagOrderedDict, index=0)
 42 | """
 43 | 
 44 | from __future__ import annotations
 45 | 
 46 | import typing as t
 47 | from base64 import b64decode
 48 | from base64 import b64encode
 49 | from datetime import datetime
 50 | from uuid import UUID
 51 | 
 52 | from markupsafe import Markup
 53 | from werkzeug.http import http_date
 54 | from werkzeug.http import parse_date
 55 | 
 56 | from ..json import dumps
 57 | from ..json import loads
 58 | 
 59 | 
 60 | class JSONTag:
 61 |     """Base class for defining type tags for :class:`TaggedJSONSerializer`."""
 62 | 
 63 |     __slots__ = ("serializer",)
 64 | 
 65 |     #: The tag to mark the serialized object with. If empty, this tag is
 66 |     #: only used as an intermediate step during tagging.
 67 |     key: str = ""
 68 | 
 69 |     def __init__(self, serializer: TaggedJSONSerializer) -> None:
 70 |         """Create a tagger for the given serializer."""
 71 |         self.serializer = serializer
 72 | 
 73 |     def check(self, value: t.Any) -> bool:
 74 |         """Check if the given value should be tagged by this tag."""
 75 |         raise NotImplementedError
 76 | 
 77 |     def to_json(self, value: t.Any) -> t.Any:
 78 |         """Convert the Python object to an object that is a valid JSON type.
 79 |         The tag will be added later."""
 80 |         raise NotImplementedError
 81 | 
 82 |     def to_python(self, value: t.Any) -> t.Any:
 83 |         """Convert the JSON representation back to the correct type. The tag
 84 |         will already be removed."""
 85 |         raise NotImplementedError
 86 | 
 87 |     def tag(self, value: t.Any) -> dict[str, t.Any]:
 88 |         """Convert the value to a valid JSON type and add the tag structure
 89 |         around it."""
 90 |         return {self.key: self.to_json(value)}
 91 | 
 92 | 
 93 | class TagDict(JSONTag):
 94 |     """Tag for 1-item dicts whose only key matches a registered tag.
 95 | 
 96 |     Internally, the dict key is suffixed with `__`, and the suffix is removed
 97 |     when deserializing.
 98 |     """
 99 | 
100 |     __slots__ = ()
101 |     key = " di"
102 | 
103 |     def check(self, value: t.Any) -> bool:
104 |         return (
105 |             isinstance(value, dict)
106 |             and len(value) == 1
107 |             and next(iter(value)) in self.serializer.tags
108 |         )
109 | 
110 |     def to_json(self, value: t.Any) -> t.Any:
111 |         key = next(iter(value))
112 |         return {f"{key}__": self.serializer.tag(value[key])}
113 | 
114 |     def to_python(self, value: t.Any) -> t.Any:
115 |         key = next(iter(value))
116 |         return {key[:-2]: value[key]}
117 | 
118 | 
119 | class PassDict(JSONTag):
120 |     __slots__ = ()
121 | 
122 |     def check(self, value: t.Any) -> bool:
123 |         return isinstance(value, dict)
124 | 
125 |     def to_json(self, value: t.Any) -> t.Any:
126 |         # JSON objects may only have string keys, so don't bother tagging the
127 |         # key here.
128 |         return {k: self.serializer.tag(v) for k, v in value.items()}
129 | 
130 |     tag = to_json
131 | 
132 | 
133 | class TagTuple(JSONTag):
134 |     __slots__ = ()
135 |     key = " t"
136 | 
137 |     def check(self, value: t.Any) -> bool:
138 |         return isinstance(value, tuple)
139 | 
140 |     def to_json(self, value: t.Any) -> t.Any:
141 |         return [self.serializer.tag(item) for item in value]
142 | 
143 |     def to_python(self, value: t.Any) -> t.Any:
144 |         return tuple(value)
145 | 
146 | 
147 | class PassList(JSONTag):
148 |     __slots__ = ()
149 | 
150 |     def check(self, value: t.Any) -> bool:
151 |         return isinstance(value, list)
152 | 
153 |     def to_json(self, value: t.Any) -> t.Any:
154 |         return [self.serializer.tag(item) for item in value]
155 | 
156 |     tag = to_json
157 | 
158 | 
159 | class TagBytes(JSONTag):
160 |     __slots__ = ()
161 |     key = " b"
162 | 
163 |     def check(self, value: t.Any) -> bool:
164 |         return isinstance(value, bytes)
165 | 
166 |     def to_json(self, value: t.Any) -> t.Any:
167 |         return b64encode(value).decode("ascii")
168 | 
169 |     def to_python(self, value: t.Any) -> t.Any:
170 |         return b64decode(value)
171 | 
172 | 
173 | class TagMarkup(JSONTag):
174 |     """Serialize anything matching the :class:`~markupsafe.Markup` API by
175 |     having a ``__html__`` method to the result of that method. Always
176 |     deserializes to an instance of :class:`~markupsafe.Markup`."""
177 | 
178 |     __slots__ = ()
179 |     key = " m"
180 | 
181 |     def check(self, value: t.Any) -> bool:
182 |         return callable(getattr(value, "__html__", None))
183 | 
184 |     def to_json(self, value: t.Any) -> t.Any:
185 |         return str(value.__html__())
186 | 
187 |     def to_python(self, value: t.Any) -> t.Any:
188 |         return Markup(value)
189 | 
190 | 
191 | class TagUUID(JSONTag):
192 |     __slots__ = ()
193 |     key = " u"
194 | 
195 |     def check(self, value: t.Any) -> bool:
196 |         return isinstance(value, UUID)
197 | 
198 |     def to_json(self, value: t.Any) -> t.Any:
199 |         return value.hex
200 | 
201 |     def to_python(self, value: t.Any) -> t.Any:
202 |         return UUID(value)
203 | 
204 | 
205 | class TagDateTime(JSONTag):
206 |     __slots__ = ()
207 |     key = " d"
208 | 
209 |     def check(self, value: t.Any) -> bool:
210 |         return isinstance(value, datetime)
211 | 
212 |     def to_json(self, value: t.Any) -> t.Any:
213 |         return http_date(value)
214 | 
215 |     def to_python(self, value: t.Any) -> t.Any:
216 |         return parse_date(value)
217 | 
218 | 
219 | class TaggedJSONSerializer:
220 |     """Serializer that uses a tag system to compactly represent objects that
221 |     are not JSON types. Passed as the intermediate serializer to
222 |     :class:`itsdangerous.Serializer`.
223 | 
224 |     The following extra types are supported:
225 | 
226 |     * :class:`dict`
227 |     * :class:`tuple`
228 |     * :class:`bytes`
229 |     * :class:`~markupsafe.Markup`
230 |     * :class:`~uuid.UUID`
231 |     * :class:`~datetime.datetime`
232 |     """
233 | 
234 |     __slots__ = ("tags", "order")
235 | 
236 |     #: Tag classes to bind when creating the serializer. Other tags can be
237 |     #: added later using :meth:`~register`.
238 |     default_tags = [
239 |         TagDict,
240 |         PassDict,
241 |         TagTuple,
242 |         PassList,
243 |         TagBytes,
244 |         TagMarkup,
245 |         TagUUID,
246 |         TagDateTime,
247 |     ]
248 | 
249 |     def __init__(self) -> None:
250 |         self.tags: dict[str, JSONTag] = {}
251 |         self.order: list[JSONTag] = []
252 | 
253 |         for cls in self.default_tags:
254 |             self.register(cls)
255 | 
256 |     def register(
257 |         self,
258 |         tag_class: type[JSONTag],
259 |         force: bool = False,
260 |         index: int | None = None,
261 |     ) -> None:
262 |         """Register a new tag with this serializer.
263 | 
264 |         :param tag_class: tag class to register. Will be instantiated with this
265 |             serializer instance.
266 |         :param force: overwrite an existing tag. If false (default), a
267 |             :exc:`KeyError` is raised.
268 |         :param index: index to insert the new tag in the tag order. Useful when
269 |             the new tag is a special case of an existing tag. If ``None``
270 |             (default), the tag is appended to the end of the order.
271 | 
272 |         :raise KeyError: if the tag key is already registered and ``force`` is
273 |             not true.
274 |         """
275 |         tag = tag_class(self)
276 |         key = tag.key
277 | 
278 |         if key:
279 |             if not force and key in self.tags:
280 |                 raise KeyError(f"Tag '{key}' is already registered.")
281 | 
282 |             self.tags[key] = tag
283 | 
284 |         if index is None:
285 |             self.order.append(tag)
286 |         else:
287 |             self.order.insert(index, tag)
288 | 
289 |     def tag(self, value: t.Any) -> t.Any:
290 |         """Convert a value to a tagged representation if necessary."""
291 |         for tag in self.order:
292 |             if tag.check(value):
293 |                 return tag.tag(value)
294 | 
295 |         return value
296 | 
297 |     def untag(self, value: dict[str, t.Any]) -> t.Any:
298 |         """Convert a tagged representation back to the original type."""
299 |         if len(value) != 1:
300 |             return value
301 | 
302 |         key = next(iter(value))
303 | 
304 |         if key not in self.tags:
305 |             return value
306 | 
307 |         return self.tags[key].to_python(value[key])
308 | 
309 |     def _untag_scan(self, value: t.Any) -> t.Any:
310 |         if isinstance(value, dict):
311 |             # untag each item recursively
312 |             value = {k: self._untag_scan(v) for k, v in value.items()}
313 |             # untag the dict itself
314 |             value = self.untag(value)
315 |         elif isinstance(value, list):
316 |             # untag each item recursively
317 |             value = [self._untag_scan(item) for item in value]
318 | 
319 |         return value
320 | 
321 |     def dumps(self, value: t.Any) -> str:
322 |         """Tag the value and dump it to a compact JSON string."""
323 |         return dumps(self.tag(value), separators=(",", ":"))
324 | 
325 |     def loads(self, value: str) -> t.Any:
326 |         """Load data from a JSON string and deserialized any tagged objects."""
327 |         return self._untag_scan(loads(value))
328 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/sax.py:
--------------------------------------------------------------------------------

```python
  1 | # cython: language_level=2
  2 | 
  3 | """
  4 | SAX-based adapter to copy trees from/to the Python standard library.
  5 | 
  6 | Use the `ElementTreeContentHandler` class to build an ElementTree from
  7 | SAX events.
  8 | 
  9 | Use the `ElementTreeProducer` class or the `saxify()` function to fire
 10 | the SAX events of an ElementTree against a SAX ContentHandler.
 11 | 
 12 | See https://lxml.de/sax.html
 13 | """
 14 | 
 15 | 
 16 | from xml.sax.handler import ContentHandler
 17 | from lxml import etree
 18 | from lxml.etree import ElementTree, SubElement
 19 | from lxml.etree import Comment, ProcessingInstruction
 20 | 
 21 | 
 22 | class SaxError(etree.LxmlError):
 23 |     """General SAX error.
 24 |     """
 25 | 
 26 | 
 27 | def _getNsTag(tag):
 28 |     if tag[0] == '{':
 29 |         return tuple(tag[1:].split('}', 1))
 30 |     else:
 31 |         return None, tag
 32 | 
 33 | 
 34 | class ElementTreeContentHandler(ContentHandler):
 35 |     """Build an lxml ElementTree from SAX events.
 36 |     """
 37 |     def __init__(self, makeelement=None):
 38 |         ContentHandler.__init__(self)
 39 |         self._root = None
 40 |         self._root_siblings = []
 41 |         self._element_stack = []
 42 |         self._default_ns = None
 43 |         self._ns_mapping = { None : [None] }
 44 |         self._new_mappings = {}
 45 |         if makeelement is None:
 46 |             makeelement = etree.Element
 47 |         self._makeelement = makeelement
 48 | 
 49 |     def _get_etree(self):
 50 |         "Contains the generated ElementTree after parsing is finished."
 51 |         return ElementTree(self._root)
 52 | 
 53 |     etree = property(_get_etree, doc=_get_etree.__doc__)
 54 | 
 55 |     def setDocumentLocator(self, locator):
 56 |         pass
 57 | 
 58 |     def startDocument(self):
 59 |         pass
 60 | 
 61 |     def endDocument(self):
 62 |         pass
 63 | 
 64 |     def startPrefixMapping(self, prefix, uri):
 65 |         self._new_mappings[prefix] = uri
 66 |         try:
 67 |             self._ns_mapping[prefix].append(uri)
 68 |         except KeyError:
 69 |             self._ns_mapping[prefix] = [uri]
 70 |         if prefix is None:
 71 |             self._default_ns = uri
 72 | 
 73 |     def endPrefixMapping(self, prefix):
 74 |         ns_uri_list = self._ns_mapping[prefix]
 75 |         ns_uri_list.pop()
 76 |         if prefix is None:
 77 |             self._default_ns = ns_uri_list[-1]
 78 | 
 79 |     def _buildTag(self, ns_name_tuple):
 80 |         ns_uri, local_name = ns_name_tuple
 81 |         if ns_uri:
 82 |             el_tag = "{%s}%s" % ns_name_tuple
 83 |         elif self._default_ns:
 84 |             el_tag = "{%s}%s" % (self._default_ns, local_name)
 85 |         else:
 86 |             el_tag = local_name
 87 |         return el_tag
 88 | 
 89 |     def startElementNS(self, ns_name, qname, attributes=None):
 90 |         el_name = self._buildTag(ns_name)
 91 |         if attributes:
 92 |             attrs = {}
 93 |             try:
 94 |                 iter_attributes = attributes.iteritems()
 95 |             except AttributeError:
 96 |                 iter_attributes = attributes.items()
 97 | 
 98 |             for name_tuple, value in iter_attributes:
 99 |                 if name_tuple[0]:
100 |                     attr_name = "{%s}%s" % name_tuple
101 |                 else:
102 |                     attr_name = name_tuple[1]
103 |                 attrs[attr_name] = value
104 |         else:
105 |             attrs = None
106 | 
107 |         element_stack = self._element_stack
108 |         if self._root is None:
109 |             element = self._root = \
110 |                       self._makeelement(el_name, attrs, self._new_mappings)
111 |             if self._root_siblings and hasattr(element, 'addprevious'):
112 |                 for sibling in self._root_siblings:
113 |                     element.addprevious(sibling)
114 |             del self._root_siblings[:]
115 |         else:
116 |             element = SubElement(element_stack[-1], el_name,
117 |                                  attrs, self._new_mappings)
118 |         element_stack.append(element)
119 | 
120 |         self._new_mappings.clear()
121 | 
122 |     def processingInstruction(self, target, data):
123 |         pi = ProcessingInstruction(target, data)
124 |         if self._root is None:
125 |             self._root_siblings.append(pi)
126 |         else:
127 |             self._element_stack[-1].append(pi)
128 | 
129 |     def endElementNS(self, ns_name, qname):
130 |         element = self._element_stack.pop()
131 |         el_tag = self._buildTag(ns_name)
132 |         if el_tag != element.tag:
133 |             raise SaxError("Unexpected element closed: " + el_tag)
134 | 
135 |     def startElement(self, name, attributes=None):
136 |         if attributes:
137 |             attributes = {(None, k): v for k, v in attributes.items()}
138 |         self.startElementNS((None, name), name, attributes)
139 | 
140 |     def endElement(self, name):
141 |         self.endElementNS((None, name), name)
142 | 
143 |     def characters(self, data):
144 |         last_element = self._element_stack[-1]
145 |         try:
146 |             # if there already is a child element, we must append to its tail
147 |             last_element = last_element[-1]
148 |             last_element.tail = (last_element.tail or '') + data
149 |         except IndexError:
150 |             # otherwise: append to the text
151 |             last_element.text = (last_element.text or '') + data
152 | 
153 |     ignorableWhitespace = characters
154 | 
155 | 
156 | class ElementTreeProducer:
157 |     """Produces SAX events for an element and children.
158 |     """
159 |     def __init__(self, element_or_tree, content_handler):
160 |         try:
161 |             element = element_or_tree.getroot()
162 |         except AttributeError:
163 |             element = element_or_tree
164 |         self._element = element
165 |         self._content_handler = content_handler
166 |         from xml.sax.xmlreader import AttributesNSImpl as attr_class
167 |         self._attr_class = attr_class
168 |         self._empty_attributes = attr_class({}, {})
169 | 
170 |     def saxify(self):
171 |         self._content_handler.startDocument()
172 | 
173 |         element = self._element
174 |         if hasattr(element, 'getprevious'):
175 |             siblings = []
176 |             sibling = element.getprevious()
177 |             while getattr(sibling, 'tag', None) is ProcessingInstruction:
178 |                 siblings.append(sibling)
179 |                 sibling = sibling.getprevious()
180 |             for sibling in siblings[::-1]:
181 |                 self._recursive_saxify(sibling, {})
182 | 
183 |         self._recursive_saxify(element, {})
184 | 
185 |         if hasattr(element, 'getnext'):
186 |             sibling = element.getnext()
187 |             while getattr(sibling, 'tag', None) is ProcessingInstruction:
188 |                 self._recursive_saxify(sibling, {})
189 |                 sibling = sibling.getnext()
190 | 
191 |         self._content_handler.endDocument()
192 | 
193 |     def _recursive_saxify(self, element, parent_nsmap):
194 |         content_handler = self._content_handler
195 |         tag = element.tag
196 |         if tag is Comment or tag is ProcessingInstruction:
197 |             if tag is ProcessingInstruction:
198 |                 content_handler.processingInstruction(
199 |                     element.target, element.text)
200 |             tail = element.tail
201 |             if tail:
202 |                 content_handler.characters(tail)
203 |             return
204 | 
205 |         element_nsmap = element.nsmap
206 |         new_prefixes = []
207 |         if element_nsmap != parent_nsmap:
208 |             # There have been updates to the namespace
209 |             for prefix, ns_uri in element_nsmap.items():
210 |                 if parent_nsmap.get(prefix) != ns_uri:
211 |                     new_prefixes.append( (prefix, ns_uri) )
212 | 
213 |         attribs = element.items()
214 |         if attribs:
215 |             attr_values = {}
216 |             attr_qnames = {}
217 |             for attr_ns_name, value in attribs:
218 |                 attr_ns_tuple = _getNsTag(attr_ns_name)
219 |                 attr_values[attr_ns_tuple] = value
220 |                 attr_qnames[attr_ns_tuple] = self._build_qname(
221 |                     attr_ns_tuple[0], attr_ns_tuple[1], element_nsmap,
222 |                     preferred_prefix=None, is_attribute=True)
223 |             sax_attributes = self._attr_class(attr_values, attr_qnames)
224 |         else:
225 |             sax_attributes = self._empty_attributes
226 | 
227 |         ns_uri, local_name = _getNsTag(tag)
228 |         qname = self._build_qname(
229 |             ns_uri, local_name, element_nsmap, element.prefix, is_attribute=False)
230 | 
231 |         for prefix, uri in new_prefixes:
232 |             content_handler.startPrefixMapping(prefix, uri)
233 |         content_handler.startElementNS(
234 |             (ns_uri, local_name), qname, sax_attributes)
235 |         text = element.text
236 |         if text:
237 |             content_handler.characters(text)
238 |         for child in element:
239 |             self._recursive_saxify(child, element_nsmap)
240 |         content_handler.endElementNS((ns_uri, local_name), qname)
241 |         for prefix, uri in new_prefixes:
242 |             content_handler.endPrefixMapping(prefix)
243 |         tail = element.tail
244 |         if tail:
245 |             content_handler.characters(tail)
246 | 
247 |     def _build_qname(self, ns_uri, local_name, nsmap, preferred_prefix, is_attribute):
248 |         if ns_uri is None:
249 |             return local_name
250 | 
251 |         if not is_attribute and nsmap.get(preferred_prefix) == ns_uri:
252 |             prefix = preferred_prefix
253 |         else:
254 |             # Pick the first matching prefix, in alphabetical order.
255 |             candidates = [
256 |                 pfx for (pfx, uri) in nsmap.items()
257 |                 if pfx is not None and uri == ns_uri
258 |             ]
259 |             prefix = (
260 |                 candidates[0] if len(candidates) == 1
261 |                 else min(candidates) if candidates
262 |                 else None
263 |             )
264 | 
265 |         if prefix is None:
266 |             # Default namespace
267 |             return local_name
268 |         return prefix + ':' + local_name
269 | 
270 | 
271 | def saxify(element_or_tree, content_handler):
272 |     """One-shot helper to generate SAX events from an XML tree and fire
273 |     them against a SAX ContentHandler.
274 |     """
275 |     return ElementTreeProducer(element_or_tree, content_handler).saxify()
276 | 
```

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

```python
  1 | """Object representations for debugging purposes. Unlike the default
  2 | repr, these expose more information and produce HTML instead of ASCII.
  3 | 
  4 | Together with the CSS and JavaScript of the debugger this gives a
  5 | colorful and more compact output.
  6 | """
  7 | 
  8 | from __future__ import annotations
  9 | 
 10 | import codecs
 11 | import re
 12 | import sys
 13 | import typing as t
 14 | from collections import deque
 15 | from traceback import format_exception_only
 16 | 
 17 | from markupsafe import escape
 18 | 
 19 | missing = object()
 20 | _paragraph_re = re.compile(r"(?:\r\n|\r|\n){2,}")
 21 | RegexType = type(_paragraph_re)
 22 | 
 23 | HELP_HTML = """\
 24 | <div class=box>
 25 |   <h3>%(title)s</h3>
 26 |   <pre class=help>%(text)s</pre>
 27 | </div>\
 28 | """
 29 | OBJECT_DUMP_HTML = """\
 30 | <div class=box>
 31 |   <h3>%(title)s</h3>
 32 |   %(repr)s
 33 |   <table>%(items)s</table>
 34 | </div>\
 35 | """
 36 | 
 37 | 
 38 | def debug_repr(obj: object) -> str:
 39 |     """Creates a debug repr of an object as HTML string."""
 40 |     return DebugReprGenerator().repr(obj)
 41 | 
 42 | 
 43 | def dump(obj: object = missing) -> None:
 44 |     """Print the object details to stdout._write (for the interactive
 45 |     console of the web debugger.
 46 |     """
 47 |     gen = DebugReprGenerator()
 48 |     if obj is missing:
 49 |         rv = gen.dump_locals(sys._getframe(1).f_locals)
 50 |     else:
 51 |         rv = gen.dump_object(obj)
 52 |     sys.stdout._write(rv)  # type: ignore
 53 | 
 54 | 
 55 | class _Helper:
 56 |     """Displays an HTML version of the normal help, for the interactive
 57 |     debugger only because it requires a patched sys.stdout.
 58 |     """
 59 | 
 60 |     def __repr__(self) -> str:
 61 |         return "Type help(object) for help about object."
 62 | 
 63 |     def __call__(self, topic: t.Any | None = None) -> None:
 64 |         if topic is None:
 65 |             sys.stdout._write(f"<span class=help>{self!r}</span>")  # type: ignore
 66 |             return
 67 |         import pydoc
 68 | 
 69 |         pydoc.help(topic)
 70 |         rv = sys.stdout.reset()  # type: ignore
 71 |         paragraphs = _paragraph_re.split(rv)
 72 |         if len(paragraphs) > 1:
 73 |             title = paragraphs[0]
 74 |             text = "\n\n".join(paragraphs[1:])
 75 |         else:
 76 |             title = "Help"
 77 |             text = paragraphs[0]
 78 |         sys.stdout._write(HELP_HTML % {"title": title, "text": text})  # type: ignore
 79 | 
 80 | 
 81 | helper = _Helper()
 82 | 
 83 | 
 84 | def _add_subclass_info(inner: str, obj: object, base: type | tuple[type, ...]) -> str:
 85 |     if isinstance(base, tuple):
 86 |         for cls in base:
 87 |             if type(obj) is cls:
 88 |                 return inner
 89 |     elif type(obj) is base:
 90 |         return inner
 91 |     module = ""
 92 |     if obj.__class__.__module__ not in ("__builtin__", "exceptions"):
 93 |         module = f'<span class="module">{obj.__class__.__module__}.</span>'
 94 |     return f"{module}{type(obj).__name__}({inner})"
 95 | 
 96 | 
 97 | def _sequence_repr_maker(
 98 |     left: str, right: str, base: type, limit: int = 8
 99 | ) -> t.Callable[[DebugReprGenerator, t.Iterable[t.Any], bool], str]:
100 |     def proxy(self: DebugReprGenerator, obj: t.Iterable[t.Any], recursive: bool) -> str:
101 |         if recursive:
102 |             return _add_subclass_info(f"{left}...{right}", obj, base)
103 |         buf = [left]
104 |         have_extended_section = False
105 |         for idx, item in enumerate(obj):
106 |             if idx:
107 |                 buf.append(", ")
108 |             if idx == limit:
109 |                 buf.append('<span class="extended">')
110 |                 have_extended_section = True
111 |             buf.append(self.repr(item))
112 |         if have_extended_section:
113 |             buf.append("</span>")
114 |         buf.append(right)
115 |         return _add_subclass_info("".join(buf), obj, base)
116 | 
117 |     return proxy
118 | 
119 | 
120 | class DebugReprGenerator:
121 |     def __init__(self) -> None:
122 |         self._stack: list[t.Any] = []
123 | 
124 |     list_repr = _sequence_repr_maker("[", "]", list)
125 |     tuple_repr = _sequence_repr_maker("(", ")", tuple)
126 |     set_repr = _sequence_repr_maker("set([", "])", set)
127 |     frozenset_repr = _sequence_repr_maker("frozenset([", "])", frozenset)
128 |     deque_repr = _sequence_repr_maker(
129 |         '<span class="module">collections.</span>deque([', "])", deque
130 |     )
131 | 
132 |     def regex_repr(self, obj: t.Pattern[t.AnyStr]) -> str:
133 |         pattern = repr(obj.pattern)
134 |         pattern = codecs.decode(pattern, "unicode-escape", "ignore")
135 |         pattern = f"r{pattern}"
136 |         return f're.compile(<span class="string regex">{pattern}</span>)'
137 | 
138 |     def string_repr(self, obj: str | bytes, limit: int = 70) -> str:
139 |         buf = ['<span class="string">']
140 |         r = repr(obj)
141 | 
142 |         # shorten the repr when the hidden part would be at least 3 chars
143 |         if len(r) - limit > 2:
144 |             buf.extend(
145 |                 (
146 |                     escape(r[:limit]),
147 |                     '<span class="extended">',
148 |                     escape(r[limit:]),
149 |                     "</span>",
150 |                 )
151 |             )
152 |         else:
153 |             buf.append(escape(r))
154 | 
155 |         buf.append("</span>")
156 |         out = "".join(buf)
157 | 
158 |         # if the repr looks like a standard string, add subclass info if needed
159 |         if r[0] in "'\"" or (r[0] == "b" and r[1] in "'\""):
160 |             return _add_subclass_info(out, obj, (bytes, str))
161 | 
162 |         # otherwise, assume the repr distinguishes the subclass already
163 |         return out
164 | 
165 |     def dict_repr(
166 |         self,
167 |         d: dict[int, None] | dict[str, int] | dict[str | int, int],
168 |         recursive: bool,
169 |         limit: int = 5,
170 |     ) -> str:
171 |         if recursive:
172 |             return _add_subclass_info("{...}", d, dict)
173 |         buf = ["{"]
174 |         have_extended_section = False
175 |         for idx, (key, value) in enumerate(d.items()):
176 |             if idx:
177 |                 buf.append(", ")
178 |             if idx == limit - 1:
179 |                 buf.append('<span class="extended">')
180 |                 have_extended_section = True
181 |             buf.append(
182 |                 f'<span class="pair"><span class="key">{self.repr(key)}</span>:'
183 |                 f' <span class="value">{self.repr(value)}</span></span>'
184 |             )
185 |         if have_extended_section:
186 |             buf.append("</span>")
187 |         buf.append("}")
188 |         return _add_subclass_info("".join(buf), d, dict)
189 | 
190 |     def object_repr(self, obj: t.Any) -> str:
191 |         r = repr(obj)
192 |         return f'<span class="object">{escape(r)}</span>'
193 | 
194 |     def dispatch_repr(self, obj: t.Any, recursive: bool) -> str:
195 |         if obj is helper:
196 |             return f'<span class="help">{helper!r}</span>'
197 |         if isinstance(obj, (int, float, complex)):
198 |             return f'<span class="number">{obj!r}</span>'
199 |         if isinstance(obj, str) or isinstance(obj, bytes):
200 |             return self.string_repr(obj)
201 |         if isinstance(obj, RegexType):
202 |             return self.regex_repr(obj)
203 |         if isinstance(obj, list):
204 |             return self.list_repr(obj, recursive)
205 |         if isinstance(obj, tuple):
206 |             return self.tuple_repr(obj, recursive)
207 |         if isinstance(obj, set):
208 |             return self.set_repr(obj, recursive)
209 |         if isinstance(obj, frozenset):
210 |             return self.frozenset_repr(obj, recursive)
211 |         if isinstance(obj, dict):
212 |             return self.dict_repr(obj, recursive)
213 |         if isinstance(obj, deque):
214 |             return self.deque_repr(obj, recursive)
215 |         return self.object_repr(obj)
216 | 
217 |     def fallback_repr(self) -> str:
218 |         try:
219 |             info = "".join(format_exception_only(*sys.exc_info()[:2]))
220 |         except Exception:
221 |             info = "?"
222 |         return (
223 |             '<span class="brokenrepr">'
224 |             f"&lt;broken repr ({escape(info.strip())})&gt;</span>"
225 |         )
226 | 
227 |     def repr(self, obj: object) -> str:
228 |         recursive = False
229 |         for item in self._stack:
230 |             if item is obj:
231 |                 recursive = True
232 |                 break
233 |         self._stack.append(obj)
234 |         try:
235 |             try:
236 |                 return self.dispatch_repr(obj, recursive)
237 |             except Exception:
238 |                 return self.fallback_repr()
239 |         finally:
240 |             self._stack.pop()
241 | 
242 |     def dump_object(self, obj: object) -> str:
243 |         repr = None
244 |         items: list[tuple[str, str]] | None = None
245 | 
246 |         if isinstance(obj, dict):
247 |             title = "Contents of"
248 |             items = []
249 |             for key, value in obj.items():
250 |                 if not isinstance(key, str):
251 |                     items = None
252 |                     break
253 |                 items.append((key, self.repr(value)))
254 |         if items is None:
255 |             items = []
256 |             repr = self.repr(obj)
257 |             for key in dir(obj):
258 |                 try:
259 |                     items.append((key, self.repr(getattr(obj, key))))
260 |                 except Exception:
261 |                     pass
262 |             title = "Details for"
263 |         title += f" {object.__repr__(obj)[1:-1]}"
264 |         return self.render_object_dump(items, title, repr)
265 | 
266 |     def dump_locals(self, d: dict[str, t.Any]) -> str:
267 |         items = [(key, self.repr(value)) for key, value in d.items()]
268 |         return self.render_object_dump(items, "Local variables in frame")
269 | 
270 |     def render_object_dump(
271 |         self, items: list[tuple[str, str]], title: str, repr: str | None = None
272 |     ) -> str:
273 |         html_items = []
274 |         for key, value in items:
275 |             html_items.append(f"<tr><th>{escape(key)}<td><pre class=repr>{value}</pre>")
276 |         if not html_items:
277 |             html_items.append("<tr><td><em>Nothing</em>")
278 |         return OBJECT_DUMP_HTML % {
279 |             "title": escape(title),
280 |             "repr": f"<pre class=repr>{repr if repr else ''}</pre>",
281 |             "items": "\n".join(html_items),
282 |         }
283 | 
```

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

```python
  1 | import errno
  2 | import itertools
  3 | import logging
  4 | import os.path
  5 | import tempfile
  6 | import traceback
  7 | from contextlib import ExitStack, contextmanager
  8 | from pathlib import Path
  9 | from typing import (
 10 |     Any,
 11 |     Callable,
 12 |     Dict,
 13 |     Generator,
 14 |     List,
 15 |     Optional,
 16 |     TypeVar,
 17 |     Union,
 18 | )
 19 | 
 20 | from pip._internal.utils.misc import enum, rmtree
 21 | 
 22 | logger = logging.getLogger(__name__)
 23 | 
 24 | _T = TypeVar("_T", bound="TempDirectory")
 25 | 
 26 | 
 27 | # Kinds of temporary directories. Only needed for ones that are
 28 | # globally-managed.
 29 | tempdir_kinds = enum(
 30 |     BUILD_ENV="build-env",
 31 |     EPHEM_WHEEL_CACHE="ephem-wheel-cache",
 32 |     REQ_BUILD="req-build",
 33 | )
 34 | 
 35 | 
 36 | _tempdir_manager: Optional[ExitStack] = None
 37 | 
 38 | 
 39 | @contextmanager
 40 | def global_tempdir_manager() -> Generator[None, None, None]:
 41 |     global _tempdir_manager
 42 |     with ExitStack() as stack:
 43 |         old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack
 44 |         try:
 45 |             yield
 46 |         finally:
 47 |             _tempdir_manager = old_tempdir_manager
 48 | 
 49 | 
 50 | class TempDirectoryTypeRegistry:
 51 |     """Manages temp directory behavior"""
 52 | 
 53 |     def __init__(self) -> None:
 54 |         self._should_delete: Dict[str, bool] = {}
 55 | 
 56 |     def set_delete(self, kind: str, value: bool) -> None:
 57 |         """Indicate whether a TempDirectory of the given kind should be
 58 |         auto-deleted.
 59 |         """
 60 |         self._should_delete[kind] = value
 61 | 
 62 |     def get_delete(self, kind: str) -> bool:
 63 |         """Get configured auto-delete flag for a given TempDirectory type,
 64 |         default True.
 65 |         """
 66 |         return self._should_delete.get(kind, True)
 67 | 
 68 | 
 69 | _tempdir_registry: Optional[TempDirectoryTypeRegistry] = None
 70 | 
 71 | 
 72 | @contextmanager
 73 | def tempdir_registry() -> Generator[TempDirectoryTypeRegistry, None, None]:
 74 |     """Provides a scoped global tempdir registry that can be used to dictate
 75 |     whether directories should be deleted.
 76 |     """
 77 |     global _tempdir_registry
 78 |     old_tempdir_registry = _tempdir_registry
 79 |     _tempdir_registry = TempDirectoryTypeRegistry()
 80 |     try:
 81 |         yield _tempdir_registry
 82 |     finally:
 83 |         _tempdir_registry = old_tempdir_registry
 84 | 
 85 | 
 86 | class _Default:
 87 |     pass
 88 | 
 89 | 
 90 | _default = _Default()
 91 | 
 92 | 
 93 | class TempDirectory:
 94 |     """Helper class that owns and cleans up a temporary directory.
 95 | 
 96 |     This class can be used as a context manager or as an OO representation of a
 97 |     temporary directory.
 98 | 
 99 |     Attributes:
100 |         path
101 |             Location to the created temporary directory
102 |         delete
103 |             Whether the directory should be deleted when exiting
104 |             (when used as a contextmanager)
105 | 
106 |     Methods:
107 |         cleanup()
108 |             Deletes the temporary directory
109 | 
110 |     When used as a context manager, if the delete attribute is True, on
111 |     exiting the context the temporary directory is deleted.
112 |     """
113 | 
114 |     def __init__(
115 |         self,
116 |         path: Optional[str] = None,
117 |         delete: Union[bool, None, _Default] = _default,
118 |         kind: str = "temp",
119 |         globally_managed: bool = False,
120 |         ignore_cleanup_errors: bool = True,
121 |     ):
122 |         super().__init__()
123 | 
124 |         if delete is _default:
125 |             if path is not None:
126 |                 # If we were given an explicit directory, resolve delete option
127 |                 # now.
128 |                 delete = False
129 |             else:
130 |                 # Otherwise, we wait until cleanup and see what
131 |                 # tempdir_registry says.
132 |                 delete = None
133 | 
134 |         # The only time we specify path is in for editables where it
135 |         # is the value of the --src option.
136 |         if path is None:
137 |             path = self._create(kind)
138 | 
139 |         self._path = path
140 |         self._deleted = False
141 |         self.delete = delete
142 |         self.kind = kind
143 |         self.ignore_cleanup_errors = ignore_cleanup_errors
144 | 
145 |         if globally_managed:
146 |             assert _tempdir_manager is not None
147 |             _tempdir_manager.enter_context(self)
148 | 
149 |     @property
150 |     def path(self) -> str:
151 |         assert not self._deleted, f"Attempted to access deleted path: {self._path}"
152 |         return self._path
153 | 
154 |     def __repr__(self) -> str:
155 |         return f"<{self.__class__.__name__} {self.path!r}>"
156 | 
157 |     def __enter__(self: _T) -> _T:
158 |         return self
159 | 
160 |     def __exit__(self, exc: Any, value: Any, tb: Any) -> None:
161 |         if self.delete is not None:
162 |             delete = self.delete
163 |         elif _tempdir_registry:
164 |             delete = _tempdir_registry.get_delete(self.kind)
165 |         else:
166 |             delete = True
167 | 
168 |         if delete:
169 |             self.cleanup()
170 | 
171 |     def _create(self, kind: str) -> str:
172 |         """Create a temporary directory and store its path in self.path"""
173 |         # We realpath here because some systems have their default tmpdir
174 |         # symlinked to another directory.  This tends to confuse build
175 |         # scripts, so we canonicalize the path by traversing potential
176 |         # symlinks here.
177 |         path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-"))
178 |         logger.debug("Created temporary directory: %s", path)
179 |         return path
180 | 
181 |     def cleanup(self) -> None:
182 |         """Remove the temporary directory created and reset state"""
183 |         self._deleted = True
184 |         if not os.path.exists(self._path):
185 |             return
186 | 
187 |         errors: List[BaseException] = []
188 | 
189 |         def onerror(
190 |             func: Callable[..., Any],
191 |             path: Path,
192 |             exc_val: BaseException,
193 |         ) -> None:
194 |             """Log a warning for a `rmtree` error and continue"""
195 |             formatted_exc = "\n".join(
196 |                 traceback.format_exception_only(type(exc_val), exc_val)
197 |             )
198 |             formatted_exc = formatted_exc.rstrip()  # remove trailing new line
199 |             if func in (os.unlink, os.remove, os.rmdir):
200 |                 logger.debug(
201 |                     "Failed to remove a temporary file '%s' due to %s.\n",
202 |                     path,
203 |                     formatted_exc,
204 |                 )
205 |             else:
206 |                 logger.debug("%s failed with %s.", func.__qualname__, formatted_exc)
207 |             errors.append(exc_val)
208 | 
209 |         if self.ignore_cleanup_errors:
210 |             try:
211 |                 # first try with @retry; retrying to handle ephemeral errors
212 |                 rmtree(self._path, ignore_errors=False)
213 |             except OSError:
214 |                 # last pass ignore/log all errors
215 |                 rmtree(self._path, onexc=onerror)
216 |             if errors:
217 |                 logger.warning(
218 |                     "Failed to remove contents in a temporary directory '%s'.\n"
219 |                     "You can safely remove it manually.",
220 |                     self._path,
221 |                 )
222 |         else:
223 |             rmtree(self._path)
224 | 
225 | 
226 | class AdjacentTempDirectory(TempDirectory):
227 |     """Helper class that creates a temporary directory adjacent to a real one.
228 | 
229 |     Attributes:
230 |         original
231 |             The original directory to create a temp directory for.
232 |         path
233 |             After calling create() or entering, contains the full
234 |             path to the temporary directory.
235 |         delete
236 |             Whether the directory should be deleted when exiting
237 |             (when used as a contextmanager)
238 | 
239 |     """
240 | 
241 |     # The characters that may be used to name the temp directory
242 |     # We always prepend a ~ and then rotate through these until
243 |     # a usable name is found.
244 |     # pkg_resources raises a different error for .dist-info folder
245 |     # with leading '-' and invalid metadata
246 |     LEADING_CHARS = "-~.=%0123456789"
247 | 
248 |     def __init__(self, original: str, delete: Optional[bool] = None) -> None:
249 |         self.original = original.rstrip("/\\")
250 |         super().__init__(delete=delete)
251 | 
252 |     @classmethod
253 |     def _generate_names(cls, name: str) -> Generator[str, None, None]:
254 |         """Generates a series of temporary names.
255 | 
256 |         The algorithm replaces the leading characters in the name
257 |         with ones that are valid filesystem characters, but are not
258 |         valid package names (for both Python and pip definitions of
259 |         package).
260 |         """
261 |         for i in range(1, len(name)):
262 |             for candidate in itertools.combinations_with_replacement(
263 |                 cls.LEADING_CHARS, i - 1
264 |             ):
265 |                 new_name = "~" + "".join(candidate) + name[i:]
266 |                 if new_name != name:
267 |                     yield new_name
268 | 
269 |         # If we make it this far, we will have to make a longer name
270 |         for i in range(len(cls.LEADING_CHARS)):
271 |             for candidate in itertools.combinations_with_replacement(
272 |                 cls.LEADING_CHARS, i
273 |             ):
274 |                 new_name = "~" + "".join(candidate) + name
275 |                 if new_name != name:
276 |                     yield new_name
277 | 
278 |     def _create(self, kind: str) -> str:
279 |         root, name = os.path.split(self.original)
280 |         for candidate in self._generate_names(name):
281 |             path = os.path.join(root, candidate)
282 |             try:
283 |                 os.mkdir(path)
284 |             except OSError as ex:
285 |                 # Continue if the name exists already
286 |                 if ex.errno != errno.EEXIST:
287 |                     raise
288 |             else:
289 |                 path = os.path.realpath(path)
290 |                 break
291 |         else:
292 |             # Final fallback on the default behavior.
293 |             path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-"))
294 | 
295 |         logger.debug("Created temporary directory: %s", path)
296 |         return path
297 | 
```

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

```python
  1 | from __future__ import annotations
  2 | 
  3 | import socket
  4 | import typing
  5 | import warnings
  6 | from email.errors import MessageDefect
  7 | from http.client import IncompleteRead as httplib_IncompleteRead
  8 | 
  9 | if typing.TYPE_CHECKING:
 10 |     from .connection import HTTPConnection
 11 |     from .connectionpool import ConnectionPool
 12 |     from .response import HTTPResponse
 13 |     from .util.retry import Retry
 14 | 
 15 | # Base Exceptions
 16 | 
 17 | 
 18 | class HTTPError(Exception):
 19 |     """Base exception used by this module."""
 20 | 
 21 | 
 22 | class HTTPWarning(Warning):
 23 |     """Base warning used by this module."""
 24 | 
 25 | 
 26 | _TYPE_REDUCE_RESULT = typing.Tuple[
 27 |     typing.Callable[..., object], typing.Tuple[object, ...]
 28 | ]
 29 | 
 30 | 
 31 | class PoolError(HTTPError):
 32 |     """Base exception for errors caused within a pool."""
 33 | 
 34 |     def __init__(self, pool: ConnectionPool, message: str) -> None:
 35 |         self.pool = pool
 36 |         super().__init__(f"{pool}: {message}")
 37 | 
 38 |     def __reduce__(self) -> _TYPE_REDUCE_RESULT:
 39 |         # For pickling purposes.
 40 |         return self.__class__, (None, None)
 41 | 
 42 | 
 43 | class RequestError(PoolError):
 44 |     """Base exception for PoolErrors that have associated URLs."""
 45 | 
 46 |     def __init__(self, pool: ConnectionPool, url: str, message: str) -> None:
 47 |         self.url = url
 48 |         super().__init__(pool, message)
 49 | 
 50 |     def __reduce__(self) -> _TYPE_REDUCE_RESULT:
 51 |         # For pickling purposes.
 52 |         return self.__class__, (None, self.url, None)
 53 | 
 54 | 
 55 | class SSLError(HTTPError):
 56 |     """Raised when SSL certificate fails in an HTTPS connection."""
 57 | 
 58 | 
 59 | class ProxyError(HTTPError):
 60 |     """Raised when the connection to a proxy fails."""
 61 | 
 62 |     # The original error is also available as __cause__.
 63 |     original_error: Exception
 64 | 
 65 |     def __init__(self, message: str, error: Exception) -> None:
 66 |         super().__init__(message, error)
 67 |         self.original_error = error
 68 | 
 69 | 
 70 | class DecodeError(HTTPError):
 71 |     """Raised when automatic decoding based on Content-Type fails."""
 72 | 
 73 | 
 74 | class ProtocolError(HTTPError):
 75 |     """Raised when something unexpected happens mid-request/response."""
 76 | 
 77 | 
 78 | #: Renamed to ProtocolError but aliased for backwards compatibility.
 79 | ConnectionError = ProtocolError
 80 | 
 81 | 
 82 | # Leaf Exceptions
 83 | 
 84 | 
 85 | class MaxRetryError(RequestError):
 86 |     """Raised when the maximum number of retries is exceeded.
 87 | 
 88 |     :param pool: The connection pool
 89 |     :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool`
 90 |     :param str url: The requested Url
 91 |     :param reason: The underlying error
 92 |     :type reason: :class:`Exception`
 93 | 
 94 |     """
 95 | 
 96 |     def __init__(
 97 |         self, pool: ConnectionPool, url: str, reason: Exception | None = None
 98 |     ) -> None:
 99 |         self.reason = reason
100 | 
101 |         message = f"Max retries exceeded with url: {url} (Caused by {reason!r})"
102 | 
103 |         super().__init__(pool, url, message)
104 | 
105 | 
106 | class HostChangedError(RequestError):
107 |     """Raised when an existing pool gets a request for a foreign host."""
108 | 
109 |     def __init__(
110 |         self, pool: ConnectionPool, url: str, retries: Retry | int = 3
111 |     ) -> None:
112 |         message = f"Tried to open a foreign host with url: {url}"
113 |         super().__init__(pool, url, message)
114 |         self.retries = retries
115 | 
116 | 
117 | class TimeoutStateError(HTTPError):
118 |     """Raised when passing an invalid state to a timeout"""
119 | 
120 | 
121 | class TimeoutError(HTTPError):
122 |     """Raised when a socket timeout error occurs.
123 | 
124 |     Catching this error will catch both :exc:`ReadTimeoutErrors
125 |     <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`.
126 |     """
127 | 
128 | 
129 | class ReadTimeoutError(TimeoutError, RequestError):
130 |     """Raised when a socket timeout occurs while receiving data from a server"""
131 | 
132 | 
133 | # This timeout error does not have a URL attached and needs to inherit from the
134 | # base HTTPError
135 | class ConnectTimeoutError(TimeoutError):
136 |     """Raised when a socket timeout occurs while connecting to a server"""
137 | 
138 | 
139 | class NewConnectionError(ConnectTimeoutError, HTTPError):
140 |     """Raised when we fail to establish a new connection. Usually ECONNREFUSED."""
141 | 
142 |     def __init__(self, conn: HTTPConnection, message: str) -> None:
143 |         self.conn = conn
144 |         super().__init__(f"{conn}: {message}")
145 | 
146 |     @property
147 |     def pool(self) -> HTTPConnection:
148 |         warnings.warn(
149 |             "The 'pool' property is deprecated and will be removed "
150 |             "in urllib3 v2.1.0. Use 'conn' instead.",
151 |             DeprecationWarning,
152 |             stacklevel=2,
153 |         )
154 | 
155 |         return self.conn
156 | 
157 | 
158 | class NameResolutionError(NewConnectionError):
159 |     """Raised when host name resolution fails."""
160 | 
161 |     def __init__(self, host: str, conn: HTTPConnection, reason: socket.gaierror):
162 |         message = f"Failed to resolve '{host}' ({reason})"
163 |         super().__init__(conn, message)
164 | 
165 | 
166 | class EmptyPoolError(PoolError):
167 |     """Raised when a pool runs out of connections and no more are allowed."""
168 | 
169 | 
170 | class FullPoolError(PoolError):
171 |     """Raised when we try to add a connection to a full pool in blocking mode."""
172 | 
173 | 
174 | class ClosedPoolError(PoolError):
175 |     """Raised when a request enters a pool after the pool has been closed."""
176 | 
177 | 
178 | class LocationValueError(ValueError, HTTPError):
179 |     """Raised when there is something wrong with a given URL input."""
180 | 
181 | 
182 | class LocationParseError(LocationValueError):
183 |     """Raised when get_host or similar fails to parse the URL input."""
184 | 
185 |     def __init__(self, location: str) -> None:
186 |         message = f"Failed to parse: {location}"
187 |         super().__init__(message)
188 | 
189 |         self.location = location
190 | 
191 | 
192 | class URLSchemeUnknown(LocationValueError):
193 |     """Raised when a URL input has an unsupported scheme."""
194 | 
195 |     def __init__(self, scheme: str):
196 |         message = f"Not supported URL scheme {scheme}"
197 |         super().__init__(message)
198 | 
199 |         self.scheme = scheme
200 | 
201 | 
202 | class ResponseError(HTTPError):
203 |     """Used as a container for an error reason supplied in a MaxRetryError."""
204 | 
205 |     GENERIC_ERROR = "too many error responses"
206 |     SPECIFIC_ERROR = "too many {status_code} error responses"
207 | 
208 | 
209 | class SecurityWarning(HTTPWarning):
210 |     """Warned when performing security reducing actions"""
211 | 
212 | 
213 | class InsecureRequestWarning(SecurityWarning):
214 |     """Warned when making an unverified HTTPS request."""
215 | 
216 | 
217 | class NotOpenSSLWarning(SecurityWarning):
218 |     """Warned when using unsupported SSL library"""
219 | 
220 | 
221 | class SystemTimeWarning(SecurityWarning):
222 |     """Warned when system time is suspected to be wrong"""
223 | 
224 | 
225 | class InsecurePlatformWarning(SecurityWarning):
226 |     """Warned when certain TLS/SSL configuration is not available on a platform."""
227 | 
228 | 
229 | class DependencyWarning(HTTPWarning):
230 |     """
231 |     Warned when an attempt is made to import a module with missing optional
232 |     dependencies.
233 |     """
234 | 
235 | 
236 | class ResponseNotChunked(ProtocolError, ValueError):
237 |     """Response needs to be chunked in order to read it as chunks."""
238 | 
239 | 
240 | class BodyNotHttplibCompatible(HTTPError):
241 |     """
242 |     Body should be :class:`http.client.HTTPResponse` like
243 |     (have an fp attribute which returns raw chunks) for read_chunked().
244 |     """
245 | 
246 | 
247 | class IncompleteRead(HTTPError, httplib_IncompleteRead):
248 |     """
249 |     Response length doesn't match expected Content-Length
250 | 
251 |     Subclass of :class:`http.client.IncompleteRead` to allow int value
252 |     for ``partial`` to avoid creating large objects on streamed reads.
253 |     """
254 | 
255 |     partial: int  # type: ignore[assignment]
256 |     expected: int
257 | 
258 |     def __init__(self, partial: int, expected: int) -> None:
259 |         self.partial = partial
260 |         self.expected = expected
261 | 
262 |     def __repr__(self) -> str:
263 |         return "IncompleteRead(%i bytes read, %i more expected)" % (
264 |             self.partial,
265 |             self.expected,
266 |         )
267 | 
268 | 
269 | class InvalidChunkLength(HTTPError, httplib_IncompleteRead):
270 |     """Invalid chunk length in a chunked response."""
271 | 
272 |     def __init__(self, response: HTTPResponse, length: bytes) -> None:
273 |         self.partial: int = response.tell()  # type: ignore[assignment]
274 |         self.expected: int | None = response.length_remaining
275 |         self.response = response
276 |         self.length = length
277 | 
278 |     def __repr__(self) -> str:
279 |         return "InvalidChunkLength(got length %r, %i bytes read)" % (
280 |             self.length,
281 |             self.partial,
282 |         )
283 | 
284 | 
285 | class InvalidHeader(HTTPError):
286 |     """The header provided was somehow invalid."""
287 | 
288 | 
289 | class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):
290 |     """ProxyManager does not support the supplied scheme"""
291 | 
292 |     # TODO(t-8ch): Stop inheriting from AssertionError in v2.0.
293 | 
294 |     def __init__(self, scheme: str | None) -> None:
295 |         # 'localhost' is here because our URL parser parses
296 |         # localhost:8080 -> scheme=localhost, remove if we fix this.
297 |         if scheme == "localhost":
298 |             scheme = None
299 |         if scheme is None:
300 |             message = "Proxy URL had no scheme, should start with http:// or https://"
301 |         else:
302 |             message = f"Proxy URL had unsupported scheme {scheme}, should use http:// or https://"
303 |         super().__init__(message)
304 | 
305 | 
306 | class ProxySchemeUnsupported(ValueError):
307 |     """Fetching HTTPS resources through HTTPS proxies is unsupported"""
308 | 
309 | 
310 | class HeaderParsingError(HTTPError):
311 |     """Raised by assert_header_parsing, but we convert it to a log.warning statement."""
312 | 
313 |     def __init__(
314 |         self, defects: list[MessageDefect], unparsed_data: bytes | str | None
315 |     ) -> None:
316 |         message = f"{defects or 'Unknown'}, unparsed data: {unparsed_data!r}"
317 |         super().__init__(message)
318 | 
319 | 
320 | class UnrewindableBodyError(HTTPError):
321 |     """urllib3 encountered an error when trying to rewind a body"""
322 | 
```
Page 32/168FirstPrevNextLast