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

# Directory Structure

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

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/lxml.etree.h:
--------------------------------------------------------------------------------

```
  1 | /* Generated by Cython 3.0.11 */
  2 | 
  3 | #ifndef __PYX_HAVE__lxml__etree
  4 | #define __PYX_HAVE__lxml__etree
  5 | 
  6 | #include "Python.h"
  7 | struct LxmlDocument;
  8 | struct LxmlElement;
  9 | struct LxmlElementTree;
 10 | struct LxmlElementTagMatcher;
 11 | struct LxmlElementIterator;
 12 | struct LxmlElementBase;
 13 | struct LxmlElementClassLookup;
 14 | struct LxmlFallbackElementClassLookup;
 15 | 
 16 | /* "lxml/etree.pyx":355
 17 |  * 
 18 |  * # type of a function that steps from node to node
 19 |  * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)             # <<<<<<<<<<<<<<
 20 |  * 
 21 |  * 
 22 |  */
 23 | typedef xmlNode *(*_node_to_node_function)(xmlNode *);
 24 | 
 25 | /* "lxml/etree.pyx":371
 26 |  * @cython.final
 27 |  * @cython.freelist(8)
 28 |  * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
 29 |  *     """Internal base class to reference a libxml document.
 30 |  * 
 31 |  */
 32 | struct LxmlDocument {
 33 |   PyObject_HEAD
 34 |   struct __pyx_vtabstruct_4lxml_5etree__Document *__pyx_vtab;
 35 |   int _ns_counter;
 36 |   PyObject *_prefix_tail;
 37 |   xmlDoc *_c_doc;
 38 |   struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
 39 | };
 40 | 
 41 | /* "lxml/etree.pyx":720
 42 |  * 
 43 |  * @cython.no_gc_clear
 44 |  * cdef public class _Element [ type LxmlElementType, object LxmlElement ]:             # <<<<<<<<<<<<<<
 45 |  *     """Element class.
 46 |  * 
 47 |  */
 48 | struct LxmlElement {
 49 |   PyObject_HEAD
 50 |   struct LxmlDocument *_doc;
 51 |   xmlNode *_c_node;
 52 |   PyObject *_tag;
 53 | };
 54 | 
 55 | /* "lxml/etree.pyx":1894
 56 |  * 
 57 |  * 
 58 |  * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
 59 |  *                                  object LxmlElementTree ]:
 60 |  *     cdef _Document _doc
 61 |  */
 62 | struct LxmlElementTree {
 63 |   PyObject_HEAD
 64 |   struct __pyx_vtabstruct_4lxml_5etree__ElementTree *__pyx_vtab;
 65 |   struct LxmlDocument *_doc;
 66 |   struct LxmlElement *_context_node;
 67 | };
 68 | 
 69 | /* "lxml/etree.pyx":2668
 70 |  * 
 71 |  * 
 72 |  * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
 73 |  *                                        type LxmlElementTagMatcherType ]:
 74 |  *     """
 75 |  */
 76 | struct LxmlElementTagMatcher {
 77 |   PyObject_HEAD
 78 |   struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtab;
 79 |   PyObject *_pystrings;
 80 |   int _node_type;
 81 |   char *_href;
 82 |   char *_name;
 83 | };
 84 | 
 85 | /* "lxml/etree.pyx":2699
 86 |  *                 self._name = NULL
 87 |  * 
 88 |  * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
 89 |  *     object LxmlElementIterator, type LxmlElementIteratorType ]:
 90 |  *     """
 91 |  */
 92 | struct LxmlElementIterator {
 93 |   struct LxmlElementTagMatcher __pyx_base;
 94 |   struct LxmlElement *_node;
 95 |   _node_to_node_function _next_element;
 96 | };
 97 | 
 98 | /* "src/lxml/classlookup.pxi":6
 99 |  * # Custom Element classes
100 |  * 
101 |  * cdef public class ElementBase(_Element) [ type LxmlElementBaseType,             # <<<<<<<<<<<<<<
102 |  *                                           object LxmlElementBase ]:
103 |  *     """ElementBase(*children, attrib=None, nsmap=None, **_extra)
104 |  */
105 | struct LxmlElementBase {
106 |   struct LxmlElement __pyx_base;
107 | };
108 | 
109 | /* "src/lxml/classlookup.pxi":210
110 |  * # Element class lookup
111 |  * 
112 |  * ctypedef public object (*_element_class_lookup_function)(object, _Document, xmlNode*)             # <<<<<<<<<<<<<<
113 |  * 
114 |  * # class to store element class lookup functions
115 |  */
116 | typedef PyObject *(*_element_class_lookup_function)(PyObject *, struct LxmlDocument *, xmlNode *);
117 | 
118 | /* "src/lxml/classlookup.pxi":213
119 |  * 
120 |  * # class to store element class lookup functions
121 |  * cdef public class ElementClassLookup [ type LxmlElementClassLookupType,             # <<<<<<<<<<<<<<
122 |  *                                        object LxmlElementClassLookup ]:
123 |  *     """ElementClassLookup(self)
124 |  */
125 | struct LxmlElementClassLookup {
126 |   PyObject_HEAD
127 |   _element_class_lookup_function _lookup_function;
128 | };
129 | 
130 | /* "src/lxml/classlookup.pxi":221
131 |  * 
132 |  * 
133 |  * cdef public class FallbackElementClassLookup(ElementClassLookup) \             # <<<<<<<<<<<<<<
134 |  *          [ type LxmlFallbackElementClassLookupType,
135 |  *            object LxmlFallbackElementClassLookup ]:
136 |  */
137 | struct LxmlFallbackElementClassLookup {
138 |   struct LxmlElementClassLookup __pyx_base;
139 |   struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup *__pyx_vtab;
140 |   struct LxmlElementClassLookup *fallback;
141 |   _element_class_lookup_function _fallback_function;
142 | };
143 | 
144 | #ifndef __PYX_HAVE_API__lxml__etree
145 | 
146 | #ifdef CYTHON_EXTERN_C
147 |     #undef __PYX_EXTERN_C
148 |     #define __PYX_EXTERN_C CYTHON_EXTERN_C
149 | #elif defined(__PYX_EXTERN_C)
150 |     #ifdef _MSC_VER
151 |     #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
152 |     #else
153 |     #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
154 |     #endif
155 | #else
156 |   #ifdef __cplusplus
157 |     #define __PYX_EXTERN_C extern "C"
158 |   #else
159 |     #define __PYX_EXTERN_C extern
160 |   #endif
161 | #endif
162 | 
163 | #ifndef DL_IMPORT
164 |   #define DL_IMPORT(_T) _T
165 | #endif
166 | 
167 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlDocumentType;
168 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementType;
169 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementTreeType;
170 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementTagMatcherType;
171 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementIteratorType;
172 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementBaseType;
173 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementClassLookupType;
174 | __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
175 | 
176 | __PYX_EXTERN_C struct LxmlElement *deepcopyNodeToDocument(struct LxmlDocument *, xmlNode *);
177 | __PYX_EXTERN_C struct LxmlElementTree *elementTreeFactory(struct LxmlElement *);
178 | __PYX_EXTERN_C struct LxmlElementTree *newElementTree(struct LxmlElement *, PyObject *);
179 | __PYX_EXTERN_C struct LxmlElementTree *adoptExternalDocument(xmlDoc *, PyObject *, int);
180 | __PYX_EXTERN_C struct LxmlElement *elementFactory(struct LxmlDocument *, xmlNode *);
181 | __PYX_EXTERN_C struct LxmlElement *makeElement(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
182 | __PYX_EXTERN_C struct LxmlElement *makeSubElement(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
183 | __PYX_EXTERN_C void setElementClassLookupFunction(_element_class_lookup_function, PyObject *);
184 | __PYX_EXTERN_C PyObject *lookupDefaultElementClass(PyObject *, PyObject *, xmlNode *);
185 | __PYX_EXTERN_C PyObject *lookupNamespaceElementClass(PyObject *, PyObject *, xmlNode *);
186 | __PYX_EXTERN_C PyObject *callLookupFallback(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *);
187 | __PYX_EXTERN_C int tagMatches(xmlNode *, const xmlChar *, const xmlChar *);
188 | __PYX_EXTERN_C struct LxmlDocument *documentOrRaise(PyObject *);
189 | __PYX_EXTERN_C struct LxmlElement *rootNodeOrRaise(PyObject *);
190 | __PYX_EXTERN_C int hasText(xmlNode *);
191 | __PYX_EXTERN_C int hasTail(xmlNode *);
192 | __PYX_EXTERN_C PyObject *textOf(xmlNode *);
193 | __PYX_EXTERN_C PyObject *tailOf(xmlNode *);
194 | __PYX_EXTERN_C int setNodeText(xmlNode *, PyObject *);
195 | __PYX_EXTERN_C int setTailText(xmlNode *, PyObject *);
196 | __PYX_EXTERN_C PyObject *attributeValue(xmlNode *, xmlAttr *);
197 | __PYX_EXTERN_C PyObject *attributeValueFromNsName(xmlNode *, const xmlChar *, const xmlChar *);
198 | __PYX_EXTERN_C PyObject *getAttributeValue(struct LxmlElement *, PyObject *, PyObject *);
199 | __PYX_EXTERN_C PyObject *iterattributes(struct LxmlElement *, int);
200 | __PYX_EXTERN_C PyObject *collectAttributes(xmlNode *, int);
201 | __PYX_EXTERN_C int setAttributeValue(struct LxmlElement *, PyObject *, PyObject *);
202 | __PYX_EXTERN_C int delAttribute(struct LxmlElement *, PyObject *);
203 | __PYX_EXTERN_C int delAttributeFromNsName(xmlNode *, const xmlChar *, const xmlChar *);
204 | __PYX_EXTERN_C int hasChild(xmlNode *);
205 | __PYX_EXTERN_C xmlNode *findChild(xmlNode *, Py_ssize_t);
206 | __PYX_EXTERN_C xmlNode *findChildForwards(xmlNode *, Py_ssize_t);
207 | __PYX_EXTERN_C xmlNode *findChildBackwards(xmlNode *, Py_ssize_t);
208 | __PYX_EXTERN_C xmlNode *nextElement(xmlNode *);
209 | __PYX_EXTERN_C xmlNode *previousElement(xmlNode *);
210 | __PYX_EXTERN_C void appendChild(struct LxmlElement *, struct LxmlElement *);
211 | __PYX_EXTERN_C int appendChildToElement(struct LxmlElement *, struct LxmlElement *);
212 | __PYX_EXTERN_C PyObject *pyunicode(const xmlChar *);
213 | __PYX_EXTERN_C PyObject *utf8(PyObject *);
214 | __PYX_EXTERN_C PyObject *getNsTag(PyObject *);
215 | __PYX_EXTERN_C PyObject *getNsTagWithEmptyNs(PyObject *);
216 | __PYX_EXTERN_C PyObject *namespacedName(xmlNode *);
217 | __PYX_EXTERN_C PyObject *namespacedNameFromNsName(const xmlChar *, const xmlChar *);
218 | __PYX_EXTERN_C void iteratorStoreNext(struct LxmlElementIterator *, struct LxmlElement *);
219 | __PYX_EXTERN_C void initTagMatch(struct LxmlElementTagMatcher *, PyObject *);
220 | __PYX_EXTERN_C xmlNs *findOrBuildNodeNsPrefix(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *);
221 | 
222 | #endif /* !__PYX_HAVE_API__lxml__etree */
223 | 
224 | /* WARNING: the interface of the module init function changed in CPython 3.5. */
225 | /* It now returns a PyModuleDef instance instead of a PyModule instance. */
226 | 
227 | #if PY_MAJOR_VERSION < 3
228 | PyMODINIT_FUNC initetree(void);
229 | #else
230 | /* WARNING: Use PyImport_AppendInittab("etree", PyInit_etree) instead of calling PyInit_etree directly from Python 3.5 */
231 | PyMODINIT_FUNC PyInit_etree(void);
232 | 
233 | #if PY_VERSION_HEX >= 0x03050000 && (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || (defined(__cplusplus) && __cplusplus >= 201402L))
234 | #if defined(__cplusplus) && __cplusplus >= 201402L
235 | [[deprecated("Use PyImport_AppendInittab(\"etree\", PyInit_etree) instead of calling PyInit_etree directly.")]] inline
236 | #elif defined(__GNUC__) || defined(__clang__)
237 | __attribute__ ((__deprecated__("Use PyImport_AppendInittab(\"etree\", PyInit_etree) instead of calling PyInit_etree directly."), __unused__)) __inline__
238 | #elif defined(_MSC_VER)
239 | __declspec(deprecated("Use PyImport_AppendInittab(\"etree\", PyInit_etree) instead of calling PyInit_etree directly.")) __inline
240 | #endif
241 | static PyObject* __PYX_WARN_IF_PyInit_etree_INIT_CALLED(PyObject* res) {
242 |   return res;
243 | }
244 | #define PyInit_etree() __PYX_WARN_IF_PyInit_etree_INIT_CALLED(PyInit_etree())
245 | #endif
246 | #endif
247 | 
248 | #endif /* !__PYX_HAVE__lxml__etree */
249 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py:
--------------------------------------------------------------------------------

```python
  1 | import collections
  2 | import math
  3 | from functools import lru_cache
  4 | from typing import (
  5 |     TYPE_CHECKING,
  6 |     Dict,
  7 |     Iterable,
  8 |     Iterator,
  9 |     Mapping,
 10 |     Sequence,
 11 |     TypeVar,
 12 |     Union,
 13 | )
 14 | 
 15 | from pip._vendor.resolvelib.providers import AbstractProvider
 16 | 
 17 | from .base import Candidate, Constraint, Requirement
 18 | from .candidates import REQUIRES_PYTHON_IDENTIFIER
 19 | from .factory import Factory
 20 | 
 21 | if TYPE_CHECKING:
 22 |     from pip._vendor.resolvelib.providers import Preference
 23 |     from pip._vendor.resolvelib.resolvers import RequirementInformation
 24 | 
 25 |     PreferenceInformation = RequirementInformation[Requirement, Candidate]
 26 | 
 27 |     _ProviderBase = AbstractProvider[Requirement, Candidate, str]
 28 | else:
 29 |     _ProviderBase = AbstractProvider
 30 | 
 31 | # Notes on the relationship between the provider, the factory, and the
 32 | # candidate and requirement classes.
 33 | #
 34 | # The provider is a direct implementation of the resolvelib class. Its role
 35 | # is to deliver the API that resolvelib expects.
 36 | #
 37 | # Rather than work with completely abstract "requirement" and "candidate"
 38 | # concepts as resolvelib does, pip has concrete classes implementing these two
 39 | # ideas. The API of Requirement and Candidate objects are defined in the base
 40 | # classes, but essentially map fairly directly to the equivalent provider
 41 | # methods. In particular, `find_matches` and `is_satisfied_by` are
 42 | # requirement methods, and `get_dependencies` is a candidate method.
 43 | #
 44 | # The factory is the interface to pip's internal mechanisms. It is stateless,
 45 | # and is created by the resolver and held as a property of the provider. It is
 46 | # responsible for creating Requirement and Candidate objects, and provides
 47 | # services to those objects (access to pip's finder and preparer).
 48 | 
 49 | 
 50 | D = TypeVar("D")
 51 | V = TypeVar("V")
 52 | 
 53 | 
 54 | def _get_with_identifier(
 55 |     mapping: Mapping[str, V],
 56 |     identifier: str,
 57 |     default: D,
 58 | ) -> Union[D, V]:
 59 |     """Get item from a package name lookup mapping with a resolver identifier.
 60 | 
 61 |     This extra logic is needed when the target mapping is keyed by package
 62 |     name, which cannot be directly looked up with an identifier (which may
 63 |     contain requested extras). Additional logic is added to also look up a value
 64 |     by "cleaning up" the extras from the identifier.
 65 |     """
 66 |     if identifier in mapping:
 67 |         return mapping[identifier]
 68 |     # HACK: Theoretically we should check whether this identifier is a valid
 69 |     # "NAME[EXTRAS]" format, and parse out the name part with packaging or
 70 |     # some regular expression. But since pip's resolver only spits out three
 71 |     # kinds of identifiers: normalized PEP 503 names, normalized names plus
 72 |     # extras, and Requires-Python, we can cheat a bit here.
 73 |     name, open_bracket, _ = identifier.partition("[")
 74 |     if open_bracket and name in mapping:
 75 |         return mapping[name]
 76 |     return default
 77 | 
 78 | 
 79 | class PipProvider(_ProviderBase):
 80 |     """Pip's provider implementation for resolvelib.
 81 | 
 82 |     :params constraints: A mapping of constraints specified by the user. Keys
 83 |         are canonicalized project names.
 84 |     :params ignore_dependencies: Whether the user specified ``--no-deps``.
 85 |     :params upgrade_strategy: The user-specified upgrade strategy.
 86 |     :params user_requested: A set of canonicalized package names that the user
 87 |         supplied for pip to install/upgrade.
 88 |     """
 89 | 
 90 |     def __init__(
 91 |         self,
 92 |         factory: Factory,
 93 |         constraints: Dict[str, Constraint],
 94 |         ignore_dependencies: bool,
 95 |         upgrade_strategy: str,
 96 |         user_requested: Dict[str, int],
 97 |     ) -> None:
 98 |         self._factory = factory
 99 |         self._constraints = constraints
