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 |
```