This is page 86 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/lxml/includes/libxml/schemasInternals.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: internal interfaces for XML Schemas
3 | * Description: internal interfaces for the XML Schemas handling
4 | * and schema validity checking
5 | * The Schemas development is a Work In Progress.
6 | * Some of those interfaces are not guaranteed to be API or ABI stable !
7 | *
8 | * Copy: See Copyright for the status of this software.
9 | *
10 | * Author: Daniel Veillard
11 | */
12 |
13 |
14 | #ifndef __XML_SCHEMA_INTERNALS_H__
15 | #define __XML_SCHEMA_INTERNALS_H__
16 |
17 | #include <libxml/xmlversion.h>
18 |
19 | #ifdef LIBXML_SCHEMAS_ENABLED
20 |
21 | #include <libxml/xmlregexp.h>
22 | #include <libxml/hash.h>
23 | #include <libxml/dict.h>
24 | #include <libxml/tree.h>
25 |
26 | #ifdef __cplusplus
27 | extern "C" {
28 | #endif
29 |
30 | typedef enum {
31 | XML_SCHEMAS_UNKNOWN = 0,
32 | XML_SCHEMAS_STRING = 1,
33 | XML_SCHEMAS_NORMSTRING = 2,
34 | XML_SCHEMAS_DECIMAL = 3,
35 | XML_SCHEMAS_TIME = 4,
36 | XML_SCHEMAS_GDAY = 5,
37 | XML_SCHEMAS_GMONTH = 6,
38 | XML_SCHEMAS_GMONTHDAY = 7,
39 | XML_SCHEMAS_GYEAR = 8,
40 | XML_SCHEMAS_GYEARMONTH = 9,
41 | XML_SCHEMAS_DATE = 10,
42 | XML_SCHEMAS_DATETIME = 11,
43 | XML_SCHEMAS_DURATION = 12,
44 | XML_SCHEMAS_FLOAT = 13,
45 | XML_SCHEMAS_DOUBLE = 14,
46 | XML_SCHEMAS_BOOLEAN = 15,
47 | XML_SCHEMAS_TOKEN = 16,
48 | XML_SCHEMAS_LANGUAGE = 17,
49 | XML_SCHEMAS_NMTOKEN = 18,
50 | XML_SCHEMAS_NMTOKENS = 19,
51 | XML_SCHEMAS_NAME = 20,
52 | XML_SCHEMAS_QNAME = 21,
53 | XML_SCHEMAS_NCNAME = 22,
54 | XML_SCHEMAS_ID = 23,
55 | XML_SCHEMAS_IDREF = 24,
56 | XML_SCHEMAS_IDREFS = 25,
57 | XML_SCHEMAS_ENTITY = 26,
58 | XML_SCHEMAS_ENTITIES = 27,
59 | XML_SCHEMAS_NOTATION = 28,
60 | XML_SCHEMAS_ANYURI = 29,
61 | XML_SCHEMAS_INTEGER = 30,
62 | XML_SCHEMAS_NPINTEGER = 31,
63 | XML_SCHEMAS_NINTEGER = 32,
64 | XML_SCHEMAS_NNINTEGER = 33,
65 | XML_SCHEMAS_PINTEGER = 34,
66 | XML_SCHEMAS_INT = 35,
67 | XML_SCHEMAS_UINT = 36,
68 | XML_SCHEMAS_LONG = 37,
69 | XML_SCHEMAS_ULONG = 38,
70 | XML_SCHEMAS_SHORT = 39,
71 | XML_SCHEMAS_USHORT = 40,
72 | XML_SCHEMAS_BYTE = 41,
73 | XML_SCHEMAS_UBYTE = 42,
74 | XML_SCHEMAS_HEXBINARY = 43,
75 | XML_SCHEMAS_BASE64BINARY = 44,
76 | XML_SCHEMAS_ANYTYPE = 45,
77 | XML_SCHEMAS_ANYSIMPLETYPE = 46
78 | } xmlSchemaValType;
79 |
80 | /*
81 | * XML Schemas defines multiple type of types.
82 | */
83 | typedef enum {
84 | XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */
85 | XML_SCHEMA_TYPE_ANY,
86 | XML_SCHEMA_TYPE_FACET,
87 | XML_SCHEMA_TYPE_SIMPLE,
88 | XML_SCHEMA_TYPE_COMPLEX,
89 | XML_SCHEMA_TYPE_SEQUENCE = 6,
90 | XML_SCHEMA_TYPE_CHOICE,
91 | XML_SCHEMA_TYPE_ALL,
92 | XML_SCHEMA_TYPE_SIMPLE_CONTENT,
93 | XML_SCHEMA_TYPE_COMPLEX_CONTENT,
94 | XML_SCHEMA_TYPE_UR,
95 | XML_SCHEMA_TYPE_RESTRICTION,
96 | XML_SCHEMA_TYPE_EXTENSION,
97 | XML_SCHEMA_TYPE_ELEMENT,
98 | XML_SCHEMA_TYPE_ATTRIBUTE,
99 | XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
100 | XML_SCHEMA_TYPE_GROUP,
101 | XML_SCHEMA_TYPE_NOTATION,
102 | XML_SCHEMA_TYPE_LIST,
103 | XML_SCHEMA_TYPE_UNION,
104 | XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
105 | XML_SCHEMA_TYPE_IDC_UNIQUE,
106 | XML_SCHEMA_TYPE_IDC_KEY,
107 | XML_SCHEMA_TYPE_IDC_KEYREF,
108 | XML_SCHEMA_TYPE_PARTICLE = 25,
109 | XML_SCHEMA_TYPE_ATTRIBUTE_USE,
110 | XML_SCHEMA_FACET_MININCLUSIVE = 1000,
111 | XML_SCHEMA_FACET_MINEXCLUSIVE,
112 | XML_SCHEMA_FACET_MAXINCLUSIVE,
113 | XML_SCHEMA_FACET_MAXEXCLUSIVE,
114 | XML_SCHEMA_FACET_TOTALDIGITS,
115 | XML_SCHEMA_FACET_FRACTIONDIGITS,
116 | XML_SCHEMA_FACET_PATTERN,
117 | XML_SCHEMA_FACET_ENUMERATION,
118 | XML_SCHEMA_FACET_WHITESPACE,
119 | XML_SCHEMA_FACET_LENGTH,
120 | XML_SCHEMA_FACET_MAXLENGTH,
121 | XML_SCHEMA_FACET_MINLENGTH,
122 | XML_SCHEMA_EXTRA_QNAMEREF = 2000,
123 | XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
124 | } xmlSchemaTypeType;
125 |
126 | typedef enum {
127 | XML_SCHEMA_CONTENT_UNKNOWN = 0,
128 | XML_SCHEMA_CONTENT_EMPTY = 1,
129 | XML_SCHEMA_CONTENT_ELEMENTS,
130 | XML_SCHEMA_CONTENT_MIXED,
131 | XML_SCHEMA_CONTENT_SIMPLE,
132 | XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */
133 | XML_SCHEMA_CONTENT_BASIC,
134 | XML_SCHEMA_CONTENT_ANY
135 | } xmlSchemaContentType;
136 |
137 | typedef struct _xmlSchemaVal xmlSchemaVal;
138 | typedef xmlSchemaVal *xmlSchemaValPtr;
139 |
140 | typedef struct _xmlSchemaType xmlSchemaType;
141 | typedef xmlSchemaType *xmlSchemaTypePtr;
142 |
143 | typedef struct _xmlSchemaFacet xmlSchemaFacet;
144 | typedef xmlSchemaFacet *xmlSchemaFacetPtr;
145 |
146 | /**
147 | * Annotation
148 | */
149 | typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
150 | typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
151 | struct _xmlSchemaAnnot {
152 | struct _xmlSchemaAnnot *next;
153 | xmlNodePtr content; /* the annotation */
154 | };
155 |
156 | /**
157 | * XML_SCHEMAS_ANYATTR_SKIP:
158 | *
159 | * Skip unknown attribute from validation
160 | * Obsolete, not used anymore.
161 | */
162 | #define XML_SCHEMAS_ANYATTR_SKIP 1
163 | /**
164 | * XML_SCHEMAS_ANYATTR_LAX:
165 | *
166 | * Ignore validation non definition on attributes
167 | * Obsolete, not used anymore.
168 | */
169 | #define XML_SCHEMAS_ANYATTR_LAX 2
170 | /**
171 | * XML_SCHEMAS_ANYATTR_STRICT:
172 | *
173 | * Apply strict validation rules on attributes
174 | * Obsolete, not used anymore.
175 | */
176 | #define XML_SCHEMAS_ANYATTR_STRICT 3
177 | /**
178 | * XML_SCHEMAS_ANY_SKIP:
179 | *
180 | * Skip unknown attribute from validation
181 | */
182 | #define XML_SCHEMAS_ANY_SKIP 1
183 | /**
184 | * XML_SCHEMAS_ANY_LAX:
185 | *
186 | * Used by wildcards.
187 | * Validate if type found, don't worry if not found
188 | */
189 | #define XML_SCHEMAS_ANY_LAX 2
190 | /**
191 | * XML_SCHEMAS_ANY_STRICT:
192 | *
193 | * Used by wildcards.
194 | * Apply strict validation rules
195 | */
196 | #define XML_SCHEMAS_ANY_STRICT 3
197 | /**
198 | * XML_SCHEMAS_ATTR_USE_PROHIBITED:
199 | *
200 | * Used by wildcards.
201 | * The attribute is prohibited.
202 | */
203 | #define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
204 | /**
205 | * XML_SCHEMAS_ATTR_USE_REQUIRED:
206 | *
207 | * The attribute is required.
208 | */
209 | #define XML_SCHEMAS_ATTR_USE_REQUIRED 1
210 | /**
211 | * XML_SCHEMAS_ATTR_USE_OPTIONAL:
212 | *
213 | * The attribute is optional.
214 | */
215 | #define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
216 | /**
217 | * XML_SCHEMAS_ATTR_GLOBAL:
218 | *
219 | * allow elements in no namespace
220 | */
221 | #define XML_SCHEMAS_ATTR_GLOBAL 1 << 0
222 | /**
223 | * XML_SCHEMAS_ATTR_NSDEFAULT:
224 | *
225 | * allow elements in no namespace
226 | */
227 | #define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7
228 | /**
229 | * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
230 | *
231 | * this is set when the "type" and "ref" references
232 | * have been resolved.
233 | */
234 | #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8
235 | /**
236 | * XML_SCHEMAS_ATTR_FIXED:
237 | *
238 | * the attribute has a fixed value
239 | */
240 | #define XML_SCHEMAS_ATTR_FIXED 1 << 9
241 |
242 | /**
243 | * xmlSchemaAttribute:
244 | * An attribute definition.
245 | */
246 |
247 | typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
248 | typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
249 | struct _xmlSchemaAttribute {
250 | xmlSchemaTypeType type;
251 | struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */
252 | const xmlChar *name; /* the name of the declaration */
253 | const xmlChar *id; /* Deprecated; not used */
254 | const xmlChar *ref; /* Deprecated; not used */
255 | const xmlChar *refNs; /* Deprecated; not used */
256 | const xmlChar *typeName; /* the local name of the type definition */
257 | const xmlChar *typeNs; /* the ns URI of the type definition */
258 | xmlSchemaAnnotPtr annot;
259 |
260 | xmlSchemaTypePtr base; /* Deprecated; not used */
261 | int occurs; /* Deprecated; not used */
262 | const xmlChar *defValue; /* The initial value of the value constraint */
263 | xmlSchemaTypePtr subtypes; /* the type definition */
264 | xmlNodePtr node;
265 | const xmlChar *targetNamespace;
266 | int flags;
267 | const xmlChar *refPrefix; /* Deprecated; not used */
268 | xmlSchemaValPtr defVal; /* The compiled value constraint */
269 | xmlSchemaAttributePtr refDecl; /* Deprecated; not used */
270 | };
271 |
272 | /**
273 | * xmlSchemaAttributeLink:
274 | * Used to build a list of attribute uses on complexType definitions.
275 | * WARNING: Deprecated; not used.
276 | */
277 | typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
278 | typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;
279 | struct _xmlSchemaAttributeLink {
280 | struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */
281 | struct _xmlSchemaAttribute *attr;/* the linked attribute */
282 | };
283 |
284 | /**
285 | * XML_SCHEMAS_WILDCARD_COMPLETE:
286 | *
287 | * If the wildcard is complete.
288 | */
289 | #define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0
290 |
291 | /**
292 | * xmlSchemaCharValueLink:
293 | * Used to build a list of namespaces on wildcards.
294 | */
295 | typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
296 | typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;
297 | struct _xmlSchemaWildcardNs {
298 | struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */
299 | const xmlChar *value;/* the value */
300 | };
301 |
302 | /**
303 | * xmlSchemaWildcard.
304 | * A wildcard.
305 | */
306 | typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
307 | typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;
308 | struct _xmlSchemaWildcard {
309 | xmlSchemaTypeType type; /* The kind of type */
310 | const xmlChar *id; /* Deprecated; not used */
311 | xmlSchemaAnnotPtr annot;
312 | xmlNodePtr node;
313 | int minOccurs; /* Deprecated; not used */
314 | int maxOccurs; /* Deprecated; not used */
315 | int processContents;
316 | int any; /* Indicates if the ns constraint is of ##any */
317 | xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */
318 | xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */
319 | int flags;
320 | };
321 |
322 | /**
323 | * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
324 | *
325 | * The attribute wildcard has been built.
326 | */
327 | #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
328 | /**
329 | * XML_SCHEMAS_ATTRGROUP_GLOBAL:
330 | *
331 | * The attribute group has been defined.
332 | */
333 | #define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1
334 | /**
335 | * XML_SCHEMAS_ATTRGROUP_MARKED:
336 | *
337 | * Marks the attr group as marked; used for circular checks.
338 | */
339 | #define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
340 |
341 | /**
342 | * XML_SCHEMAS_ATTRGROUP_REDEFINED:
343 | *
344 | * The attr group was redefined.
345 | */
346 | #define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3
347 | /**
348 | * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
349 | *
350 | * Whether this attr. group contains attr. group references.
351 | */
352 | #define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4
353 |
354 | /**
355 | * An attribute group definition.
356 | *
357 | * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
358 | * must be kept similar
359 | */
360 | typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
361 | typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
362 | struct _xmlSchemaAttributeGroup {
363 | xmlSchemaTypeType type; /* The kind of type */
364 | struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
365 | const xmlChar *name;
366 | const xmlChar *id;
367 | const xmlChar *ref; /* Deprecated; not used */
368 | const xmlChar *refNs; /* Deprecated; not used */
369 | xmlSchemaAnnotPtr annot;
370 |
371 | xmlSchemaAttributePtr attributes; /* Deprecated; not used */
372 | xmlNodePtr node;
373 | int flags;
374 | xmlSchemaWildcardPtr attributeWildcard;
375 | const xmlChar *refPrefix; /* Deprecated; not used */
376 | xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */
377 | const xmlChar *targetNamespace;
378 | void *attrUses;
379 | };
380 |
381 | /**
382 | * xmlSchemaTypeLink:
383 | * Used to build a list of types (e.g. member types of
384 | * simpleType with variety "union").
385 | */
386 | typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
387 | typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;
388 | struct _xmlSchemaTypeLink {
389 | struct _xmlSchemaTypeLink *next;/* the next type link ... */
390 | xmlSchemaTypePtr type;/* the linked type */
391 | };
392 |
393 | /**
394 | * xmlSchemaFacetLink:
395 | * Used to build a list of facets.
396 | */
397 | typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
398 | typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;
399 | struct _xmlSchemaFacetLink {
400 | struct _xmlSchemaFacetLink *next;/* the next facet link ... */
401 | xmlSchemaFacetPtr facet;/* the linked facet */
402 | };
403 |
404 | /**
405 | * XML_SCHEMAS_TYPE_MIXED:
406 | *
407 | * the element content type is mixed
408 | */
409 | #define XML_SCHEMAS_TYPE_MIXED 1 << 0
410 | /**
411 | * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
412 | *
413 | * the simple or complex type has a derivation method of "extension".
414 | */
415 | #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1
416 | /**
417 | * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
418 | *
419 | * the simple or complex type has a derivation method of "restriction".
420 | */
421 | #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2
422 | /**
423 | * XML_SCHEMAS_TYPE_GLOBAL:
424 | *
425 | * the type is global
426 | */
427 | #define XML_SCHEMAS_TYPE_GLOBAL 1 << 3
428 | /**
429 | * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
430 | *
431 | * the complexType owns an attribute wildcard, i.e.
432 | * it can be freed by the complexType
433 | */
434 | #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */
435 | /**
436 | * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
437 | *
438 | * the simpleType has a variety of "absent".
439 | * TODO: Actually not necessary :-/, since if
440 | * none of the variety flags occur then it's
441 | * automatically absent.
442 | */
443 | #define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5
444 | /**
445 | * XML_SCHEMAS_TYPE_VARIETY_LIST:
446 | *
447 | * the simpleType has a variety of "list".
448 | */
449 | #define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6
450 | /**
451 | * XML_SCHEMAS_TYPE_VARIETY_UNION:
452 | *
453 | * the simpleType has a variety of "union".
454 | */
455 | #define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7
456 | /**
457 | * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
458 | *
459 | * the simpleType has a variety of "union".
460 | */
461 | #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8
462 | /**
463 | * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
464 | *
465 | * the complexType has a final of "extension".
466 | */
467 | #define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9
468 | /**
469 | * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
470 | *
471 | * the simpleType/complexType has a final of "restriction".
472 | */
473 | #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10
474 | /**
475 | * XML_SCHEMAS_TYPE_FINAL_LIST:
476 | *
477 | * the simpleType has a final of "list".
478 | */
479 | #define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11
480 | /**
481 | * XML_SCHEMAS_TYPE_FINAL_UNION:
482 | *
483 | * the simpleType has a final of "union".
484 | */
485 | #define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12
486 | /**
487 | * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
488 | *
489 | * the simpleType has a final of "default".
490 | */
491 | #define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13
492 | /**
493 | * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
494 | *
495 | * Marks the item as a builtin primitive.
496 | */
497 | #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14
498 | /**
499 | * XML_SCHEMAS_TYPE_MARKED:
500 | *
501 | * Marks the item as marked; used for circular checks.
502 | */
503 | #define XML_SCHEMAS_TYPE_MARKED 1 << 16
504 | /**
505 | * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
506 | *
507 | * the complexType did not specify 'block' so use the default of the
508 | * <schema> item.
509 | */
510 | #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17
511 | /**
512 | * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
513 | *
514 | * the complexType has a 'block' of "extension".
515 | */
516 | #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18
517 | /**
518 | * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
519 | *
520 | * the complexType has a 'block' of "restriction".
521 | */
522 | #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19
523 | /**
524 | * XML_SCHEMAS_TYPE_ABSTRACT:
525 | *
526 | * the simple/complexType is abstract.
527 | */
528 | #define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20
529 | /**
530 | * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
531 | *
532 | * indicates if the facets need a computed value
533 | */
534 | #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21
535 | /**
536 | * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
537 | *
538 | * indicates that the type was typefixed
539 | */
540 | #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22
541 | /**
542 | * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
543 | *
544 | * indicates that the type is invalid
545 | */
546 | #define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23
547 | /**
548 | * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
549 | *
550 | * a whitespace-facet value of "preserve"
551 | */
552 | #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24
553 | /**
554 | * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
555 | *
556 | * a whitespace-facet value of "replace"
557 | */
558 | #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25
559 | /**
560 | * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
561 | *
562 | * a whitespace-facet value of "collapse"
563 | */
564 | #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26
565 | /**
566 | * XML_SCHEMAS_TYPE_HAS_FACETS:
567 | *
568 | * has facets
569 | */
570 | #define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27
571 | /**
572 | * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
573 | *
574 | * indicates if the facets (pattern) need a normalized value
575 | */
576 | #define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28
577 |
578 | /**
579 | * XML_SCHEMAS_TYPE_FIXUP_1:
580 | *
581 | * First stage of fixup was done.
582 | */
583 | #define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29
584 |
585 | /**
586 | * XML_SCHEMAS_TYPE_REDEFINED:
587 | *
588 | * The type was redefined.
589 | */
590 | #define XML_SCHEMAS_TYPE_REDEFINED 1 << 30
591 | /**
592 | * XML_SCHEMAS_TYPE_REDEFINING:
593 | *
594 | * The type redefines an other type.
595 | */
596 | /* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */
597 |
598 | /**
599 | * _xmlSchemaType:
600 | *
601 | * Schemas type definition.
602 | */
603 | struct _xmlSchemaType {
604 | xmlSchemaTypeType type; /* The kind of type */
605 | struct _xmlSchemaType *next; /* the next type if in a sequence ... */
606 | const xmlChar *name;
607 | const xmlChar *id ; /* Deprecated; not used */
608 | const xmlChar *ref; /* Deprecated; not used */
609 | const xmlChar *refNs; /* Deprecated; not used */
610 | xmlSchemaAnnotPtr annot;
611 | xmlSchemaTypePtr subtypes;
612 | xmlSchemaAttributePtr attributes; /* Deprecated; not used */
613 | xmlNodePtr node;
614 | int minOccurs; /* Deprecated; not used */
615 | int maxOccurs; /* Deprecated; not used */
616 |
617 | int flags;
618 | xmlSchemaContentType contentType;
619 | const xmlChar *base; /* Base type's local name */
620 | const xmlChar *baseNs; /* Base type's target namespace */
621 | xmlSchemaTypePtr baseType; /* The base type component */
622 | xmlSchemaFacetPtr facets; /* Local facets */
623 | struct _xmlSchemaType *redef; /* Deprecated; not used */
624 | int recurse; /* Obsolete */
625 | xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */
626 | xmlSchemaWildcardPtr attributeWildcard;
627 | int builtInType; /* Type of built-in types. */
628 | xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */
629 | xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */
630 | const xmlChar *refPrefix; /* Deprecated; not used */
631 | xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types.
632 | Could we use @subtypes for this? */
633 | xmlRegexpPtr contModel; /* Holds the automaton of the content model */
634 | const xmlChar *targetNamespace;
635 | void *attrUses;
636 | };
637 |
638 | /*
639 | * xmlSchemaElement:
640 | * An element definition.
641 | *
642 | * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
643 | * structures must be kept similar
644 | */
645 | /**
646 | * XML_SCHEMAS_ELEM_NILLABLE:
647 | *
648 | * the element is nillable
649 | */
650 | #define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
651 | /**
652 | * XML_SCHEMAS_ELEM_GLOBAL:
653 | *
654 | * the element is global
655 | */
656 | #define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
657 | /**
658 | * XML_SCHEMAS_ELEM_DEFAULT:
659 | *
660 | * the element has a default value
661 | */
662 | #define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
663 | /**
664 | * XML_SCHEMAS_ELEM_FIXED:
665 | *
666 | * the element has a fixed value
667 | */
668 | #define XML_SCHEMAS_ELEM_FIXED 1 << 3
669 | /**
670 | * XML_SCHEMAS_ELEM_ABSTRACT:
671 | *
672 | * the element is abstract
673 | */
674 | #define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
675 | /**
676 | * XML_SCHEMAS_ELEM_TOPLEVEL:
677 | *
678 | * the element is top level
679 | * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
680 | */
681 | #define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
682 | /**
683 | * XML_SCHEMAS_ELEM_REF:
684 | *
685 | * the element is a reference to a type
686 | */
687 | #define XML_SCHEMAS_ELEM_REF 1 << 6
688 | /**
689 | * XML_SCHEMAS_ELEM_NSDEFAULT:
690 | *
691 | * allow elements in no namespace
692 | * Obsolete, not used anymore.
693 | */
694 | #define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7
695 | /**
696 | * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
697 | *
698 | * this is set when "type", "ref", "substitutionGroup"
699 | * references have been resolved.
700 | */
701 | #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8
702 | /**
703 | * XML_SCHEMAS_ELEM_CIRCULAR:
704 | *
705 | * a helper flag for the search of circular references.
706 | */
707 | #define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9
708 | /**
709 | * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
710 | *
711 | * the "block" attribute is absent
712 | */
713 | #define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10
714 | /**
715 | * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
716 | *
717 | * disallowed substitutions are absent
718 | */
719 | #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11
720 | /**
721 | * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
722 | *
723 | * disallowed substitutions: "restriction"
724 | */
725 | #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12
726 | /**
727 | * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
728 | *
729 | * disallowed substitutions: "substitution"
730 | */
731 | #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13
732 | /**
733 | * XML_SCHEMAS_ELEM_FINAL_ABSENT:
734 | *
735 | * substitution group exclusions are absent
736 | */
737 | #define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14
738 | /**
739 | * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
740 | *
741 | * substitution group exclusions: "extension"
742 | */
743 | #define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15
744 | /**
745 | * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
746 | *
747 | * substitution group exclusions: "restriction"
748 | */
749 | #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16
750 | /**
751 | * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
752 | *
753 | * the declaration is a substitution group head
754 | */
755 | #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17
756 | /**
757 | * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
758 | *
759 | * this is set when the elem decl has been checked against
760 | * all constraints
761 | */
762 | #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18
763 |
764 | typedef struct _xmlSchemaElement xmlSchemaElement;
765 | typedef xmlSchemaElement *xmlSchemaElementPtr;
766 | struct _xmlSchemaElement {
767 | xmlSchemaTypeType type; /* The kind of type */
768 | struct _xmlSchemaType *next; /* Not used? */
769 | const xmlChar *name;
770 | const xmlChar *id; /* Deprecated; not used */
771 | const xmlChar *ref; /* Deprecated; not used */
772 | const xmlChar *refNs; /* Deprecated; not used */
773 | xmlSchemaAnnotPtr annot;
774 | xmlSchemaTypePtr subtypes; /* the type definition */
775 | xmlSchemaAttributePtr attributes;
776 | xmlNodePtr node;
777 | int minOccurs; /* Deprecated; not used */
778 | int maxOccurs; /* Deprecated; not used */
779 |
780 | int flags;
781 | const xmlChar *targetNamespace;
782 | const xmlChar *namedType;
783 | const xmlChar *namedTypeNs;
784 | const xmlChar *substGroup;
785 | const xmlChar *substGroupNs;
786 | const xmlChar *scope;
787 | const xmlChar *value; /* The original value of the value constraint. */
788 | struct _xmlSchemaElement *refDecl; /* This will now be used for the
789 | substitution group affiliation */
790 | xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */
791 | xmlSchemaContentType contentType;
792 | const xmlChar *refPrefix; /* Deprecated; not used */
793 | xmlSchemaValPtr defVal; /* The compiled value constraint. */
794 | void *idcs; /* The identity-constraint defs */
795 | };
796 |
797 | /*
798 | * XML_SCHEMAS_FACET_UNKNOWN:
799 | *
800 | * unknown facet handling
801 | */
802 | #define XML_SCHEMAS_FACET_UNKNOWN 0
803 | /*
804 | * XML_SCHEMAS_FACET_PRESERVE:
805 | *
806 | * preserve the type of the facet
807 | */
808 | #define XML_SCHEMAS_FACET_PRESERVE 1
809 | /*
810 | * XML_SCHEMAS_FACET_REPLACE:
811 | *
812 | * replace the type of the facet
813 | */
814 | #define XML_SCHEMAS_FACET_REPLACE 2
815 | /*
816 | * XML_SCHEMAS_FACET_COLLAPSE:
817 | *
818 | * collapse the types of the facet
819 | */
820 | #define XML_SCHEMAS_FACET_COLLAPSE 3
821 | /**
822 | * A facet definition.
823 | */
824 | struct _xmlSchemaFacet {
825 | xmlSchemaTypeType type; /* The kind of type */
826 | struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
827 | const xmlChar *value; /* The original value */
828 | const xmlChar *id; /* Obsolete */
829 | xmlSchemaAnnotPtr annot;
830 | xmlNodePtr node;
831 | int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */
832 | int whitespace;
833 | xmlSchemaValPtr val; /* The compiled value */
834 | xmlRegexpPtr regexp; /* The regex for patterns */
835 | };
836 |
837 | /**
838 | * A notation definition.
839 | */
840 | typedef struct _xmlSchemaNotation xmlSchemaNotation;
841 | typedef xmlSchemaNotation *xmlSchemaNotationPtr;
842 | struct _xmlSchemaNotation {
843 | xmlSchemaTypeType type; /* The kind of type */
844 | const xmlChar *name;
845 | xmlSchemaAnnotPtr annot;
846 | const xmlChar *identifier;
847 | const xmlChar *targetNamespace;
848 | };
849 |
850 | /*
851 | * TODO: Actually all those flags used for the schema should sit
852 | * on the schema parser context, since they are used only
853 | * during parsing an XML schema document, and not available
854 | * on the component level as per spec.
855 | */
856 | /**
857 | * XML_SCHEMAS_QUALIF_ELEM:
858 | *
859 | * Reflects elementFormDefault == qualified in
860 | * an XML schema document.
861 | */
862 | #define XML_SCHEMAS_QUALIF_ELEM 1 << 0
863 | /**
864 | * XML_SCHEMAS_QUALIF_ATTR:
865 | *
866 | * Reflects attributeFormDefault == qualified in
867 | * an XML schema document.
868 | */
869 | #define XML_SCHEMAS_QUALIF_ATTR 1 << 1
870 | /**
871 | * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
872 | *
873 | * the schema has "extension" in the set of finalDefault.
874 | */
875 | #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2
876 | /**
877 | * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
878 | *
879 | * the schema has "restriction" in the set of finalDefault.
880 | */
881 | #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3
882 | /**
883 | * XML_SCHEMAS_FINAL_DEFAULT_LIST:
884 | *
885 | * the schema has "list" in the set of finalDefault.
886 | */
887 | #define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4
888 | /**
889 | * XML_SCHEMAS_FINAL_DEFAULT_UNION:
890 | *
891 | * the schema has "union" in the set of finalDefault.
892 | */
893 | #define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5
894 | /**
895 | * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
896 | *
897 | * the schema has "extension" in the set of blockDefault.
898 | */
899 | #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6
900 | /**
901 | * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
902 | *
903 | * the schema has "restriction" in the set of blockDefault.
904 | */
905 | #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7
906 | /**
907 | * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
908 | *
909 | * the schema has "substitution" in the set of blockDefault.
910 | */
911 | #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8
912 | /**
913 | * XML_SCHEMAS_INCLUDING_CONVERT_NS:
914 | *
915 | * the schema is currently including an other schema with
916 | * no target namespace.
917 | */
918 | #define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9
919 | /**
920 | * _xmlSchema:
921 | *
922 | * A Schemas definition
923 | */
924 | struct _xmlSchema {
925 | const xmlChar *name; /* schema name */
926 | const xmlChar *targetNamespace; /* the target namespace */
927 | const xmlChar *version;
928 | const xmlChar *id; /* Obsolete */
929 | xmlDocPtr doc;
930 | xmlSchemaAnnotPtr annot;
931 | int flags;
932 |
933 | xmlHashTablePtr typeDecl;
934 | xmlHashTablePtr attrDecl;
935 | xmlHashTablePtr attrgrpDecl;
936 | xmlHashTablePtr elemDecl;
937 | xmlHashTablePtr notaDecl;
938 |
939 | xmlHashTablePtr schemasImports;
940 |
941 | void *_private; /* unused by the library for users or bindings */
942 | xmlHashTablePtr groupDecl;
943 | xmlDictPtr dict;
944 | void *includes; /* the includes, this is opaque for now */
945 | int preserve; /* whether to free the document */
946 | int counter; /* used to give anonymous components unique names */
947 | xmlHashTablePtr idcDef; /* All identity-constraint defs. */
948 | void *volatiles; /* Obsolete */
949 | };
950 |
951 | XMLPUBFUN void xmlSchemaFreeType (xmlSchemaTypePtr type);
952 | XMLPUBFUN void xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
953 |
954 | #ifdef __cplusplus
955 | }
956 | #endif
957 |
958 | #endif /* LIBXML_SCHEMAS_ENABLED */
959 | #endif /* __XML_SCHEMA_INTERNALS_H__ */
960 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/style.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | from functools import lru_cache
3 | from marshal import dumps, loads
4 | from random import randint
5 | from typing import Any, Dict, Iterable, List, Optional, Type, Union, cast
6 |
7 | from . import errors
8 | from .color import Color, ColorParseError, ColorSystem, blend_rgb
9 | from .repr import Result, rich_repr
10 | from .terminal_theme import DEFAULT_TERMINAL_THEME, TerminalTheme
11 |
12 | # Style instances and style definitions are often interchangeable
13 | StyleType = Union[str, "Style"]
14 |
15 |
16 | class _Bit:
17 | """A descriptor to get/set a style attribute bit."""
18 |
19 | __slots__ = ["bit"]
20 |
21 | def __init__(self, bit_no: int) -> None:
22 | self.bit = 1 << bit_no
23 |
24 | def __get__(self, obj: "Style", objtype: Type["Style"]) -> Optional[bool]:
25 | if obj._set_attributes & self.bit:
26 | return obj._attributes & self.bit != 0
27 | return None
28 |
29 |
30 | @rich_repr
31 | class Style:
32 | """A terminal style.
33 |
34 | A terminal style consists of a color (`color`), a background color (`bgcolor`), and a number of attributes, such
35 | as bold, italic etc. The attributes have 3 states: they can either be on
36 | (``True``), off (``False``), or not set (``None``).
37 |
38 | Args:
39 | color (Union[Color, str], optional): Color of terminal text. Defaults to None.
40 | bgcolor (Union[Color, str], optional): Color of terminal background. Defaults to None.
41 | bold (bool, optional): Enable bold text. Defaults to None.
42 | dim (bool, optional): Enable dim text. Defaults to None.
43 | italic (bool, optional): Enable italic text. Defaults to None.
44 | underline (bool, optional): Enable underlined text. Defaults to None.
45 | blink (bool, optional): Enabled blinking text. Defaults to None.
46 | blink2 (bool, optional): Enable fast blinking text. Defaults to None.
47 | reverse (bool, optional): Enabled reverse text. Defaults to None.
48 | conceal (bool, optional): Enable concealed text. Defaults to None.
49 | strike (bool, optional): Enable strikethrough text. Defaults to None.
50 | underline2 (bool, optional): Enable doubly underlined text. Defaults to None.
51 | frame (bool, optional): Enable framed text. Defaults to None.
52 | encircle (bool, optional): Enable encircled text. Defaults to None.
53 | overline (bool, optional): Enable overlined text. Defaults to None.
54 | link (str, link): Link URL. Defaults to None.
55 |
56 | """
57 |
58 | _color: Optional[Color]
59 | _bgcolor: Optional[Color]
60 | _attributes: int
61 | _set_attributes: int
62 | _hash: Optional[int]
63 | _null: bool
64 | _meta: Optional[bytes]
65 |
66 | __slots__ = [
67 | "_color",
68 | "_bgcolor",
69 | "_attributes",
70 | "_set_attributes",
71 | "_link",
72 | "_link_id",
73 | "_ansi",
74 | "_style_definition",
75 | "_hash",
76 | "_null",
77 | "_meta",
78 | ]
79 |
80 | # maps bits on to SGR parameter
81 | _style_map = {
82 | 0: "1",
83 | 1: "2",
84 | 2: "3",
85 | 3: "4",
86 | 4: "5",
87 | 5: "6",
88 | 6: "7",
89 | 7: "8",
90 | 8: "9",
91 | 9: "21",
92 | 10: "51",
93 | 11: "52",
94 | 12: "53",
95 | }
96 |
97 | STYLE_ATTRIBUTES = {
98 | "dim": "dim",
99 | "d": "dim",
100 | "bold": "bold",
101 | "b": "bold",
102 | "italic": "italic",
103 | "i": "italic",
104 | "underline": "underline",
105 | "u": "underline",
106 | "blink": "blink",
107 | "blink2": "blink2",
108 | "reverse": "reverse",
109 | "r": "reverse",
110 | "conceal": "conceal",
111 | "c": "conceal",
112 | "strike": "strike",
113 | "s": "strike",
114 | "underline2": "underline2",
115 | "uu": "underline2",
116 | "frame": "frame",
117 | "encircle": "encircle",
118 | "overline": "overline",
119 | "o": "overline",
120 | }
121 |
122 | def __init__(
123 | self,
124 | *,
125 | color: Optional[Union[Color, str]] = None,
126 | bgcolor: Optional[Union[Color, str]] = None,
127 | bold: Optional[bool] = None,
128 | dim: Optional[bool] = None,
129 | italic: Optional[bool] = None,
130 | underline: Optional[bool] = None,
131 | blink: Optional[bool] = None,
132 | blink2: Optional[bool] = None,
133 | reverse: Optional[bool] = None,
134 | conceal: Optional[bool] = None,
135 | strike: Optional[bool] = None,
136 | underline2: Optional[bool] = None,
137 | frame: Optional[bool] = None,
138 | encircle: Optional[bool] = None,
139 | overline: Optional[bool] = None,
140 | link: Optional[str] = None,
141 | meta: Optional[Dict[str, Any]] = None,
142 | ):
143 | self._ansi: Optional[str] = None
144 | self._style_definition: Optional[str] = None
145 |
146 | def _make_color(color: Union[Color, str]) -> Color:
147 | return color if isinstance(color, Color) else Color.parse(color)
148 |
149 | self._color = None if color is None else _make_color(color)
150 | self._bgcolor = None if bgcolor is None else _make_color(bgcolor)
151 | self._set_attributes = sum(
152 | (
153 | bold is not None,
154 | dim is not None and 2,
155 | italic is not None and 4,
156 | underline is not None and 8,
157 | blink is not None and 16,
158 | blink2 is not None and 32,
159 | reverse is not None and 64,
160 | conceal is not None and 128,
161 | strike is not None and 256,
162 | underline2 is not None and 512,
163 | frame is not None and 1024,
164 | encircle is not None and 2048,
165 | overline is not None and 4096,
166 | )
167 | )
168 | self._attributes = (
169 | sum(
170 | (
171 | bold and 1 or 0,
172 | dim and 2 or 0,
173 | italic and 4 or 0,
174 | underline and 8 or 0,
175 | blink and 16 or 0,
176 | blink2 and 32 or 0,
177 | reverse and 64 or 0,
178 | conceal and 128 or 0,
179 | strike and 256 or 0,
180 | underline2 and 512 or 0,
181 | frame and 1024 or 0,
182 | encircle and 2048 or 0,
183 | overline and 4096 or 0,
184 | )
185 | )
186 | if self._set_attributes
187 | else 0
188 | )
189 |
190 | self._link = link
191 | self._meta = None if meta is None else dumps(meta)
192 | self._link_id = (
193 | f"{randint(0, 999999)}{hash(self._meta)}" if (link or meta) else ""
194 | )
195 | self._hash: Optional[int] = None
196 | self._null = not (self._set_attributes or color or bgcolor or link or meta)
197 |
198 | @classmethod
199 | def null(cls) -> "Style":
200 | """Create an 'null' style, equivalent to Style(), but more performant."""
201 | return NULL_STYLE
202 |
203 | @classmethod
204 | def from_color(
205 | cls, color: Optional[Color] = None, bgcolor: Optional[Color] = None
206 | ) -> "Style":
207 | """Create a new style with colors and no attributes.
208 |
209 | Returns:
210 | color (Optional[Color]): A (foreground) color, or None for no color. Defaults to None.
211 | bgcolor (Optional[Color]): A (background) color, or None for no color. Defaults to None.
212 | """
213 | style: Style = cls.__new__(Style)
214 | style._ansi = None
215 | style._style_definition = None
216 | style._color = color
217 | style._bgcolor = bgcolor
218 | style._set_attributes = 0
219 | style._attributes = 0
220 | style._link = None
221 | style._link_id = ""
222 | style._meta = None
223 | style._null = not (color or bgcolor)
224 | style._hash = None
225 | return style
226 |
227 | @classmethod
228 | def from_meta(cls, meta: Optional[Dict[str, Any]]) -> "Style":
229 | """Create a new style with meta data.
230 |
231 | Returns:
232 | meta (Optional[Dict[str, Any]]): A dictionary of meta data. Defaults to None.
233 | """
234 | style: Style = cls.__new__(Style)
235 | style._ansi = None
236 | style._style_definition = None
237 | style._color = None
238 | style._bgcolor = None
239 | style._set_attributes = 0
240 | style._attributes = 0
241 | style._link = None
242 | style._meta = dumps(meta)
243 | style._link_id = f"{randint(0, 999999)}{hash(style._meta)}"
244 | style._hash = None
245 | style._null = not (meta)
246 | return style
247 |
248 | @classmethod
249 | def on(cls, meta: Optional[Dict[str, Any]] = None, **handlers: Any) -> "Style":
250 | """Create a blank style with meta information.
251 |
252 | Example:
253 | style = Style.on(click=self.on_click)
254 |
255 | Args:
256 | meta (Optional[Dict[str, Any]], optional): An optional dict of meta information.
257 | **handlers (Any): Keyword arguments are translated in to handlers.
258 |
259 | Returns:
260 | Style: A Style with meta information attached.
261 | """
262 | meta = {} if meta is None else meta
263 | meta.update({f"@{key}": value for key, value in handlers.items()})
264 | return cls.from_meta(meta)
265 |
266 | bold = _Bit(0)
267 | dim = _Bit(1)
268 | italic = _Bit(2)
269 | underline = _Bit(3)
270 | blink = _Bit(4)
271 | blink2 = _Bit(5)
272 | reverse = _Bit(6)
273 | conceal = _Bit(7)
274 | strike = _Bit(8)
275 | underline2 = _Bit(9)
276 | frame = _Bit(10)
277 | encircle = _Bit(11)
278 | overline = _Bit(12)
279 |
280 | @property
281 | def link_id(self) -> str:
282 | """Get a link id, used in ansi code for links."""
283 | return self._link_id
284 |
285 | def __str__(self) -> str:
286 | """Re-generate style definition from attributes."""
287 | if self._style_definition is None:
288 | attributes: List[str] = []
289 | append = attributes.append
290 | bits = self._set_attributes
291 | if bits & 0b0000000001111:
292 | if bits & 1:
293 | append("bold" if self.bold else "not bold")
294 | if bits & (1 << 1):
295 | append("dim" if self.dim else "not dim")
296 | if bits & (1 << 2):
297 | append("italic" if self.italic else "not italic")
298 | if bits & (1 << 3):
299 | append("underline" if self.underline else "not underline")
300 | if bits & 0b0000111110000:
301 | if bits & (1 << 4):
302 | append("blink" if self.blink else "not blink")
303 | if bits & (1 << 5):
304 | append("blink2" if self.blink2 else "not blink2")
305 | if bits & (1 << 6):
306 | append("reverse" if self.reverse else "not reverse")
307 | if bits & (1 << 7):
308 | append("conceal" if self.conceal else "not conceal")
309 | if bits & (1 << 8):
310 | append("strike" if self.strike else "not strike")
311 | if bits & 0b1111000000000:
312 | if bits & (1 << 9):
313 | append("underline2" if self.underline2 else "not underline2")
314 | if bits & (1 << 10):
315 | append("frame" if self.frame else "not frame")
316 | if bits & (1 << 11):
317 | append("encircle" if self.encircle else "not encircle")
318 | if bits & (1 << 12):
319 | append("overline" if self.overline else "not overline")
320 | if self._color is not None:
321 | append(self._color.name)
322 | if self._bgcolor is not None:
323 | append("on")
324 | append(self._bgcolor.name)
325 | if self._link:
326 | append("link")
327 | append(self._link)
328 | self._style_definition = " ".join(attributes) or "none"
329 | return self._style_definition
330 |
331 | def __bool__(self) -> bool:
332 | """A Style is false if it has no attributes, colors, or links."""
333 | return not self._null
334 |
335 | def _make_ansi_codes(self, color_system: ColorSystem) -> str:
336 | """Generate ANSI codes for this style.
337 |
338 | Args:
339 | color_system (ColorSystem): Color system.
340 |
341 | Returns:
342 | str: String containing codes.
343 | """
344 |
345 | if self._ansi is None:
346 | sgr: List[str] = []
347 | append = sgr.append
348 | _style_map = self._style_map
349 | attributes = self._attributes & self._set_attributes
350 | if attributes:
351 | if attributes & 1:
352 | append(_style_map[0])
353 | if attributes & 2:
354 | append(_style_map[1])
355 | if attributes & 4:
356 | append(_style_map[2])
357 | if attributes & 8:
358 | append(_style_map[3])
359 | if attributes & 0b0000111110000:
360 | for bit in range(4, 9):
361 | if attributes & (1 << bit):
362 | append(_style_map[bit])
363 | if attributes & 0b1111000000000:
364 | for bit in range(9, 13):
365 | if attributes & (1 << bit):
366 | append(_style_map[bit])
367 | if self._color is not None:
368 | sgr.extend(self._color.downgrade(color_system).get_ansi_codes())
369 | if self._bgcolor is not None:
370 | sgr.extend(
371 | self._bgcolor.downgrade(color_system).get_ansi_codes(
372 | foreground=False
373 | )
374 | )
375 | self._ansi = ";".join(sgr)
376 | return self._ansi
377 |
378 | @classmethod
379 | @lru_cache(maxsize=1024)
380 | def normalize(cls, style: str) -> str:
381 | """Normalize a style definition so that styles with the same effect have the same string
382 | representation.
383 |
384 | Args:
385 | style (str): A style definition.
386 |
387 | Returns:
388 | str: Normal form of style definition.
389 | """
390 | try:
391 | return str(cls.parse(style))
392 | except errors.StyleSyntaxError:
393 | return style.strip().lower()
394 |
395 | @classmethod
396 | def pick_first(cls, *values: Optional[StyleType]) -> StyleType:
397 | """Pick first non-None style."""
398 | for value in values:
399 | if value is not None:
400 | return value
401 | raise ValueError("expected at least one non-None style")
402 |
403 | def __rich_repr__(self) -> Result:
404 | yield "color", self.color, None
405 | yield "bgcolor", self.bgcolor, None
406 | yield "bold", self.bold, None,
407 | yield "dim", self.dim, None,
408 | yield "italic", self.italic, None
409 | yield "underline", self.underline, None,
410 | yield "blink", self.blink, None
411 | yield "blink2", self.blink2, None
412 | yield "reverse", self.reverse, None
413 | yield "conceal", self.conceal, None
414 | yield "strike", self.strike, None
415 | yield "underline2", self.underline2, None
416 | yield "frame", self.frame, None
417 | yield "encircle", self.encircle, None
418 | yield "link", self.link, None
419 | if self._meta:
420 | yield "meta", self.meta
421 |
422 | def __eq__(self, other: Any) -> bool:
423 | if not isinstance(other, Style):
424 | return NotImplemented
425 | return self.__hash__() == other.__hash__()
426 |
427 | def __ne__(self, other: Any) -> bool:
428 | if not isinstance(other, Style):
429 | return NotImplemented
430 | return self.__hash__() != other.__hash__()
431 |
432 | def __hash__(self) -> int:
433 | if self._hash is not None:
434 | return self._hash
435 | self._hash = hash(
436 | (
437 | self._color,
438 | self._bgcolor,
439 | self._attributes,
440 | self._set_attributes,
441 | self._link,
442 | self._meta,
443 | )
444 | )
445 | return self._hash
446 |
447 | @property
448 | def color(self) -> Optional[Color]:
449 | """The foreground color or None if it is not set."""
450 | return self._color
451 |
452 | @property
453 | def bgcolor(self) -> Optional[Color]:
454 | """The background color or None if it is not set."""
455 | return self._bgcolor
456 |
457 | @property
458 | def link(self) -> Optional[str]:
459 | """Link text, if set."""
460 | return self._link
461 |
462 | @property
463 | def transparent_background(self) -> bool:
464 | """Check if the style specified a transparent background."""
465 | return self.bgcolor is None or self.bgcolor.is_default
466 |
467 | @property
468 | def background_style(self) -> "Style":
469 | """A Style with background only."""
470 | return Style(bgcolor=self.bgcolor)
471 |
472 | @property
473 | def meta(self) -> Dict[str, Any]:
474 | """Get meta information (can not be changed after construction)."""
475 | return {} if self._meta is None else cast(Dict[str, Any], loads(self._meta))
476 |
477 | @property
478 | def without_color(self) -> "Style":
479 | """Get a copy of the style with color removed."""
480 | if self._null:
481 | return NULL_STYLE
482 | style: Style = self.__new__(Style)
483 | style._ansi = None
484 | style._style_definition = None
485 | style._color = None
486 | style._bgcolor = None
487 | style._attributes = self._attributes
488 | style._set_attributes = self._set_attributes
489 | style._link = self._link
490 | style._link_id = f"{randint(0, 999999)}" if self._link else ""
491 | style._null = False
492 | style._meta = None
493 | style._hash = None
494 | return style
495 |
496 | @classmethod
497 | @lru_cache(maxsize=4096)
498 | def parse(cls, style_definition: str) -> "Style":
499 | """Parse a style definition.
500 |
501 | Args:
502 | style_definition (str): A string containing a style.
503 |
504 | Raises:
505 | errors.StyleSyntaxError: If the style definition syntax is invalid.
506 |
507 | Returns:
508 | `Style`: A Style instance.
509 | """
510 | if style_definition.strip() == "none" or not style_definition:
511 | return cls.null()
512 |
513 | STYLE_ATTRIBUTES = cls.STYLE_ATTRIBUTES
514 | color: Optional[str] = None
515 | bgcolor: Optional[str] = None
516 | attributes: Dict[str, Optional[Any]] = {}
517 | link: Optional[str] = None
518 |
519 | words = iter(style_definition.split())
520 | for original_word in words:
521 | word = original_word.lower()
522 | if word == "on":
523 | word = next(words, "")
524 | if not word:
525 | raise errors.StyleSyntaxError("color expected after 'on'")
526 | try:
527 | Color.parse(word) is None
528 | except ColorParseError as error:
529 | raise errors.StyleSyntaxError(
530 | f"unable to parse {word!r} as background color; {error}"
531 | ) from None
532 | bgcolor = word
533 |
534 | elif word == "not":
535 | word = next(words, "")
536 | attribute = STYLE_ATTRIBUTES.get(word)
537 | if attribute is None:
538 | raise errors.StyleSyntaxError(
539 | f"expected style attribute after 'not', found {word!r}"
540 | )
541 | attributes[attribute] = False
542 |
543 | elif word == "link":
544 | word = next(words, "")
545 | if not word:
546 | raise errors.StyleSyntaxError("URL expected after 'link'")
547 | link = word
548 |
549 | elif word in STYLE_ATTRIBUTES:
550 | attributes[STYLE_ATTRIBUTES[word]] = True
551 |
552 | else:
553 | try:
554 | Color.parse(word)
555 | except ColorParseError as error:
556 | raise errors.StyleSyntaxError(
557 | f"unable to parse {word!r} as color; {error}"
558 | ) from None
559 | color = word
560 | style = Style(color=color, bgcolor=bgcolor, link=link, **attributes)
561 | return style
562 |
563 | @lru_cache(maxsize=1024)
564 | def get_html_style(self, theme: Optional[TerminalTheme] = None) -> str:
565 | """Get a CSS style rule."""
566 | theme = theme or DEFAULT_TERMINAL_THEME
567 | css: List[str] = []
568 | append = css.append
569 |
570 | color = self.color
571 | bgcolor = self.bgcolor
572 | if self.reverse:
573 | color, bgcolor = bgcolor, color
574 | if self.dim:
575 | foreground_color = (
576 | theme.foreground_color if color is None else color.get_truecolor(theme)
577 | )
578 | color = Color.from_triplet(
579 | blend_rgb(foreground_color, theme.background_color, 0.5)
580 | )
581 | if color is not None:
582 | theme_color = color.get_truecolor(theme)
583 | append(f"color: {theme_color.hex}")
584 | append(f"text-decoration-color: {theme_color.hex}")
585 | if bgcolor is not None:
586 | theme_color = bgcolor.get_truecolor(theme, foreground=False)
587 | append(f"background-color: {theme_color.hex}")
588 | if self.bold:
589 | append("font-weight: bold")
590 | if self.italic:
591 | append("font-style: italic")
592 | if self.underline:
593 | append("text-decoration: underline")
594 | if self.strike:
595 | append("text-decoration: line-through")
596 | if self.overline:
597 | append("text-decoration: overline")
598 | return "; ".join(css)
599 |
600 | @classmethod
601 | def combine(cls, styles: Iterable["Style"]) -> "Style":
602 | """Combine styles and get result.
603 |
604 | Args:
605 | styles (Iterable[Style]): Styles to combine.
606 |
607 | Returns:
608 | Style: A new style instance.
609 | """
610 | iter_styles = iter(styles)
611 | return sum(iter_styles, next(iter_styles))
612 |
613 | @classmethod
614 | def chain(cls, *styles: "Style") -> "Style":
615 | """Combine styles from positional argument in to a single style.
616 |
617 | Args:
618 | *styles (Iterable[Style]): Styles to combine.
619 |
620 | Returns:
621 | Style: A new style instance.
622 | """
623 | iter_styles = iter(styles)
624 | return sum(iter_styles, next(iter_styles))
625 |
626 | def copy(self) -> "Style":
627 | """Get a copy of this style.
628 |
629 | Returns:
630 | Style: A new Style instance with identical attributes.
631 | """
632 | if self._null:
633 | return NULL_STYLE
634 | style: Style = self.__new__(Style)
635 | style._ansi = self._ansi
636 | style._style_definition = self._style_definition
637 | style._color = self._color
638 | style._bgcolor = self._bgcolor
639 | style._attributes = self._attributes
640 | style._set_attributes = self._set_attributes
641 | style._link = self._link
642 | style._link_id = f"{randint(0, 999999)}" if self._link else ""
643 | style._hash = self._hash
644 | style._null = False
645 | style._meta = self._meta
646 | return style
647 |
648 | @lru_cache(maxsize=128)
649 | def clear_meta_and_links(self) -> "Style":
650 | """Get a copy of this style with link and meta information removed.
651 |
652 | Returns:
653 | Style: New style object.
654 | """
655 | if self._null:
656 | return NULL_STYLE
657 | style: Style = self.__new__(Style)
658 | style._ansi = self._ansi
659 | style._style_definition = self._style_definition
660 | style._color = self._color
661 | style._bgcolor = self._bgcolor
662 | style._attributes = self._attributes
663 | style._set_attributes = self._set_attributes
664 | style._link = None
665 | style._link_id = ""
666 | style._hash = self._hash
667 | style._null = False
668 | style._meta = None
669 | return style
670 |
671 | def update_link(self, link: Optional[str] = None) -> "Style":
672 | """Get a copy with a different value for link.
673 |
674 | Args:
675 | link (str, optional): New value for link. Defaults to None.
676 |
677 | Returns:
678 | Style: A new Style instance.
679 | """
680 | style: Style = self.__new__(Style)
681 | style._ansi = self._ansi
682 | style._style_definition = self._style_definition
683 | style._color = self._color
684 | style._bgcolor = self._bgcolor
685 | style._attributes = self._attributes
686 | style._set_attributes = self._set_attributes
687 | style._link = link
688 | style._link_id = f"{randint(0, 999999)}" if link else ""
689 | style._hash = None
690 | style._null = False
691 | style._meta = self._meta
692 | return style
693 |
694 | def render(
695 | self,
696 | text: str = "",
697 | *,
698 | color_system: Optional[ColorSystem] = ColorSystem.TRUECOLOR,
699 | legacy_windows: bool = False,
700 | ) -> str:
701 | """Render the ANSI codes for the style.
702 |
703 | Args:
704 | text (str, optional): A string to style. Defaults to "".
705 | color_system (Optional[ColorSystem], optional): Color system to render to. Defaults to ColorSystem.TRUECOLOR.
706 |
707 | Returns:
708 | str: A string containing ANSI style codes.
709 | """
710 | if not text or color_system is None:
711 | return text
712 | attrs = self._ansi or self._make_ansi_codes(color_system)
713 | rendered = f"\x1b[{attrs}m{text}\x1b[0m" if attrs else text
714 | if self._link and not legacy_windows:
715 | rendered = (
716 | f"\x1b]8;id={self._link_id};{self._link}\x1b\\{rendered}\x1b]8;;\x1b\\"
717 | )
718 | return rendered
719 |
720 | def test(self, text: Optional[str] = None) -> None:
721 | """Write text with style directly to terminal.
722 |
723 | This method is for testing purposes only.
724 |
725 | Args:
726 | text (Optional[str], optional): Text to style or None for style name.
727 |
728 | """
729 | text = text or str(self)
730 | sys.stdout.write(f"{self.render(text)}\n")
731 |
732 | @lru_cache(maxsize=1024)
733 | def _add(self, style: Optional["Style"]) -> "Style":
734 | if style is None or style._null:
735 | return self
736 | if self._null:
737 | return style
738 | new_style: Style = self.__new__(Style)
739 | new_style._ansi = None
740 | new_style._style_definition = None
741 | new_style._color = style._color or self._color
742 | new_style._bgcolor = style._bgcolor or self._bgcolor
743 | new_style._attributes = (self._attributes & ~style._set_attributes) | (
744 | style._attributes & style._set_attributes
745 | )
746 | new_style._set_attributes = self._set_attributes | style._set_attributes
747 | new_style._link = style._link or self._link
748 | new_style._link_id = style._link_id or self._link_id
749 | new_style._null = style._null
750 | if self._meta and style._meta:
751 | new_style._meta = dumps({**self.meta, **style.meta})
752 | else:
753 | new_style._meta = self._meta or style._meta
754 | new_style._hash = None
755 | return new_style
756 |
757 | def __add__(self, style: Optional["Style"]) -> "Style":
758 | combined_style = self._add(style)
759 | return combined_style.copy() if combined_style.link else combined_style
760 |
761 |
762 | NULL_STYLE = Style()
763 |
764 |
765 | class StyleStack:
766 | """A stack of styles."""
767 |
768 | __slots__ = ["_stack"]
769 |
770 | def __init__(self, default_style: "Style") -> None:
771 | self._stack: List[Style] = [default_style]
772 |
773 | def __repr__(self) -> str:
774 | return f"<stylestack {self._stack!r}>"
775 |
776 | @property
777 | def current(self) -> Style:
778 | """Get the Style at the top of the stack."""
779 | return self._stack[-1]
780 |
781 | def push(self, style: Style) -> None:
782 | """Push a new style on to the stack.
783 |
784 | Args:
785 | style (Style): New style to combine with current style.
786 | """
787 | self._stack.append(self._stack[-1] + style)
788 |
789 | def pop(self) -> Style:
790 | """Pop last style and discard.
791 |
792 | Returns:
793 | Style: New current style (also available as stack.current)
794 | """
795 | self._stack.pop()
796 | return self._stack[-1]
797 |
```