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

# Directory Structure

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

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py:
--------------------------------------------------------------------------------

```python
  1 | """This is invoked in a subprocess to call the build backend hooks.
  2 | 
  3 | It expects:
  4 | - Command line args: hook_name, control_dir
  5 | - Environment variables:
  6 |       PEP517_BUILD_BACKEND=entry.point:spec
  7 |       PEP517_BACKEND_PATH=paths (separated with os.pathsep)
  8 | - control_dir/input.json:
  9 |   - {"kwargs": {...}}
 10 | 
 11 | Results:
 12 | - control_dir/output.json
 13 |   - {"return_val": ...}
 14 | """
 15 | import json
 16 | import os
 17 | import os.path
 18 | import re
 19 | import shutil
 20 | import sys
 21 | import traceback
 22 | from glob import glob
 23 | from importlib import import_module
 24 | from os.path import join as pjoin
 25 | 
 26 | # This file is run as a script, and `import wrappers` is not zip-safe, so we
 27 | # include write_json() and read_json() from wrappers.py.
 28 | 
 29 | 
 30 | def write_json(obj, path, **kwargs):
 31 |     with open(path, 'w', encoding='utf-8') as f:
 32 |         json.dump(obj, f, **kwargs)
 33 | 
 34 | 
 35 | def read_json(path):
 36 |     with open(path, encoding='utf-8') as f:
 37 |         return json.load(f)
 38 | 
 39 | 
 40 | class BackendUnavailable(Exception):
 41 |     """Raised if we cannot import the backend"""
 42 |     def __init__(self, traceback):
 43 |         self.traceback = traceback
 44 | 
 45 | 
 46 | class BackendInvalid(Exception):
 47 |     """Raised if the backend is invalid"""
 48 |     def __init__(self, message):
 49 |         self.message = message
 50 | 
 51 | 
 52 | class HookMissing(Exception):
 53 |     """Raised if a hook is missing and we are not executing the fallback"""
 54 |     def __init__(self, hook_name=None):
 55 |         super().__init__(hook_name)
 56 |         self.hook_name = hook_name
 57 | 
 58 | 
 59 | def contained_in(filename, directory):
 60 |     """Test if a file is located within the given directory."""
 61 |     filename = os.path.normcase(os.path.abspath(filename))
 62 |     directory = os.path.normcase(os.path.abspath(directory))
 63 |     return os.path.commonprefix([filename, directory]) == directory
 64 | 
 65 | 
 66 | def _build_backend():
 67 |     """Find and load the build backend"""
 68 |     # Add in-tree backend directories to the front of sys.path.
 69 |     backend_path = os.environ.get('PEP517_BACKEND_PATH')
 70 |     if backend_path:
 71 |         extra_pathitems = backend_path.split(os.pathsep)
 72 |         sys.path[:0] = extra_pathitems
 73 | 
 74 |     ep = os.environ['PEP517_BUILD_BACKEND']
 75 |     mod_path, _, obj_path = ep.partition(':')
 76 |     try:
 77 |         obj = import_module(mod_path)
 78 |     except ImportError:
 79 |         raise BackendUnavailable(traceback.format_exc())
 80 | 
 81 |     if backend_path:
 82 |         if not any(
 83 |             contained_in(obj.__file__, path)
 84 |             for path in extra_pathitems
 85 |         ):
 86 |             raise BackendInvalid("Backend was not loaded from backend-path")
 87 | 
 88 |     if obj_path:
 89 |         for path_part in obj_path.split('.'):
 90 |             obj = getattr(obj, path_part)
 91 |     return obj
 92 | 
 93 | 
 94 | def _supported_features():
 95 |     """Return the list of options features supported by the backend.
 96 | 
 97 |     Returns a list of strings.
 98 |     The only possible value is 'build_editable'.
 99 |     """
100 |     backend = _build_backend()
101 |     features = []
102 |     if hasattr(backend, "build_editable"):
103 |         features.append("build_editable")
104 |     return features
105 | 
106 | 
107 | def get_requires_for_build_wheel(config_settings):
108 |     """Invoke the optional get_requires_for_build_wheel hook
109 | 
110 |     Returns [] if the hook is not defined.
111 |     """
112 |     backend = _build_backend()
113 |     try:
114 |         hook = backend.get_requires_for_build_wheel
115 |     except AttributeError:
116 |         return []
117 |     else:
118 |         return hook(config_settings)
119 | 
120 | 
121 | def get_requires_for_build_editable(config_settings):
122 |     """Invoke the optional get_requires_for_build_editable hook
123 | 
124 |     Returns [] if the hook is not defined.
125 |     """
126 |     backend = _build_backend()
127 |     try:
128 |         hook = backend.get_requires_for_build_editable
129 |     except AttributeError:
130 |         return []
131 |     else:
132 |         return hook(config_settings)
133 | 
134 | 
135 | def prepare_metadata_for_build_wheel(
136 |         metadata_directory, config_settings, _allow_fallback):
137 |     """Invoke optional prepare_metadata_for_build_wheel
138 | 
139 |     Implements a fallback by building a wheel if the hook isn't defined,
140 |     unless _allow_fallback is False in which case HookMissing is raised.
141 |     """
142 |     backend = _build_backend()
143 |     try:
144 |         hook = backend.prepare_metadata_for_build_wheel
145 |     except AttributeError:
146 |         if not _allow_fallback:
147 |             raise HookMissing()
148 |     else:
149 |         return hook(metadata_directory, config_settings)
150 |     # fallback to build_wheel outside the try block to avoid exception chaining
151 |     # which can be confusing to users and is not relevant
152 |     whl_basename = backend.build_wheel(metadata_directory, config_settings)
153 |     return _get_wheel_metadata_from_wheel(whl_basename, metadata_directory,
154 |                                           config_settings)
155 | 
156 | 
157 | def prepare_metadata_for_build_editable(
158 |         metadata_directory, config_settings, _allow_fallback):
159 |     """Invoke optional prepare_metadata_for_build_editable
160 | 
161 |     Implements a fallback by building an editable wheel if the hook isn't
162 |     defined, unless _allow_fallback is False in which case HookMissing is
163 |     raised.
164 |     """
165 |     backend = _build_backend()
166 |     try:
167 |         hook = backend.prepare_metadata_for_build_editable
168 |     except AttributeError:
169 |         if not _allow_fallback:
170 |             raise HookMissing()
171 |         try:
172 |             build_hook = backend.build_editable
173 |         except AttributeError:
174 |             raise HookMissing(hook_name='build_editable')
175 |         else:
176 |             whl_basename = build_hook(metadata_directory, config_settings)
177 |             return _get_wheel_metadata_from_wheel(whl_basename,
178 |                                                   metadata_directory,
179 |                                                   config_settings)
180 |     else:
181 |         return hook(metadata_directory, config_settings)
182 | 
183 | 
184 | WHEEL_BUILT_MARKER = 'PEP517_ALREADY_BUILT_WHEEL'
185 | 
186 | 
187 | def _dist_info_files(whl_zip):
188 |     """Identify the .dist-info folder inside a wheel ZipFile."""
189 |     res = []
190 |     for path in whl_zip.namelist():
191 |         m = re.match(r'[^/\\]+-[^/\\]+\.dist-info/', path)
192 |         if m:
193 |             res.append(path)
194 |     if res:
195 |         return res
196 |     raise Exception("No .dist-info folder found in wheel")
197 | 
198 | 
199 | def _get_wheel_metadata_from_wheel(
200 |         whl_basename, metadata_directory, config_settings):
201 |     """Extract the metadata from a wheel.
202 | 
203 |     Fallback for when the build backend does not
204 |     define the 'get_wheel_metadata' hook.
205 |     """
206 |     from zipfile import ZipFile
207 |     with open(os.path.join(metadata_directory, WHEEL_BUILT_MARKER), 'wb'):
208 |         pass  # Touch marker file
209 | 
210 |     whl_file = os.path.join(metadata_directory, whl_basename)
211 |     with ZipFile(whl_file) as zipf:
212 |         dist_info = _dist_info_files(zipf)
213 |         zipf.extractall(path=metadata_directory, members=dist_info)
214 |     return dist_info[0].split('/')[0]
215 | 
216 | 
217 | def _find_already_built_wheel(metadata_directory):
218 |     """Check for a wheel already built during the get_wheel_metadata hook.
219 |     """
220 |     if not metadata_directory:
221 |         return None
222 |     metadata_parent = os.path.dirname(metadata_directory)
223 |     if not os.path.isfile(pjoin(metadata_parent, WHEEL_BUILT_MARKER)):
224 |         return None
225 | 
226 |     whl_files = glob(os.path.join(metadata_parent, '*.whl'))
227 |     if not whl_files:
228 |         print('Found wheel built marker, but no .whl files')
229 |         return None
230 |     if len(whl_files) > 1:
231 |         print('Found multiple .whl files; unspecified behaviour. '
232 |               'Will call build_wheel.')
233 |         return None
234 | 
235 |     # Exactly one .whl file
236 |     return whl_files[0]
237 | 
238 | 
239 | def build_wheel(wheel_directory, config_settings, metadata_directory=None):
240 |     """Invoke the mandatory build_wheel hook.
241 | 
242 |     If a wheel was already built in the
243 |     prepare_metadata_for_build_wheel fallback, this
244 |     will copy it rather than rebuilding the wheel.
245 |     """
246 |     prebuilt_whl = _find_already_built_wheel(metadata_directory)
247 |     if prebuilt_whl:
248 |         shutil.copy2(prebuilt_whl, wheel_directory)
249 |         return os.path.basename(prebuilt_whl)
250 | 
251 |     return _build_backend().build_wheel(wheel_directory, config_settings,
252 |                                         metadata_directory)
253 | 
254 | 
255 | def build_editable(wheel_directory, config_settings, metadata_directory=None):
256 |     """Invoke the optional build_editable hook.
257 | 
258 |     If a wheel was already built in the
259 |     prepare_metadata_for_build_editable fallback, this
260 |     will copy it rather than rebuilding the wheel.
261 |     """
262 |     backend = _build_backend()
263 |     try:
264 |         hook = backend.build_editable
265 |     except AttributeError:
266 |         raise HookMissing()
267 |     else:
268 |         prebuilt_whl = _find_already_built_wheel(metadata_directory)
269 |         if prebuilt_whl:
270 |             shutil.copy2(prebuilt_whl, wheel_directory)
271 |             return os.path.basename(prebuilt_whl)
272 | 
273 |         return hook(wheel_directory, config_settings, metadata_directory)
274 | 
275 | 
276 | def get_requires_for_build_sdist(config_settings):
277 |     """Invoke the optional get_requires_for_build_wheel hook
278 | 
279 |     Returns [] if the hook is not defined.
280 |     """
281 |     backend = _build_backend()
282 |     try:
283 |         hook = backend.get_requires_for_build_sdist
284 |     except AttributeError:
285 |         return []
286 |     else:
287 |         return hook(config_settings)
288 | 
289 | 
290 | class _DummyException(Exception):
291 |     """Nothing should ever raise this exception"""
292 | 
293 | 
294 | class GotUnsupportedOperation(Exception):
295 |     """For internal use when backend raises UnsupportedOperation"""
296 |     def __init__(self, traceback):
297 |         self.traceback = traceback
298 | 
299 | 
300 | def build_sdist(sdist_directory, config_settings):
301 |     """Invoke the mandatory build_sdist hook."""
302 |     backend = _build_backend()
303 |     try:
304 |         return backend.build_sdist(sdist_directory, config_settings)
305 |     except getattr(backend, 'UnsupportedOperation', _DummyException):
306 |         raise GotUnsupportedOperation(traceback.format_exc())
307 | 
308 | 
309 | HOOK_NAMES = {
310 |     'get_requires_for_build_wheel',
311 |     'prepare_metadata_for_build_wheel',
312 |     'build_wheel',
313 |     'get_requires_for_build_editable',
314 |     'prepare_metadata_for_build_editable',
315 |     'build_editable',
316 |     'get_requires_for_build_sdist',
317 |     'build_sdist',
318 |     '_supported_features',
319 | }
320 | 
321 | 
322 | def main():
323 |     if len(sys.argv) < 3:
324 |         sys.exit("Needs args: hook_name, control_dir")
325 |     hook_name = sys.argv[1]
326 |     control_dir = sys.argv[2]
327 |     if hook_name not in HOOK_NAMES:
328 |         sys.exit("Unknown hook: %s" % hook_name)
329 |     hook = globals()[hook_name]
330 | 
331 |     hook_input = read_json(pjoin(control_dir, 'input.json'))
332 | 
333 |     json_out = {'unsupported': False, 'return_val': None}
334 |     try:
335 |         json_out['return_val'] = hook(**hook_input['kwargs'])
336 |     except BackendUnavailable as e:
337 |         json_out['no_backend'] = True
338 |         json_out['traceback'] = e.traceback
339 |     except BackendInvalid as e:
340 |         json_out['backend_invalid'] = True
341 |         json_out['backend_error'] = e.message
342 |     except GotUnsupportedOperation as e:
343 |         json_out['unsupported'] = True
344 |         json_out['traceback'] = e.traceback
345 |     except HookMissing as e:
346 |         json_out['hook_missing'] = True
347 |         json_out['missing_hook_name'] = e.hook_name or hook_name
348 | 
349 |     write_json(json_out, pjoin(control_dir, 'output.json'), indent=2)
350 | 
351 | 
352 | if __name__ == '__main__':
353 |     main()
354 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | This module provides a pool manager that uses Google App Engine's
  3 | `URLFetch Service <https://cloud.google.com/appengine/docs/python/urlfetch>`_.
  4 | 
  5 | Example usage::
  6 | 
  7 |     from pip._vendor.urllib3 import PoolManager
  8 |     from pip._vendor.urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox
  9 | 
 10 |     if is_appengine_sandbox():
 11 |         # AppEngineManager uses AppEngine's URLFetch API behind the scenes
 12 |         http = AppEngineManager()
 13 |     else:
 14 |         # PoolManager uses a socket-level API behind the scenes
 15 |         http = PoolManager()
 16 | 
 17 |     r = http.request('GET', 'https://google.com/')
 18 | 
 19 | There are `limitations <https://cloud.google.com/appengine/docs/python/\
 20 | urlfetch/#Python_Quotas_and_limits>`_ to the URLFetch service and it may not be
 21 | the best choice for your application. There are three options for using
 22 | urllib3 on Google App Engine:
 23 | 
 24 | 1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is
 25 |    cost-effective in many circumstances as long as your usage is within the
 26 |    limitations.
 27 | 2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets.
 28 |    Sockets also have `limitations and restrictions
 29 |    <https://cloud.google.com/appengine/docs/python/sockets/\
 30 |    #limitations-and-restrictions>`_ and have a lower free quota than URLFetch.
 31 |    To use sockets, be sure to specify the following in your ``app.yaml``::
 32 | 
 33 |         env_variables:
 34 |             GAE_USE_SOCKETS_HTTPLIB : 'true'
 35 | 
 36 | 3. If you are using `App Engine Flexible
 37 | <https://cloud.google.com/appengine/docs/flexible/>`_, you can use the standard
 38 | :class:`PoolManager` without any configuration or special environment variables.
 39 | """
 40 | 
 41 | from __future__ import absolute_import
 42 | 
 43 | import io
 44 | import logging
 45 | import warnings
 46 | 
 47 | from ..exceptions import (
 48 |     HTTPError,
 49 |     HTTPWarning,
 50 |     MaxRetryError,
 51 |     ProtocolError,
 52 |     SSLError,
 53 |     TimeoutError,
 54 | )
 55 | from ..packages.six.moves.urllib.parse import urljoin
 56 | from ..request import RequestMethods
 57 | from ..response import HTTPResponse
 58 | from ..util.retry import Retry
 59 | from ..util.timeout import Timeout
 60 | from . import _appengine_environ
 61 | 
 62 | try:
 63 |     from google.appengine.api import urlfetch
 64 | except ImportError:
 65 |     urlfetch = None
 66 | 
 67 | 
 68 | log = logging.getLogger(__name__)
 69 | 
 70 | 
 71 | class AppEnginePlatformWarning(HTTPWarning):
 72 |     pass
 73 | 
 74 | 
 75 | class AppEnginePlatformError(HTTPError):
 76 |     pass
 77 | 
 78 | 
 79 | class AppEngineManager(RequestMethods):
 80 |     """
 81 |     Connection manager for Google App Engine sandbox applications.
 82 | 
 83 |     This manager uses the URLFetch service directly instead of using the
 84 |     emulated httplib, and is subject to URLFetch limitations as described in
 85 |     the App Engine documentation `here
 86 |     <https://cloud.google.com/appengine/docs/python/urlfetch>`_.
 87 | 
 88 |     Notably it will raise an :class:`AppEnginePlatformError` if:
 89 |         * URLFetch is not available.
 90 |         * If you attempt to use this on App Engine Flexible, as full socket
 91 |           support is available.
 92 |         * If a request size is more than 10 megabytes.
 93 |         * If a response size is more than 32 megabytes.
 94 |         * If you use an unsupported request method such as OPTIONS.
 95 | 
 96 |     Beyond those cases, it will raise normal urllib3 errors.
 97 |     """
 98 | 
 99 |     def __init__(
100 |         self,
101 |         headers=None,
102 |         retries=None,
103 |         validate_certificate=True,
104 |         urlfetch_retries=True,
105 |     ):
106 |         if not urlfetch:
107 |             raise AppEnginePlatformError(
108 |                 "URLFetch is not available in this environment."
109 |             )
110 | 
111 |         warnings.warn(
112 |             "urllib3 is using URLFetch on Google App Engine sandbox instead "
113 |             "of sockets. To use sockets directly instead of URLFetch see "
114 |             "https://urllib3.readthedocs.io/en/1.26.x/reference/urllib3.contrib.html.",
115 |             AppEnginePlatformWarning,
116 |         )
117 | 
118 |         RequestMethods.__init__(self, headers)
119 |         self.validate_certificate = validate_certificate
120 |         self.urlfetch_retries = urlfetch_retries
121 | 
122 |         self.retries = retries or Retry.DEFAULT
123 | 
124 |     def __enter__(self):
125 |         return self
126 | 
127 |     def __exit__(self, exc_type, exc_val, exc_tb):
128 |         # Return False to re-raise any potential exceptions
129 |         return False
130 | 
131 |     def urlopen(
132 |         self,
133 |         method,
134 |         url,
135 |         body=None,
136 |         headers=None,
137 |         retries=None,
138 |         redirect=True,
139 |         timeout=Timeout.DEFAULT_TIMEOUT,
140 |         **response_kw
141 |     ):
142 | 
143 |         retries = self._get_retries(retries, redirect)
144 | 
145 |         try:
146 |             follow_redirects = redirect and retries.redirect != 0 and retries.total
147 |             response = urlfetch.fetch(
148 |                 url,
149 |                 payload=body,
150 |                 method=method,
151 |                 headers=headers or {},
152 |                 allow_truncated=False,
153 |                 follow_redirects=self.urlfetch_retries and follow_redirects,
154 |                 deadline=self._get_absolute_timeout(timeout),
155 |                 validate_certificate=self.validate_certificate,
156 |             )
157 |         except urlfetch.DeadlineExceededError as e:
158 |             raise TimeoutError(self, e)
159 | 
160 |         except urlfetch.InvalidURLError as e:
161 |             if "too large" in str(e):
162 |                 raise AppEnginePlatformError(
163 |                     "URLFetch request too large, URLFetch only "
164 |                     "supports requests up to 10mb in size.",
165 |                     e,
166 |                 )
167 |             raise ProtocolError(e)
168 | 
169 |         except urlfetch.DownloadError as e:
170 |             if "Too many redirects" in str(e):
171 |                 raise MaxRetryError(self, url, reason=e)
172 |             raise ProtocolError(e)
173 | 
174 |         except urlfetch.ResponseTooLargeError as e:
175 |             raise AppEnginePlatformError(
176 |                 "URLFetch response too large, URLFetch only supports"
177 |                 "responses up to 32mb in size.",
178 |                 e,
179 |             )
180 | 
181 |         except urlfetch.SSLCertificateError as e:
182 |             raise SSLError(e)
183 | 
184 |         except urlfetch.InvalidMethodError as e:
185 |             raise AppEnginePlatformError(
186 |                 "URLFetch does not support method: %s" % method, e
187 |             )
188 | 
189 |         http_response = self._urlfetch_response_to_http_response(
190 |             response, retries=retries, **response_kw
191 |         )
192 | 
193 |         # Handle redirect?
194 |         redirect_location = redirect and http_response.get_redirect_location()
195 |         if redirect_location:
196 |             # Check for redirect response
197 |             if self.urlfetch_retries and retries.raise_on_redirect:
198 |                 raise MaxRetryError(self, url, "too many redirects")
199 |             else:
200 |                 if http_response.status == 303:
201 |                     method = "GET"
202 | 
203 |                 try:
204 |                     retries = retries.increment(
205 |                         method, url, response=http_response, _pool=self
206 |                     )
207 |                 except MaxRetryError:
208 |                     if retries.raise_on_redirect:
209 |                         raise MaxRetryError(self, url, "too many redirects")
210 |                     return http_response
211 | 
212 |                 retries.sleep_for_retry(http_response)
213 |                 log.debug("Redirecting %s -> %s", url, redirect_location)
214 |                 redirect_url = urljoin(url, redirect_location)
215 |                 return self.urlopen(
216 |                     method,
217 |                     redirect_url,
218 |                     body,
219 |                     headers,
220 |                     retries=retries,
221 |                     redirect=redirect,
222 |                     timeout=timeout,
223 |                     **response_kw
224 |                 )
225 | 
226 |         # Check if we should retry the HTTP response.
227 |         has_retry_after = bool(http_response.headers.get("Retry-After"))
228 |         if retries.is_retry(method, http_response.status, has_retry_after):
229 |             retries = retries.increment(method, url, response=http_response, _pool=self)
230 |             log.debug("Retry: %s", url)
231 |             retries.sleep(http_response)
232 |             return self.urlopen(
233 |                 method,
234 |                 url,
235 |                 body=body,
236 |                 headers=headers,
237 |                 retries=retries,
238 |                 redirect=redirect,
239 |                 timeout=timeout,
240 |                 **response_kw
241 |             )
242 | 
243 |         return http_response
244 | 
245 |     def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw):
246 | 
247 |         if is_prod_appengine():
248 |             # Production GAE handles deflate encoding automatically, but does
249 |             # not remove the encoding header.
250 |             content_encoding = urlfetch_resp.headers.get("content-encoding")
251 | 
252 |             if content_encoding == "deflate":
253 |                 del urlfetch_resp.headers["content-encoding"]
254 | 
255 |         transfer_encoding = urlfetch_resp.headers.get("transfer-encoding")
256 |         # We have a full response's content,
257 |         # so let's make sure we don't report ourselves as chunked data.
258 |         if transfer_encoding == "chunked":
259 |             encodings = transfer_encoding.split(",")
260 |             encodings.remove("chunked")
261 |             urlfetch_resp.headers["transfer-encoding"] = ",".join(encodings)
262 | 
263 |         original_response = HTTPResponse(
264 |             # In order for decoding to work, we must present the content as
265 |             # a file-like object.
266 |             body=io.BytesIO(urlfetch_resp.content),
267 |             msg=urlfetch_resp.header_msg,
268 |             headers=urlfetch_resp.headers,
269 |             status=urlfetch_resp.status_code,
270 |             **response_kw
271 |         )
272 | 
273 |         return HTTPResponse(
274 |             body=io.BytesIO(urlfetch_resp.content),
275 |             headers=urlfetch_resp.headers,
276 |             status=urlfetch_resp.status_code,
277 |             original_response=original_response,
278 |             **response_kw
279 |         )
280 | 
281 |     def _get_absolute_timeout(self, timeout):
282 |         if timeout is Timeout.DEFAULT_TIMEOUT:
283 |             return None  # Defer to URLFetch's default.
284 |         if isinstance(timeout, Timeout):
285 |             if timeout._read is not None or timeout._connect is not None:
286 |                 warnings.warn(
287 |                     "URLFetch does not support granular timeout settings, "
288 |                     "reverting to total or default URLFetch timeout.",
289 |                     AppEnginePlatformWarning,
290 |                 )
291 |             return timeout.total
292 |         return timeout
293 | 
294 |     def _get_retries(self, retries, redirect):
295 |         if not isinstance(retries, Retry):
296 |             retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
297 | 
298 |         if retries.connect or retries.read or retries.redirect:
299 |             warnings.warn(
300 |                 "URLFetch only supports total retries and does not "
301 |                 "recognize connect, read, or redirect retry parameters.",
302 |                 AppEnginePlatformWarning,
303 |             )
304 | 
305 |         return retries
306 | 
307 | 
308 | # Alias methods from _appengine_environ to maintain public API interface.
309 | 
310 | is_appengine = _appengine_environ.is_appengine
311 | is_appengine_sandbox = _appengine_environ.is_appengine_sandbox
312 | is_local_appengine = _appengine_environ.is_local_appengine
313 | is_prod_appengine = _appengine_environ.is_prod_appengine
314 | is_prod_appengine_mvms = _appengine_environ.is_prod_appengine_mvms
315 | 
```

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

```python
  1 | from typing import Any, Generic, List, Optional, TextIO, TypeVar, Union, overload
  2 | 
  3 | from . import get_console
  4 | from .console import Console
  5 | from .text import Text, TextType
  6 | 
  7 | PromptType = TypeVar("PromptType")
  8 | DefaultType = TypeVar("DefaultType")
  9 | 
 10 | 
 11 | class PromptError(Exception):
 12 |     """Exception base class for prompt related errors."""
 13 | 
 14 | 
 15 | class InvalidResponse(PromptError):
 16 |     """Exception to indicate a response was invalid. Raise this within process_response() to indicate an error
 17 |     and provide an error message.
 18 | 
 19 |     Args:
 20 |         message (Union[str, Text]): Error message.
 21 |     """
 22 | 
 23 |     def __init__(self, message: TextType) -> None:
 24 |         self.message = message
 25 | 
 26 |     def __rich__(self) -> TextType:
 27 |         return self.message
 28 | 
 29 | 
 30 | class PromptBase(Generic[PromptType]):
 31 |     """Ask the user for input until a valid response is received. This is the base class, see one of
 32 |     the concrete classes for examples.
 33 | 
 34 |     Args:
 35 |         prompt (TextType, optional): Prompt text. Defaults to "".
 36 |         console (Console, optional): A Console instance or None to use global console. Defaults to None.
 37 |         password (bool, optional): Enable password input. Defaults to False.
 38 |         choices (List[str], optional): A list of valid choices. Defaults to None.
 39 |         show_default (bool, optional): Show default in prompt. Defaults to True.
 40 |         show_choices (bool, optional): Show choices in prompt. Defaults to True.
 41 |     """
 42 | 
 43 |     response_type: type = str
 44 | 
 45 |     validate_error_message = "[prompt.invalid]Please enter a valid value"
 46 |     illegal_choice_message = (
 47 |         "[prompt.invalid.choice]Please select one of the available options"
 48 |     )
 49 |     prompt_suffix = ": "
 50 | 
 51 |     choices: Optional[List[str]] = None
 52 | 
 53 |     def __init__(
 54 |         self,
 55 |         prompt: TextType = "",
 56 |         *,
 57 |         console: Optional[Console] = None,
 58 |         password: bool = False,
 59 |         choices: Optional[List[str]] = None,
 60 |         show_default: bool = True,
 61 |         show_choices: bool = True,
 62 |     ) -> None:
 63 |         self.console = console or get_console()
 64 |         self.prompt = (
 65 |             Text.from_markup(prompt, style="prompt")
 66 |             if isinstance(prompt, str)
 67 |             else prompt
 68 |         )
 69 |         self.password = password
 70 |         if choices is not None:
 71 |             self.choices = choices
 72 |         self.show_default = show_default
 73 |         self.show_choices = show_choices
 74 | 
 75 |     @classmethod
 76 |     @overload
 77 |     def ask(
 78 |         cls,
 79 |         prompt: TextType = "",
 80 |         *,
 81 |         console: Optional[Console] = None,
 82 |         password: bool = False,
 83 |         choices: Optional[List[str]] = None,
 84 |         show_default: bool = True,
 85 |         show_choices: bool = True,
 86 |         default: DefaultType,
 87 |         stream: Optional[TextIO] = None,
 88 |     ) -> Union[DefaultType, PromptType]:
 89 |         ...
 90 | 
 91 |     @classmethod
 92 |     @overload
 93 |     def ask(
 94 |         cls,
 95 |         prompt: TextType = "",
 96 |         *,
 97 |         console: Optional[Console] = None,
 98 |         password: bool = False,
 99 |         choices: Optional[List[str]] = None,
100 |         show_default: bool = True,
101 |         show_choices: bool = True,
102 |         stream: Optional[TextIO] = None,
103 |     ) -> PromptType:
104 |         ...
105 | 
106 |     @classmethod
107 |     def ask(
108 |         cls,
109 |         prompt: TextType = "",
110 |         *,
111 |         console: Optional[Console] = None,
112 |         password: bool = False,
113 |         choices: Optional[List[str]] = None,
114 |         show_default: bool = True,
115 |         show_choices: bool = True,
116 |         default: Any = ...,
117 |         stream: Optional[TextIO] = None,
118 |     ) -> Any:
119 |         """Shortcut to construct and run a prompt loop and return the result.
120 | 
121 |         Example:
122 |             >>> filename = Prompt.ask("Enter a filename")
123 | 
124 |         Args:
125 |             prompt (TextType, optional): Prompt text. Defaults to "".
126 |             console (Console, optional): A Console instance or None to use global console. Defaults to None.
127 |             password (bool, optional): Enable password input. Defaults to False.
128 |             choices (List[str], optional): A list of valid choices. Defaults to None.
129 |             show_default (bool, optional): Show default in prompt. Defaults to True.
130 |             show_choices (bool, optional): Show choices in prompt. Defaults to True.
131 |             stream (TextIO, optional): Optional text file open for reading to get input. Defaults to None.
132 |         """
133 |         _prompt = cls(
134 |             prompt,
135 |             console=console,
136 |             password=password,
137 |             choices=choices,
138 |             show_default=show_default,
139 |             show_choices=show_choices,
140 |         )
141 |         return _prompt(default=default, stream=stream)
142 | 
143 |     def render_default(self, default: DefaultType) -> Text:
144 |         """Turn the supplied default in to a Text instance.
145 | 
146 |         Args:
147 |             default (DefaultType): Default value.
148 | 
149 |         Returns:
150 |             Text: Text containing rendering of default value.
151 |         """
152 |         return Text(f"({default})", "prompt.default")
153 | 
154 |     def make_prompt(self, default: DefaultType) -> Text:
155 |         """Make prompt text.
156 | 
157 |         Args:
158 |             default (DefaultType): Default value.
159 | 
160 |         Returns:
161 |             Text: Text to display in prompt.
162 |         """
163 |         prompt = self.prompt.copy()
164 |         prompt.end = ""
165 | 
166 |         if self.show_choices and self.choices:
167 |             _choices = "/".join(self.choices)
168 |             choices = f"[{_choices}]"
169 |             prompt.append(" ")
170 |             prompt.append(choices, "prompt.choices")
171 | 
172 |         if (
173 |             default != ...
174 |             and self.show_default
175 |             and isinstance(default, (str, self.response_type))
176 |         ):
177 |             prompt.append(" ")
178 |             _default = self.render_default(default)
179 |             prompt.append(_default)
180 | 
181 |         prompt.append(self.prompt_suffix)
182 | 
183 |         return prompt
184 | 
185 |     @classmethod
186 |     def get_input(
187 |         cls,
188 |         console: Console,
189 |         prompt: TextType,
190 |         password: bool,
191 |         stream: Optional[TextIO] = None,
192 |     ) -> str:
193 |         """Get input from user.
194 | 
195 |         Args:
196 |             console (Console): Console instance.
197 |             prompt (TextType): Prompt text.
198 |             password (bool): Enable password entry.
199 | 
200 |         Returns:
201 |             str: String from user.
202 |         """
203 |         return console.input(prompt, password=password, stream=stream)
204 | 
205 |     def check_choice(self, value: str) -> bool:
206 |         """Check value is in the list of valid choices.
207 | 
208 |         Args:
209 |             value (str): Value entered by user.
210 | 
211 |         Returns:
212 |             bool: True if choice was valid, otherwise False.
213 |         """
214 |         assert self.choices is not None
215 |         return value.strip() in self.choices
216 | 
217 |     def process_response(self, value: str) -> PromptType:
218 |         """Process response from user, convert to prompt type.
219 | 
220 |         Args:
221 |             value (str): String typed by user.
222 | 
223 |         Raises:
224 |             InvalidResponse: If ``value`` is invalid.
225 | 
226 |         Returns:
227 |             PromptType: The value to be returned from ask method.
228 |         """
229 |         value = value.strip()
230 |         try:
231 |             return_value: PromptType = self.response_type(value)
232 |         except ValueError:
233 |             raise InvalidResponse(self.validate_error_message)
234 | 
235 |         if self.choices is not None and not self.check_choice(value):
236 |             raise InvalidResponse(self.illegal_choice_message)
237 | 
238 |         return return_value
239 | 
240 |     def on_validate_error(self, value: str, error: InvalidResponse) -> None:
241 |         """Called to handle validation error.
242 | 
243 |         Args:
244 |             value (str): String entered by user.
245 |             error (InvalidResponse): Exception instance the initiated the error.
246 |         """
247 |         self.console.print(error)
248 | 
249 |     def pre_prompt(self) -> None:
250 |         """Hook to display something before the prompt."""
251 | 
252 |     @overload
253 |     def __call__(self, *, stream: Optional[TextIO] = None) -> PromptType:
254 |         ...
255 | 
256 |     @overload
257 |     def __call__(
258 |         self, *, default: DefaultType, stream: Optional[TextIO] = None
259 |     ) -> Union[PromptType, DefaultType]:
260 |         ...
261 | 
262 |     def __call__(self, *, default: Any = ..., stream: Optional[TextIO] = None) -> Any:
263 |         """Run the prompt loop.
264 | 
265 |         Args:
266 |             default (Any, optional): Optional default value.
267 | 
268 |         Returns:
269 |             PromptType: Processed value.
270 |         """
271 |         while True:
272 |             self.pre_prompt()
273 |             prompt = self.make_prompt(default)
274 |             value = self.get_input(self.console, prompt, self.password, stream=stream)
275 |             if value == "" and default != ...:
276 |                 return default
277 |             try:
278 |                 return_value = self.process_response(value)
279 |             except InvalidResponse as error:
280 |                 self.on_validate_error(value, error)
281 |                 continue
282 |             else:
283 |                 return return_value
284 | 
285 | 
286 | class Prompt(PromptBase[str]):
287 |     """A prompt that returns a str.
288 | 
289 |     Example:
290 |         >>> name = Prompt.ask("Enter your name")
291 | 
292 | 
293 |     """
294 | 
295 |     response_type = str
296 | 
297 | 
298 | class IntPrompt(PromptBase[int]):
299 |     """A prompt that returns an integer.
300 | 
301 |     Example:
302 |         >>> burrito_count = IntPrompt.ask("How many burritos do you want to order")
303 | 
304 |     """
305 | 
306 |     response_type = int
307 |     validate_error_message = "[prompt.invalid]Please enter a valid integer number"
308 | 
309 | 
310 | class FloatPrompt(PromptBase[float]):
311 |     """A prompt that returns a float.
312 | 
313 |     Example:
314 |         >>> temperature = FloatPrompt.ask("Enter desired temperature")
315 | 
316 |     """
317 | 
318 |     response_type = float
319 |     validate_error_message = "[prompt.invalid]Please enter a number"
320 | 
321 | 
322 | class Confirm(PromptBase[bool]):
323 |     """A yes / no confirmation prompt.
324 | 
325 |     Example:
326 |         >>> if Confirm.ask("Continue"):
327 |                 run_job()
328 | 
329 |     """
330 | 
331 |     response_type = bool
332 |     validate_error_message = "[prompt.invalid]Please enter Y or N"
333 |     choices: List[str] = ["y", "n"]
334 | 
335 |     def render_default(self, default: DefaultType) -> Text:
336 |         """Render the default as (y) or (n) rather than True/False."""
337 |         yes, no = self.choices
338 |         return Text(f"({yes})" if default else f"({no})", style="prompt.default")
339 | 
340 |     def process_response(self, value: str) -> bool:
341 |         """Convert choices to a bool."""
342 |         value = value.strip().lower()
343 |         if value not in self.choices:
344 |             raise InvalidResponse(self.validate_error_message)
345 |         return value == self.choices[0]
346 | 
347 | 
348 | if __name__ == "__main__":  # pragma: no cover
349 |     from pip._vendor.rich import print
350 | 
351 |     if Confirm.ask("Run [i]prompt[/i] tests?", default=True):
352 |         while True:
353 |             result = IntPrompt.ask(
354 |                 ":rocket: Enter a number between [b]1[/b] and [b]10[/b]", default=5
355 |             )
356 |             if result >= 1 and result <= 10:
357 |                 break
358 |             print(":pile_of_poo: [prompt.invalid]Number must be between 1 and 10")
359 |         print(f"number={result}")
360 | 
361 |         while True:
362 |             password = Prompt.ask(
363 |                 "Please enter a password [cyan](must be at least 5 characters)",
364 |                 password=True,
365 |             )
366 |             if len(password) >= 5:
367 |                 break
368 |             print("[prompt.invalid]password too short")
369 |         print(f"password={password!r}")
370 | 
371 |         fruit = Prompt.ask("Enter a fruit", choices=["apple", "orange", "pear"])
372 |         print(f"fruit={fruit!r}")
373 | 
374 |     else:
375 |         print("[b]OK :loudly_crying_face:")
376 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import absolute_import
  2 | 
  3 | try:
  4 |     from collections.abc import Mapping, MutableMapping
  5 | except ImportError:
  6 |     from collections import Mapping, MutableMapping
  7 | try:
  8 |     from threading import RLock
  9 | except ImportError:  # Platform-specific: No threads available
 10 | 
 11 |     class RLock:
 12 |         def __enter__(self):
 13 |             pass
 14 | 
 15 |         def __exit__(self, exc_type, exc_value, traceback):
 16 |             pass
 17 | 
 18 | 
 19 | from collections import OrderedDict
 20 | 
 21 | from .exceptions import InvalidHeader
 22 | from .packages import six
 23 | from .packages.six import iterkeys, itervalues
 24 | 
 25 | __all__ = ["RecentlyUsedContainer", "HTTPHeaderDict"]
 26 | 
 27 | 
 28 | _Null = object()
 29 | 
 30 | 
 31 | class RecentlyUsedContainer(MutableMapping):
 32 |     """
 33 |     Provides a thread-safe dict-like container which maintains up to
 34 |     ``maxsize`` keys while throwing away the least-recently-used keys beyond
 35 |     ``maxsize``.
 36 | 
 37 |     :param maxsize:
 38 |         Maximum number of recent elements to retain.
 39 | 
 40 |     :param dispose_func:
 41 |         Every time an item is evicted from the container,
 42 |         ``dispose_func(value)`` is called.  Callback which will get called
 43 |     """
 44 | 
 45 |     ContainerCls = OrderedDict
 46 | 
 47 |     def __init__(self, maxsize=10, dispose_func=None):
 48 |         self._maxsize = maxsize
 49 |         self.dispose_func = dispose_func
 50 | 
 51 |         self._container = self.ContainerCls()
 52 |         self.lock = RLock()
 53 | 
 54 |     def __getitem__(self, key):
 55 |         # Re-insert the item, moving it to the end of the eviction line.
 56 |         with self.lock:
 57 |             item = self._container.pop(key)
 58 |             self._container[key] = item
 59 |             return item
 60 | 
 61 |     def __setitem__(self, key, value):
 62 |         evicted_value = _Null
 63 |         with self.lock:
 64 |             # Possibly evict the existing value of 'key'
 65 |             evicted_value = self._container.get(key, _Null)
 66 |             self._container[key] = value
 67 | 
 68 |             # If we didn't evict an existing value, we might have to evict the
 69 |             # least recently used item from the beginning of the container.
 70 |             if len(self._container) > self._maxsize:
 71 |                 _key, evicted_value = self._container.popitem(last=False)
 72 | 
 73 |         if self.dispose_func and evicted_value is not _Null:
 74 |             self.dispose_func(evicted_value)
 75 | 
 76 |     def __delitem__(self, key):
 77 |         with self.lock:
 78 |             value = self._container.pop(key)
 79 | 
 80 |         if self.dispose_func:
 81 |             self.dispose_func(value)
 82 | 
 83 |     def __len__(self):
 84 |         with self.lock:
 85 |             return len(self._container)
 86 | 
 87 |     def __iter__(self):
 88 |         raise NotImplementedError(
 89 |             "Iteration over this class is unlikely to be threadsafe."
 90 |         )
 91 | 
 92 |     def clear(self):
 93 |         with self.lock:
 94 |             # Copy pointers to all values, then wipe the mapping
 95 |             values = list(itervalues(self._container))
 96 |             self._container.clear()
 97 | 
 98 |         if self.dispose_func:
 99 |             for value in values:
100 |                 self.dispose_func(value)
101 | 
102 |     def keys(self):
103 |         with self.lock:
104 |             return list(iterkeys(self._container))
105 | 
106 | 
107 | class HTTPHeaderDict(MutableMapping):
108 |     """
109 |     :param headers:
110 |         An iterable of field-value pairs. Must not contain multiple field names
111 |         when compared case-insensitively.
112 | 
113 |     :param kwargs:
114 |         Additional field-value pairs to pass in to ``dict.update``.
115 | 
116 |     A ``dict`` like container for storing HTTP Headers.
117 | 
118 |     Field names are stored and compared case-insensitively in compliance with
119 |     RFC 7230. Iteration provides the first case-sensitive key seen for each
120 |     case-insensitive pair.
121 | 
122 |     Using ``__setitem__`` syntax overwrites fields that compare equal
123 |     case-insensitively in order to maintain ``dict``'s api. For fields that
124 |     compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
125 |     in a loop.
126 | 
127 |     If multiple fields that are equal case-insensitively are passed to the
128 |     constructor or ``.update``, the behavior is undefined and some will be
129 |     lost.
130 | 
131 |     >>> headers = HTTPHeaderDict()
132 |     >>> headers.add('Set-Cookie', 'foo=bar')
133 |     >>> headers.add('set-cookie', 'baz=quxx')
134 |     >>> headers['content-length'] = '7'
135 |     >>> headers['SET-cookie']
136 |     'foo=bar, baz=quxx'
137 |     >>> headers['Content-Length']
138 |     '7'
139 |     """
140 | 
141 |     def __init__(self, headers=None, **kwargs):
142 |         super(HTTPHeaderDict, self).__init__()
143 |         self._container = OrderedDict()
144 |         if headers is not None:
145 |             if isinstance(headers, HTTPHeaderDict):
146 |                 self._copy_from(headers)
147 |             else:
148 |                 self.extend(headers)
149 |         if kwargs:
150 |             self.extend(kwargs)
151 | 
152 |     def __setitem__(self, key, val):
153 |         self._container[key.lower()] = [key, val]
154 |         return self._container[key.lower()]
155 | 
156 |     def __getitem__(self, key):
157 |         val = self._container[key.lower()]
158 |         return ", ".join(val[1:])
159 | 
160 |     def __delitem__(self, key):
161 |         del self._container[key.lower()]
162 | 
163 |     def __contains__(self, key):
164 |         return key.lower() in self._container
165 | 
166 |     def __eq__(self, other):
167 |         if not isinstance(other, Mapping) and not hasattr(other, "keys"):
168 |             return False
169 |         if not isinstance(other, type(self)):
170 |             other = type(self)(other)
171 |         return dict((k.lower(), v) for k, v in self.itermerged()) == dict(
172 |             (k.lower(), v) for k, v in other.itermerged()
173 |         )
174 | 
175 |     def __ne__(self, other):
176 |         return not self.__eq__(other)
177 | 
178 |     if six.PY2:  # Python 2
179 |         iterkeys = MutableMapping.iterkeys
180 |         itervalues = MutableMapping.itervalues
181 | 
182 |     __marker = object()
183 | 
184 |     def __len__(self):
185 |         return len(self._container)
186 | 
187 |     def __iter__(self):
188 |         # Only provide the originally cased names
189 |         for vals in self._container.values():
190 |             yield vals[0]
191 | 
192 |     def pop(self, key, default=__marker):
193 |         """D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
194 |         If key is not found, d is returned if given, otherwise KeyError is raised.
195 |         """
196 |         # Using the MutableMapping function directly fails due to the private marker.
197 |         # Using ordinary dict.pop would expose the internal structures.
198 |         # So let's reinvent the wheel.
199 |         try:
200 |             value = self[key]
201 |         except KeyError:
202 |             if default is self.__marker:
203 |                 raise
204 |             return default
205 |         else:
206 |             del self[key]
207 |             return value
208 | 
209 |     def discard(self, key):
210 |         try:
211 |             del self[key]
212 |         except KeyError:
213 |             pass
214 | 
215 |     def add(self, key, val):
216 |         """Adds a (name, value) pair, doesn't overwrite the value if it already
217 |         exists.
218 | 
219 |         >>> headers = HTTPHeaderDict(foo='bar')
220 |         >>> headers.add('Foo', 'baz')
221 |         >>> headers['foo']
222 |         'bar, baz'
223 |         """
224 |         key_lower = key.lower()
225 |         new_vals = [key, val]
226 |         # Keep the common case aka no item present as fast as possible
227 |         vals = self._container.setdefault(key_lower, new_vals)
228 |         if new_vals is not vals:
229 |             vals.append(val)
230 | 
231 |     def extend(self, *args, **kwargs):
232 |         """Generic import function for any type of header-like object.
233 |         Adapted version of MutableMapping.update in order to insert items
234 |         with self.add instead of self.__setitem__
235 |         """
236 |         if len(args) > 1:
237 |             raise TypeError(
238 |                 "extend() takes at most 1 positional "
239 |                 "arguments ({0} given)".format(len(args))
240 |             )
241 |         other = args[0] if len(args) >= 1 else ()
242 | 
243 |         if isinstance(other, HTTPHeaderDict):
244 |             for key, val in other.iteritems():
245 |                 self.add(key, val)
246 |         elif isinstance(other, Mapping):
247 |             for key in other:
248 |                 self.add(key, other[key])
249 |         elif hasattr(other, "keys"):
250 |             for key in other.keys():
251 |                 self.add(key, other[key])
252 |         else:
253 |             for key, value in other:
254 |                 self.add(key, value)
255 | 
256 |         for key, value in kwargs.items():
257 |             self.add(key, value)
258 | 
259 |     def getlist(self, key, default=__marker):
260 |         """Returns a list of all the values for the named field. Returns an
261 |         empty list if the key doesn't exist."""
262 |         try:
263 |             vals = self._container[key.lower()]
264 |         except KeyError:
265 |             if default is self.__marker:
266 |                 return []
267 |             return default
268 |         else:
269 |             return vals[1:]
270 | 
271 |     def _prepare_for_method_change(self):
272 |         """
273 |         Remove content-specific header fields before changing the request
274 |         method to GET or HEAD according to RFC 9110, Section 15.4.
275 |         """
276 |         content_specific_headers = [
277 |             "Content-Encoding",
278 |             "Content-Language",
279 |             "Content-Location",
280 |             "Content-Type",
281 |             "Content-Length",
282 |             "Digest",
283 |             "Last-Modified",
284 |         ]
285 |         for header in content_specific_headers:
286 |             self.discard(header)
287 |         return self
288 | 
289 |     # Backwards compatibility for httplib
290 |     getheaders = getlist
291 |     getallmatchingheaders = getlist
292 |     iget = getlist
293 | 
294 |     # Backwards compatibility for http.cookiejar
295 |     get_all = getlist
296 | 
297 |     def __repr__(self):
298 |         return "%s(%s)" % (type(self).__name__, dict(self.itermerged()))
299 | 
300 |     def _copy_from(self, other):
301 |         for key in other:
302 |             val = other.getlist(key)
303 |             if isinstance(val, list):
304 |                 # Don't need to convert tuples
305 |                 val = list(val)
306 |             self._container[key.lower()] = [key] + val
307 | 
308 |     def copy(self):
309 |         clone = type(self)()
310 |         clone._copy_from(self)
311 |         return clone
312 | 
313 |     def iteritems(self):
314 |         """Iterate over all header lines, including duplicate ones."""
315 |         for key in self:
316 |             vals = self._container[key.lower()]
317 |             for val in vals[1:]:
318 |                 yield vals[0], val
319 | 
320 |     def itermerged(self):
321 |         """Iterate over all headers, merging duplicate ones together."""
322 |         for key in self:
323 |             val = self._container[key.lower()]
324 |             yield val[0], ", ".join(val[1:])
325 | 
326 |     def items(self):
327 |         return list(self.iteritems())
328 | 
329 |     @classmethod
330 |     def from_httplib(cls, message):  # Python 2
331 |         """Read headers from a Python 2 httplib message object."""
332 |         # python2.7 does not expose a proper API for exporting multiheaders
333 |         # efficiently. This function re-reads raw lines from the message
334 |         # object and extracts the multiheaders properly.
335 |         obs_fold_continued_leaders = (" ", "\t")
336 |         headers = []
337 | 
338 |         for line in message.headers:
339 |             if line.startswith(obs_fold_continued_leaders):
340 |                 if not headers:
341 |                     # We received a header line that starts with OWS as described
342 |                     # in RFC-7230 S3.2.4. This indicates a multiline header, but
343 |                     # there exists no previous header to which we can attach it.
344 |                     raise InvalidHeader(
345 |                         "Header continuation with no previous header: %s" % line
346 |                     )
347 |                 else:
348 |                     key, value = headers[-1]
349 |                     headers[-1] = (key, value + " " + line.strip())
350 |                     continue
351 | 
352 |             key, value = line.split(":", 1)
353 |             headers.append((key, value.strip()))
354 | 
355 |         return cls(headers)
356 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/useragent/test/test_os.json:
--------------------------------------------------------------------------------