100 |         self._ignore_dependencies = ignore_dependencies
101 |         self._upgrade_strategy = upgrade_strategy
102 |         self._user_requested = user_requested
103 |         self._known_depths: Dict[str, float] = collections.defaultdict(lambda: math.inf)
104 | 
105 |     def identify(self, requirement_or_candidate: Union[Requirement, Candidate]) -> str:
106 |         return requirement_or_candidate.name
107 | 
108 |     def get_preference(
109 |         self,
110 |         identifier: str,
111 |         resolutions: Mapping[str, Candidate],
112 |         candidates: Mapping[str, Iterator[Candidate]],
113 |         information: Mapping[str, Iterable["PreferenceInformation"]],
114 |         backtrack_causes: Sequence["PreferenceInformation"],
115 |     ) -> "Preference":
116 |         """Produce a sort key for given requirement based on preference.
117 | 
118 |         The lower the return value is, the more preferred this group of
119 |         arguments is.
120 | 
121 |         Currently pip considers the following in order:
122 | 
123 |         * Prefer if any of the known requirements is "direct", e.g. points to an
124 |           explicit URL.
125 |         * If equal, prefer if any requirement is "pinned", i.e. contains
126 |           operator ``===`` or ``==``.
127 |         * If equal, calculate an approximate "depth" and resolve requirements
128 |           closer to the user-specified requirements first. If the depth cannot
129 |           by determined (eg: due to no matching parents), it is considered
130 |           infinite.
131 |         * Order user-specified requirements by the order they are specified.
132 |         * If equal, prefers "non-free" requirements, i.e. contains at least one
133 |           operator, such as ``>=`` or ``<``.
134 |         * If equal, order alphabetically for consistency (helps debuggability).
135 |         """
136 |         try:
137 |             next(iter(information[identifier]))
138 |         except StopIteration:
139 |             # There is no information for this identifier, so there's no known
140 |             # candidates.
141 |             has_information = False
142 |         else:
143 |             has_information = True
144 | 
145 |         if has_information:
146 |             lookups = (r.get_candidate_lookup() for r, _ in information[identifier])
147 |             candidate, ireqs = zip(*lookups)
148 |         else:
149 |             candidate, ireqs = None, ()
150 | 
151 |         operators = [
152 |             specifier.operator
153 |             for specifier_set in (ireq.specifier for ireq in ireqs if ireq)
154 |             for specifier in specifier_set
155 |         ]
156 | 
157 |         direct = candidate is not None
158 |         pinned = any(op[:2] == "==" for op in operators)
159 |         unfree = bool(operators)
160 | 
161 |         try:
162 |             requested_order: Union[int, float] = self._user_requested[identifier]
163 |         except KeyError:
164 |             requested_order = math.inf
165 |             if has_information:
166 |                 parent_depths = (
167 |                     self._known_depths[parent.name] if parent is not None else 0.0
168 |                     for _, parent in information[identifier]
169 |                 )
170 |                 inferred_depth = min(d for d in parent_depths) + 1.0
171 |             else:
172 |                 inferred_depth = math.inf
173 |         else:
174 |             inferred_depth = 1.0
175 |         self._known_depths[identifier] = inferred_depth
176 | 
177 |         requested_order = self._user_requested.get(identifier, math.inf)
178 | 
179 |         # Requires-Python has only one candidate and the check is basically
180 |         # free, so we always do it first to avoid needless work if it fails.
181 |         requires_python = identifier == REQUIRES_PYTHON_IDENTIFIER
182 | 
183 |         # Prefer the causes of backtracking on the assumption that the problem
184 |         # resolving the dependency tree is related to the failures that caused
185 |         # the backtracking
186 |         backtrack_cause = self.is_backtrack_cause(identifier, backtrack_causes)
187 | 
188 |         return (
189 |             not requires_python,
190 |             not direct,
191 |             not pinned,
192 |             not backtrack_cause,
193 |             inferred_depth,
194 |             requested_order,
195 |             not unfree,
196 |             identifier,
197 |         )
198 | 
199 |     def find_matches(
200 |         self,
201 |         identifier: str,
202 |         requirements: Mapping[str, Iterator[Requirement]],
203 |         incompatibilities: Mapping[str, Iterator[Candidate]],
204 |     ) -> Iterable[Candidate]:
205 |         def _eligible_for_upgrade(identifier: str) -> bool:
206 |             """Are upgrades allowed for this project?
207 | 
208 |             This checks the upgrade strategy, and whether the project was one
209 |             that the user specified in the command line, in order to decide
210 |             whether we should upgrade if there's a newer version available.
211 | 
212 |             (Note that we don't need access to the `--upgrade` flag, because
213 |             an upgrade strategy of "to-satisfy-only" means that `--upgrade`
214 |             was not specified).
215 |             """
216 |             if self._upgrade_strategy == "eager":
217 |                 return True
218 |             elif self._upgrade_strategy == "only-if-needed":
219 |                 user_order = _get_with_identifier(
220 |                     self._user_requested,
221 |                     identifier,
222 |                     default=None,
223 |                 )
224 |                 return user_order is not None
225 |             return False
226 | 
227 |         constraint = _get_with_identifier(
228 |             self._constraints,
229 |             identifier,
230 |             default=Constraint.empty(),
231 |         )
232 |         return self._factory.find_candidates(
233 |             identifier=identifier,
234 |             requirements=requirements,
235 |             constraint=constraint,
236 |             prefers_installed=(not _eligible_for_upgrade(identifier)),
237 |             incompatibilities=incompatibilities,
238 |             is_satisfied_by=self.is_satisfied_by,
239 |         )
240 | 
241 |     @lru_cache(maxsize=None)
242 |     def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool:
243 |         return requirement.is_satisfied_by(candidate)
244 | 
245 |     def get_dependencies(self, candidate: Candidate) -> Sequence[Requirement]:
246 |         with_requires = not self._ignore_dependencies
247 |         return [r for r in candidate.iter_dependencies(with_requires) if r is not None]
248 | 
249 |     @staticmethod
250 |     def is_backtrack_cause(
251 |         identifier: str, backtrack_causes: Sequence["PreferenceInformation"]
252 |     ) -> bool:
253 |         for backtrack_cause in backtrack_causes:
254 |             if identifier == backtrack_cause.requirement.name:
255 |                 return True
256 |             if backtrack_cause.parent and identifier == backtrack_cause.parent.name:
257 |                 return True
258 |         return False
259 | 
```

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

```python
  1 | from __future__ import annotations
  2 | 
  3 | import json as _json
  4 | import typing
  5 | from urllib.parse import urlencode
  6 | 
  7 | from ._base_connection import _TYPE_BODY
  8 | from ._collections import HTTPHeaderDict
  9 | from .filepost import _TYPE_FIELDS, encode_multipart_formdata
 10 | from .response import BaseHTTPResponse
 11 | 
 12 | __all__ = ["RequestMethods"]
 13 | 
 14 | _TYPE_ENCODE_URL_FIELDS = typing.Union[
 15 |     typing.Sequence[typing.Tuple[str, typing.Union[str, bytes]]],
 16 |     typing.Mapping[str, typing.Union[str, bytes]],
 17 | ]
 18 | 
 19 | 
 20 | class RequestMethods:
 21 |     """
 22 |     Convenience mixin for classes who implement a :meth:`urlopen` method, such
 23 |     as :class:`urllib3.HTTPConnectionPool` and
 24 |     :class:`urllib3.PoolManager`.
 25 | 
 26 |     Provides behavior for making common types of HTTP request methods and
 27 |     decides which type of request field encoding to use.
 28 | 
 29 |     Specifically,
 30 | 
 31 |     :meth:`.request_encode_url` is for sending requests whose fields are
 32 |     encoded in the URL (such as GET, HEAD, DELETE).
 33 | 
 34 |     :meth:`.request_encode_body` is for sending requests whose fields are
 35 |     encoded in the *body* of the request using multipart or www-form-urlencoded
 36 |     (such as for POST, PUT, PATCH).
 37 | 
 38 |     :meth:`.request` is for making any kind of request, it will look up the
 39 |     appropriate encoding format and use one of the above two methods to make
 40 |     the request.
 41 | 
 42 |     Initializer parameters:
 43 | 
 44 |     :param headers:
 45 |         Headers to include with all requests, unless other headers are given
 46 |         explicitly.
 47 |     """
 48 | 
 49 |     _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"}
 50 | 
 51 |     def __init__(self, headers: typing.Mapping[str, str] | None = None) -> None:
 52 |         self.headers = headers or {}
 53 | 
 54 |     def urlopen(
 55 |         self,
 56 |         method: str,
 57 |         url: str,
 58 |         body: _TYPE_BODY | None = None,
 59 |         headers: typing.Mapping[str, str] | None = None,
 60 |         encode_multipart: bool = True,
 61 |         multipart_boundary: str | None = None,
 62 |         **kw: typing.Any,
 63 |     ) -> BaseHTTPResponse:  # Abstract
 64 |         raise NotImplementedError(
 65 |             "Classes extending RequestMethods must implement "
 66 |             "their own ``urlopen`` method."
 67 |         )
 68 | 
 69 |     def request(
 70 |         self,
 71 |         method: str,
 72 |         url: str,
 73 |         body: _TYPE_BODY | None = None,
 74 |         fields: _TYPE_FIELDS | None = None,
 75 |         headers: typing.Mapping[str, str] | None = None,
 76 |         json: typing.Any | None = None,
 77 |         **urlopen_kw: typing.Any,
 78 |     ) -> BaseHTTPResponse:
 79 |         """
 80 |         Make a request using :meth:`urlopen` with the appropriate encoding of
 81 |         ``fields`` based on the ``method`` used.
 82 | 
 83 |         This is a convenience method that requires the least amount of manual
 84 |         effort. It can be used in most situations, while still having the
 85 |         option to drop down to more specific methods when necessary, such as
 86 |         :meth:`request_encode_url`, :meth:`request_encode_body`,
 87 |         or even the lowest level :meth:`urlopen`.
 88 | 
 89 |         :param method:
 90 |             HTTP request method (such as GET, POST, PUT, etc.)
 91 | 
 92 |         :param url:
 93 |             The URL to perform the request on.
 94 | 
 95 |         :param body:
 96 |             Data to send in the request body, either :class:`str`, :class:`bytes`,
 97 |             an iterable of :class:`str`/:class:`bytes`, or a file-like object.
 98 | 
 99 |         :param fields:
100 |             Data to encode and send in the URL or request body, depending on ``method``.
101 | 
102 |         :param headers:
103 |             Dictionary of custom headers to send, such as User-Agent,
104 |             If-None-Match, etc. If None, pool headers are used. If provided,
105 |             these headers completely replace any pool-specific headers.
106 | 
107 |         :param json:
108 |             Data to encode and send as JSON with UTF-encoded in the request body.
109 |             The ``"Content-Type"`` header will be set to ``"application/json"``
110 |             unless specified otherwise.
111 |         """
112 |         method = method.upper()
113 | 
114 |         if json is not None and body is not None:
115 |             raise TypeError(
116 |                 "request got values for both 'body' and 'json' parameters which are mutually exclusive"
117 |             )
118 | 
119 |         if json is not None:
120 |             if headers is None:
121 |                 headers = self.headers
122 | 
123 |             if not ("content-type" in map(str.lower, headers.keys())):
124 |                 headers = HTTPHeaderDict(headers)
125 |                 headers["Content-Type"] = "application/json"
126 | 
127 |             body = _json.dumps(json, separators=(",", ":"), ensure_ascii=False).encode(
128 |                 "utf-8"
129 |             )
130 | 
131 |         if body is not None:
132 |             urlopen_kw["body"] = body
133 | 
134 |         if method in self._encode_url_methods:
135 |             return self.request_encode_url(
136 |                 method,
137 |                 url,
138 |                 fields=fields,  # type: ignore[arg-type]
139 |                 headers=headers,
140 |                 **urlopen_kw,
141 |             )
142 |         else:
143 |             return self.request_encode_body(
144 |                 method, url, fields=fields, headers=headers, **urlopen_kw
145 |             )
146 | 
147 |     def request_encode_url(
148 |         self,
149 |         method: str,
150 |         url: str,
151 |         fields: _TYPE_ENCODE_URL_FIELDS | None = None,
152 |         headers: typing.Mapping[str, str] | None = None,
153 |         **urlopen_kw: str,
154 |     ) -> BaseHTTPResponse:
155 |         """
156 |         Make a request using :meth:`urlopen` with the ``fields`` encoded in
157 |         the url. This is useful for request methods like GET, HEAD, DELETE, etc.
158 | 
159 |         :param method:
160 |             HTTP request method (such as GET, POST, PUT, etc.)
161 | 
162 |         :param url:
163 |             The URL to perform the request on.
164 | 
165 |         :param fields:
166 |             Data to encode and send in the URL.
167 | 
168 |         :param headers:
169 |             Dictionary of custom headers to send, such as User-Agent,
170 |             If-None-Match, etc. If None, pool headers are used. If provided,
171 |             these headers completely replace any pool-specific headers.
172 |         """
173 |         if headers is None:
174 |             headers = self.headers
175 | 
176 |         extra_kw: dict[str, typing.Any] = {"headers": headers}
177 |         extra_kw.update(urlopen_kw)
178 | 
179 |         if fields:
180 |             url += "?" + urlencode(fields)
181 | 
182 |         return self.urlopen(method, url, **extra_kw)
183 | 
184 |     def request_encode_body(
185 |         self,
186 |         method: str,
187 |         url: str,
188 |         fields: _TYPE_FIELDS | None = None,
189 |         headers: typing.Mapping[str, str] | None = None,
190 |         encode_multipart: bool = True,
191 |         multipart_boundary: str | None = None,
192 |         **urlopen_kw: str,
193 |     ) -> BaseHTTPResponse:
194 |         """
195 |         Make a request using :meth:`urlopen` with the ``fields`` encoded in
196 |         the body. This is useful for request methods like POST, PUT, PATCH, etc.
197 | 
198 |         When ``encode_multipart=True`` (default), then
199 |         :func:`urllib3.encode_multipart_formdata` is used to encode
200 |         the payload with the appropriate content type. Otherwise
201 |         :func:`urllib.parse.urlencode` is used with the
202 |         'application/x-www-form-urlencoded' content type.
203 | 
204 |         Multipart encoding must be used when posting files, and it's reasonably
205 |         safe to use it in other times too. However, it may break request
206 |         signing, such as with OAuth.
207 | 
208 |         Supports an optional ``fields`` parameter of key/value strings AND
209 |         key/filetuple. A filetuple is a (filename, data, MIME type) tuple where
210 |         the MIME type is optional. For example::
211 | 
212 |             fields = {
213 |                 'foo': 'bar',
214 |                 'fakefile': ('foofile.txt', 'contents of foofile'),
215 |                 'realfile': ('barfile.txt', open('realfile').read()),
216 |                 'typedfile': ('bazfile.bin', open('bazfile').read(),
217 |                               'image/jpeg'),
218 |                 'nonamefile': 'contents of nonamefile field',
219 |             }
220 | 
221 |         When uploading a file, providing a filename (the first parameter of the
222 |         tuple) is optional but recommended to best mimic behavior of browsers.
223 | 
224 |         Note that if ``headers`` are supplied, the 'Content-Type' header will
225 |         be overwritten because it depends on the dynamic random boundary string
226 |         which is used to compose the body of the request. The random boundary
227 |         string can be explicitly set with the ``multipart_boundary`` parameter.
228 | 
229 |         :param method:
230 |             HTTP request method (such as GET, POST, PUT, etc.)
231 | 
232 |         :param url:
233 |             The URL to perform the request on.
234 | 
235 |         :param fields:
236 |             Data to encode and send in the request body.
237 | 
238 |         :param headers:
239 |             Dictionary of custom headers to send, such as User-Agent,
240 |             If-None-Match, etc. If None, pool headers are used. If provided,
241 |             these headers completely replace any pool-specific headers.
242 | 
243 |         :param encode_multipart:
244 |             If True, encode the ``fields`` using the multipart/form-data MIME
245 |             format.
246 | 
247 |         :param multipart_boundary:
248 |             If not specified, then a random boundary will be generated using
249 |             :func:`urllib3.filepost.choose_boundary`.
250 |         """
251 |         if headers is None:
252 |             headers = self.headers
253 | 
254 |         extra_kw: dict[str, typing.Any] = {"headers": HTTPHeaderDict(headers)}
255 |         body: bytes | str
256 | 
257 |         if fields:
258 |             if "body" in urlopen_kw:
259 |                 raise TypeError(
260 |                     "request got values for both 'fields' and 'body', can only specify one."
261 |                 )
262 | 
263 |             if encode_multipart:
264 |                 body, content_type = encode_multipart_formdata(
265 |                     fields, boundary=multipart_boundary
266 |                 )
267 |             else:
268 |                 body, content_type = (
269 |                     urlencode(fields),  # type: ignore[arg-type]
270 |                     "application/x-www-form-urlencoded",
271 |                 )
272 | 
273 |             extra_kw["body"] = body
274 |             extra_kw["headers"].setdefault("Content-Type", content_type)
275 | 
276 |         extra_kw.update(urlopen_kw)
277 | 
278 |         return self.urlopen(method, url, **extra_kw)
279 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/HTMLparser.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: interface for an HTML 4.0 non-verifying parser
  3 |  * Description: this module implements an HTML 4.0 non-verifying parser
  4 |  *              with API compatible with the XML parser ones. It should
  5 |  *              be able to parse "real world" HTML, even if severely
  6 |  *              broken from a specification point of view.
  7 |  *
  8 |  * Copy: See Copyright for the status of this software.
  9 |  *
 10 |  * Author: Daniel Veillard
 11 |  */
 12 | 
 13 | #ifndef __HTML_PARSER_H__
 14 | #define __HTML_PARSER_H__
 15 | #include <libxml/xmlversion.h>
 16 | #include <libxml/parser.h>
 17 | 
 18 | #ifdef LIBXML_HTML_ENABLED
 19 | 
 20 | #ifdef __cplusplus
 21 | extern "C" {
 22 | #endif
 23 | 
 24 | /*
 25 |  * Most of the back-end structures from XML and HTML are shared.
 26 |  */
 27 | typedef xmlParserCtxt htmlParserCtxt;
 28 | typedef xmlParserCtxtPtr htmlParserCtxtPtr;
 29 | typedef xmlParserNodeInfo htmlParserNodeInfo;
 30 | typedef xmlSAXHandler htmlSAXHandler;
 31 | typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
 32 | typedef xmlParserInput htmlParserInput;
 33 | typedef xmlParserInputPtr htmlParserInputPtr;
 34 | typedef xmlDocPtr htmlDocPtr;
 35 | typedef xmlNodePtr htmlNodePtr;
 36 | 
 37 | /*
 38 |  * Internal description of an HTML element, representing HTML 4.01
 39 |  * and XHTML 1.0 (which share the same structure).
 40 |  */
 41 | typedef struct _htmlElemDesc htmlElemDesc;
 42 | typedef htmlElemDesc *htmlElemDescPtr;
 43 | struct _htmlElemDesc {
 44 |     const char *name;	/* The tag name */
 45 |     char startTag;      /* Whether the start tag can be implied */
 46 |     char endTag;        /* Whether the end tag can be implied */
 47 |     char saveEndTag;    /* Whether the end tag should be saved */
 48 |     char empty;         /* Is this an empty element ? */
 49 |     char depr;          /* Is this a deprecated element ? */
 50 |     char dtd;           /* 1: only in Loose DTD, 2: only Frameset one */
 51 |     char isinline;      /* is this a block 0 or inline 1 element */
 52 |     const char *desc;   /* the description */
 53 | 
 54 | /* NRK Jan.2003
 55 |  * New fields encapsulating HTML structure
 56 |  *
 57 |  * Bugs:
 58 |  *	This is a very limited representation.  It fails to tell us when
 59 |  *	an element *requires* subelements (we only have whether they're
 60 |  *	allowed or not), and it doesn't tell us where CDATA and PCDATA
 61 |  *	are allowed.  Some element relationships are not fully represented:
 62 |  *	these are flagged with the word MODIFIER
 63 |  */
 64 |     const char** subelts;		/* allowed sub-elements of this element */
 65 |     const char* defaultsubelt;	/* subelement for suggested auto-repair
 66 | 					   if necessary or NULL */
 67 |     const char** attrs_opt;		/* Optional Attributes */
 68 |     const char** attrs_depr;		/* Additional deprecated attributes */
 69 |     const char** attrs_req;		/* Required attributes */
 70 | };
 71 | 
 72 | /*
 73 |  * Internal description of an HTML entity.
 74 |  */
 75 | typedef struct _htmlEntityDesc htmlEntityDesc;
 76 | typedef htmlEntityDesc *htmlEntityDescPtr;
 77 | struct _htmlEntityDesc {
 78 |     unsigned int value;	/* the UNICODE value for the character */
 79 |     const char *name;	/* The entity name */
 80 |     const char *desc;   /* the description */
 81 | };
 82 | 
 83 | /** DOC_DISABLE */
 84 | #ifdef LIBXML_SAX1_ENABLED
 85 |   #define XML_GLOBALS_HTML \
 86 |     XML_OP(htmlDefaultSAXHandler, xmlSAXHandlerV1, XML_DEPRECATED)
 87 | #else
 88 |   #define XML_GLOBALS_HTML
 89 | #endif
 90 | 
 91 | #define XML_OP XML_DECLARE_GLOBAL
 92 | XML_GLOBALS_HTML
 93 | #undef XML_OP
 94 | 
 95 | #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
 96 |   #define htmlDefaultSAXHandler XML_GLOBAL_MACRO(htmlDefaultSAXHandler)
 97 | #endif
 98 | /** DOC_ENABLE */
 99 | 
100 | /*
101 |  * There is only few public functions.
102 |  */
103 | XML_DEPRECATED
104 | XMLPUBFUN void
105 | 			htmlInitAutoClose	(void);
106 | XMLPUBFUN const htmlElemDesc *
107 | 			htmlTagLookup	(const xmlChar *tag);
108 | XMLPUBFUN const htmlEntityDesc *
109 | 			htmlEntityLookup(const xmlChar *name);
110 | XMLPUBFUN const htmlEntityDesc *
111 | 			htmlEntityValueLookup(unsigned int value);
112 | 
113 | XMLPUBFUN int
114 | 			htmlIsAutoClosed(htmlDocPtr doc,
115 | 					 htmlNodePtr elem);
116 | XMLPUBFUN int
117 | 			htmlAutoCloseTag(htmlDocPtr doc,
118 | 					 const xmlChar *name,
119 | 					 htmlNodePtr elem);
120 | XML_DEPRECATED
121 | XMLPUBFUN const htmlEntityDesc *
122 | 			htmlParseEntityRef(htmlParserCtxtPtr ctxt,
123 | 					 const xmlChar **str);
124 | XML_DEPRECATED
125 | XMLPUBFUN int
126 | 			htmlParseCharRef(htmlParserCtxtPtr ctxt);
127 | XML_DEPRECATED
128 | XMLPUBFUN void
129 | 			htmlParseElement(htmlParserCtxtPtr ctxt);
130 | 
131 | XMLPUBFUN htmlParserCtxtPtr
132 | 			htmlNewParserCtxt(void);
133 | XMLPUBFUN htmlParserCtxtPtr
134 | 			htmlNewSAXParserCtxt(const htmlSAXHandler *sax,
135 | 					     void *userData);
136 | 
137 | XMLPUBFUN htmlParserCtxtPtr
138 | 			htmlCreateMemoryParserCtxt(const char *buffer,
139 | 						   int size);
140 | 
141 | XMLPUBFUN int
142 | 			htmlParseDocument(htmlParserCtxtPtr ctxt);
143 | XML_DEPRECATED
144 | XMLPUBFUN htmlDocPtr
145 | 			htmlSAXParseDoc	(const xmlChar *cur,
146 | 					 const char *encoding,
147 | 					 htmlSAXHandlerPtr sax,
148 | 					 void *userData);
149 | XMLPUBFUN htmlDocPtr
150 | 			htmlParseDoc	(const xmlChar *cur,
151 | 					 const char *encoding);
152 | XMLPUBFUN htmlParserCtxtPtr
153 | 			htmlCreateFileParserCtxt(const char *filename,
154 | 	                                         const char *encoding);
155 | XML_DEPRECATED
156 | XMLPUBFUN htmlDocPtr
157 | 			htmlSAXParseFile(const char *filename,
158 | 					 const char *encoding,
159 | 					 htmlSAXHandlerPtr sax,
160 | 					 void *userData);
161 | XMLPUBFUN htmlDocPtr
162 | 			htmlParseFile	(const char *filename,
163 | 					 const char *encoding);
164 | XMLPUBFUN int
165 | 			UTF8ToHtml	(unsigned char *out,
166 | 					 int *outlen,
167 | 					 const unsigned char *in,
168 | 					 int *inlen);
169 | XMLPUBFUN int
170 | 			htmlEncodeEntities(unsigned char *out,
171 | 					 int *outlen,
172 | 					 const unsigned char *in,
173 | 					 int *inlen, int quoteChar);
174 | XMLPUBFUN int
175 | 			htmlIsScriptAttribute(const xmlChar *name);
176 | XMLPUBFUN int
177 | 			htmlHandleOmittedElem(int val);
178 | 
179 | #ifdef LIBXML_PUSH_ENABLED
180 | /**
181 |  * Interfaces for the Push mode.
182 |  */
183 | XMLPUBFUN htmlParserCtxtPtr
184 | 			htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
185 | 						 void *user_data,
186 | 						 const char *chunk,
187 | 						 int size,
188 | 						 const char *filename,
189 | 						 xmlCharEncoding enc);
190 | XMLPUBFUN int
191 | 			htmlParseChunk		(htmlParserCtxtPtr ctxt,
192 | 						 const char *chunk,
193 | 						 int size,
194 | 						 int terminate);
195 | #endif /* LIBXML_PUSH_ENABLED */
196 | 
197 | XMLPUBFUN void
198 | 			htmlFreeParserCtxt	(htmlParserCtxtPtr ctxt);
199 | 
200 | /*
201 |  * New set of simpler/more flexible APIs
202 |  */
203 | /**
204 |  * xmlParserOption:
205 |  *
206 |  * This is the set of XML parser options that can be passed down
207 |  * to the xmlReadDoc() and similar calls.
208 |  */
209 | typedef enum {
210 |     HTML_PARSE_RECOVER  = 1<<0, /* Relaxed parsing */
211 |     HTML_PARSE_NODEFDTD = 1<<2, /* do not default a doctype if not found */
212 |     HTML_PARSE_NOERROR	= 1<<5,	/* suppress error reports */
213 |     HTML_PARSE_NOWARNING= 1<<6,	/* suppress warning reports */
214 |     HTML_PARSE_PEDANTIC	= 1<<7,	/* pedantic error reporting */
215 |     HTML_PARSE_NOBLANKS	= 1<<8,	/* remove blank nodes */
216 |     HTML_PARSE_NONET	= 1<<11,/* Forbid network access */
217 |     HTML_PARSE_NOIMPLIED= 1<<13,/* Do not add implied html/body... elements */
218 |     HTML_PARSE_COMPACT  = 1<<16,/* compact small text nodes */
219 |     HTML_PARSE_IGNORE_ENC=1<<21 /* ignore internal document encoding hint */
220 | } htmlParserOption;
221 | 
222 | XMLPUBFUN void
223 | 		htmlCtxtReset		(htmlParserCtxtPtr ctxt);
224 | XMLPUBFUN int
225 | 		htmlCtxtUseOptions	(htmlParserCtxtPtr ctxt,
226 | 					 int options);
227 | XMLPUBFUN htmlDocPtr
228 | 		htmlReadDoc		(const xmlChar *cur,
229 | 					 const char *URL,
230 | 					 const char *encoding,
231 | 					 int options);
232 | XMLPUBFUN htmlDocPtr
233 | 		htmlReadFile		(const char *URL,
234 | 					 const char *encoding,
235 | 					 int options);
236 | XMLPUBFUN htmlDocPtr
237 | 		htmlReadMemory		(const char *buffer,
238 | 					 int size,
239 | 					 const char *URL,
240 | 					 const char *encoding,
241 | 					 int options);
242 | XMLPUBFUN htmlDocPtr
243 | 		htmlReadFd		(int fd,
244 | 					 const char *URL,
245 | 					 const char *encoding,
246 | 					 int options);
247 | XMLPUBFUN htmlDocPtr
248 | 		htmlReadIO		(xmlInputReadCallback ioread,
249 | 					 xmlInputCloseCallback ioclose,
250 | 					 void *ioctx,
251 | 					 const char *URL,
252 | 					 const char *encoding,
253 | 					 int options);
254 | XMLPUBFUN htmlDocPtr
255 | 		htmlCtxtReadDoc		(xmlParserCtxtPtr ctxt,
256 | 					 const xmlChar *cur,
257 | 					 const char *URL,
258 | 					 const char *encoding,
259 | 					 int options);
260 | XMLPUBFUN htmlDocPtr
261 | 		htmlCtxtReadFile		(xmlParserCtxtPtr ctxt,
262 | 					 const char *filename,
263 | 					 const char *encoding,
264 | 					 int options);
265 | XMLPUBFUN htmlDocPtr
266 | 		htmlCtxtReadMemory		(xmlParserCtxtPtr ctxt,
267 | 					 const char *buffer,
268 | 					 int size,
269 | 					 const char *URL,
270 | 					 const char *encoding,
271 | 					 int options);
272 | XMLPUBFUN htmlDocPtr
273 | 		htmlCtxtReadFd		(xmlParserCtxtPtr ctxt,
274 | 					 int fd,
275 | 					 const char *URL,
276 | 					 const char *encoding,
277 | 					 int options);
278 | XMLPUBFUN htmlDocPtr
279 | 		htmlCtxtReadIO		(xmlParserCtxtPtr ctxt,
280 | 					 xmlInputReadCallback ioread,
281 | 					 xmlInputCloseCallback ioclose,
282 | 					 void *ioctx,
283 | 					 const char *URL,
284 | 					 const char *encoding,
285 | 					 int options);
286 | 
287 | /* NRK/Jan2003: further knowledge of HTML structure
288 |  */
289 | typedef enum {
290 |   HTML_NA = 0 ,		/* something we don't check at all */
291 |   HTML_INVALID = 0x1 ,
292 |   HTML_DEPRECATED = 0x2 ,
293 |   HTML_VALID = 0x4 ,
294 |   HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
295 | } htmlStatus ;
296 | 
297 | /* Using htmlElemDesc rather than name here, to emphasise the fact
298 |    that otherwise there's a lookup overhead
299 | */
300 | XMLPUBFUN htmlStatus htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
301 | XMLPUBFUN int htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
302 | XMLPUBFUN htmlStatus htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
303 | XMLPUBFUN htmlStatus htmlNodeStatus(const htmlNodePtr, int) ;
304 | /**
305 |  * htmlDefaultSubelement:
306 |  * @elt: HTML element
307 |  *
308 |  * Returns the default subelement for this element
309 |  */
310 | #define htmlDefaultSubelement(elt) elt->defaultsubelt
311 | /**
312 |  * htmlElementAllowedHereDesc:
313 |  * @parent: HTML parent element
314 |  * @elt: HTML element
315 |  *
316 |  * Checks whether an HTML element description may be a
317 |  * direct child of the specified element.
318 |  *
319 |  * Returns 1 if allowed; 0 otherwise.
320 |  */
321 | #define htmlElementAllowedHereDesc(parent,elt) \
322 | 	htmlElementAllowedHere((parent), (elt)->name)
323 | /**
324 |  * htmlRequiredAttrs:
325 |  * @elt: HTML element
326 |  *
327 |  * Returns the attributes required for the specified element.
328 |  */
329 | #define htmlRequiredAttrs(elt) (elt)->attrs_req
330 | 
331 | 
332 | #ifdef __cplusplus
333 | }
334 | #endif
335 | 
336 | #else /* LIBXML_HTML_ENABLED */
337 | 
338 | /** DOC_DISABLE */
339 | #define XML_GLOBALS_HTML
340 | /** DOC_ENABLE */
341 | 
342 | #endif /* LIBXML_HTML_ENABLED */
343 | #endif /* __HTML_PARSER_H__ */
344 | 
```

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

```python
  1 | from __future__ import annotations
  2 | 
  3 | import json as _json
  4 | import logging
  5 | import typing
  6 | from contextlib import contextmanager
  7 | from dataclasses import dataclass
  8 | from http.client import HTTPException as HTTPException
  9 | from io import BytesIO, IOBase
 10 | 
 11 | from ...exceptions import InvalidHeader, TimeoutError
 12 | from ...response import BaseHTTPResponse
 13 | from ...util.retry import Retry
 14 | from .request import EmscriptenRequest
 15 | 
 16 | if typing.TYPE_CHECKING:
 17 |     from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection
 18 | 
 19 | log = logging.getLogger(__name__)
 20 | 
 21 | 
 22 | @dataclass
 23 | class EmscriptenResponse:
 24 |     status_code: int
 25 |     headers: dict[str, str]
 26 |     body: IOBase | bytes
 27 |     request: EmscriptenRequest
 28 | 
 29 | 
 30 | class EmscriptenHttpResponseWrapper(BaseHTTPResponse):
 31 |     def __init__(
 32 |         self,
 33 |         internal_response: EmscriptenResponse,
 34 |         url: str | None = None,
 35 |         connection: BaseHTTPConnection | BaseHTTPSConnection | None = None,
 36 |     ):
 37 |         self._pool = None  # set by pool class
 38 |         self._body = None
 39 |         self._response = internal_response
 40 |         self._url = url
 41 |         self._connection = connection
 42 |         self._closed = False
 43 |         super().__init__(
 44 |             headers=internal_response.headers,
 45 |             status=internal_response.status_code,
 46 |             request_url=url,
 47 |             version=0,
 48 |             version_string="HTTP/?",
 49 |             reason="",
 50 |             decode_content=True,
 51 |         )
 52 |         self.length_remaining = self._init_length(self._response.request.method)
 53 |         self.length_is_certain = False
 54 | 
 55 |     @property
 56 |     def url(self) -> str | None:
 57 |         return self._url
 58 | 
 59 |     @url.setter
 60 |     def url(self, url: str | None) -> None:
 61 |         self._url = url
 62 | 
 63 |     @property
 64 |     def connection(self) -> BaseHTTPConnection | BaseHTTPSConnection | None:
 65 |         return self._connection
 66 | 
 67 |     @property
 68 |     def retries(self) -> Retry | None:
 69 |         return self._retries
 70 | 
 71 |     @retries.setter
 72 |     def retries(self, retries: Retry | None) -> None:
 73 |         # Override the request_url if retries has a redirect location.
 74 |         self._retries = retries
 75 | 
 76 |     def stream(
 77 |         self, amt: int | None = 2**16, decode_content: bool | None = None
 78 |     ) -> typing.Generator[bytes, None, None]:
 79 |         """
 80 |         A generator wrapper for the read() method. A call will block until
 81 |         ``amt`` bytes have been read from the connection or until the
 82 |         connection is closed.
 83 | 
 84 |         :param amt:
 85 |             How much of the content to read. The generator will return up to
 86 |             much data per iteration, but may return less. This is particularly
 87 |             likely when using compressed data. However, the empty string will
 88 |             never be returned.
 89 | 
 90 |         :param decode_content:
 91 |             If True, will attempt to decode the body based on the
 92 |             'content-encoding' header.
 93 |         """
 94 |         while True:
 95 |             data = self.read(amt=amt, decode_content=decode_content)
 96 | 
 97 |             if data:
 98 |                 yield data
 99 |             else:
