This is page 9 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
--------------------------------------------------------------------------------
/test_files/text2.txt:
--------------------------------------------------------------------------------
```
1 | Aliquip nostrud fugiat nostrud laborum commodo sunt in eu ea veniam. Ipsum aliqua minim nulla sunt fugiat id. Veniam id do elit eu incididunt ullamco. Elit sint adipisicing proident labore consequat. Laboris adipisicing do ipsum id tempor non eiusmod adipisicing occaecat deserunt irure nostrud non. Ad excepteur do in aliqua eiusmod laboris exercitation mollit exercitation. Excepteur consequat reprehenderit cupidatat consequat sit culpa pariatur minim anim et dolor.
2 |
3 | Deserunt culpa dolore mollit fugiat velit aute non sint. Nulla amet ea deserunt consequat et eiusmod magna irure labore. Qui amet fugiat labore et nisi sit fugiat dolor.
4 |
5 | Pariatur velit ea laborum adipisicing ad labore enim deserunt id fugiat laboris amet fugiat. Mollit ex quis cupidatat et ut aute laborum anim esse voluptate. Proident voluptate minim aute qui eiusmod nostrud do elit cupidatat consequat voluptate fugiat adipisicing veniam. Nulla qui non dolore incididunt commodo. Incididunt sit mollit laborum voluptate. Enim aute incididunt adipisicing magna. Duis nisi culpa dolore sunt in dolor consectetur.
6 |
7 | Sit pariatur reprehenderit aliqua esse pariatur ea non ut sunt minim aliquip. Ex magna ex ut duis in labore enim. Minim magna exercitation ex laborum ea esse eu sit ipsum. Deserunt Lorem reprehenderit occaecat pariatur dolore aute aliqua sint consequat proident adipisicing commodo.
8 |
9 | Eu mollit reprehenderit cillum cupidatat excepteur magna. Labore laboris incididunt amet amet sint enim enim proident quis proident consectetur aute. Anim ea pariatur tempor fugiat proident.
10 |
11 | Eu eu ad duis cupidatat. Sunt Lorem commodo deserunt enim exercitation anim nostrud aute nisi ad reprehenderit excepteur. Mollit mollit culpa anim magna in deserunt proident voluptate consectetur officia ullamco ex dolore mollit. Nisi ea magna officia tempor ad fugiat do ipsum fugiat amet sunt ea. Enim amet dolor aliquip incididunt et in. Excepteur commodo quis non mollit non reprehenderit incididunt nostrud. Tempor nostrud amet proident in ad ut mollit occaecat quis officia ullamco deserunt dolor ut.
12 |
13 | Mollit est reprehenderit excepteur consectetur. Ex voluptate qui ullamco ea. Do magna ea laborum id aliquip labore et nulla magna aute amet qui Lorem tempor. Officia sunt qui dolore cillum do ea amet do ad ullamco sit labore irure. Esse minim cupidatat do commodo est culpa voluptate. Deserunt minim aliqua amet cillum cupidatat est. Veniam esse labore labore consequat voluptate ipsum Lorem cillum deserunt adipisicing do quis magna.
14 |
15 | Tempor anim labore cupidatat laboris qui sint in eiusmod velit pariatur tempor duis pariatur magna. Non culpa minim laborum pariatur pariatur et sunt velit dolore consectetur deserunt sit sint. Duis enim anim laborum proident ut amet.
16 |
17 | Id mollit et eiusmod ut veniam culpa commodo mollit proident voluptate consequat magna labore. Ea magna laboris aute incididunt cillum magna. Dolor incididunt pariatur excepteur ullamco proident consectetur sunt aliqua.
18 |
19 | Culpa pariatur quis occaecat Lorem nisi deserunt velit commodo aliqua ullamco laborum do. Adipisicing quis duis excepteur officia ea proident aliquip. Do in aliqua do deserunt. Ex aliquip laboris non do cillum irure excepteur est commodo ea. Laboris sunt laborum exercitation et fugiat laborum in mollit est incididunt qui duis quis consectetur. Enim sunt consectetur est sit ullamco aliquip ullamco sint laborum ad nulla.
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py:
--------------------------------------------------------------------------------
```python
1 | from math import sqrt
2 | from functools import lru_cache
3 | from typing import Sequence, Tuple, TYPE_CHECKING
4 |
5 | from .color_triplet import ColorTriplet
6 |
7 | if TYPE_CHECKING:
8 | from pip._vendor.rich.table import Table
9 |
10 |
11 | class Palette:
12 | """A palette of available colors."""
13 |
14 | def __init__(self, colors: Sequence[Tuple[int, int, int]]):
15 | self._colors = colors
16 |
17 | def __getitem__(self, number: int) -> ColorTriplet:
18 | return ColorTriplet(*self._colors[number])
19 |
20 | def __rich__(self) -> "Table":
21 | from pip._vendor.rich.color import Color
22 | from pip._vendor.rich.style import Style
23 | from pip._vendor.rich.text import Text
24 | from pip._vendor.rich.table import Table
25 |
26 | table = Table(
27 | "index",
28 | "RGB",
29 | "Color",
30 | title="Palette",
31 | caption=f"{len(self._colors)} colors",
32 | highlight=True,
33 | caption_justify="right",
34 | )
35 | for index, color in enumerate(self._colors):
36 | table.add_row(
37 | str(index),
38 | repr(color),
39 | Text(" " * 16, style=Style(bgcolor=Color.from_rgb(*color))),
40 | )
41 | return table
42 |
43 | # This is somewhat inefficient and needs caching
44 | @lru_cache(maxsize=1024)
45 | def match(self, color: Tuple[int, int, int]) -> int:
46 | """Find a color from a palette that most closely matches a given color.
47 |
48 | Args:
49 | color (Tuple[int, int, int]): RGB components in range 0 > 255.
50 |
51 | Returns:
52 | int: Index of closes matching color.
53 | """
54 | red1, green1, blue1 = color
55 | _sqrt = sqrt
56 | get_color = self._colors.__getitem__
57 |
58 | def get_color_distance(index: int) -> float:
59 | """Get the distance to a color."""
60 | red2, green2, blue2 = get_color(index)
61 | red_mean = (red1 + red2) // 2
62 | red = red1 - red2
63 | green = green1 - green2
64 | blue = blue1 - blue2
65 | return _sqrt(
66 | (((512 + red_mean) * red * red) >> 8)
67 | + 4 * green * green
68 | + (((767 - red_mean) * blue * blue) >> 8)
69 | )
70 |
71 | min_index = min(range(len(self._colors)), key=get_color_distance)
72 | return min_index
73 |
74 |
75 | if __name__ == "__main__": # pragma: no cover
76 | import colorsys
77 | from typing import Iterable
78 | from pip._vendor.rich.color import Color
79 | from pip._vendor.rich.console import Console, ConsoleOptions
80 | from pip._vendor.rich.segment import Segment
81 | from pip._vendor.rich.style import Style
82 |
83 | class ColorBox:
84 | def __rich_console__(
85 | self, console: Console, options: ConsoleOptions
86 | ) -> Iterable[Segment]:
87 | height = console.size.height - 3
88 | for y in range(0, height):
89 | for x in range(options.max_width):
90 | h = x / options.max_width
91 | l = y / (height + 1)
92 | r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0)
93 | r2, g2, b2 = colorsys.hls_to_rgb(h, l + (1 / height / 2), 1.0)
94 | bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255)
95 | color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255)
96 | yield Segment("▄", Style(color=color, bgcolor=bgcolor))
97 | yield Segment.line()
98 |
99 | console = Console()
100 | console.print(ColorBox())
101 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/idna/codec.py:
--------------------------------------------------------------------------------
```python
1 | import codecs
2 | import re
3 | from typing import Any, Optional, Tuple
4 |
5 | from .core import IDNAError, alabel, decode, encode, ulabel
6 |
7 | _unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]")
8 |
9 |
10 | class Codec(codecs.Codec):
11 | def encode(self, data: str, errors: str = "strict") -> Tuple[bytes, int]:
12 | if errors != "strict":
13 | raise IDNAError('Unsupported error handling "{}"'.format(errors))
14 |
15 | if not data:
16 | return b"", 0
17 |
18 | return encode(data), len(data)
19 |
20 | def decode(self, data: bytes, errors: str = "strict") -> Tuple[str, int]:
21 | if errors != "strict":
22 | raise IDNAError('Unsupported error handling "{}"'.format(errors))
23 |
24 | if not data:
25 | return "", 0
26 |
27 | return decode(data), len(data)
28 |
29 |
30 | class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
31 | def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]:
32 | if errors != "strict":
33 | raise IDNAError('Unsupported error handling "{}"'.format(errors))
34 |
35 | if not data:
36 | return b"", 0
37 |
38 | labels = _unicode_dots_re.split(data)
39 | trailing_dot = b""
40 | if labels:
41 | if not labels[-1]:
42 | trailing_dot = b"."
43 | del labels[-1]
44 | elif not final:
45 | # Keep potentially unfinished label until the next call
46 | del labels[-1]
47 | if labels:
48 | trailing_dot = b"."
49 |
50 | result = []
51 | size = 0
52 | for label in labels:
53 | result.append(alabel(label))
54 | if size:
55 | size += 1
56 | size += len(label)
57 |
58 | # Join with U+002E
59 | result_bytes = b".".join(result) + trailing_dot
60 | size += len(trailing_dot)
61 | return result_bytes, size
62 |
63 |
64 | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
65 | def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]:
66 | if errors != "strict":
67 | raise IDNAError('Unsupported error handling "{}"'.format(errors))
68 |
69 | if not data:
70 | return ("", 0)
71 |
72 | if not isinstance(data, str):
73 | data = str(data, "ascii")
74 |
75 | labels = _unicode_dots_re.split(data)
76 | trailing_dot = ""
77 | if labels:
78 | if not labels[-1]:
79 | trailing_dot = "."
80 | del labels[-1]
81 | elif not final:
82 | # Keep potentially unfinished label until the next call
83 | del labels[-1]
84 | if labels:
85 | trailing_dot = "."
86 |
87 | result = []
88 | size = 0
89 | for label in labels:
90 | result.append(ulabel(label))
91 | if size:
92 | size += 1
93 | size += len(label)
94 |
95 | result_str = ".".join(result) + trailing_dot
96 | size += len(trailing_dot)
97 | return (result_str, size)
98 |
99 |
100 | class StreamWriter(Codec, codecs.StreamWriter):
101 | pass
102 |
103 |
104 | class StreamReader(Codec, codecs.StreamReader):
105 | pass
106 |
107 |
108 | def search_function(name: str) -> Optional[codecs.CodecInfo]:
109 | if name != "idna2008":
110 | return None
111 | return codecs.CodecInfo(
112 | name=name,
113 | encode=Codec().encode,
114 | decode=Codec().decode,
115 | incrementalencoder=IncrementalEncoder,
116 | incrementaldecoder=IncrementalDecoder,
117 | streamwriter=StreamWriter,
118 | streamreader=StreamReader,
119 | )
120 |
121 |
122 | codecs.register(search_function)
123 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py:
--------------------------------------------------------------------------------
```python
1 | from .core import encode, decode, alabel, ulabel, IDNAError
2 | import codecs
3 | import re
4 | from typing import Any, Tuple, Optional
5 |
6 | _unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
7 |
8 | class Codec(codecs.Codec):
9 |
10 | def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]:
11 | if errors != 'strict':
12 | raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
13 |
14 | if not data:
15 | return b"", 0
16 |
17 | return encode(data), len(data)
18 |
19 | def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]:
20 | if errors != 'strict':
21 | raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
22 |
23 | if not data:
24 | return '', 0
25 |
26 | return decode(data), len(data)
27 |
28 | class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
29 | def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]:
30 | if errors != 'strict':
31 | raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
32 |
33 | if not data:
34 | return b'', 0
35 |
36 | labels = _unicode_dots_re.split(data)
37 | trailing_dot = b''
38 | if labels:
39 | if not labels[-1]:
40 | trailing_dot = b'.'
41 | del labels[-1]
42 | elif not final:
43 | # Keep potentially unfinished label until the next call
44 | del labels[-1]
45 | if labels:
46 | trailing_dot = b'.'
47 |
48 | result = []
49 | size = 0
50 | for label in labels:
51 | result.append(alabel(label))
52 | if size:
53 | size += 1
54 | size += len(label)
55 |
56 | # Join with U+002E
57 | result_bytes = b'.'.join(result) + trailing_dot
58 | size += len(trailing_dot)
59 | return result_bytes, size
60 |
61 | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
62 | def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]:
63 | if errors != 'strict':
64 | raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
65 |
66 | if not data:
67 | return ('', 0)
68 |
69 | if not isinstance(data, str):
70 | data = str(data, 'ascii')
71 |
72 | labels = _unicode_dots_re.split(data)
73 | trailing_dot = ''
74 | if labels:
75 | if not labels[-1]:
76 | trailing_dot = '.'
77 | del labels[-1]
78 | elif not final:
79 | # Keep potentially unfinished label until the next call
80 | del labels[-1]
81 | if labels:
82 | trailing_dot = '.'
83 |
84 | result = []
85 | size = 0
86 | for label in labels:
87 | result.append(ulabel(label))
88 | if size:
89 | size += 1
90 | size += len(label)
91 |
92 | result_str = '.'.join(result) + trailing_dot
93 | size += len(trailing_dot)
94 | return (result_str, size)
95 |
96 |
97 | class StreamWriter(Codec, codecs.StreamWriter):
98 | pass
99 |
100 |
101 | class StreamReader(Codec, codecs.StreamReader):
102 | pass
103 |
104 |
105 | def search_function(name: str) -> Optional[codecs.CodecInfo]:
106 | if name != 'idna2008':
107 | return None
108 | return codecs.CodecInfo(
109 | name=name,
110 | encode=Codec().encode,
111 | decode=Codec().decode,
112 | incrementalencoder=IncrementalEncoder,
113 | incrementaldecoder=IncrementalDecoder,
114 | streamwriter=StreamWriter,
115 | streamreader=StreamReader,
116 | )
117 |
118 | codecs.register(search_function)
119 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | import os
3 | import re
4 | import site
5 | import sys
6 | from typing import List, Optional
7 |
8 | logger = logging.getLogger(__name__)
9 | _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile(
10 | r"include-system-site-packages\s*=\s*(?P<value>true|false)"
11 | )
12 |
13 |
14 | def _running_under_venv() -> bool:
15 | """Checks if sys.base_prefix and sys.prefix match.
16 |
17 | This handles PEP 405 compliant virtual environments.
18 | """
19 | return sys.prefix != getattr(sys, "base_prefix", sys.prefix)
20 |
21 |
22 | def _running_under_legacy_virtualenv() -> bool:
23 | """Checks if sys.real_prefix is set.
24 |
25 | This handles virtual environments created with pypa's virtualenv.
26 | """
27 | # pypa/virtualenv case
28 | return hasattr(sys, "real_prefix")
29 |
30 |
31 | def running_under_virtualenv() -> bool:
32 | """True if we're running inside a virtual environment, False otherwise."""
33 | return _running_under_venv() or _running_under_legacy_virtualenv()
34 |
35 |
36 | def _get_pyvenv_cfg_lines() -> Optional[List[str]]:
37 | """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines
38 |
39 | Returns None, if it could not read/access the file.
40 | """
41 | pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg")
42 | try:
43 | # Although PEP 405 does not specify, the built-in venv module always
44 | # writes with UTF-8. (pypa/pip#8717)
45 | with open(pyvenv_cfg_file, encoding="utf-8") as f:
46 | return f.read().splitlines() # avoids trailing newlines
47 | except OSError:
48 | return None
49 |
50 |
51 | def _no_global_under_venv() -> bool:
52 | """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion
53 |
54 | PEP 405 specifies that when system site-packages are not supposed to be
55 | visible from a virtual environment, `pyvenv.cfg` must contain the following
56 | line:
57 |
58 | include-system-site-packages = false
59 |
60 | Additionally, log a warning if accessing the file fails.
61 | """
62 | cfg_lines = _get_pyvenv_cfg_lines()
63 | if cfg_lines is None:
64 | # We're not in a "sane" venv, so assume there is no system
65 | # site-packages access (since that's PEP 405's default state).
66 | logger.warning(
67 | "Could not access 'pyvenv.cfg' despite a virtual environment "
68 | "being active. Assuming global site-packages is not accessible "
69 | "in this environment."
70 | )
71 | return True
72 |
73 | for line in cfg_lines:
74 | match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line)
75 | if match is not None and match.group("value") == "false":
76 | return True
77 | return False
78 |
79 |
80 | def _no_global_under_legacy_virtualenv() -> bool:
81 | """Check if "no-global-site-packages.txt" exists beside site.py
82 |
83 | This mirrors logic in pypa/virtualenv for determining whether system
84 | site-packages are visible in the virtual environment.
85 | """
86 | site_mod_dir = os.path.dirname(os.path.abspath(site.__file__))
87 | no_global_site_packages_file = os.path.join(
88 | site_mod_dir,
89 | "no-global-site-packages.txt",
90 | )
91 | return os.path.exists(no_global_site_packages_file)
92 |
93 |
94 | def virtualenv_no_global() -> bool:
95 | """Returns a boolean, whether running in venv with no system site-packages."""
96 | # PEP 405 compliance needs to be checked first since virtualenv >=20 would
97 | # return True for both checks, but is only able to use the PEP 405 config.
98 | if _running_under_venv():
99 | return _no_global_under_venv()
100 |
101 | if _running_under_legacy_virtualenv():
102 | return _no_global_under_legacy_virtualenv()
103 |
104 | return False
105 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/HTMLtree.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: specific APIs to process HTML tree, especially serialization
3 | * Description: this module implements a few function needed to process
4 | * tree in an HTML specific way.
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Daniel Veillard
9 | */
10 |
11 | #ifndef __HTML_TREE_H__
12 | #define __HTML_TREE_H__
13 |
14 | #include <stdio.h>
15 | #include <libxml/xmlversion.h>
16 | #include <libxml/tree.h>
17 | #include <libxml/HTMLparser.h>
18 |
19 | #ifdef LIBXML_HTML_ENABLED
20 |
21 | #ifdef __cplusplus
22 | extern "C" {
23 | #endif
24 |
25 |
26 | /**
27 | * HTML_TEXT_NODE:
28 | *
29 | * Macro. A text node in a HTML document is really implemented
30 | * the same way as a text node in an XML document.
31 | */
32 | #define HTML_TEXT_NODE XML_TEXT_NODE
33 | /**
34 | * HTML_ENTITY_REF_NODE:
35 | *
36 | * Macro. An entity reference in a HTML document is really implemented
37 | * the same way as an entity reference in an XML document.
38 | */
39 | #define HTML_ENTITY_REF_NODE XML_ENTITY_REF_NODE
40 | /**
41 | * HTML_COMMENT_NODE:
42 | *
43 | * Macro. A comment in a HTML document is really implemented
44 | * the same way as a comment in an XML document.
45 | */
46 | #define HTML_COMMENT_NODE XML_COMMENT_NODE
47 | /**
48 | * HTML_PRESERVE_NODE:
49 | *
50 | * Macro. A preserved node in a HTML document is really implemented
51 | * the same way as a CDATA section in an XML document.
52 | */
53 | #define HTML_PRESERVE_NODE XML_CDATA_SECTION_NODE
54 | /**
55 | * HTML_PI_NODE:
56 | *
57 | * Macro. A processing instruction in a HTML document is really implemented
58 | * the same way as a processing instruction in an XML document.
59 | */
60 | #define HTML_PI_NODE XML_PI_NODE
61 |
62 | XMLPUBFUN htmlDocPtr
63 | htmlNewDoc (const xmlChar *URI,
64 | const xmlChar *ExternalID);
65 | XMLPUBFUN htmlDocPtr
66 | htmlNewDocNoDtD (const xmlChar *URI,
67 | const xmlChar *ExternalID);
68 | XMLPUBFUN const xmlChar *
69 | htmlGetMetaEncoding (htmlDocPtr doc);
70 | XMLPUBFUN int
71 | htmlSetMetaEncoding (htmlDocPtr doc,
72 | const xmlChar *encoding);
73 | #ifdef LIBXML_OUTPUT_ENABLED
74 | XMLPUBFUN void
75 | htmlDocDumpMemory (xmlDocPtr cur,
76 | xmlChar **mem,
77 | int *size);
78 | XMLPUBFUN void
79 | htmlDocDumpMemoryFormat (xmlDocPtr cur,
80 | xmlChar **mem,
81 | int *size,
82 | int format);
83 | XMLPUBFUN int
84 | htmlDocDump (FILE *f,
85 | xmlDocPtr cur);
86 | XMLPUBFUN int
87 | htmlSaveFile (const char *filename,
88 | xmlDocPtr cur);
89 | XMLPUBFUN int
90 | htmlNodeDump (xmlBufferPtr buf,
91 | xmlDocPtr doc,
92 | xmlNodePtr cur);
93 | XMLPUBFUN void
94 | htmlNodeDumpFile (FILE *out,
95 | xmlDocPtr doc,
96 | xmlNodePtr cur);
97 | XMLPUBFUN int
98 | htmlNodeDumpFileFormat (FILE *out,
99 | xmlDocPtr doc,
100 | xmlNodePtr cur,
101 | const char *encoding,
102 | int format);
103 | XMLPUBFUN int
104 | htmlSaveFileEnc (const char *filename,
105 | xmlDocPtr cur,
106 | const char *encoding);
107 | XMLPUBFUN int
108 | htmlSaveFileFormat (const char *filename,
109 | xmlDocPtr cur,
110 | const char *encoding,
111 | int format);
112 |
113 | XMLPUBFUN void
114 | htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
115 | xmlDocPtr doc,
116 | xmlNodePtr cur,
117 | const char *encoding,
118 | int format);
119 | XMLPUBFUN void
120 | htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
121 | xmlDocPtr cur,
122 | const char *encoding);
123 | XMLPUBFUN void
124 | htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
125 | xmlDocPtr cur,
126 | const char *encoding,
127 | int format);
128 | XMLPUBFUN void
129 | htmlNodeDumpOutput (xmlOutputBufferPtr buf,
130 | xmlDocPtr doc,
131 | xmlNodePtr cur,
132 | const char *encoding);
133 |
134 | #endif /* LIBXML_OUTPUT_ENABLED */
135 |
136 | XMLPUBFUN int
137 | htmlIsBooleanAttr (const xmlChar *name);
138 |
139 |
140 | #ifdef __cplusplus
141 | }
142 | #endif
143 |
144 | #endif /* LIBXML_HTML_ENABLED */
145 |
146 | #endif /* __HTML_TREE_H__ */
147 |
148 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import absolute_import
2 |
3 | from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect
4 |
5 | from ..exceptions import HeaderParsingError
6 | from ..packages.six.moves import http_client as httplib
7 |
8 |
9 | def is_fp_closed(obj):
10 | """
11 | Checks whether a given file-like object is closed.
12 |
13 | :param obj:
14 | The file-like object to check.
15 | """
16 |
17 | try:
18 | # Check `isclosed()` first, in case Python3 doesn't set `closed`.
19 | # GH Issue #928
20 | return obj.isclosed()
21 | except AttributeError:
22 | pass
23 |
24 | try:
25 | # Check via the official file-like-object way.
26 | return obj.closed
27 | except AttributeError:
28 | pass
29 |
30 | try:
31 | # Check if the object is a container for another file-like object that
32 | # gets released on exhaustion (e.g. HTTPResponse).
33 | return obj.fp is None
34 | except AttributeError:
35 | pass
36 |
37 | raise ValueError("Unable to determine whether fp is closed.")
38 |
39 |
40 | def assert_header_parsing(headers):
41 | """
42 | Asserts whether all headers have been successfully parsed.
43 | Extracts encountered errors from the result of parsing headers.
44 |
45 | Only works on Python 3.
46 |
47 | :param http.client.HTTPMessage headers: Headers to verify.
48 |
49 | :raises urllib3.exceptions.HeaderParsingError:
50 | If parsing errors are found.
51 | """
52 |
53 | # This will fail silently if we pass in the wrong kind of parameter.
54 | # To make debugging easier add an explicit check.
55 | if not isinstance(headers, httplib.HTTPMessage):
56 | raise TypeError("expected httplib.Message, got {0}.".format(type(headers)))
57 |
58 | defects = getattr(headers, "defects", None)
59 | get_payload = getattr(headers, "get_payload", None)
60 |
61 | unparsed_data = None
62 | if get_payload:
63 | # get_payload is actually email.message.Message.get_payload;
64 | # we're only interested in the result if it's not a multipart message
65 | if not headers.is_multipart():
66 | payload = get_payload()
67 |
68 | if isinstance(payload, (bytes, str)):
69 | unparsed_data = payload
70 | if defects:
71 | # httplib is assuming a response body is available
72 | # when parsing headers even when httplib only sends
73 | # header data to parse_headers() This results in
74 | # defects on multipart responses in particular.
75 | # See: https://github.com/urllib3/urllib3/issues/800
76 |
77 | # So we ignore the following defects:
78 | # - StartBoundaryNotFoundDefect:
79 | # The claimed start boundary was never found.
80 | # - MultipartInvariantViolationDefect:
81 | # A message claimed to be a multipart but no subparts were found.
82 | defects = [
83 | defect
84 | for defect in defects
85 | if not isinstance(
86 | defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect)
87 | )
88 | ]
89 |
90 | if defects or unparsed_data:
91 | raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
92 |
93 |
94 | def is_response_to_head(response):
95 | """
96 | Checks whether the request of a response has been a HEAD-request.
97 | Handles the quirks of AppEngine.
98 |
99 | :param http.client.HTTPResponse response:
100 | Response to check if the originating request
101 | used 'HEAD' as a method.
102 | """
103 | # FIXME: Can we do this somehow without accessing private httplib _method?
104 | method = response._method
105 | if isinstance(method, int): # Platform-specific: Appengine
106 | return method == 3
107 | return method.upper() == "HEAD"
108 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from typing import List, Optional, Tuple
3 |
4 | from pip._internal.utils.misc import HiddenText, display_path
5 | from pip._internal.utils.subprocess import make_command
6 | from pip._internal.utils.urls import path_to_url
7 | from pip._internal.vcs.versioncontrol import (
8 | AuthInfo,
9 | RemoteNotFoundError,
10 | RevOptions,
11 | VersionControl,
12 | vcs,
13 | )
14 |
15 | logger = logging.getLogger(__name__)
16 |
17 |
18 | class Bazaar(VersionControl):
19 | name = "bzr"
20 | dirname = ".bzr"
21 | repo_name = "branch"
22 | schemes = (
23 | "bzr+http",
24 | "bzr+https",
25 | "bzr+ssh",
26 | "bzr+sftp",
27 | "bzr+ftp",
28 | "bzr+lp",
29 | "bzr+file",
30 | )
31 |
32 | @staticmethod
33 | def get_base_rev_args(rev: str) -> List[str]:
34 | return ["-r", rev]
35 |
36 | def fetch_new(
37 | self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int
38 | ) -> None:
39 | rev_display = rev_options.to_display()
40 | logger.info(
41 | "Checking out %s%s to %s",
42 | url,
43 | rev_display,
44 | display_path(dest),
45 | )
46 | if verbosity <= 0:
47 | flags = ["--quiet"]
48 | elif verbosity == 1:
49 | flags = []
50 | else:
51 | flags = [f"-{'v'*verbosity}"]
52 | cmd_args = make_command(
53 | "checkout", "--lightweight", *flags, rev_options.to_args(), url, dest
54 | )
55 | self.run_command(cmd_args)
56 |
57 | def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None:
58 | self.run_command(make_command("switch", url), cwd=dest)
59 |
60 | def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None:
61 | output = self.run_command(
62 | make_command("info"), show_stdout=False, stdout_only=True, cwd=dest
63 | )
64 | if output.startswith("Standalone "):
65 | # Older versions of pip used to create standalone branches.
66 | # Convert the standalone branch to a checkout by calling "bzr bind".
67 | cmd_args = make_command("bind", "-q", url)
68 | self.run_command(cmd_args, cwd=dest)
69 |
70 | cmd_args = make_command("update", "-q", rev_options.to_args())
71 | self.run_command(cmd_args, cwd=dest)
72 |
73 | @classmethod
74 | def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]:
75 | # hotfix the URL scheme after removing bzr+ from bzr+ssh:// re-add it
76 | url, rev, user_pass = super().get_url_rev_and_auth(url)
77 | if url.startswith("ssh://"):
78 | url = "bzr+" + url
79 | return url, rev, user_pass
80 |
81 | @classmethod
82 | def get_remote_url(cls, location: str) -> str:
83 | urls = cls.run_command(
84 | ["info"], show_stdout=False, stdout_only=True, cwd=location
85 | )
86 | for line in urls.splitlines():
87 | line = line.strip()
88 | for x in ("checkout of branch: ", "parent branch: "):
89 | if line.startswith(x):
90 | repo = line.split(x)[1]
91 | if cls._is_local_repository(repo):
92 | return path_to_url(repo)
93 | return repo
94 | raise RemoteNotFoundError
95 |
96 | @classmethod
97 | def get_revision(cls, location: str) -> str:
98 | revision = cls.run_command(
99 | ["revno"],
100 | show_stdout=False,
101 | stdout_only=True,
102 | cwd=location,
103 | )
104 | return revision.splitlines()[-1]
105 |
106 | @classmethod
107 | def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool:
108 | """Always assume the versions don't match"""
109 | return False
110 |
111 |
112 | vcs.register(Bazaar)
113 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/jinja2/visitor.py:
--------------------------------------------------------------------------------
```python
1 | """API for traversing the AST nodes. Implemented by the compiler and
2 | meta introspection.
3 | """
4 |
5 | import typing as t
6 |
7 | from .nodes import Node
8 |
9 | if t.TYPE_CHECKING:
10 | import typing_extensions as te
11 |
12 | class VisitCallable(te.Protocol):
13 | def __call__(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any: ...
14 |
15 |
16 | class NodeVisitor:
17 | """Walks the abstract syntax tree and call visitor functions for every
18 | node found. The visitor functions may return values which will be
19 | forwarded by the `visit` method.
20 |
21 | Per default the visitor functions for the nodes are ``'visit_'`` +
22 | class name of the node. So a `TryFinally` node visit function would
23 | be `visit_TryFinally`. This behavior can be changed by overriding
24 | the `get_visitor` function. If no visitor function exists for a node
25 | (return value `None`) the `generic_visit` visitor is used instead.
26 | """
27 |
28 | def get_visitor(self, node: Node) -> "t.Optional[VisitCallable]":
29 | """Return the visitor function for this node or `None` if no visitor
30 | exists for this node. In that case the generic visit function is
31 | used instead.
32 | """
33 | return getattr(self, f"visit_{type(node).__name__}", None)
34 |
35 | def visit(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any:
36 | """Visit a node."""
37 | f = self.get_visitor(node)
38 |
39 | if f is not None:
40 | return f(node, *args, **kwargs)
41 |
42 | return self.generic_visit(node, *args, **kwargs)
43 |
44 | def generic_visit(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any:
45 | """Called if no explicit visitor function exists for a node."""
46 | for child_node in node.iter_child_nodes():
47 | self.visit(child_node, *args, **kwargs)
48 |
49 |
50 | class NodeTransformer(NodeVisitor):
51 | """Walks the abstract syntax tree and allows modifications of nodes.
52 |
53 | The `NodeTransformer` will walk the AST and use the return value of the
54 | visitor functions to replace or remove the old node. If the return
55 | value of the visitor function is `None` the node will be removed
56 | from the previous location otherwise it's replaced with the return
57 | value. The return value may be the original node in which case no
58 | replacement takes place.
59 | """
60 |
61 | def generic_visit(self, node: Node, *args: t.Any, **kwargs: t.Any) -> Node:
62 | for field, old_value in node.iter_fields():
63 | if isinstance(old_value, list):
64 | new_values = []
65 | for value in old_value:
66 | if isinstance(value, Node):
67 | value = self.visit(value, *args, **kwargs)
68 | if value is None:
69 | continue
70 | elif not isinstance(value, Node):
71 | new_values.extend(value)
72 | continue
73 | new_values.append(value)
74 | old_value[:] = new_values
75 | elif isinstance(old_value, Node):
76 | new_node = self.visit(old_value, *args, **kwargs)
77 | if new_node is None:
78 | delattr(node, field)
79 | else:
80 | setattr(node, field, new_node)
81 | return node
82 |
83 | def visit_list(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.List[Node]:
84 | """As transformers may return lists in some places this method
85 | can be used to enforce a list as return value.
86 | """
87 | rv = self.visit(node, *args, **kwargs)
88 |
89 | if not isinstance(rv, list):
90 | return [rv]
91 |
92 | return rv
93 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py:
--------------------------------------------------------------------------------
```python
1 | """Represents a wheel file and provides access to the various parts of the
2 | name that have meaning.
3 | """
4 |
5 | import re
6 | from typing import Dict, Iterable, List
7 |
8 | from pip._vendor.packaging.tags import Tag
9 |
10 | from pip._internal.exceptions import InvalidWheelFilename
11 |
12 |
13 | class Wheel:
14 | """A wheel file"""
15 |
16 | wheel_file_re = re.compile(
17 | r"""^(?P<namever>(?P<name>[^\s-]+?)-(?P<ver>[^\s-]*?))
18 | ((-(?P<build>\d[^-]*?))?-(?P<pyver>[^\s-]+?)-(?P<abi>[^\s-]+?)-(?P<plat>[^\s-]+?)
19 | \.whl|\.dist-info)$""",
20 | re.VERBOSE,
21 | )
22 |
23 | def __init__(self, filename: str) -> None:
24 | """
25 | :raises InvalidWheelFilename: when the filename is invalid for a wheel
26 | """
27 | wheel_info = self.wheel_file_re.match(filename)
28 | if not wheel_info:
29 | raise InvalidWheelFilename(f"{filename} is not a valid wheel filename.")
30 | self.filename = filename
31 | self.name = wheel_info.group("name").replace("_", "-")
32 | # we'll assume "_" means "-" due to wheel naming scheme
33 | # (https://github.com/pypa/pip/issues/1150)
34 | self.version = wheel_info.group("ver").replace("_", "-")
35 | self.build_tag = wheel_info.group("build")
36 | self.pyversions = wheel_info.group("pyver").split(".")
37 | self.abis = wheel_info.group("abi").split(".")
38 | self.plats = wheel_info.group("plat").split(".")
39 |
40 | # All the tag combinations from this file
41 | self.file_tags = {
42 | Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats
43 | }
44 |
45 | def get_formatted_file_tags(self) -> List[str]:
46 | """Return the wheel's tags as a sorted list of strings."""
47 | return sorted(str(tag) for tag in self.file_tags)
48 |
49 | def support_index_min(self, tags: List[Tag]) -> int:
50 | """Return the lowest index that one of the wheel's file_tag combinations
51 | achieves in the given list of supported tags.
52 |
53 | For example, if there are 8 supported tags and one of the file tags
54 | is first in the list, then return 0.
55 |
56 | :param tags: the PEP 425 tags to check the wheel against, in order
57 | with most preferred first.
58 |
59 | :raises ValueError: If none of the wheel's file tags match one of
60 | the supported tags.
61 | """
62 | try:
63 | return next(i for i, t in enumerate(tags) if t in self.file_tags)
64 | except StopIteration:
65 | raise ValueError()
66 |
67 | def find_most_preferred_tag(
68 | self, tags: List[Tag], tag_to_priority: Dict[Tag, int]
69 | ) -> int:
70 | """Return the priority of the most preferred tag that one of the wheel's file
71 | tag combinations achieves in the given list of supported tags using the given
72 | tag_to_priority mapping, where lower priorities are more-preferred.
73 |
74 | This is used in place of support_index_min in some cases in order to avoid
75 | an expensive linear scan of a large list of tags.
76 |
77 | :param tags: the PEP 425 tags to check the wheel against.
78 | :param tag_to_priority: a mapping from tag to priority of that tag, where
79 | lower is more preferred.
80 |
81 | :raises ValueError: If none of the wheel's file tags match one of
82 | the supported tags.
83 | """
84 | return min(
85 | tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority
86 | )
87 |
88 | def supported(self, tags: Iterable[Tag]) -> bool:
89 | """Return whether the wheel is compatible with one of the given tags.
90 |
91 | :param tags: the PEP 425 tags to check the wheel against.
92 | """
93 | return not self.file_tags.isdisjoint(tags)
94 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xpointer.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: API to handle XML Pointers
3 | * Description: API to handle XML Pointers
4 | * Base implementation was made accordingly to
5 | * W3C Candidate Recommendation 7 June 2000
6 | * http://www.w3.org/TR/2000/CR-xptr-20000607
7 | *
8 | * Added support for the element() scheme described in:
9 | * W3C Proposed Recommendation 13 November 2002
10 | * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
11 | *
12 | * Copy: See Copyright for the status of this software.
13 | *
14 | * Author: Daniel Veillard
15 | */
16 |
17 | #ifndef __XML_XPTR_H__
18 | #define __XML_XPTR_H__
19 |
20 | #include <libxml/xmlversion.h>
21 |
22 | #ifdef LIBXML_XPTR_ENABLED
23 |
24 | #include <libxml/tree.h>
25 | #include <libxml/xpath.h>
26 |
27 | #ifdef __cplusplus
28 | extern "C" {
29 | #endif
30 |
31 | #if defined(LIBXML_XPTR_LOCS_ENABLED)
32 | /*
33 | * A Location Set
34 | */
35 | typedef struct _xmlLocationSet xmlLocationSet;
36 | typedef xmlLocationSet *xmlLocationSetPtr;
37 | struct _xmlLocationSet {
38 | int locNr; /* number of locations in the set */
39 | int locMax; /* size of the array as allocated */
40 | xmlXPathObjectPtr *locTab;/* array of locations */
41 | };
42 |
43 | /*
44 | * Handling of location sets.
45 | */
46 |
47 | XML_DEPRECATED
48 | XMLPUBFUN xmlLocationSetPtr
49 | xmlXPtrLocationSetCreate (xmlXPathObjectPtr val);
50 | XML_DEPRECATED
51 | XMLPUBFUN void
52 | xmlXPtrFreeLocationSet (xmlLocationSetPtr obj);
53 | XML_DEPRECATED
54 | XMLPUBFUN xmlLocationSetPtr
55 | xmlXPtrLocationSetMerge (xmlLocationSetPtr val1,
56 | xmlLocationSetPtr val2);
57 | XML_DEPRECATED
58 | XMLPUBFUN xmlXPathObjectPtr
59 | xmlXPtrNewRange (xmlNodePtr start,
60 | int startindex,
61 | xmlNodePtr end,
62 | int endindex);
63 | XML_DEPRECATED
64 | XMLPUBFUN xmlXPathObjectPtr
65 | xmlXPtrNewRangePoints (xmlXPathObjectPtr start,
66 | xmlXPathObjectPtr end);
67 | XML_DEPRECATED
68 | XMLPUBFUN xmlXPathObjectPtr
69 | xmlXPtrNewRangeNodePoint (xmlNodePtr start,
70 | xmlXPathObjectPtr end);
71 | XML_DEPRECATED
72 | XMLPUBFUN xmlXPathObjectPtr
73 | xmlXPtrNewRangePointNode (xmlXPathObjectPtr start,
74 | xmlNodePtr end);
75 | XML_DEPRECATED
76 | XMLPUBFUN xmlXPathObjectPtr
77 | xmlXPtrNewRangeNodes (xmlNodePtr start,
78 | xmlNodePtr end);
79 | XML_DEPRECATED
80 | XMLPUBFUN xmlXPathObjectPtr
81 | xmlXPtrNewLocationSetNodes (xmlNodePtr start,
82 | xmlNodePtr end);
83 | XML_DEPRECATED
84 | XMLPUBFUN xmlXPathObjectPtr
85 | xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
86 | XML_DEPRECATED
87 | XMLPUBFUN xmlXPathObjectPtr
88 | xmlXPtrNewRangeNodeObject (xmlNodePtr start,
89 | xmlXPathObjectPtr end);
90 | XML_DEPRECATED
91 | XMLPUBFUN xmlXPathObjectPtr
92 | xmlXPtrNewCollapsedRange (xmlNodePtr start);
93 | XML_DEPRECATED
94 | XMLPUBFUN void
95 | xmlXPtrLocationSetAdd (xmlLocationSetPtr cur,
96 | xmlXPathObjectPtr val);
97 | XML_DEPRECATED
98 | XMLPUBFUN xmlXPathObjectPtr
99 | xmlXPtrWrapLocationSet (xmlLocationSetPtr val);
100 | XML_DEPRECATED
101 | XMLPUBFUN void
102 | xmlXPtrLocationSetDel (xmlLocationSetPtr cur,
103 | xmlXPathObjectPtr val);
104 | XML_DEPRECATED
105 | XMLPUBFUN void
106 | xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
107 | int val);
108 | #endif /* defined(LIBXML_XPTR_LOCS_ENABLED) */
109 |
110 | /*
111 | * Functions.
112 | */
113 | XMLPUBFUN xmlXPathContextPtr
114 | xmlXPtrNewContext (xmlDocPtr doc,
115 | xmlNodePtr here,
116 | xmlNodePtr origin);
117 | XMLPUBFUN xmlXPathObjectPtr
118 | xmlXPtrEval (const xmlChar *str,
119 | xmlXPathContextPtr ctx);
120 |
121 | #if defined(LIBXML_XPTR_LOCS_ENABLED)
122 | XML_DEPRECATED
123 | XMLPUBFUN void
124 | xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
125 | int nargs);
126 | XML_DEPRECATED
127 | XMLPUBFUN xmlNodePtr
128 | xmlXPtrBuildNodeList (xmlXPathObjectPtr obj);
129 | XML_DEPRECATED
130 | XMLPUBFUN void
131 | xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt);
132 | #endif /* defined(LIBXML_XPTR_LOCS_ENABLED) */
133 | #ifdef __cplusplus
134 | }
135 | #endif
136 |
137 | #endif /* LIBXML_XPTR_ENABLED */
138 | #endif /* __XML_XPTR_H__ */
139 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js:
--------------------------------------------------------------------------------
```javascript
1 | let Status = {
2 | SUCCESS_HEADER: -1,
3 | SUCCESS_EOF: -2,
4 | ERROR_TIMEOUT: -3,
5 | ERROR_EXCEPTION: -4,
6 | };
7 |
8 | let connections = {};
9 | let nextConnectionID = 1;
10 | const encoder = new TextEncoder();
11 |
12 | self.addEventListener("message", async function (event) {
13 | if (event.data.close) {
14 | let connectionID = event.data.close;
15 | delete connections[connectionID];
16 | return;
17 | } else if (event.data.getMore) {
18 | let connectionID = event.data.getMore;
19 | let { curOffset, value, reader, intBuffer, byteBuffer } =
20 | connections[connectionID];
21 | // if we still have some in buffer, then just send it back straight away
22 | if (!value || curOffset >= value.length) {
23 | // read another buffer if required
24 | try {
25 | let readResponse = await reader.read();
26 |
27 | if (readResponse.done) {
28 | // read everything - clear connection and return
29 | delete connections[connectionID];
30 | Atomics.store(intBuffer, 0, Status.SUCCESS_EOF);
31 | Atomics.notify(intBuffer, 0);
32 | // finished reading successfully
33 | // return from event handler
34 | return;
35 | }
36 | curOffset = 0;
37 | connections[connectionID].value = readResponse.value;
38 | value = readResponse.value;
39 | } catch (error) {
40 | console.log("Request exception:", error);
41 | let errorBytes = encoder.encode(error.message);
42 | let written = errorBytes.length;
43 | byteBuffer.set(errorBytes);
44 | intBuffer[1] = written;
45 | Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION);
46 | Atomics.notify(intBuffer, 0);
47 | }
48 | }
49 |
50 | // send as much buffer as we can
51 | let curLen = value.length - curOffset;
52 | if (curLen > byteBuffer.length) {
53 | curLen = byteBuffer.length;
54 | }
55 | byteBuffer.set(value.subarray(curOffset, curOffset + curLen), 0);
56 |
57 | Atomics.store(intBuffer, 0, curLen); // store current length in bytes
58 | Atomics.notify(intBuffer, 0);
59 | curOffset += curLen;
60 | connections[connectionID].curOffset = curOffset;
61 |
62 | return;
63 | } else {
64 | // start fetch
65 | let connectionID = nextConnectionID;
66 | nextConnectionID += 1;
67 | const intBuffer = new Int32Array(event.data.buffer);
68 | const byteBuffer = new Uint8Array(event.data.buffer, 8);
69 | try {
70 | const response = await fetch(event.data.url, event.data.fetchParams);
71 | // return the headers first via textencoder
72 | var headers = [];
73 | for (const pair of response.headers.entries()) {
74 | headers.push([pair[0], pair[1]]);
75 | }
76 | let headerObj = {
77 | headers: headers,
78 | status: response.status,
79 | connectionID,
80 | };
81 | const headerText = JSON.stringify(headerObj);
82 | let headerBytes = encoder.encode(headerText);
83 | let written = headerBytes.length;
84 | byteBuffer.set(headerBytes);
85 | intBuffer[1] = written;
86 | // make a connection
87 | connections[connectionID] = {
88 | reader: response.body.getReader(),
89 | intBuffer: intBuffer,
90 | byteBuffer: byteBuffer,
91 | value: undefined,
92 | curOffset: 0,
93 | };
94 | // set header ready
95 | Atomics.store(intBuffer, 0, Status.SUCCESS_HEADER);
96 | Atomics.notify(intBuffer, 0);
97 | // all fetching after this goes through a new postmessage call with getMore
98 | // this allows for parallel requests
99 | } catch (error) {
100 | console.log("Request exception:", error);
101 | let errorBytes = encoder.encode(error.message);
102 | let written = errorBytes.length;
103 | byteBuffer.set(errorBytes);
104 | intBuffer[1] = written;
105 | Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION);
106 | Atomics.notify(intBuffer, 0);
107 | }
108 | }
109 | });
110 | self.postMessage({ inited: true });
111 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | from typing import Optional, Tuple
3 |
4 | if sys.version_info >= (3, 8):
5 | from typing import Literal
6 | else:
7 | from pip._vendor.typing_extensions import Literal # pragma: no cover
8 |
9 |
10 | from ._loop import loop_last
11 | from .console import Console, ConsoleOptions, RenderableType, RenderResult
12 | from .control import Control
13 | from .segment import ControlType, Segment
14 | from .style import StyleType
15 | from .text import Text
16 |
17 | VerticalOverflowMethod = Literal["crop", "ellipsis", "visible"]
18 |
19 |
20 | class LiveRender:
21 | """Creates a renderable that may be updated.
22 |
23 | Args:
24 | renderable (RenderableType): Any renderable object.
25 | style (StyleType, optional): An optional style to apply to the renderable. Defaults to "".
26 | """
27 |
28 | def __init__(
29 | self,
30 | renderable: RenderableType,
31 | style: StyleType = "",
32 | vertical_overflow: VerticalOverflowMethod = "ellipsis",
33 | ) -> None:
34 | self.renderable = renderable
35 | self.style = style
36 | self.vertical_overflow = vertical_overflow
37 | self._shape: Optional[Tuple[int, int]] = None
38 |
39 | def set_renderable(self, renderable: RenderableType) -> None:
40 | """Set a new renderable.
41 |
42 | Args:
43 | renderable (RenderableType): Any renderable object, including str.
44 | """
45 | self.renderable = renderable
46 |
47 | def position_cursor(self) -> Control:
48 | """Get control codes to move cursor to beginning of live render.
49 |
50 | Returns:
51 | Control: A control instance that may be printed.
52 | """
53 | if self._shape is not None:
54 | _, height = self._shape
55 | return Control(
56 | ControlType.CARRIAGE_RETURN,
57 | (ControlType.ERASE_IN_LINE, 2),
58 | *(
59 | (
60 | (ControlType.CURSOR_UP, 1),
61 | (ControlType.ERASE_IN_LINE, 2),
62 | )
63 | * (height - 1)
64 | )
65 | )
66 | return Control()
67 |
68 | def restore_cursor(self) -> Control:
69 | """Get control codes to clear the render and restore the cursor to its previous position.
70 |
71 | Returns:
72 | Control: A Control instance that may be printed.
73 | """
74 | if self._shape is not None:
75 | _, height = self._shape
76 | return Control(
77 | ControlType.CARRIAGE_RETURN,
78 | *((ControlType.CURSOR_UP, 1), (ControlType.ERASE_IN_LINE, 2)) * height
79 | )
80 | return Control()
81 |
82 | def __rich_console__(
83 | self, console: Console, options: ConsoleOptions
84 | ) -> RenderResult:
85 | renderable = self.renderable
86 | style = console.get_style(self.style)
87 | lines = console.render_lines(renderable, options, style=style, pad=False)
88 | shape = Segment.get_shape(lines)
89 |
90 | _, height = shape
91 | if height > options.size.height:
92 | if self.vertical_overflow == "crop":
93 | lines = lines[: options.size.height]
94 | shape = Segment.get_shape(lines)
95 | elif self.vertical_overflow == "ellipsis":
96 | lines = lines[: (options.size.height - 1)]
97 | overflow_text = Text(
98 | "...",
99 | overflow="crop",
100 | justify="center",
101 | end="",
102 | style="live.ellipsis",
103 | )
104 | lines.append(list(console.render(overflow_text)))
105 | shape = Segment.get_shape(lines)
106 | self._shape = shape
107 |
108 | new_line = Segment.line()
109 | for last, line in loop_last(lines):
110 | yield from line
111 | if not last:
112 | yield new_line
113 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | A module that implements tooling to enable easy warnings about deprecations.
3 | """
4 |
5 | import logging
6 | import warnings
7 | from typing import Any, Optional, TextIO, Type, Union
8 |
9 | from pip._vendor.packaging.version import parse
10 |
11 | from pip import __version__ as current_version # NOTE: tests patch this name.
12 |
13 | DEPRECATION_MSG_PREFIX = "DEPRECATION: "
14 |
15 |
16 | class PipDeprecationWarning(Warning):
17 | pass
18 |
19 |
20 | _original_showwarning: Any = None
21 |
22 |
23 | # Warnings <-> Logging Integration
24 | def _showwarning(
25 | message: Union[Warning, str],
26 | category: Type[Warning],
27 | filename: str,
28 | lineno: int,
29 | file: Optional[TextIO] = None,
30 | line: Optional[str] = None,
31 | ) -> None:
32 | if file is not None:
33 | if _original_showwarning is not None:
34 | _original_showwarning(message, category, filename, lineno, file, line)
35 | elif issubclass(category, PipDeprecationWarning):
36 | # We use a specially named logger which will handle all of the
37 | # deprecation messages for pip.
38 | logger = logging.getLogger("pip._internal.deprecations")
39 | logger.warning(message)
40 | else:
41 | _original_showwarning(message, category, filename, lineno, file, line)
42 |
43 |
44 | def install_warning_logger() -> None:
45 | # Enable our Deprecation Warnings
46 | warnings.simplefilter("default", PipDeprecationWarning, append=True)
47 |
48 | global _original_showwarning
49 |
50 | if _original_showwarning is None:
51 | _original_showwarning = warnings.showwarning
52 | warnings.showwarning = _showwarning
53 |
54 |
55 | def deprecated(
56 | *,
57 | reason: str,
58 | replacement: Optional[str],
59 | gone_in: Optional[str],
60 | feature_flag: Optional[str] = None,
61 | issue: Optional[int] = None,
62 | ) -> None:
63 | """Helper to deprecate existing functionality.
64 |
65 | reason:
66 | Textual reason shown to the user about why this functionality has
67 | been deprecated. Should be a complete sentence.
68 | replacement:
69 | Textual suggestion shown to the user about what alternative
70 | functionality they can use.
71 | gone_in:
72 | The version of pip does this functionality should get removed in.
73 | Raises an error if pip's current version is greater than or equal to
74 | this.
75 | feature_flag:
76 | Command-line flag of the form --use-feature={feature_flag} for testing
77 | upcoming functionality.
78 | issue:
79 | Issue number on the tracker that would serve as a useful place for
80 | users to find related discussion and provide feedback.
81 | """
82 |
83 | # Determine whether or not the feature is already gone in this version.
84 | is_gone = gone_in is not None and parse(current_version) >= parse(gone_in)
85 |
86 | message_parts = [
87 | (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"),
88 | (
89 | gone_in,
90 | (
91 | "pip {} will enforce this behaviour change."
92 | if not is_gone
93 | else "Since pip {}, this is no longer supported."
94 | ),
95 | ),
96 | (
97 | replacement,
98 | "A possible replacement is {}.",
99 | ),
100 | (
101 | feature_flag,
102 | (
103 | "You can use the flag --use-feature={} to test the upcoming behaviour."
104 | if not is_gone
105 | else None
106 | ),
107 | ),
108 | (
109 | issue,
110 | "Discussion can be found at https://github.com/pypa/pip/issues/{}",
111 | ),
112 | ]
113 |
114 | message = " ".join(
115 | format_str.format(value)
116 | for value, format_str in message_parts
117 | if format_str is not None and value is not None
118 | )
119 |
120 | # Raise as an error if this behaviour is deprecated.
121 | if is_gone:
122 | raise PipDeprecationWarning(message)
123 |
124 | warnings.warn(message, category=PipDeprecationWarning, stacklevel=2)
125 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py:
--------------------------------------------------------------------------------
```python
1 | import os
2 | import sys
3 | from typing import Optional, Tuple
4 |
5 |
6 | def glibc_version_string() -> Optional[str]:
7 | "Returns glibc version string, or None if not using glibc."
8 | return glibc_version_string_confstr() or glibc_version_string_ctypes()
9 |
10 |
11 | def glibc_version_string_confstr() -> Optional[str]:
12 | "Primary implementation of glibc_version_string using os.confstr."
13 | # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely
14 | # to be broken or missing. This strategy is used in the standard library
15 | # platform module:
16 | # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183
17 | if sys.platform == "win32":
18 | return None
19 | try:
20 | gnu_libc_version = os.confstr("CS_GNU_LIBC_VERSION")
21 | if gnu_libc_version is None:
22 | return None
23 | # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17":
24 | _, version = gnu_libc_version.split()
25 | except (AttributeError, OSError, ValueError):
26 | # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)...
27 | return None
28 | return version
29 |
30 |
31 | def glibc_version_string_ctypes() -> Optional[str]:
32 | "Fallback implementation of glibc_version_string using ctypes."
33 |
34 | try:
35 | import ctypes
36 | except ImportError:
37 | return None
38 |
39 | # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen
40 | # manpage says, "If filename is NULL, then the returned handle is for the
41 | # main program". This way we can let the linker do the work to figure out
42 | # which libc our process is actually using.
43 | #
44 | # We must also handle the special case where the executable is not a
45 | # dynamically linked executable. This can occur when using musl libc,
46 | # for example. In this situation, dlopen() will error, leading to an
47 | # OSError. Interestingly, at least in the case of musl, there is no
48 | # errno set on the OSError. The single string argument used to construct
49 | # OSError comes from libc itself and is therefore not portable to
50 | # hard code here. In any case, failure to call dlopen() means we
51 | # can't proceed, so we bail on our attempt.
52 | try:
53 | process_namespace = ctypes.CDLL(None)
54 | except OSError:
55 | return None
56 |
57 | try:
58 | gnu_get_libc_version = process_namespace.gnu_get_libc_version
59 | except AttributeError:
60 | # Symbol doesn't exist -> therefore, we are not linked to
61 | # glibc.
62 | return None
63 |
64 | # Call gnu_get_libc_version, which returns a string like "2.5"
65 | gnu_get_libc_version.restype = ctypes.c_char_p
66 | version_str: str = gnu_get_libc_version()
67 | # py2 / py3 compatibility:
68 | if not isinstance(version_str, str):
69 | version_str = version_str.decode("ascii")
70 |
71 | return version_str
72 |
73 |
74 | # platform.libc_ver regularly returns completely nonsensical glibc
75 | # versions. E.g. on my computer, platform says:
76 | #
77 | # ~$ python2.7 -c 'import platform; print(platform.libc_ver())'
78 | # ('glibc', '2.7')
79 | # ~$ python3.5 -c 'import platform; print(platform.libc_ver())'
80 | # ('glibc', '2.9')
81 | #
82 | # But the truth is:
83 | #
84 | # ~$ ldd --version
85 | # ldd (Debian GLIBC 2.22-11) 2.22
86 | #
87 | # This is unfortunate, because it means that the linehaul data on libc
88 | # versions that was generated by pip 8.1.2 and earlier is useless and
89 | # misleading. Solution: instead of using platform, use our code that actually
90 | # works.
91 | def libc_ver() -> Tuple[str, str]:
92 | """Try to determine the glibc version
93 |
94 | Returns a tuple of strings (lib, version) which default to empty strings
95 | in case the lookup fails.
96 | """
97 | glibc_version = glibc_version_string()
98 | if glibc_version is None:
99 | return ("", "")
100 | else:
101 | return ("glibc", glibc_version)
102 |
```