This is page 20 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/jinja2/tests.py:
--------------------------------------------------------------------------------
```python
1 | """Built-in template tests used with the ``is`` operator."""
2 |
3 | import operator
4 | import typing as t
5 | from collections import abc
6 | from numbers import Number
7 |
8 | from .runtime import Undefined
9 | from .utils import pass_environment
10 |
11 | if t.TYPE_CHECKING:
12 | from .environment import Environment
13 |
14 |
15 | def test_odd(value: int) -> bool:
16 | """Return true if the variable is odd."""
17 | return value % 2 == 1
18 |
19 |
20 | def test_even(value: int) -> bool:
21 | """Return true if the variable is even."""
22 | return value % 2 == 0
23 |
24 |
25 | def test_divisibleby(value: int, num: int) -> bool:
26 | """Check if a variable is divisible by a number."""
27 | return value % num == 0
28 |
29 |
30 | def test_defined(value: t.Any) -> bool:
31 | """Return true if the variable is defined:
32 |
33 | .. sourcecode:: jinja
34 |
35 | {% if variable is defined %}
36 | value of variable: {{ variable }}
37 | {% else %}
38 | variable is not defined
39 | {% endif %}
40 |
41 | See the :func:`default` filter for a simple way to set undefined
42 | variables.
43 | """
44 | return not isinstance(value, Undefined)
45 |
46 |
47 | def test_undefined(value: t.Any) -> bool:
48 | """Like :func:`defined` but the other way round."""
49 | return isinstance(value, Undefined)
50 |
51 |
52 | @pass_environment
53 | def test_filter(env: "Environment", value: str) -> bool:
54 | """Check if a filter exists by name. Useful if a filter may be
55 | optionally available.
56 |
57 | .. code-block:: jinja
58 |
59 | {% if 'markdown' is filter %}
60 | {{ value | markdown }}
61 | {% else %}
62 | {{ value }}
63 | {% endif %}
64 |
65 | .. versionadded:: 3.0
66 | """
67 | return value in env.filters
68 |
69 |
70 | @pass_environment
71 | def test_test(env: "Environment", value: str) -> bool:
72 | """Check if a test exists by name. Useful if a test may be
73 | optionally available.
74 |
75 | .. code-block:: jinja
76 |
77 | {% if 'loud' is test %}
78 | {% if value is loud %}
79 | {{ value|upper }}
80 | {% else %}
81 | {{ value|lower }}
82 | {% endif %}
83 | {% else %}
84 | {{ value }}
85 | {% endif %}
86 |
87 | .. versionadded:: 3.0
88 | """
89 | return value in env.tests
90 |
91 |
92 | def test_none(value: t.Any) -> bool:
93 | """Return true if the variable is none."""
94 | return value is None
95 |
96 |
97 | def test_boolean(value: t.Any) -> bool:
98 | """Return true if the object is a boolean value.
99 |
100 | .. versionadded:: 2.11
101 | """
102 | return value is True or value is False
103 |
104 |
105 | def test_false(value: t.Any) -> bool:
106 | """Return true if the object is False.
107 |
108 | .. versionadded:: 2.11
109 | """
110 | return value is False
111 |
112 |
113 | def test_true(value: t.Any) -> bool:
114 | """Return true if the object is True.
115 |
116 | .. versionadded:: 2.11
117 | """
118 | return value is True
119 |
120 |
121 | # NOTE: The existing 'number' test matches booleans and floats
122 | def test_integer(value: t.Any) -> bool:
123 | """Return true if the object is an integer.
124 |
125 | .. versionadded:: 2.11
126 | """
127 | return isinstance(value, int) and value is not True and value is not False
128 |
129 |
130 | # NOTE: The existing 'number' test matches booleans and integers
131 | def test_float(value: t.Any) -> bool:
132 | """Return true if the object is a float.
133 |
134 | .. versionadded:: 2.11
135 | """
136 | return isinstance(value, float)
137 |
138 |
139 | def test_lower(value: str) -> bool:
140 | """Return true if the variable is lowercased."""
141 | return str(value).islower()
142 |
143 |
144 | def test_upper(value: str) -> bool:
145 | """Return true if the variable is uppercased."""
146 | return str(value).isupper()
147 |
148 |
149 | def test_string(value: t.Any) -> bool:
150 | """Return true if the object is a string."""
151 | return isinstance(value, str)
152 |
153 |
154 | def test_mapping(value: t.Any) -> bool:
155 | """Return true if the object is a mapping (dict etc.).
156 |
157 | .. versionadded:: 2.6
158 | """
159 | return isinstance(value, abc.Mapping)
160 |
161 |
162 | def test_number(value: t.Any) -> bool:
163 | """Return true if the variable is a number."""
164 | return isinstance(value, Number)
165 |
166 |
167 | def test_sequence(value: t.Any) -> bool:
168 | """Return true if the variable is a sequence. Sequences are variables
169 | that are iterable.
170 | """
171 | try:
172 | len(value)
173 | value.__getitem__ # noqa B018
174 | except Exception:
175 | return False
176 |
177 | return True
178 |
179 |
180 | def test_sameas(value: t.Any, other: t.Any) -> bool:
181 | """Check if an object points to the same memory address than another
182 | object:
183 |
184 | .. sourcecode:: jinja
185 |
186 | {% if foo.attribute is sameas false %}
187 | the foo attribute really is the `False` singleton
188 | {% endif %}
189 | """
190 | return value is other
191 |
192 |
193 | def test_iterable(value: t.Any) -> bool:
194 | """Check if it's possible to iterate over an object."""
195 | try:
196 | iter(value)
197 | except TypeError:
198 | return False
199 |
200 | return True
201 |
202 |
203 | def test_escaped(value: t.Any) -> bool:
204 | """Check if the value is escaped."""
205 | return hasattr(value, "__html__")
206 |
207 |
208 | def test_in(value: t.Any, seq: t.Container[t.Any]) -> bool:
209 | """Check if value is in seq.
210 |
211 | .. versionadded:: 2.10
212 | """
213 | return value in seq
214 |
215 |
216 | TESTS = {
217 | "odd": test_odd,
218 | "even": test_even,
219 | "divisibleby": test_divisibleby,
220 | "defined": test_defined,
221 | "undefined": test_undefined,
222 | "filter": test_filter,
223 | "test": test_test,
224 | "none": test_none,
225 | "boolean": test_boolean,
226 | "false": test_false,
227 | "true": test_true,
228 | "integer": test_integer,
229 | "float": test_float,
230 | "lower": test_lower,
231 | "upper": test_upper,
232 | "string": test_string,
233 | "mapping": test_mapping,
234 | "number": test_number,
235 | "sequence": test_sequence,
236 | "iterable": test_iterable,
237 | "callable": callable,
238 | "sameas": test_sameas,
239 | "escaped": test_escaped,
240 | "in": test_in,
241 | "==": operator.eq,
242 | "eq": operator.eq,
243 | "equalto": operator.eq,
244 | "!=": operator.ne,
245 | "ne": operator.ne,
246 | ">": operator.gt,
247 | "gt": operator.gt,
248 | "greaterthan": operator.gt,
249 | "ge": operator.ge,
250 | ">=": operator.ge,
251 | "<": operator.lt,
252 | "lt": operator.lt,
253 | "lessthan": operator.lt,
254 | "<=": operator.le,
255 | "le": operator.le,
256 | }
257 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py:
--------------------------------------------------------------------------------
```python
1 | """Locations where we look for configs, install stuff, etc"""
2 |
3 | # The following comment should be removed at some point in the future.
4 | # mypy: strict-optional=False
5 |
6 | # If pip's going to use distutils, it should not be using the copy that setuptools
7 | # might have injected into the environment. This is done by removing the injected
8 | # shim, if it's injected.
9 | #
10 | # See https://github.com/pypa/pip/issues/8761 for the original discussion and
11 | # rationale for why this is done within pip.
12 | try:
13 | __import__("_distutils_hack").remove_shim()
14 | except (ImportError, AttributeError):
15 | pass
16 |
17 | import logging
18 | import os
19 | import sys
20 | from distutils.cmd import Command as DistutilsCommand
21 | from distutils.command.install import SCHEME_KEYS
22 | from distutils.command.install import install as distutils_install_command
23 | from distutils.sysconfig import get_python_lib
24 | from typing import Dict, List, Optional, Union, cast
25 |
26 | from pip._internal.models.scheme import Scheme
27 | from pip._internal.utils.compat import WINDOWS
28 | from pip._internal.utils.virtualenv import running_under_virtualenv
29 |
30 | from .base import get_major_minor_version
31 |
32 | logger = logging.getLogger(__name__)
33 |
34 |
35 | def distutils_scheme(
36 | dist_name: str,
37 | user: bool = False,
38 | home: Optional[str] = None,
39 | root: Optional[str] = None,
40 | isolated: bool = False,
41 | prefix: Optional[str] = None,
42 | *,
43 | ignore_config_files: bool = False,
44 | ) -> Dict[str, str]:
45 | """
46 | Return a distutils install scheme
47 | """
48 | from distutils.dist import Distribution
49 |
50 | dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name}
51 | if isolated:
52 | dist_args["script_args"] = ["--no-user-cfg"]
53 |
54 | d = Distribution(dist_args)
55 | if not ignore_config_files:
56 | try:
57 | d.parse_config_files()
58 | except UnicodeDecodeError:
59 | paths = d.find_config_files()
60 | logger.warning(
61 | "Ignore distutils configs in %s due to encoding errors.",
62 | ", ".join(os.path.basename(p) for p in paths),
63 | )
64 | obj: Optional[DistutilsCommand] = None
65 | obj = d.get_command_obj("install", create=True)
66 | assert obj is not None
67 | i = cast(distutils_install_command, obj)
68 | # NOTE: setting user or home has the side-effect of creating the home dir
69 | # or user base for installations during finalize_options()
70 | # ideally, we'd prefer a scheme class that has no side-effects.
71 | assert not (user and prefix), f"user={user} prefix={prefix}"
72 | assert not (home and prefix), f"home={home} prefix={prefix}"
73 | i.user = user or i.user
74 | if user or home:
75 | i.prefix = ""
76 | i.prefix = prefix or i.prefix
77 | i.home = home or i.home
78 | i.root = root or i.root
79 | i.finalize_options()
80 |
81 | scheme = {}
82 | for key in SCHEME_KEYS:
83 | scheme[key] = getattr(i, "install_" + key)
84 |
85 | # install_lib specified in setup.cfg should install *everything*
86 | # into there (i.e. it takes precedence over both purelib and
87 | # platlib). Note, i.install_lib is *always* set after
88 | # finalize_options(); we only want to override here if the user
89 | # has explicitly requested it hence going back to the config
90 | if "install_lib" in d.get_option_dict("install"):
91 | scheme.update({"purelib": i.install_lib, "platlib": i.install_lib})
92 |
93 | if running_under_virtualenv():
94 | if home:
95 | prefix = home
96 | elif user:
97 | prefix = i.install_userbase
98 | else:
99 | prefix = i.prefix
100 | scheme["headers"] = os.path.join(
101 | prefix,
102 | "include",
103 | "site",
104 | f"python{get_major_minor_version()}",
105 | dist_name,
106 | )
107 |
108 | if root is not None:
109 | path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1]
110 | scheme["headers"] = os.path.join(root, path_no_drive[1:])
111 |
112 | return scheme
113 |
114 |
115 | def get_scheme(
116 | dist_name: str,
117 | user: bool = False,
118 | home: Optional[str] = None,
119 | root: Optional[str] = None,
120 | isolated: bool = False,
121 | prefix: Optional[str] = None,
122 | ) -> Scheme:
123 | """
124 | Get the "scheme" corresponding to the input parameters. The distutils
125 | documentation provides the context for the available schemes:
126 | https://docs.python.org/3/install/index.html#alternate-installation
127 |
128 | :param dist_name: the name of the package to retrieve the scheme for, used
129 | in the headers scheme path
130 | :param user: indicates to use the "user" scheme
131 | :param home: indicates to use the "home" scheme and provides the base
132 | directory for the same
133 | :param root: root under which other directories are re-based
134 | :param isolated: equivalent to --no-user-cfg, i.e. do not consider
135 | ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for
136 | scheme paths
137 | :param prefix: indicates to use the "prefix" scheme and provides the
138 | base directory for the same
139 | """
140 | scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix)
141 | return Scheme(
142 | platlib=scheme["platlib"],
143 | purelib=scheme["purelib"],
144 | headers=scheme["headers"],
145 | scripts=scheme["scripts"],
146 | data=scheme["data"],
147 | )
148 |
149 |
150 | def get_bin_prefix() -> str:
151 | # XXX: In old virtualenv versions, sys.prefix can contain '..' components,
152 | # so we need to call normpath to eliminate them.
153 | prefix = os.path.normpath(sys.prefix)
154 | if WINDOWS:
155 | bin_py = os.path.join(prefix, "Scripts")
156 | # buildout uses 'bin' on Windows too?
157 | if not os.path.exists(bin_py):
158 | bin_py = os.path.join(prefix, "bin")
159 | return bin_py
160 | # Forcing to use /usr/local/bin for standard macOS framework installs
161 | # Also log to ~/Library/Logs/ for use with the Console.app log viewer
162 | if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/":
163 | return "/usr/local/bin"
164 | return os.path.join(prefix, "bin")
165 |
166 |
167 | def get_purelib() -> str:
168 | return get_python_lib(plat_specific=False)
169 |
170 |
171 | def get_platlib() -> str:
172 | return get_python_lib(plat_specific=True)
173 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/datastructures/cache_control.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | from .mixins import ImmutableDictMixin
4 | from .mixins import UpdateDictMixin
5 |
6 |
7 | def cache_control_property(key, empty, type):
8 | """Return a new property object for a cache header. Useful if you
9 | want to add support for a cache extension in a subclass.
10 |
11 | .. versionchanged:: 2.0
12 | Renamed from ``cache_property``.
13 | """
14 | return property(
15 | lambda x: x._get_cache_value(key, empty, type),
16 | lambda x, v: x._set_cache_value(key, v, type),
17 | lambda x: x._del_cache_value(key),
18 | f"accessor for {key!r}",
19 | )
20 |
21 |
22 | class _CacheControl(UpdateDictMixin, dict):
23 | """Subclass of a dict that stores values for a Cache-Control header. It
24 | has accessors for all the cache-control directives specified in RFC 2616.
25 | The class does not differentiate between request and response directives.
26 |
27 | Because the cache-control directives in the HTTP header use dashes the
28 | python descriptors use underscores for that.
29 |
30 | To get a header of the :class:`CacheControl` object again you can convert
31 | the object into a string or call the :meth:`to_header` method. If you plan
32 | to subclass it and add your own items have a look at the sourcecode for
33 | that class.
34 |
35 | .. versionchanged:: 2.1.0
36 | Setting int properties such as ``max_age`` will convert the
37 | value to an int.
38 |
39 | .. versionchanged:: 0.4
40 |
41 | Setting `no_cache` or `private` to boolean `True` will set the implicit
42 | none-value which is ``*``:
43 |
44 | >>> cc = ResponseCacheControl()
45 | >>> cc.no_cache = True
46 | >>> cc
47 | <ResponseCacheControl 'no-cache'>
48 | >>> cc.no_cache
49 | '*'
50 | >>> cc.no_cache = None
51 | >>> cc
52 | <ResponseCacheControl ''>
53 |
54 | In versions before 0.5 the behavior documented here affected the now
55 | no longer existing `CacheControl` class.
56 | """
57 |
58 | no_cache = cache_control_property("no-cache", "*", None)
59 | no_store = cache_control_property("no-store", None, bool)
60 | max_age = cache_control_property("max-age", -1, int)
61 | no_transform = cache_control_property("no-transform", None, None)
62 |
63 | def __init__(self, values=(), on_update=None):
64 | dict.__init__(self, values or ())
65 | self.on_update = on_update
66 | self.provided = values is not None
67 |
68 | def _get_cache_value(self, key, empty, type):
69 | """Used internally by the accessor properties."""
70 | if type is bool:
71 | return key in self
72 | if key in self:
73 | value = self[key]
74 | if value is None:
75 | return empty
76 | elif type is not None:
77 | try:
78 | value = type(value)
79 | except ValueError:
80 | pass
81 | return value
82 | return None
83 |
84 | def _set_cache_value(self, key, value, type):
85 | """Used internally by the accessor properties."""
86 | if type is bool:
87 | if value:
88 | self[key] = None
89 | else:
90 | self.pop(key, None)
91 | else:
92 | if value is None:
93 | self.pop(key, None)
94 | elif value is True:
95 | self[key] = None
96 | else:
97 | if type is not None:
98 | self[key] = type(value)
99 | else:
100 | self[key] = value
101 |
102 | def _del_cache_value(self, key):
103 | """Used internally by the accessor properties."""
104 | if key in self:
105 | del self[key]
106 |
107 | def to_header(self):
108 | """Convert the stored values into a cache control header."""
109 | return http.dump_header(self)
110 |
111 | def __str__(self):
112 | return self.to_header()
113 |
114 | def __repr__(self):
115 | kv_str = " ".join(f"{k}={v!r}" for k, v in sorted(self.items()))
116 | return f"<{type(self).__name__} {kv_str}>"
117 |
118 | cache_property = staticmethod(cache_control_property)
119 |
120 |
121 | class RequestCacheControl(ImmutableDictMixin, _CacheControl):
122 | """A cache control for requests. This is immutable and gives access
123 | to all the request-relevant cache control headers.
124 |
125 | To get a header of the :class:`RequestCacheControl` object again you can
126 | convert the object into a string or call the :meth:`to_header` method. If
127 | you plan to subclass it and add your own items have a look at the sourcecode
128 | for that class.
129 |
130 | .. versionchanged:: 2.1.0
131 | Setting int properties such as ``max_age`` will convert the
132 | value to an int.
133 |
134 | .. versionadded:: 0.5
135 | In previous versions a `CacheControl` class existed that was used
136 | both for request and response.
137 | """
138 |
139 | max_stale = cache_control_property("max-stale", "*", int)
140 | min_fresh = cache_control_property("min-fresh", "*", int)
141 | only_if_cached = cache_control_property("only-if-cached", None, bool)
142 |
143 |
144 | class ResponseCacheControl(_CacheControl):
145 | """A cache control for responses. Unlike :class:`RequestCacheControl`
146 | this is mutable and gives access to response-relevant cache control
147 | headers.
148 |
149 | To get a header of the :class:`ResponseCacheControl` object again you can
150 | convert the object into a string or call the :meth:`to_header` method. If
151 | you plan to subclass it and add your own items have a look at the sourcecode
152 | for that class.
153 |
154 | .. versionchanged:: 2.1.1
155 | ``s_maxage`` converts the value to an int.
156 |
157 | .. versionchanged:: 2.1.0
158 | Setting int properties such as ``max_age`` will convert the
159 | value to an int.
160 |
161 | .. versionadded:: 0.5
162 | In previous versions a `CacheControl` class existed that was used
163 | both for request and response.
164 | """
165 |
166 | public = cache_control_property("public", None, bool)
167 | private = cache_control_property("private", "*", None)
168 | must_revalidate = cache_control_property("must-revalidate", None, bool)
169 | proxy_revalidate = cache_control_property("proxy-revalidate", None, bool)
170 | s_maxage = cache_control_property("s-maxage", None, int)
171 | immutable = cache_control_property("immutable", None, bool)
172 |
173 |
174 | # circular dependencies
175 | from .. import http
176 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/network/download.py:
--------------------------------------------------------------------------------
```python
1 | """Download files with progress indicators.
2 | """
3 |
4 | import email.message
5 | import logging
6 | import mimetypes
7 | import os
8 | from typing import Iterable, Optional, Tuple
9 |
10 | from pip._vendor.requests.models import Response
11 |
12 | from pip._internal.cli.progress_bars import get_download_progress_renderer
13 | from pip._internal.exceptions import NetworkConnectionError
14 | from pip._internal.models.index import PyPI
15 | from pip._internal.models.link import Link
16 | from pip._internal.network.cache import is_from_cache
17 | from pip._internal.network.session import PipSession
18 | from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks
19 | from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext
20 |
21 | logger = logging.getLogger(__name__)
22 |
23 |
24 | def _get_http_response_size(resp: Response) -> Optional[int]:
25 | try:
26 | return int(resp.headers["content-length"])
27 | except (ValueError, KeyError, TypeError):
28 | return None
29 |
30 |
31 | def _prepare_download(
32 | resp: Response,
33 | link: Link,
34 | progress_bar: str,
35 | ) -> Iterable[bytes]:
36 | total_length = _get_http_response_size(resp)
37 |
38 | if link.netloc == PyPI.file_storage_domain:
39 | url = link.show_url
40 | else:
41 | url = link.url_without_fragment
42 |
43 | logged_url = redact_auth_from_url(url)
44 |
45 | if total_length:
46 | logged_url = f"{logged_url} ({format_size(total_length)})"
47 |
48 | if is_from_cache(resp):
49 | logger.info("Using cached %s", logged_url)
50 | else:
51 | logger.info("Downloading %s", logged_url)
52 |
53 | if logger.getEffectiveLevel() > logging.INFO:
54 | show_progress = False
55 | elif is_from_cache(resp):
56 | show_progress = False
57 | elif not total_length:
58 | show_progress = True
59 | elif total_length > (512 * 1024):
60 | show_progress = True
61 | else:
62 | show_progress = False
63 |
64 | chunks = response_chunks(resp)
65 |
66 | if not show_progress:
67 | return chunks
68 |
69 | renderer = get_download_progress_renderer(bar_type=progress_bar, size=total_length)
70 | return renderer(chunks)
71 |
72 |
73 | def sanitize_content_filename(filename: str) -> str:
74 | """
75 | Sanitize the "filename" value from a Content-Disposition header.
76 | """
77 | return os.path.basename(filename)
78 |
79 |
80 | def parse_content_disposition(content_disposition: str, default_filename: str) -> str:
81 | """
82 | Parse the "filename" value from a Content-Disposition header, and
83 | return the default filename if the result is empty.
84 | """
85 | m = email.message.Message()
86 | m["content-type"] = content_disposition
87 | filename = m.get_param("filename")
88 | if filename:
89 | # We need to sanitize the filename to prevent directory traversal
90 | # in case the filename contains ".." path parts.
91 | filename = sanitize_content_filename(str(filename))
92 | return filename or default_filename
93 |
94 |
95 | def _get_http_response_filename(resp: Response, link: Link) -> str:
96 | """Get an ideal filename from the given HTTP response, falling back to
97 | the link filename if not provided.
98 | """
99 | filename = link.filename # fallback
100 | # Have a look at the Content-Disposition header for a better guess
101 | content_disposition = resp.headers.get("content-disposition")
102 | if content_disposition:
103 | filename = parse_content_disposition(content_disposition, filename)
104 | ext: Optional[str] = splitext(filename)[1]
105 | if not ext:
106 | ext = mimetypes.guess_extension(resp.headers.get("content-type", ""))
107 | if ext:
108 | filename += ext
109 | if not ext and link.url != resp.url:
110 | ext = os.path.splitext(resp.url)[1]
111 | if ext:
112 | filename += ext
113 | return filename
114 |
115 |
116 | def _http_get_download(session: PipSession, link: Link) -> Response:
117 | target_url = link.url.split("#", 1)[0]
118 | resp = session.get(target_url, headers=HEADERS, stream=True)
119 | raise_for_status(resp)
120 | return resp
121 |
122 |
123 | class Downloader:
124 | def __init__(
125 | self,
126 | session: PipSession,
127 | progress_bar: str,
128 | ) -> None:
129 | self._session = session
130 | self._progress_bar = progress_bar
131 |
132 | def __call__(self, link: Link, location: str) -> Tuple[str, str]:
133 | """Download the file given by link into location."""
134 | try:
135 | resp = _http_get_download(self._session, link)
136 | except NetworkConnectionError as e:
137 | assert e.response is not None
138 | logger.critical(
139 | "HTTP error %s while getting %s", e.response.status_code, link
140 | )
141 | raise
142 |
143 | filename = _get_http_response_filename(resp, link)
144 | filepath = os.path.join(location, filename)
145 |
146 | chunks = _prepare_download(resp, link, self._progress_bar)
147 | with open(filepath, "wb") as content_file:
148 | for chunk in chunks:
149 | content_file.write(chunk)
150 | content_type = resp.headers.get("Content-Type", "")
151 | return filepath, content_type
152 |
153 |
154 | class BatchDownloader:
155 | def __init__(
156 | self,
157 | session: PipSession,
158 | progress_bar: str,
159 | ) -> None:
160 | self._session = session
161 | self._progress_bar = progress_bar
162 |
163 | def __call__(
164 | self, links: Iterable[Link], location: str
165 | ) -> Iterable[Tuple[Link, Tuple[str, str]]]:
166 | """Download the files given by links into location."""
167 | for link in links:
168 | try:
169 | resp = _http_get_download(self._session, link)
170 | except NetworkConnectionError as e:
171 | assert e.response is not None
172 | logger.critical(
173 | "HTTP error %s while getting %s",
174 | e.response.status_code,
175 | link,
176 | )
177 | raise
178 |
179 | filename = _get_http_response_filename(resp, link)
180 | filepath = os.path.join(location, filename)
181 |
182 | chunks = _prepare_download(resp, link, self._progress_bar)
183 | with open(filepath, "wb") as content_file:
184 | for chunk in chunks:
185 | content_file.write(chunk)
186 | content_type = resp.headers.get("Content-Type", "")
187 | yield link, (filepath, content_type)
188 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/debug/shared/style.css:
--------------------------------------------------------------------------------
```css
1 | body, input { font-family: sans-serif; color: #000; text-align: center;
2 | margin: 1em; padding: 0; font-size: 15px; }
3 | h1, h2, h3 { font-weight: normal; }
4 |
5 | input { background-color: #fff; margin: 0; text-align: left;
6 | outline: none !important; }
7 | input[type="submit"] { padding: 3px 6px; }
8 | a { color: #11557C; }
9 | a:hover { color: #177199; }
10 | pre, code,
11 | textarea { font-family: monospace; font-size: 14px; }
12 |
13 | div.debugger { text-align: left; padding: 12px; margin: auto;
14 | background-color: white; }
15 | h1 { font-size: 36px; margin: 0 0 0.3em 0; }
16 | div.detail { cursor: pointer; }
17 | div.detail p { margin: 0 0 8px 13px; font-size: 14px; white-space: pre-wrap;
18 | font-family: monospace; }
19 | div.explanation { margin: 20px 13px; font-size: 15px; color: #555; }
20 | div.footer { font-size: 13px; text-align: right; margin: 30px 0;
21 | color: #86989B; }
22 |
23 | h2 { font-size: 16px; margin: 1.3em 0 0.0 0; padding: 9px;
24 | background-color: #11557C; color: white; }
25 | h2 em, h3 em { font-style: normal; color: #A5D6D9; font-weight: normal; }
26 |
27 | div.traceback, div.plain { border: 1px solid #ddd; margin: 0 0 1em 0; padding: 10px; }
28 | div.plain p { margin: 0; }
29 | div.plain textarea,
30 | div.plain pre { margin: 10px 0 0 0; padding: 4px;
31 | background-color: #E8EFF0; border: 1px solid #D3E7E9; }
32 | div.plain textarea { width: 99%; height: 300px; }
33 | div.traceback h3 { font-size: 1em; margin: 0 0 0.8em 0; }
34 | div.traceback ul { list-style: none; margin: 0; padding: 0 0 0 1em; }
35 | div.traceback h4 { font-size: 13px; font-weight: normal; margin: 0.7em 0 0.1em 0; }
36 | div.traceback pre { margin: 0; padding: 5px 0 3px 15px;
37 | background-color: #E8EFF0; border: 1px solid #D3E7E9; }
38 | div.traceback .library .current { background: white; color: #555; }
39 | div.traceback .expanded .current { background: #E8EFF0; color: black; }
40 | div.traceback pre:hover { background-color: #DDECEE; color: black; cursor: pointer; }
41 | div.traceback div.source.expanded pre + pre { border-top: none; }
42 |
43 | div.traceback span.ws { display: none; }
44 | div.traceback pre.before, div.traceback pre.after { display: none; background: white; }
45 | div.traceback div.source.expanded pre.before,
46 | div.traceback div.source.expanded pre.after {
47 | display: block;
48 | }
49 |
50 | div.traceback div.source.expanded span.ws {
51 | display: inline;
52 | }
53 |
54 | div.traceback blockquote { margin: 1em 0 0 0; padding: 0; white-space: pre-line; }
55 | div.traceback img { float: right; padding: 2px; margin: -3px 2px 0 0; display: none; }
56 | div.traceback img:hover { background-color: #ddd; cursor: pointer;
57 | border-color: #BFDDE0; }
58 | div.traceback pre:hover img { display: block; }
59 | div.traceback cite.filename { font-style: normal; color: #3B666B; }
60 |
61 | pre.console { border: 1px solid #ccc; background: white!important;
62 | color: black; padding: 5px!important;
63 | margin: 3px 0 0 0!important; cursor: default!important;
64 | max-height: 400px; overflow: auto; }
65 | pre.console form { color: #555; }
66 | pre.console input { background-color: transparent; color: #555;
67 | width: 90%; font-family: monospace; font-size: 14px;
68 | border: none!important; }
69 |
70 | span.string { color: #30799B; }
71 | span.number { color: #9C1A1C; }
72 | span.help { color: #3A7734; }
73 | span.object { color: #485F6E; }
74 | span.extended { opacity: 0.5; }
75 | span.extended:hover { opacity: 1; }
76 | a.toggle { text-decoration: none; background-repeat: no-repeat;
77 | background-position: center center;
78 | background-image: url(?__debugger__=yes&cmd=resource&f=more.png); }
79 | a.toggle:hover { background-color: #444; }
80 | a.open { background-image: url(?__debugger__=yes&cmd=resource&f=less.png); }
81 |
82 | pre.console div.traceback,
83 | pre.console div.box { margin: 5px 10px; white-space: normal;
84 | border: 1px solid #11557C; padding: 10px;
85 | font-family: sans-serif; }
86 | pre.console div.box h3,
87 | pre.console div.traceback h3 { margin: -10px -10px 10px -10px; padding: 5px;
88 | background: #11557C; color: white; }
89 |
90 | pre.console div.traceback pre:hover { cursor: default; background: #E8EFF0; }
91 | pre.console div.traceback pre.syntaxerror { background: inherit; border: none;
92 | margin: 20px -10px -10px -10px;
93 | padding: 10px; border-top: 1px solid #BFDDE0;
94 | background: #E8EFF0; }
95 | pre.console div.noframe-traceback pre.syntaxerror { margin-top: -10px; border: none; }
96 |
97 | pre.console div.box pre.repr { padding: 0; margin: 0; background-color: white; border: none; }
98 | pre.console div.box table { margin-top: 6px; }
99 | pre.console div.box pre { border: none; }
100 | pre.console div.box pre.help { background-color: white; }
101 | pre.console div.box pre.help:hover { cursor: default; }
102 | pre.console table tr { vertical-align: top; }
103 | div.console { border: 1px solid #ccc; padding: 4px; background-color: #fafafa; }
104 |
105 | div.traceback pre, div.console pre {
106 | white-space: pre-wrap; /* css-3 should we be so lucky... */
107 | white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
108 | white-space: -pre-wrap; /* Opera 4-6 ?? */
109 | white-space: -o-pre-wrap; /* Opera 7 ?? */
110 | word-wrap: break-word; /* Internet Explorer 5.5+ */
111 | _white-space: pre; /* IE only hack to re-specify in
112 | addition to word-wrap */
113 | }
114 |
115 |
116 | div.pin-prompt {
117 | position: absolute;
118 | display: none;
119 | top: 0;
120 | bottom: 0;
121 | left: 0;
122 | right: 0;
123 | background: rgba(255, 255, 255, 0.8);
124 | }
125 |
126 | div.pin-prompt .inner {
127 | background: #eee;
128 | padding: 10px 50px;
129 | width: 350px;
130 | margin: 10% auto 0 auto;
131 | border: 1px solid #ccc;
132 | border-radius: 2px;
133 | }
134 |
135 | div.exc-divider {
136 | margin: 0.7em 0 0 -1em;
137 | padding: 0.5em;
138 | background: #11557C;
139 | color: #ddd;
140 | border: 1px solid #ddd;
141 | }
142 |
143 | .console.active {
144 | max-height: 0!important;
145 | display: none;
146 | }
147 |
148 | .hidden {
149 | display: none;
150 | }
151 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/flask/debughelpers.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import typing as t
4 |
5 | from jinja2.loaders import BaseLoader
6 | from werkzeug.routing import RequestRedirect
7 |
8 | from .blueprints import Blueprint
9 | from .globals import request_ctx
10 | from .sansio.app import App
11 |
12 | if t.TYPE_CHECKING:
13 | from .sansio.scaffold import Scaffold
14 | from .wrappers import Request
15 |
16 |
17 | class UnexpectedUnicodeError(AssertionError, UnicodeError):
18 | """Raised in places where we want some better error reporting for
19 | unexpected unicode or binary data.
20 | """
21 |
22 |
23 | class DebugFilesKeyError(KeyError, AssertionError):
24 | """Raised from request.files during debugging. The idea is that it can
25 | provide a better error message than just a generic KeyError/BadRequest.
26 | """
27 |
28 | def __init__(self, request: Request, key: str) -> None:
29 | form_matches = request.form.getlist(key)
30 | buf = [
31 | f"You tried to access the file {key!r} in the request.files"
32 | " dictionary but it does not exist. The mimetype for the"
33 | f" request is {request.mimetype!r} instead of"
34 | " 'multipart/form-data' which means that no file contents"
35 | " were transmitted. To fix this error you should provide"
36 | ' enctype="multipart/form-data" in your form.'
37 | ]
38 | if form_matches:
39 | names = ", ".join(repr(x) for x in form_matches)
40 | buf.append(
41 | "\n\nThe browser instead transmitted some file names. "
42 | f"This was submitted: {names}"
43 | )
44 | self.msg = "".join(buf)
45 |
46 | def __str__(self) -> str:
47 | return self.msg
48 |
49 |
50 | class FormDataRoutingRedirect(AssertionError):
51 | """This exception is raised in debug mode if a routing redirect
52 | would cause the browser to drop the method or body. This happens
53 | when method is not GET, HEAD or OPTIONS and the status code is not
54 | 307 or 308.
55 | """
56 |
57 | def __init__(self, request: Request) -> None:
58 | exc = request.routing_exception
59 | assert isinstance(exc, RequestRedirect)
60 | buf = [
61 | f"A request was sent to '{request.url}', but routing issued"
62 | f" a redirect to the canonical URL '{exc.new_url}'."
63 | ]
64 |
65 | if f"{request.base_url}/" == exc.new_url.partition("?")[0]:
66 | buf.append(
67 | " The URL was defined with a trailing slash. Flask"
68 | " will redirect to the URL with a trailing slash if it"
69 | " was accessed without one."
70 | )
71 |
72 | buf.append(
73 | " Send requests to the canonical URL, or use 307 or 308 for"
74 | " routing redirects. Otherwise, browsers will drop form"
75 | " data.\n\n"
76 | "This exception is only raised in debug mode."
77 | )
78 | super().__init__("".join(buf))
79 |
80 |
81 | def attach_enctype_error_multidict(request: Request) -> None:
82 | """Patch ``request.files.__getitem__`` to raise a descriptive error
83 | about ``enctype=multipart/form-data``.
84 |
85 | :param request: The request to patch.
86 | :meta private:
87 | """
88 | oldcls = request.files.__class__
89 |
90 | class newcls(oldcls): # type: ignore[valid-type, misc]
91 | def __getitem__(self, key: str) -> t.Any:
92 | try:
93 | return super().__getitem__(key)
94 | except KeyError as e:
95 | if key not in request.form:
96 | raise
97 |
98 | raise DebugFilesKeyError(request, key).with_traceback(
99 | e.__traceback__
100 | ) from None
101 |
102 | newcls.__name__ = oldcls.__name__
103 | newcls.__module__ = oldcls.__module__
104 | request.files.__class__ = newcls
105 |
106 |
107 | def _dump_loader_info(loader: BaseLoader) -> t.Iterator[str]:
108 | yield f"class: {type(loader).__module__}.{type(loader).__name__}"
109 | for key, value in sorted(loader.__dict__.items()):
110 | if key.startswith("_"):
111 | continue
112 | if isinstance(value, (tuple, list)):
113 | if not all(isinstance(x, str) for x in value):
114 | continue
115 | yield f"{key}:"
116 | for item in value:
117 | yield f" - {item}"
118 | continue
119 | elif not isinstance(value, (str, int, float, bool)):
120 | continue
121 | yield f"{key}: {value!r}"
122 |
123 |
124 | def explain_template_loading_attempts(
125 | app: App,
126 | template: str,
127 | attempts: list[
128 | tuple[
129 | BaseLoader,
130 | Scaffold,
131 | tuple[str, str | None, t.Callable[[], bool] | None] | None,
132 | ]
133 | ],
134 | ) -> None:
135 | """This should help developers understand what failed"""
136 | info = [f"Locating template {template!r}:"]
137 | total_found = 0
138 | blueprint = None
139 | if request_ctx and request_ctx.request.blueprint is not None:
140 | blueprint = request_ctx.request.blueprint
141 |
142 | for idx, (loader, srcobj, triple) in enumerate(attempts):
143 | if isinstance(srcobj, App):
144 | src_info = f"application {srcobj.import_name!r}"
145 | elif isinstance(srcobj, Blueprint):
146 | src_info = f"blueprint {srcobj.name!r} ({srcobj.import_name})"
147 | else:
148 | src_info = repr(srcobj)
149 |
150 | info.append(f"{idx + 1:5}: trying loader of {src_info}")
151 |
152 | for line in _dump_loader_info(loader):
153 | info.append(f" {line}")
154 |
155 | if triple is None:
156 | detail = "no match"
157 | else:
158 | detail = f"found ({triple[1] or '<string>'!r})"
159 | total_found += 1
160 | info.append(f" -> {detail}")
161 |
162 | seems_fishy = False
163 | if total_found == 0:
164 | info.append("Error: the template could not be found.")
165 | seems_fishy = True
166 | elif total_found > 1:
167 | info.append("Warning: multiple loaders returned a match for the template.")
168 | seems_fishy = True
169 |
170 | if blueprint is not None and seems_fishy:
171 | info.append(
172 | " The template was looked up from an endpoint that belongs"
173 | f" to the blueprint {blueprint!r}."
174 | )
175 | info.append(" Maybe you did not place a template in the right folder?")
176 | info.append(" See https://flask.palletsprojects.com/blueprints/#templates")
177 |
178 | app.logger.info("\n".join(info))
179 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/debug/console.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import code
4 | import sys
5 | import typing as t
6 | from contextvars import ContextVar
7 | from types import CodeType
8 |
9 | from markupsafe import escape
10 |
11 | from .repr import debug_repr
12 | from .repr import dump
13 | from .repr import helper
14 |
15 | _stream: ContextVar[HTMLStringO] = ContextVar("werkzeug.debug.console.stream")
16 | _ipy: ContextVar[_InteractiveConsole] = ContextVar("werkzeug.debug.console.ipy")
17 |
18 |
19 | class HTMLStringO:
20 | """A StringO version that HTML escapes on write."""
21 |
22 | def __init__(self) -> None:
23 | self._buffer: list[str] = []
24 |
25 | def isatty(self) -> bool:
26 | return False
27 |
28 | def close(self) -> None:
29 | pass
30 |
31 | def flush(self) -> None:
32 | pass
33 |
34 | def seek(self, n: int, mode: int = 0) -> None:
35 | pass
36 |
37 | def readline(self) -> str:
38 | if len(self._buffer) == 0:
39 | return ""
40 | ret = self._buffer[0]
41 | del self._buffer[0]
42 | return ret
43 |
44 | def reset(self) -> str:
45 | val = "".join(self._buffer)
46 | del self._buffer[:]
47 | return val
48 |
49 | def _write(self, x: str) -> None:
50 | self._buffer.append(x)
51 |
52 | def write(self, x: str) -> None:
53 | self._write(escape(x))
54 |
55 | def writelines(self, x: t.Iterable[str]) -> None:
56 | self._write(escape("".join(x)))
57 |
58 |
59 | class ThreadedStream:
60 | """Thread-local wrapper for sys.stdout for the interactive console."""
61 |
62 | @staticmethod
63 | def push() -> None:
64 | if not isinstance(sys.stdout, ThreadedStream):
65 | sys.stdout = t.cast(t.TextIO, ThreadedStream())
66 |
67 | _stream.set(HTMLStringO())
68 |
69 | @staticmethod
70 | def fetch() -> str:
71 | try:
72 | stream = _stream.get()
73 | except LookupError:
74 | return ""
75 |
76 | return stream.reset()
77 |
78 | @staticmethod
79 | def displayhook(obj: object) -> None:
80 | try:
81 | stream = _stream.get()
82 | except LookupError:
83 | return _displayhook(obj) # type: ignore
84 |
85 | # stream._write bypasses escaping as debug_repr is
86 | # already generating HTML for us.
87 | if obj is not None:
88 | _ipy.get().locals["_"] = obj
89 | stream._write(debug_repr(obj))
90 |
91 | def __setattr__(self, name: str, value: t.Any) -> None:
92 | raise AttributeError(f"read only attribute {name}")
93 |
94 | def __dir__(self) -> list[str]:
95 | return dir(sys.__stdout__)
96 |
97 | def __getattribute__(self, name: str) -> t.Any:
98 | try:
99 | stream = _stream.get()
100 | except LookupError:
101 | stream = sys.__stdout__ # type: ignore[assignment]
102 |
103 | return getattr(stream, name)
104 |
105 | def __repr__(self) -> str:
106 | return repr(sys.__stdout__)
107 |
108 |
109 | # add the threaded stream as display hook
110 | _displayhook = sys.displayhook
111 | sys.displayhook = ThreadedStream.displayhook
112 |
113 |
114 | class _ConsoleLoader:
115 | def __init__(self) -> None:
116 | self._storage: dict[int, str] = {}
117 |
118 | def register(self, code: CodeType, source: str) -> None:
119 | self._storage[id(code)] = source
120 | # register code objects of wrapped functions too.
121 | for var in code.co_consts:
122 | if isinstance(var, CodeType):
123 | self._storage[id(var)] = source
124 |
125 | def get_source_by_code(self, code: CodeType) -> str | None:
126 | try:
127 | return self._storage[id(code)]
128 | except KeyError:
129 | return None
130 |
131 |
132 | class _InteractiveConsole(code.InteractiveInterpreter):
133 | locals: dict[str, t.Any]
134 |
135 | def __init__(self, globals: dict[str, t.Any], locals: dict[str, t.Any]) -> None:
136 | self.loader = _ConsoleLoader()
137 | locals = {
138 | **globals,
139 | **locals,
140 | "dump": dump,
141 | "help": helper,
142 | "__loader__": self.loader,
143 | }
144 | super().__init__(locals)
145 | original_compile = self.compile
146 |
147 | def compile(source: str, filename: str, symbol: str) -> CodeType | None:
148 | code = original_compile(source, filename, symbol)
149 |
150 | if code is not None:
151 | self.loader.register(code, source)
152 |
153 | return code
154 |
155 | self.compile = compile # type: ignore[assignment]
156 | self.more = False
157 | self.buffer: list[str] = []
158 |
159 | def runsource(self, source: str, **kwargs: t.Any) -> str: # type: ignore
160 | source = f"{source.rstrip()}\n"
161 | ThreadedStream.push()
162 | prompt = "... " if self.more else ">>> "
163 | try:
164 | source_to_eval = "".join(self.buffer + [source])
165 | if super().runsource(source_to_eval, "<debugger>", "single"):
166 | self.more = True
167 | self.buffer.append(source)
168 | else:
169 | self.more = False
170 | del self.buffer[:]
171 | finally:
172 | output = ThreadedStream.fetch()
173 | return f"{prompt}{escape(source)}{output}"
174 |
175 | def runcode(self, code: CodeType) -> None:
176 | try:
177 | exec(code, self.locals)
178 | except Exception:
179 | self.showtraceback()
180 |
181 | def showtraceback(self) -> None:
182 | from .tbtools import DebugTraceback
183 |
184 | exc = t.cast(BaseException, sys.exc_info()[1])
185 | te = DebugTraceback(exc, skip=1)
186 | sys.stdout._write(te.render_traceback_html()) # type: ignore
187 |
188 | def showsyntaxerror(self, filename: str | None = None) -> None:
189 | from .tbtools import DebugTraceback
190 |
191 | exc = t.cast(BaseException, sys.exc_info()[1])
192 | te = DebugTraceback(exc, skip=4)
193 | sys.stdout._write(te.render_traceback_html()) # type: ignore
194 |
195 | def write(self, data: str) -> None:
196 | sys.stdout.write(data)
197 |
198 |
199 | class Console:
200 | """An interactive console."""
201 |
202 | def __init__(
203 | self,
204 | globals: dict[str, t.Any] | None = None,
205 | locals: dict[str, t.Any] | None = None,
206 | ) -> None:
207 | if locals is None:
208 | locals = {}
209 | if globals is None:
210 | globals = {}
211 | self._ipy = _InteractiveConsole(globals, locals)
212 |
213 | def eval(self, code: str) -> str:
214 | _ipy.set(self._ipy)
215 | old_sys_stdout = sys.stdout
216 | try:
217 | return self._ipy.runsource(code)
218 | finally:
219 | sys.stdout = old_sys_stdout
220 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py:
--------------------------------------------------------------------------------
```python
1 | """Rich text and beautiful formatting in the terminal."""
2 |
3 | import os
4 | from typing import IO, TYPE_CHECKING, Any, Callable, Optional, Union
5 |
6 | from ._extension import load_ipython_extension # noqa: F401
7 |
8 | __all__ = ["get_console", "reconfigure", "print", "inspect", "print_json"]
9 |
10 | if TYPE_CHECKING:
11 | from .console import Console
12 |
13 | # Global console used by alternative print
14 | _console: Optional["Console"] = None
15 |
16 | try:
17 | _IMPORT_CWD = os.path.abspath(os.getcwd())
18 | except FileNotFoundError:
19 | # Can happen if the cwd has been deleted
20 | _IMPORT_CWD = ""
21 |
22 |
23 | def get_console() -> "Console":
24 | """Get a global :class:`~rich.console.Console` instance. This function is used when Rich requires a Console,
25 | and hasn't been explicitly given one.
26 |
27 | Returns:
28 | Console: A console instance.
29 | """
30 | global _console
31 | if _console is None:
32 | from .console import Console
33 |
34 | _console = Console()
35 |
36 | return _console
37 |
38 |
39 | def reconfigure(*args: Any, **kwargs: Any) -> None:
40 | """Reconfigures the global console by replacing it with another.
41 |
42 | Args:
43 | *args (Any): Positional arguments for the replacement :class:`~rich.console.Console`.
44 | **kwargs (Any): Keyword arguments for the replacement :class:`~rich.console.Console`.
45 | """
46 | from pip._vendor.rich.console import Console
47 |
48 | new_console = Console(*args, **kwargs)
49 | _console = get_console()
50 | _console.__dict__ = new_console.__dict__
51 |
52 |
53 | def print(
54 | *objects: Any,
55 | sep: str = " ",
56 | end: str = "\n",
57 | file: Optional[IO[str]] = None,
58 | flush: bool = False,
59 | ) -> None:
60 | r"""Print object(s) supplied via positional arguments.
61 | This function has an identical signature to the built-in print.
62 | For more advanced features, see the :class:`~rich.console.Console` class.
63 |
64 | Args:
65 | sep (str, optional): Separator between printed objects. Defaults to " ".
66 | end (str, optional): Character to write at end of output. Defaults to "\\n".
67 | file (IO[str], optional): File to write to, or None for stdout. Defaults to None.
68 | flush (bool, optional): Has no effect as Rich always flushes output. Defaults to False.
69 |
70 | """
71 | from .console import Console
72 |
73 | write_console = get_console() if file is None else Console(file=file)
74 | return write_console.print(*objects, sep=sep, end=end)
75 |
76 |
77 | def print_json(
78 | json: Optional[str] = None,
79 | *,
80 | data: Any = None,
81 | indent: Union[None, int, str] = 2,
82 | highlight: bool = True,
83 | skip_keys: bool = False,
84 | ensure_ascii: bool = False,
85 | check_circular: bool = True,
86 | allow_nan: bool = True,
87 | default: Optional[Callable[[Any], Any]] = None,
88 | sort_keys: bool = False,
89 | ) -> None:
90 | """Pretty prints JSON. Output will be valid JSON.
91 |
92 | Args:
93 | json (str): A string containing JSON.
94 | data (Any): If json is not supplied, then encode this data.
95 | indent (int, optional): Number of spaces to indent. Defaults to 2.
96 | highlight (bool, optional): Enable highlighting of output: Defaults to True.
97 | skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False.
98 | ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False.
99 | check_circular (bool, optional): Check for circular references. Defaults to True.
100 | allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True.
101 | default (Callable, optional): A callable that converts values that can not be encoded
102 | in to something that can be JSON encoded. Defaults to None.
103 | sort_keys (bool, optional): Sort dictionary keys. Defaults to False.
104 | """
105 |
106 | get_console().print_json(
107 | json,
108 | data=data,
109 | indent=indent,
110 | highlight=highlight,
111 | skip_keys=skip_keys,
112 | ensure_ascii=ensure_ascii,
113 | check_circular=check_circular,
114 | allow_nan=allow_nan,
115 | default=default,
116 | sort_keys=sort_keys,
117 | )
118 |
119 |
120 | def inspect(
121 | obj: Any,
122 | *,
123 | console: Optional["Console"] = None,
124 | title: Optional[str] = None,
125 | help: bool = False,
126 | methods: bool = False,
127 | docs: bool = True,
128 | private: bool = False,
129 | dunder: bool = False,
130 | sort: bool = True,
131 | all: bool = False,
132 | value: bool = True,
133 | ) -> None:
134 | """Inspect any Python object.
135 |
136 | * inspect(<OBJECT>) to see summarized info.
137 | * inspect(<OBJECT>, methods=True) to see methods.
138 | * inspect(<OBJECT>, help=True) to see full (non-abbreviated) help.
139 | * inspect(<OBJECT>, private=True) to see private attributes (single underscore).
140 | * inspect(<OBJECT>, dunder=True) to see attributes beginning with double underscore.
141 | * inspect(<OBJECT>, all=True) to see all attributes.
142 |
143 | Args:
144 | obj (Any): An object to inspect.
145 | title (str, optional): Title to display over inspect result, or None use type. Defaults to None.
146 | help (bool, optional): Show full help text rather than just first paragraph. Defaults to False.
147 | methods (bool, optional): Enable inspection of callables. Defaults to False.
148 | docs (bool, optional): Also render doc strings. Defaults to True.
149 | private (bool, optional): Show private attributes (beginning with underscore). Defaults to False.
150 | dunder (bool, optional): Show attributes starting with double underscore. Defaults to False.
151 | sort (bool, optional): Sort attributes alphabetically. Defaults to True.
152 | all (bool, optional): Show all attributes. Defaults to False.
153 | value (bool, optional): Pretty print value. Defaults to True.
154 | """
155 | _console = console or get_console()
156 | from pip._vendor.rich._inspect import Inspect
157 |
158 | # Special case for inspect(inspect)
159 | is_inspect = obj is inspect
160 |
161 | _inspect = Inspect(
162 | obj,
163 | title=title,
164 | help=is_inspect or help,
165 | methods=is_inspect or methods,
166 | docs=is_inspect or docs,
167 | private=private,
168 | dunder=dunder,
169 | sort=sort,
170 | all=all,
171 | value=value,
172 | )
173 | _console.print(_inspect)
174 |
175 |
176 | if __name__ == "__main__": # pragma: no cover
177 | print("Hello, **World**")
178 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xmlmemory.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: interface for the memory allocator
3 | * Description: provides interfaces for the memory allocator,
4 | * including debugging capabilities.
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Daniel Veillard
9 | */
10 |
11 |
12 | #ifndef __DEBUG_MEMORY_ALLOC__
13 | #define __DEBUG_MEMORY_ALLOC__
14 |
15 | #include <stdio.h>
16 | #include <libxml/xmlversion.h>
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | /*
23 | * The XML memory wrapper support 4 basic overloadable functions.
24 | */
25 | /**
26 | * xmlFreeFunc:
27 | * @mem: an already allocated block of memory
28 | *
29 | * Signature for a free() implementation.
30 | */
31 | typedef void (*xmlFreeFunc)(void *mem);
32 | /**
33 | * xmlMallocFunc:
34 | * @size: the size requested in bytes
35 | *
36 | * Signature for a malloc() implementation.
37 | *
38 | * Returns a pointer to the newly allocated block or NULL in case of error.
39 | */
40 | typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) *xmlMallocFunc)(size_t size);
41 |
42 | /**
43 | * xmlReallocFunc:
44 | * @mem: an already allocated block of memory
45 | * @size: the new size requested in bytes
46 | *
47 | * Signature for a realloc() implementation.
48 | *
49 | * Returns a pointer to the newly reallocated block or NULL in case of error.
50 | */
51 | typedef void *(*xmlReallocFunc)(void *mem, size_t size);
52 |
53 | /**
54 | * xmlStrdupFunc:
55 | * @str: a zero terminated string
56 | *
57 | * Signature for an strdup() implementation.
58 | *
59 | * Returns the copy of the string or NULL in case of error.
60 | */
61 | typedef char *(*xmlStrdupFunc)(const char *str);
62 |
63 | /*
64 | * In general the memory allocation entry points are not kept
65 | * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
66 | * - xmlMalloc
67 | * - xmlMallocAtomic
68 | * - xmlRealloc
69 | * - xmlMemStrdup
70 | * - xmlFree
71 | */
72 | /** DOC_DISABLE */
73 | #ifdef LIBXML_THREAD_ALLOC_ENABLED
74 | #define XML_GLOBALS_ALLOC \
75 | XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \
76 | XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \
77 | XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \
78 | XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \
79 | XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR)
80 | #define XML_OP XML_DECLARE_GLOBAL
81 | XML_GLOBALS_ALLOC
82 | #undef XML_OP
83 | #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
84 | #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
85 | #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
86 | #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
87 | #define xmlFree XML_GLOBAL_MACRO(xmlFree)
88 | #define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup)
89 | #endif
90 | #else
91 | #define XML_GLOBALS_ALLOC
92 | /** DOC_ENABLE */
93 | XMLPUBVAR xmlMallocFunc xmlMalloc;
94 | XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
95 | XMLPUBVAR xmlReallocFunc xmlRealloc;
96 | XMLPUBVAR xmlFreeFunc xmlFree;
97 | XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
98 | #endif
99 |
100 | /*
101 | * The way to overload the existing functions.
102 | * The xmlGc function have an extra entry for atomic block
103 | * allocations useful for garbage collected memory allocators
104 | */
105 | XMLPUBFUN int
106 | xmlMemSetup (xmlFreeFunc freeFunc,
107 | xmlMallocFunc mallocFunc,
108 | xmlReallocFunc reallocFunc,
109 | xmlStrdupFunc strdupFunc);
110 | XMLPUBFUN int
111 | xmlMemGet (xmlFreeFunc *freeFunc,
112 | xmlMallocFunc *mallocFunc,
113 | xmlReallocFunc *reallocFunc,
114 | xmlStrdupFunc *strdupFunc);
115 | XMLPUBFUN int
116 | xmlGcMemSetup (xmlFreeFunc freeFunc,
117 | xmlMallocFunc mallocFunc,
118 | xmlMallocFunc mallocAtomicFunc,
119 | xmlReallocFunc reallocFunc,
120 | xmlStrdupFunc strdupFunc);
121 | XMLPUBFUN int
122 | xmlGcMemGet (xmlFreeFunc *freeFunc,
123 | xmlMallocFunc *mallocFunc,
124 | xmlMallocFunc *mallocAtomicFunc,
125 | xmlReallocFunc *reallocFunc,
126 | xmlStrdupFunc *strdupFunc);
127 |
128 | /*
129 | * Initialization of the memory layer.
130 | */
131 | XML_DEPRECATED
132 | XMLPUBFUN int
133 | xmlInitMemory (void);
134 |
135 | /*
136 | * Cleanup of the memory layer.
137 | */
138 | XML_DEPRECATED
139 | XMLPUBFUN void
140 | xmlCleanupMemory (void);
141 | /*
142 | * These are specific to the XML debug memory wrapper.
143 | */
144 | XMLPUBFUN size_t
145 | xmlMemSize (void *ptr);
146 | XMLPUBFUN int
147 | xmlMemUsed (void);
148 | XMLPUBFUN int
149 | xmlMemBlocks (void);
150 | XMLPUBFUN void
151 | xmlMemDisplay (FILE *fp);
152 | XMLPUBFUN void
153 | xmlMemDisplayLast(FILE *fp, long nbBytes);
154 | XMLPUBFUN void
155 | xmlMemShow (FILE *fp, int nr);
156 | XMLPUBFUN void
157 | xmlMemoryDump (void);
158 | XMLPUBFUN void *
159 | xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
160 | XMLPUBFUN void *
161 | xmlMemRealloc (void *ptr,size_t size);
162 | XMLPUBFUN void
163 | xmlMemFree (void *ptr);
164 | XMLPUBFUN char *
165 | xmlMemoryStrdup (const char *str);
166 | XMLPUBFUN void *
167 | xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
168 | XMLPUBFUN void *
169 | xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
170 | XMLPUBFUN void *
171 | xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
172 | XMLPUBFUN char *
173 | xmlMemStrdupLoc (const char *str, const char *file, int line);
174 |
175 |
176 | /** DOC_DISABLE */
177 | #ifdef DEBUG_MEMORY_LOCATION
178 | /**
179 | * xmlMalloc:
180 | * @size: number of bytes to allocate
181 | *
182 | * Wrapper for the malloc() function used in the XML library.
183 | *
184 | * Returns the pointer to the allocated area or NULL in case of error.
185 | */
186 | #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
187 | /**
188 | * xmlMallocAtomic:
189 | * @size: number of bytes to allocate
190 | *
191 | * Wrapper for the malloc() function used in the XML library for allocation
192 | * of block not containing pointers to other areas.
193 | *
194 | * Returns the pointer to the allocated area or NULL in case of error.
195 | */
196 | #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
197 | /**
198 | * xmlRealloc:
199 | * @ptr: pointer to the existing allocated area
200 | * @size: number of bytes to allocate
201 | *
202 | * Wrapper for the realloc() function used in the XML library.
203 | *
204 | * Returns the pointer to the allocated area or NULL in case of error.
205 | */
206 | #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
207 | /**
208 | * xmlMemStrdup:
209 | * @str: pointer to the existing string
210 | *
211 | * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
212 | *
213 | * Returns the pointer to the allocated area or NULL in case of error.
214 | */
215 | #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
216 |
217 | #endif /* DEBUG_MEMORY_LOCATION */
218 | /** DOC_ENABLE */
219 |
220 | #ifdef __cplusplus
221 | }
222 | #endif /* __cplusplus */
223 |
224 | #endif /* __DEBUG_MEMORY_ALLOC__ */
225 |
226 |
```