100 |                 break
101 | 
102 |     def _init_length(self, request_method: str | None) -> int | None:
103 |         length: int | None
104 |         content_length: str | None = self.headers.get("content-length")
105 | 
106 |         if content_length is not None:
107 |             try:
108 |                 # RFC 7230 section 3.3.2 specifies multiple content lengths can
109 |                 # be sent in a single Content-Length header
110 |                 # (e.g. Content-Length: 42, 42). This line ensures the values
111 |                 # are all valid ints and that as long as the `set` length is 1,
112 |                 # all values are the same. Otherwise, the header is invalid.
113 |                 lengths = {int(val) for val in content_length.split(",")}
114 |                 if len(lengths) > 1:
115 |                     raise InvalidHeader(
116 |                         "Content-Length contained multiple "
117 |                         "unmatching values (%s)" % content_length
118 |                     )
119 |                 length = lengths.pop()
120 |             except ValueError:
121 |                 length = None
122 |             else:
123 |                 if length < 0:
124 |                     length = None
125 | 
126 |         else:  # if content_length is None
127 |             length = None
128 | 
129 |         # Check for responses that shouldn't include a body
130 |         if (
131 |             self.status in (204, 304)
132 |             or 100 <= self.status < 200
133 |             or request_method == "HEAD"
134 |         ):
135 |             length = 0
136 | 
137 |         return length
138 | 
139 |     def read(
140 |         self,
141 |         amt: int | None = None,
142 |         decode_content: bool | None = None,  # ignored because browser decodes always
143 |         cache_content: bool = False,
144 |     ) -> bytes:
145 |         if (
146 |             self._closed
147 |             or self._response is None
148 |             or (isinstance(self._response.body, IOBase) and self._response.body.closed)
149 |         ):
150 |             return b""
151 | 
152 |         with self._error_catcher():
153 |             # body has been preloaded as a string by XmlHttpRequest
154 |             if not isinstance(self._response.body, IOBase):
155 |                 self.length_remaining = len(self._response.body)
156 |                 self.length_is_certain = True
157 |                 # wrap body in IOStream
158 |                 self._response.body = BytesIO(self._response.body)
159 |             if amt is not None and amt >= 0:
160 |                 # don't cache partial content
161 |                 cache_content = False
162 |                 data = self._response.body.read(amt)
163 |                 if self.length_remaining is not None:
164 |                     self.length_remaining = max(self.length_remaining - len(data), 0)
165 |                 if (self.length_is_certain and self.length_remaining == 0) or len(
166 |                     data
167 |                 ) < amt:
168 |                     # definitely finished reading, close response stream
169 |                     self._response.body.close()
170 |                 return typing.cast(bytes, data)
171 |             else:  # read all we can (and cache it)
172 |                 data = self._response.body.read()
173 |                 if cache_content:
174 |                     self._body = data
175 |                 if self.length_remaining is not None:
176 |                     self.length_remaining = max(self.length_remaining - len(data), 0)
177 |                 if len(data) == 0 or (
178 |                     self.length_is_certain and self.length_remaining == 0
179 |                 ):
180 |                     # definitely finished reading, close response stream
181 |                     self._response.body.close()
182 |                 return typing.cast(bytes, data)
183 | 
184 |     def read_chunked(
185 |         self,
186 |         amt: int | None = None,
187 |         decode_content: bool | None = None,
188 |     ) -> typing.Generator[bytes, None, None]:
189 |         # chunked is handled by browser
190 |         while True:
191 |             bytes = self.read(amt, decode_content)
192 |             if not bytes:
193 |                 break
194 |             yield bytes
195 | 
196 |     def release_conn(self) -> None:
197 |         if not self._pool or not self._connection:
198 |             return None
199 | 
200 |         self._pool._put_conn(self._connection)
201 |         self._connection = None
202 | 
203 |     def drain_conn(self) -> None:
204 |         self.close()
205 | 
206 |     @property
207 |     def data(self) -> bytes:
208 |         if self._body:
209 |             return self._body
210 |         else:
211 |             return self.read(cache_content=True)
212 | 
213 |     def json(self) -> typing.Any:
214 |         """
215 |         Deserializes the body of the HTTP response as a Python object.
216 | 
217 |         The body of the HTTP response must be encoded using UTF-8, as per
218 |         `RFC 8529 Section 8.1 <https://www.rfc-editor.org/rfc/rfc8259#section-8.1>`_.
219 | 
220 |         To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to
221 |         your custom decoder instead.
222 | 
223 |         If the body of the HTTP response is not decodable to UTF-8, a
224 |         `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a
225 |         valid JSON document, a `json.JSONDecodeError` will be raised.
226 | 
227 |         Read more :ref:`here <json_content>`.
228 | 
229 |         :returns: The body of the HTTP response as a Python object.
230 |         """
231 |         data = self.data.decode("utf-8")
232 |         return _json.loads(data)
233 | 
234 |     def close(self) -> None:
235 |         if not self._closed:
236 |             if isinstance(self._response.body, IOBase):
237 |                 self._response.body.close()
238 |             if self._connection:
239 |                 self._connection.close()
240 |                 self._connection = None
241 |             self._closed = True
242 | 
243 |     @contextmanager
244 |     def _error_catcher(self) -> typing.Generator[None, None, None]:
245 |         """
246 |         Catch Emscripten specific exceptions thrown by fetch.py,
247 |         instead re-raising urllib3 variants, so that low-level exceptions
248 |         are not leaked in the high-level api.
249 | 
250 |         On exit, release the connection back to the pool.
251 |         """
252 |         from .fetch import _RequestError, _TimeoutError  # avoid circular import
253 | 
254 |         clean_exit = False
255 | 
256 |         try:
257 |             yield
258 |             # If no exception is thrown, we should avoid cleaning up
259 |             # unnecessarily.
260 |             clean_exit = True
261 |         except _TimeoutError as e:
262 |             raise TimeoutError(str(e))
263 |         except _RequestError as e:
264 |             raise HTTPException(str(e))
265 |         finally:
266 |             # If we didn't terminate cleanly, we need to throw away our
267 |             # connection.
268 |             if not clean_exit:
269 |                 # The response may not be closed but we're not going to use it
270 |                 # anymore so close it now
271 |                 if (
272 |                     isinstance(self._response.body, IOBase)
273 |                     and not self._response.body.closed
274 |                 ):
275 |                     self._response.body.close()
276 |                 # release the connection back to the pool
277 |                 self.release_conn()
278 |             else:
279 |                 # If we have read everything from the response stream,
280 |                 # return the connection back to the pool.
281 |                 if (
282 |                     isinstance(self._response.body, IOBase)
283 |                     and self._response.body.closed
284 |                 ):
285 |                     self.release_conn()
286 | 
```

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

```python
  1 | from __future__ import annotations
  2 | 
  3 | import base64
  4 | import binascii
  5 | import typing as t
  6 | 
  7 | from ..http import dump_header
  8 | from ..http import parse_dict_header
  9 | from ..http import quote_header_value
 10 | from .structures import CallbackDict
 11 | 
 12 | if t.TYPE_CHECKING:
 13 |     import typing_extensions as te
 14 | 
 15 | 
 16 | class Authorization:
 17 |     """Represents the parts of an ``Authorization`` request header.
 18 | 
 19 |     :attr:`.Request.authorization` returns an instance if the header is set.
 20 | 
 21 |     An instance can be used with the test :class:`.Client` request methods' ``auth``
 22 |     parameter to send the header in test requests.
 23 | 
 24 |     Depending on the auth scheme, either :attr:`parameters` or :attr:`token` will be
 25 |     set. The ``Basic`` scheme's token is decoded into the ``username`` and ``password``
 26 |     parameters.
 27 | 
 28 |     For convenience, ``auth["key"]`` and ``auth.key`` both access the key in the
 29 |     :attr:`parameters` dict, along with ``auth.get("key")`` and ``"key" in auth``.
 30 | 
 31 |     .. versionchanged:: 2.3
 32 |         The ``token`` parameter and attribute was added to support auth schemes that use
 33 |         a token instead of parameters, such as ``Bearer``.
 34 | 
 35 |     .. versionchanged:: 2.3
 36 |         The object is no longer a ``dict``.
 37 | 
 38 |     .. versionchanged:: 0.5
 39 |         The object is an immutable dict.
 40 |     """
 41 | 
 42 |     def __init__(
 43 |         self,
 44 |         auth_type: str,
 45 |         data: dict[str, str | None] | None = None,
 46 |         token: str | None = None,
 47 |     ) -> None:
 48 |         self.type = auth_type
 49 |         """The authorization scheme, like ``basic``, ``digest``, or ``bearer``."""
 50 | 
 51 |         if data is None:
 52 |             data = {}
 53 | 
 54 |         self.parameters = data
 55 |         """A dict of parameters parsed from the header. Either this or :attr:`token`
 56 |         will have a value for a given scheme.
 57 |         """
 58 | 
 59 |         self.token = token
 60 |         """A token parsed from the header. Either this or :attr:`parameters` will have a
 61 |         value for a given scheme.
 62 | 
 63 |         .. versionadded:: 2.3
 64 |         """
 65 | 
 66 |     def __getattr__(self, name: str) -> str | None:
 67 |         return self.parameters.get(name)
 68 | 
 69 |     def __getitem__(self, name: str) -> str | None:
 70 |         return self.parameters.get(name)
 71 | 
 72 |     def get(self, key: str, default: str | None = None) -> str | None:
 73 |         return self.parameters.get(key, default)
 74 | 
 75 |     def __contains__(self, key: str) -> bool:
 76 |         return key in self.parameters
 77 | 
 78 |     def __eq__(self, other: object) -> bool:
 79 |         if not isinstance(other, Authorization):
 80 |             return NotImplemented
 81 | 
 82 |         return (
 83 |             other.type == self.type
 84 |             and other.token == self.token
 85 |             and other.parameters == self.parameters
 86 |         )
 87 | 
 88 |     @classmethod
 89 |     def from_header(cls, value: str | None) -> te.Self | None:
 90 |         """Parse an ``Authorization`` header value and return an instance, or ``None``
 91 |         if the value is empty.
 92 | 
 93 |         :param value: The header value to parse.
 94 | 
 95 |         .. versionadded:: 2.3
 96 |         """
 97 |         if not value:
 98 |             return None
 99 | 
