#
tokens: 44991/50000 2/808 files (page 78/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 78 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/img.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 |     pygments.formatters.img
  3 |     ~~~~~~~~~~~~~~~~~~~~~~~
  4 | 
  5 |     Formatter for Pixmap output.
  6 | 
  7 |     :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
  8 |     :license: BSD, see LICENSE for details.
  9 | """
 10 | import os
 11 | import sys
 12 | 
 13 | from pip._vendor.pygments.formatter import Formatter
 14 | from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
 15 |     get_choice_opt
 16 | 
 17 | import subprocess
 18 | 
 19 | # Import this carefully
 20 | try:
 21 |     from PIL import Image, ImageDraw, ImageFont
 22 |     pil_available = True
 23 | except ImportError:
 24 |     pil_available = False
 25 | 
 26 | try:
 27 |     import _winreg
 28 | except ImportError:
 29 |     try:
 30 |         import winreg as _winreg
 31 |     except ImportError:
 32 |         _winreg = None
 33 | 
 34 | __all__ = ['ImageFormatter', 'GifImageFormatter', 'JpgImageFormatter',
 35 |            'BmpImageFormatter']
 36 | 
 37 | 
 38 | # For some unknown reason every font calls it something different
 39 | STYLES = {
 40 |     'NORMAL':     ['', 'Roman', 'Book', 'Normal', 'Regular', 'Medium'],
 41 |     'ITALIC':     ['Oblique', 'Italic'],
 42 |     'BOLD':       ['Bold'],
 43 |     'BOLDITALIC': ['Bold Oblique', 'Bold Italic'],
 44 | }
 45 | 
 46 | # A sane default for modern systems
 47 | DEFAULT_FONT_NAME_NIX = 'DejaVu Sans Mono'
 48 | DEFAULT_FONT_NAME_WIN = 'Courier New'
 49 | DEFAULT_FONT_NAME_MAC = 'Menlo'
 50 | 
 51 | 
 52 | class PilNotAvailable(ImportError):
 53 |     """When Python imaging library is not available"""
 54 | 
 55 | 
 56 | class FontNotFound(Exception):
 57 |     """When there are no usable fonts specified"""
 58 | 
 59 | 
 60 | class FontManager:
 61 |     """
 62 |     Manages a set of fonts: normal, italic, bold, etc...
 63 |     """
 64 | 
 65 |     def __init__(self, font_name, font_size=14):
 66 |         self.font_name = font_name
 67 |         self.font_size = font_size
 68 |         self.fonts = {}
 69 |         self.encoding = None
 70 |         self.variable = False
 71 |         if hasattr(font_name, 'read') or os.path.isfile(font_name):
 72 |             font = ImageFont.truetype(font_name, self.font_size)
 73 |             self.variable = True
 74 |             for style in STYLES:
 75 |                 self.fonts[style] = font
 76 | 
 77 |             return
 78 | 
 79 |         if sys.platform.startswith('win'):
 80 |             if not font_name:
 81 |                 self.font_name = DEFAULT_FONT_NAME_WIN
 82 |             self._create_win()
 83 |         elif sys.platform.startswith('darwin'):
 84 |             if not font_name:
 85 |                 self.font_name = DEFAULT_FONT_NAME_MAC
 86 |             self._create_mac()
 87 |         else:
 88 |             if not font_name:
 89 |                 self.font_name = DEFAULT_FONT_NAME_NIX
 90 |             self._create_nix()
 91 | 
 92 |     def _get_nix_font_path(self, name, style):
 93 |         proc = subprocess.Popen(['fc-list', f"{name}:style={style}", 'file'],
 94 |                                 stdout=subprocess.PIPE, stderr=None)
 95 |         stdout, _ = proc.communicate()
 96 |         if proc.returncode == 0:
 97 |             lines = stdout.splitlines()
 98 |             for line in lines:
 99 |                 if line.startswith(b'Fontconfig warning:'):
100 |                     continue
101 |                 path = line.decode().strip().strip(':')
102 |                 if path:
103 |                     return path
104 |             return None
105 | 
106 |     def _create_nix(self):
107 |         for name in STYLES['NORMAL']:
108 |             path = self._get_nix_font_path(self.font_name, name)
109 |             if path is not None:
110 |                 self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
111 |                 break
112 |         else:
113 |             raise FontNotFound(f'No usable fonts named: "{self.font_name}"')
114 |         for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
115 |             for stylename in STYLES[style]:
116 |                 path = self._get_nix_font_path(self.font_name, stylename)
117 |                 if path is not None:
118 |                     self.fonts[style] = ImageFont.truetype(path, self.font_size)
119 |                     break
120 |             else:
121 |                 if style == 'BOLDITALIC':
122 |                     self.fonts[style] = self.fonts['BOLD']
123 |                 else:
124 |                     self.fonts[style] = self.fonts['NORMAL']
125 | 
126 |     def _get_mac_font_path(self, font_map, name, style):
127 |         return font_map.get((name + ' ' + style).strip().lower())
128 | 
129 |     def _create_mac(self):
130 |         font_map = {}
131 |         for font_dir in (os.path.join(os.getenv("HOME"), 'Library/Fonts/'),
132 |                          '/Library/Fonts/', '/System/Library/Fonts/'):
133 |             font_map.update(
134 |                 (os.path.splitext(f)[0].lower(), os.path.join(font_dir, f))
135 |                 for f in os.listdir(font_dir)
136 |                 if f.lower().endswith(('ttf', 'ttc')))
137 | 
138 |         for name in STYLES['NORMAL']:
139 |             path = self._get_mac_font_path(font_map, self.font_name, name)
140 |             if path is not None:
141 |                 self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
142 |                 break
143 |         else:
144 |             raise FontNotFound(f'No usable fonts named: "{self.font_name}"')
145 |         for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
146 |             for stylename in STYLES[style]:
147 |                 path = self._get_mac_font_path(font_map, self.font_name, stylename)
148 |                 if path is not None:
149 |                     self.fonts[style] = ImageFont.truetype(path, self.font_size)
150 |                     break
151 |             else:
152 |                 if style == 'BOLDITALIC':
153 |                     self.fonts[style] = self.fonts['BOLD']
154 |                 else:
155 |                     self.fonts[style] = self.fonts['NORMAL']
156 | 
157 |     def _lookup_win(self, key, basename, styles, fail=False):
158 |         for suffix in ('', ' (TrueType)'):
159 |             for style in styles:
160 |                 try:
161 |                     valname = '{}{}{}'.format(basename, style and ' '+style, suffix)
162 |                     val, _ = _winreg.QueryValueEx(key, valname)
163 |                     return val
164 |                 except OSError:
165 |                     continue
166 |         else:
167 |             if fail:
168 |                 raise FontNotFound(f'Font {basename} ({styles[0]}) not found in registry')
169 |             return None
170 | 
171 |     def _create_win(self):
172 |         lookuperror = None
173 |         keynames = [ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
174 |                      (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Fonts'),
175 |                      (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
176 |                      (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows\CurrentVersion\Fonts') ]
177 |         for keyname in keynames:
178 |             try:
179 |                 key = _winreg.OpenKey(*keyname)
180 |                 try:
181 |                     path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
182 |                     self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
183 |                     for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
184 |                         path = self._lookup_win(key, self.font_name, STYLES[style])
185 |                         if path:
186 |                             self.fonts[style] = ImageFont.truetype(path, self.font_size)
187 |                         else:
188 |                             if style == 'BOLDITALIC':
189 |                                 self.fonts[style] = self.fonts['BOLD']
190 |                             else:
191 |                                 self.fonts[style] = self.fonts['NORMAL']
192 |                     return
193 |                 except FontNotFound as err:
194 |                     lookuperror = err
195 |                 finally:
196 |                     _winreg.CloseKey(key)
197 |             except OSError:
198 |                 pass
199 |         else:
200 |             # If we get here, we checked all registry keys and had no luck
201 |             # We can be in one of two situations now:
202 |             # * All key lookups failed. In this case lookuperror is None and we
203 |             #   will raise a generic error
204 |             # * At least one lookup failed with a FontNotFound error. In this
205 |             #   case, we will raise that as a more specific error
206 |             if lookuperror:
207 |                 raise lookuperror
208 |             raise FontNotFound('Can\'t open Windows font registry key')
209 | 
210 |     def get_char_size(self):
211 |         """
212 |         Get the character size.
213 |         """
214 |         return self.get_text_size('M')
215 | 
216 |     def get_text_size(self, text):
217 |         """
218 |         Get the text size (width, height).
219 |         """
220 |         font = self.fonts['NORMAL']
221 |         if hasattr(font, 'getbbox'):  # Pillow >= 9.2.0
222 |             return font.getbbox(text)[2:4]
223 |         else:
224 |             return font.getsize(text)
225 | 
226 |     def get_font(self, bold, oblique):
227 |         """
228 |         Get the font based on bold and italic flags.
229 |         """
230 |         if bold and oblique:
231 |             if self.variable:
232 |                 return self.get_style('BOLDITALIC')
233 | 
234 |             return self.fonts['BOLDITALIC']
235 |         elif bold:
236 |             if self.variable:
237 |                 return self.get_style('BOLD')
238 | 
239 |             return self.fonts['BOLD']
240 |         elif oblique:
241 |             if self.variable:
242 |                 return self.get_style('ITALIC')
243 | 
244 |             return self.fonts['ITALIC']
245 |         else:
246 |             if self.variable:
247 |                 return self.get_style('NORMAL')
248 | 
249 |             return self.fonts['NORMAL']
250 | 
251 |     def get_style(self, style):
252 |         """
253 |         Get the specified style of the font if it is a variable font.
254 |         If not found, return the normal font.
255 |         """
256 |         font = self.fonts[style]
257 |         for style_name in STYLES[style]:
258 |             try:
259 |                 font.set_variation_by_name(style_name)
260 |                 return font
261 |             except ValueError:
262 |                 pass
263 |             except OSError:
264 |                 return font
265 | 
266 |         return font
267 | 
268 | 
269 | class ImageFormatter(Formatter):
270 |     """
271 |     Create a PNG image from source code. This uses the Python Imaging Library to
272 |     generate a pixmap from the source code.
273 | 
274 |     .. versionadded:: 0.10
275 | 
276 |     Additional options accepted:
277 | 
278 |     `image_format`
279 |         An image format to output to that is recognised by PIL, these include:
280 | 
281 |         * "PNG" (default)
282 |         * "JPEG"
283 |         * "BMP"
284 |         * "GIF"
285 | 
286 |     `line_pad`
287 |         The extra spacing (in pixels) between each line of text.
288 | 
289 |         Default: 2
290 | 
291 |     `font_name`
292 |         The font name to be used as the base font from which others, such as
293 |         bold and italic fonts will be generated.  This really should be a
294 |         monospace font to look sane.
295 |         If a filename or a file-like object is specified, the user must
296 |         provide different styles of the font.
297 | 
298 |         Default: "Courier New" on Windows, "Menlo" on Mac OS, and
299 |                  "DejaVu Sans Mono" on \\*nix
300 | 
301 |     `font_size`
302 |         The font size in points to be used.
303 | 
304 |         Default: 14
305 | 
306 |     `image_pad`
307 |         The padding, in pixels to be used at each edge of the resulting image.
308 | 
309 |         Default: 10
310 | 
311 |     `line_numbers`
312 |         Whether line numbers should be shown: True/False
313 | 
314 |         Default: True
315 | 
316 |     `line_number_start`
317 |         The line number of the first line.
318 | 
319 |         Default: 1
320 | 
321 |     `line_number_step`
322 |         The step used when printing line numbers.
323 | 
324 |         Default: 1
325 | 
326 |     `line_number_bg`
327 |         The background colour (in "#123456" format) of the line number bar, or
328 |         None to use the style background color.
329 | 
330 |         Default: "#eed"
331 | 
332 |     `line_number_fg`
333 |         The text color of the line numbers (in "#123456"-like format).
334 | 
335 |         Default: "#886"
336 | 
337 |     `line_number_chars`
338 |         The number of columns of line numbers allowable in the line number
339 |         margin.
340 | 
341 |         Default: 2
342 | 
343 |     `line_number_bold`
344 |         Whether line numbers will be bold: True/False
345 | 
346 |         Default: False
347 | 
348 |     `line_number_italic`
349 |         Whether line numbers will be italicized: True/False
350 | 
351 |         Default: False
352 | 
353 |     `line_number_separator`
354 |         Whether a line will be drawn between the line number area and the
355 |         source code area: True/False
356 | 
357 |         Default: True
358 | 
359 |     `line_number_pad`
360 |         The horizontal padding (in pixels) between the line number margin, and
361 |         the source code area.
362 | 
363 |         Default: 6
364 | 
365 |     `hl_lines`
366 |         Specify a list of lines to be highlighted.
367 | 
368 |         .. versionadded:: 1.2
369 | 
370 |         Default: empty list
371 | 
372 |     `hl_color`
373 |         Specify the color for highlighting lines.
374 | 
375 |         .. versionadded:: 1.2
376 | 
377 |         Default: highlight color of the selected style
378 |     """
379 | 
380 |     # Required by the pygments mapper
381 |     name = 'img'
382 |     aliases = ['img', 'IMG', 'png']
383 |     filenames = ['*.png']
384 | 
385 |     unicodeoutput = False
386 | 
387 |     default_image_format = 'png'
388 | 
389 |     def __init__(self, **options):
390 |         """
391 |         See the class docstring for explanation of options.
392 |         """
393 |         if not pil_available:
394 |             raise PilNotAvailable(
395 |                 'Python Imaging Library is required for this formatter')
396 |         Formatter.__init__(self, **options)
397 |         self.encoding = 'latin1'  # let pygments.format() do the right thing
398 |         # Read the style
399 |         self.styles = dict(self.style)
400 |         if self.style.background_color is None:
401 |             self.background_color = '#fff'
402 |         else:
403 |             self.background_color = self.style.background_color
404 |         # Image options
405 |         self.image_format = get_choice_opt(
406 |             options, 'image_format', ['png', 'jpeg', 'gif', 'bmp'],
407 |             self.default_image_format, normcase=True)
408 |         self.image_pad = get_int_opt(options, 'image_pad', 10)
409 |         self.line_pad = get_int_opt(options, 'line_pad', 2)
410 |         # The fonts
411 |         fontsize = get_int_opt(options, 'font_size', 14)
412 |         self.fonts = FontManager(options.get('font_name', ''), fontsize)
413 |         self.fontw, self.fonth = self.fonts.get_char_size()
414 |         # Line number options
415 |         self.line_number_fg = options.get('line_number_fg', '#886')
416 |         self.line_number_bg = options.get('line_number_bg', '#eed')
417 |         self.line_number_chars = get_int_opt(options,
418 |                                              'line_number_chars', 2)
419 |         self.line_number_bold = get_bool_opt(options,
420 |                                              'line_number_bold', False)
421 |         self.line_number_italic = get_bool_opt(options,
422 |                                                'line_number_italic', False)
423 |         self.line_number_pad = get_int_opt(options, 'line_number_pad', 6)
424 |         self.line_numbers = get_bool_opt(options, 'line_numbers', True)
425 |         self.line_number_separator = get_bool_opt(options,
426 |                                                   'line_number_separator', True)
427 |         self.line_number_step = get_int_opt(options, 'line_number_step', 1)
428 |         self.line_number_start = get_int_opt(options, 'line_number_start', 1)
429 |         if self.line_numbers:
430 |             self.line_number_width = (self.fontw * self.line_number_chars +
431 |                                       self.line_number_pad * 2)
432 |         else:
433 |             self.line_number_width = 0
434 |         self.hl_lines = []
435 |         hl_lines_str = get_list_opt(options, 'hl_lines', [])
436 |         for line in hl_lines_str:
437 |             try:
438 |                 self.hl_lines.append(int(line))
439 |             except ValueError:
440 |                 pass
441 |         self.hl_color = options.get('hl_color',
442 |                                     self.style.highlight_color) or '#f90'
443 |         self.drawables = []
444 | 
445 |     def get_style_defs(self, arg=''):
446 |         raise NotImplementedError('The -S option is meaningless for the image '
447 |                                   'formatter. Use -O style=<stylename> instead.')
448 | 
449 |     def _get_line_height(self):
450 |         """
451 |         Get the height of a line.
452 |         """
453 |         return self.fonth + self.line_pad
454 | 
455 |     def _get_line_y(self, lineno):
456 |         """
457 |         Get the Y coordinate of a line number.
458 |         """
459 |         return lineno * self._get_line_height() + self.image_pad
460 | 
461 |     def _get_char_width(self):
462 |         """
463 |         Get the width of a character.
464 |         """
465 |         return self.fontw
466 | 
467 |     def _get_char_x(self, linelength):
468 |         """
469 |         Get the X coordinate of a character position.
470 |         """
471 |         return linelength + self.image_pad + self.line_number_width
472 | 
473 |     def _get_text_pos(self, linelength, lineno):
474 |         """
475 |         Get the actual position for a character and line position.
476 |         """
477 |         return self._get_char_x(linelength), self._get_line_y(lineno)
478 | 
479 |     def _get_linenumber_pos(self, lineno):
480 |         """
481 |         Get the actual position for the start of a line number.
482 |         """
483 |         return (self.image_pad, self._get_line_y(lineno))
484 | 
485 |     def _get_text_color(self, style):
486 |         """
487 |         Get the correct color for the token from the style.
488 |         """
489 |         if style['color'] is not None:
490 |             fill = '#' + style['color']
491 |         else:
492 |             fill = '#000'
493 |         return fill
494 | 
495 |     def _get_text_bg_color(self, style):
496 |         """
497 |         Get the correct background color for the token from the style.
498 |         """
499 |         if style['bgcolor'] is not None:
500 |             bg_color = '#' + style['bgcolor']
501 |         else:
502 |             bg_color = None
503 |         return bg_color
504 | 
505 |     def _get_style_font(self, style):
506 |         """
507 |         Get the correct font for the style.
508 |         """
509 |         return self.fonts.get_font(style['bold'], style['italic'])
510 | 
511 |     def _get_image_size(self, maxlinelength, maxlineno):
512 |         """
513 |         Get the required image size.
514 |         """
515 |         return (self._get_char_x(maxlinelength) + self.image_pad,
516 |                 self._get_line_y(maxlineno + 0) + self.image_pad)
517 | 
518 |     def _draw_linenumber(self, posno, lineno):
519 |         """
520 |         Remember a line number drawable to paint later.
521 |         """
522 |         self._draw_text(
523 |             self._get_linenumber_pos(posno),
524 |             str(lineno).rjust(self.line_number_chars),
525 |             font=self.fonts.get_font(self.line_number_bold,
526 |                                      self.line_number_italic),
527 |             text_fg=self.line_number_fg,
528 |             text_bg=None,
529 |         )
530 | 
531 |     def _draw_text(self, pos, text, font, text_fg, text_bg):
532 |         """
533 |         Remember a single drawable tuple to paint later.
534 |         """
535 |         self.drawables.append((pos, text, font, text_fg, text_bg))
536 | 
537 |     def _create_drawables(self, tokensource):
538 |         """
539 |         Create drawables for the token content.
540 |         """
541 |         lineno = charno = maxcharno = 0
542 |         maxlinelength = linelength = 0
543 |         for ttype, value in tokensource:
544 |             while ttype not in self.styles:
545 |                 ttype = ttype.parent
546 |             style = self.styles[ttype]
547 |             # TODO: make sure tab expansion happens earlier in the chain.  It
548 |             # really ought to be done on the input, as to do it right here is
549 |             # quite complex.
550 |             value = value.expandtabs(4)
551 |             lines = value.splitlines(True)
552 |             # print lines
553 |             for i, line in enumerate(lines):
554 |                 temp = line.rstrip('\n')
555 |                 if temp:
556 |                     self._draw_text(
557 |                         self._get_text_pos(linelength, lineno),
558 |                         temp,
559 |                         font = self._get_style_font(style),
560 |                         text_fg = self._get_text_color(style),
561 |                         text_bg = self._get_text_bg_color(style),
562 |                     )
563 |                     temp_width, _ = self.fonts.get_text_size(temp)
564 |                     linelength += temp_width
565 |                     maxlinelength = max(maxlinelength, linelength)
566 |                     charno += len(temp)
567 |                     maxcharno = max(maxcharno, charno)
568 |                 if line.endswith('\n'):
569 |                     # add a line for each extra line in the value
570 |                     linelength = 0
571 |                     charno = 0
572 |                     lineno += 1
573 |         self.maxlinelength = maxlinelength
574 |         self.maxcharno = maxcharno
575 |         self.maxlineno = lineno
576 | 
577 |     def _draw_line_numbers(self):
578 |         """
579 |         Create drawables for the line numbers.
580 |         """
581 |         if not self.line_numbers:
582 |             return
583 |         for p in range(self.maxlineno):
584 |             n = p + self.line_number_start
585 |             if (n % self.line_number_step) == 0:
586 |                 self._draw_linenumber(p, n)
587 | 
588 |     def _paint_line_number_bg(self, im):
589 |         """
590 |         Paint the line number background on the image.
591 |         """
592 |         if not self.line_numbers:
593 |             return
594 |         if self.line_number_fg is None:
595 |             return
596 |         draw = ImageDraw.Draw(im)
597 |         recth = im.size[-1]
598 |         rectw = self.image_pad + self.line_number_width - self.line_number_pad
599 |         draw.rectangle([(0, 0), (rectw, recth)],
600 |                        fill=self.line_number_bg)
601 |         if self.line_number_separator:
602 |             draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
603 |         del draw
604 | 
605 |     def format(self, tokensource, outfile):
606 |         """
607 |         Format ``tokensource``, an iterable of ``(tokentype, tokenstring)``
608 |         tuples and write it into ``outfile``.
609 | 
610 |         This implementation calculates where it should draw each token on the
611 |         pixmap, then calculates the required pixmap size and draws the items.
612 |         """
613 |         self._create_drawables(tokensource)
614 |         self._draw_line_numbers()
615 |         im = Image.new(
616 |             'RGB',
617 |             self._get_image_size(self.maxlinelength, self.maxlineno),
618 |             self.background_color
619 |         )
620 |         self._paint_line_number_bg(im)
621 |         draw = ImageDraw.Draw(im)
622 |         # Highlight
623 |         if self.hl_lines:
624 |             x = self.image_pad + self.line_number_width - self.line_number_pad + 1
625 |             recth = self._get_line_height()
626 |             rectw = im.size[0] - x
627 |             for linenumber in self.hl_lines:
628 |                 y = self._get_line_y(linenumber - 1)
629 |                 draw.rectangle([(x, y), (x + rectw, y + recth)],
630 |                                fill=self.hl_color)
631 |         for pos, value, font, text_fg, text_bg in self.drawables:
632 |             if text_bg:
633 |                 # see deprecations https://pillow.readthedocs.io/en/stable/releasenotes/9.2.0.html#font-size-and-offset-methods
634 |                 if hasattr(draw, 'textsize'):
635 |                     text_size = draw.textsize(text=value, font=font)
636 |                 else:
637 |                     text_size = font.getbbox(value)[2:]
638 |                 draw.rectangle([pos[0], pos[1], pos[0] + text_size[0], pos[1] + text_size[1]], fill=text_bg)
639 |             draw.text(pos, value, font=font, fill=text_fg)
640 |         im.save(outfile, self.image_format.upper())
641 | 
642 | 
643 | # Add one formatter per format, so that the "-f gif" option gives the correct result
644 | # when used in pygmentize.
645 | 
646 | class GifImageFormatter(ImageFormatter):
647 |     """
648 |     Create a GIF image from source code. This uses the Python Imaging Library to
649 |     generate a pixmap from the source code.
650 | 
651 |     .. versionadded:: 1.0
652 |     """
653 | 
654 |     name = 'img_gif'
655 |     aliases = ['gif']
656 |     filenames = ['*.gif']
657 |     default_image_format = 'gif'
658 | 
659 | 
660 | class JpgImageFormatter(ImageFormatter):
661 |     """
662 |     Create a JPEG image from source code. This uses the Python Imaging Library to
663 |     generate a pixmap from the source code.
664 | 
665 |     .. versionadded:: 1.0
666 |     """
667 | 
668 |     name = 'img_jpg'
669 |     aliases = ['jpg', 'jpeg']
670 |     filenames = ['*.jpg']
671 |     default_image_format = 'jpeg'
672 | 
673 | 
674 | class BmpImageFormatter(ImageFormatter):
675 |     """
676 |     Create a bitmap image from source code. This uses the Python Imaging Library to
677 |     generate a pixmap from the source code.
678 | 
679 |     .. versionadded:: 1.0
680 |     """
681 | 
682 |     name = 'img_bmp'
683 |     aliases = ['bmp', 'bitmap']
684 |     filenames = ['*.bmp']
685 |     default_image_format = 'bmp'
686 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 |     pygments.cmdline
  3 |     ~~~~~~~~~~~~~~~~
  4 | 
  5 |     Command line interface.
  6 | 
  7 |     :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
  8 |     :license: BSD, see LICENSE for details.
  9 | """
 10 | 
 11 | import os
 12 | import sys
 13 | import shutil
 14 | import argparse
 15 | from textwrap import dedent
 16 | 
 17 | from pip._vendor.pygments import __version__, highlight
 18 | from pip._vendor.pygments.util import ClassNotFound, OptionError, docstring_headline, \
 19 |     guess_decode, guess_decode_from_terminal, terminal_encoding, \
 20 |     UnclosingTextIOWrapper
 21 | from pip._vendor.pygments.lexers import get_all_lexers, get_lexer_by_name, guess_lexer, \
 22 |     load_lexer_from_file, get_lexer_for_filename, find_lexer_class_for_filename
 23 | from pip._vendor.pygments.lexers.special import TextLexer
 24 | from pip._vendor.pygments.formatters.latex import LatexEmbeddedLexer, LatexFormatter
 25 | from pip._vendor.pygments.formatters import get_all_formatters, get_formatter_by_name, \
 26 |     load_formatter_from_file, get_formatter_for_filename, find_formatter_class
 27 | from pip._vendor.pygments.formatters.terminal import TerminalFormatter
 28 | from pip._vendor.pygments.formatters.terminal256 import Terminal256Formatter, TerminalTrueColorFormatter
 29 | from pip._vendor.pygments.filters import get_all_filters, find_filter_class
 30 | from pip._vendor.pygments.styles import get_all_styles, get_style_by_name
 31 | 
 32 | 
 33 | def _parse_options(o_strs):
 34 |     opts = {}
 35 |     if not o_strs:
 36 |         return opts
 37 |     for o_str in o_strs:
 38 |         if not o_str.strip():
 39 |             continue
 40 |         o_args = o_str.split(',')
 41 |         for o_arg in o_args:
 42 |             o_arg = o_arg.strip()
 43 |             try:
 44 |                 o_key, o_val = o_arg.split('=', 1)
 45 |                 o_key = o_key.strip()
 46 |                 o_val = o_val.strip()
 47 |             except ValueError:
 48 |                 opts[o_arg] = True
 49 |             else:
 50 |                 opts[o_key] = o_val
 51 |     return opts
 52 | 
 53 | 
 54 | def _parse_filters(f_strs):
 55 |     filters = []
 56 |     if not f_strs:
 57 |         return filters
 58 |     for f_str in f_strs:
 59 |         if ':' in f_str:
 60 |             fname, fopts = f_str.split(':', 1)
 61 |             filters.append((fname, _parse_options([fopts])))
 62 |         else:
 63 |             filters.append((f_str, {}))
 64 |     return filters
 65 | 
 66 | 
 67 | def _print_help(what, name):
 68 |     try:
 69 |         if what == 'lexer':
 70 |             cls = get_lexer_by_name(name)
 71 |             print(f"Help on the {cls.name} lexer:")
 72 |             print(dedent(cls.__doc__))
 73 |         elif what == 'formatter':
 74 |             cls = find_formatter_class(name)
 75 |             print(f"Help on the {cls.name} formatter:")
 76 |             print(dedent(cls.__doc__))
 77 |         elif what == 'filter':
 78 |             cls = find_filter_class(name)
 79 |             print(f"Help on the {name} filter:")
 80 |             print(dedent(cls.__doc__))
 81 |         return 0
 82 |     except (AttributeError, ValueError):
 83 |         print(f"{what} not found!", file=sys.stderr)
 84 |         return 1
 85 | 
 86 | 
 87 | def _print_list(what):
 88 |     if what == 'lexer':
 89 |         print()
 90 |         print("Lexers:")
 91 |         print("~~~~~~~")
 92 | 
 93 |         info = []
 94 |         for fullname, names, exts, _ in get_all_lexers():
 95 |             tup = (', '.join(names)+':', fullname,
 96 |                    exts and '(filenames ' + ', '.join(exts) + ')' or '')
 97 |             info.append(tup)
 98 |         info.sort()
 99 |         for i in info:
100 |             print(('* {}\n    {} {}').format(*i))
101 | 
102 |     elif what == 'formatter':
103 |         print()
104 |         print("Formatters:")
105 |         print("~~~~~~~~~~~")
106 | 
107 |         info = []
108 |         for cls in get_all_formatters():
109 |             doc = docstring_headline(cls)
110 |             tup = (', '.join(cls.aliases) + ':', doc, cls.filenames and
111 |                    '(filenames ' + ', '.join(cls.filenames) + ')' or '')
112 |             info.append(tup)
113 |         info.sort()
114 |         for i in info:
115 |             print(('* {}\n    {} {}').format(*i))
116 | 
117 |     elif what == 'filter':
118 |         print()
119 |         print("Filters:")
120 |         print("~~~~~~~~")
121 | 
122 |         for name in get_all_filters():
123 |             cls = find_filter_class(name)
124 |             print("* " + name + ':')
125 |             print(f"    {docstring_headline(cls)}")
126 | 
127 |     elif what == 'style':
128 |         print()
129 |         print("Styles:")
130 |         print("~~~~~~~")
131 | 
132 |         for name in get_all_styles():
133 |             cls = get_style_by_name(name)
134 |             print("* " + name + ':')
135 |             print(f"    {docstring_headline(cls)}")
136 | 
137 | 
138 | def _print_list_as_json(requested_items):
139 |     import json
140 |     result = {}
141 |     if 'lexer' in requested_items:
142 |         info = {}
143 |         for fullname, names, filenames, mimetypes in get_all_lexers():
144 |             info[fullname] = {
145 |                 'aliases': names,
146 |                 'filenames': filenames,
147 |                 'mimetypes': mimetypes
148 |             }
149 |         result['lexers'] = info
150 | 
151 |     if 'formatter' in requested_items:
152 |         info = {}
153 |         for cls in get_all_formatters():
154 |             doc = docstring_headline(cls)
155 |             info[cls.name] = {
156 |                 'aliases': cls.aliases,
157 |                 'filenames': cls.filenames,
158 |                 'doc': doc
159 |             }
160 |         result['formatters'] = info
161 | 
162 |     if 'filter' in requested_items:
163 |         info = {}
164 |         for name in get_all_filters():
165 |             cls = find_filter_class(name)
166 |             info[name] = {
167 |                 'doc': docstring_headline(cls)
168 |             }
169 |         result['filters'] = info
170 | 
171 |     if 'style' in requested_items:
172 |         info = {}
173 |         for name in get_all_styles():
174 |             cls = get_style_by_name(name)
175 |             info[name] = {
176 |                 'doc': docstring_headline(cls)
177 |             }
178 |         result['styles'] = info
179 | 
180 |     json.dump(result, sys.stdout)
181 | 
182 | def main_inner(parser, argns):
183 |     if argns.help:
184 |         parser.print_help()
185 |         return 0
186 | 
187 |     if argns.V:
188 |         print(f'Pygments version {__version__}, (c) 2006-2024 by Georg Brandl, Matthäus '
189 |               'Chajdas and contributors.')
190 |         return 0
191 | 
192 |     def is_only_option(opt):
193 |         return not any(v for (k, v) in vars(argns).items() if k != opt)
194 | 
195 |     # handle ``pygmentize -L``
196 |     if argns.L is not None:
197 |         arg_set = set()
198 |         for k, v in vars(argns).items():
199 |             if v:
200 |                 arg_set.add(k)
201 | 
202 |         arg_set.discard('L')
203 |         arg_set.discard('json')
204 | 
205 |         if arg_set:
206 |             parser.print_help(sys.stderr)
207 |             return 2
208 | 
209 |         # print version
210 |         if not argns.json:
211 |             main(['', '-V'])
212 |         allowed_types = {'lexer', 'formatter', 'filter', 'style'}
213 |         largs = [arg.rstrip('s') for arg in argns.L]
214 |         if any(arg not in allowed_types for arg in largs):
215 |             parser.print_help(sys.stderr)
216 |             return 0
217 |         if not largs:
218 |             largs = allowed_types
219 |         if not argns.json:
220 |             for arg in largs:
221 |                 _print_list(arg)
222 |         else:
223 |             _print_list_as_json(largs)
224 |         return 0
225 | 
226 |     # handle ``pygmentize -H``
227 |     if argns.H:
228 |         if not is_only_option('H'):
229 |             parser.print_help(sys.stderr)
230 |             return 2
231 |         what, name = argns.H
232 |         if what not in ('lexer', 'formatter', 'filter'):
233 |             parser.print_help(sys.stderr)
234 |             return 2
235 |         return _print_help(what, name)
236 | 
237 |     # parse -O options
238 |     parsed_opts = _parse_options(argns.O or [])
239 | 
240 |     # parse -P options
241 |     for p_opt in argns.P or []:
242 |         try:
243 |             name, value = p_opt.split('=', 1)
244 |         except ValueError:
245 |             parsed_opts[p_opt] = True
246 |         else:
247 |             parsed_opts[name] = value
248 | 
249 |     # encodings
250 |     inencoding = parsed_opts.get('inencoding', parsed_opts.get('encoding'))
251 |     outencoding = parsed_opts.get('outencoding', parsed_opts.get('encoding'))
252 | 
253 |     # handle ``pygmentize -N``
254 |     if argns.N:
255 |         lexer = find_lexer_class_for_filename(argns.N)
256 |         if lexer is None:
257 |             lexer = TextLexer
258 | 
259 |         print(lexer.aliases[0])
260 |         return 0
261 | 
262 |     # handle ``pygmentize -C``
263 |     if argns.C:
264 |         inp = sys.stdin.buffer.read()
265 |         try:
266 |             lexer = guess_lexer(inp, inencoding=inencoding)
267 |         except ClassNotFound:
268 |             lexer = TextLexer
269 | 
270 |         print(lexer.aliases[0])
271 |         return 0
272 | 
273 |     # handle ``pygmentize -S``
274 |     S_opt = argns.S
275 |     a_opt = argns.a
276 |     if S_opt is not None:
277 |         f_opt = argns.f
278 |         if not f_opt:
279 |             parser.print_help(sys.stderr)
280 |             return 2
281 |         if argns.l or argns.INPUTFILE:
282 |             parser.print_help(sys.stderr)
283 |             return 2
284 | 
285 |         try:
286 |             parsed_opts['style'] = S_opt
287 |             fmter = get_formatter_by_name(f_opt, **parsed_opts)
288 |         except ClassNotFound as err:
289 |             print(err, file=sys.stderr)
290 |             return 1
291 | 
292 |         print(fmter.get_style_defs(a_opt or ''))
293 |         return 0
294 | 
295 |     # if no -S is given, -a is not allowed
296 |     if argns.a is not None:
297 |         parser.print_help(sys.stderr)
298 |         return 2
299 | 
300 |     # parse -F options
301 |     F_opts = _parse_filters(argns.F or [])
302 | 
303 |     # -x: allow custom (eXternal) lexers and formatters
304 |     allow_custom_lexer_formatter = bool(argns.x)
305 | 
306 |     # select lexer
307 |     lexer = None
308 | 
309 |     # given by name?
310 |     lexername = argns.l
311 |     if lexername:
312 |         # custom lexer, located relative to user's cwd
313 |         if allow_custom_lexer_formatter and '.py' in lexername:
314 |             try:
315 |                 filename = None
316 |                 name = None
317 |                 if ':' in lexername:
318 |                     filename, name = lexername.rsplit(':', 1)
319 | 
320 |                     if '.py' in name:
321 |                         # This can happen on Windows: If the lexername is
322 |                         # C:\lexer.py -- return to normal load path in that case
323 |                         name = None
324 | 
325 |                 if filename and name:
326 |                     lexer = load_lexer_from_file(filename, name,
327 |                                                  **parsed_opts)
328 |                 else:
329 |                     lexer = load_lexer_from_file(lexername, **parsed_opts)
330 |             except ClassNotFound as err:
331 |                 print('Error:', err, file=sys.stderr)
332 |                 return 1
333 |         else:
334 |             try:
335 |                 lexer = get_lexer_by_name(lexername, **parsed_opts)
336 |             except (OptionError, ClassNotFound) as err:
337 |                 print('Error:', err, file=sys.stderr)
338 |                 return 1
339 | 
340 |     # read input code
341 |     code = None
342 | 
343 |     if argns.INPUTFILE:
344 |         if argns.s:
345 |             print('Error: -s option not usable when input file specified',
346 |                   file=sys.stderr)
347 |             return 2
348 | 
349 |         infn = argns.INPUTFILE
350 |         try:
351 |             with open(infn, 'rb') as infp:
352 |                 code = infp.read()
353 |         except Exception as err:
354 |             print('Error: cannot read infile:', err, file=sys.stderr)
355 |             return 1
356 |         if not inencoding:
357 |             code, inencoding = guess_decode(code)
358 | 
359 |         # do we have to guess the lexer?
360 |         if not lexer:
361 |             try:
362 |                 lexer = get_lexer_for_filename(infn, code, **parsed_opts)
363 |             except ClassNotFound as err:
364 |                 if argns.g:
365 |                     try:
366 |                         lexer = guess_lexer(code, **parsed_opts)
367 |                     except ClassNotFound:
368 |                         lexer = TextLexer(**parsed_opts)
369 |                 else:
370 |                     print('Error:', err, file=sys.stderr)
371 |                     return 1
372 |             except OptionError as err:
373 |                 print('Error:', err, file=sys.stderr)
374 |                 return 1
375 | 
376 |     elif not argns.s:  # treat stdin as full file (-s support is later)
377 |         # read code from terminal, always in binary mode since we want to
378 |         # decode ourselves and be tolerant with it
379 |         code = sys.stdin.buffer.read()  # use .buffer to get a binary stream
380 |         if not inencoding:
381 |             code, inencoding = guess_decode_from_terminal(code, sys.stdin)
382 |             # else the lexer will do the decoding
383 |         if not lexer:
384 |             try:
385 |                 lexer = guess_lexer(code, **parsed_opts)
386 |             except ClassNotFound:
387 |                 lexer = TextLexer(**parsed_opts)
388 | 
389 |     else:  # -s option needs a lexer with -l
390 |         if not lexer:
391 |             print('Error: when using -s a lexer has to be selected with -l',
392 |                   file=sys.stderr)
393 |             return 2
394 | 
395 |     # process filters
396 |     for fname, fopts in F_opts:
397 |         try:
398 |             lexer.add_filter(fname, **fopts)
399 |         except ClassNotFound as err:
400 |             print('Error:', err, file=sys.stderr)
401 |             return 1
402 | 
403 |     # select formatter
404 |     outfn = argns.o
405 |     fmter = argns.f
406 |     if fmter:
407 |         # custom formatter, located relative to user's cwd
408 |         if allow_custom_lexer_formatter and '.py' in fmter:
409 |             try:
410 |                 filename = None
411 |                 name = None
412 |                 if ':' in fmter:
413 |                     # Same logic as above for custom lexer
414 |                     filename, name = fmter.rsplit(':', 1)
415 | 
416 |                     if '.py' in name:
417 |                         name = None
418 | 
419 |                 if filename and name:
420 |                     fmter = load_formatter_from_file(filename, name,
421 |                                                      **parsed_opts)
422 |                 else:
423 |                     fmter = load_formatter_from_file(fmter, **parsed_opts)
424 |             except ClassNotFound as err:
425 |                 print('Error:', err, file=sys.stderr)
426 |                 return 1
427 |         else:
428 |             try:
429 |                 fmter = get_formatter_by_name(fmter, **parsed_opts)
430 |             except (OptionError, ClassNotFound) as err:
431 |                 print('Error:', err, file=sys.stderr)
432 |                 return 1
433 | 
434 |     if outfn:
435 |         if not fmter:
436 |             try:
437 |                 fmter = get_formatter_for_filename(outfn, **parsed_opts)
438 |             except (OptionError, ClassNotFound) as err:
439 |                 print('Error:', err, file=sys.stderr)
440 |                 return 1
441 |         try:
442 |             outfile = open(outfn, 'wb')
443 |         except Exception as err:
444 |             print('Error: cannot open outfile:', err, file=sys.stderr)
445 |             return 1
446 |     else:
447 |         if not fmter:
448 |             if os.environ.get('COLORTERM','') in ('truecolor', '24bit'):
449 |                 fmter = TerminalTrueColorFormatter(**parsed_opts)
450 |             elif '256' in os.environ.get('TERM', ''):
451 |                 fmter = Terminal256Formatter(**parsed_opts)
452 |             else:
453 |                 fmter = TerminalFormatter(**parsed_opts)
454 |         outfile = sys.stdout.buffer
455 | 
456 |     # determine output encoding if not explicitly selected
457 |     if not outencoding:
458 |         if outfn:
459 |             # output file? use lexer encoding for now (can still be None)
460 |             fmter.encoding = inencoding
461 |         else:
462 |             # else use terminal encoding
463 |             fmter.encoding = terminal_encoding(sys.stdout)
464 | 
465 |     # provide coloring under Windows, if possible
466 |     if not outfn and sys.platform in ('win32', 'cygwin') and \
467 |        fmter.name in ('Terminal', 'Terminal256'):  # pragma: no cover
468 |         # unfortunately colorama doesn't support binary streams on Py3
469 |         outfile = UnclosingTextIOWrapper(outfile, encoding=fmter.encoding)
470 |         fmter.encoding = None
471 |         try:
472 |             import colorama.initialise
473 |         except ImportError:
474 |             pass
475 |         else:
476 |             outfile = colorama.initialise.wrap_stream(
477 |                 outfile, convert=None, strip=None, autoreset=False, wrap=True)
478 | 
479 |     # When using the LaTeX formatter and the option `escapeinside` is
480 |     # specified, we need a special lexer which collects escaped text
481 |     # before running the chosen language lexer.
482 |     escapeinside = parsed_opts.get('escapeinside', '')
483 |     if len(escapeinside) == 2 and isinstance(fmter, LatexFormatter):
484 |         left = escapeinside[0]
485 |         right = escapeinside[1]
486 |         lexer = LatexEmbeddedLexer(left, right, lexer)
487 | 
488 |     # ... and do it!
489 |     if not argns.s:
490 |         # process whole input as per normal...
491 |         try:
492 |             highlight(code, lexer, fmter, outfile)
493 |         finally:
494 |             if outfn:
495 |                 outfile.close()
496 |         return 0
497 |     else:
498 |         # line by line processing of stdin (eg: for 'tail -f')...
499 |         try:
500 |             while 1:
501 |                 line = sys.stdin.buffer.readline()
502 |                 if not line:
503 |                     break
504 |                 if not inencoding:
505 |                     line = guess_decode_from_terminal(line, sys.stdin)[0]
506 |                 highlight(line, lexer, fmter, outfile)
507 |                 if hasattr(outfile, 'flush'):
508 |                     outfile.flush()
509 |             return 0
510 |         except KeyboardInterrupt:  # pragma: no cover
511 |             return 0
512 |         finally:
513 |             if outfn:
514 |                 outfile.close()
515 | 
516 | 
517 | class HelpFormatter(argparse.HelpFormatter):
518 |     def __init__(self, prog, indent_increment=2, max_help_position=16, width=None):
519 |         if width is None:
520 |             try:
521 |                 width = shutil.get_terminal_size().columns - 2
522 |             except Exception:
523 |                 pass
524 |         argparse.HelpFormatter.__init__(self, prog, indent_increment,
525 |                                         max_help_position, width)
526 | 
527 | 
528 | def main(args=sys.argv):
529 |     """
530 |     Main command line entry point.
531 |     """
532 |     desc = "Highlight an input file and write the result to an output file."
533 |     parser = argparse.ArgumentParser(description=desc, add_help=False,
534 |                                      formatter_class=HelpFormatter)
535 | 
536 |     operation = parser.add_argument_group('Main operation')
537 |     lexersel = operation.add_mutually_exclusive_group()
538 |     lexersel.add_argument(
539 |         '-l', metavar='LEXER',
540 |         help='Specify the lexer to use.  (Query names with -L.)  If not '
541 |         'given and -g is not present, the lexer is guessed from the filename.')
542 |     lexersel.add_argument(
543 |         '-g', action='store_true',
544 |         help='Guess the lexer from the file contents, or pass through '
545 |         'as plain text if nothing can be guessed.')
546 |     operation.add_argument(
547 |         '-F', metavar='FILTER[:options]', action='append',
548 |         help='Add a filter to the token stream.  (Query names with -L.) '
549 |         'Filter options are given after a colon if necessary.')
550 |     operation.add_argument(
551 |         '-f', metavar='FORMATTER',
552 |         help='Specify the formatter to use.  (Query names with -L.) '
553 |         'If not given, the formatter is guessed from the output filename, '
554 |         'and defaults to the terminal formatter if the output is to the '
555 |         'terminal or an unknown file extension.')
556 |     operation.add_argument(
557 |         '-O', metavar='OPTION=value[,OPTION=value,...]', action='append',
558 |         help='Give options to the lexer and formatter as a comma-separated '
559 |         'list of key-value pairs. '
560 |         'Example: `-O bg=light,python=cool`.')
561 |     operation.add_argument(
562 |         '-P', metavar='OPTION=value', action='append',
563 |         help='Give a single option to the lexer and formatter - with this '
564 |         'you can pass options whose value contains commas and equal signs. '
565 |         'Example: `-P "heading=Pygments, the Python highlighter"`.')
566 |     operation.add_argument(
567 |         '-o', metavar='OUTPUTFILE',
568 |         help='Where to write the output.  Defaults to standard output.')
569 | 
570 |     operation.add_argument(
571 |         'INPUTFILE', nargs='?',
572 |         help='Where to read the input.  Defaults to standard input.')
573 | 
574 |     flags = parser.add_argument_group('Operation flags')
575 |     flags.add_argument(
576 |         '-v', action='store_true',
577 |         help='Print a detailed traceback on unhandled exceptions, which '
578 |         'is useful for debugging and bug reports.')
579 |     flags.add_argument(
580 |         '-s', action='store_true',
581 |         help='Process lines one at a time until EOF, rather than waiting to '
582 |         'process the entire file.  This only works for stdin, only for lexers '
583 |         'with no line-spanning constructs, and is intended for streaming '
584 |         'input such as you get from `tail -f`. '
585 |         'Example usage: `tail -f sql.log | pygmentize -s -l sql`.')
586 |     flags.add_argument(
587 |         '-x', action='store_true',
588 |         help='Allow custom lexers and formatters to be loaded from a .py file '
589 |         'relative to the current working directory. For example, '
590 |         '`-l ./customlexer.py -x`. By default, this option expects a file '
591 |         'with a class named CustomLexer or CustomFormatter; you can also '
592 |         'specify your own class name with a colon (`-l ./lexer.py:MyLexer`). '
593 |         'Users should be very careful not to use this option with untrusted '
594 |         'files, because it will import and run them.')
595 |     flags.add_argument('--json', help='Output as JSON. This can '
596 |         'be only used in conjunction with -L.',
597 |         default=False,
598 |         action='store_true')
599 | 
600 |     special_modes_group = parser.add_argument_group(
601 |         'Special modes - do not do any highlighting')
602 |     special_modes = special_modes_group.add_mutually_exclusive_group()
603 |     special_modes.add_argument(
604 |         '-S', metavar='STYLE -f formatter',
605 |         help='Print style definitions for STYLE for a formatter '
606 |         'given with -f. The argument given by -a is formatter '
607 |         'dependent.')
608 |     special_modes.add_argument(
609 |         '-L', nargs='*', metavar='WHAT',
610 |         help='List lexers, formatters, styles or filters -- '
611 |         'give additional arguments for the thing(s) you want to list '
612 |         '(e.g. "styles"), or omit them to list everything.')
613 |     special_modes.add_argument(
614 |         '-N', metavar='FILENAME',
615 |         help='Guess and print out a lexer name based solely on the given '
616 |         'filename. Does not take input or highlight anything. If no specific '
617 |         'lexer can be determined, "text" is printed.')
618 |     special_modes.add_argument(
619 |         '-C', action='store_true',
620 |         help='Like -N, but print out a lexer name based solely on '
621 |         'a given content from standard input.')
622 |     special_modes.add_argument(
623 |         '-H', action='store', nargs=2, metavar=('NAME', 'TYPE'),
624 |         help='Print detailed help for the object <name> of type <type>, '
625 |         'where <type> is one of "lexer", "formatter" or "filter".')
626 |     special_modes.add_argument(
627 |         '-V', action='store_true',
628 |         help='Print the package version.')
629 |     special_modes.add_argument(
630 |         '-h', '--help', action='store_true',
631 |         help='Print this help.')
632 |     special_modes_group.add_argument(
633 |         '-a', metavar='ARG',
634 |         help='Formatter-specific additional argument for the -S (print '
635 |         'style sheet) mode.')
636 | 
637 |     argns = parser.parse_args(args[1:])
638 | 
639 |     try:
640 |         return main_inner(parser, argns)
641 |     except BrokenPipeError:
642 |         # someone closed our stdout, e.g. by quitting a pager.
643 |         return 0
644 |     except Exception:
645 |         if argns.v:
646 |             print(file=sys.stderr)
647 |             print('*' * 65, file=sys.stderr)
648 |             print('An unhandled exception occurred while highlighting.',
649 |                   file=sys.stderr)
650 |             print('Please report the whole traceback to the issue tracker at',
651 |                   file=sys.stderr)
652 |             print('<https://github.com/pygments/pygments/issues>.',
653 |                   file=sys.stderr)
654 |             print('*' * 65, file=sys.stderr)
655 |             print(file=sys.stderr)
656 |             raise
657 |         import traceback
658 |         info = traceback.format_exception(*sys.exc_info())
659 |         msg = info[-1].strip()
660 |         if len(info) >= 3:
661 |             # extract relevant file and position info
662 |             msg += '\n   (f{})'.format(info[-2].split('\n')[0].strip()[1:])
663 |         print(file=sys.stderr)
664 |         print('*** Error while highlighting:', file=sys.stderr)
665 |         print(msg, file=sys.stderr)
666 |         print('*** If this is a bug you want to report, please rerun with -v.',
667 |               file=sys.stderr)
668 |         return 1
669 | 
```
Page 78/168FirstPrevNextLast