```json
1 | {"test_cases": [{"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Linux x86_64) AppleWebKit/534.26+ WebKitGTK+/1.4.1 luakit/f3a2dbe", "minor": null, "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20110408 conkeror/0.9.3", "minor": null, "patch": null}, {"major": "0", "family": "Debian", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20110302 Conkeror/0.9.2 (Debian-0.9.2+git100804-1)", "minor": "9", "patch": "2"}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110414 Lightning/1.0b3pre Thunderbird/3.1.10", "minor": null, "patch": null}, {"major": null, "family": "Windows 7", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 ThunderBrowse/3.3.5", "minor": null, "patch": null}, {"major": null, "family": "Windows", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; en-US) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.5.1", "minor": null, "patch": null}, {"major": null, "family": "Other", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "minor": null, "patch": null}, {"major": null, "family": "Other", "patch_minor": null, "user_agent_string": "Mozilla/5.0 YottaaMonitor;", "minor": null, "patch": null}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) RockMelt/0.8.34.841 Chrome/6.0.472.63 Safari/534.3", "minor": null, "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20110417 IceCat/4.0", "minor": null, "patch": null}, {"major": null, "family": "WeTab", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux i686; nl-NL) AppleWebKit/534.3 (KHTML, like Gecko) WeTab-Browser Safari/534.3", "minor": null, "patch": null}, {"major": "1", "family": "Kindle", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; Linux 2.6.10) NetFront/3.3 Kindle/1.0 (screen 600x800)", "minor": "0", "patch": null}, {"major": "3", "family": "Android", "patch_minor": null, "user_agent_string": "Opera/9.80 (Android 3.2; Linux; Opera Tablet/ADR-1106291546; U; en) Presto/2.8.149 Version/11.10", "minor": "2", "patch": null}, {"major": null, "family": "Windows 7", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) FireWeb/1.0.0.0", "minor": null, "patch": null}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Comodo_Dragon/4.1.1.11 Chrome/4.1.249.1042 Safari/532.5", "minor": null, "patch": null}, {"major": "4", "family": "iOS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5", "minor": "3", "patch": "2"}, {"major": "3", "family": "Android", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7510 Build/HRI83) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", "minor": "0", "patch": "1"}, {"major": "3", "family": "webOS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.58 Safari/534.6 TouchPad/1.0", "minor": "0", "patch": "0"}, {"major": "7", "family": "Windows Phone OS", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; SGH-i917)", "minor": "0", "patch": null}, {"major": "10", "family": "Mac OS X", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17 Skyfire/2.0", "minor": "5", "patch": "7"}, {"major": "1", "family": "BlackBerry Tablet OS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+", "minor": "0", "patch": "0"}, {"major": "10", "family": "Ubuntu", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16", "minor": "10", "patch": null}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20110407 Firefox/4.0.3 PaleMoon/4.0.3", "minor": null, "patch": null}, {"major": null, "family": "Symbian OS", "patch_minor": null, "user_agent_string": "Opera/9.80 (Series 60; Opera Mini/6.24455/25.677; U; fr) Presto/2.5.25 Version/10.54", "minor": null, "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; Linux i686 (x86_64); rv:2.0b4) Gecko/20100818 Firefox/4.0b4", "minor": null, "patch": null}, {"major": "10", "family": "Ubuntu", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12", "minor": "04", "patch": null}, {"major": "9", "family": "Ubuntu", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1pre) Gecko/20090717 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1pre", "minor": "04", "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; Linux x86_64; rv:2.0b8pre) Gecko/20101031 Firefox-4.0/4.0b8pre", "minor": null, "patch": null}, {"major": null, "family": "BSD", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; BSD Four; en-US) AppleWebKit/533.3 (KHTML, like Gecko) rekonq Safari/533.3", "minor": null, "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (X11; U; Linux; de-DE) AppleWebKit/527  (KHTML, like Gecko, Safari/419.3) konqueror/4.3.1", "minor": null, "patch": null}, {"major": null, "family": "Other", "patch_minor": null, "user_agent_string": "SomethingWeNeverKnewExisted", "minor": null, "patch": null}, {"major": null, "family": "Linux", "patch_minor": null, "user_agent_string": "Midori/0.2 (X11; Linux; U; en-us) WebKit/531.2 ", "minor": null, "patch": null}, {"major": null, "family": "Windows 7", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1) Gecko/20100208 MozillaDeveloperPreview/3.7a1 (.NET CLR 3.5.30729)", "minor": null, "patch": null}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.24 Version/10.53", "minor": null, "patch": null}, {"major": null, "family": "Symbian OS", "patch_minor": null, "user_agent_string": "Opera/9.80 (S60; SymbOS; Opera Mobi/275; U; es-ES) Presto/2.4.13 Version/10.00", "minor": null, "patch": null}, {"major": "1", "family": "webOS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (webOS/1.2; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0", "minor": "2", "patch": null}, {"major": "3", "family": "iOS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10", "minor": "2", "patch": null}, {"major": "1", "family": "Bada", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8500/S8500XXJEE; U; Bada/1.0; nl-nl) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WVGA SMM-MMS/1.2.0 OPN-B", "minor": "0", "patch": null}, {"major": null, "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.101) AppleWebKit/530  (KHTML, like Gecko) Version/4.0 Safari/530.17", "minor": null, "patch": null}, {"major": null, "family": "Mac OS X", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3", "minor": null, "patch": null}, {"major": "10", "family": "Mac OS X", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "minor": "6", "patch": "5"}, {"major": "6", "family": "BlackBerry OS", "patch_minor": "141", "user_agent_string": "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-GB) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.141 Mobile Safari/534.1+", "minor": "0", "patch": "0"}, {"major": "6", "family": "BlackBerry OS", "patch_minor": "91", "user_agent_string": "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.1  (KHTML, like Gecko) Version/6.0.0.91 Mobile Safari/534.1 ", "minor": "0", "patch": "0"}, {"major": null, "js_ua": "{'js_user_agent_string': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.1 Safari/530.1'}", "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Sleipnir 2.8.5)3.0.30729)", "minor": null, "patch": null}, {"major": null, "js_ua": "{'js_user_agent_string': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.1 Safari/530.1'}", "family": "Windows Vista", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; chromeframe; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)", "minor": null, "patch": null}, {"major": null, "js_ua": "{'js_user_agent_string': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'}", "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; chromeframe; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)", "minor": null, "patch": null}, {"major": null, "js_ua": "{'js_user_agent_string': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322)', 'js_user_agent_family': 'IE Platform Preview', 'js_user_agent_v1': '9', 'js_user_agent_v2': '0', 'js_user_agent_v3': '1'}", "family": "Windows XP", "patch_minor": null, "user_agent_string": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; .NET CLR 2.0.50727; .NET CLR 1.1.4322)", "minor": null, "patch": null}, {"major": null, "family": "Windows Phone OS", "patch_minor": null, "user_agent_string": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7)", "minor": null, "patch": null}]}
```
Page 42/168FirstPrevNextLast