100 |         scheme, _, rest = value.partition(" ")
101 |         scheme = scheme.lower()
102 |         rest = rest.strip()
103 | 
104 |         if scheme == "basic":
105 |             try:
106 |                 username, _, password = base64.b64decode(rest).decode().partition(":")
107 |             except (binascii.Error, UnicodeError):
108 |                 return None
109 | 
110 |             return cls(scheme, {"username": username, "password": password})
111 | 
112 |         if "=" in rest.rstrip("="):
113 |             # = that is not trailing, this is parameters.
114 |             return cls(scheme, parse_dict_header(rest), None)
115 | 
116 |         # No = or only trailing =, this is a token.
117 |         return cls(scheme, None, rest)
118 | 
119 |     def to_header(self) -> str:
120 |         """Produce an ``Authorization`` header value representing this data.
121 | 
122 |         .. versionadded:: 2.0
123 |         """
124 |         if self.type == "basic":
125 |             value = base64.b64encode(
126 |                 f"{self.username}:{self.password}".encode()
127 |             ).decode("ascii")
128 |             return f"Basic {value}"
129 | 
130 |         if self.token is not None:
131 |             return f"{self.type.title()} {self.token}"
132 | 
133 |         return f"{self.type.title()} {dump_header(self.parameters)}"
134 | 
135 |     def __str__(self) -> str:
136 |         return self.to_header()
137 | 
138 |     def __repr__(self) -> str:
139 |         return f"<{type(self).__name__} {self.to_header()}>"
140 | 
141 | 
142 | class WWWAuthenticate:
143 |     """Represents the parts of a ``WWW-Authenticate`` response header.
144 | 
145 |     Set :attr:`.Response.www_authenticate` to an instance of list of instances to set
146 |     values for this header in the response. Modifying this instance will modify the
147 |     header value.
148 | 
149 |     Depending on the auth scheme, either :attr:`parameters` or :attr:`token` should be
150 |     set. The ``Basic`` scheme will encode ``username`` and ``password`` parameters to a
151 |     token.
152 | 
153 |     For convenience, ``auth["key"]`` and ``auth.key`` both act on the :attr:`parameters`
154 |     dict, and can be used to get, set, or delete parameters. ``auth.get("key")`` and
155 |     ``"key" in auth`` are also provided.
156 | 
157 |     .. versionchanged:: 2.3
158 |         The ``token`` parameter and attribute was added to support auth schemes that use
159 |         a token instead of parameters, such as ``Bearer``.
160 | 
161 |     .. versionchanged:: 2.3
162 |         The object is no longer a ``dict``.
163 | 
164 |     .. versionchanged:: 2.3
165 |         The ``on_update`` parameter was removed.
166 |     """
167 | 
168 |     def __init__(
169 |         self,
170 |         auth_type: str,
171 |         values: dict[str, str | None] | None = None,
172 |         token: str | None = None,
173 |     ):
174 |         self._type = auth_type.lower()
175 |         self._parameters: dict[str, str | None] = CallbackDict(
176 |             values, lambda _: self._trigger_on_update()
177 |         )
178 |         self._token = token
179 |         self._on_update: t.Callable[[WWWAuthenticate], None] | None = None
180 | 
181 |     def _trigger_on_update(self) -> None:
182 |         if self._on_update is not None:
183 |             self._on_update(self)
184 | 
185 |     @property
186 |     def type(self) -> str:
187 |         """The authorization scheme, like ``basic``, ``digest``, or ``bearer``."""
188 |         return self._type
189 | 
190 |     @type.setter
191 |     def type(self, value: str) -> None:
192 |         self._type = value
193 |         self._trigger_on_update()
194 | 
195 |     @property
196 |     def parameters(self) -> dict[str, str | None]:
197 |         """A dict of parameters for the header. Only one of this or :attr:`token` should
198 |         have a value for a given scheme.
199 |         """
200 |         return self._parameters
201 | 
202 |     @parameters.setter
203 |     def parameters(self, value: dict[str, str]) -> None:
204 |         self._parameters = CallbackDict(value, lambda _: self._trigger_on_update())
205 |         self._trigger_on_update()
206 | 
207 |     @property
208 |     def token(self) -> str | None:
209 |         """A dict of parameters for the header. Only one of this or :attr:`token` should
210 |         have a value for a given scheme.
211 |         """
212 |         return self._token
213 | 
214 |     @token.setter
215 |     def token(self, value: str | None) -> None:
216 |         """A token for the header. Only one of this or :attr:`parameters` should have a
217 |         value for a given scheme.
218 | 
219 |         .. versionadded:: 2.3
220 |         """
221 |         self._token = value
222 |         self._trigger_on_update()
223 | 
224 |     def __getitem__(self, key: str) -> str | None:
225 |         return self.parameters.get(key)
226 | 
227 |     def __setitem__(self, key: str, value: str | None) -> None:
228 |         if value is None:
229 |             if key in self.parameters:
230 |                 del self.parameters[key]
231 |         else:
232 |             self.parameters[key] = value
233 | 
234 |         self._trigger_on_update()
235 | 
236 |     def __delitem__(self, key: str) -> None:
237 |         if key in self.parameters:
238 |             del self.parameters[key]
239 |             self._trigger_on_update()
240 | 
241 |     def __getattr__(self, name: str) -> str | None:
242 |         return self[name]
243 | 
244 |     def __setattr__(self, name: str, value: str | None) -> None:
245 |         if name in {"_type", "_parameters", "_token", "_on_update"}:
246 |             super().__setattr__(name, value)
247 |         else:
248 |             self[name] = value
249 | 
250 |     def __delattr__(self, name: str) -> None:
251 |         del self[name]
252 | 
253 |     def __contains__(self, key: str) -> bool:
254 |         return key in self.parameters
255 | 
256 |     def __eq__(self, other: object) -> bool:
257 |         if not isinstance(other, WWWAuthenticate):
258 |             return NotImplemented
259 | 
260 |         return (
261 |             other.type == self.type
262 |             and other.token == self.token
263 |             and other.parameters == self.parameters
264 |         )
265 | 
266 |     def get(self, key: str, default: str | None = None) -> str | None:
267 |         return self.parameters.get(key, default)
268 | 
269 |     @classmethod
270 |     def from_header(cls, value: str | None) -> te.Self | None:
271 |         """Parse a ``WWW-Authenticate`` header value and return an instance, or ``None``
272 |         if the value is empty.
273 | 
274 |         :param value: The header value to parse.
275 | 
276 |         .. versionadded:: 2.3
277 |         """
278 |         if not value:
279 |             return None
280 | 
281 |         scheme, _, rest = value.partition(" ")
282 |         scheme = scheme.lower()
283 |         rest = rest.strip()
284 | 
285 |         if "=" in rest.rstrip("="):
286 |             # = that is not trailing, this is parameters.
287 |             return cls(scheme, parse_dict_header(rest), None)
288 | 
289 |         # No = or only trailing =, this is a token.
290 |         return cls(scheme, None, rest)
291 | 
292 |     def to_header(self) -> str:
293 |         """Produce a ``WWW-Authenticate`` header value representing this data."""
294 |         if self.token is not None:
295 |             return f"{self.type.title()} {self.token}"
296 | 
297 |         if self.type == "digest":
298 |             items = []
299 | 
300 |             for key, value in self.parameters.items():
301 |                 if key in {"realm", "domain", "nonce", "opaque", "qop"}:
302 |                     value = quote_header_value(value, allow_token=False)
303 |                 else:
304 |                     value = quote_header_value(value)
305 | 
306 |                 items.append(f"{key}={value}")
307 | 
308 |             return f"Digest {', '.join(items)}"
309 | 
310 |         return f"{self.type.title()} {dump_header(self.parameters)}"
311 | 
312 |     def __str__(self) -> str:
313 |         return self.to_header()
314 | 
315 |     def __repr__(self) -> str:
316 |         return f"<{type(self).__name__} {self.to_header()}>"
317 | 
```
Page 35/168FirstPrevNextLast