This is page 8 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | from optparse import Values
3 | from typing import AbstractSet, List
4 |
5 | from pip._internal.cli import cmdoptions
6 | from pip._internal.cli.base_command import Command
7 | from pip._internal.cli.status_codes import SUCCESS
8 | from pip._internal.operations.freeze import freeze
9 | from pip._internal.utils.compat import stdlib_pkgs
10 |
11 |
12 | def _should_suppress_build_backends() -> bool:
13 | return sys.version_info < (3, 12)
14 |
15 |
16 | def _dev_pkgs() -> AbstractSet[str]:
17 | pkgs = {"pip"}
18 |
19 | if _should_suppress_build_backends():
20 | pkgs |= {"setuptools", "distribute", "wheel"}
21 |
22 | return pkgs
23 |
24 |
25 | class FreezeCommand(Command):
26 | """
27 | Output installed packages in requirements format.
28 |
29 | packages are listed in a case-insensitive sorted order.
30 | """
31 |
32 | ignore_require_venv = True
33 | usage = """
34 | %prog [options]"""
35 | log_streams = ("ext://sys.stderr", "ext://sys.stderr")
36 |
37 | def add_options(self) -> None:
38 | self.cmd_opts.add_option(
39 | "-r",
40 | "--requirement",
41 | dest="requirements",
42 | action="append",
43 | default=[],
44 | metavar="file",
45 | help=(
46 | "Use the order in the given requirements file and its "
47 | "comments when generating output. This option can be "
48 | "used multiple times."
49 | ),
50 | )
51 | self.cmd_opts.add_option(
52 | "-l",
53 | "--local",
54 | dest="local",
55 | action="store_true",
56 | default=False,
57 | help=(
58 | "If in a virtualenv that has global access, do not output "
59 | "globally-installed packages."
60 | ),
61 | )
62 | self.cmd_opts.add_option(
63 | "--user",
64 | dest="user",
65 | action="store_true",
66 | default=False,
67 | help="Only output packages installed in user-site.",
68 | )
69 | self.cmd_opts.add_option(cmdoptions.list_path())
70 | self.cmd_opts.add_option(
71 | "--all",
72 | dest="freeze_all",
73 | action="store_true",
74 | help=(
75 | "Do not skip these packages in the output:"
76 | " {}".format(", ".join(_dev_pkgs()))
77 | ),
78 | )
79 | self.cmd_opts.add_option(
80 | "--exclude-editable",
81 | dest="exclude_editable",
82 | action="store_true",
83 | help="Exclude editable package from output.",
84 | )
85 | self.cmd_opts.add_option(cmdoptions.list_exclude())
86 |
87 | self.parser.insert_option_group(0, self.cmd_opts)
88 |
89 | def run(self, options: Values, args: List[str]) -> int:
90 | skip = set(stdlib_pkgs)
91 | if not options.freeze_all:
92 | skip.update(_dev_pkgs())
93 |
94 | if options.excludes:
95 | skip.update(options.excludes)
96 |
97 | cmdoptions.check_list_path_option(options)
98 |
99 | for line in freeze(
100 | requirement=options.requirements,
101 | local_only=options.local,
102 | user_only=options.user,
103 | paths=options.path,
104 | isolated=options.isolated_mode,
105 | skip=skip,
106 | exclude_editable=options.exclude_editable,
107 | ):
108 | sys.stdout.write(line + "\n")
109 | return SUCCESS
110 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py:
--------------------------------------------------------------------------------
```python
1 | from datetime import datetime
2 | from typing import Iterable, List, Optional, TYPE_CHECKING, Union, Callable
3 |
4 |
5 | from .text import Text, TextType
6 |
7 | if TYPE_CHECKING:
8 | from .console import Console, ConsoleRenderable, RenderableType
9 | from .table import Table
10 |
11 | FormatTimeCallable = Callable[[datetime], Text]
12 |
13 |
14 | class LogRender:
15 | def __init__(
16 | self,
17 | show_time: bool = True,
18 | show_level: bool = False,
19 | show_path: bool = True,
20 | time_format: Union[str, FormatTimeCallable] = "[%x %X]",
21 | omit_repeated_times: bool = True,
22 | level_width: Optional[int] = 8,
23 | ) -> None:
24 | self.show_time = show_time
25 | self.show_level = show_level
26 | self.show_path = show_path
27 | self.time_format = time_format
28 | self.omit_repeated_times = omit_repeated_times
29 | self.level_width = level_width
30 | self._last_time: Optional[Text] = None
31 |
32 | def __call__(
33 | self,
34 | console: "Console",
35 | renderables: Iterable["ConsoleRenderable"],
36 | log_time: Optional[datetime] = None,
37 | time_format: Optional[Union[str, FormatTimeCallable]] = None,
38 | level: TextType = "",
39 | path: Optional[str] = None,
40 | line_no: Optional[int] = None,
41 | link_path: Optional[str] = None,
42 | ) -> "Table":
43 | from .containers import Renderables
44 | from .table import Table
45 |
46 | output = Table.grid(padding=(0, 1))
47 | output.expand = True
48 | if self.show_time:
49 | output.add_column(style="log.time")
50 | if self.show_level:
51 | output.add_column(style="log.level", width=self.level_width)
52 | output.add_column(ratio=1, style="log.message", overflow="fold")
53 | if self.show_path and path:
54 | output.add_column(style="log.path")
55 | row: List["RenderableType"] = []
56 | if self.show_time:
57 | log_time = log_time or console.get_datetime()
58 | time_format = time_format or self.time_format
59 | if callable(time_format):
60 | log_time_display = time_format(log_time)
61 | else:
62 | log_time_display = Text(log_time.strftime(time_format))
63 | if log_time_display == self._last_time and self.omit_repeated_times:
64 | row.append(Text(" " * len(log_time_display)))
65 | else:
66 | row.append(log_time_display)
67 | self._last_time = log_time_display
68 | if self.show_level:
69 | row.append(level)
70 |
71 | row.append(Renderables(renderables))
72 | if self.show_path and path:
73 | path_text = Text()
74 | path_text.append(
75 | path, style=f"link file://{link_path}" if link_path else ""
76 | )
77 | if line_no:
78 | path_text.append(":")
79 | path_text.append(
80 | f"{line_no}",
81 | style=f"link file://{link_path}#{line_no}" if link_path else "",
82 | )
83 | row.append(path_text)
84 |
85 | output.add_row(*row)
86 | return output
87 |
88 |
89 | if __name__ == "__main__": # pragma: no cover
90 | from pip._vendor.rich.console import Console
91 |
92 | c = Console()
93 | c.print("[on blue]Hello", justify="right")
94 | c.log("[on blue]hello", justify="right")
95 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/html/_html5builder.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Legacy module - don't use in new code!
3 |
4 | html5lib now has its own proper implementation.
5 |
6 | This module implements a tree builder for html5lib that generates lxml
7 | html element trees. This module uses camelCase as it follows the
8 | html5lib style guide.
9 | """
10 |
11 | from html5lib.treebuilders import _base, etree as etree_builders
12 | from lxml import html, etree
13 |
14 |
15 | class DocumentType:
16 |
17 | def __init__(self, name, publicId, systemId):
18 | self.name = name
19 | self.publicId = publicId
20 | self.systemId = systemId
21 |
22 | class Document:
23 |
24 | def __init__(self):
25 | self._elementTree = None
26 | self.childNodes = []
27 |
28 | def appendChild(self, element):
29 | self._elementTree.getroot().addnext(element._element)
30 |
31 |
32 | class TreeBuilder(_base.TreeBuilder):
33 | documentClass = Document
34 | doctypeClass = DocumentType
35 | elementClass = None
36 | commentClass = None
37 | fragmentClass = Document
38 |
39 | def __init__(self, *args, **kwargs):
40 | html_builder = etree_builders.getETreeModule(html, fullTree=False)
41 | etree_builder = etree_builders.getETreeModule(etree, fullTree=False)
42 | self.elementClass = html_builder.Element
43 | self.commentClass = etree_builder.Comment
44 | _base.TreeBuilder.__init__(self, *args, **kwargs)
45 |
46 | def reset(self):
47 | _base.TreeBuilder.reset(self)
48 | self.rootInserted = False
49 | self.initialComments = []
50 | self.doctype = None
51 |
52 | def getDocument(self):
53 | return self.document._elementTree
54 |
55 | def getFragment(self):
56 | fragment = []
57 | element = self.openElements[0]._element
58 | if element.text:
59 | fragment.append(element.text)
60 | fragment.extend(element.getchildren())
61 | if element.tail:
62 | fragment.append(element.tail)
63 | return fragment
64 |
65 | def insertDoctype(self, name, publicId, systemId):
66 | doctype = self.doctypeClass(name, publicId, systemId)
67 | self.doctype = doctype
68 |
69 | def insertComment(self, data, parent=None):
70 | if not self.rootInserted:
71 | self.initialComments.append(data)
72 | else:
73 | _base.TreeBuilder.insertComment(self, data, parent)
74 |
75 | def insertRoot(self, name):
76 | buf = []
77 | if self.doctype and self.doctype.name:
78 | buf.append('<!DOCTYPE %s' % self.doctype.name)
79 | if self.doctype.publicId is not None or self.doctype.systemId is not None:
80 | buf.append(' PUBLIC "%s" "%s"' % (self.doctype.publicId,
81 | self.doctype.systemId))
82 | buf.append('>')
83 | buf.append('<html></html>')
84 | root = html.fromstring(''.join(buf))
85 |
86 | # Append the initial comments:
87 | for comment in self.initialComments:
88 | root.addprevious(etree.Comment(comment))
89 |
90 | # Create the root document and add the ElementTree to it
91 | self.document = self.documentClass()
92 | self.document._elementTree = root.getroottree()
93 |
94 | # Add the root element to the internal child/open data structures
95 | root_element = self.elementClass(name)
96 | root_element._element = root
97 | self.document.childNodes.append(root_element)
98 | self.openElements.append(root_element)
99 |
100 | self.rootInserted = True
101 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py:
--------------------------------------------------------------------------------
```python
1 | from typing import Optional, Union
2 |
3 | from .color import Color
4 | from .console import Console, ConsoleOptions, RenderResult
5 | from .jupyter import JupyterMixin
6 | from .measure import Measurement
7 | from .segment import Segment
8 | from .style import Style
9 |
10 | # There are left-aligned characters for 1/8 to 7/8, but
11 | # the right-aligned characters exist only for 1/8 and 4/8.
12 | BEGIN_BLOCK_ELEMENTS = ["█", "█", "█", "▐", "▐", "▐", "▕", "▕"]
13 | END_BLOCK_ELEMENTS = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉"]
14 | FULL_BLOCK = "█"
15 |
16 |
17 | class Bar(JupyterMixin):
18 | """Renders a solid block bar.
19 |
20 | Args:
21 | size (float): Value for the end of the bar.
22 | begin (float): Begin point (between 0 and size, inclusive).
23 | end (float): End point (between 0 and size, inclusive).
24 | width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None.
25 | color (Union[Color, str], optional): Color of the bar. Defaults to "default".
26 | bgcolor (Union[Color, str], optional): Color of bar background. Defaults to "default".
27 | """
28 |
29 | def __init__(
30 | self,
31 | size: float,
32 | begin: float,
33 | end: float,
34 | *,
35 | width: Optional[int] = None,
36 | color: Union[Color, str] = "default",
37 | bgcolor: Union[Color, str] = "default",
38 | ):
39 | self.size = size
40 | self.begin = max(begin, 0)
41 | self.end = min(end, size)
42 | self.width = width
43 | self.style = Style(color=color, bgcolor=bgcolor)
44 |
45 | def __repr__(self) -> str:
46 | return f"Bar({self.size}, {self.begin}, {self.end})"
47 |
48 | def __rich_console__(
49 | self, console: Console, options: ConsoleOptions
50 | ) -> RenderResult:
51 | width = min(
52 | self.width if self.width is not None else options.max_width,
53 | options.max_width,
54 | )
55 |
56 | if self.begin >= self.end:
57 | yield Segment(" " * width, self.style)
58 | yield Segment.line()
59 | return
60 |
61 | prefix_complete_eights = int(width * 8 * self.begin / self.size)
62 | prefix_bar_count = prefix_complete_eights // 8
63 | prefix_eights_count = prefix_complete_eights % 8
64 |
65 | body_complete_eights = int(width * 8 * self.end / self.size)
66 | body_bar_count = body_complete_eights // 8
67 | body_eights_count = body_complete_eights % 8
68 |
69 | # When start and end fall into the same cell, we ideally should render
70 | # a symbol that's "center-aligned", but there is no good symbol in Unicode.
71 | # In this case, we fall back to right-aligned block symbol for simplicity.
72 |
73 | prefix = " " * prefix_bar_count
74 | if prefix_eights_count:
75 | prefix += BEGIN_BLOCK_ELEMENTS[prefix_eights_count]
76 |
77 | body = FULL_BLOCK * body_bar_count
78 | if body_eights_count:
79 | body += END_BLOCK_ELEMENTS[body_eights_count]
80 |
81 | suffix = " " * (width - len(body))
82 |
83 | yield Segment(prefix + body[len(prefix) :] + suffix, self.style)
84 | yield Segment.line()
85 |
86 | def __rich_measure__(
87 | self, console: Console, options: ConsoleOptions
88 | ) -> Measurement:
89 | return (
90 | Measurement(self.width, self.width)
91 | if self.width is not None
92 | else Measurement(4, options.max_width)
93 | )
94 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/datastructures/csp.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | from .mixins import UpdateDictMixin
4 |
5 |
6 | def csp_property(key):
7 | """Return a new property object for a content security policy header.
8 | Useful if you want to add support for a csp extension in a
9 | subclass.
10 | """
11 | return property(
12 | lambda x: x._get_value(key),
13 | lambda x, v: x._set_value(key, v),
14 | lambda x: x._del_value(key),
15 | f"accessor for {key!r}",
16 | )
17 |
18 |
19 | class ContentSecurityPolicy(UpdateDictMixin, dict):
20 | """Subclass of a dict that stores values for a Content Security Policy
21 | header. It has accessors for all the level 3 policies.
22 |
23 | Because the csp directives in the HTTP header use dashes the
24 | python descriptors use underscores for that.
25 |
26 | To get a header of the :class:`ContentSecuirtyPolicy` object again
27 | you can convert the object into a string or call the
28 | :meth:`to_header` method. If you plan to subclass it and add your
29 | own items have a look at the sourcecode for that class.
30 |
31 | .. versionadded:: 1.0.0
32 | Support for Content Security Policy headers was added.
33 |
34 | """
35 |
36 | base_uri = csp_property("base-uri")
37 | child_src = csp_property("child-src")
38 | connect_src = csp_property("connect-src")
39 | default_src = csp_property("default-src")
40 | font_src = csp_property("font-src")
41 | form_action = csp_property("form-action")
42 | frame_ancestors = csp_property("frame-ancestors")
43 | frame_src = csp_property("frame-src")
44 | img_src = csp_property("img-src")
45 | manifest_src = csp_property("manifest-src")
46 | media_src = csp_property("media-src")
47 | navigate_to = csp_property("navigate-to")
48 | object_src = csp_property("object-src")
49 | prefetch_src = csp_property("prefetch-src")
50 | plugin_types = csp_property("plugin-types")
51 | report_to = csp_property("report-to")
52 | report_uri = csp_property("report-uri")
53 | sandbox = csp_property("sandbox")
54 | script_src = csp_property("script-src")
55 | script_src_attr = csp_property("script-src-attr")
56 | script_src_elem = csp_property("script-src-elem")
57 | style_src = csp_property("style-src")
58 | style_src_attr = csp_property("style-src-attr")
59 | style_src_elem = csp_property("style-src-elem")
60 | worker_src = csp_property("worker-src")
61 |
62 | def __init__(self, values=(), on_update=None):
63 | dict.__init__(self, values or ())
64 | self.on_update = on_update
65 | self.provided = values is not None
66 |
67 | def _get_value(self, key):
68 | """Used internally by the accessor properties."""
69 | return self.get(key)
70 |
71 | def _set_value(self, key, value):
72 | """Used internally by the accessor properties."""
73 | if value is None:
74 | self.pop(key, None)
75 | else:
76 | self[key] = value
77 |
78 | def _del_value(self, key):
79 | """Used internally by the accessor properties."""
80 | if key in self:
81 | del self[key]
82 |
83 | def to_header(self):
84 | """Convert the stored values into a cache control header."""
85 | from ..http import dump_csp_header
86 |
87 | return dump_csp_header(self)
88 |
89 | def __str__(self):
90 | return self.to_header()
91 |
92 | def __repr__(self):
93 | kv_str = " ".join(f"{k}={v!r}" for k, v in sorted(self.items()))
94 | return f"<{type(self).__name__} {kv_str}>"
95 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py:
--------------------------------------------------------------------------------
```python
1 | from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Sequence
2 |
3 | if TYPE_CHECKING:
4 | from pip._vendor.rich.console import ConsoleRenderable
5 |
6 | from . import get_console
7 | from .segment import Segment
8 | from .terminal_theme import DEFAULT_TERMINAL_THEME
9 |
10 | if TYPE_CHECKING:
11 | from pip._vendor.rich.console import ConsoleRenderable
12 |
13 | JUPYTER_HTML_FORMAT = """\
14 | <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">{code}</pre>
15 | """
16 |
17 |
18 | class JupyterRenderable:
19 | """A shim to write html to Jupyter notebook."""
20 |
21 | def __init__(self, html: str, text: str) -> None:
22 | self.html = html
23 | self.text = text
24 |
25 | def _repr_mimebundle_(
26 | self, include: Sequence[str], exclude: Sequence[str], **kwargs: Any
27 | ) -> Dict[str, str]:
28 | data = {"text/plain": self.text, "text/html": self.html}
29 | if include:
30 | data = {k: v for (k, v) in data.items() if k in include}
31 | if exclude:
32 | data = {k: v for (k, v) in data.items() if k not in exclude}
33 | return data
34 |
35 |
36 | class JupyterMixin:
37 | """Add to an Rich renderable to make it render in Jupyter notebook."""
38 |
39 | __slots__ = ()
40 |
41 | def _repr_mimebundle_(
42 | self: "ConsoleRenderable",
43 | include: Sequence[str],
44 | exclude: Sequence[str],
45 | **kwargs: Any,
46 | ) -> Dict[str, str]:
47 | console = get_console()
48 | segments = list(console.render(self, console.options))
49 | html = _render_segments(segments)
50 | text = console._render_buffer(segments)
51 | data = {"text/plain": text, "text/html": html}
52 | if include:
53 | data = {k: v for (k, v) in data.items() if k in include}
54 | if exclude:
55 | data = {k: v for (k, v) in data.items() if k not in exclude}
56 | return data
57 |
58 |
59 | def _render_segments(segments: Iterable[Segment]) -> str:
60 | def escape(text: str) -> str:
61 | """Escape html."""
62 | return text.replace("&", "&").replace("<", "<").replace(">", ">")
63 |
64 | fragments: List[str] = []
65 | append_fragment = fragments.append
66 | theme = DEFAULT_TERMINAL_THEME
67 | for text, style, control in Segment.simplify(segments):
68 | if control:
69 | continue
70 | text = escape(text)
71 | if style:
72 | rule = style.get_html_style(theme)
73 | text = f'<span style="{rule}">{text}</span>' if rule else text
74 | if style.link:
75 | text = f'<a href="{style.link}" target="_blank">{text}</a>'
76 | append_fragment(text)
77 |
78 | code = "".join(fragments)
79 | html = JUPYTER_HTML_FORMAT.format(code=code)
80 |
81 | return html
82 |
83 |
84 | def display(segments: Iterable[Segment], text: str) -> None:
85 | """Render segments to Jupyter."""
86 | html = _render_segments(segments)
87 | jupyter_renderable = JupyterRenderable(html, text)
88 | try:
89 | from IPython.display import display as ipython_display
90 |
91 | ipython_display(jupyter_renderable)
92 | except ModuleNotFoundError:
93 | # Handle the case where the Console has force_jupyter=True,
94 | # but IPython is not installed.
95 | pass
96 |
97 |
98 | def print(*args: Any, **kwargs: Any) -> None:
99 | """Proxy for Console print."""
100 | console = get_console()
101 | return console.print(*args, **kwargs)
102 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | ELF file parser.
3 |
4 | This provides a class ``ELFFile`` that parses an ELF executable in a similar
5 | interface to ``ZipFile``. Only the read interface is implemented.
6 |
7 | Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
8 | ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
9 | """
10 |
11 | from __future__ import annotations
12 |
13 | import enum
14 | import os
15 | import struct
16 | from typing import IO
17 |
18 |
19 | class ELFInvalid(ValueError):
20 | pass
21 |
22 |
23 | class EIClass(enum.IntEnum):
24 | C32 = 1
25 | C64 = 2
26 |
27 |
28 | class EIData(enum.IntEnum):
29 | Lsb = 1
30 | Msb = 2
31 |
32 |
33 | class EMachine(enum.IntEnum):
34 | I386 = 3
35 | S390 = 22
36 | Arm = 40
37 | X8664 = 62
38 | AArc64 = 183
39 |
40 |
41 | class ELFFile:
42 | """
43 | Representation of an ELF executable.
44 | """
45 |
46 | def __init__(self, f: IO[bytes]) -> None:
47 | self._f = f
48 |
49 | try:
50 | ident = self._read("16B")
51 | except struct.error:
52 | raise ELFInvalid("unable to parse identification")
53 | magic = bytes(ident[:4])
54 | if magic != b"\x7fELF":
55 | raise ELFInvalid(f"invalid magic: {magic!r}")
56 |
57 | self.capacity = ident[4] # Format for program header (bitness).
58 | self.encoding = ident[5] # Data structure encoding (endianness).
59 |
60 | try:
61 | # e_fmt: Format for program header.
62 | # p_fmt: Format for section header.
63 | # p_idx: Indexes to find p_type, p_offset, and p_filesz.
64 | e_fmt, self._p_fmt, self._p_idx = {
65 | (1, 1): ("<HHIIIIIHHH", "<IIIIIIII", (0, 1, 4)), # 32-bit LSB.
66 | (1, 2): (">HHIIIIIHHH", ">IIIIIIII", (0, 1, 4)), # 32-bit MSB.
67 | (2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB.
68 | (2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
69 | }[(self.capacity, self.encoding)]
70 | except KeyError:
71 | raise ELFInvalid(
72 | f"unrecognized capacity ({self.capacity}) or "
73 | f"encoding ({self.encoding})"
74 | )
75 |
76 | try:
77 | (
78 | _,
79 | self.machine, # Architecture type.
80 | _,
81 | _,
82 | self._e_phoff, # Offset of program header.
83 | _,
84 | self.flags, # Processor-specific flags.
85 | _,
86 | self._e_phentsize, # Size of section.
87 | self._e_phnum, # Number of sections.
88 | ) = self._read(e_fmt)
89 | except struct.error as e:
90 | raise ELFInvalid("unable to parse machine and section information") from e
91 |
92 | def _read(self, fmt: str) -> tuple[int, ...]:
93 | return struct.unpack(fmt, self._f.read(struct.calcsize(fmt)))
94 |
95 | @property
96 | def interpreter(self) -> str | None:
97 | """
98 | The path recorded in the ``PT_INTERP`` section header.
99 | """
100 | for index in range(self._e_phnum):
101 | self._f.seek(self._e_phoff + self._e_phentsize * index)
102 | try:
103 | data = self._read(self._p_fmt)
104 | except struct.error:
105 | continue
106 | if data[self._p_idx[0]] != 3: # Not PT_INTERP.
107 | continue
108 | self._f.seek(data[self._p_idx[1]])
109 | return os.fsdecode(self._f.read(data[self._p_idx[2]])).strip("\0")
110 | return None
111 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/cssselect.py:
--------------------------------------------------------------------------------
```python
1 | """CSS Selectors based on XPath.
2 |
3 | This module supports selecting XML/HTML tags based on CSS selectors.
4 | See the `CSSSelector` class for details.
5 |
6 | This is a thin wrapper around cssselect 0.7 or later.
7 | """
8 |
9 |
10 | from . import etree
11 | try:
12 | import cssselect as external_cssselect
13 | except ImportError:
14 | raise ImportError(
15 | 'cssselect does not seem to be installed. '
16 | 'See https://pypi.org/project/cssselect/')
17 |
18 |
19 | SelectorSyntaxError = external_cssselect.SelectorSyntaxError
20 | ExpressionError = external_cssselect.ExpressionError
21 | SelectorError = external_cssselect.SelectorError
22 |
23 |
24 | __all__ = ['SelectorSyntaxError', 'ExpressionError', 'SelectorError',
25 | 'CSSSelector']
26 |
27 |
28 | class LxmlTranslator(external_cssselect.GenericTranslator):
29 | """
30 | A custom CSS selector to XPath translator with lxml-specific extensions.
31 | """
32 | def xpath_contains_function(self, xpath, function):
33 | # Defined there, removed in later drafts:
34 | # http://www.w3.org/TR/2001/CR-css3-selectors-20011113/#content-selectors
35 | if function.argument_types() not in (['STRING'], ['IDENT']):
36 | raise ExpressionError(
37 | "Expected a single string or ident for :contains(), got %r"
38 | % function.arguments)
39 | value = function.arguments[0].value
40 | return xpath.add_condition(
41 | 'contains(__lxml_internal_css:lower-case(string(.)), %s)'
42 | % self.xpath_literal(value.lower()))
43 |
44 |
45 | class LxmlHTMLTranslator(LxmlTranslator, external_cssselect.HTMLTranslator):
46 | """
47 | lxml extensions + HTML support.
48 | """
49 |
50 |
51 | def _make_lower_case(context, s):
52 | return s.lower()
53 |
54 | ns = etree.FunctionNamespace('http://codespeak.net/lxml/css/')
55 | ns.prefix = '__lxml_internal_css'
56 | ns['lower-case'] = _make_lower_case
57 |
58 |
59 | class CSSSelector(etree.XPath):
60 | """A CSS selector.
61 |
62 | Usage::
63 |
64 | >>> from lxml import etree, cssselect
65 | >>> select = cssselect.CSSSelector("a tag > child")
66 |
67 | >>> root = etree.XML("<a><b><c/><tag><child>TEXT</child></tag></b></a>")
68 | >>> [ el.tag for el in select(root) ]
69 | ['child']
70 |
71 | To use CSS namespaces, you need to pass a prefix-to-namespace
72 | mapping as ``namespaces`` keyword argument::
73 |
74 | >>> rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
75 | >>> select_ns = cssselect.CSSSelector('root > rdf|Description',
76 | ... namespaces={'rdf': rdfns})
77 |
78 | >>> rdf = etree.XML((
79 | ... '<root xmlns:rdf="%s">'
80 | ... '<rdf:Description>blah</rdf:Description>'
81 | ... '</root>') % rdfns)
82 | >>> [(el.tag, el.text) for el in select_ns(rdf)]
83 | [('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description', 'blah')]
84 |
85 | """
86 | def __init__(self, css, namespaces=None, translator='xml'):
87 | if translator == 'xml':
88 | translator = LxmlTranslator()
89 | elif translator == 'html':
90 | translator = LxmlHTMLTranslator()
91 | elif translator == 'xhtml':
92 | translator = LxmlHTMLTranslator(xhtml=True)
93 | path = translator.css_to_xpath(css)
94 | super().__init__(path, namespaces=namespaces)
95 | self.css = css
96 |
97 | def __repr__(self):
98 | return '<%s %x for %r>' % (
99 | self.__class__.__name__,
100 | abs(id(self)),
101 | self.css)
102 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/_mapping.py:
--------------------------------------------------------------------------------
```python
1 | # Automatically generated by scripts/gen_mapfiles.py.
2 | # DO NOT EDIT BY HAND; run `tox -e mapfiles` instead.
3 |
4 | STYLES = {
5 | 'AbapStyle': ('pygments.styles.abap', 'abap', ()),
6 | 'AlgolStyle': ('pygments.styles.algol', 'algol', ()),
7 | 'Algol_NuStyle': ('pygments.styles.algol_nu', 'algol_nu', ()),
8 | 'ArduinoStyle': ('pygments.styles.arduino', 'arduino', ()),
9 | 'AutumnStyle': ('pygments.styles.autumn', 'autumn', ()),
10 | 'BlackWhiteStyle': ('pygments.styles.bw', 'bw', ()),
11 | 'BorlandStyle': ('pygments.styles.borland', 'borland', ()),
12 | 'CoffeeStyle': ('pygments.styles.coffee', 'coffee', ()),
13 | 'ColorfulStyle': ('pygments.styles.colorful', 'colorful', ()),
14 | 'DefaultStyle': ('pygments.styles.default', 'default', ()),
15 | 'DraculaStyle': ('pygments.styles.dracula', 'dracula', ()),
16 | 'EmacsStyle': ('pygments.styles.emacs', 'emacs', ()),
17 | 'FriendlyGrayscaleStyle': ('pygments.styles.friendly_grayscale', 'friendly_grayscale', ()),
18 | 'FriendlyStyle': ('pygments.styles.friendly', 'friendly', ()),
19 | 'FruityStyle': ('pygments.styles.fruity', 'fruity', ()),
20 | 'GhDarkStyle': ('pygments.styles.gh_dark', 'github-dark', ()),
21 | 'GruvboxDarkStyle': ('pygments.styles.gruvbox', 'gruvbox-dark', ()),
22 | 'GruvboxLightStyle': ('pygments.styles.gruvbox', 'gruvbox-light', ()),
23 | 'IgorStyle': ('pygments.styles.igor', 'igor', ()),
24 | 'InkPotStyle': ('pygments.styles.inkpot', 'inkpot', ()),
25 | 'LightbulbStyle': ('pygments.styles.lightbulb', 'lightbulb', ()),
26 | 'LilyPondStyle': ('pygments.styles.lilypond', 'lilypond', ()),
27 | 'LovelaceStyle': ('pygments.styles.lovelace', 'lovelace', ()),
28 | 'ManniStyle': ('pygments.styles.manni', 'manni', ()),
29 | 'MaterialStyle': ('pygments.styles.material', 'material', ()),
30 | 'MonokaiStyle': ('pygments.styles.monokai', 'monokai', ()),
31 | 'MurphyStyle': ('pygments.styles.murphy', 'murphy', ()),
32 | 'NativeStyle': ('pygments.styles.native', 'native', ()),
33 | 'NordDarkerStyle': ('pygments.styles.nord', 'nord-darker', ()),
34 | 'NordStyle': ('pygments.styles.nord', 'nord', ()),
35 | 'OneDarkStyle': ('pygments.styles.onedark', 'one-dark', ()),
36 | 'ParaisoDarkStyle': ('pygments.styles.paraiso_dark', 'paraiso-dark', ()),
37 | 'ParaisoLightStyle': ('pygments.styles.paraiso_light', 'paraiso-light', ()),
38 | 'PastieStyle': ('pygments.styles.pastie', 'pastie', ()),
39 | 'PerldocStyle': ('pygments.styles.perldoc', 'perldoc', ()),
40 | 'RainbowDashStyle': ('pygments.styles.rainbow_dash', 'rainbow_dash', ()),
41 | 'RrtStyle': ('pygments.styles.rrt', 'rrt', ()),
42 | 'SasStyle': ('pygments.styles.sas', 'sas', ()),
43 | 'SolarizedDarkStyle': ('pygments.styles.solarized', 'solarized-dark', ()),
44 | 'SolarizedLightStyle': ('pygments.styles.solarized', 'solarized-light', ()),
45 | 'StarofficeStyle': ('pygments.styles.staroffice', 'staroffice', ()),
46 | 'StataDarkStyle': ('pygments.styles.stata_dark', 'stata-dark', ()),
47 | 'StataLightStyle': ('pygments.styles.stata_light', 'stata-light', ()),
48 | 'TangoStyle': ('pygments.styles.tango', 'tango', ()),
49 | 'TracStyle': ('pygments.styles.trac', 'trac', ()),
50 | 'VimStyle': ('pygments.styles.vim', 'vim', ()),
51 | 'VisualStudioStyle': ('pygments.styles.vs', 'vs', ()),
52 | 'XcodeStyle': ('pygments.styles.xcode', 'xcode', ()),
53 | 'ZenburnStyle': ('pygments.styles.zenburn', 'zenburn', ()),
54 | }
55 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.formatters.bbcode
3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~
4 |
5 | BBcode formatter.
6 |
7 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8 | :license: BSD, see LICENSE for details.
9 | """
10 |
11 |
12 | from pip._vendor.pygments.formatter import Formatter
13 | from pip._vendor.pygments.util import get_bool_opt
14 |
15 | __all__ = ['BBCodeFormatter']
16 |
17 |
18 | class BBCodeFormatter(Formatter):
19 | """
20 | Format tokens with BBcodes. These formatting codes are used by many
21 | bulletin boards, so you can highlight your sourcecode with pygments before
22 | posting it there.
23 |
24 | This formatter has no support for background colors and borders, as there
25 | are no common BBcode tags for that.
26 |
27 | Some board systems (e.g. phpBB) don't support colors in their [code] tag,
28 | so you can't use the highlighting together with that tag.
29 | Text in a [code] tag usually is shown with a monospace font (which this
30 | formatter can do with the ``monofont`` option) and no spaces (which you
31 | need for indentation) are removed.
32 |
33 | Additional options accepted:
34 |
35 | `style`
36 | The style to use, can be a string or a Style subclass (default:
37 | ``'default'``).
38 |
39 | `codetag`
40 | If set to true, put the output into ``[code]`` tags (default:
41 | ``false``)
42 |
43 | `monofont`
44 | If set to true, add a tag to show the code with a monospace font
45 | (default: ``false``).
46 | """
47 | name = 'BBCode'
48 | aliases = ['bbcode', 'bb']
49 | filenames = []
50 |
51 | def __init__(self, **options):
52 | Formatter.__init__(self, **options)
53 | self._code = get_bool_opt(options, 'codetag', False)
54 | self._mono = get_bool_opt(options, 'monofont', False)
55 |
56 | self.styles = {}
57 | self._make_styles()
58 |
59 | def _make_styles(self):
60 | for ttype, ndef in self.style:
61 | start = end = ''
62 | if ndef['color']:
63 | start += '[color=#{}]'.format(ndef['color'])
64 | end = '[/color]' + end
65 | if ndef['bold']:
66 | start += '[b]'
67 | end = '[/b]' + end
68 | if ndef['italic']:
69 | start += '[i]'
70 | end = '[/i]' + end
71 | if ndef['underline']:
72 | start += '[u]'
73 | end = '[/u]' + end
74 | # there are no common BBcodes for background-color and border
75 |
76 | self.styles[ttype] = start, end
77 |
78 | def format_unencoded(self, tokensource, outfile):
79 | if self._code:
80 | outfile.write('[code]')
81 | if self._mono:
82 | outfile.write('[font=monospace]')
83 |
84 | lastval = ''
85 | lasttype = None
86 |
87 | for ttype, value in tokensource:
88 | while ttype not in self.styles:
89 | ttype = ttype.parent
90 | if ttype == lasttype:
91 | lastval += value
92 | else:
93 | if lastval:
94 | start, end = self.styles[lasttype]
95 | outfile.write(''.join((start, lastval, end)))
96 | lastval = value
97 | lasttype = ttype
98 |
99 | if lastval:
100 | start, end = self.styles[lasttype]
101 | outfile.write(''.join((start, lastval, end)))
102 |
103 | if self._mono:
104 | outfile.write('[/font]')
105 | if self._code:
106 | outfile.write('[/code]')
107 | if self._code or self._mono:
108 | outfile.write('\n')
109 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import re
4 | from typing import Iterable
5 |
6 | from ._loop import loop_last
7 | from .cells import cell_len, chop_cells
8 |
9 | re_word = re.compile(r"\s*\S+\s*")
10 |
11 |
12 | def words(text: str) -> Iterable[tuple[int, int, str]]:
13 | """Yields each word from the text as a tuple
14 | containing (start_index, end_index, word). A "word" in this context may
15 | include the actual word and any whitespace to the right.
16 | """
17 | position = 0
18 | word_match = re_word.match(text, position)
19 | while word_match is not None:
20 | start, end = word_match.span()
21 | word = word_match.group(0)
22 | yield start, end, word
23 | word_match = re_word.match(text, end)
24 |
25 |
26 | def divide_line(text: str, width: int, fold: bool = True) -> list[int]:
27 | """Given a string of text, and a width (measured in cells), return a list
28 | of cell offsets which the string should be split at in order for it to fit
29 | within the given width.
30 |
31 | Args:
32 | text: The text to examine.
33 | width: The available cell width.
34 | fold: If True, words longer than `width` will be folded onto a new line.
35 |
36 | Returns:
37 | A list of indices to break the line at.
38 | """
39 | break_positions: list[int] = [] # offsets to insert the breaks at
40 | append = break_positions.append
41 | cell_offset = 0
42 | _cell_len = cell_len
43 |
44 | for start, _end, word in words(text):
45 | word_length = _cell_len(word.rstrip())
46 | remaining_space = width - cell_offset
47 | word_fits_remaining_space = remaining_space >= word_length
48 |
49 | if word_fits_remaining_space:
50 | # Simplest case - the word fits within the remaining width for this line.
51 | cell_offset += _cell_len(word)
52 | else:
53 | # Not enough space remaining for this word on the current line.
54 | if word_length > width:
55 | # The word doesn't fit on any line, so we can't simply
56 | # place it on the next line...
57 | if fold:
58 | # Fold the word across multiple lines.
59 | folded_word = chop_cells(word, width=width)
60 | for last, line in loop_last(folded_word):
61 | if start:
62 | append(start)
63 | if last:
64 | cell_offset = _cell_len(line)
65 | else:
66 | start += len(line)
67 | else:
68 | # Folding isn't allowed, so crop the word.
69 | if start:
70 | append(start)
71 | cell_offset = _cell_len(word)
72 | elif cell_offset and start:
73 | # The word doesn't fit within the remaining space on the current
74 | # line, but it *can* fit on to the next (empty) line.
75 | append(start)
76 | cell_offset = _cell_len(word)
77 |
78 | return break_positions
79 |
80 |
81 | if __name__ == "__main__": # pragma: no cover
82 | from .console import Console
83 |
84 | console = Console(width=10)
85 | console.print("12345 abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ 12345")
86 | print(chop_cells("abcdefghijklmnopqrstuvwxyz", 10))
87 |
88 | console = Console(width=20)
89 | console.rule()
90 | console.print("TextualはPythonの高速アプリケーション開発フレームワークです")
91 |
92 | console.rule()
93 | console.print("アプリケーションは1670万色を使用でき")
94 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more
3 | """
4 | from __future__ import absolute_import
5 |
6 | # Set default logging handler to avoid "No handler found" warnings.
7 | import logging
8 | import warnings
9 | from logging import NullHandler
10 |
11 | from . import exceptions
12 | from ._version import __version__
13 | from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url
14 | from .filepost import encode_multipart_formdata
15 | from .poolmanager import PoolManager, ProxyManager, proxy_from_url
16 | from .response import HTTPResponse
17 | from .util.request import make_headers
18 | from .util.retry import Retry
19 | from .util.timeout import Timeout
20 | from .util.url import get_host
21 |
22 | # === NOTE TO REPACKAGERS AND VENDORS ===
23 | # Please delete this block, this logic is only
24 | # for urllib3 being distributed via PyPI.
25 | # See: https://github.com/urllib3/urllib3/issues/2680
26 | try:
27 | import urllib3_secure_extra # type: ignore # noqa: F401
28 | except ImportError:
29 | pass
30 | else:
31 | warnings.warn(
32 | "'urllib3[secure]' extra is deprecated and will be removed "
33 | "in a future release of urllib3 2.x. Read more in this issue: "
34 | "https://github.com/urllib3/urllib3/issues/2680",
35 | category=DeprecationWarning,
36 | stacklevel=2,
37 | )
38 |
39 | __author__ = "Andrey Petrov ([email protected])"
40 | __license__ = "MIT"
41 | __version__ = __version__
42 |
43 | __all__ = (
44 | "HTTPConnectionPool",
45 | "HTTPSConnectionPool",
46 | "PoolManager",
47 | "ProxyManager",
48 | "HTTPResponse",
49 | "Retry",
50 | "Timeout",
51 | "add_stderr_logger",
52 | "connection_from_url",
53 | "disable_warnings",
54 | "encode_multipart_formdata",
55 | "get_host",
56 | "make_headers",
57 | "proxy_from_url",
58 | )
59 |
60 | logging.getLogger(__name__).addHandler(NullHandler())
61 |
62 |
63 | def add_stderr_logger(level=logging.DEBUG):
64 | """
65 | Helper for quickly adding a StreamHandler to the logger. Useful for
66 | debugging.
67 |
68 | Returns the handler after adding it.
69 | """
70 | # This method needs to be in this __init__.py to get the __name__ correct
71 | # even if urllib3 is vendored within another package.
72 | logger = logging.getLogger(__name__)
73 | handler = logging.StreamHandler()
74 | handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))
75 | logger.addHandler(handler)
76 | logger.setLevel(level)
77 | logger.debug("Added a stderr logging handler to logger: %s", __name__)
78 | return handler
79 |
80 |
81 | # ... Clean up.
82 | del NullHandler
83 |
84 |
85 | # All warning filters *must* be appended unless you're really certain that they
86 | # shouldn't be: otherwise, it's very hard for users to use most Python
87 | # mechanisms to silence them.
88 | # SecurityWarning's always go off by default.
89 | warnings.simplefilter("always", exceptions.SecurityWarning, append=True)
90 | # SubjectAltNameWarning's should go off once per host
91 | warnings.simplefilter("default", exceptions.SubjectAltNameWarning, append=True)
92 | # InsecurePlatformWarning's don't vary between requests, so we keep it default.
93 | warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True)
94 | # SNIMissingWarnings should go off only once.
95 | warnings.simplefilter("default", exceptions.SNIMissingWarning, append=True)
96 |
97 |
98 | def disable_warnings(category=exceptions.HTTPWarning):
99 | """
100 | Helper for quickly disabling all urllib3 warnings.
101 | """
102 | warnings.simplefilter("ignore", category)
103 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py:
--------------------------------------------------------------------------------
```python
1 | """Functions brought over from jaraco.text.
2 |
3 | These functions are not supposed to be used within `pip._internal`. These are
4 | helper functions brought over from `jaraco.text` to enable vendoring newer
5 | copies of `pkg_resources` without having to vendor `jaraco.text` and its entire
6 | dependency cone; something that our vendoring setup is not currently capable of
7 | handling.
8 |
9 | License reproduced from original source below:
10 |
11 | Copyright Jason R. Coombs
12 |
13 | Permission is hereby granted, free of charge, to any person obtaining a copy
14 | of this software and associated documentation files (the "Software"), to
15 | deal in the Software without restriction, including without limitation the
16 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17 | sell copies of the Software, and to permit persons to whom the Software is
18 | furnished to do so, subject to the following conditions:
19 |
20 | The above copyright notice and this permission notice shall be included in
21 | all copies or substantial portions of the Software.
22 |
23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29 | IN THE SOFTWARE.
30 | """
31 |
32 | import functools
33 | import itertools
34 |
35 |
36 | def _nonblank(str):
37 | return str and not str.startswith("#")
38 |
39 |
40 | @functools.singledispatch
41 | def yield_lines(iterable):
42 | r"""
43 | Yield valid lines of a string or iterable.
44 |
45 | >>> list(yield_lines(''))
46 | []
47 | >>> list(yield_lines(['foo', 'bar']))
48 | ['foo', 'bar']
49 | >>> list(yield_lines('foo\nbar'))
50 | ['foo', 'bar']
51 | >>> list(yield_lines('\nfoo\n#bar\nbaz #comment'))
52 | ['foo', 'baz #comment']
53 | >>> list(yield_lines(['foo\nbar', 'baz', 'bing\n\n\n']))
54 | ['foo', 'bar', 'baz', 'bing']
55 | """
56 | return itertools.chain.from_iterable(map(yield_lines, iterable))
57 |
58 |
59 | @yield_lines.register(str)
60 | def _(text):
61 | return filter(_nonblank, map(str.strip, text.splitlines()))
62 |
63 |
64 | def drop_comment(line):
65 | """
66 | Drop comments.
67 |
68 | >>> drop_comment('foo # bar')
69 | 'foo'
70 |
71 | A hash without a space may be in a URL.
72 |
73 | >>> drop_comment('http://example.com/foo#bar')
74 | 'http://example.com/foo#bar'
75 | """
76 | return line.partition(" #")[0]
77 |
78 |
79 | def join_continuation(lines):
80 | r"""
81 | Join lines continued by a trailing backslash.
82 |
83 | >>> list(join_continuation(['foo \\', 'bar', 'baz']))
84 | ['foobar', 'baz']
85 | >>> list(join_continuation(['foo \\', 'bar', 'baz']))
86 | ['foobar', 'baz']
87 | >>> list(join_continuation(['foo \\', 'bar \\', 'baz']))
88 | ['foobarbaz']
89 |
90 | Not sure why, but...
91 | The character preceding the backslash is also elided.
92 |
93 | >>> list(join_continuation(['goo\\', 'dly']))
94 | ['godly']
95 |
96 | A terrible idea, but...
97 | If no line is available to continue, suppress the lines.
98 |
99 | >>> list(join_continuation(['foo', 'bar\\', 'baz\\']))
100 | ['foo']
101 | """
102 | lines = iter(lines)
103 | for item in lines:
104 | while item.endswith("\\"):
105 | try:
106 | item = item[:-2].strip() + next(lines)
107 | except StopIteration:
108 | return
109 | yield item
110 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/soupsieve/util.py:
--------------------------------------------------------------------------------
```python
1 | """Utility."""
2 | from __future__ import annotations
3 | from functools import wraps, lru_cache
4 | import warnings
5 | import re
6 | from typing import Callable, Any
7 |
8 | DEBUG = 0x00001
9 |
10 | RE_PATTERN_LINE_SPLIT = re.compile(r'(?:\r\n|(?!\r\n)[\n\r])|$')
11 |
12 | UC_A = ord('A')
13 | UC_Z = ord('Z')
14 |
15 |
16 | @lru_cache(maxsize=512)
17 | def lower(string: str) -> str:
18 | """Lower."""
19 |
20 | new_string = []
21 | for c in string:
22 | o = ord(c)
23 | new_string.append(chr(o + 32) if UC_A <= o <= UC_Z else c)
24 | return ''.join(new_string)
25 |
26 |
27 | class SelectorSyntaxError(Exception):
28 | """Syntax error in a CSS selector."""
29 |
30 | def __init__(self, msg: str, pattern: str | None = None, index: int | None = None) -> None:
31 | """Initialize."""
32 |
33 | self.line = None
34 | self.col = None
35 | self.context = None
36 |
37 | if pattern is not None and index is not None:
38 | # Format pattern to show line and column position
39 | self.context, self.line, self.col = get_pattern_context(pattern, index)
40 | msg = f'{msg}\n line {self.line}:\n{self.context}'
41 |
42 | super().__init__(msg)
43 |
44 |
45 | def deprecated(message: str, stacklevel: int = 2) -> Callable[..., Any]: # pragma: no cover
46 | """
47 | Raise a `DeprecationWarning` when wrapped function/method is called.
48 |
49 | Usage:
50 |
51 | @deprecated("This method will be removed in version X; use Y instead.")
52 | def some_method()"
53 | pass
54 | """
55 |
56 | def _wrapper(func: Callable[..., Any]) -> Callable[..., Any]:
57 | @wraps(func)
58 | def _deprecated_func(*args: Any, **kwargs: Any) -> Any:
59 | warnings.warn(
60 | f"'{func.__name__}' is deprecated. {message}",
61 | category=DeprecationWarning,
62 | stacklevel=stacklevel
63 | )
64 | return func(*args, **kwargs)
65 | return _deprecated_func
66 | return _wrapper
67 |
68 |
69 | def warn_deprecated(message: str, stacklevel: int = 2) -> None: # pragma: no cover
70 | """Warn deprecated."""
71 |
72 | warnings.warn(
73 | message,
74 | category=DeprecationWarning,
75 | stacklevel=stacklevel
76 | )
77 |
78 |
79 | def get_pattern_context(pattern: str, index: int) -> tuple[str, int, int]:
80 | """Get the pattern context."""
81 |
82 | last = 0
83 | current_line = 1
84 | col = 1
85 | text = [] # type: list[str]
86 | line = 1
87 | offset = None # type: int | None
88 |
89 | # Split pattern by newline and handle the text before the newline
90 | for m in RE_PATTERN_LINE_SPLIT.finditer(pattern):
91 | linetext = pattern[last:m.start(0)]
92 | if not len(m.group(0)) and not len(text):
93 | indent = ''
94 | offset = -1
95 | col = index - last + 1
96 | elif last <= index < m.end(0):
97 | indent = '--> '
98 | offset = (-1 if index > m.start(0) else 0) + 3
99 | col = index - last + 1
100 | else:
101 | indent = ' '
102 | offset = None
103 | if len(text):
104 | # Regardless of whether we are presented with `\r\n`, `\r`, or `\n`,
105 | # we will render the output with just `\n`. We will still log the column
106 | # correctly though.
107 | text.append('\n')
108 | text.append(f'{indent}{linetext}')
109 | if offset is not None:
110 | text.append('\n')
111 | text.append(' ' * (col + offset) + '^')
112 | line = current_line
113 |
114 | current_line += 1
115 | last = m.end(0)
116 |
117 | return ''.join(text), line, col
118 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py:
--------------------------------------------------------------------------------
```python
1 | from typing import List, Optional, Tuple
2 |
3 | from .color_triplet import ColorTriplet
4 | from .palette import Palette
5 |
6 | _ColorTuple = Tuple[int, int, int]
7 |
8 |
9 | class TerminalTheme:
10 | """A color theme used when exporting console content.
11 |
12 | Args:
13 | background (Tuple[int, int, int]): The background color.
14 | foreground (Tuple[int, int, int]): The foreground (text) color.
15 | normal (List[Tuple[int, int, int]]): A list of 8 normal intensity colors.
16 | bright (List[Tuple[int, int, int]], optional): A list of 8 bright colors, or None
17 | to repeat normal intensity. Defaults to None.
18 | """
19 |
20 | def __init__(
21 | self,
22 | background: _ColorTuple,
23 | foreground: _ColorTuple,
24 | normal: List[_ColorTuple],
25 | bright: Optional[List[_ColorTuple]] = None,
26 | ) -> None:
27 | self.background_color = ColorTriplet(*background)
28 | self.foreground_color = ColorTriplet(*foreground)
29 | self.ansi_colors = Palette(normal + (bright or normal))
30 |
31 |
32 | DEFAULT_TERMINAL_THEME = TerminalTheme(
33 | (255, 255, 255),
34 | (0, 0, 0),
35 | [
36 | (0, 0, 0),
37 | (128, 0, 0),
38 | (0, 128, 0),
39 | (128, 128, 0),
40 | (0, 0, 128),
41 | (128, 0, 128),
42 | (0, 128, 128),
43 | (192, 192, 192),
44 | ],
45 | [
46 | (128, 128, 128),
47 | (255, 0, 0),
48 | (0, 255, 0),
49 | (255, 255, 0),
50 | (0, 0, 255),
51 | (255, 0, 255),
52 | (0, 255, 255),
53 | (255, 255, 255),
54 | ],
55 | )
56 |
57 | MONOKAI = TerminalTheme(
58 | (12, 12, 12),
59 | (217, 217, 217),
60 | [
61 | (26, 26, 26),
62 | (244, 0, 95),
63 | (152, 224, 36),
64 | (253, 151, 31),
65 | (157, 101, 255),
66 | (244, 0, 95),
67 | (88, 209, 235),
68 | (196, 197, 181),
69 | (98, 94, 76),
70 | ],
71 | [
72 | (244, 0, 95),
73 | (152, 224, 36),
74 | (224, 213, 97),
75 | (157, 101, 255),
76 | (244, 0, 95),
77 | (88, 209, 235),
78 | (246, 246, 239),
79 | ],
80 | )
81 | DIMMED_MONOKAI = TerminalTheme(
82 | (25, 25, 25),
83 | (185, 188, 186),
84 | [
85 | (58, 61, 67),
86 | (190, 63, 72),
87 | (135, 154, 59),
88 | (197, 166, 53),
89 | (79, 118, 161),
90 | (133, 92, 141),
91 | (87, 143, 164),
92 | (185, 188, 186),
93 | (136, 137, 135),
94 | ],
95 | [
96 | (251, 0, 31),
97 | (15, 114, 47),
98 | (196, 112, 51),
99 | (24, 109, 227),
100 | (251, 0, 103),
101 | (46, 112, 109),
102 | (253, 255, 185),
103 | ],
104 | )
105 | NIGHT_OWLISH = TerminalTheme(
106 | (255, 255, 255),
107 | (64, 63, 83),
108 | [
109 | (1, 22, 39),
110 | (211, 66, 62),
111 | (42, 162, 152),
112 | (218, 170, 1),
113 | (72, 118, 214),
114 | (64, 63, 83),
115 | (8, 145, 106),
116 | (122, 129, 129),
117 | (122, 129, 129),
118 | ],
119 | [
120 | (247, 110, 110),
121 | (73, 208, 197),
122 | (218, 194, 107),
123 | (92, 167, 228),
124 | (105, 112, 152),
125 | (0, 201, 144),
126 | (152, 159, 177),
127 | ],
128 | )
129 |
130 | SVG_EXPORT_THEME = TerminalTheme(
131 | (41, 41, 41),
132 | (197, 200, 198),
133 | [
134 | (75, 78, 85),
135 | (204, 85, 90),
136 | (152, 168, 75),
137 | (208, 179, 68),
138 | (96, 138, 177),
139 | (152, 114, 159),
140 | (104, 160, 179),
141 | (197, 200, 198),
142 | (154, 155, 153),
143 | ],
144 | [
145 | (255, 38, 39),
146 | (0, 130, 61),
147 | (208, 132, 66),
148 | (25, 132, 233),
149 | (255, 44, 122),
150 | (57, 130, 128),
151 | (253, 253, 197),
152 | ],
153 | )
154 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/util/response.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import http.client as httplib
4 | from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect
5 |
6 | from ..exceptions import HeaderParsingError
7 |
8 |
9 | def is_fp_closed(obj: object) -> bool:
10 | """
11 | Checks whether a given file-like object is closed.
12 |
13 | :param obj:
14 | The file-like object to check.
15 | """
16 |
17 | try:
18 | # Check `isclosed()` first, in case Python3 doesn't set `closed`.
19 | # GH Issue #928
20 | return obj.isclosed() # type: ignore[no-any-return, attr-defined]
21 | except AttributeError:
22 | pass
23 |
24 | try:
25 | # Check via the official file-like-object way.
26 | return obj.closed # type: ignore[no-any-return, attr-defined]
27 | except AttributeError:
28 | pass
29 |
30 | try:
31 | # Check if the object is a container for another file-like object that
32 | # gets released on exhaustion (e.g. HTTPResponse).
33 | return obj.fp is None # type: ignore[attr-defined]
34 | except AttributeError:
35 | pass
36 |
37 | raise ValueError("Unable to determine whether fp is closed.")
38 |
39 |
40 | def assert_header_parsing(headers: httplib.HTTPMessage) -> None:
41 | """
42 | Asserts whether all headers have been successfully parsed.
43 | Extracts encountered errors from the result of parsing headers.
44 |
45 | Only works on Python 3.
46 |
47 | :param http.client.HTTPMessage headers: Headers to verify.
48 |
49 | :raises urllib3.exceptions.HeaderParsingError:
50 | If parsing errors are found.
51 | """
52 |
53 | # This will fail silently if we pass in the wrong kind of parameter.
54 | # To make debugging easier add an explicit check.
55 | if not isinstance(headers, httplib.HTTPMessage):
56 | raise TypeError(f"expected httplib.Message, got {type(headers)}.")
57 |
58 | unparsed_data = None
59 |
60 | # get_payload is actually email.message.Message.get_payload;
61 | # we're only interested in the result if it's not a multipart message
62 | if not headers.is_multipart():
63 | payload = headers.get_payload()
64 |
65 | if isinstance(payload, (bytes, str)):
66 | unparsed_data = payload
67 |
68 | # httplib is assuming a response body is available
69 | # when parsing headers even when httplib only sends
70 | # header data to parse_headers() This results in
71 | # defects on multipart responses in particular.
72 | # See: https://github.com/urllib3/urllib3/issues/800
73 |
74 | # So we ignore the following defects:
75 | # - StartBoundaryNotFoundDefect:
76 | # The claimed start boundary was never found.
77 | # - MultipartInvariantViolationDefect:
78 | # A message claimed to be a multipart but no subparts were found.
79 | defects = [
80 | defect
81 | for defect in headers.defects
82 | if not isinstance(
83 | defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect)
84 | )
85 | ]
86 |
87 | if defects or unparsed_data:
88 | raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
89 |
90 |
91 | def is_response_to_head(response: httplib.HTTPResponse) -> bool:
92 | """
93 | Checks whether the request of a response has been a HEAD-request.
94 |
95 | :param http.client.HTTPResponse response:
96 | Response to check if the originating request
97 | used 'HEAD' as a method.
98 | """
99 | # FIXME: Can we do this somehow without accessing private httplib _method?
100 | method_str = response._method # type: str # type: ignore[attr-defined]
101 | return method_str.upper() == "HEAD"
102 |
```