This is page 15 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py:
--------------------------------------------------------------------------------
```python
1 | import itertools
2 |
3 | from .compat import collections_abc
4 |
5 |
6 | class DirectedGraph(object):
7 | """A graph structure with directed edges."""
8 |
9 | def __init__(self):
10 | self._vertices = set()
11 | self._forwards = {} # <key> -> Set[<key>]
12 | self._backwards = {} # <key> -> Set[<key>]
13 |
14 | def __iter__(self):
15 | return iter(self._vertices)
16 |
17 | def __len__(self):
18 | return len(self._vertices)
19 |
20 | def __contains__(self, key):
21 | return key in self._vertices
22 |
23 | def copy(self):
24 | """Return a shallow copy of this graph."""
25 | other = DirectedGraph()
26 | other._vertices = set(self._vertices)
27 | other._forwards = {k: set(v) for k, v in self._forwards.items()}
28 | other._backwards = {k: set(v) for k, v in self._backwards.items()}
29 | return other
30 |
31 | def add(self, key):
32 | """Add a new vertex to the graph."""
33 | if key in self._vertices:
34 | raise ValueError("vertex exists")
35 | self._vertices.add(key)
36 | self._forwards[key] = set()
37 | self._backwards[key] = set()
38 |
39 | def remove(self, key):
40 | """Remove a vertex from the graph, disconnecting all edges from/to it."""
41 | self._vertices.remove(key)
42 | for f in self._forwards.pop(key):
43 | self._backwards[f].remove(key)
44 | for t in self._backwards.pop(key):
45 | self._forwards[t].remove(key)
46 |
47 | def connected(self, f, t):
48 | return f in self._backwards[t] and t in self._forwards[f]
49 |
50 | def connect(self, f, t):
51 | """Connect two existing vertices.
52 |
53 | Nothing happens if the vertices are already connected.
54 | """
55 | if t not in self._vertices:
56 | raise KeyError(t)
57 | self._forwards[f].add(t)
58 | self._backwards[t].add(f)
59 |
60 | def iter_edges(self):
61 | for f, children in self._forwards.items():
62 | for t in children:
63 | yield f, t
64 |
65 | def iter_children(self, key):
66 | return iter(self._forwards[key])
67 |
68 | def iter_parents(self, key):
69 | return iter(self._backwards[key])
70 |
71 |
72 | class IteratorMapping(collections_abc.Mapping):
73 | def __init__(self, mapping, accessor, appends=None):
74 | self._mapping = mapping
75 | self._accessor = accessor
76 | self._appends = appends or {}
77 |
78 | def __repr__(self):
79 | return "IteratorMapping({!r}, {!r}, {!r})".format(
80 | self._mapping,
81 | self._accessor,
82 | self._appends,
83 | )
84 |
85 | def __bool__(self):
86 | return bool(self._mapping or self._appends)
87 |
88 | __nonzero__ = __bool__ # XXX: Python 2.
89 |
90 | def __contains__(self, key):
91 | return key in self._mapping or key in self._appends
92 |
93 | def __getitem__(self, k):
94 | try:
95 | v = self._mapping[k]
96 | except KeyError:
97 | return iter(self._appends[k])
98 | return itertools.chain(self._accessor(v), self._appends.get(k, ()))
99 |
100 | def __iter__(self):
101 | more = (k for k in self._appends if k not in self._mapping)
102 | return itertools.chain(self._mapping, more)
103 |
104 | def __len__(self):
105 | more = sum(1 for k in self._appends if k not in self._mapping)
106 | return len(self._mapping) + more
107 |
108 |
109 | class _FactoryIterableView(object):
110 | """Wrap an iterator factory returned by `find_matches()`.
111 |
112 | Calling `iter()` on this class would invoke the underlying iterator
113 | factory, making it a "collection with ordering" that can be iterated
114 | through multiple times, but lacks random access methods presented in
115 | built-in Python sequence types.
116 | """
117 |
118 | def __init__(self, factory):
119 | self._factory = factory
120 | self._iterable = None
121 |
122 | def __repr__(self):
123 | return "{}({})".format(type(self).__name__, list(self))
124 |
125 | def __bool__(self):
126 | try:
127 | next(iter(self))
128 | except StopIteration:
129 | return False
130 | return True
131 |
132 | __nonzero__ = __bool__ # XXX: Python 2.
133 |
134 | def __iter__(self):
135 | iterable = (
136 | self._factory() if self._iterable is None else self._iterable
137 | )
138 | self._iterable, current = itertools.tee(iterable)
139 | return current
140 |
141 |
142 | class _SequenceIterableView(object):
143 | """Wrap an iterable returned by find_matches().
144 |
145 | This is essentially just a proxy to the underlying sequence that provides
146 | the same interface as `_FactoryIterableView`.
147 | """
148 |
149 | def __init__(self, sequence):
150 | self._sequence = sequence
151 |
152 | def __repr__(self):
153 | return "{}({})".format(type(self).__name__, self._sequence)
154 |
155 | def __bool__(self):
156 | return bool(self._sequence)
157 |
158 | __nonzero__ = __bool__ # XXX: Python 2.
159 |
160 | def __iter__(self):
161 | return iter(self._sequence)
162 |
163 |
164 | def build_iter_view(matches):
165 | """Build an iterable view from the value returned by `find_matches()`."""
166 | if callable(matches):
167 | return _FactoryIterableView(matches)
168 | if not isinstance(matches, collections_abc.Sequence):
169 | matches = list(matches)
170 | return _SequenceIterableView(matches)
171 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py:
--------------------------------------------------------------------------------
```python
1 | from typing import cast, List, Optional, Tuple, TYPE_CHECKING, Union
2 |
3 | if TYPE_CHECKING:
4 | from .console import (
5 | Console,
6 | ConsoleOptions,
7 | RenderableType,
8 | RenderResult,
9 | )
10 | from .jupyter import JupyterMixin
11 | from .measure import Measurement
12 | from .style import Style
13 | from .segment import Segment
14 |
15 |
16 | PaddingDimensions = Union[int, Tuple[int], Tuple[int, int], Tuple[int, int, int, int]]
17 |
18 |
19 | class Padding(JupyterMixin):
20 | """Draw space around content.
21 |
22 | Example:
23 | >>> print(Padding("Hello", (2, 4), style="on blue"))
24 |
25 | Args:
26 | renderable (RenderableType): String or other renderable.
27 | pad (Union[int, Tuple[int]]): Padding for top, right, bottom, and left borders.
28 | May be specified with 1, 2, or 4 integers (CSS style).
29 | style (Union[str, Style], optional): Style for padding characters. Defaults to "none".
30 | expand (bool, optional): Expand padding to fit available width. Defaults to True.
31 | """
32 |
33 | def __init__(
34 | self,
35 | renderable: "RenderableType",
36 | pad: "PaddingDimensions" = (0, 0, 0, 0),
37 | *,
38 | style: Union[str, Style] = "none",
39 | expand: bool = True,
40 | ):
41 | self.renderable = renderable
42 | self.top, self.right, self.bottom, self.left = self.unpack(pad)
43 | self.style = style
44 | self.expand = expand
45 |
46 | @classmethod
47 | def indent(cls, renderable: "RenderableType", level: int) -> "Padding":
48 | """Make padding instance to render an indent.
49 |
50 | Args:
51 | renderable (RenderableType): String or other renderable.
52 | level (int): Number of characters to indent.
53 |
54 | Returns:
55 | Padding: A Padding instance.
56 | """
57 |
58 | return Padding(renderable, pad=(0, 0, 0, level), expand=False)
59 |
60 | @staticmethod
61 | def unpack(pad: "PaddingDimensions") -> Tuple[int, int, int, int]:
62 | """Unpack padding specified in CSS style."""
63 | if isinstance(pad, int):
64 | return (pad, pad, pad, pad)
65 | if len(pad) == 1:
66 | _pad = pad[0]
67 | return (_pad, _pad, _pad, _pad)
68 | if len(pad) == 2:
69 | pad_top, pad_right = cast(Tuple[int, int], pad)
70 | return (pad_top, pad_right, pad_top, pad_right)
71 | if len(pad) == 4:
72 | top, right, bottom, left = cast(Tuple[int, int, int, int], pad)
73 | return (top, right, bottom, left)
74 | raise ValueError(f"1, 2 or 4 integers required for padding; {len(pad)} given")
75 |
76 | def __repr__(self) -> str:
77 | return f"Padding({self.renderable!r}, ({self.top},{self.right},{self.bottom},{self.left}))"
78 |
79 | def __rich_console__(
80 | self, console: "Console", options: "ConsoleOptions"
81 | ) -> "RenderResult":
82 | style = console.get_style(self.style)
83 | if self.expand:
84 | width = options.max_width
85 | else:
86 | width = min(
87 | Measurement.get(console, options, self.renderable).maximum
88 | + self.left
89 | + self.right,
90 | options.max_width,
91 | )
92 | render_options = options.update_width(width - self.left - self.right)
93 | if render_options.height is not None:
94 | render_options = render_options.update_height(
95 | height=render_options.height - self.top - self.bottom
96 | )
97 | lines = console.render_lines(
98 | self.renderable, render_options, style=style, pad=True
99 | )
100 | _Segment = Segment
101 |
102 | left = _Segment(" " * self.left, style) if self.left else None
103 | right = (
104 | [_Segment(f'{" " * self.right}', style), _Segment.line()]
105 | if self.right
106 | else [_Segment.line()]
107 | )
108 | blank_line: Optional[List[Segment]] = None
109 | if self.top:
110 | blank_line = [_Segment(f'{" " * width}\n', style)]
111 | yield from blank_line * self.top
112 | if left:
113 | for line in lines:
114 | yield left
115 | yield from line
116 | yield from right
117 | else:
118 | for line in lines:
119 | yield from line
120 | yield from right
121 | if self.bottom:
122 | blank_line = blank_line or [_Segment(f'{" " * width}\n', style)]
123 | yield from blank_line * self.bottom
124 |
125 | def __rich_measure__(
126 | self, console: "Console", options: "ConsoleOptions"
127 | ) -> "Measurement":
128 | max_width = options.max_width
129 | extra_width = self.left + self.right
130 | if max_width - extra_width < 1:
131 | return Measurement(max_width, max_width)
132 | measure_min, measure_max = Measurement.get(console, options, self.renderable)
133 | measurement = Measurement(measure_min + extra_width, measure_max + extra_width)
134 | measurement = measurement.with_maximum(max_width)
135 | return measurement
136 |
137 |
138 | if __name__ == "__main__": # pragma: no cover
139 | from pip._vendor.rich import print
140 |
141 | print(Padding("Hello, World", (2, 4), style="on blue"))
142 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py:
--------------------------------------------------------------------------------
```python
1 | import hashlib
2 | from typing import TYPE_CHECKING, BinaryIO, Dict, Iterable, List, NoReturn, Optional
3 |
4 | from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError
5 | from pip._internal.utils.misc import read_chunks
6 |
7 | if TYPE_CHECKING:
8 | from hashlib import _Hash
9 |
10 |
11 | # The recommended hash algo of the moment. Change this whenever the state of
12 | # the art changes; it won't hurt backward compatibility.
13 | FAVORITE_HASH = "sha256"
14 |
15 |
16 | # Names of hashlib algorithms allowed by the --hash option and ``pip hash``
17 | # Currently, those are the ones at least as collision-resistant as sha256.
18 | STRONG_HASHES = ["sha256", "sha384", "sha512"]
19 |
20 |
21 | class Hashes:
22 | """A wrapper that builds multiple hashes at once and checks them against
23 | known-good values
24 |
25 | """
26 |
27 | def __init__(self, hashes: Optional[Dict[str, List[str]]] = None) -> None:
28 | """
29 | :param hashes: A dict of algorithm names pointing to lists of allowed
30 | hex digests
31 | """
32 | allowed = {}
33 | if hashes is not None:
34 | for alg, keys in hashes.items():
35 | # Make sure values are always sorted (to ease equality checks)
36 | allowed[alg] = [k.lower() for k in sorted(keys)]
37 | self._allowed = allowed
38 |
39 | def __and__(self, other: "Hashes") -> "Hashes":
40 | if not isinstance(other, Hashes):
41 | return NotImplemented
42 |
43 | # If either of the Hashes object is entirely empty (i.e. no hash
44 | # specified at all), all hashes from the other object are allowed.
45 | if not other:
46 | return self
47 | if not self:
48 | return other
49 |
50 | # Otherwise only hashes that present in both objects are allowed.
51 | new = {}
52 | for alg, values in other._allowed.items():
53 | if alg not in self._allowed:
54 | continue
55 | new[alg] = [v for v in values if v in self._allowed[alg]]
56 | return Hashes(new)
57 |
58 | @property
59 | def digest_count(self) -> int:
60 | return sum(len(digests) for digests in self._allowed.values())
61 |
62 | def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool:
63 | """Return whether the given hex digest is allowed."""
64 | return hex_digest in self._allowed.get(hash_name, [])
65 |
66 | def check_against_chunks(self, chunks: Iterable[bytes]) -> None:
67 | """Check good hashes against ones built from iterable of chunks of
68 | data.
69 |
70 | Raise HashMismatch if none match.
71 |
72 | """
73 | gots = {}
74 | for hash_name in self._allowed.keys():
75 | try:
76 | gots[hash_name] = hashlib.new(hash_name)
77 | except (ValueError, TypeError):
78 | raise InstallationError(f"Unknown hash name: {hash_name}")
79 |
80 | for chunk in chunks:
81 | for hash in gots.values():
82 | hash.update(chunk)
83 |
84 | for hash_name, got in gots.items():
85 | if got.hexdigest() in self._allowed[hash_name]:
86 | return
87 | self._raise(gots)
88 |
89 | def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn":
90 | raise HashMismatch(self._allowed, gots)
91 |
92 | def check_against_file(self, file: BinaryIO) -> None:
93 | """Check good hashes against a file-like object
94 |
95 | Raise HashMismatch if none match.
96 |
97 | """
98 | return self.check_against_chunks(read_chunks(file))
99 |
100 | def check_against_path(self, path: str) -> None:
101 | with open(path, "rb") as file:
102 | return self.check_against_file(file)
103 |
104 | def has_one_of(self, hashes: Dict[str, str]) -> bool:
105 | """Return whether any of the given hashes are allowed."""
106 | for hash_name, hex_digest in hashes.items():
107 | if self.is_hash_allowed(hash_name, hex_digest):
108 | return True
109 | return False
110 |
111 | def __bool__(self) -> bool:
112 | """Return whether I know any known-good hashes."""
113 | return bool(self._allowed)
114 |
115 | def __eq__(self, other: object) -> bool:
116 | if not isinstance(other, Hashes):
117 | return NotImplemented
118 | return self._allowed == other._allowed
119 |
120 | def __hash__(self) -> int:
121 | return hash(
122 | ",".join(
123 | sorted(
124 | ":".join((alg, digest))
125 | for alg, digest_list in self._allowed.items()
126 | for digest in digest_list
127 | )
128 | )
129 | )
130 |
131 |
132 | class MissingHashes(Hashes):
133 | """A workalike for Hashes used when we're missing a hash for a requirement
134 |
135 | It computes the actual hash of the requirement and raises a HashMissing
136 | exception showing it to the user.
137 |
138 | """
139 |
140 | def __init__(self) -> None:
141 | """Don't offer the ``hashes`` kwarg."""
142 | # Pass our favorite hash in to generate a "gotten hash". With the
143 | # empty list, it will never match, so an error will always raise.
144 | super().__init__(hashes={FAVORITE_HASH: []})
145 |
146 | def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn":
147 | raise HashMissing(gots[FAVORITE_HASH].hexdigest())
148 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/irc.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.formatters.irc
3 | ~~~~~~~~~~~~~~~~~~~~~~~
4 |
5 | Formatter for IRC output
6 |
7 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8 | :license: BSD, see LICENSE for details.
9 | """
10 |
11 | from pip._vendor.pygments.formatter import Formatter
12 | from pip._vendor.pygments.token import Keyword, Name, Comment, String, Error, \
13 | Number, Operator, Generic, Token, Whitespace
14 | from pip._vendor.pygments.util import get_choice_opt
15 |
16 |
17 | __all__ = ['IRCFormatter']
18 |
19 |
20 | #: Map token types to a tuple of color values for light and dark
21 | #: backgrounds.
22 | IRC_COLORS = {
23 | Token: ('', ''),
24 |
25 | Whitespace: ('gray', 'brightblack'),
26 | Comment: ('gray', 'brightblack'),
27 | Comment.Preproc: ('cyan', 'brightcyan'),
28 | Keyword: ('blue', 'brightblue'),
29 | Keyword.Type: ('cyan', 'brightcyan'),
30 | Operator.Word: ('magenta', 'brightcyan'),
31 | Name.Builtin: ('cyan', 'brightcyan'),
32 | Name.Function: ('green', 'brightgreen'),
33 | Name.Namespace: ('_cyan_', '_brightcyan_'),
34 | Name.Class: ('_green_', '_brightgreen_'),
35 | Name.Exception: ('cyan', 'brightcyan'),
36 | Name.Decorator: ('brightblack', 'gray'),
37 | Name.Variable: ('red', 'brightred'),
38 | Name.Constant: ('red', 'brightred'),
39 | Name.Attribute: ('cyan', 'brightcyan'),
40 | Name.Tag: ('brightblue', 'brightblue'),
41 | String: ('yellow', 'yellow'),
42 | Number: ('blue', 'brightblue'),
43 |
44 | Generic.Deleted: ('brightred', 'brightred'),
45 | Generic.Inserted: ('green', 'brightgreen'),
46 | Generic.Heading: ('**', '**'),
47 | Generic.Subheading: ('*magenta*', '*brightmagenta*'),
48 | Generic.Error: ('brightred', 'brightred'),
49 |
50 | Error: ('_brightred_', '_brightred_'),
51 | }
52 |
53 |
54 | IRC_COLOR_MAP = {
55 | 'white': 0,
56 | 'black': 1,
57 | 'blue': 2,
58 | 'brightgreen': 3,
59 | 'brightred': 4,
60 | 'yellow': 5,
61 | 'magenta': 6,
62 | 'orange': 7,
63 | 'green': 7, #compat w/ ansi
64 | 'brightyellow': 8,
65 | 'lightgreen': 9,
66 | 'brightcyan': 9, # compat w/ ansi
67 | 'cyan': 10,
68 | 'lightblue': 11,
69 | 'red': 11, # compat w/ ansi
70 | 'brightblue': 12,
71 | 'brightmagenta': 13,
72 | 'brightblack': 14,
73 | 'gray': 15,
74 | }
75 |
76 | def ircformat(color, text):
77 | if len(color) < 1:
78 | return text
79 | add = sub = ''
80 | if '_' in color: # italic
81 | add += '\x1D'
82 | sub = '\x1D' + sub
83 | color = color.strip('_')
84 | if '*' in color: # bold
85 | add += '\x02'
86 | sub = '\x02' + sub
87 | color = color.strip('*')
88 | # underline (\x1F) not supported
89 | # backgrounds (\x03FF,BB) not supported
90 | if len(color) > 0: # actual color - may have issues with ircformat("red", "blah")+"10" type stuff
91 | add += '\x03' + str(IRC_COLOR_MAP[color]).zfill(2)
92 | sub = '\x03' + sub
93 | return add + text + sub
94 | return '<'+add+'>'+text+'</'+sub+'>'
95 |
96 |
97 | class IRCFormatter(Formatter):
98 | r"""
99 | Format tokens with IRC color sequences
100 |
101 | The `get_style_defs()` method doesn't do anything special since there is
102 | no support for common styles.
103 |
104 | Options accepted:
105 |
106 | `bg`
107 | Set to ``"light"`` or ``"dark"`` depending on the terminal's background
108 | (default: ``"light"``).
109 |
110 | `colorscheme`
111 | A dictionary mapping token types to (lightbg, darkbg) color names or
112 | ``None`` (default: ``None`` = use builtin colorscheme).
113 |
114 | `linenos`
115 | Set to ``True`` to have line numbers in the output as well
116 | (default: ``False`` = no line numbers).
117 | """
118 | name = 'IRC'
119 | aliases = ['irc', 'IRC']
120 | filenames = []
121 |
122 | def __init__(self, **options):
123 | Formatter.__init__(self, **options)
124 | self.darkbg = get_choice_opt(options, 'bg',
125 | ['light', 'dark'], 'light') == 'dark'
126 | self.colorscheme = options.get('colorscheme', None) or IRC_COLORS
127 | self.linenos = options.get('linenos', False)
128 | self._lineno = 0
129 |
130 | def _write_lineno(self, outfile):
131 | if self.linenos:
132 | self._lineno += 1
133 | outfile.write("%04d: " % self._lineno)
134 |
135 | def format_unencoded(self, tokensource, outfile):
136 | self._write_lineno(outfile)
137 |
138 | for ttype, value in tokensource:
139 | color = self.colorscheme.get(ttype)
140 | while color is None:
141 | ttype = ttype[:-1]
142 | color = self.colorscheme.get(ttype)
143 | if color:
144 | color = color[self.darkbg]
145 | spl = value.split('\n')
146 | for line in spl[:-1]:
147 | if line:
148 | outfile.write(ircformat(color, line))
149 | outfile.write('\n')
150 | self._write_lineno(outfile)
151 | if spl[-1]:
152 | outfile.write(ircformat(color, spl[-1]))
153 | else:
154 | outfile.write(value)
155 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xlink.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: unfinished XLink detection module
3 | * Description: unfinished XLink detection module
4 | *
5 | * Copy: See Copyright for the status of this software.
6 | *
7 | * Author: Daniel Veillard
8 | */
9 |
10 | #ifndef __XML_XLINK_H__
11 | #define __XML_XLINK_H__
12 |
13 | #include <libxml/xmlversion.h>
14 | #include <libxml/tree.h>
15 |
16 | #ifdef LIBXML_XPTR_ENABLED
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | /**
23 | * Various defines for the various Link properties.
24 | *
25 | * NOTE: the link detection layer will try to resolve QName expansion
26 | * of namespaces. If "foo" is the prefix for "http://foo.com/"
27 | * then the link detection layer will expand role="foo:myrole"
28 | * to "http://foo.com/:myrole".
29 | * NOTE: the link detection layer will expand URI-References found on
30 | * href attributes by using the base mechanism if found.
31 | */
32 | typedef xmlChar *xlinkHRef;
33 | typedef xmlChar *xlinkRole;
34 | typedef xmlChar *xlinkTitle;
35 |
36 | typedef enum {
37 | XLINK_TYPE_NONE = 0,
38 | XLINK_TYPE_SIMPLE,
39 | XLINK_TYPE_EXTENDED,
40 | XLINK_TYPE_EXTENDED_SET
41 | } xlinkType;
42 |
43 | typedef enum {
44 | XLINK_SHOW_NONE = 0,
45 | XLINK_SHOW_NEW,
46 | XLINK_SHOW_EMBED,
47 | XLINK_SHOW_REPLACE
48 | } xlinkShow;
49 |
50 | typedef enum {
51 | XLINK_ACTUATE_NONE = 0,
52 | XLINK_ACTUATE_AUTO,
53 | XLINK_ACTUATE_ONREQUEST
54 | } xlinkActuate;
55 |
56 | /**
57 | * xlinkNodeDetectFunc:
58 | * @ctx: user data pointer
59 | * @node: the node to check
60 | *
61 | * This is the prototype for the link detection routine.
62 | * It calls the default link detection callbacks upon link detection.
63 | */
64 | typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
65 |
66 | /*
67 | * The link detection module interact with the upper layers using
68 | * a set of callback registered at parsing time.
69 | */
70 |
71 | /**
72 | * xlinkSimpleLinkFunk:
73 | * @ctx: user data pointer
74 | * @node: the node carrying the link
75 | * @href: the target of the link
76 | * @role: the role string
77 | * @title: the link title
78 | *
79 | * This is the prototype for a simple link detection callback.
80 | */
81 | typedef void
82 | (*xlinkSimpleLinkFunk) (void *ctx,
83 | xmlNodePtr node,
84 | const xlinkHRef href,
85 | const xlinkRole role,
86 | const xlinkTitle title);
87 |
88 | /**
89 | * xlinkExtendedLinkFunk:
90 | * @ctx: user data pointer
91 | * @node: the node carrying the link
92 | * @nbLocators: the number of locators detected on the link
93 | * @hrefs: pointer to the array of locator hrefs
94 | * @roles: pointer to the array of locator roles
95 | * @nbArcs: the number of arcs detected on the link
96 | * @from: pointer to the array of source roles found on the arcs
97 | * @to: pointer to the array of target roles found on the arcs
98 | * @show: array of values for the show attributes found on the arcs
99 | * @actuate: array of values for the actuate attributes found on the arcs
100 | * @nbTitles: the number of titles detected on the link
101 | * @title: array of titles detected on the link
102 | * @langs: array of xml:lang values for the titles
103 | *
104 | * This is the prototype for a extended link detection callback.
105 | */
106 | typedef void
107 | (*xlinkExtendedLinkFunk)(void *ctx,
108 | xmlNodePtr node,
109 | int nbLocators,
110 | const xlinkHRef *hrefs,
111 | const xlinkRole *roles,
112 | int nbArcs,
113 | const xlinkRole *from,
114 | const xlinkRole *to,
115 | xlinkShow *show,
116 | xlinkActuate *actuate,
117 | int nbTitles,
118 | const xlinkTitle *titles,
119 | const xmlChar **langs);
120 |
121 | /**
122 | * xlinkExtendedLinkSetFunk:
123 | * @ctx: user data pointer
124 | * @node: the node carrying the link
125 | * @nbLocators: the number of locators detected on the link
126 | * @hrefs: pointer to the array of locator hrefs
127 | * @roles: pointer to the array of locator roles
128 | * @nbTitles: the number of titles detected on the link
129 | * @title: array of titles detected on the link
130 | * @langs: array of xml:lang values for the titles
131 | *
132 | * This is the prototype for a extended link set detection callback.
133 | */
134 | typedef void
135 | (*xlinkExtendedLinkSetFunk) (void *ctx,
136 | xmlNodePtr node,
137 | int nbLocators,
138 | const xlinkHRef *hrefs,
139 | const xlinkRole *roles,
140 | int nbTitles,
141 | const xlinkTitle *titles,
142 | const xmlChar **langs);
143 |
144 | /**
145 | * This is the structure containing a set of Links detection callbacks.
146 | *
147 | * There is no default xlink callbacks, if one want to get link
148 | * recognition activated, those call backs must be provided before parsing.
149 | */
150 | typedef struct _xlinkHandler xlinkHandler;
151 | typedef xlinkHandler *xlinkHandlerPtr;
152 | struct _xlinkHandler {
153 | xlinkSimpleLinkFunk simple;
154 | xlinkExtendedLinkFunk extended;
155 | xlinkExtendedLinkSetFunk set;
156 | };
157 |
158 | /*
159 | * The default detection routine, can be overridden, they call the default
160 | * detection callbacks.
161 | */
162 |
163 | XMLPUBFUN xlinkNodeDetectFunc
164 | xlinkGetDefaultDetect (void);
165 | XMLPUBFUN void
166 | xlinkSetDefaultDetect (xlinkNodeDetectFunc func);
167 |
168 | /*
169 | * Routines to set/get the default handlers.
170 | */
171 | XMLPUBFUN xlinkHandlerPtr
172 | xlinkGetDefaultHandler (void);
173 | XMLPUBFUN void
174 | xlinkSetDefaultHandler (xlinkHandlerPtr handler);
175 |
176 | /*
177 | * Link detection module itself.
178 | */
179 | XMLPUBFUN xlinkType
180 | xlinkIsLink (xmlDocPtr doc,
181 | xmlNodePtr node);
182 |
183 | #ifdef __cplusplus
184 | }
185 | #endif
186 |
187 | #endif /* LIBXML_XPTR_ENABLED */
188 |
189 | #endif /* __XML_XLINK_H__ */
190 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py:
--------------------------------------------------------------------------------
```python
1 | from dataclasses import dataclass
2 | from typing import FrozenSet, Iterable, Optional, Tuple
3 |
4 | from pip._vendor.packaging.specifiers import SpecifierSet
5 | from pip._vendor.packaging.utils import NormalizedName
6 | from pip._vendor.packaging.version import Version
7 |
8 | from pip._internal.models.link import Link, links_equivalent
9 | from pip._internal.req.req_install import InstallRequirement
10 | from pip._internal.utils.hashes import Hashes
11 |
12 | CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]]
13 |
14 |
15 | def format_name(project: NormalizedName, extras: FrozenSet[NormalizedName]) -> str:
16 | if not extras:
17 | return project
18 | extras_expr = ",".join(sorted(extras))
19 | return f"{project}[{extras_expr}]"
20 |
21 |
22 | @dataclass(frozen=True)
23 | class Constraint:
24 | specifier: SpecifierSet
25 | hashes: Hashes
26 | links: FrozenSet[Link]
27 |
28 | @classmethod
29 | def empty(cls) -> "Constraint":
30 | return Constraint(SpecifierSet(), Hashes(), frozenset())
31 |
32 | @classmethod
33 | def from_ireq(cls, ireq: InstallRequirement) -> "Constraint":
34 | links = frozenset([ireq.link]) if ireq.link else frozenset()
35 | return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links)
36 |
37 | def __bool__(self) -> bool:
38 | return bool(self.specifier) or bool(self.hashes) or bool(self.links)
39 |
40 | def __and__(self, other: InstallRequirement) -> "Constraint":
41 | if not isinstance(other, InstallRequirement):
42 | return NotImplemented
43 | specifier = self.specifier & other.specifier
44 | hashes = self.hashes & other.hashes(trust_internet=False)
45 | links = self.links
46 | if other.link:
47 | links = links.union([other.link])
48 | return Constraint(specifier, hashes, links)
49 |
50 | def is_satisfied_by(self, candidate: "Candidate") -> bool:
51 | # Reject if there are any mismatched URL constraints on this package.
52 | if self.links and not all(_match_link(link, candidate) for link in self.links):
53 | return False
54 | # We can safely always allow prereleases here since PackageFinder
55 | # already implements the prerelease logic, and would have filtered out
56 | # prerelease candidates if the user does not expect them.
57 | return self.specifier.contains(candidate.version, prereleases=True)
58 |
59 |
60 | class Requirement:
61 | @property
62 | def project_name(self) -> NormalizedName:
63 | """The "project name" of a requirement.
64 |
65 | This is different from ``name`` if this requirement contains extras,
66 | in which case ``name`` would contain the ``[...]`` part, while this
67 | refers to the name of the project.
68 | """
69 | raise NotImplementedError("Subclass should override")
70 |
71 | @property
72 | def name(self) -> str:
73 | """The name identifying this requirement in the resolver.
74 |
75 | This is different from ``project_name`` if this requirement contains
76 | extras, where ``project_name`` would not contain the ``[...]`` part.
77 | """
78 | raise NotImplementedError("Subclass should override")
79 |
80 | def is_satisfied_by(self, candidate: "Candidate") -> bool:
81 | return False
82 |
83 | def get_candidate_lookup(self) -> CandidateLookup:
84 | raise NotImplementedError("Subclass should override")
85 |
86 | def format_for_error(self) -> str:
87 | raise NotImplementedError("Subclass should override")
88 |
89 |
90 | def _match_link(link: Link, candidate: "Candidate") -> bool:
91 | if candidate.source_link:
92 | return links_equivalent(link, candidate.source_link)
93 | return False
94 |
95 |
96 | class Candidate:
97 | @property
98 | def project_name(self) -> NormalizedName:
99 | """The "project name" of the candidate.
100 |
101 | This is different from ``name`` if this candidate contains extras,
102 | in which case ``name`` would contain the ``[...]`` part, while this
103 | refers to the name of the project.
104 | """
105 | raise NotImplementedError("Override in subclass")
106 |
107 | @property
108 | def name(self) -> str:
109 | """The name identifying this candidate in the resolver.
110 |
111 | This is different from ``project_name`` if this candidate contains
112 | extras, where ``project_name`` would not contain the ``[...]`` part.
113 | """
114 | raise NotImplementedError("Override in subclass")
115 |
116 | @property
117 | def version(self) -> Version:
118 | raise NotImplementedError("Override in subclass")
119 |
120 | @property
121 | def is_installed(self) -> bool:
122 | raise NotImplementedError("Override in subclass")
123 |
124 | @property
125 | def is_editable(self) -> bool:
126 | raise NotImplementedError("Override in subclass")
127 |
128 | @property
129 | def source_link(self) -> Optional[Link]:
130 | raise NotImplementedError("Override in subclass")
131 |
132 | def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]:
133 | raise NotImplementedError("Override in subclass")
134 |
135 | def get_install_requirement(self) -> Optional[InstallRequirement]:
136 | raise NotImplementedError("Override in subclass")
137 |
138 | def format_for_error(self) -> str:
139 | raise NotImplementedError("Subclass should override")
140 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/json.py:
--------------------------------------------------------------------------------
```python
1 | from pathlib import Path
2 | from json import loads, dumps
3 | from typing import Any, Callable, Optional, Union
4 |
5 | from .text import Text
6 | from .highlighter import JSONHighlighter, NullHighlighter
7 |
8 |
9 | class JSON:
10 | """A renderable which pretty prints JSON.
11 |
12 | Args:
13 | json (str): JSON encoded data.
14 | indent (Union[None, int, str], optional): Number of characters to indent by. Defaults to 2.
15 | highlight (bool, optional): Enable highlighting. Defaults to True.
16 | skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False.
17 | ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False.
18 | check_circular (bool, optional): Check for circular references. Defaults to True.
19 | allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True.
20 | default (Callable, optional): A callable that converts values that can not be encoded
21 | in to something that can be JSON encoded. Defaults to None.
22 | sort_keys (bool, optional): Sort dictionary keys. Defaults to False.
23 | """
24 |
25 | def __init__(
26 | self,
27 | json: str,
28 | indent: Union[None, int, str] = 2,
29 | highlight: bool = True,
30 | skip_keys: bool = False,
31 | ensure_ascii: bool = False,
32 | check_circular: bool = True,
33 | allow_nan: bool = True,
34 | default: Optional[Callable[[Any], Any]] = None,
35 | sort_keys: bool = False,
36 | ) -> None:
37 | data = loads(json)
38 | json = dumps(
39 | data,
40 | indent=indent,
41 | skipkeys=skip_keys,
42 | ensure_ascii=ensure_ascii,
43 | check_circular=check_circular,
44 | allow_nan=allow_nan,
45 | default=default,
46 | sort_keys=sort_keys,
47 | )
48 | highlighter = JSONHighlighter() if highlight else NullHighlighter()
49 | self.text = highlighter(json)
50 | self.text.no_wrap = True
51 | self.text.overflow = None
52 |
53 | @classmethod
54 | def from_data(
55 | cls,
56 | data: Any,
57 | indent: Union[None, int, str] = 2,
58 | highlight: bool = True,
59 | skip_keys: bool = False,
60 | ensure_ascii: bool = False,
61 | check_circular: bool = True,
62 | allow_nan: bool = True,
63 | default: Optional[Callable[[Any], Any]] = None,
64 | sort_keys: bool = False,
65 | ) -> "JSON":
66 | """Encodes a JSON object from arbitrary data.
67 |
68 | Args:
69 | data (Any): An object that may be encoded in to JSON
70 | indent (Union[None, int, str], optional): Number of characters to indent by. Defaults to 2.
71 | highlight (bool, optional): Enable highlighting. Defaults to True.
72 | default (Callable, optional): Optional callable which will be called for objects that cannot be serialized. Defaults to None.
73 | skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False.
74 | ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False.
75 | check_circular (bool, optional): Check for circular references. Defaults to True.
76 | allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True.
77 | default (Callable, optional): A callable that converts values that can not be encoded
78 | in to something that can be JSON encoded. Defaults to None.
79 | sort_keys (bool, optional): Sort dictionary keys. Defaults to False.
80 |
81 | Returns:
82 | JSON: New JSON object from the given data.
83 | """
84 | json_instance: "JSON" = cls.__new__(cls)
85 | json = dumps(
86 | data,
87 | indent=indent,
88 | skipkeys=skip_keys,
89 | ensure_ascii=ensure_ascii,
90 | check_circular=check_circular,
91 | allow_nan=allow_nan,
92 | default=default,
93 | sort_keys=sort_keys,
94 | )
95 | highlighter = JSONHighlighter() if highlight else NullHighlighter()
96 | json_instance.text = highlighter(json)
97 | json_instance.text.no_wrap = True
98 | json_instance.text.overflow = None
99 | return json_instance
100 |
101 | def __rich__(self) -> Text:
102 | return self.text
103 |
104 |
105 | if __name__ == "__main__":
106 | import argparse
107 | import sys
108 |
109 | parser = argparse.ArgumentParser(description="Pretty print json")
110 | parser.add_argument(
111 | "path",
112 | metavar="PATH",
113 | help="path to file, or - for stdin",
114 | )
115 | parser.add_argument(
116 | "-i",
117 | "--indent",
118 | metavar="SPACES",
119 | type=int,
120 | help="Number of spaces in an indent",
121 | default=2,
122 | )
123 | args = parser.parse_args()
124 |
125 | from pip._vendor.rich.console import Console
126 |
127 | console = Console()
128 | error_console = Console(stderr=True)
129 |
130 | try:
131 | if args.path == "-":
132 | json_data = sys.stdin.read()
133 | else:
134 | json_data = Path(args.path).read_text()
135 | except Exception as error:
136 | error_console.print(f"Unable to read {args.path!r}; {error}")
137 | sys.exit(-1)
138 |
139 | console.print(JSON(json_data, indent=args.indent), soft_wrap=True)
140 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/other.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.formatters.other
3 | ~~~~~~~~~~~~~~~~~~~~~~~~~
4 |
5 | Other formatters: NullFormatter, RawTokenFormatter.
6 |
7 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8 | :license: BSD, see LICENSE for details.
9 | """
10 |
11 | from pip._vendor.pygments.formatter import Formatter
12 | from pip._vendor.pygments.util import get_choice_opt
13 | from pip._vendor.pygments.token import Token
14 | from pip._vendor.pygments.console import colorize
15 |
16 | __all__ = ['NullFormatter', 'RawTokenFormatter', 'TestcaseFormatter']
17 |
18 |
19 | class NullFormatter(Formatter):
20 | """
21 | Output the text unchanged without any formatting.
22 | """
23 | name = 'Text only'
24 | aliases = ['text', 'null']
25 | filenames = ['*.txt']
26 |
27 | def format(self, tokensource, outfile):
28 | enc = self.encoding
29 | for ttype, value in tokensource:
30 | if enc:
31 | outfile.write(value.encode(enc))
32 | else:
33 | outfile.write(value)
34 |
35 |
36 | class RawTokenFormatter(Formatter):
37 | r"""
38 | Format tokens as a raw representation for storing token streams.
39 |
40 | The format is ``tokentype<TAB>repr(tokenstring)\n``. The output can later
41 | be converted to a token stream with the `RawTokenLexer`, described in the
42 | :doc:`lexer list <lexers>`.
43 |
44 | Only two options are accepted:
45 |
46 | `compress`
47 | If set to ``'gz'`` or ``'bz2'``, compress the output with the given
48 | compression algorithm after encoding (default: ``''``).
49 | `error_color`
50 | If set to a color name, highlight error tokens using that color. If
51 | set but with no value, defaults to ``'red'``.
52 |
53 | .. versionadded:: 0.11
54 |
55 | """
56 | name = 'Raw tokens'
57 | aliases = ['raw', 'tokens']
58 | filenames = ['*.raw']
59 |
60 | unicodeoutput = False
61 |
62 | def __init__(self, **options):
63 | Formatter.__init__(self, **options)
64 | # We ignore self.encoding if it is set, since it gets set for lexer
65 | # and formatter if given with -Oencoding on the command line.
66 | # The RawTokenFormatter outputs only ASCII. Override here.
67 | self.encoding = 'ascii' # let pygments.format() do the right thing
68 | self.compress = get_choice_opt(options, 'compress',
69 | ['', 'none', 'gz', 'bz2'], '')
70 | self.error_color = options.get('error_color', None)
71 | if self.error_color is True:
72 | self.error_color = 'red'
73 | if self.error_color is not None:
74 | try:
75 | colorize(self.error_color, '')
76 | except KeyError:
77 | raise ValueError(f"Invalid color {self.error_color!r} specified")
78 |
79 | def format(self, tokensource, outfile):
80 | try:
81 | outfile.write(b'')
82 | except TypeError:
83 | raise TypeError('The raw tokens formatter needs a binary '
84 | 'output file')
85 | if self.compress == 'gz':
86 | import gzip
87 | outfile = gzip.GzipFile('', 'wb', 9, outfile)
88 |
89 | write = outfile.write
90 | flush = outfile.close
91 | elif self.compress == 'bz2':
92 | import bz2
93 | compressor = bz2.BZ2Compressor(9)
94 |
95 | def write(text):
96 | outfile.write(compressor.compress(text))
97 |
98 | def flush():
99 | outfile.write(compressor.flush())
100 | outfile.flush()
101 | else:
102 | write = outfile.write
103 | flush = outfile.flush
104 |
105 | if self.error_color:
106 | for ttype, value in tokensource:
107 | line = b"%r\t%r\n" % (ttype, value)
108 | if ttype is Token.Error:
109 | write(colorize(self.error_color, line))
110 | else:
111 | write(line)
112 | else:
113 | for ttype, value in tokensource:
114 | write(b"%r\t%r\n" % (ttype, value))
115 | flush()
116 |
117 |
118 | TESTCASE_BEFORE = '''\
119 | def testNeedsName(lexer):
120 | fragment = %r
121 | tokens = [
122 | '''
123 | TESTCASE_AFTER = '''\
124 | ]
125 | assert list(lexer.get_tokens(fragment)) == tokens
126 | '''
127 |
128 |
129 | class TestcaseFormatter(Formatter):
130 | """
131 | Format tokens as appropriate for a new testcase.
132 |
133 | .. versionadded:: 2.0
134 | """
135 | name = 'Testcase'
136 | aliases = ['testcase']
137 |
138 | def __init__(self, **options):
139 | Formatter.__init__(self, **options)
140 | if self.encoding is not None and self.encoding != 'utf-8':
141 | raise ValueError("Only None and utf-8 are allowed encodings.")
142 |
143 | def format(self, tokensource, outfile):
144 | indentation = ' ' * 12
145 | rawbuf = []
146 | outbuf = []
147 | for ttype, value in tokensource:
148 | rawbuf.append(value)
149 | outbuf.append(f'{indentation}({ttype}, {value!r}),\n')
150 |
151 | before = TESTCASE_BEFORE % (''.join(rawbuf),)
152 | during = ''.join(outbuf)
153 | after = TESTCASE_AFTER
154 | if self.encoding is None:
155 | outfile.write(before + during + after)
156 | else:
157 | outfile.write(before.encode('utf-8'))
158 | outfile.write(during.encode('utf-8'))
159 | outfile.write(after.encode('utf-8'))
160 | outfile.flush()
161 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py:
--------------------------------------------------------------------------------
```python
1 | # __
2 | # /__) _ _ _ _ _/ _
3 | # / ( (- (/ (/ (- _) / _)
4 | # /
5 |
6 | """
7 | Requests HTTP Library
8 | ~~~~~~~~~~~~~~~~~~~~~
9 |
10 | Requests is an HTTP library, written in Python, for human beings.
11 | Basic GET usage:
12 |
13 | >>> import requests
14 | >>> r = requests.get('https://www.python.org')
15 | >>> r.status_code
16 | 200
17 | >>> b'Python is a programming language' in r.content
18 | True
19 |
20 | ... or POST:
21 |
22 | >>> payload = dict(key1='value1', key2='value2')
23 | >>> r = requests.post('https://httpbin.org/post', data=payload)
24 | >>> print(r.text)
25 | {
26 | ...
27 | "form": {
28 | "key1": "value1",
29 | "key2": "value2"
30 | },
31 | ...
32 | }
33 |
34 | The other HTTP methods are supported - see `requests.api`. Full documentation
35 | is at <https://requests.readthedocs.io>.
36 |
37 | :copyright: (c) 2017 by Kenneth Reitz.
38 | :license: Apache 2.0, see LICENSE for more details.
39 | """
40 |
41 | import warnings
42 |
43 | from pip._vendor import urllib3
44 |
45 | from .exceptions import RequestsDependencyWarning
46 |
47 | charset_normalizer_version = None
48 | chardet_version = None
49 |
50 |
51 | def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version):
52 | urllib3_version = urllib3_version.split(".")
53 | assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git.
54 |
55 | # Sometimes, urllib3 only reports its version as 16.1.
56 | if len(urllib3_version) == 2:
57 | urllib3_version.append("0")
58 |
59 | # Check urllib3 for compatibility.
60 | major, minor, patch = urllib3_version # noqa: F811
61 | major, minor, patch = int(major), int(minor), int(patch)
62 | # urllib3 >= 1.21.1
63 | assert major >= 1
64 | if major == 1:
65 | assert minor >= 21
66 |
67 | # Check charset_normalizer for compatibility.
68 | if chardet_version:
69 | major, minor, patch = chardet_version.split(".")[:3]
70 | major, minor, patch = int(major), int(minor), int(patch)
71 | # chardet_version >= 3.0.2, < 6.0.0
72 | assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0)
73 | elif charset_normalizer_version:
74 | major, minor, patch = charset_normalizer_version.split(".")[:3]
75 | major, minor, patch = int(major), int(minor), int(patch)
76 | # charset_normalizer >= 2.0.0 < 4.0.0
77 | assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0)
78 | else:
79 | # pip does not need or use character detection
80 | pass
81 |
82 |
83 | def _check_cryptography(cryptography_version):
84 | # cryptography < 1.3.4
85 | try:
86 | cryptography_version = list(map(int, cryptography_version.split(".")))
87 | except ValueError:
88 | return
89 |
90 | if cryptography_version < [1, 3, 4]:
91 | warning = "Old version of cryptography ({}) may cause slowdown.".format(
92 | cryptography_version
93 | )
94 | warnings.warn(warning, RequestsDependencyWarning)
95 |
96 |
97 | # Check imported dependencies for compatibility.
98 | try:
99 | check_compatibility(
100 | urllib3.__version__, chardet_version, charset_normalizer_version
101 | )
102 | except (AssertionError, ValueError):
103 | warnings.warn(
104 | "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported "
105 | "version!".format(
106 | urllib3.__version__, chardet_version, charset_normalizer_version
107 | ),
108 | RequestsDependencyWarning,
109 | )
110 |
111 | # Attempt to enable urllib3's fallback for SNI support
112 | # if the standard library doesn't support SNI or the
113 | # 'ssl' library isn't available.
114 | try:
115 | # Note: This logic prevents upgrading cryptography on Windows, if imported
116 | # as part of pip.
117 | from pip._internal.utils.compat import WINDOWS
118 | if not WINDOWS:
119 | raise ImportError("pip internals: don't import cryptography on Windows")
120 | try:
121 | import ssl
122 | except ImportError:
123 | ssl = None
124 |
125 | if not getattr(ssl, "HAS_SNI", False):
126 | from pip._vendor.urllib3.contrib import pyopenssl
127 |
128 | pyopenssl.inject_into_urllib3()
129 |
130 | # Check cryptography version
131 | from cryptography import __version__ as cryptography_version
132 |
133 | _check_cryptography(cryptography_version)
134 | except ImportError:
135 | pass
136 |
137 | # urllib3's DependencyWarnings should be silenced.
138 | from pip._vendor.urllib3.exceptions import DependencyWarning
139 |
140 | warnings.simplefilter("ignore", DependencyWarning)
141 |
142 | # Set default logging handler to avoid "No handler found" warnings.
143 | import logging
144 | from logging import NullHandler
145 |
146 | from . import packages, utils
147 | from .__version__ import (
148 | __author__,
149 | __author_email__,
150 | __build__,
151 | __cake__,
152 | __copyright__,
153 | __description__,
154 | __license__,
155 | __title__,
156 | __url__,
157 | __version__,
158 | )
159 | from .api import delete, get, head, options, patch, post, put, request
160 | from .exceptions import (
161 | ConnectionError,
162 | ConnectTimeout,
163 | FileModeWarning,
164 | HTTPError,
165 | JSONDecodeError,
166 | ReadTimeout,
167 | RequestException,
168 | Timeout,
169 | TooManyRedirects,
170 | URLRequired,
171 | )
172 | from .models import PreparedRequest, Request, Response
173 | from .sessions import Session, session
174 | from .status_codes import codes
175 |
176 | logging.getLogger(__name__).addHandler(NullHandler())
177 |
178 | # FileModeWarnings go off per the default.
179 | warnings.simplefilter("default", FileModeWarning, append=True)
180 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/bs4/tests/test_navigablestring.py:
--------------------------------------------------------------------------------
```python
1 | import pytest
2 |
3 | from bs4.element import (
4 | CData,
5 | Comment,
6 | Declaration,
7 | Doctype,
8 | NavigableString,
9 | RubyParenthesisString,
10 | RubyTextString,
11 | Script,
12 | Stylesheet,
13 | TemplateString,
14 | )
15 |
16 | from . import SoupTest
17 |
18 | class TestNavigableString(SoupTest):
19 |
20 | def test_text_acquisition_methods(self):
21 | # These methods are intended for use against Tag, but they
22 | # work on NavigableString as well,
23 |
24 | s = NavigableString("fee ")
25 | cdata = CData("fie ")
26 | comment = Comment("foe ")
27 |
28 | assert "fee " == s.get_text()
29 | assert "fee" == s.get_text(strip=True)
30 | assert ["fee "] == list(s.strings)
31 | assert ["fee"] == list(s.stripped_strings)
32 | assert ["fee "] == list(s._all_strings())
33 |
34 | assert "fie " == cdata.get_text()
35 | assert "fie" == cdata.get_text(strip=True)
36 | assert ["fie "] == list(cdata.strings)
37 | assert ["fie"] == list(cdata.stripped_strings)
38 | assert ["fie "] == list(cdata._all_strings())
39 |
40 | # Since a Comment isn't normally considered 'text',
41 | # these methods generally do nothing.
42 | assert "" == comment.get_text()
43 | assert [] == list(comment.strings)
44 | assert [] == list(comment.stripped_strings)
45 | assert [] == list(comment._all_strings())
46 |
47 | # Unless you specifically say that comments are okay.
48 | assert "foe" == comment.get_text(strip=True, types=Comment)
49 | assert "foe " == comment.get_text(types=(Comment, NavigableString))
50 |
51 | def test_string_has_immutable_name_property(self):
52 | # string.name is defined as None and can't be modified
53 | string = self.soup("s").string
54 | assert None == string.name
55 | with pytest.raises(AttributeError):
56 | string.name = 'foo'
57 |
58 | class TestNavigableStringSubclasses(SoupTest):
59 |
60 | def test_cdata(self):
61 | # None of the current builders turn CDATA sections into CData
62 | # objects, but you can create them manually.
63 | soup = self.soup("")
64 | cdata = CData("foo")
65 | soup.insert(1, cdata)
66 | assert str(soup) == "<![CDATA[foo]]>"
67 | assert soup.find(string="foo") == "foo"
68 | assert soup.contents[0] == "foo"
69 |
70 | def test_cdata_is_never_formatted(self):
71 | """Text inside a CData object is passed into the formatter.
72 |
73 | But the return value is ignored.
74 | """
75 |
76 | self.count = 0
77 | def increment(*args):
78 | self.count += 1
79 | return "BITTER FAILURE"
80 |
81 | soup = self.soup("")
82 | cdata = CData("<><><>")
83 | soup.insert(1, cdata)
84 | assert b"<![CDATA[<><><>]]>" == soup.encode(formatter=increment)
85 | assert 1 == self.count
86 |
87 | def test_doctype_ends_in_newline(self):
88 | # Unlike other NavigableString subclasses, a DOCTYPE always ends
89 | # in a newline.
90 | doctype = Doctype("foo")
91 | soup = self.soup("")
92 | soup.insert(1, doctype)
93 | assert soup.encode() == b"<!DOCTYPE foo>\n"
94 |
95 | def test_declaration(self):
96 | d = Declaration("foo")
97 | assert "<?foo?>" == d.output_ready()
98 |
99 | def test_default_string_containers(self):
100 | # In some cases, we use different NavigableString subclasses for
101 | # the same text in different tags.
102 | soup = self.soup(
103 | "<div>text</div><script>text</script><style>text</style>"
104 | )
105 | assert [NavigableString, Script, Stylesheet] == [
106 | x.__class__ for x in soup.find_all(string=True)
107 | ]
108 |
109 | # The TemplateString is a little unusual because it's generally found
110 | # _inside_ children of a <template> element, not a direct child of the
111 | # <template> element.
112 | soup = self.soup(
113 | "<template>Some text<p>In a tag</p></template>Some text outside"
114 | )
115 | assert all(
116 | isinstance(x, TemplateString)
117 | for x in soup.template._all_strings(types=None)
118 | )
119 |
120 | # Once the <template> tag closed, we went back to using
121 | # NavigableString.
122 | outside = soup.template.next_sibling
123 | assert isinstance(outside, NavigableString)
124 | assert not isinstance(outside, TemplateString)
125 |
126 | # The TemplateString is also unusual because it can contain
127 | # NavigableString subclasses of _other_ types, such as
128 | # Comment.
129 | markup = b"<template>Some text<p>In a tag</p><!--with a comment--></template>"
130 | soup = self.soup(markup)
131 | assert markup == soup.template.encode("utf8")
132 |
133 | def test_ruby_strings(self):
134 | markup = "<ruby>漢 <rp>(</rp><rt>kan</rt><rp>)</rp> 字 <rp>(</rp><rt>ji</rt><rp>)</rp></ruby>"
135 | soup = self.soup(markup)
136 | assert isinstance(soup.rp.string, RubyParenthesisString)
137 | assert isinstance(soup.rt.string, RubyTextString)
138 |
139 | # Just as a demo, here's what this means for get_text usage.
140 | assert "漢字" == soup.get_text(strip=True)
141 | assert "漢(kan)字(ji)" == soup.get_text(
142 | strip=True,
143 | types=(NavigableString, RubyTextString, RubyParenthesisString)
144 | )
145 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/jinja2/exceptions.py:
--------------------------------------------------------------------------------
```python
1 | import typing as t
2 |
3 | if t.TYPE_CHECKING:
4 | from .runtime import Undefined
5 |
6 |
7 | class TemplateError(Exception):
8 | """Baseclass for all template errors."""
9 |
10 | def __init__(self, message: t.Optional[str] = None) -> None:
11 | super().__init__(message)
12 |
13 | @property
14 | def message(self) -> t.Optional[str]:
15 | return self.args[0] if self.args else None
16 |
17 |
18 | class TemplateNotFound(IOError, LookupError, TemplateError):
19 | """Raised if a template does not exist.
20 |
21 | .. versionchanged:: 2.11
22 | If the given name is :class:`Undefined` and no message was
23 | provided, an :exc:`UndefinedError` is raised.
24 | """
25 |
26 | # Silence the Python warning about message being deprecated since
27 | # it's not valid here.
28 | message: t.Optional[str] = None
29 |
30 | def __init__(
31 | self,
32 | name: t.Optional[t.Union[str, "Undefined"]],
33 | message: t.Optional[str] = None,
34 | ) -> None:
35 | IOError.__init__(self, name)
36 |
37 | if message is None:
38 | from .runtime import Undefined
39 |
40 | if isinstance(name, Undefined):
41 | name._fail_with_undefined_error()
42 |
43 | message = name
44 |
45 | self.message = message
46 | self.name = name
47 | self.templates = [name]
48 |
49 | def __str__(self) -> str:
50 | return str(self.message)
51 |
52 |
53 | class TemplatesNotFound(TemplateNotFound):
54 | """Like :class:`TemplateNotFound` but raised if multiple templates
55 | are selected. This is a subclass of :class:`TemplateNotFound`
56 | exception, so just catching the base exception will catch both.
57 |
58 | .. versionchanged:: 2.11
59 | If a name in the list of names is :class:`Undefined`, a message
60 | about it being undefined is shown rather than the empty string.
61 |
62 | .. versionadded:: 2.2
63 | """
64 |
65 | def __init__(
66 | self,
67 | names: t.Sequence[t.Union[str, "Undefined"]] = (),
68 | message: t.Optional[str] = None,
69 | ) -> None:
70 | if message is None:
71 | from .runtime import Undefined
72 |
73 | parts = []
74 |
75 | for name in names:
76 | if isinstance(name, Undefined):
77 | parts.append(name._undefined_message)
78 | else:
79 | parts.append(name)
80 |
81 | parts_str = ", ".join(map(str, parts))
82 | message = f"none of the templates given were found: {parts_str}"
83 |
84 | super().__init__(names[-1] if names else None, message)
85 | self.templates = list(names)
86 |
87 |
88 | class TemplateSyntaxError(TemplateError):
89 | """Raised to tell the user that there is a problem with the template."""
90 |
91 | def __init__(
92 | self,
93 | message: str,
94 | lineno: int,
95 | name: t.Optional[str] = None,
96 | filename: t.Optional[str] = None,
97 | ) -> None:
98 | super().__init__(message)
99 | self.lineno = lineno
100 | self.name = name
101 | self.filename = filename
102 | self.source: t.Optional[str] = None
103 |
104 | # this is set to True if the debug.translate_syntax_error
105 | # function translated the syntax error into a new traceback
106 | self.translated = False
107 |
108 | def __str__(self) -> str:
109 | # for translated errors we only return the message
110 | if self.translated:
111 | return t.cast(str, self.message)
112 |
113 | # otherwise attach some stuff
114 | location = f"line {self.lineno}"
115 | name = self.filename or self.name
116 | if name:
117 | location = f'File "{name}", {location}'
118 | lines = [t.cast(str, self.message), " " + location]
119 |
120 | # if the source is set, add the line to the output
121 | if self.source is not None:
122 | try:
123 | line = self.source.splitlines()[self.lineno - 1]
124 | except IndexError:
125 | pass
126 | else:
127 | lines.append(" " + line.strip())
128 |
129 | return "\n".join(lines)
130 |
131 | def __reduce__(self): # type: ignore
132 | # https://bugs.python.org/issue1692335 Exceptions that take
133 | # multiple required arguments have problems with pickling.
134 | # Without this, raises TypeError: __init__() missing 1 required
135 | # positional argument: 'lineno'
136 | return self.__class__, (self.message, self.lineno, self.name, self.filename)
137 |
138 |
139 | class TemplateAssertionError(TemplateSyntaxError):
140 | """Like a template syntax error, but covers cases where something in the
141 | template caused an error at compile time that wasn't necessarily caused
142 | by a syntax error. However it's a direct subclass of
143 | :exc:`TemplateSyntaxError` and has the same attributes.
144 | """
145 |
146 |
147 | class TemplateRuntimeError(TemplateError):
148 | """A generic runtime error in the template engine. Under some situations
149 | Jinja may raise this exception.
150 | """
151 |
152 |
153 | class UndefinedError(TemplateRuntimeError):
154 | """Raised if a template tries to operate on :class:`Undefined`."""
155 |
156 |
157 | class SecurityError(TemplateRuntimeError):
158 | """Raised if a template tries to do something insecure if the
159 | sandbox is enabled.
160 | """
161 |
162 |
163 | class FilterArgumentError(TemplateRuntimeError):
164 | """This error is raised if a filter was called with inappropriate
165 | arguments
166 | """
167 |
```