This is page 13 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/util/connection.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import socket
4 | import typing
5 |
6 | from ..exceptions import LocationParseError
7 | from .timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT
8 |
9 | _TYPE_SOCKET_OPTIONS = typing.List[typing.Tuple[int, int, typing.Union[int, bytes]]]
10 |
11 | if typing.TYPE_CHECKING:
12 | from .._base_connection import BaseHTTPConnection
13 |
14 |
15 | def is_connection_dropped(conn: BaseHTTPConnection) -> bool: # Platform-specific
16 | """
17 | Returns True if the connection is dropped and should be closed.
18 | :param conn: :class:`urllib3.connection.HTTPConnection` object.
19 | """
20 | return not conn.is_connected
21 |
22 |
23 | # This function is copied from socket.py in the Python 2.7 standard
24 | # library test suite. Added to its signature is only `socket_options`.
25 | # One additional modification is that we avoid binding to IPv6 servers
26 | # discovered in DNS if the system doesn't have IPv6 functionality.
27 | def create_connection(
28 | address: tuple[str, int],
29 | timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
30 | source_address: tuple[str, int] | None = None,
31 | socket_options: _TYPE_SOCKET_OPTIONS | None = None,
32 | ) -> socket.socket:
33 | """Connect to *address* and return the socket object.
34 |
35 | Convenience function. Connect to *address* (a 2-tuple ``(host,
36 | port)``) and return the socket object. Passing the optional
37 | *timeout* parameter will set the timeout on the socket instance
38 | before attempting to connect. If no *timeout* is supplied, the
39 | global default timeout setting returned by :func:`socket.getdefaulttimeout`
40 | is used. If *source_address* is set it must be a tuple of (host, port)
41 | for the socket to bind as a source address before making the connection.
42 | An host of '' or port 0 tells the OS to use the default.
43 | """
44 |
45 | host, port = address
46 | if host.startswith("["):
47 | host = host.strip("[]")
48 | err = None
49 |
50 | # Using the value from allowed_gai_family() in the context of getaddrinfo lets
51 | # us select whether to work with IPv4 DNS records, IPv6 records, or both.
52 | # The original create_connection function always returns all records.
53 | family = allowed_gai_family()
54 |
55 | try:
56 | host.encode("idna")
57 | except UnicodeError:
58 | raise LocationParseError(f"'{host}', label empty or too long") from None
59 |
60 | for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
61 | af, socktype, proto, canonname, sa = res
62 | sock = None
63 | try:
64 | sock = socket.socket(af, socktype, proto)
65 |
66 | # If provided, set socket level options before connecting.
67 | _set_socket_options(sock, socket_options)
68 |
69 | if timeout is not _DEFAULT_TIMEOUT:
70 | sock.settimeout(timeout)
71 | if source_address:
72 | sock.bind(source_address)
73 | sock.connect(sa)
74 | # Break explicitly a reference cycle
75 | err = None
76 | return sock
77 |
78 | except OSError as _:
79 | err = _
80 | if sock is not None:
81 | sock.close()
82 |
83 | if err is not None:
84 | try:
85 | raise err
86 | finally:
87 | # Break explicitly a reference cycle
88 | err = None
89 | else:
90 | raise OSError("getaddrinfo returns an empty list")
91 |
92 |
93 | def _set_socket_options(
94 | sock: socket.socket, options: _TYPE_SOCKET_OPTIONS | None
95 | ) -> None:
96 | if options is None:
97 | return
98 |
99 | for opt in options:
100 | sock.setsockopt(*opt)
101 |
102 |
103 | def allowed_gai_family() -> socket.AddressFamily:
104 | """This function is designed to work in the context of
105 | getaddrinfo, where family=socket.AF_UNSPEC is the default and
106 | will perform a DNS search for both IPv6 and IPv4 records."""
107 |
108 | family = socket.AF_INET
109 | if HAS_IPV6:
110 | family = socket.AF_UNSPEC
111 | return family
112 |
113 |
114 | def _has_ipv6(host: str) -> bool:
115 | """Returns True if the system can bind an IPv6 address."""
116 | sock = None
117 | has_ipv6 = False
118 |
119 | if socket.has_ipv6:
120 | # has_ipv6 returns true if cPython was compiled with IPv6 support.
121 | # It does not tell us if the system has IPv6 support enabled. To
122 | # determine that we must bind to an IPv6 address.
123 | # https://github.com/urllib3/urllib3/pull/611
124 | # https://bugs.python.org/issue658327
125 | try:
126 | sock = socket.socket(socket.AF_INET6)
127 | sock.bind((host, 0))
128 | has_ipv6 = True
129 | except Exception:
130 | pass
131 |
132 | if sock:
133 | sock.close()
134 | return has_ipv6
135 |
136 |
137 | HAS_IPV6 = _has_ipv6("::1")
138 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | certifi.py
3 | ~~~~~~~~~~
4 |
5 | This module returns the installation location of cacert.pem or its contents.
6 | """
7 | import sys
8 | import atexit
9 |
10 | def exit_cacert_ctx() -> None:
11 | _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr]
12 |
13 |
14 | if sys.version_info >= (3, 11):
15 |
16 | from importlib.resources import as_file, files
17 |
18 | _CACERT_CTX = None
19 | _CACERT_PATH = None
20 |
21 | def where() -> str:
22 | # This is slightly terrible, but we want to delay extracting the file
23 | # in cases where we're inside of a zipimport situation until someone
24 | # actually calls where(), but we don't want to re-extract the file
25 | # on every call of where(), so we'll do it once then store it in a
26 | # global variable.
27 | global _CACERT_CTX
28 | global _CACERT_PATH
29 | if _CACERT_PATH is None:
30 | # This is slightly janky, the importlib.resources API wants you to
31 | # manage the cleanup of this file, so it doesn't actually return a
32 | # path, it returns a context manager that will give you the path
33 | # when you enter it and will do any cleanup when you leave it. In
34 | # the common case of not needing a temporary file, it will just
35 | # return the file system location and the __exit__() is a no-op.
36 | #
37 | # We also have to hold onto the actual context manager, because
38 | # it will do the cleanup whenever it gets garbage collected, so
39 | # we will also store that at the global level as well.
40 | _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem"))
41 | _CACERT_PATH = str(_CACERT_CTX.__enter__())
42 | atexit.register(exit_cacert_ctx)
43 |
44 | return _CACERT_PATH
45 |
46 | def contents() -> str:
47 | return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii")
48 |
49 | elif sys.version_info >= (3, 7):
50 |
51 | from importlib.resources import path as get_path, read_text
52 |
53 | _CACERT_CTX = None
54 | _CACERT_PATH = None
55 |
56 | def where() -> str:
57 | # This is slightly terrible, but we want to delay extracting the
58 | # file in cases where we're inside of a zipimport situation until
59 | # someone actually calls where(), but we don't want to re-extract
60 | # the file on every call of where(), so we'll do it once then store
61 | # it in a global variable.
62 | global _CACERT_CTX
63 | global _CACERT_PATH
64 | if _CACERT_PATH is None:
65 | # This is slightly janky, the importlib.resources API wants you
66 | # to manage the cleanup of this file, so it doesn't actually
67 | # return a path, it returns a context manager that will give
68 | # you the path when you enter it and will do any cleanup when
69 | # you leave it. In the common case of not needing a temporary
70 | # file, it will just return the file system location and the
71 | # __exit__() is a no-op.
72 | #
73 | # We also have to hold onto the actual context manager, because
74 | # it will do the cleanup whenever it gets garbage collected, so
75 | # we will also store that at the global level as well.
76 | _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem")
77 | _CACERT_PATH = str(_CACERT_CTX.__enter__())
78 | atexit.register(exit_cacert_ctx)
79 |
80 | return _CACERT_PATH
81 |
82 | def contents() -> str:
83 | return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii")
84 |
85 | else:
86 | import os
87 | import types
88 | from typing import Union
89 |
90 | Package = Union[types.ModuleType, str]
91 | Resource = Union[str, "os.PathLike"]
92 |
93 | # This fallback will work for Python versions prior to 3.7 that lack the
94 | # importlib.resources module but relies on the existing `where` function
95 | # so won't address issues with environments like PyOxidizer that don't set
96 | # __file__ on modules.
97 | def read_text(
98 | package: Package,
99 | resource: Resource,
100 | encoding: str = 'utf-8',
101 | errors: str = 'strict'
102 | ) -> str:
103 | with open(where(), encoding=encoding) as data:
104 | return data.read()
105 |
106 | # If we don't have importlib.resources, then we will just do the old logic
107 | # of assuming we're on the filesystem and munge the path directly.
108 | def where() -> str:
109 | f = os.path.dirname(__file__)
110 |
111 | return os.path.join(f, "cacert.pem")
112 |
113 | def contents() -> str:
114 | return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii")
115 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/html/builder.py:
--------------------------------------------------------------------------------
```python
1 | # --------------------------------------------------------------------
2 | # The ElementTree toolkit is
3 | # Copyright (c) 1999-2004 by Fredrik Lundh
4 | # --------------------------------------------------------------------
5 |
6 | """
7 | A set of HTML generator tags for building HTML documents.
8 |
9 | Usage::
10 |
11 | >>> from lxml.html.builder import *
12 | >>> html = HTML(
13 | ... HEAD( TITLE("Hello World") ),
14 | ... BODY( CLASS("main"),
15 | ... H1("Hello World !")
16 | ... )
17 | ... )
18 |
19 | >>> import lxml.etree
20 | >>> print lxml.etree.tostring(html, pretty_print=True)
21 | <html>
22 | <head>
23 | <title>Hello World</title>
24 | </head>
25 | <body class="main">
26 | <h1>Hello World !</h1>
27 | </body>
28 | </html>
29 |
30 | """
31 |
32 | from lxml.builder import ElementMaker
33 | from lxml.html import html_parser
34 |
35 | E = ElementMaker(makeelement=html_parser.makeelement)
36 |
37 | # elements
38 | A = E.a #: anchor
39 | ABBR = E.abbr #: abbreviated form (e.g., WWW, HTTP, etc.)
40 | ACRONYM = E.acronym #:
41 | ADDRESS = E.address #: information on author
42 | APPLET = E.applet #: Java applet (DEPRECATED)
43 | AREA = E.area #: client-side image map area
44 | B = E.b #: bold text style
45 | BASE = E.base #: document base URI
46 | BASEFONT = E.basefont #: base font size (DEPRECATED)
47 | BDO = E.bdo #: I18N BiDi over-ride
48 | BIG = E.big #: large text style
49 | BLOCKQUOTE = E.blockquote #: long quotation
50 | BODY = E.body #: document body
51 | BR = E.br #: forced line break
52 | BUTTON = E.button #: push button
53 | CAPTION = E.caption #: table caption
54 | CENTER = E.center #: shorthand for DIV align=center (DEPRECATED)
55 | CITE = E.cite #: citation
56 | CODE = E.code #: computer code fragment
57 | COL = E.col #: table column
58 | COLGROUP = E.colgroup #: table column group
59 | DD = E.dd #: definition description
60 | DEL = getattr(E, 'del') #: deleted text
61 | DFN = E.dfn #: instance definition
62 | DIR = E.dir #: directory list (DEPRECATED)
63 | DIV = E.div #: generic language/style container
64 | DL = E.dl #: definition list
65 | DT = E.dt #: definition term
66 | EM = E.em #: emphasis
67 | FIELDSET = E.fieldset #: form control group
68 | FONT = E.font #: local change to font (DEPRECATED)
69 | FORM = E.form #: interactive form
70 | FRAME = E.frame #: subwindow
71 | FRAMESET = E.frameset #: window subdivision
72 | H1 = E.h1 #: heading
73 | H2 = E.h2 #: heading
74 | H3 = E.h3 #: heading
75 | H4 = E.h4 #: heading
76 | H5 = E.h5 #: heading
77 | H6 = E.h6 #: heading
78 | HEAD = E.head #: document head
79 | HR = E.hr #: horizontal rule
80 | HTML = E.html #: document root element
81 | I = E.i #: italic text style
82 | IFRAME = E.iframe #: inline subwindow
83 | IMG = E.img #: Embedded image
84 | INPUT = E.input #: form control
85 | INS = E.ins #: inserted text
86 | ISINDEX = E.isindex #: single line prompt (DEPRECATED)
87 | KBD = E.kbd #: text to be entered by the user
88 | LABEL = E.label #: form field label text
89 | LEGEND = E.legend #: fieldset legend
90 | LI = E.li #: list item
91 | LINK = E.link #: a media-independent link
92 | MAP = E.map #: client-side image map
93 | MENU = E.menu #: menu list (DEPRECATED)
94 | META = E.meta #: generic metainformation
95 | NOFRAMES = E.noframes #: alternate content container for non frame-based rendering
96 | NOSCRIPT = E.noscript #: alternate content container for non script-based rendering
97 | OBJECT = E.object #: generic embedded object
98 | OL = E.ol #: ordered list
99 | OPTGROUP = E.optgroup #: option group
100 | OPTION = E.option #: selectable choice
101 | P = E.p #: paragraph
102 | PARAM = E.param #: named property value
103 | PRE = E.pre #: preformatted text
104 | Q = E.q #: short inline quotation
105 | S = E.s #: strike-through text style (DEPRECATED)
106 | SAMP = E.samp #: sample program output, scripts, etc.
107 | SCRIPT = E.script #: script statements
108 | SELECT = E.select #: option selector
109 | SMALL = E.small #: small text style
110 | SPAN = E.span #: generic language/style container
111 | STRIKE = E.strike #: strike-through text (DEPRECATED)
112 | STRONG = E.strong #: strong emphasis
113 | STYLE = E.style #: style info
114 | SUB = E.sub #: subscript
115 | SUP = E.sup #: superscript
116 | TABLE = E.table #:
117 | TBODY = E.tbody #: table body
118 | TD = E.td #: table data cell
119 | TEXTAREA = E.textarea #: multi-line text field
120 | TFOOT = E.tfoot #: table footer
121 | TH = E.th #: table header cell
122 | THEAD = E.thead #: table header
123 | TITLE = E.title #: document title
124 | TR = E.tr #: table row
125 | TT = E.tt #: teletype or monospaced text style
126 | U = E.u #: underlined text style (DEPRECATED)
127 | UL = E.ul #: unordered list
128 | VAR = E.var #: instance of a variable or program argument
129 |
130 | # attributes (only reserved words are included here)
131 | ATTR = dict
132 | def CLASS(v): return {'class': v}
133 | def FOR(v): return {'for': v}
134 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py:
--------------------------------------------------------------------------------
```python
1 | """Support functions for working with wheel files.
2 | """
3 |
4 | import logging
5 | from email.message import Message
6 | from email.parser import Parser
7 | from typing import Tuple
8 | from zipfile import BadZipFile, ZipFile
9 |
10 | from pip._vendor.packaging.utils import canonicalize_name
11 |
12 | from pip._internal.exceptions import UnsupportedWheel
13 |
14 | VERSION_COMPATIBLE = (1, 0)
15 |
16 |
17 | logger = logging.getLogger(__name__)
18 |
19 |
20 | def parse_wheel(wheel_zip: ZipFile, name: str) -> Tuple[str, Message]:
21 | """Extract information from the provided wheel, ensuring it meets basic
22 | standards.
23 |
24 | Returns the name of the .dist-info directory and the parsed WHEEL metadata.
25 | """
26 | try:
27 | info_dir = wheel_dist_info_dir(wheel_zip, name)
28 | metadata = wheel_metadata(wheel_zip, info_dir)
29 | version = wheel_version(metadata)
30 | except UnsupportedWheel as e:
31 | raise UnsupportedWheel(f"{name} has an invalid wheel, {e}")
32 |
33 | check_compatibility(version, name)
34 |
35 | return info_dir, metadata
36 |
37 |
38 | def wheel_dist_info_dir(source: ZipFile, name: str) -> str:
39 | """Returns the name of the contained .dist-info directory.
40 |
41 | Raises AssertionError or UnsupportedWheel if not found, >1 found, or
42 | it doesn't match the provided name.
43 | """
44 | # Zip file path separators must be /
45 | subdirs = {p.split("/", 1)[0] for p in source.namelist()}
46 |
47 | info_dirs = [s for s in subdirs if s.endswith(".dist-info")]
48 |
49 | if not info_dirs:
50 | raise UnsupportedWheel(".dist-info directory not found")
51 |
52 | if len(info_dirs) > 1:
53 | raise UnsupportedWheel(
54 | "multiple .dist-info directories found: {}".format(", ".join(info_dirs))
55 | )
56 |
57 | info_dir = info_dirs[0]
58 |
59 | info_dir_name = canonicalize_name(info_dir)
60 | canonical_name = canonicalize_name(name)
61 | if not info_dir_name.startswith(canonical_name):
62 | raise UnsupportedWheel(
63 | f".dist-info directory {info_dir!r} does not start with {canonical_name!r}"
64 | )
65 |
66 | return info_dir
67 |
68 |
69 | def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes:
70 | try:
71 | return source.read(path)
72 | # BadZipFile for general corruption, KeyError for missing entry,
73 | # and RuntimeError for password-protected files
74 | except (BadZipFile, KeyError, RuntimeError) as e:
75 | raise UnsupportedWheel(f"could not read {path!r} file: {e!r}")
76 |
77 |
78 | def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message:
79 | """Return the WHEEL metadata of an extracted wheel, if possible.
80 | Otherwise, raise UnsupportedWheel.
81 | """
82 | path = f"{dist_info_dir}/WHEEL"
83 | # Zip file path separators must be /
84 | wheel_contents = read_wheel_metadata_file(source, path)
85 |
86 | try:
87 | wheel_text = wheel_contents.decode()
88 | except UnicodeDecodeError as e:
89 | raise UnsupportedWheel(f"error decoding {path!r}: {e!r}")
90 |
91 | # FeedParser (used by Parser) does not raise any exceptions. The returned
92 | # message may have .defects populated, but for backwards-compatibility we
93 | # currently ignore them.
94 | return Parser().parsestr(wheel_text)
95 |
96 |
97 | def wheel_version(wheel_data: Message) -> Tuple[int, ...]:
98 | """Given WHEEL metadata, return the parsed Wheel-Version.
99 | Otherwise, raise UnsupportedWheel.
100 | """
101 | version_text = wheel_data["Wheel-Version"]
102 | if version_text is None:
103 | raise UnsupportedWheel("WHEEL is missing Wheel-Version")
104 |
105 | version = version_text.strip()
106 |
107 | try:
108 | return tuple(map(int, version.split(".")))
109 | except ValueError:
110 | raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}")
111 |
112 |
113 | def check_compatibility(version: Tuple[int, ...], name: str) -> None:
114 | """Raises errors or warns if called with an incompatible Wheel-Version.
115 |
116 | pip should refuse to install a Wheel-Version that's a major series
117 | ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when
118 | installing a version only minor version ahead (e.g 1.2 > 1.1).
119 |
120 | version: a 2-tuple representing a Wheel-Version (Major, Minor)
121 | name: name of wheel or package to raise exception about
122 |
123 | :raises UnsupportedWheel: when an incompatible Wheel-Version is given
124 | """
125 | if version[0] > VERSION_COMPATIBLE[0]:
126 | raise UnsupportedWheel(
127 | "{}'s Wheel-Version ({}) is not compatible with this version "
128 | "of pip".format(name, ".".join(map(str, version)))
129 | )
130 | elif version > VERSION_COMPATIBLE:
131 | logger.warning(
132 | "Installing from a newer Wheel-Version (%s)",
133 | ".".join(map(str, version)),
134 | )
135 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | NTLM authenticating pool, contributed by erikcederstran
3 |
4 | Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10
5 | """
6 | from __future__ import absolute_import
7 |
8 | import warnings
9 | from logging import getLogger
10 |
11 | from ntlm import ntlm
12 |
13 | from .. import HTTPSConnectionPool
14 | from ..packages.six.moves.http_client import HTTPSConnection
15 |
16 | warnings.warn(
17 | "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed "
18 | "in urllib3 v2.0 release, urllib3 is not able to support it properly due "
19 | "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. "
20 | "If you are a user of this module please comment in the mentioned issue.",
21 | DeprecationWarning,
22 | )
23 |
24 | log = getLogger(__name__)
25 |
26 |
27 | class NTLMConnectionPool(HTTPSConnectionPool):
28 | """
29 | Implements an NTLM authentication version of an urllib3 connection pool
30 | """
31 |
32 | scheme = "https"
33 |
34 | def __init__(self, user, pw, authurl, *args, **kwargs):
35 | """
36 | authurl is a random URL on the server that is protected by NTLM.
37 | user is the Windows user, probably in the DOMAIN\\username format.
38 | pw is the password for the user.
39 | """
40 | super(NTLMConnectionPool, self).__init__(*args, **kwargs)
41 | self.authurl = authurl
42 | self.rawuser = user
43 | user_parts = user.split("\\", 1)
44 | self.domain = user_parts[0].upper()
45 | self.user = user_parts[1]
46 | self.pw = pw
47 |
48 | def _new_conn(self):
49 | # Performs the NTLM handshake that secures the connection. The socket
50 | # must be kept open while requests are performed.
51 | self.num_connections += 1
52 | log.debug(
53 | "Starting NTLM HTTPS connection no. %d: https://%s%s",
54 | self.num_connections,
55 | self.host,
56 | self.authurl,
57 | )
58 |
59 | headers = {"Connection": "Keep-Alive"}
60 | req_header = "Authorization"
61 | resp_header = "www-authenticate"
62 |
63 | conn = HTTPSConnection(host=self.host, port=self.port)
64 |
65 | # Send negotiation message
66 | headers[req_header] = "NTLM %s" % ntlm.create_NTLM_NEGOTIATE_MESSAGE(
67 | self.rawuser
68 | )
69 | log.debug("Request headers: %s", headers)
70 | conn.request("GET", self.authurl, None, headers)
71 | res = conn.getresponse()
72 | reshdr = dict(res.headers)
73 | log.debug("Response status: %s %s", res.status, res.reason)
74 | log.debug("Response headers: %s", reshdr)
75 | log.debug("Response data: %s [...]", res.read(100))
76 |
77 | # Remove the reference to the socket, so that it can not be closed by
78 | # the response object (we want to keep the socket open)
79 | res.fp = None
80 |
81 | # Server should respond with a challenge message
82 | auth_header_values = reshdr[resp_header].split(", ")
83 | auth_header_value = None
84 | for s in auth_header_values:
85 | if s[:5] == "NTLM ":
86 | auth_header_value = s[5:]
87 | if auth_header_value is None:
88 | raise Exception(
89 | "Unexpected %s response header: %s" % (resp_header, reshdr[resp_header])
90 | )
91 |
92 | # Send authentication message
93 | ServerChallenge, NegotiateFlags = ntlm.parse_NTLM_CHALLENGE_MESSAGE(
94 | auth_header_value
95 | )
96 | auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(
97 | ServerChallenge, self.user, self.domain, self.pw, NegotiateFlags
98 | )
99 | headers[req_header] = "NTLM %s" % auth_msg
100 | log.debug("Request headers: %s", headers)
101 | conn.request("GET", self.authurl, None, headers)
102 | res = conn.getresponse()
103 | log.debug("Response status: %s %s", res.status, res.reason)
104 | log.debug("Response headers: %s", dict(res.headers))
105 | log.debug("Response data: %s [...]", res.read()[:100])
106 | if res.status != 200:
107 | if res.status == 401:
108 | raise Exception("Server rejected request: wrong username or password")
109 | raise Exception("Wrong server response: %s %s" % (res.status, res.reason))
110 |
111 | res.fp = None
112 | log.debug("Connection established")
113 | return conn
114 |
115 | def urlopen(
116 | self,
117 | method,
118 | url,
119 | body=None,
120 | headers=None,
121 | retries=3,
122 | redirect=True,
123 | assert_same_host=True,
124 | ):
125 | if headers is None:
126 | headers = {}
127 | headers["Connection"] = "Keep-Alive"
128 | return super(NTLMConnectionPool, self).urlopen(
129 | method, url, body, headers, retries, redirect, assert_same_host
130 | )
131 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py:
--------------------------------------------------------------------------------
```python
1 | import itertools
2 | import logging
3 | import os
4 | import posixpath
5 | import urllib.parse
6 | from dataclasses import dataclass
7 | from typing import List
8 |
9 | from pip._vendor.packaging.utils import canonicalize_name
10 |
11 | from pip._internal.models.index import PyPI
12 | from pip._internal.utils.compat import has_tls
13 | from pip._internal.utils.misc import normalize_path, redact_auth_from_url
14 |
15 | logger = logging.getLogger(__name__)
16 |
17 |
18 | @dataclass(frozen=True)
19 | class SearchScope:
20 | """
21 | Encapsulates the locations that pip is configured to search.
22 | """
23 |
24 | __slots__ = ["find_links", "index_urls", "no_index"]
25 |
26 | find_links: List[str]
27 | index_urls: List[str]
28 | no_index: bool
29 |
30 | @classmethod
31 | def create(
32 | cls,
33 | find_links: List[str],
34 | index_urls: List[str],
35 | no_index: bool,
36 | ) -> "SearchScope":
37 | """
38 | Create a SearchScope object after normalizing the `find_links`.
39 | """
40 | # Build find_links. If an argument starts with ~, it may be
41 | # a local file relative to a home directory. So try normalizing
42 | # it and if it exists, use the normalized version.
43 | # This is deliberately conservative - it might be fine just to
44 | # blindly normalize anything starting with a ~...
45 | built_find_links: List[str] = []
46 | for link in find_links:
47 | if link.startswith("~"):
48 | new_link = normalize_path(link)
49 | if os.path.exists(new_link):
50 | link = new_link
51 | built_find_links.append(link)
52 |
53 | # If we don't have TLS enabled, then WARN if anyplace we're looking
54 | # relies on TLS.
55 | if not has_tls():
56 | for link in itertools.chain(index_urls, built_find_links):
57 | parsed = urllib.parse.urlparse(link)
58 | if parsed.scheme == "https":
59 | logger.warning(
60 | "pip is configured with locations that require "
61 | "TLS/SSL, however the ssl module in Python is not "
62 | "available."
63 | )
64 | break
65 |
66 | return cls(
67 | find_links=built_find_links,
68 | index_urls=index_urls,
69 | no_index=no_index,
70 | )
71 |
72 | def get_formatted_locations(self) -> str:
73 | lines = []
74 | redacted_index_urls = []
75 | if self.index_urls and self.index_urls != [PyPI.simple_url]:
76 | for url in self.index_urls:
77 | redacted_index_url = redact_auth_from_url(url)
78 |
79 | # Parse the URL
80 | purl = urllib.parse.urlsplit(redacted_index_url)
81 |
82 | # URL is generally invalid if scheme and netloc is missing
83 | # there are issues with Python and URL parsing, so this test
84 | # is a bit crude. See bpo-20271, bpo-23505. Python doesn't
85 | # always parse invalid URLs correctly - it should raise
86 | # exceptions for malformed URLs
87 | if not purl.scheme and not purl.netloc:
88 | logger.warning(
89 | 'The index url "%s" seems invalid, please provide a scheme.',
90 | redacted_index_url,
91 | )
92 |
93 | redacted_index_urls.append(redacted_index_url)
94 |
95 | lines.append(
96 | "Looking in indexes: {}".format(", ".join(redacted_index_urls))
97 | )
98 |
99 | if self.find_links:
100 | lines.append(
101 | "Looking in links: {}".format(
102 | ", ".join(redact_auth_from_url(url) for url in self.find_links)
103 | )
104 | )
105 | return "\n".join(lines)
106 |
107 | def get_index_urls_locations(self, project_name: str) -> List[str]:
108 | """Returns the locations found via self.index_urls
109 |
110 | Checks the url_name on the main (first in the list) index and
111 | use this url_name to produce all locations
112 | """
113 |
114 | def mkurl_pypi_url(url: str) -> str:
115 | loc = posixpath.join(
116 | url, urllib.parse.quote(canonicalize_name(project_name))
117 | )
118 | # For maximum compatibility with easy_install, ensure the path
119 | # ends in a trailing slash. Although this isn't in the spec
120 | # (and PyPI can handle it without the slash) some other index
121 | # implementations might break if they relied on easy_install's
122 | # behavior.
123 | if not loc.endswith("/"):
124 | loc = loc + "/"
125 | return loc
126 |
127 | return [mkurl_pypi_url(url) for url in self.index_urls]
128 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xmlschemastypes.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: implementation of XML Schema Datatypes
3 | * Description: module providing the XML Schema Datatypes implementation
4 | * both definition and validity checking
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Daniel Veillard
9 | */
10 |
11 |
12 | #ifndef __XML_SCHEMA_TYPES_H__
13 | #define __XML_SCHEMA_TYPES_H__
14 |
15 | #include <libxml/xmlversion.h>
16 |
17 | #ifdef LIBXML_SCHEMAS_ENABLED
18 |
19 | #include <libxml/schemasInternals.h>
20 | #include <libxml/xmlschemas.h>
21 |
22 | #ifdef __cplusplus
23 | extern "C" {
24 | #endif
25 |
26 | typedef enum {
27 | XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
28 | XML_SCHEMA_WHITESPACE_PRESERVE = 1,
29 | XML_SCHEMA_WHITESPACE_REPLACE = 2,
30 | XML_SCHEMA_WHITESPACE_COLLAPSE = 3
31 | } xmlSchemaWhitespaceValueType;
32 |
33 | XMLPUBFUN int
34 | xmlSchemaInitTypes (void);
35 | XML_DEPRECATED
36 | XMLPUBFUN void
37 | xmlSchemaCleanupTypes (void);
38 | XMLPUBFUN xmlSchemaTypePtr
39 | xmlSchemaGetPredefinedType (const xmlChar *name,
40 | const xmlChar *ns);
41 | XMLPUBFUN int
42 | xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
43 | const xmlChar *value,
44 | xmlSchemaValPtr *val);
45 | XMLPUBFUN int
46 | xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type,
47 | const xmlChar *value,
48 | xmlSchemaValPtr *val,
49 | xmlNodePtr node);
50 | XMLPUBFUN int
51 | xmlSchemaValidateFacet (xmlSchemaTypePtr base,
52 | xmlSchemaFacetPtr facet,
53 | const xmlChar *value,
54 | xmlSchemaValPtr val);
55 | XMLPUBFUN int
56 | xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet,
57 | xmlSchemaWhitespaceValueType fws,
58 | xmlSchemaValType valType,
59 | const xmlChar *value,
60 | xmlSchemaValPtr val,
61 | xmlSchemaWhitespaceValueType ws);
62 | XMLPUBFUN void
63 | xmlSchemaFreeValue (xmlSchemaValPtr val);
64 | XMLPUBFUN xmlSchemaFacetPtr
65 | xmlSchemaNewFacet (void);
66 | XMLPUBFUN int
67 | xmlSchemaCheckFacet (xmlSchemaFacetPtr facet,
68 | xmlSchemaTypePtr typeDecl,
69 | xmlSchemaParserCtxtPtr ctxt,
70 | const xmlChar *name);
71 | XMLPUBFUN void
72 | xmlSchemaFreeFacet (xmlSchemaFacetPtr facet);
73 | XMLPUBFUN int
74 | xmlSchemaCompareValues (xmlSchemaValPtr x,
75 | xmlSchemaValPtr y);
76 | XMLPUBFUN xmlSchemaTypePtr
77 | xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type);
78 | XMLPUBFUN int
79 | xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet,
80 | const xmlChar *value,
81 | unsigned long actualLen,
82 | unsigned long *expectedLen);
83 | XMLPUBFUN xmlSchemaTypePtr
84 | xmlSchemaGetBuiltInType (xmlSchemaValType type);
85 | XMLPUBFUN int
86 | xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type,
87 | int facetType);
88 | XMLPUBFUN xmlChar *
89 | xmlSchemaCollapseString (const xmlChar *value);
90 | XMLPUBFUN xmlChar *
91 | xmlSchemaWhiteSpaceReplace (const xmlChar *value);
92 | XMLPUBFUN unsigned long
93 | xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet);
94 | XMLPUBFUN int
95 | xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type,
96 | xmlSchemaFacetPtr facet,
97 | const xmlChar *value,
98 | xmlSchemaValPtr val,
99 | unsigned long *length);
100 | XMLPUBFUN int
101 | xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
102 | xmlSchemaValType valType,
103 | const xmlChar *value,
104 | xmlSchemaValPtr val,
105 | unsigned long *length,
106 | xmlSchemaWhitespaceValueType ws);
107 | XMLPUBFUN int
108 | xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type,
109 | const xmlChar *value,
110 | xmlSchemaValPtr *val,
111 | xmlNodePtr node);
112 | XMLPUBFUN int
113 | xmlSchemaGetCanonValue (xmlSchemaValPtr val,
114 | const xmlChar **retValue);
115 | XMLPUBFUN int
116 | xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val,
117 | const xmlChar **retValue,
118 | xmlSchemaWhitespaceValueType ws);
119 | XMLPUBFUN int
120 | xmlSchemaValueAppend (xmlSchemaValPtr prev,
121 | xmlSchemaValPtr cur);
122 | XMLPUBFUN xmlSchemaValPtr
123 | xmlSchemaValueGetNext (xmlSchemaValPtr cur);
124 | XMLPUBFUN const xmlChar *
125 | xmlSchemaValueGetAsString (xmlSchemaValPtr val);
126 | XMLPUBFUN int
127 | xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val);
128 | XMLPUBFUN xmlSchemaValPtr
129 | xmlSchemaNewStringValue (xmlSchemaValType type,
130 | const xmlChar *value);
131 | XMLPUBFUN xmlSchemaValPtr
132 | xmlSchemaNewNOTATIONValue (const xmlChar *name,
133 | const xmlChar *ns);
134 | XMLPUBFUN xmlSchemaValPtr
135 | xmlSchemaNewQNameValue (const xmlChar *namespaceName,
136 | const xmlChar *localName);
137 | XMLPUBFUN int
138 | xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x,
139 | xmlSchemaWhitespaceValueType xws,
140 | xmlSchemaValPtr y,
141 | xmlSchemaWhitespaceValueType yws);
142 | XMLPUBFUN xmlSchemaValPtr
143 | xmlSchemaCopyValue (xmlSchemaValPtr val);
144 | XMLPUBFUN xmlSchemaValType
145 | xmlSchemaGetValType (xmlSchemaValPtr val);
146 |
147 | #ifdef __cplusplus
148 | }
149 | #endif
150 |
151 | #endif /* LIBXML_SCHEMAS_ENABLED */
152 | #endif /* __XML_SCHEMA_TYPES_H__ */
153 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py:
--------------------------------------------------------------------------------
```python
1 | from typing import Union
2 |
3 | from .align import AlignMethod
4 | from .cells import cell_len, set_cell_size
5 | from .console import Console, ConsoleOptions, RenderResult
6 | from .jupyter import JupyterMixin
7 | from .measure import Measurement
8 | from .style import Style
9 | from .text import Text
10 |
11 |
12 | class Rule(JupyterMixin):
13 | """A console renderable to draw a horizontal rule (line).
14 |
15 | Args:
16 | title (Union[str, Text], optional): Text to render in the rule. Defaults to "".
17 | characters (str, optional): Character(s) used to draw the line. Defaults to "─".
18 | style (StyleType, optional): Style of Rule. Defaults to "rule.line".
19 | end (str, optional): Character at end of Rule. defaults to "\\\\n"
20 | align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center".
21 | """
22 |
23 | def __init__(
24 | self,
25 | title: Union[str, Text] = "",
26 | *,
27 | characters: str = "─",
28 | style: Union[str, Style] = "rule.line",
29 | end: str = "\n",
30 | align: AlignMethod = "center",
31 | ) -> None:
32 | if cell_len(characters) < 1:
33 | raise ValueError(
34 | "'characters' argument must have a cell width of at least 1"
35 | )
36 | if align not in ("left", "center", "right"):
37 | raise ValueError(
38 | f'invalid value for align, expected "left", "center", "right" (not {align!r})'
39 | )
40 | self.title = title
41 | self.characters = characters
42 | self.style = style
43 | self.end = end
44 | self.align = align
45 |
46 | def __repr__(self) -> str:
47 | return f"Rule({self.title!r}, {self.characters!r})"
48 |
49 | def __rich_console__(
50 | self, console: Console, options: ConsoleOptions
51 | ) -> RenderResult:
52 | width = options.max_width
53 |
54 | characters = (
55 | "-"
56 | if (options.ascii_only and not self.characters.isascii())
57 | else self.characters
58 | )
59 |
60 | chars_len = cell_len(characters)
61 | if not self.title:
62 | yield self._rule_line(chars_len, width)
63 | return
64 |
65 | if isinstance(self.title, Text):
66 | title_text = self.title
67 | else:
68 | title_text = console.render_str(self.title, style="rule.text")
69 |
70 | title_text.plain = title_text.plain.replace("\n", " ")
71 | title_text.expand_tabs()
72 |
73 | required_space = 4 if self.align == "center" else 2
74 | truncate_width = max(0, width - required_space)
75 | if not truncate_width:
76 | yield self._rule_line(chars_len, width)
77 | return
78 |
79 | rule_text = Text(end=self.end)
80 | if self.align == "center":
81 | title_text.truncate(truncate_width, overflow="ellipsis")
82 | side_width = (width - cell_len(title_text.plain)) // 2
83 | left = Text(characters * (side_width // chars_len + 1))
84 | left.truncate(side_width - 1)
85 | right_length = width - cell_len(left.plain) - cell_len(title_text.plain)
86 | right = Text(characters * (side_width // chars_len + 1))
87 | right.truncate(right_length)
88 | rule_text.append(left.plain + " ", self.style)
89 | rule_text.append(title_text)
90 | rule_text.append(" " + right.plain, self.style)
91 | elif self.align == "left":
92 | title_text.truncate(truncate_width, overflow="ellipsis")
93 | rule_text.append(title_text)
94 | rule_text.append(" ")
95 | rule_text.append(characters * (width - rule_text.cell_len), self.style)
96 | elif self.align == "right":
97 | title_text.truncate(truncate_width, overflow="ellipsis")
98 | rule_text.append(characters * (width - title_text.cell_len - 1), self.style)
99 | rule_text.append(" ")
100 | rule_text.append(title_text)
101 |
102 | rule_text.plain = set_cell_size(rule_text.plain, width)
103 | yield rule_text
104 |
105 | def _rule_line(self, chars_len: int, width: int) -> Text:
106 | rule_text = Text(self.characters * ((width // chars_len) + 1), self.style)
107 | rule_text.truncate(width)
108 | rule_text.plain = set_cell_size(rule_text.plain, width)
109 | return rule_text
110 |
111 | def __rich_measure__(
112 | self, console: Console, options: ConsoleOptions
113 | ) -> Measurement:
114 | return Measurement(1, 1)
115 |
116 |
117 | if __name__ == "__main__": # pragma: no cover
118 | import sys
119 |
120 | from pip._vendor.rich.console import Console
121 |
122 | try:
123 | text = sys.argv[1]
124 | except IndexError:
125 | text = "Hello, World"
126 | console = Console()
127 | console.print(Rule(title=text))
128 |
129 | console = Console()
130 | console.print(Rule("foo"), width=4)
131 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/soupsieve/__init__.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Soup Sieve.
3 |
4 | A CSS selector filter for BeautifulSoup4.
5 |
6 | MIT License
7 |
8 | Copyright (c) 2018 Isaac Muse
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 | """
28 | from __future__ import annotations
29 | from .__meta__ import __version__, __version_info__ # noqa: F401
30 | from . import css_parser as cp
31 | from . import css_match as cm
32 | from . import css_types as ct
33 | from .util import DEBUG, SelectorSyntaxError # noqa: F401
34 | import bs4 # type: ignore[import-untyped]
35 | from typing import Any, Iterator, Iterable
36 |
37 | __all__ = (
38 | 'DEBUG', 'SelectorSyntaxError', 'SoupSieve',
39 | 'closest', 'compile', 'filter', 'iselect',
40 | 'match', 'select', 'select_one'
41 | )
42 |
43 | SoupSieve = cm.SoupSieve
44 |
45 |
46 | def compile( # noqa: A001
47 | pattern: str,
48 | namespaces: dict[str, str] | None = None,
49 | flags: int = 0,
50 | *,
51 | custom: dict[str, str] | None = None,
52 | **kwargs: Any
53 | ) -> cm.SoupSieve:
54 | """Compile CSS pattern."""
55 |
56 | if isinstance(pattern, SoupSieve):
57 | if flags:
58 | raise ValueError("Cannot process 'flags' argument on a compiled selector list")
59 | elif namespaces is not None:
60 | raise ValueError("Cannot process 'namespaces' argument on a compiled selector list")
61 | elif custom is not None:
62 | raise ValueError("Cannot process 'custom' argument on a compiled selector list")
63 | return pattern
64 |
65 | return cp._cached_css_compile(
66 | pattern,
67 | ct.Namespaces(namespaces) if namespaces is not None else namespaces,
68 | ct.CustomSelectors(custom) if custom is not None else custom,
69 | flags
70 | )
71 |
72 |
73 | def purge() -> None:
74 | """Purge cached patterns."""
75 |
76 | cp._purge_cache()
77 |
78 |
79 | def closest(
80 | select: str,
81 | tag: bs4.Tag,
82 | namespaces: dict[str, str] | None = None,
83 | flags: int = 0,
84 | *,
85 | custom: dict[str, str] | None = None,
86 | **kwargs: Any
87 | ) -> bs4.Tag:
88 | """Match closest ancestor."""
89 |
90 | return compile(select, namespaces, flags, **kwargs).closest(tag)
91 |
92 |
93 | def match(
94 | select: str,
95 | tag: bs4.Tag,
96 | namespaces: dict[str, str] | None = None,
97 | flags: int = 0,
98 | *,
99 | custom: dict[str, str] | None = None,
100 | **kwargs: Any
101 | ) -> bool:
102 | """Match node."""
103 |
104 | return compile(select, namespaces, flags, **kwargs).match(tag)
105 |
106 |
107 | def filter( # noqa: A001
108 | select: str,
109 | iterable: Iterable[bs4.Tag],
110 | namespaces: dict[str, str] | None = None,
111 | flags: int = 0,
112 | *,
113 | custom: dict[str, str] | None = None,
114 | **kwargs: Any
115 | ) -> list[bs4.Tag]:
116 | """Filter list of nodes."""
117 |
118 | return compile(select, namespaces, flags, **kwargs).filter(iterable)
119 |
120 |
121 | def select_one(
122 | select: str,
123 | tag: bs4.Tag,
124 | namespaces: dict[str, str] | None = None,
125 | flags: int = 0,
126 | *,
127 | custom: dict[str, str] | None = None,
128 | **kwargs: Any
129 | ) -> bs4.Tag:
130 | """Select a single tag."""
131 |
132 | return compile(select, namespaces, flags, **kwargs).select_one(tag)
133 |
134 |
135 | def select(
136 | select: str,
137 | tag: bs4.Tag,
138 | namespaces: dict[str, str] | None = None,
139 | limit: int = 0,
140 | flags: int = 0,
141 | *,
142 | custom: dict[str, str] | None = None,
143 | **kwargs: Any
144 | ) -> list[bs4.Tag]:
145 | """Select the specified tags."""
146 |
147 | return compile(select, namespaces, flags, **kwargs).select(tag, limit)
148 |
149 |
150 | def iselect(
151 | select: str,
152 | tag: bs4.Tag,
153 | namespaces: dict[str, str] | None = None,
154 | limit: int = 0,
155 | flags: int = 0,
156 | *,
157 | custom: dict[str, str] | None = None,
158 | **kwargs: Any
159 | ) -> Iterator[bs4.Tag]:
160 | """Iterate the specified tags."""
161 |
162 | yield from compile(select, namespaces, flags, **kwargs).iselect(tag, limit)
163 |
164 |
165 | def escape(ident: str) -> str:
166 | """Escape identifier."""
167 |
168 | return cp.escape(ident)
169 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/catalog.h:
--------------------------------------------------------------------------------
```
1 | /**
2 | * Summary: interfaces to the Catalog handling system
3 | * Description: the catalog module implements the support for
4 | * XML Catalogs and SGML catalogs
5 | *
6 | * SGML Open Technical Resolution TR9401:1997.
7 | * http://www.jclark.com/sp/catalog.htm
8 | *
9 | * XML Catalogs Working Draft 06 August 2001
10 | * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
11 | *
12 | * Copy: See Copyright for the status of this software.
13 | *
14 | * Author: Daniel Veillard
15 | */
16 |
17 | #ifndef __XML_CATALOG_H__
18 | #define __XML_CATALOG_H__
19 |
20 | #include <stdio.h>
21 |
22 | #include <libxml/xmlversion.h>
23 | #include <libxml/xmlstring.h>
24 | #include <libxml/tree.h>
25 |
26 | #ifdef LIBXML_CATALOG_ENABLED
27 |
28 | #ifdef __cplusplus
29 | extern "C" {
30 | #endif
31 |
32 | /**
33 | * XML_CATALOGS_NAMESPACE:
34 | *
35 | * The namespace for the XML Catalogs elements.
36 | */
37 | #define XML_CATALOGS_NAMESPACE \
38 | (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
39 | /**
40 | * XML_CATALOG_PI:
41 | *
42 | * The specific XML Catalog Processing Instruction name.
43 | */
44 | #define XML_CATALOG_PI \
45 | (const xmlChar *) "oasis-xml-catalog"
46 |
47 | /*
48 | * The API is voluntarily limited to general cataloging.
49 | */
50 | typedef enum {
51 | XML_CATA_PREFER_NONE = 0,
52 | XML_CATA_PREFER_PUBLIC = 1,
53 | XML_CATA_PREFER_SYSTEM
54 | } xmlCatalogPrefer;
55 |
56 | typedef enum {
57 | XML_CATA_ALLOW_NONE = 0,
58 | XML_CATA_ALLOW_GLOBAL = 1,
59 | XML_CATA_ALLOW_DOCUMENT = 2,
60 | XML_CATA_ALLOW_ALL = 3
61 | } xmlCatalogAllow;
62 |
63 | typedef struct _xmlCatalog xmlCatalog;
64 | typedef xmlCatalog *xmlCatalogPtr;
65 |
66 | /*
67 | * Operations on a given catalog.
68 | */
69 | XMLPUBFUN xmlCatalogPtr
70 | xmlNewCatalog (int sgml);
71 | XMLPUBFUN xmlCatalogPtr
72 | xmlLoadACatalog (const char *filename);
73 | XMLPUBFUN xmlCatalogPtr
74 | xmlLoadSGMLSuperCatalog (const char *filename);
75 | XMLPUBFUN int
76 | xmlConvertSGMLCatalog (xmlCatalogPtr catal);
77 | XMLPUBFUN int
78 | xmlACatalogAdd (xmlCatalogPtr catal,
79 | const xmlChar *type,
80 | const xmlChar *orig,
81 | const xmlChar *replace);
82 | XMLPUBFUN int
83 | xmlACatalogRemove (xmlCatalogPtr catal,
84 | const xmlChar *value);
85 | XMLPUBFUN xmlChar *
86 | xmlACatalogResolve (xmlCatalogPtr catal,
87 | const xmlChar *pubID,
88 | const xmlChar *sysID);
89 | XMLPUBFUN xmlChar *
90 | xmlACatalogResolveSystem(xmlCatalogPtr catal,
91 | const xmlChar *sysID);
92 | XMLPUBFUN xmlChar *
93 | xmlACatalogResolvePublic(xmlCatalogPtr catal,
94 | const xmlChar *pubID);
95 | XMLPUBFUN xmlChar *
96 | xmlACatalogResolveURI (xmlCatalogPtr catal,
97 | const xmlChar *URI);
98 | #ifdef LIBXML_OUTPUT_ENABLED
99 | XMLPUBFUN void
100 | xmlACatalogDump (xmlCatalogPtr catal,
101 | FILE *out);
102 | #endif /* LIBXML_OUTPUT_ENABLED */
103 | XMLPUBFUN void
104 | xmlFreeCatalog (xmlCatalogPtr catal);
105 | XMLPUBFUN int
106 | xmlCatalogIsEmpty (xmlCatalogPtr catal);
107 |
108 | /*
109 | * Global operations.
110 | */
111 | XMLPUBFUN void
112 | xmlInitializeCatalog (void);
113 | XMLPUBFUN int
114 | xmlLoadCatalog (const char *filename);
115 | XMLPUBFUN void
116 | xmlLoadCatalogs (const char *paths);
117 | XMLPUBFUN void
118 | xmlCatalogCleanup (void);
119 | #ifdef LIBXML_OUTPUT_ENABLED
120 | XMLPUBFUN void
121 | xmlCatalogDump (FILE *out);
122 | #endif /* LIBXML_OUTPUT_ENABLED */
123 | XMLPUBFUN xmlChar *
124 | xmlCatalogResolve (const xmlChar *pubID,
125 | const xmlChar *sysID);
126 | XMLPUBFUN xmlChar *
127 | xmlCatalogResolveSystem (const xmlChar *sysID);
128 | XMLPUBFUN xmlChar *
129 | xmlCatalogResolvePublic (const xmlChar *pubID);
130 | XMLPUBFUN xmlChar *
131 | xmlCatalogResolveURI (const xmlChar *URI);
132 | XMLPUBFUN int
133 | xmlCatalogAdd (const xmlChar *type,
134 | const xmlChar *orig,
135 | const xmlChar *replace);
136 | XMLPUBFUN int
137 | xmlCatalogRemove (const xmlChar *value);
138 | XMLPUBFUN xmlDocPtr
139 | xmlParseCatalogFile (const char *filename);
140 | XMLPUBFUN int
141 | xmlCatalogConvert (void);
142 |
143 | /*
144 | * Strictly minimal interfaces for per-document catalogs used
145 | * by the parser.
146 | */
147 | XMLPUBFUN void
148 | xmlCatalogFreeLocal (void *catalogs);
149 | XMLPUBFUN void *
150 | xmlCatalogAddLocal (void *catalogs,
151 | const xmlChar *URL);
152 | XMLPUBFUN xmlChar *
153 | xmlCatalogLocalResolve (void *catalogs,
154 | const xmlChar *pubID,
155 | const xmlChar *sysID);
156 | XMLPUBFUN xmlChar *
157 | xmlCatalogLocalResolveURI(void *catalogs,
158 | const xmlChar *URI);
159 | /*
160 | * Preference settings.
161 | */
162 | XMLPUBFUN int
163 | xmlCatalogSetDebug (int level);
164 | XMLPUBFUN xmlCatalogPrefer
165 | xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
166 | XMLPUBFUN void
167 | xmlCatalogSetDefaults (xmlCatalogAllow allow);
168 | XMLPUBFUN xmlCatalogAllow
169 | xmlCatalogGetDefaults (void);
170 |
171 |
172 | /* DEPRECATED interfaces */
173 | XMLPUBFUN const xmlChar *
174 | xmlCatalogGetSystem (const xmlChar *sysID);
175 | XMLPUBFUN const xmlChar *
176 | xmlCatalogGetPublic (const xmlChar *pubID);
177 |
178 | #ifdef __cplusplus
179 | }
180 | #endif
181 | #endif /* LIBXML_CATALOG_ENABLED */
182 | #endif /* __XML_CATALOG_H__ */
183 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import re
4 | from functools import lru_cache
5 | from typing import Callable
6 |
7 | from ._cell_widths import CELL_WIDTHS
8 |
9 | # Regex to match sequence of the most common character ranges
10 | _is_single_cell_widths = re.compile("^[\u0020-\u006f\u00a0\u02ff\u0370-\u0482]*$").match
11 |
12 |
13 | @lru_cache(4096)
14 | def cached_cell_len(text: str) -> int:
15 | """Get the number of cells required to display text.
16 |
17 | This method always caches, which may use up a lot of memory. It is recommended to use
18 | `cell_len` over this method.
19 |
20 | Args:
21 | text (str): Text to display.
22 |
23 | Returns:
24 | int: Get the number of cells required to display text.
25 | """
26 | _get_size = get_character_cell_size
27 | total_size = sum(_get_size(character) for character in text)
28 | return total_size
29 |
30 |
31 | def cell_len(text: str, _cell_len: Callable[[str], int] = cached_cell_len) -> int:
32 | """Get the number of cells required to display text.
33 |
34 | Args:
35 | text (str): Text to display.
36 |
37 | Returns:
38 | int: Get the number of cells required to display text.
39 | """
40 | if len(text) < 512:
41 | return _cell_len(text)
42 | _get_size = get_character_cell_size
43 | total_size = sum(_get_size(character) for character in text)
44 | return total_size
45 |
46 |
47 | @lru_cache(maxsize=4096)
48 | def get_character_cell_size(character: str) -> int:
49 | """Get the cell size of a character.
50 |
51 | Args:
52 | character (str): A single character.
53 |
54 | Returns:
55 | int: Number of cells (0, 1 or 2) occupied by that character.
56 | """
57 | return _get_codepoint_cell_size(ord(character))
58 |
59 |
60 | @lru_cache(maxsize=4096)
61 | def _get_codepoint_cell_size(codepoint: int) -> int:
62 | """Get the cell size of a character.
63 |
64 | Args:
65 | codepoint (int): Codepoint of a character.
66 |
67 | Returns:
68 | int: Number of cells (0, 1 or 2) occupied by that character.
69 | """
70 |
71 | _table = CELL_WIDTHS
72 | lower_bound = 0
73 | upper_bound = len(_table) - 1
74 | index = (lower_bound + upper_bound) // 2
75 | while True:
76 | start, end, width = _table[index]
77 | if codepoint < start:
78 | upper_bound = index - 1
79 | elif codepoint > end:
80 | lower_bound = index + 1
81 | else:
82 | return 0 if width == -1 else width
83 | if upper_bound < lower_bound:
84 | break
85 | index = (lower_bound + upper_bound) // 2
86 | return 1
87 |
88 |
89 | def set_cell_size(text: str, total: int) -> str:
90 | """Set the length of a string to fit within given number of cells."""
91 |
92 | if _is_single_cell_widths(text):
93 | size = len(text)
94 | if size < total:
95 | return text + " " * (total - size)
96 | return text[:total]
97 |
98 | if total <= 0:
99 | return ""
100 | cell_size = cell_len(text)
101 | if cell_size == total:
102 | return text
103 | if cell_size < total:
104 | return text + " " * (total - cell_size)
105 |
106 | start = 0
107 | end = len(text)
108 |
109 | # Binary search until we find the right size
110 | while True:
111 | pos = (start + end) // 2
112 | before = text[: pos + 1]
113 | before_len = cell_len(before)
114 | if before_len == total + 1 and cell_len(before[-1]) == 2:
115 | return before[:-1] + " "
116 | if before_len == total:
117 | return before
118 | if before_len > total:
119 | end = pos
120 | else:
121 | start = pos
122 |
123 |
124 | def chop_cells(
125 | text: str,
126 | width: int,
127 | ) -> list[str]:
128 | """Split text into lines such that each line fits within the available (cell) width.
129 |
130 | Args:
131 | text: The text to fold such that it fits in the given width.
132 | width: The width available (number of cells).
133 |
134 | Returns:
135 | A list of strings such that each string in the list has cell width
136 | less than or equal to the available width.
137 | """
138 | _get_character_cell_size = get_character_cell_size
139 | lines: list[list[str]] = [[]]
140 |
141 | append_new_line = lines.append
142 | append_to_last_line = lines[-1].append
143 |
144 | total_width = 0
145 |
146 | for character in text:
147 | cell_width = _get_character_cell_size(character)
148 | char_doesnt_fit = total_width + cell_width > width
149 |
150 | if char_doesnt_fit:
151 | append_new_line([character])
152 | append_to_last_line = lines[-1].append
153 | total_width = cell_width
154 | else:
155 | append_to_last_line(character)
156 | total_width += cell_width
157 |
158 | return ["".join(line) for line in lines]
159 |
160 |
161 | if __name__ == "__main__": # pragma: no cover
162 | print(get_character_cell_size("😽"))
163 | for line in chop_cells("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", 8):
164 | print(line)
165 | for n in range(80, 1, -1):
166 | print(set_cell_size("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", n) + "|")
167 | print("x" * n)
168 |
```