This is page 7 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py:
--------------------------------------------------------------------------------
```python
1 | # This file is dual licensed under the terms of the Apache License, Version
2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository
3 | # for complete details.
4 | from __future__ import annotations
5 |
6 | from typing import Any, Iterator
7 |
8 | from ._parser import parse_requirement as _parse_requirement
9 | from ._tokenizer import ParserSyntaxError
10 | from .markers import Marker, _normalize_extra_values
11 | from .specifiers import SpecifierSet
12 | from .utils import canonicalize_name
13 |
14 |
15 | class InvalidRequirement(ValueError):
16 | """
17 | An invalid requirement was found, users should refer to PEP 508.
18 | """
19 |
20 |
21 | class Requirement:
22 | """Parse a requirement.
23 |
24 | Parse a given requirement string into its parts, such as name, specifier,
25 | URL, and extras. Raises InvalidRequirement on a badly-formed requirement
26 | string.
27 | """
28 |
29 | # TODO: Can we test whether something is contained within a requirement?
30 | # If so how do we do that? Do we need to test against the _name_ of
31 | # the thing as well as the version? What about the markers?
32 | # TODO: Can we normalize the name and extra name?
33 |
34 | def __init__(self, requirement_string: str) -> None:
35 | try:
36 | parsed = _parse_requirement(requirement_string)
37 | except ParserSyntaxError as e:
38 | raise InvalidRequirement(str(e)) from e
39 |
40 | self.name: str = parsed.name
41 | self.url: str | None = parsed.url or None
42 | self.extras: set[str] = set(parsed.extras or [])
43 | self.specifier: SpecifierSet = SpecifierSet(parsed.specifier)
44 | self.marker: Marker | None = None
45 | if parsed.marker is not None:
46 | self.marker = Marker.__new__(Marker)
47 | self.marker._markers = _normalize_extra_values(parsed.marker)
48 |
49 | def _iter_parts(self, name: str) -> Iterator[str]:
50 | yield name
51 |
52 | if self.extras:
53 | formatted_extras = ",".join(sorted(self.extras))
54 | yield f"[{formatted_extras}]"
55 |
56 | if self.specifier:
57 | yield str(self.specifier)
58 |
59 | if self.url:
60 | yield f"@ {self.url}"
61 | if self.marker:
62 | yield " "
63 |
64 | if self.marker:
65 | yield f"; {self.marker}"
66 |
67 | def __str__(self) -> str:
68 | return "".join(self._iter_parts(self.name))
69 |
70 | def __repr__(self) -> str:
71 | return f"<Requirement('{self}')>"
72 |
73 | def __hash__(self) -> int:
74 | return hash(
75 | (
76 | self.__class__.__name__,
77 | *self._iter_parts(canonicalize_name(self.name)),
78 | )
79 | )
80 |
81 | def __eq__(self, other: Any) -> bool:
82 | if not isinstance(other, Requirement):
83 | return NotImplemented
84 |
85 | return (
86 | canonicalize_name(self.name) == canonicalize_name(other.name)
87 | and self.extras == other.extras
88 | and self.specifier == other.specifier
89 | and self.url == other.url
90 | and self.marker == other.marker
91 | )
92 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxslt/xsltconfig.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: compile-time version information for the XSLT engine
3 | * Description: compile-time version information for the XSLT engine
4 | * this module is autogenerated.
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Daniel Veillard
9 | */
10 |
11 | #ifndef __XML_XSLTCONFIG_H__
12 | #define __XML_XSLTCONFIG_H__
13 |
14 | #ifdef __cplusplus
15 | extern "C" {
16 | #endif
17 |
18 | /**
19 | * LIBXSLT_DOTTED_VERSION:
20 | *
21 | * the version string like "1.2.3"
22 | */
23 | #define LIBXSLT_DOTTED_VERSION "1.1.42"
24 |
25 | /**
26 | * LIBXSLT_VERSION:
27 | *
28 | * the version number: 1.2.3 value is 10203
29 | */
30 | #define LIBXSLT_VERSION 10142
31 |
32 | /**
33 | * LIBXSLT_VERSION_STRING:
34 | *
35 | * the version number string, 1.2.3 value is "10203"
36 | */
37 | #define LIBXSLT_VERSION_STRING "10142"
38 |
39 | /**
40 | * LIBXSLT_VERSION_EXTRA:
41 | *
42 | * extra version information, used to show a Git commit description
43 | */
44 | #define LIBXSLT_VERSION_EXTRA ""
45 |
46 | /**
47 | * WITH_XSLT_DEBUG:
48 | *
49 | * Activate the compilation of the debug reporting. Speed penalty
50 | * is insignifiant and being able to run xsltpoc -v is useful. On
51 | * by default unless --without-debug is passed to configure
52 | */
53 | #if 1
54 | #define WITH_XSLT_DEBUG
55 | #endif
56 |
57 | /**
58 | * XSLT_NEED_TRIO:
59 | *
60 | * should be activated if the existing libc library lacks some of the
61 | * string formatting function, in that case reuse the Trio ones already
62 | * compiled in the libxml2 library.
63 | */
64 |
65 | #if 0
66 | #define XSLT_NEED_TRIO
67 | #endif
68 | #ifdef __VMS
69 | #define HAVE_SYS_STAT_H 1
70 | #ifndef XSLT_NEED_TRIO
71 | #define XSLT_NEED_TRIO
72 | #endif
73 | #endif
74 |
75 | #ifdef XSLT_NEED_TRIO
76 | #define TRIO_REPLACE_STDIO
77 | #endif
78 |
79 | /**
80 | * WITH_XSLT_DEBUGGER:
81 | *
82 | * Activate the compilation of the debugger support. Speed penalty
83 | * is insignifiant.
84 | * On by default unless --without-debugger is passed to configure
85 | */
86 | #if 1
87 | #ifndef WITH_DEBUGGER
88 | #define WITH_DEBUGGER
89 | #endif
90 | #endif
91 |
92 | /**
93 | * WITH_PROFILER:
94 | *
95 | * Activate the compilation of the profiler. Speed penalty
96 | * is insignifiant.
97 | * On by default unless --without-profiler is passed to configure
98 | */
99 | #if 1
100 | #ifndef WITH_PROFILER
101 | #define WITH_PROFILER
102 | #endif
103 | #endif
104 |
105 | /**
106 | * WITH_MODULES:
107 | *
108 | * Whether module support is configured into libxslt
109 | * Note: no default module path for win32 platforms
110 | */
111 | #if 0
112 | #ifndef WITH_MODULES
113 | #define WITH_MODULES
114 | #endif
115 | #define LIBXSLT_DEFAULT_PLUGINS_PATH() "/Users/runner/work/lxml/lxml/build/tmp/libxml2/lib/libxslt-plugins"
116 | #endif
117 |
118 | /**
119 | * LIBXSLT_ATTR_FORMAT:
120 | *
121 | * This macro is used to indicate to GCC the parameters are printf-like
122 | */
123 | #ifdef __GNUC__
124 | #define LIBXSLT_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
125 | #else
126 | #define LIBXSLT_ATTR_FORMAT(fmt,args)
127 | #endif
128 |
129 | /**
130 | * LIBXSLT_PUBLIC:
131 | *
132 | * This macro is used to declare PUBLIC variables for Cygwin and for MSC on Windows
133 | */
134 | #if !defined LIBXSLT_PUBLIC
135 | #if (defined(__CYGWIN__) || defined _MSC_VER) && !defined IN_LIBXSLT && !defined LIBXSLT_STATIC
136 | #define LIBXSLT_PUBLIC __declspec(dllimport)
137 | #else
138 | #define LIBXSLT_PUBLIC
139 | #endif
140 | #endif
141 |
142 | #ifdef __cplusplus
143 | }
144 | #endif
145 |
146 | #endif /* __XML_XSLTCONFIG_H__ */
147 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Pygments
3 | ~~~~~~~~
4 |
5 | Pygments is a syntax highlighting package written in Python.
6 |
7 | It is a generic syntax highlighter for general use in all kinds of software
8 | such as forum systems, wikis or other applications that need to prettify
9 | source code. Highlights are:
10 |
11 | * a wide range of common languages and markup formats is supported
12 | * special attention is paid to details, increasing quality by a fair amount
13 | * support for new languages and formats are added easily
14 | * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image
15 | formats that PIL supports, and ANSI sequences
16 | * it is usable as a command-line tool and as a library
17 | * ... and it highlights even Brainfuck!
18 |
19 | The `Pygments master branch`_ is installable with ``easy_install Pygments==dev``.
20 |
21 | .. _Pygments master branch:
22 | https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev
23 |
24 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
25 | :license: BSD, see LICENSE for details.
26 | """
27 | from io import StringIO, BytesIO
28 |
29 | __version__ = '2.18.0'
30 | __docformat__ = 'restructuredtext'
31 |
32 | __all__ = ['lex', 'format', 'highlight']
33 |
34 |
35 | def lex(code, lexer):
36 | """
37 | Lex `code` with the `lexer` (must be a `Lexer` instance)
38 | and return an iterable of tokens. Currently, this only calls
39 | `lexer.get_tokens()`.
40 | """
41 | try:
42 | return lexer.get_tokens(code)
43 | except TypeError:
44 | # Heuristic to catch a common mistake.
45 | from pip._vendor.pygments.lexer import RegexLexer
46 | if isinstance(lexer, type) and issubclass(lexer, RegexLexer):
47 | raise TypeError('lex() argument must be a lexer instance, '
48 | 'not a class')
49 | raise
50 |
51 |
52 | def format(tokens, formatter, outfile=None): # pylint: disable=redefined-builtin
53 | """
54 | Format ``tokens`` (an iterable of tokens) with the formatter ``formatter``
55 | (a `Formatter` instance).
56 |
57 | If ``outfile`` is given and a valid file object (an object with a
58 | ``write`` method), the result will be written to it, otherwise it
59 | is returned as a string.
60 | """
61 | try:
62 | if not outfile:
63 | realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO()
64 | formatter.format(tokens, realoutfile)
65 | return realoutfile.getvalue()
66 | else:
67 | formatter.format(tokens, outfile)
68 | except TypeError:
69 | # Heuristic to catch a common mistake.
70 | from pip._vendor.pygments.formatter import Formatter
71 | if isinstance(formatter, type) and issubclass(formatter, Formatter):
72 | raise TypeError('format() argument must be a formatter instance, '
73 | 'not a class')
74 | raise
75 |
76 |
77 | def highlight(code, lexer, formatter, outfile=None):
78 | """
79 | This is the most high-level highlighting function. It combines `lex` and
80 | `format` in one function.
81 | """
82 | return format(lex(code, lexer), formatter, outfile)
83 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/http2/probe.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import threading
4 |
5 |
6 | class _HTTP2ProbeCache:
7 | __slots__ = (
8 | "_lock",
9 | "_cache_locks",
10 | "_cache_values",
11 | )
12 |
13 | def __init__(self) -> None:
14 | self._lock = threading.Lock()
15 | self._cache_locks: dict[tuple[str, int], threading.RLock] = {}
16 | self._cache_values: dict[tuple[str, int], bool | None] = {}
17 |
18 | def acquire_and_get(self, host: str, port: int) -> bool | None:
19 | # By the end of this block we know that
20 | # _cache_[values,locks] is available.
21 | value = None
22 | with self._lock:
23 | key = (host, port)
24 | try:
25 | value = self._cache_values[key]
26 | # If it's a known value we return right away.
27 | if value is not None:
28 | return value
29 | except KeyError:
30 | self._cache_locks[key] = threading.RLock()
31 | self._cache_values[key] = None
32 |
33 | # If the value is unknown, we acquire the lock to signal
34 | # to the requesting thread that the probe is in progress
35 | # or that the current thread needs to return their findings.
36 | key_lock = self._cache_locks[key]
37 | key_lock.acquire()
38 | try:
39 | # If the by the time we get the lock the value has been
40 | # updated we want to return the updated value.
41 | value = self._cache_values[key]
42 |
43 | # In case an exception like KeyboardInterrupt is raised here.
44 | except BaseException as e: # Defensive:
45 | assert not isinstance(e, KeyError) # KeyError shouldn't be possible.
46 | key_lock.release()
47 | raise
48 |
49 | return value
50 |
51 | def set_and_release(
52 | self, host: str, port: int, supports_http2: bool | None
53 | ) -> None:
54 | key = (host, port)
55 | key_lock = self._cache_locks[key]
56 | with key_lock: # Uses an RLock, so can be locked again from same thread.
57 | if supports_http2 is None and self._cache_values[key] is not None:
58 | raise ValueError(
59 | "Cannot reset HTTP/2 support for origin after value has been set."
60 | ) # Defensive: not expected in normal usage
61 |
62 | self._cache_values[key] = supports_http2
63 | key_lock.release()
64 |
65 | def _values(self) -> dict[tuple[str, int], bool | None]:
66 | """This function is for testing purposes only. Gets the current state of the probe cache"""
67 | with self._lock:
68 | return {k: v for k, v in self._cache_values.items()}
69 |
70 | def _reset(self) -> None:
71 | """This function is for testing purposes only. Reset the cache values"""
72 | with self._lock:
73 | self._cache_locks = {}
74 | self._cache_values = {}
75 |
76 |
77 | _HTTP2_PROBE_CACHE = _HTTP2ProbeCache()
78 |
79 | set_and_release = _HTTP2_PROBE_CACHE.set_and_release
80 | acquire_and_get = _HTTP2_PROBE_CACHE.acquire_and_get
81 | _values = _HTTP2_PROBE_CACHE._values
82 | _reset = _HTTP2_PROBE_CACHE._reset
83 |
84 | __all__ = [
85 | "set_and_release",
86 | "acquire_and_get",
87 | ]
88 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/c14n.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: Provide Canonical XML and Exclusive XML Canonicalization
3 | * Description: the c14n modules provides a
4 | *
5 | * "Canonical XML" implementation
6 | * http://www.w3.org/TR/xml-c14n
7 | *
8 | * and an
9 | *
10 | * "Exclusive XML Canonicalization" implementation
11 | * http://www.w3.org/TR/xml-exc-c14n
12 |
13 | * Copy: See Copyright for the status of this software.
14 | *
15 | * Author: Aleksey Sanin <[email protected]>
16 | */
17 | #ifndef __XML_C14N_H__
18 | #define __XML_C14N_H__
19 |
20 | #include <libxml/xmlversion.h>
21 |
22 | #ifdef LIBXML_C14N_ENABLED
23 |
24 | #include <libxml/tree.h>
25 | #include <libxml/xpath.h>
26 |
27 | #ifdef __cplusplus
28 | extern "C" {
29 | #endif /* __cplusplus */
30 |
31 | /*
32 | * XML Canonicalization
33 | * http://www.w3.org/TR/xml-c14n
34 | *
35 | * Exclusive XML Canonicalization
36 | * http://www.w3.org/TR/xml-exc-c14n
37 | *
38 | * Canonical form of an XML document could be created if and only if
39 | * a) default attributes (if any) are added to all nodes
40 | * b) all character and parsed entity references are resolved
41 | * In order to achieve this in libxml2 the document MUST be loaded with
42 | * following global settings:
43 | *
44 | * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
45 | * xmlSubstituteEntitiesDefault(1);
46 | *
47 | * or corresponding parser context setting:
48 | * xmlParserCtxtPtr ctxt;
49 | *
50 | * ...
51 | * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
52 | * ctxt->replaceEntities = 1;
53 | * ...
54 | */
55 |
56 | /*
57 | * xmlC14NMode:
58 | *
59 | * Predefined values for C14N modes
60 | *
61 | */
62 | typedef enum {
63 | XML_C14N_1_0 = 0, /* Original C14N 1.0 spec */
64 | XML_C14N_EXCLUSIVE_1_0 = 1, /* Exclusive C14N 1.0 spec */
65 | XML_C14N_1_1 = 2 /* C14N 1.1 spec */
66 | } xmlC14NMode;
67 |
68 | XMLPUBFUN int
69 | xmlC14NDocSaveTo (xmlDocPtr doc,
70 | xmlNodeSetPtr nodes,
71 | int mode, /* a xmlC14NMode */
72 | xmlChar **inclusive_ns_prefixes,
73 | int with_comments,
74 | xmlOutputBufferPtr buf);
75 |
76 | XMLPUBFUN int
77 | xmlC14NDocDumpMemory (xmlDocPtr doc,
78 | xmlNodeSetPtr nodes,
79 | int mode, /* a xmlC14NMode */
80 | xmlChar **inclusive_ns_prefixes,
81 | int with_comments,
82 | xmlChar **doc_txt_ptr);
83 |
84 | XMLPUBFUN int
85 | xmlC14NDocSave (xmlDocPtr doc,
86 | xmlNodeSetPtr nodes,
87 | int mode, /* a xmlC14NMode */
88 | xmlChar **inclusive_ns_prefixes,
89 | int with_comments,
90 | const char* filename,
91 | int compression);
92 |
93 |
94 | /**
95 | * This is the core C14N function
96 | */
97 | /**
98 | * xmlC14NIsVisibleCallback:
99 | * @user_data: user data
100 | * @node: the current node
101 | * @parent: the parent node
102 | *
103 | * Signature for a C14N callback on visible nodes
104 | *
105 | * Returns 1 if the node should be included
106 | */
107 | typedef int (*xmlC14NIsVisibleCallback) (void* user_data,
108 | xmlNodePtr node,
109 | xmlNodePtr parent);
110 |
111 | XMLPUBFUN int
112 | xmlC14NExecute (xmlDocPtr doc,
113 | xmlC14NIsVisibleCallback is_visible_callback,
114 | void* user_data,
115 | int mode, /* a xmlC14NMode */
116 | xmlChar **inclusive_ns_prefixes,
117 | int with_comments,
118 | xmlOutputBufferPtr buf);
119 |
120 | #ifdef __cplusplus
121 | }
122 | #endif /* __cplusplus */
123 |
124 | #endif /* LIBXML_C14N_ENABLED */
125 | #endif /* __XML_C14N_H__ */
126 |
127 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py:
--------------------------------------------------------------------------------
```python
1 | import itertools
2 | import os
3 | import shutil
4 | import sys
5 | from typing import List, Optional
6 |
7 | from pip._internal.cli.main import main
8 | from pip._internal.utils.compat import WINDOWS
9 |
10 | _EXECUTABLE_NAMES = [
11 | "pip",
12 | f"pip{sys.version_info.major}",
13 | f"pip{sys.version_info.major}.{sys.version_info.minor}",
14 | ]
15 | if WINDOWS:
16 | _allowed_extensions = {"", ".exe"}
17 | _EXECUTABLE_NAMES = [
18 | "".join(parts)
19 | for parts in itertools.product(_EXECUTABLE_NAMES, _allowed_extensions)
20 | ]
21 |
22 |
23 | def _wrapper(args: Optional[List[str]] = None) -> int:
24 | """Central wrapper for all old entrypoints.
25 |
26 | Historically pip has had several entrypoints defined. Because of issues
27 | arising from PATH, sys.path, multiple Pythons, their interactions, and most
28 | of them having a pip installed, users suffer every time an entrypoint gets
29 | moved.
30 |
31 | To alleviate this pain, and provide a mechanism for warning users and
32 | directing them to an appropriate place for help, we now define all of
33 | our old entrypoints as wrappers for the current one.
34 | """
35 | sys.stderr.write(
36 | "WARNING: pip is being invoked by an old script wrapper. This will "
37 | "fail in a future version of pip.\n"
38 | "Please see https://github.com/pypa/pip/issues/5599 for advice on "
39 | "fixing the underlying issue.\n"
40 | "To avoid this problem you can invoke Python with '-m pip' instead of "
41 | "running pip directly.\n"
42 | )
43 | return main(args)
44 |
45 |
46 | def get_best_invocation_for_this_pip() -> str:
47 | """Try to figure out the best way to invoke pip in the current environment."""
48 | binary_directory = "Scripts" if WINDOWS else "bin"
49 | binary_prefix = os.path.join(sys.prefix, binary_directory)
50 |
51 | # Try to use pip[X[.Y]] names, if those executables for this environment are
52 | # the first on PATH with that name.
53 | path_parts = os.path.normcase(os.environ.get("PATH", "")).split(os.pathsep)
54 | exe_are_in_PATH = os.path.normcase(binary_prefix) in path_parts
55 | if exe_are_in_PATH:
56 | for exe_name in _EXECUTABLE_NAMES:
57 | found_executable = shutil.which(exe_name)
58 | binary_executable = os.path.join(binary_prefix, exe_name)
59 | if (
60 | found_executable
61 | and os.path.exists(binary_executable)
62 | and os.path.samefile(
63 | found_executable,
64 | binary_executable,
65 | )
66 | ):
67 | return exe_name
68 |
69 | # Use the `-m` invocation, if there's no "nice" invocation.
70 | return f"{get_best_invocation_for_this_python()} -m pip"
71 |
72 |
73 | def get_best_invocation_for_this_python() -> str:
74 | """Try to figure out the best way to invoke the current Python."""
75 | exe = sys.executable
76 | exe_name = os.path.basename(exe)
77 |
78 | # Try to use the basename, if it's the first executable.
79 | found_executable = shutil.which(exe_name)
80 | if found_executable and os.path.samefile(found_executable, exe):
81 | return exe_name
82 |
83 | # Use the full executable name, because we couldn't find something simpler.
84 | return exe
85 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.regexopt
3 | ~~~~~~~~~~~~~~~~~
4 |
5 | An algorithm that generates optimized regexes for matching long lists of
6 | literal strings.
7 |
8 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
9 | :license: BSD, see LICENSE for details.
10 | """
11 |
12 | import re
13 | from re import escape
14 | from os.path import commonprefix
15 | from itertools import groupby
16 | from operator import itemgetter
17 |
18 | CS_ESCAPE = re.compile(r'[\[\^\\\-\]]')
19 | FIRST_ELEMENT = itemgetter(0)
20 |
21 |
22 | def make_charset(letters):
23 | return '[' + CS_ESCAPE.sub(lambda m: '\\' + m.group(), ''.join(letters)) + ']'
24 |
25 |
26 | def regex_opt_inner(strings, open_paren):
27 | """Return a regex that matches any string in the sorted list of strings."""
28 | close_paren = open_paren and ')' or ''
29 | # print strings, repr(open_paren)
30 | if not strings:
31 | # print '-> nothing left'
32 | return ''
33 | first = strings[0]
34 | if len(strings) == 1:
35 | # print '-> only 1 string'
36 | return open_paren + escape(first) + close_paren
37 | if not first:
38 | # print '-> first string empty'
39 | return open_paren + regex_opt_inner(strings[1:], '(?:') \
40 | + '?' + close_paren
41 | if len(first) == 1:
42 | # multiple one-char strings? make a charset
43 | oneletter = []
44 | rest = []
45 | for s in strings:
46 | if len(s) == 1:
47 | oneletter.append(s)
48 | else:
49 | rest.append(s)
50 | if len(oneletter) > 1: # do we have more than one oneletter string?
51 | if rest:
52 | # print '-> 1-character + rest'
53 | return open_paren + regex_opt_inner(rest, '') + '|' \
54 | + make_charset(oneletter) + close_paren
55 | # print '-> only 1-character'
56 | return open_paren + make_charset(oneletter) + close_paren
57 | prefix = commonprefix(strings)
58 | if prefix:
59 | plen = len(prefix)
60 | # we have a prefix for all strings
61 | # print '-> prefix:', prefix
62 | return open_paren + escape(prefix) \
63 | + regex_opt_inner([s[plen:] for s in strings], '(?:') \
64 | + close_paren
65 | # is there a suffix?
66 | strings_rev = [s[::-1] for s in strings]
67 | suffix = commonprefix(strings_rev)
68 | if suffix:
69 | slen = len(suffix)
70 | # print '-> suffix:', suffix[::-1]
71 | return open_paren \
72 | + regex_opt_inner(sorted(s[:-slen] for s in strings), '(?:') \
73 | + escape(suffix[::-1]) + close_paren
74 | # recurse on common 1-string prefixes
75 | # print '-> last resort'
76 | return open_paren + \
77 | '|'.join(regex_opt_inner(list(group[1]), '')
78 | for group in groupby(strings, lambda s: s[0] == first[0])) \
79 | + close_paren
80 |
81 |
82 | def regex_opt(strings, prefix='', suffix=''):
83 | """Return a compiled regex that matches any string in the given list.
84 |
85 | The strings to match must be literal strings, not regexes. They will be
86 | regex-escaped.
87 |
88 | *prefix* and *suffix* are pre- and appended to the final regex.
89 | """
90 | strings = sorted(strings)
91 | return prefix + regex_opt_inner(strings, '(') + suffix
92 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.scanner
3 | ~~~~~~~~~~~~~~~~
4 |
5 | This library implements a regex based scanner. Some languages
6 | like Pascal are easy to parse but have some keywords that
7 | depend on the context. Because of this it's impossible to lex
8 | that just by using a regular expression lexer like the
9 | `RegexLexer`.
10 |
11 | Have a look at the `DelphiLexer` to get an idea of how to use
12 | this scanner.
13 |
14 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
15 | :license: BSD, see LICENSE for details.
16 | """
17 | import re
18 |
19 |
20 | class EndOfText(RuntimeError):
21 | """
22 | Raise if end of text is reached and the user
23 | tried to call a match function.
24 | """
25 |
26 |
27 | class Scanner:
28 | """
29 | Simple scanner
30 |
31 | All method patterns are regular expression strings (not
32 | compiled expressions!)
33 | """
34 |
35 | def __init__(self, text, flags=0):
36 | """
37 | :param text: The text which should be scanned
38 | :param flags: default regular expression flags
39 | """
40 | self.data = text
41 | self.data_length = len(text)
42 | self.start_pos = 0
43 | self.pos = 0
44 | self.flags = flags
45 | self.last = None
46 | self.match = None
47 | self._re_cache = {}
48 |
49 | def eos(self):
50 | """`True` if the scanner reached the end of text."""
51 | return self.pos >= self.data_length
52 | eos = property(eos, eos.__doc__)
53 |
54 | def check(self, pattern):
55 | """
56 | Apply `pattern` on the current position and return
57 | the match object. (Doesn't touch pos). Use this for
58 | lookahead.
59 | """
60 | if self.eos:
61 | raise EndOfText()
62 | if pattern not in self._re_cache:
63 | self._re_cache[pattern] = re.compile(pattern, self.flags)
64 | return self._re_cache[pattern].match(self.data, self.pos)
65 |
66 | def test(self, pattern):
67 | """Apply a pattern on the current position and check
68 | if it patches. Doesn't touch pos.
69 | """
70 | return self.check(pattern) is not None
71 |
72 | def scan(self, pattern):
73 | """
74 | Scan the text for the given pattern and update pos/match
75 | and related fields. The return value is a boolean that
76 | indicates if the pattern matched. The matched value is
77 | stored on the instance as ``match``, the last value is
78 | stored as ``last``. ``start_pos`` is the position of the
79 | pointer before the pattern was matched, ``pos`` is the
80 | end position.
81 | """
82 | if self.eos:
83 | raise EndOfText()
84 | if pattern not in self._re_cache:
85 | self._re_cache[pattern] = re.compile(pattern, self.flags)
86 | self.last = self.match
87 | m = self._re_cache[pattern].match(self.data, self.pos)
88 | if m is None:
89 | return False
90 | self.start_pos = m.start()
91 | self.pos = m.end()
92 | self.match = m.group()
93 | return True
94 |
95 | def get_char(self):
96 | """Scan exactly one char."""
97 | self.scan('.')
98 |
99 | def __repr__(self):
100 | return '<%s %d/%d>' % (
101 | self.__class__.__name__,
102 | self.pos,
103 | self.data_length
104 | )
105 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libexslt/exslt.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: main header file
3 | *
4 | * Copy: See Copyright for the status of this software.
5 | */
6 |
7 |
8 | #ifndef __EXSLT_H__
9 | #define __EXSLT_H__
10 |
11 | #include <libxml/tree.h>
12 | #include <libxml/xpath.h>
13 | #include "exsltexports.h"
14 | #include <libexslt/exsltconfig.h>
15 |
16 | #ifdef __cplusplus
17 | extern "C" {
18 | #endif
19 |
20 | EXSLTPUBVAR const char *exsltLibraryVersion;
21 | EXSLTPUBVAR const int exsltLibexsltVersion;
22 | EXSLTPUBVAR const int exsltLibxsltVersion;
23 | EXSLTPUBVAR const int exsltLibxmlVersion;
24 |
25 | /**
26 | * EXSLT_COMMON_NAMESPACE:
27 | *
28 | * Namespace for EXSLT common functions
29 | */
30 | #define EXSLT_COMMON_NAMESPACE ((const xmlChar *) "http://exslt.org/common")
31 | /**
32 | * EXSLT_CRYPTO_NAMESPACE:
33 | *
34 | * Namespace for EXSLT crypto functions
35 | */
36 | #define EXSLT_CRYPTO_NAMESPACE ((const xmlChar *) "http://exslt.org/crypto")
37 | /**
38 | * EXSLT_MATH_NAMESPACE:
39 | *
40 | * Namespace for EXSLT math functions
41 | */
42 | #define EXSLT_MATH_NAMESPACE ((const xmlChar *) "http://exslt.org/math")
43 | /**
44 | * EXSLT_SETS_NAMESPACE:
45 | *
46 | * Namespace for EXSLT set functions
47 | */
48 | #define EXSLT_SETS_NAMESPACE ((const xmlChar *) "http://exslt.org/sets")
49 | /**
50 | * EXSLT_FUNCTIONS_NAMESPACE:
51 | *
52 | * Namespace for EXSLT functions extension functions
53 | */
54 | #define EXSLT_FUNCTIONS_NAMESPACE ((const xmlChar *) "http://exslt.org/functions")
55 | /**
56 | * EXSLT_STRINGS_NAMESPACE:
57 | *
58 | * Namespace for EXSLT strings functions
59 | */
60 | #define EXSLT_STRINGS_NAMESPACE ((const xmlChar *) "http://exslt.org/strings")
61 | /**
62 | * EXSLT_DATE_NAMESPACE:
63 | *
64 | * Namespace for EXSLT date functions
65 | */
66 | #define EXSLT_DATE_NAMESPACE ((const xmlChar *) "http://exslt.org/dates-and-times")
67 | /**
68 | * EXSLT_DYNAMIC_NAMESPACE:
69 | *
70 | * Namespace for EXSLT dynamic functions
71 | */
72 | #define EXSLT_DYNAMIC_NAMESPACE ((const xmlChar *) "http://exslt.org/dynamic")
73 |
74 | /**
75 | * SAXON_NAMESPACE:
76 | *
77 | * Namespace for SAXON extensions functions
78 | */
79 | #define SAXON_NAMESPACE ((const xmlChar *) "http://icl.com/saxon")
80 |
81 | EXSLTPUBFUN void EXSLTCALL exsltCommonRegister (void);
82 | #ifdef EXSLT_CRYPTO_ENABLED
83 | EXSLTPUBFUN void EXSLTCALL exsltCryptoRegister (void);
84 | #endif
85 | EXSLTPUBFUN void EXSLTCALL exsltMathRegister (void);
86 | EXSLTPUBFUN void EXSLTCALL exsltSetsRegister (void);
87 | EXSLTPUBFUN void EXSLTCALL exsltFuncRegister (void);
88 | EXSLTPUBFUN void EXSLTCALL exsltStrRegister (void);
89 | EXSLTPUBFUN void EXSLTCALL exsltDateRegister (void);
90 | EXSLTPUBFUN void EXSLTCALL exsltSaxonRegister (void);
91 | EXSLTPUBFUN void EXSLTCALL exsltDynRegister(void);
92 |
93 | EXSLTPUBFUN void EXSLTCALL exsltRegisterAll (void);
94 |
95 | EXSLTPUBFUN int EXSLTCALL exsltDateXpathCtxtRegister (xmlXPathContextPtr ctxt,
96 | const xmlChar *prefix);
97 | EXSLTPUBFUN int EXSLTCALL exsltMathXpathCtxtRegister (xmlXPathContextPtr ctxt,
98 | const xmlChar *prefix);
99 | EXSLTPUBFUN int EXSLTCALL exsltSetsXpathCtxtRegister (xmlXPathContextPtr ctxt,
100 | const xmlChar *prefix);
101 | EXSLTPUBFUN int EXSLTCALL exsltStrXpathCtxtRegister (xmlXPathContextPtr ctxt,
102 | const xmlChar *prefix);
103 |
104 | #ifdef __cplusplus
105 | }
106 | #endif
107 | #endif /* __EXSLT_H__ */
108 |
109 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/click/__init__.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Click is a simple Python module inspired by the stdlib optparse to make
3 | writing command line scripts fun. Unlike other modules, it's based
4 | around a simple API that does not come with too much magic and is
5 | composable.
6 | """
7 | from .core import Argument as Argument
8 | from .core import BaseCommand as BaseCommand
9 | from .core import Command as Command
10 | from .core import CommandCollection as CommandCollection
11 | from .core import Context as Context
12 | from .core import Group as Group
13 | from .core import MultiCommand as MultiCommand
14 | from .core import Option as Option
15 | from .core import Parameter as Parameter
16 | from .decorators import argument as argument
17 | from .decorators import command as command
18 | from .decorators import confirmation_option as confirmation_option
19 | from .decorators import group as group
20 | from .decorators import help_option as help_option
21 | from .decorators import make_pass_decorator as make_pass_decorator
22 | from .decorators import option as option
23 | from .decorators import pass_context as pass_context
24 | from .decorators import pass_obj as pass_obj
25 | from .decorators import password_option as password_option
26 | from .decorators import version_option as version_option
27 | from .exceptions import Abort as Abort
28 | from .exceptions import BadArgumentUsage as BadArgumentUsage
29 | from .exceptions import BadOptionUsage as BadOptionUsage
30 | from .exceptions import BadParameter as BadParameter
31 | from .exceptions import ClickException as ClickException
32 | from .exceptions import FileError as FileError
33 | from .exceptions import MissingParameter as MissingParameter
34 | from .exceptions import NoSuchOption as NoSuchOption
35 | from .exceptions import UsageError as UsageError
36 | from .formatting import HelpFormatter as HelpFormatter
37 | from .formatting import wrap_text as wrap_text
38 | from .globals import get_current_context as get_current_context
39 | from .parser import OptionParser as OptionParser
40 | from .termui import clear as clear
41 | from .termui import confirm as confirm
42 | from .termui import echo_via_pager as echo_via_pager
43 | from .termui import edit as edit
44 | from .termui import getchar as getchar
45 | from .termui import launch as launch
46 | from .termui import pause as pause
47 | from .termui import progressbar as progressbar
48 | from .termui import prompt as prompt
49 | from .termui import secho as secho
50 | from .termui import style as style
51 | from .termui import unstyle as unstyle
52 | from .types import BOOL as BOOL
53 | from .types import Choice as Choice
54 | from .types import DateTime as DateTime
55 | from .types import File as File
56 | from .types import FLOAT as FLOAT
57 | from .types import FloatRange as FloatRange
58 | from .types import INT as INT
59 | from .types import IntRange as IntRange
60 | from .types import ParamType as ParamType
61 | from .types import Path as Path
62 | from .types import STRING as STRING
63 | from .types import Tuple as Tuple
64 | from .types import UNPROCESSED as UNPROCESSED
65 | from .types import UUID as UUID
66 | from .utils import echo as echo
67 | from .utils import format_filename as format_filename
68 | from .utils import get_app_dir as get_app_dir
69 | from .utils import get_binary_stream as get_binary_stream
70 | from .utils import get_text_stream as get_text_stream
71 | from .utils import open_file as open_file
72 |
73 | __version__ = "8.1.7"
74 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/list.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: lists interfaces
3 | * Description: this module implement the list support used in
4 | * various place in the library.
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Gary Pennington <[email protected]>
9 | */
10 |
11 | #ifndef __XML_LINK_INCLUDE__
12 | #define __XML_LINK_INCLUDE__
13 |
14 | #include <libxml/xmlversion.h>
15 |
16 | #ifdef __cplusplus
17 | extern "C" {
18 | #endif
19 |
20 | typedef struct _xmlLink xmlLink;
21 | typedef xmlLink *xmlLinkPtr;
22 |
23 | typedef struct _xmlList xmlList;
24 | typedef xmlList *xmlListPtr;
25 |
26 | /**
27 | * xmlListDeallocator:
28 | * @lk: the data to deallocate
29 | *
30 | * Callback function used to free data from a list.
31 | */
32 | typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
33 | /**
34 | * xmlListDataCompare:
35 | * @data0: the first data
36 | * @data1: the second data
37 | *
38 | * Callback function used to compare 2 data.
39 | *
40 | * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
41 | */
42 | typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
43 | /**
44 | * xmlListWalker:
45 | * @data: the data found in the list
46 | * @user: extra user provided data to the walker
47 | *
48 | * Callback function used when walking a list with xmlListWalk().
49 | *
50 | * Returns 0 to stop walking the list, 1 otherwise.
51 | */
52 | typedef int (*xmlListWalker) (const void *data, void *user);
53 |
54 | /* Creation/Deletion */
55 | XMLPUBFUN xmlListPtr
56 | xmlListCreate (xmlListDeallocator deallocator,
57 | xmlListDataCompare compare);
58 | XMLPUBFUN void
59 | xmlListDelete (xmlListPtr l);
60 |
61 | /* Basic Operators */
62 | XMLPUBFUN void *
63 | xmlListSearch (xmlListPtr l,
64 | void *data);
65 | XMLPUBFUN void *
66 | xmlListReverseSearch (xmlListPtr l,
67 | void *data);
68 | XMLPUBFUN int
69 | xmlListInsert (xmlListPtr l,
70 | void *data) ;
71 | XMLPUBFUN int
72 | xmlListAppend (xmlListPtr l,
73 | void *data) ;
74 | XMLPUBFUN int
75 | xmlListRemoveFirst (xmlListPtr l,
76 | void *data);
77 | XMLPUBFUN int
78 | xmlListRemoveLast (xmlListPtr l,
79 | void *data);
80 | XMLPUBFUN int
81 | xmlListRemoveAll (xmlListPtr l,
82 | void *data);
83 | XMLPUBFUN void
84 | xmlListClear (xmlListPtr l);
85 | XMLPUBFUN int
86 | xmlListEmpty (xmlListPtr l);
87 | XMLPUBFUN xmlLinkPtr
88 | xmlListFront (xmlListPtr l);
89 | XMLPUBFUN xmlLinkPtr
90 | xmlListEnd (xmlListPtr l);
91 | XMLPUBFUN int
92 | xmlListSize (xmlListPtr l);
93 |
94 | XMLPUBFUN void
95 | xmlListPopFront (xmlListPtr l);
96 | XMLPUBFUN void
97 | xmlListPopBack (xmlListPtr l);
98 | XMLPUBFUN int
99 | xmlListPushFront (xmlListPtr l,
100 | void *data);
101 | XMLPUBFUN int
102 | xmlListPushBack (xmlListPtr l,
103 | void *data);
104 |
105 | /* Advanced Operators */
106 | XMLPUBFUN void
107 | xmlListReverse (xmlListPtr l);
108 | XMLPUBFUN void
109 | xmlListSort (xmlListPtr l);
110 | XMLPUBFUN void
111 | xmlListWalk (xmlListPtr l,
112 | xmlListWalker walker,
113 | void *user);
114 | XMLPUBFUN void
115 | xmlListReverseWalk (xmlListPtr l,
116 | xmlListWalker walker,
117 | void *user);
118 | XMLPUBFUN void
119 | xmlListMerge (xmlListPtr l1,
120 | xmlListPtr l2);
121 | XMLPUBFUN xmlListPtr
122 | xmlListDup (const xmlListPtr old);
123 | XMLPUBFUN int
124 | xmlListCopy (xmlListPtr cur,
125 | const xmlListPtr old);
126 | /* Link operators */
127 | XMLPUBFUN void *
128 | xmlLinkGetData (xmlLinkPtr lk);
129 |
130 | /* xmlListUnique() */
131 | /* xmlListSwap */
132 |
133 | #ifdef __cplusplus
134 | }
135 | #endif
136 |
137 | #endif /* __XML_LINK_INCLUDE__ */
138 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxslt/variables.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: interface for the variable matching and lookup.
3 | * Description: interface for the variable matching and lookup.
4 | *
5 | * Copy: See Copyright for the status of this software.
6 | *
7 | * Author: Daniel Veillard
8 | */
9 |
10 | #ifndef __XML_XSLT_VARIABLES_H__
11 | #define __XML_XSLT_VARIABLES_H__
12 |
13 | #include <libxml/xpath.h>
14 | #include <libxml/xpathInternals.h>
15 | #include "xsltexports.h"
16 | #include "xsltInternals.h"
17 | #include "functions.h"
18 |
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 |
24 | /**
25 | * XSLT_REGISTER_VARIABLE_LOOKUP:
26 | *
27 | * Registering macro, not general purpose at all but used in different modules.
28 | */
29 |
30 | #define XSLT_REGISTER_VARIABLE_LOOKUP(ctxt) \
31 | xmlXPathRegisterVariableLookup((ctxt)->xpathCtxt, \
32 | xsltXPathVariableLookup, (void *)(ctxt)); \
33 | xsltRegisterAllFunctions((ctxt)->xpathCtxt); \
34 | xsltRegisterAllElement(ctxt); \
35 | (ctxt)->xpathCtxt->extra = ctxt
36 |
37 | /*
38 | * Flags for memory management of RVTs
39 | */
40 |
41 | /**
42 | * XSLT_RVT_LOCAL:
43 | *
44 | * RVT is destroyed after the current instructions ends.
45 | */
46 | #define XSLT_RVT_LOCAL 1
47 |
48 | /**
49 | * XSLT_RVT_FUNC_RESULT:
50 | *
51 | * RVT is part of results returned with func:result. The RVT won't be
52 | * destroyed after exiting a template and will be reset to XSLT_RVT_LOCAL or
53 | * XSLT_RVT_VARIABLE in the template that receives the return value.
54 | */
55 | #define XSLT_RVT_FUNC_RESULT 2
56 |
57 | /**
58 | * XSLT_RVT_GLOBAL:
59 | *
60 | * RVT is part of a global variable.
61 | */
62 | #define XSLT_RVT_GLOBAL 3
63 |
64 | /*
65 | * Interfaces for the variable module.
66 | */
67 |
68 | XSLTPUBFUN int XSLTCALL
69 | xsltEvalGlobalVariables (xsltTransformContextPtr ctxt);
70 | XSLTPUBFUN int XSLTCALL
71 | xsltEvalUserParams (xsltTransformContextPtr ctxt,
72 | const char **params);
73 | XSLTPUBFUN int XSLTCALL
74 | xsltQuoteUserParams (xsltTransformContextPtr ctxt,
75 | const char **params);
76 | XSLTPUBFUN int XSLTCALL
77 | xsltEvalOneUserParam (xsltTransformContextPtr ctxt,
78 | const xmlChar * name,
79 | const xmlChar * value);
80 | XSLTPUBFUN int XSLTCALL
81 | xsltQuoteOneUserParam (xsltTransformContextPtr ctxt,
82 | const xmlChar * name,
83 | const xmlChar * value);
84 |
85 | XSLTPUBFUN void XSLTCALL
86 | xsltParseGlobalVariable (xsltStylesheetPtr style,
87 | xmlNodePtr cur);
88 | XSLTPUBFUN void XSLTCALL
89 | xsltParseGlobalParam (xsltStylesheetPtr style,
90 | xmlNodePtr cur);
91 | XSLTPUBFUN void XSLTCALL
92 | xsltParseStylesheetVariable (xsltTransformContextPtr ctxt,
93 | xmlNodePtr cur);
94 | XSLTPUBFUN void XSLTCALL
95 | xsltParseStylesheetParam (xsltTransformContextPtr ctxt,
96 | xmlNodePtr cur);
97 | XSLTPUBFUN xsltStackElemPtr XSLTCALL
98 | xsltParseStylesheetCallerParam (xsltTransformContextPtr ctxt,
99 | xmlNodePtr cur);
100 | XSLTPUBFUN int XSLTCALL
101 | xsltAddStackElemList (xsltTransformContextPtr ctxt,
102 | xsltStackElemPtr elems);
103 | XSLTPUBFUN void XSLTCALL
104 | xsltFreeGlobalVariables (xsltTransformContextPtr ctxt);
105 | XSLTPUBFUN xmlXPathObjectPtr XSLTCALL
106 | xsltVariableLookup (xsltTransformContextPtr ctxt,
107 | const xmlChar *name,
108 | const xmlChar *ns_uri);
109 | XSLTPUBFUN xmlXPathObjectPtr XSLTCALL
110 | xsltXPathVariableLookup (void *ctxt,
111 | const xmlChar *name,
112 | const xmlChar *ns_uri);
113 | #ifdef __cplusplus
114 | }
115 | #endif
116 |
117 | #endif /* __XML_XSLT_VARIABLES_H__ */
118 |
119 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py:
--------------------------------------------------------------------------------
```python
1 | from collections import defaultdict
2 | from logging import getLogger
3 | from typing import Any, DefaultDict
4 |
5 | from pip._vendor.resolvelib.reporters import BaseReporter
6 |
7 | from .base import Candidate, Requirement
8 |
9 | logger = getLogger(__name__)
10 |
11 |
12 | class PipReporter(BaseReporter):
13 | def __init__(self) -> None:
14 | self.reject_count_by_package: DefaultDict[str, int] = defaultdict(int)
15 |
16 | self._messages_at_reject_count = {
17 | 1: (
18 | "pip is looking at multiple versions of {package_name} to "
19 | "determine which version is compatible with other "
20 | "requirements. This could take a while."
21 | ),
22 | 8: (
23 | "pip is still looking at multiple versions of {package_name} to "
24 | "determine which version is compatible with other "
25 | "requirements. This could take a while."
26 | ),
27 | 13: (
28 | "This is taking longer than usual. You might need to provide "
29 | "the dependency resolver with stricter constraints to reduce "
30 | "runtime. See https://pip.pypa.io/warnings/backtracking for "
31 | "guidance. If you want to abort this run, press Ctrl + C."
32 | ),
33 | }
34 |
35 | def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None:
36 | self.reject_count_by_package[candidate.name] += 1
37 |
38 | count = self.reject_count_by_package[candidate.name]
39 | if count not in self._messages_at_reject_count:
40 | return
41 |
42 | message = self._messages_at_reject_count[count]
43 | logger.info("INFO: %s", message.format(package_name=candidate.name))
44 |
45 | msg = "Will try a different candidate, due to conflict:"
46 | for req_info in criterion.information:
47 | req, parent = req_info.requirement, req_info.parent
48 | # Inspired by Factory.get_installation_error
49 | msg += "\n "
50 | if parent:
51 | msg += f"{parent.name} {parent.version} depends on "
52 | else:
53 | msg += "The user requested "
54 | msg += req.format_for_error()
55 | logger.debug(msg)
56 |
57 |
58 | class PipDebuggingReporter(BaseReporter):
59 | """A reporter that does an info log for every event it sees."""
60 |
61 | def starting(self) -> None:
62 | logger.info("Reporter.starting()")
63 |
64 | def starting_round(self, index: int) -> None:
65 | logger.info("Reporter.starting_round(%r)", index)
66 |
67 | def ending_round(self, index: int, state: Any) -> None:
68 | logger.info("Reporter.ending_round(%r, state)", index)
69 | logger.debug("Reporter.ending_round(%r, %r)", index, state)
70 |
71 | def ending(self, state: Any) -> None:
72 | logger.info("Reporter.ending(%r)", state)
73 |
74 | def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None:
75 | logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent)
76 |
77 | def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None:
78 | logger.info("Reporter.rejecting_candidate(%r, %r)", criterion, candidate)
79 |
80 | def pinning(self, candidate: Candidate) -> None:
81 | logger.info("Reporter.pinning(%r)", candidate)
82 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from optparse import Values
3 | from typing import Any, Dict, List
4 |
5 | from pip._vendor.packaging.markers import default_environment
6 | from pip._vendor.rich import print_json
7 |
8 | from pip import __version__
9 | from pip._internal.cli import cmdoptions
10 | from pip._internal.cli.base_command import Command
11 | from pip._internal.cli.status_codes import SUCCESS
12 | from pip._internal.metadata import BaseDistribution, get_environment
13 | from pip._internal.utils.compat import stdlib_pkgs
14 | from pip._internal.utils.urls import path_to_url
15 |
16 | logger = logging.getLogger(__name__)
17 |
18 |
19 | class InspectCommand(Command):
20 | """
21 | Inspect the content of a Python environment and produce a report in JSON format.
22 | """
23 |
24 | ignore_require_venv = True
25 | usage = """
26 | %prog [options]"""
27 |
28 | def add_options(self) -> None:
29 | self.cmd_opts.add_option(
30 | "--local",
31 | action="store_true",
32 | default=False,
33 | help=(
34 | "If in a virtualenv that has global access, do not list "
35 | "globally-installed packages."
36 | ),
37 | )
38 | self.cmd_opts.add_option(
39 | "--user",
40 | dest="user",
41 | action="store_true",
42 | default=False,
43 | help="Only output packages installed in user-site.",
44 | )
45 | self.cmd_opts.add_option(cmdoptions.list_path())
46 | self.parser.insert_option_group(0, self.cmd_opts)
47 |
48 | def run(self, options: Values, args: List[str]) -> int:
49 | cmdoptions.check_list_path_option(options)
50 | dists = get_environment(options.path).iter_installed_distributions(
51 | local_only=options.local,
52 | user_only=options.user,
53 | skip=set(stdlib_pkgs),
54 | )
55 | output = {
56 | "version": "1",
57 | "pip_version": __version__,
58 | "installed": [self._dist_to_dict(dist) for dist in dists],
59 | "environment": default_environment(),
60 | # TODO tags? scheme?
61 | }
62 | print_json(data=output)
63 | return SUCCESS
64 |
65 | def _dist_to_dict(self, dist: BaseDistribution) -> Dict[str, Any]:
66 | res: Dict[str, Any] = {
67 | "metadata": dist.metadata_dict,
68 | "metadata_location": dist.info_location,
69 | }
70 | # direct_url. Note that we don't have download_info (as in the installation
71 | # report) since it is not recorded in installed metadata.
72 | direct_url = dist.direct_url
73 | if direct_url is not None:
74 | res["direct_url"] = direct_url.to_dict()
75 | else:
76 | # Emulate direct_url for legacy editable installs.
77 | editable_project_location = dist.editable_project_location
78 | if editable_project_location is not None:
79 | res["direct_url"] = {
80 | "url": path_to_url(editable_project_location),
81 | "dir_info": {
82 | "editable": True,
83 | },
84 | }
85 | # installer
86 | installer = dist.installer
87 | if dist.installer:
88 | res["installer"] = installer
89 | # requested
90 | if dist.installed_with_dist_info:
91 | res["requested"] = dist.requested
92 | return res
93 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/flask/typing.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import typing as t
4 |
5 | if t.TYPE_CHECKING: # pragma: no cover
6 | from _typeshed.wsgi import WSGIApplication # noqa: F401
7 | from werkzeug.datastructures import Headers # noqa: F401
8 | from werkzeug.sansio.response import Response # noqa: F401
9 |
10 | # The possible types that are directly convertible or are a Response object.
11 | ResponseValue = t.Union[
12 | "Response",
13 | str,
14 | bytes,
15 | t.List[t.Any],
16 | # Only dict is actually accepted, but Mapping allows for TypedDict.
17 | t.Mapping[str, t.Any],
18 | t.Iterator[str],
19 | t.Iterator[bytes],
20 | ]
21 |
22 | # the possible types for an individual HTTP header
23 | # This should be a Union, but mypy doesn't pass unless it's a TypeVar.
24 | HeaderValue = t.Union[str, t.List[str], t.Tuple[str, ...]]
25 |
26 | # the possible types for HTTP headers
27 | HeadersValue = t.Union[
28 | "Headers",
29 | t.Mapping[str, HeaderValue],
30 | t.Sequence[t.Tuple[str, HeaderValue]],
31 | ]
32 |
33 | # The possible types returned by a route function.
34 | ResponseReturnValue = t.Union[
35 | ResponseValue,
36 | t.Tuple[ResponseValue, HeadersValue],
37 | t.Tuple[ResponseValue, int],
38 | t.Tuple[ResponseValue, int, HeadersValue],
39 | "WSGIApplication",
40 | ]
41 |
42 | # Allow any subclass of werkzeug.Response, such as the one from Flask,
43 | # as a callback argument. Using werkzeug.Response directly makes a
44 | # callback annotated with flask.Response fail type checking.
45 | ResponseClass = t.TypeVar("ResponseClass", bound="Response")
46 |
47 | AppOrBlueprintKey = t.Optional[str] # The App key is None, whereas blueprints are named
48 | AfterRequestCallable = t.Union[
49 | t.Callable[[ResponseClass], ResponseClass],
50 | t.Callable[[ResponseClass], t.Awaitable[ResponseClass]],
51 | ]
52 | BeforeFirstRequestCallable = t.Union[
53 | t.Callable[[], None], t.Callable[[], t.Awaitable[None]]
54 | ]
55 | BeforeRequestCallable = t.Union[
56 | t.Callable[[], t.Optional[ResponseReturnValue]],
57 | t.Callable[[], t.Awaitable[t.Optional[ResponseReturnValue]]],
58 | ]
59 | ShellContextProcessorCallable = t.Callable[[], t.Dict[str, t.Any]]
60 | TeardownCallable = t.Union[
61 | t.Callable[[t.Optional[BaseException]], None],
62 | t.Callable[[t.Optional[BaseException]], t.Awaitable[None]],
63 | ]
64 | TemplateContextProcessorCallable = t.Union[
65 | t.Callable[[], t.Dict[str, t.Any]],
66 | t.Callable[[], t.Awaitable[t.Dict[str, t.Any]]],
67 | ]
68 | TemplateFilterCallable = t.Callable[..., t.Any]
69 | TemplateGlobalCallable = t.Callable[..., t.Any]
70 | TemplateTestCallable = t.Callable[..., bool]
71 | URLDefaultCallable = t.Callable[[str, t.Dict[str, t.Any]], None]
72 | URLValuePreprocessorCallable = t.Callable[
73 | [t.Optional[str], t.Optional[t.Dict[str, t.Any]]], None
74 | ]
75 |
76 | # This should take Exception, but that either breaks typing the argument
77 | # with a specific exception, or decorating multiple times with different
78 | # exceptions (and using a union type on the argument).
79 | # https://github.com/pallets/flask/issues/4095
80 | # https://github.com/pallets/flask/issues/4295
81 | # https://github.com/pallets/flask/issues/4297
82 | ErrorHandlerCallable = t.Union[
83 | t.Callable[[t.Any], ResponseReturnValue],
84 | t.Callable[[t.Any], t.Awaitable[ResponseReturnValue]],
85 | ]
86 |
87 | RouteCallable = t.Union[
88 | t.Callable[..., ResponseReturnValue],
89 | t.Callable[..., t.Awaitable[ResponseReturnValue]],
90 | ]
91 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py:
--------------------------------------------------------------------------------
```python
1 | from typing import Optional
2 |
3 | from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo
4 | from pip._internal.models.link import Link
5 | from pip._internal.utils.urls import path_to_url
6 | from pip._internal.vcs import vcs
7 |
8 |
9 | def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str:
10 | """Convert a DirectUrl to a pip requirement string."""
11 | direct_url.validate() # if invalid, this is a pip bug
12 | requirement = name + " @ "
13 | fragments = []
14 | if isinstance(direct_url.info, VcsInfo):
15 | requirement += (
16 | f"{direct_url.info.vcs}+{direct_url.url}@{direct_url.info.commit_id}"
17 | )
18 | elif isinstance(direct_url.info, ArchiveInfo):
19 | requirement += direct_url.url
20 | if direct_url.info.hash:
21 | fragments.append(direct_url.info.hash)
22 | else:
23 | assert isinstance(direct_url.info, DirInfo)
24 | requirement += direct_url.url
25 | if direct_url.subdirectory:
26 | fragments.append("subdirectory=" + direct_url.subdirectory)
27 | if fragments:
28 | requirement += "#" + "&".join(fragments)
29 | return requirement
30 |
31 |
32 | def direct_url_for_editable(source_dir: str) -> DirectUrl:
33 | return DirectUrl(
34 | url=path_to_url(source_dir),
35 | info=DirInfo(editable=True),
36 | )
37 |
38 |
39 | def direct_url_from_link(
40 | link: Link, source_dir: Optional[str] = None, link_is_in_wheel_cache: bool = False
41 | ) -> DirectUrl:
42 | if link.is_vcs:
43 | vcs_backend = vcs.get_backend_for_scheme(link.scheme)
44 | assert vcs_backend
45 | url, requested_revision, _ = vcs_backend.get_url_rev_and_auth(
46 | link.url_without_fragment
47 | )
48 | # For VCS links, we need to find out and add commit_id.
49 | if link_is_in_wheel_cache:
50 | # If the requested VCS link corresponds to a cached
51 | # wheel, it means the requested revision was an
52 | # immutable commit hash, otherwise it would not have
53 | # been cached. In that case we don't have a source_dir
54 | # with the VCS checkout.
55 | assert requested_revision
56 | commit_id = requested_revision
57 | else:
58 | # If the wheel was not in cache, it means we have
59 | # had to checkout from VCS to build and we have a source_dir
60 | # which we can inspect to find out the commit id.
61 | assert source_dir
62 | commit_id = vcs_backend.get_revision(source_dir)
63 | return DirectUrl(
64 | url=url,
65 | info=VcsInfo(
66 | vcs=vcs_backend.name,
67 | commit_id=commit_id,
68 | requested_revision=requested_revision,
69 | ),
70 | subdirectory=link.subdirectory_fragment,
71 | )
72 | elif link.is_existing_dir():
73 | return DirectUrl(
74 | url=link.url_without_fragment,
75 | info=DirInfo(),
76 | subdirectory=link.subdirectory_fragment,
77 | )
78 | else:
79 | hash = None
80 | hash_name = link.hash_name
81 | if hash_name:
82 | hash = f"{hash_name}={link.hash}"
83 | return DirectUrl(
84 | url=link.url_without_fragment,
85 | info=ArchiveInfo(hash=hash),
86 | subdirectory=link.subdirectory_fragment,
87 | )
88 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/itsdangerous/exc.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import typing as t
4 | from datetime import datetime
5 |
6 |
7 | class BadData(Exception):
8 | """Raised if bad data of any sort was encountered. This is the base
9 | for all exceptions that ItsDangerous defines.
10 |
11 | .. versionadded:: 0.15
12 | """
13 |
14 | def __init__(self, message: str):
15 | super().__init__(message)
16 | self.message = message
17 |
18 | def __str__(self) -> str:
19 | return self.message
20 |
21 |
22 | class BadSignature(BadData):
23 | """Raised if a signature does not match."""
24 |
25 | def __init__(self, message: str, payload: t.Any | None = None):
26 | super().__init__(message)
27 |
28 | #: The payload that failed the signature test. In some
29 | #: situations you might still want to inspect this, even if
30 | #: you know it was tampered with.
31 | #:
32 | #: .. versionadded:: 0.14
33 | self.payload: t.Any | None = payload
34 |
35 |
36 | class BadTimeSignature(BadSignature):
37 | """Raised if a time-based signature is invalid. This is a subclass
38 | of :class:`BadSignature`.
39 | """
40 |
41 | def __init__(
42 | self,
43 | message: str,
44 | payload: t.Any | None = None,
45 | date_signed: datetime | None = None,
46 | ):
47 | super().__init__(message, payload)
48 |
49 | #: If the signature expired this exposes the date of when the
50 | #: signature was created. This can be helpful in order to
51 | #: tell the user how long a link has been gone stale.
52 | #:
53 | #: .. versionchanged:: 2.0
54 | #: The datetime value is timezone-aware rather than naive.
55 | #:
56 | #: .. versionadded:: 0.14
57 | self.date_signed = date_signed
58 |
59 |
60 | class SignatureExpired(BadTimeSignature):
61 | """Raised if a signature timestamp is older than ``max_age``. This
62 | is a subclass of :exc:`BadTimeSignature`.
63 | """
64 |
65 |
66 | class BadHeader(BadSignature):
67 | """Raised if a signed header is invalid in some form. This only
68 | happens for serializers that have a header that goes with the
69 | signature.
70 |
71 | .. versionadded:: 0.24
72 | """
73 |
74 | def __init__(
75 | self,
76 | message: str,
77 | payload: t.Any | None = None,
78 | header: t.Any | None = None,
79 | original_error: Exception | None = None,
80 | ):
81 | super().__init__(message, payload)
82 |
83 | #: If the header is actually available but just malformed it
84 | #: might be stored here.
85 | self.header: t.Any | None = header
86 |
87 | #: If available, the error that indicates why the payload was
88 | #: not valid. This might be ``None``.
89 | self.original_error: Exception | None = original_error
90 |
91 |
92 | class BadPayload(BadData):
93 | """Raised if a payload is invalid. This could happen if the payload
94 | is loaded despite an invalid signature, or if there is a mismatch
95 | between the serializer and deserializer. The original exception
96 | that occurred during loading is stored on as :attr:`original_error`.
97 |
98 | .. versionadded:: 0.15
99 | """
100 |
101 | def __init__(self, message: str, original_error: Exception | None = None):
102 | super().__init__(message)
103 |
104 | #: If available, the error that indicates why the payload was
105 | #: not valid. This might be ``None``.
106 | self.original_error: Exception | None = original_error
107 |
```