#
tokens: 48818/50000 5/808 files (page 44/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 44 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/charset_normalizer/utils.py:
--------------------------------------------------------------------------------

```python
  1 | import importlib
  2 | import logging
  3 | import unicodedata
  4 | from codecs import IncrementalDecoder
  5 | from encodings.aliases import aliases
  6 | from functools import lru_cache
  7 | from re import findall
  8 | from typing import Generator, List, Optional, Set, Tuple, Union
  9 | 
 10 | from _multibytecodec import MultibyteIncrementalDecoder
 11 | 
 12 | from .constant import (
 13 |     ENCODING_MARKS,
 14 |     IANA_SUPPORTED_SIMILAR,
 15 |     RE_POSSIBLE_ENCODING_INDICATION,
 16 |     UNICODE_RANGES_COMBINED,
 17 |     UNICODE_SECONDARY_RANGE_KEYWORD,
 18 |     UTF8_MAXIMAL_ALLOCATION,
 19 | )
 20 | 
 21 | 
 22 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 23 | def is_accentuated(character: str) -> bool:
 24 |     try:
 25 |         description: str = unicodedata.name(character)
 26 |     except ValueError:
 27 |         return False
 28 |     return (
 29 |         "WITH GRAVE" in description
 30 |         or "WITH ACUTE" in description
 31 |         or "WITH CEDILLA" in description
 32 |         or "WITH DIAERESIS" in description
 33 |         or "WITH CIRCUMFLEX" in description
 34 |         or "WITH TILDE" in description
 35 |         or "WITH MACRON" in description
 36 |         or "WITH RING ABOVE" in description
 37 |     )
 38 | 
 39 | 
 40 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 41 | def remove_accent(character: str) -> str:
 42 |     decomposed: str = unicodedata.decomposition(character)
 43 |     if not decomposed:
 44 |         return character
 45 | 
 46 |     codes: List[str] = decomposed.split(" ")
 47 | 
 48 |     return chr(int(codes[0], 16))
 49 | 
 50 | 
 51 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 52 | def unicode_range(character: str) -> Optional[str]:
 53 |     """
 54 |     Retrieve the Unicode range official name from a single character.
 55 |     """
 56 |     character_ord: int = ord(character)
 57 | 
 58 |     for range_name, ord_range in UNICODE_RANGES_COMBINED.items():
 59 |         if character_ord in ord_range:
 60 |             return range_name
 61 | 
 62 |     return None
 63 | 
 64 | 
 65 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 66 | def is_latin(character: str) -> bool:
 67 |     try:
 68 |         description: str = unicodedata.name(character)
 69 |     except ValueError:
 70 |         return False
 71 |     return "LATIN" in description
 72 | 
 73 | 
 74 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 75 | def is_punctuation(character: str) -> bool:
 76 |     character_category: str = unicodedata.category(character)
 77 | 
 78 |     if "P" in character_category:
 79 |         return True
 80 | 
 81 |     character_range: Optional[str] = unicode_range(character)
 82 | 
 83 |     if character_range is None:
 84 |         return False
 85 | 
 86 |     return "Punctuation" in character_range
 87 | 
 88 | 
 89 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
 90 | def is_symbol(character: str) -> bool:
 91 |     character_category: str = unicodedata.category(character)
 92 | 
 93 |     if "S" in character_category or "N" in character_category:
 94 |         return True
 95 | 
 96 |     character_range: Optional[str] = unicode_range(character)
 97 | 
 98 |     if character_range is None:
 99 |         return False
100 | 
101 |     return "Forms" in character_range and character_category != "Lo"
102 | 
103 | 
104 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
105 | def is_emoticon(character: str) -> bool:
106 |     character_range: Optional[str] = unicode_range(character)
107 | 
108 |     if character_range is None:
109 |         return False
110 | 
111 |     return "Emoticons" in character_range or "Pictographs" in character_range
112 | 
113 | 
114 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
115 | def is_separator(character: str) -> bool:
116 |     if character.isspace() or character in {"|", "+", "<", ">"}:
117 |         return True
118 | 
119 |     character_category: str = unicodedata.category(character)
120 | 
121 |     return "Z" in character_category or character_category in {"Po", "Pd", "Pc"}
122 | 
123 | 
124 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
125 | def is_case_variable(character: str) -> bool:
126 |     return character.islower() != character.isupper()
127 | 
128 | 
129 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
130 | def is_cjk(character: str) -> bool:
131 |     try:
132 |         character_name = unicodedata.name(character)
133 |     except ValueError:
134 |         return False
135 | 
136 |     return "CJK" in character_name
137 | 
138 | 
139 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
140 | def is_hiragana(character: str) -> bool:
141 |     try:
142 |         character_name = unicodedata.name(character)
143 |     except ValueError:
144 |         return False
145 | 
146 |     return "HIRAGANA" in character_name
147 | 
148 | 
149 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
150 | def is_katakana(character: str) -> bool:
151 |     try:
152 |         character_name = unicodedata.name(character)
153 |     except ValueError:
154 |         return False
155 | 
156 |     return "KATAKANA" in character_name
157 | 
158 | 
159 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
160 | def is_hangul(character: str) -> bool:
161 |     try:
162 |         character_name = unicodedata.name(character)
163 |     except ValueError:
164 |         return False
165 | 
166 |     return "HANGUL" in character_name
167 | 
168 | 
169 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
170 | def is_thai(character: str) -> bool:
171 |     try:
172 |         character_name = unicodedata.name(character)
173 |     except ValueError:
174 |         return False
175 | 
176 |     return "THAI" in character_name
177 | 
178 | 
179 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
180 | def is_arabic(character: str) -> bool:
181 |     try:
182 |         character_name = unicodedata.name(character)
183 |     except ValueError:
184 |         return False
185 | 
186 |     return "ARABIC" in character_name
187 | 
188 | 
189 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
190 | def is_arabic_isolated_form(character: str) -> bool:
191 |     try:
192 |         character_name = unicodedata.name(character)
193 |     except ValueError:
194 |         return False
195 | 
196 |     return "ARABIC" in character_name and "ISOLATED FORM" in character_name
197 | 
198 | 
199 | @lru_cache(maxsize=len(UNICODE_RANGES_COMBINED))
200 | def is_unicode_range_secondary(range_name: str) -> bool:
201 |     return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD)
202 | 
203 | 
204 | @lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
205 | def is_unprintable(character: str) -> bool:
206 |     return (
207 |         character.isspace() is False  # includes \n \t \r \v
208 |         and character.isprintable() is False
209 |         and character != "\x1A"  # Why? Its the ASCII substitute character.
210 |         and character != "\ufeff"  # bug discovered in Python,
211 |         # Zero Width No-Break Space located in 	Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space.
212 |     )
213 | 
214 | 
215 | def any_specified_encoding(sequence: bytes, search_zone: int = 8192) -> Optional[str]:
216 |     """
217 |     Extract using ASCII-only decoder any specified encoding in the first n-bytes.
218 |     """
219 |     if not isinstance(sequence, bytes):
220 |         raise TypeError
221 | 
222 |     seq_len: int = len(sequence)
223 | 
224 |     results: List[str] = findall(
225 |         RE_POSSIBLE_ENCODING_INDICATION,
226 |         sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"),
227 |     )
228 | 
229 |     if len(results) == 0:
230 |         return None
231 | 
232 |     for specified_encoding in results:
233 |         specified_encoding = specified_encoding.lower().replace("-", "_")
234 | 
235 |         encoding_alias: str
236 |         encoding_iana: str
237 | 
238 |         for encoding_alias, encoding_iana in aliases.items():
239 |             if encoding_alias == specified_encoding:
240 |                 return encoding_iana
241 |             if encoding_iana == specified_encoding:
242 |                 return encoding_iana
243 | 
244 |     return None
245 | 
246 | 
247 | @lru_cache(maxsize=128)
248 | def is_multi_byte_encoding(name: str) -> bool:
249 |     """
250 |     Verify is a specific encoding is a multi byte one based on it IANA name
251 |     """
252 |     return name in {
253 |         "utf_8",
254 |         "utf_8_sig",
255 |         "utf_16",
256 |         "utf_16_be",
257 |         "utf_16_le",
258 |         "utf_32",
259 |         "utf_32_le",
260 |         "utf_32_be",
261 |         "utf_7",
262 |     } or issubclass(
263 |         importlib.import_module("encodings.{}".format(name)).IncrementalDecoder,
264 |         MultibyteIncrementalDecoder,
265 |     )
266 | 
267 | 
268 | def identify_sig_or_bom(sequence: bytes) -> Tuple[Optional[str], bytes]:
269 |     """
270 |     Identify and extract SIG/BOM in given sequence.
271 |     """
272 | 
273 |     for iana_encoding in ENCODING_MARKS:
274 |         marks: Union[bytes, List[bytes]] = ENCODING_MARKS[iana_encoding]
275 | 
276 |         if isinstance(marks, bytes):
277 |             marks = [marks]
278 | 
279 |         for mark in marks:
280 |             if sequence.startswith(mark):
281 |                 return iana_encoding, mark
282 | 
283 |     return None, b""
284 | 
285 | 
286 | def should_strip_sig_or_bom(iana_encoding: str) -> bool:
287 |     return iana_encoding not in {"utf_16", "utf_32"}
288 | 
289 | 
290 | def iana_name(cp_name: str, strict: bool = True) -> str:
291 |     cp_name = cp_name.lower().replace("-", "_")
292 | 
293 |     encoding_alias: str
294 |     encoding_iana: str
295 | 
296 |     for encoding_alias, encoding_iana in aliases.items():
297 |         if cp_name in [encoding_alias, encoding_iana]:
298 |             return encoding_iana
299 | 
300 |     if strict:
301 |         raise ValueError("Unable to retrieve IANA for '{}'".format(cp_name))
302 | 
303 |     return cp_name
304 | 
305 | 
306 | def range_scan(decoded_sequence: str) -> List[str]:
307 |     ranges: Set[str] = set()
308 | 
309 |     for character in decoded_sequence:
310 |         character_range: Optional[str] = unicode_range(character)
311 | 
312 |         if character_range is None:
313 |             continue
314 | 
315 |         ranges.add(character_range)
316 | 
317 |     return list(ranges)
318 | 
319 | 
320 | def cp_similarity(iana_name_a: str, iana_name_b: str) -> float:
321 |     if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b):
322 |         return 0.0
323 | 
324 |     decoder_a = importlib.import_module(
325 |         "encodings.{}".format(iana_name_a)
326 |     ).IncrementalDecoder
327 |     decoder_b = importlib.import_module(
328 |         "encodings.{}".format(iana_name_b)
329 |     ).IncrementalDecoder
330 | 
331 |     id_a: IncrementalDecoder = decoder_a(errors="ignore")
332 |     id_b: IncrementalDecoder = decoder_b(errors="ignore")
333 | 
334 |     character_match_count: int = 0
335 | 
336 |     for i in range(255):
337 |         to_be_decoded: bytes = bytes([i])
338 |         if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded):
339 |             character_match_count += 1
340 | 
341 |     return character_match_count / 254
342 | 
343 | 
344 | def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool:
345 |     """
346 |     Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using
347 |     the function cp_similarity.
348 |     """
349 |     return (
350 |         iana_name_a in IANA_SUPPORTED_SIMILAR
351 |         and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a]
352 |     )
353 | 
354 | 
355 | def set_logging_handler(
356 |     name: str = "charset_normalizer",
357 |     level: int = logging.INFO,
358 |     format_string: str = "%(asctime)s | %(levelname)s | %(message)s",
359 | ) -> None:
360 |     logger = logging.getLogger(name)
361 |     logger.setLevel(level)
362 | 
363 |     handler = logging.StreamHandler()
364 |     handler.setFormatter(logging.Formatter(format_string))
365 |     logger.addHandler(handler)
366 | 
367 | 
368 | def cut_sequence_chunks(
369 |     sequences: bytes,
370 |     encoding_iana: str,
371 |     offsets: range,
372 |     chunk_size: int,
373 |     bom_or_sig_available: bool,
374 |     strip_sig_or_bom: bool,
375 |     sig_payload: bytes,
376 |     is_multi_byte_decoder: bool,
377 |     decoded_payload: Optional[str] = None,
378 | ) -> Generator[str, None, None]:
379 |     if decoded_payload and is_multi_byte_decoder is False:
380 |         for i in offsets:
381 |             chunk = decoded_payload[i : i + chunk_size]
382 |             if not chunk:
383 |                 break
384 |             yield chunk
385 |     else:
386 |         for i in offsets:
387 |             chunk_end = i + chunk_size
388 |             if chunk_end > len(sequences) + 8:
389 |                 continue
390 | 
391 |             cut_sequence = sequences[i : i + chunk_size]
392 | 
393 |             if bom_or_sig_available and strip_sig_or_bom is False:
394 |                 cut_sequence = sig_payload + cut_sequence
395 | 
396 |             chunk = cut_sequence.decode(
397 |                 encoding_iana,
398 |                 errors="ignore" if is_multi_byte_decoder else "strict",
399 |             )
400 | 
401 |             # multi-byte bad cutting detector and adjustment
402 |             # not the cleanest way to perform that fix but clever enough for now.
403 |             if is_multi_byte_decoder and i > 0:
404 |                 chunk_partial_size_chk: int = min(chunk_size, 16)
405 | 
406 |                 if (
407 |                     decoded_payload
408 |                     and chunk[:chunk_partial_size_chk] not in decoded_payload
409 |                 ):
410 |                     for j in range(i, i - 4, -1):
411 |                         cut_sequence = sequences[j:chunk_end]
412 | 
413 |                         if bom_or_sig_available and strip_sig_or_bom is False:
414 |                             cut_sequence = sig_payload + cut_sequence
415 | 
416 |                         chunk = cut_sequence.decode(encoding_iana, errors="ignore")
417 | 
418 |                         if chunk[:chunk_partial_size_chk] in decoded_payload:
419 |                             break
420 | 
421 |             yield chunk
422 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | from datetime import datetime
  3 | from logging import Handler, LogRecord
  4 | from pathlib import Path
  5 | from types import ModuleType
  6 | from typing import ClassVar, Iterable, List, Optional, Type, Union
  7 | 
  8 | from pip._vendor.rich._null_file import NullFile
  9 | 
 10 | from . import get_console
 11 | from ._log_render import FormatTimeCallable, LogRender
 12 | from .console import Console, ConsoleRenderable
 13 | from .highlighter import Highlighter, ReprHighlighter
 14 | from .text import Text
 15 | from .traceback import Traceback
 16 | 
 17 | 
 18 | class RichHandler(Handler):
 19 |     """A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.
 20 |     The level is color coded, and the message is syntax highlighted.
 21 | 
 22 |     Note:
 23 |         Be careful when enabling console markup in log messages if you have configured logging for libraries not
 24 |         under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.
 25 | 
 26 |     Args:
 27 |         level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.
 28 |         console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.
 29 |             Default will use a global console instance writing to stdout.
 30 |         show_time (bool, optional): Show a column for the time. Defaults to True.
 31 |         omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.
 32 |         show_level (bool, optional): Show a column for the level. Defaults to True.
 33 |         show_path (bool, optional): Show the path to the original log call. Defaults to True.
 34 |         enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.
 35 |         highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.
 36 |         markup (bool, optional): Enable console markup in log messages. Defaults to False.
 37 |         rich_tracebacks (bool, optional): Enable rich tracebacks with syntax highlighting and formatting. Defaults to False.
 38 |         tracebacks_width (Optional[int], optional): Number of characters used to render tracebacks, or None for full width. Defaults to None.
 39 |         tracebacks_extra_lines (int, optional): Additional lines of code to render tracebacks, or None for full width. Defaults to None.
 40 |         tracebacks_theme (str, optional): Override pygments theme used in traceback.
 41 |         tracebacks_word_wrap (bool, optional): Enable word wrapping of long tracebacks lines. Defaults to True.
 42 |         tracebacks_show_locals (bool, optional): Enable display of locals in tracebacks. Defaults to False.
 43 |         tracebacks_suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback.
 44 |         locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
 45 |             Defaults to 10.
 46 |         locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
 47 |         log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%x %X] ".
 48 |         keywords (List[str], optional): List of words to highlight instead of ``RichHandler.KEYWORDS``.
 49 |     """
 50 | 
 51 |     KEYWORDS: ClassVar[Optional[List[str]]] = [
 52 |         "GET",
 53 |         "POST",
 54 |         "HEAD",
 55 |         "PUT",
 56 |         "DELETE",
 57 |         "OPTIONS",
 58 |         "TRACE",
 59 |         "PATCH",
 60 |     ]
 61 |     HIGHLIGHTER_CLASS: ClassVar[Type[Highlighter]] = ReprHighlighter
 62 | 
 63 |     def __init__(
 64 |         self,
 65 |         level: Union[int, str] = logging.NOTSET,
 66 |         console: Optional[Console] = None,
 67 |         *,
 68 |         show_time: bool = True,
 69 |         omit_repeated_times: bool = True,
 70 |         show_level: bool = True,
 71 |         show_path: bool = True,
 72 |         enable_link_path: bool = True,
 73 |         highlighter: Optional[Highlighter] = None,
 74 |         markup: bool = False,
 75 |         rich_tracebacks: bool = False,
 76 |         tracebacks_width: Optional[int] = None,
 77 |         tracebacks_extra_lines: int = 3,
 78 |         tracebacks_theme: Optional[str] = None,
 79 |         tracebacks_word_wrap: bool = True,
 80 |         tracebacks_show_locals: bool = False,
 81 |         tracebacks_suppress: Iterable[Union[str, ModuleType]] = (),
 82 |         locals_max_length: int = 10,
 83 |         locals_max_string: int = 80,
 84 |         log_time_format: Union[str, FormatTimeCallable] = "[%x %X]",
 85 |         keywords: Optional[List[str]] = None,
 86 |     ) -> None:
 87 |         super().__init__(level=level)
 88 |         self.console = console or get_console()
 89 |         self.highlighter = highlighter or self.HIGHLIGHTER_CLASS()
 90 |         self._log_render = LogRender(
 91 |             show_time=show_time,
 92 |             show_level=show_level,
 93 |             show_path=show_path,
 94 |             time_format=log_time_format,
 95 |             omit_repeated_times=omit_repeated_times,
 96 |             level_width=None,
 97 |         )
 98 |         self.enable_link_path = enable_link_path
 99 |         self.markup = markup
100 |         self.rich_tracebacks = rich_tracebacks
101 |         self.tracebacks_width = tracebacks_width
102 |         self.tracebacks_extra_lines = tracebacks_extra_lines
103 |         self.tracebacks_theme = tracebacks_theme
104 |         self.tracebacks_word_wrap = tracebacks_word_wrap
105 |         self.tracebacks_show_locals = tracebacks_show_locals
106 |         self.tracebacks_suppress = tracebacks_suppress
107 |         self.locals_max_length = locals_max_length
108 |         self.locals_max_string = locals_max_string
109 |         self.keywords = keywords
110 | 
111 |     def get_level_text(self, record: LogRecord) -> Text:
112 |         """Get the level name from the record.
113 | 
114 |         Args:
115 |             record (LogRecord): LogRecord instance.
116 | 
117 |         Returns:
118 |             Text: A tuple of the style and level name.
119 |         """
120 |         level_name = record.levelname
121 |         level_text = Text.styled(
122 |             level_name.ljust(8), f"logging.level.{level_name.lower()}"
123 |         )
124 |         return level_text
125 | 
126 |     def emit(self, record: LogRecord) -> None:
127 |         """Invoked by logging."""
128 |         message = self.format(record)
129 |         traceback = None
130 |         if (
131 |             self.rich_tracebacks
132 |             and record.exc_info
133 |             and record.exc_info != (None, None, None)
134 |         ):
135 |             exc_type, exc_value, exc_traceback = record.exc_info
136 |             assert exc_type is not None
137 |             assert exc_value is not None
138 |             traceback = Traceback.from_exception(
139 |                 exc_type,
140 |                 exc_value,
141 |                 exc_traceback,
142 |                 width=self.tracebacks_width,
143 |                 extra_lines=self.tracebacks_extra_lines,
144 |                 theme=self.tracebacks_theme,
145 |                 word_wrap=self.tracebacks_word_wrap,
146 |                 show_locals=self.tracebacks_show_locals,
147 |                 locals_max_length=self.locals_max_length,
148 |                 locals_max_string=self.locals_max_string,
149 |                 suppress=self.tracebacks_suppress,
150 |             )
151 |             message = record.getMessage()
152 |             if self.formatter:
153 |                 record.message = record.getMessage()
154 |                 formatter = self.formatter
155 |                 if hasattr(formatter, "usesTime") and formatter.usesTime():
156 |                     record.asctime = formatter.formatTime(record, formatter.datefmt)
157 |                 message = formatter.formatMessage(record)
158 | 
159 |         message_renderable = self.render_message(record, message)
160 |         log_renderable = self.render(
161 |             record=record, traceback=traceback, message_renderable=message_renderable
162 |         )
163 |         if isinstance(self.console.file, NullFile):
164 |             # Handles pythonw, where stdout/stderr are null, and we return NullFile
165 |             # instance from Console.file. In this case, we still want to make a log record
166 |             # even though we won't be writing anything to a file.
167 |             self.handleError(record)
168 |         else:
169 |             try:
170 |                 self.console.print(log_renderable)
171 |             except Exception:
172 |                 self.handleError(record)
173 | 
174 |     def render_message(self, record: LogRecord, message: str) -> "ConsoleRenderable":
175 |         """Render message text in to Text.
176 | 
177 |         Args:
178 |             record (LogRecord): logging Record.
179 |             message (str): String containing log message.
180 | 
181 |         Returns:
182 |             ConsoleRenderable: Renderable to display log message.
183 |         """
184 |         use_markup = getattr(record, "markup", self.markup)
185 |         message_text = Text.from_markup(message) if use_markup else Text(message)
186 | 
187 |         highlighter = getattr(record, "highlighter", self.highlighter)
188 |         if highlighter:
189 |             message_text = highlighter(message_text)
190 | 
191 |         if self.keywords is None:
192 |             self.keywords = self.KEYWORDS
193 | 
194 |         if self.keywords:
195 |             message_text.highlight_words(self.keywords, "logging.keyword")
196 | 
197 |         return message_text
198 | 
199 |     def render(
200 |         self,
201 |         *,
202 |         record: LogRecord,
203 |         traceback: Optional[Traceback],
204 |         message_renderable: "ConsoleRenderable",
205 |     ) -> "ConsoleRenderable":
206 |         """Render log for display.
207 | 
208 |         Args:
209 |             record (LogRecord): logging Record.
210 |             traceback (Optional[Traceback]): Traceback instance or None for no Traceback.
211 |             message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.
212 | 
213 |         Returns:
214 |             ConsoleRenderable: Renderable to display log.
215 |         """
216 |         path = Path(record.pathname).name
217 |         level = self.get_level_text(record)
218 |         time_format = None if self.formatter is None else self.formatter.datefmt
219 |         log_time = datetime.fromtimestamp(record.created)
220 | 
221 |         log_renderable = self._log_render(
222 |             self.console,
223 |             [message_renderable] if not traceback else [message_renderable, traceback],
224 |             log_time=log_time,
225 |             time_format=time_format,
226 |             level=level,
227 |             path=path,
228 |             line_no=record.lineno,
229 |             link_path=record.pathname if self.enable_link_path else None,
230 |         )
231 |         return log_renderable
232 | 
233 | 
234 | if __name__ == "__main__":  # pragma: no cover
235 |     from time import sleep
236 | 
237 |     FORMAT = "%(message)s"
238 |     # FORMAT = "%(asctime)-15s - %(levelname)s - %(message)s"
239 |     logging.basicConfig(
240 |         level="NOTSET",
241 |         format=FORMAT,
242 |         datefmt="[%X]",
243 |         handlers=[RichHandler(rich_tracebacks=True, tracebacks_show_locals=True)],
244 |     )
245 |     log = logging.getLogger("rich")
246 | 
247 |     log.info("Server starting...")
248 |     log.info("Listening on http://127.0.0.1:8080")
249 |     sleep(1)
250 | 
251 |     log.info("GET /index.html 200 1298")
252 |     log.info("GET /imgs/backgrounds/back1.jpg 200 54386")
253 |     log.info("GET /css/styles.css 200 54386")
254 |     log.warning("GET /favicon.ico 404 242")
255 |     sleep(1)
256 | 
257 |     log.debug(
258 |         "JSONRPC request\n--> %r\n<-- %r",
259 |         {
260 |             "version": "1.1",
261 |             "method": "confirmFruitPurchase",
262 |             "params": [["apple", "orange", "mangoes", "pomelo"], 1.123],
263 |             "id": "194521489",
264 |         },
265 |         {"version": "1.1", "result": True, "error": None, "id": "194521489"},
266 |     )
267 |     log.debug(
268 |         "Loading configuration file /adasd/asdasd/qeqwe/qwrqwrqwr/sdgsdgsdg/werwerwer/dfgerert/ertertert/ertetert/werwerwer"
269 |     )
270 |     log.error("Unable to find 'pomelo' in database!")
271 |     log.info("POST /jsonrpc/ 200 65532")
272 |     log.info("POST /admin/ 401 42234")
273 |     log.warning("password was rejected for admin site.")
274 | 
275 |     def divide() -> None:
276 |         number = 1
277 |         divisor = 0
278 |         foos = ["foo"] * 100
279 |         log.debug("in divide")
280 |         try:
281 |             number / divisor
282 |         except:
283 |             log.exception("An error of some kind occurred!")
284 | 
285 |     divide()
286 |     sleep(1)
287 |     log.critical("Out of memory!")
288 |     log.info("Server exited with code=-1")
289 |     log.info("[bold]EXITING...[/bold]", extra=dict(markup=True))
290 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py:
--------------------------------------------------------------------------------

```python
  1 | import json
  2 | import os
  3 | import sys
  4 | import tempfile
  5 | from contextlib import contextmanager
  6 | from os.path import abspath
  7 | from os.path import join as pjoin
  8 | from subprocess import STDOUT, check_call, check_output
  9 | 
 10 | from ._in_process import _in_proc_script_path
 11 | 
 12 | 
 13 | def write_json(obj, path, **kwargs):
 14 |     with open(path, 'w', encoding='utf-8') as f:
 15 |         json.dump(obj, f, **kwargs)
 16 | 
 17 | 
 18 | def read_json(path):
 19 |     with open(path, encoding='utf-8') as f:
 20 |         return json.load(f)
 21 | 
 22 | 
 23 | class BackendUnavailable(Exception):
 24 |     """Will be raised if the backend cannot be imported in the hook process."""
 25 |     def __init__(self, traceback):
 26 |         self.traceback = traceback
 27 | 
 28 | 
 29 | class BackendInvalid(Exception):
 30 |     """Will be raised if the backend is invalid."""
 31 |     def __init__(self, backend_name, backend_path, message):
 32 |         super().__init__(message)
 33 |         self.backend_name = backend_name
 34 |         self.backend_path = backend_path
 35 | 
 36 | 
 37 | class HookMissing(Exception):
 38 |     """Will be raised on missing hooks (if a fallback can't be used)."""
 39 |     def __init__(self, hook_name):
 40 |         super().__init__(hook_name)
 41 |         self.hook_name = hook_name
 42 | 
 43 | 
 44 | class UnsupportedOperation(Exception):
 45 |     """May be raised by build_sdist if the backend indicates that it can't."""
 46 |     def __init__(self, traceback):
 47 |         self.traceback = traceback
 48 | 
 49 | 
 50 | def default_subprocess_runner(cmd, cwd=None, extra_environ=None):
 51 |     """The default method of calling the wrapper subprocess.
 52 | 
 53 |     This uses :func:`subprocess.check_call` under the hood.
 54 |     """
 55 |     env = os.environ.copy()
 56 |     if extra_environ:
 57 |         env.update(extra_environ)
 58 | 
 59 |     check_call(cmd, cwd=cwd, env=env)
 60 | 
 61 | 
 62 | def quiet_subprocess_runner(cmd, cwd=None, extra_environ=None):
 63 |     """Call the subprocess while suppressing output.
 64 | 
 65 |     This uses :func:`subprocess.check_output` under the hood.
 66 |     """
 67 |     env = os.environ.copy()
 68 |     if extra_environ:
 69 |         env.update(extra_environ)
 70 | 
 71 |     check_output(cmd, cwd=cwd, env=env, stderr=STDOUT)
 72 | 
 73 | 
 74 | def norm_and_check(source_tree, requested):
 75 |     """Normalise and check a backend path.
 76 | 
 77 |     Ensure that the requested backend path is specified as a relative path,
 78 |     and resolves to a location under the given source tree.
 79 | 
 80 |     Return an absolute version of the requested path.
 81 |     """
 82 |     if os.path.isabs(requested):
 83 |         raise ValueError("paths must be relative")
 84 | 
 85 |     abs_source = os.path.abspath(source_tree)
 86 |     abs_requested = os.path.normpath(os.path.join(abs_source, requested))
 87 |     # We have to use commonprefix for Python 2.7 compatibility. So we
 88 |     # normalise case to avoid problems because commonprefix is a character
 89 |     # based comparison :-(
 90 |     norm_source = os.path.normcase(abs_source)
 91 |     norm_requested = os.path.normcase(abs_requested)
 92 |     if os.path.commonprefix([norm_source, norm_requested]) != norm_source:
 93 |         raise ValueError("paths must be inside source tree")
 94 | 
 95 |     return abs_requested
 96 | 
 97 | 
 98 | class BuildBackendHookCaller:
 99 |     """A wrapper to call the build backend hooks for a source directory.
100 |     """
101 | 
102 |     def __init__(
103 |             self,
104 |             source_dir,
105 |             build_backend,
106 |             backend_path=None,
107 |             runner=None,
108 |             python_executable=None,
109 |     ):
110 |         """
111 |         :param source_dir: The source directory to invoke the build backend for
112 |         :param build_backend: The build backend spec
113 |         :param backend_path: Additional path entries for the build backend spec
114 |         :param runner: The :ref:`subprocess runner <Subprocess Runners>` to use
115 |         :param python_executable:
116 |             The Python executable used to invoke the build backend
117 |         """
118 |         if runner is None:
119 |             runner = default_subprocess_runner
120 | 
121 |         self.source_dir = abspath(source_dir)
122 |         self.build_backend = build_backend
123 |         if backend_path:
124 |             backend_path = [
125 |                 norm_and_check(self.source_dir, p) for p in backend_path
126 |             ]
127 |         self.backend_path = backend_path
128 |         self._subprocess_runner = runner
129 |         if not python_executable:
130 |             python_executable = sys.executable
131 |         self.python_executable = python_executable
132 | 
133 |     @contextmanager
134 |     def subprocess_runner(self, runner):
135 |         """A context manager for temporarily overriding the default
136 |         :ref:`subprocess runner <Subprocess Runners>`.
137 | 
138 |         .. code-block:: python
139 | 
140 |             hook_caller = BuildBackendHookCaller(...)
141 |             with hook_caller.subprocess_runner(quiet_subprocess_runner):
142 |                 ...
143 |         """
144 |         prev = self._subprocess_runner
145 |         self._subprocess_runner = runner
146 |         try:
147 |             yield
148 |         finally:
149 |             self._subprocess_runner = prev
150 | 
151 |     def _supported_features(self):
152 |         """Return the list of optional features supported by the backend."""
153 |         return self._call_hook('_supported_features', {})
154 | 
155 |     def get_requires_for_build_wheel(self, config_settings=None):
156 |         """Get additional dependencies required for building a wheel.
157 | 
158 |         :returns: A list of :pep:`dependency specifiers <508>`.
159 |         :rtype: list[str]
160 | 
161 |         .. admonition:: Fallback
162 | 
163 |             If the build backend does not defined a hook with this name, an
164 |             empty list will be returned.
165 |         """
166 |         return self._call_hook('get_requires_for_build_wheel', {
167 |             'config_settings': config_settings
168 |         })
169 | 
170 |     def prepare_metadata_for_build_wheel(
171 |             self, metadata_directory, config_settings=None,
172 |             _allow_fallback=True):
173 |         """Prepare a ``*.dist-info`` folder with metadata for this project.
174 | 
175 |         :returns: Name of the newly created subfolder within
176 |                   ``metadata_directory``, containing the metadata.
177 |         :rtype: str
178 | 
179 |         .. admonition:: Fallback
180 | 
181 |             If the build backend does not define a hook with this name and
182 |             ``_allow_fallback`` is truthy, the backend will be asked to build a
183 |             wheel via the ``build_wheel`` hook and the dist-info extracted from
184 |             that will be returned.
185 |         """
186 |         return self._call_hook('prepare_metadata_for_build_wheel', {
187 |             'metadata_directory': abspath(metadata_directory),
188 |             'config_settings': config_settings,
189 |             '_allow_fallback': _allow_fallback,
190 |         })
191 | 
192 |     def build_wheel(
193 |             self, wheel_directory, config_settings=None,
194 |             metadata_directory=None):
195 |         """Build a wheel from this project.
196 | 
197 |         :returns:
198 |             The name of the newly created wheel within ``wheel_directory``.
199 | 
200 |         .. admonition:: Interaction with fallback
201 | 
202 |             If the ``build_wheel`` hook was called in the fallback for
203 |             :meth:`prepare_metadata_for_build_wheel`, the build backend would
204 |             not be invoked. Instead, the previously built wheel will be copied
205 |             to ``wheel_directory`` and the name of that file will be returned.
206 |         """
207 |         if metadata_directory is not None:
208 |             metadata_directory = abspath(metadata_directory)
209 |         return self._call_hook('build_wheel', {
210 |             'wheel_directory': abspath(wheel_directory),
211 |             'config_settings': config_settings,
212 |             'metadata_directory': metadata_directory,
213 |         })
214 | 
215 |     def get_requires_for_build_editable(self, config_settings=None):
216 |         """Get additional dependencies required for building an editable wheel.
217 | 
218 |         :returns: A list of :pep:`dependency specifiers <508>`.
219 |         :rtype: list[str]
220 | 
221 |         .. admonition:: Fallback
222 | 
223 |             If the build backend does not defined a hook with this name, an
224 |             empty list will be returned.
225 |         """
226 |         return self._call_hook('get_requires_for_build_editable', {
227 |             'config_settings': config_settings
228 |         })
229 | 
230 |     def prepare_metadata_for_build_editable(
231 |             self, metadata_directory, config_settings=None,
232 |             _allow_fallback=True):
233 |         """Prepare a ``*.dist-info`` folder with metadata for this project.
234 | 
235 |         :returns: Name of the newly created subfolder within
236 |                   ``metadata_directory``, containing the metadata.
237 |         :rtype: str
238 | 
239 |         .. admonition:: Fallback
240 | 
241 |             If the build backend does not define a hook with this name and
242 |             ``_allow_fallback`` is truthy, the backend will be asked to build a
243 |             wheel via the ``build_editable`` hook and the dist-info
244 |             extracted from that will be returned.
245 |         """
246 |         return self._call_hook('prepare_metadata_for_build_editable', {
247 |             'metadata_directory': abspath(metadata_directory),
248 |             'config_settings': config_settings,
249 |             '_allow_fallback': _allow_fallback,
250 |         })
251 | 
252 |     def build_editable(
253 |             self, wheel_directory, config_settings=None,
254 |             metadata_directory=None):
255 |         """Build an editable wheel from this project.
256 | 
257 |         :returns:
258 |             The name of the newly created wheel within ``wheel_directory``.
259 | 
260 |         .. admonition:: Interaction with fallback
261 | 
262 |             If the ``build_editable`` hook was called in the fallback for
263 |             :meth:`prepare_metadata_for_build_editable`, the build backend
264 |             would not be invoked. Instead, the previously built wheel will be
265 |             copied to ``wheel_directory`` and the name of that file will be
266 |             returned.
267 |         """
268 |         if metadata_directory is not None:
269 |             metadata_directory = abspath(metadata_directory)
270 |         return self._call_hook('build_editable', {
271 |             'wheel_directory': abspath(wheel_directory),
272 |             'config_settings': config_settings,
273 |             'metadata_directory': metadata_directory,
274 |         })
275 | 
276 |     def get_requires_for_build_sdist(self, config_settings=None):
277 |         """Get additional dependencies required for building an sdist.
278 | 
279 |         :returns: A list of :pep:`dependency specifiers <508>`.
280 |         :rtype: list[str]
281 |         """
282 |         return self._call_hook('get_requires_for_build_sdist', {
283 |             'config_settings': config_settings
284 |         })
285 | 
286 |     def build_sdist(self, sdist_directory, config_settings=None):
287 |         """Build an sdist from this project.
288 | 
289 |         :returns:
290 |             The name of the newly created sdist within ``wheel_directory``.
291 |         """
292 |         return self._call_hook('build_sdist', {
293 |             'sdist_directory': abspath(sdist_directory),
294 |             'config_settings': config_settings,
295 |         })
296 | 
297 |     def _call_hook(self, hook_name, kwargs):
298 |         extra_environ = {'PEP517_BUILD_BACKEND': self.build_backend}
299 | 
300 |         if self.backend_path:
301 |             backend_path = os.pathsep.join(self.backend_path)
302 |             extra_environ['PEP517_BACKEND_PATH'] = backend_path
303 | 
304 |         with tempfile.TemporaryDirectory() as td:
305 |             hook_input = {'kwargs': kwargs}
306 |             write_json(hook_input, pjoin(td, 'input.json'), indent=2)
307 | 
308 |             # Run the hook in a subprocess
309 |             with _in_proc_script_path() as script:
310 |                 python = self.python_executable
311 |                 self._subprocess_runner(
312 |                     [python, abspath(str(script)), hook_name, td],
313 |                     cwd=self.source_dir,
314 |                     extra_environ=extra_environ
315 |                 )
316 | 
317 |             data = read_json(pjoin(td, 'output.json'))
318 |             if data.get('unsupported'):
319 |                 raise UnsupportedOperation(data.get('traceback', ''))
320 |             if data.get('no_backend'):
321 |                 raise BackendUnavailable(data.get('traceback', ''))
322 |             if data.get('backend_invalid'):
323 |                 raise BackendInvalid(
324 |                     backend_name=self.build_backend,
325 |                     backend_path=self.backend_path,
326 |                     message=data.get('backend_error', '')
327 |                 )
328 |             if data.get('hook_missing'):
329 |                 raise HookMissing(data.get('missing_hook_name') or hook_name)
330 |             return data['return_val']
331 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py:
--------------------------------------------------------------------------------

```python
  1 | """Utilities related archives.
  2 | """
  3 | 
  4 | import logging
  5 | import os
  6 | import shutil
  7 | import stat
  8 | import sys
  9 | import tarfile
 10 | import zipfile
 11 | from typing import Iterable, List, Optional
 12 | from zipfile import ZipInfo
 13 | 
 14 | from pip._internal.exceptions import InstallationError
 15 | from pip._internal.utils.filetypes import (
 16 |     BZ2_EXTENSIONS,
 17 |     TAR_EXTENSIONS,
 18 |     XZ_EXTENSIONS,
 19 |     ZIP_EXTENSIONS,
 20 | )
 21 | from pip._internal.utils.misc import ensure_dir
 22 | 
 23 | logger = logging.getLogger(__name__)
 24 | 
 25 | 
 26 | SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS
 27 | 
 28 | try:
 29 |     import bz2  # noqa
 30 | 
 31 |     SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS
 32 | except ImportError:
 33 |     logger.debug("bz2 module is not available")
 34 | 
 35 | try:
 36 |     # Only for Python 3.3+
 37 |     import lzma  # noqa
 38 | 
 39 |     SUPPORTED_EXTENSIONS += XZ_EXTENSIONS
 40 | except ImportError:
 41 |     logger.debug("lzma module is not available")
 42 | 
 43 | 
 44 | def current_umask() -> int:
 45 |     """Get the current umask which involves having to set it temporarily."""
 46 |     mask = os.umask(0)
 47 |     os.umask(mask)
 48 |     return mask
 49 | 
 50 | 
 51 | def split_leading_dir(path: str) -> List[str]:
 52 |     path = path.lstrip("/").lstrip("\\")
 53 |     if "/" in path and (
 54 |         ("\\" in path and path.find("/") < path.find("\\")) or "\\" not in path
 55 |     ):
 56 |         return path.split("/", 1)
 57 |     elif "\\" in path:
 58 |         return path.split("\\", 1)
 59 |     else:
 60 |         return [path, ""]
 61 | 
 62 | 
 63 | def has_leading_dir(paths: Iterable[str]) -> bool:
 64 |     """Returns true if all the paths have the same leading path name
 65 |     (i.e., everything is in one subdirectory in an archive)"""
 66 |     common_prefix = None
 67 |     for path in paths:
 68 |         prefix, rest = split_leading_dir(path)
 69 |         if not prefix:
 70 |             return False
 71 |         elif common_prefix is None:
 72 |             common_prefix = prefix
 73 |         elif prefix != common_prefix:
 74 |             return False
 75 |     return True
 76 | 
 77 | 
 78 | def is_within_directory(directory: str, target: str) -> bool:
 79 |     """
 80 |     Return true if the absolute path of target is within the directory
 81 |     """
 82 |     abs_directory = os.path.abspath(directory)
 83 |     abs_target = os.path.abspath(target)
 84 | 
 85 |     prefix = os.path.commonprefix([abs_directory, abs_target])
 86 |     return prefix == abs_directory
 87 | 
 88 | 
 89 | def _get_default_mode_plus_executable() -> int:
 90 |     return 0o777 & ~current_umask() | 0o111
 91 | 
 92 | 
 93 | def set_extracted_file_to_default_mode_plus_executable(path: str) -> None:
 94 |     """
 95 |     Make file present at path have execute for user/group/world
 96 |     (chmod +x) is no-op on windows per python docs
 97 |     """
 98 |     os.chmod(path, _get_default_mode_plus_executable())
 99 | 
100 | 
101 | def zip_item_is_executable(info: ZipInfo) -> bool:
102 |     mode = info.external_attr >> 16
103 |     # if mode and regular file and any execute permissions for
104 |     # user/group/world?
105 |     return bool(mode and stat.S_ISREG(mode) and mode & 0o111)
106 | 
107 | 
108 | def unzip_file(filename: str, location: str, flatten: bool = True) -> None:
109 |     """
110 |     Unzip the file (with path `filename`) to the destination `location`.  All
111 |     files are written based on system defaults and umask (i.e. permissions are
112 |     not preserved), except that regular file members with any execute
113 |     permissions (user, group, or world) have "chmod +x" applied after being
114 |     written. Note that for windows, any execute changes using os.chmod are
115 |     no-ops per the python docs.
116 |     """
117 |     ensure_dir(location)
118 |     zipfp = open(filename, "rb")
119 |     try:
120 |         zip = zipfile.ZipFile(zipfp, allowZip64=True)
121 |         leading = has_leading_dir(zip.namelist()) and flatten
122 |         for info in zip.infolist():
123 |             name = info.filename
124 |             fn = name
125 |             if leading:
126 |                 fn = split_leading_dir(name)[1]
127 |             fn = os.path.join(location, fn)
128 |             dir = os.path.dirname(fn)
129 |             if not is_within_directory(location, fn):
130 |                 message = (
131 |                     "The zip file ({}) has a file ({}) trying to install "
132 |                     "outside target directory ({})"
133 |                 )
134 |                 raise InstallationError(message.format(filename, fn, location))
135 |             if fn.endswith("/") or fn.endswith("\\"):
136 |                 # A directory
137 |                 ensure_dir(fn)
138 |             else:
139 |                 ensure_dir(dir)
140 |                 # Don't use read() to avoid allocating an arbitrarily large
141 |                 # chunk of memory for the file's content
142 |                 fp = zip.open(name)
143 |                 try:
144 |                     with open(fn, "wb") as destfp:
145 |                         shutil.copyfileobj(fp, destfp)
146 |                 finally:
147 |                     fp.close()
148 |                     if zip_item_is_executable(info):
149 |                         set_extracted_file_to_default_mode_plus_executable(fn)
150 |     finally:
151 |         zipfp.close()
152 | 
153 | 
154 | def untar_file(filename: str, location: str) -> None:
155 |     """
156 |     Untar the file (with path `filename`) to the destination `location`.
157 |     All files are written based on system defaults and umask (i.e. permissions
158 |     are not preserved), except that regular file members with any execute
159 |     permissions (user, group, or world) have "chmod +x" applied on top of the
160 |     default.  Note that for windows, any execute changes using os.chmod are
161 |     no-ops per the python docs.
162 |     """
163 |     ensure_dir(location)
164 |     if filename.lower().endswith(".gz") or filename.lower().endswith(".tgz"):
165 |         mode = "r:gz"
166 |     elif filename.lower().endswith(BZ2_EXTENSIONS):
167 |         mode = "r:bz2"
168 |     elif filename.lower().endswith(XZ_EXTENSIONS):
169 |         mode = "r:xz"
170 |     elif filename.lower().endswith(".tar"):
171 |         mode = "r"
172 |     else:
173 |         logger.warning(
174 |             "Cannot determine compression type for file %s",
175 |             filename,
176 |         )
177 |         mode = "r:*"
178 | 
179 |     tar = tarfile.open(filename, mode, encoding="utf-8")
180 |     try:
181 |         leading = has_leading_dir([member.name for member in tar.getmembers()])
182 | 
183 |         # PEP 706 added `tarfile.data_filter`, and made some other changes to
184 |         # Python's tarfile module (see below). The features were backported to
185 |         # security releases.
186 |         try:
187 |             data_filter = tarfile.data_filter
188 |         except AttributeError:
189 |             _untar_without_filter(filename, location, tar, leading)
190 |         else:
191 |             default_mode_plus_executable = _get_default_mode_plus_executable()
192 | 
193 |             if leading:
194 |                 # Strip the leading directory from all files in the archive,
195 |                 # including hardlink targets (which are relative to the
196 |                 # unpack location).
197 |                 for member in tar.getmembers():
198 |                     name_lead, name_rest = split_leading_dir(member.name)
199 |                     member.name = name_rest
200 |                     if member.islnk():
201 |                         lnk_lead, lnk_rest = split_leading_dir(member.linkname)
202 |                         if lnk_lead == name_lead:
203 |                             member.linkname = lnk_rest
204 | 
205 |             def pip_filter(member: tarfile.TarInfo, path: str) -> tarfile.TarInfo:
206 |                 orig_mode = member.mode
207 |                 try:
208 |                     try:
209 |                         member = data_filter(member, location)
210 |                     except tarfile.LinkOutsideDestinationError:
211 |                         if sys.version_info[:3] in {
212 |                             (3, 8, 17),
213 |                             (3, 9, 17),
214 |                             (3, 10, 12),
215 |                             (3, 11, 4),
216 |                         }:
217 |                             # The tarfile filter in specific Python versions
218 |                             # raises LinkOutsideDestinationError on valid input
219 |                             # (https://github.com/python/cpython/issues/107845)
220 |                             # Ignore the error there, but do use the
221 |                             # more lax `tar_filter`
222 |                             member = tarfile.tar_filter(member, location)
223 |                         else:
224 |                             raise
225 |                 except tarfile.TarError as exc:
226 |                     message = "Invalid member in the tar file {}: {}"
227 |                     # Filter error messages mention the member name.
228 |                     # No need to add it here.
229 |                     raise InstallationError(
230 |                         message.format(
231 |                             filename,
232 |                             exc,
233 |                         )
234 |                     )
235 |                 if member.isfile() and orig_mode & 0o111:
236 |                     member.mode = default_mode_plus_executable
237 |                 else:
238 |                     # See PEP 706 note above.
239 |                     # The PEP changed this from `int` to `Optional[int]`,
240 |                     # where None means "use the default". Mypy doesn't
241 |                     # know this yet.
242 |                     member.mode = None  # type: ignore [assignment]
243 |                 return member
244 | 
245 |             tar.extractall(location, filter=pip_filter)
246 | 
247 |     finally:
248 |         tar.close()
249 | 
250 | 
251 | def _untar_without_filter(
252 |     filename: str,
253 |     location: str,
254 |     tar: tarfile.TarFile,
255 |     leading: bool,
256 | ) -> None:
257 |     """Fallback for Python without tarfile.data_filter"""
258 |     for member in tar.getmembers():
259 |         fn = member.name
260 |         if leading:
261 |             fn = split_leading_dir(fn)[1]
262 |         path = os.path.join(location, fn)
263 |         if not is_within_directory(location, path):
264 |             message = (
265 |                 "The tar file ({}) has a file ({}) trying to install "
266 |                 "outside target directory ({})"
267 |             )
268 |             raise InstallationError(message.format(filename, path, location))
269 |         if member.isdir():
270 |             ensure_dir(path)
271 |         elif member.issym():
272 |             try:
273 |                 tar._extract_member(member, path)
274 |             except Exception as exc:
275 |                 # Some corrupt tar files seem to produce this
276 |                 # (specifically bad symlinks)
277 |                 logger.warning(
278 |                     "In the tar file %s the member %s is invalid: %s",
279 |                     filename,
280 |                     member.name,
281 |                     exc,
282 |                 )
283 |                 continue
284 |         else:
285 |             try:
286 |                 fp = tar.extractfile(member)
287 |             except (KeyError, AttributeError) as exc:
288 |                 # Some corrupt tar files seem to produce this
289 |                 # (specifically bad symlinks)
290 |                 logger.warning(
291 |                     "In the tar file %s the member %s is invalid: %s",
292 |                     filename,
293 |                     member.name,
294 |                     exc,
295 |                 )
296 |                 continue
297 |             ensure_dir(os.path.dirname(path))
298 |             assert fp is not None
299 |             with open(path, "wb") as destfp:
300 |                 shutil.copyfileobj(fp, destfp)
301 |             fp.close()
302 |             # Update the timestamp (useful for cython compiled files)
303 |             tar.utime(member, path)
304 |             # member have any execute permissions for user/group/world?
305 |             if member.mode & 0o111:
306 |                 set_extracted_file_to_default_mode_plus_executable(path)
307 | 
308 | 
309 | def unpack_file(
310 |     filename: str,
311 |     location: str,
312 |     content_type: Optional[str] = None,
313 | ) -> None:
314 |     filename = os.path.realpath(filename)
315 |     if (
316 |         content_type == "application/zip"
317 |         or filename.lower().endswith(ZIP_EXTENSIONS)
318 |         or zipfile.is_zipfile(filename)
319 |     ):
320 |         unzip_file(filename, location, flatten=not filename.endswith(".whl"))
321 |     elif (
322 |         content_type == "application/x-gzip"
323 |         or tarfile.is_tarfile(filename)
324 |         or filename.lower().endswith(TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS)
325 |     ):
326 |         untar_file(filename, location)
327 |     else:
328 |         # FIXME: handle?
329 |         # FIXME: magic signatures?
330 |         logger.critical(
331 |             "Cannot unpack file %s (downloaded from %s, content-type: %s); "
332 |             "cannot detect archive format",
333 |             filename,
334 |             location,
335 |             content_type,
336 |         )
337 |         raise InstallationError(f"Cannot determine archive format of {location}")
338 | 
```

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

```python
  1 | """
  2 |     pygments.formatters.rtf
  3 |     ~~~~~~~~~~~~~~~~~~~~~~~
  4 | 
  5 |     A formatter that generates RTF files.
  6 | 
  7 |     :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
  8 |     :license: BSD, see LICENSE for details.
  9 | """
 10 | 
 11 | from collections import OrderedDict
 12 | from pip._vendor.pygments.formatter import Formatter
 13 | from pip._vendor.pygments.style import _ansimap
 14 | from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt, surrogatepair
 15 | 
 16 | 
 17 | __all__ = ['RtfFormatter']
 18 | 
 19 | 
 20 | class RtfFormatter(Formatter):
 21 |     """
 22 |     Format tokens as RTF markup. This formatter automatically outputs full RTF
 23 |     documents with color information and other useful stuff. Perfect for Copy and
 24 |     Paste into Microsoft(R) Word(R) documents.
 25 | 
 26 |     Please note that ``encoding`` and ``outencoding`` options are ignored.
 27 |     The RTF format is ASCII natively, but handles unicode characters correctly
 28 |     thanks to escape sequences.
 29 | 
 30 |     .. versionadded:: 0.6
 31 | 
 32 |     Additional options accepted:
 33 | 
 34 |     `style`
 35 |         The style to use, can be a string or a Style subclass (default:
 36 |         ``'default'``).
 37 | 
 38 |     `fontface`
 39 |         The used font family, for example ``Bitstream Vera Sans``. Defaults to
 40 |         some generic font which is supposed to have fixed width.
 41 | 
 42 |     `fontsize`
 43 |         Size of the font used. Size is specified in half points. The
 44 |         default is 24 half-points, giving a size 12 font.
 45 | 
 46 |         .. versionadded:: 2.0
 47 | 
 48 |     `linenos`
 49 |         Turn on line numbering (default: ``False``).
 50 | 
 51 |         .. versionadded:: 2.18
 52 | 
 53 |     `lineno_fontsize`
 54 |         Font size for line numbers. Size is specified in half points
 55 |         (default: `fontsize`). 
 56 | 
 57 |         .. versionadded:: 2.18
 58 | 
 59 |     `lineno_padding`
 60 |         Number of spaces between the (inline) line numbers and the
 61 |         source code (default: ``2``).
 62 | 
 63 |         .. versionadded:: 2.18
 64 | 
 65 |     `linenostart`
 66 |         The line number for the first line (default: ``1``).
 67 | 
 68 |         .. versionadded:: 2.18
 69 | 
 70 |     `linenostep`
 71 |         If set to a number n > 1, only every nth line number is printed.
 72 | 
 73 |         .. versionadded:: 2.18
 74 | 
 75 |     `lineno_color`
 76 |         Color for line numbers specified as a hex triplet, e.g. ``'5e5e5e'``. 
 77 |         Defaults to the style's line number color if it is a hex triplet, 
 78 |         otherwise ansi bright black.
 79 | 
 80 |         .. versionadded:: 2.18
 81 | 
 82 |     `hl_lines`
 83 |         Specify a list of lines to be highlighted, as line numbers separated by
 84 |         spaces, e.g. ``'3 7 8'``. The line numbers are relative to the input 
 85 |         (i.e. the first line is line 1) unless `hl_linenostart` is set.
 86 | 
 87 |         .. versionadded:: 2.18
 88 | 
 89 |     `hl_color`
 90 |         Color for highlighting the lines specified in `hl_lines`, specified as 
 91 |         a hex triplet (default: style's `highlight_color`).
 92 | 
 93 |         .. versionadded:: 2.18
 94 | 
 95 |     `hl_linenostart`
 96 |         If set to ``True`` line numbers in `hl_lines` are specified
 97 |         relative to `linenostart` (default ``False``).
 98 | 
 99 |         .. versionadded:: 2.18
100 |     """
101 |     name = 'RTF'
102 |     aliases = ['rtf']
103 |     filenames = ['*.rtf']
104 | 
105 |     def __init__(self, **options):
106 |         r"""
107 |         Additional options accepted:
108 | 
109 |         ``fontface``
110 |             Name of the font used. Could for example be ``'Courier New'``
111 |             to further specify the default which is ``'\fmodern'``. The RTF
112 |             specification claims that ``\fmodern`` are "Fixed-pitch serif
113 |             and sans serif fonts". Hope every RTF implementation thinks
114 |             the same about modern...
115 | 
116 |         """
117 |         Formatter.__init__(self, **options)
118 |         self.fontface = options.get('fontface') or ''
119 |         self.fontsize = get_int_opt(options, 'fontsize', 0)
120 |         self.linenos = get_bool_opt(options, 'linenos', False)
121 |         self.lineno_fontsize = get_int_opt(options, 'lineno_fontsize',
122 |                                            self.fontsize)
123 |         self.lineno_padding = get_int_opt(options, 'lineno_padding', 2)
124 |         self.linenostart = abs(get_int_opt(options, 'linenostart', 1))
125 |         self.linenostep = abs(get_int_opt(options, 'linenostep', 1))
126 |         self.hl_linenostart = get_bool_opt(options, 'hl_linenostart', False)
127 | 
128 |         self.hl_color = options.get('hl_color', '')
129 |         if not self.hl_color:
130 |             self.hl_color = self.style.highlight_color
131 | 
132 |         self.hl_lines = []
133 |         for lineno in get_list_opt(options, 'hl_lines', []):
134 |             try:
135 |                 lineno = int(lineno)
136 |                 if self.hl_linenostart:
137 |                     lineno = lineno - self.linenostart + 1
138 |                 self.hl_lines.append(lineno)
139 |             except ValueError:
140 |                 pass
141 | 
142 |         self.lineno_color = options.get('lineno_color', '')
143 |         if not self.lineno_color:
144 |             if  self.style.line_number_color == 'inherit':
145 |                 # style color is the css value 'inherit'
146 |                 # default to ansi bright-black
147 |                 self.lineno_color = _ansimap['ansibrightblack']
148 |             else:
149 |                 # style color is assumed to be a hex triplet as other
150 |                 # colors in pygments/style.py
151 |                 self.lineno_color = self.style.line_number_color
152 | 
153 |         self.color_mapping = self._create_color_mapping()
154 | 
155 |     def _escape(self, text):
156 |         return text.replace('\\', '\\\\') \
157 |                    .replace('{', '\\{') \
158 |                    .replace('}', '\\}')
159 | 
160 |     def _escape_text(self, text):
161 |         # empty strings, should give a small performance improvement
162 |         if not text:
163 |             return ''
164 | 
165 |         # escape text
166 |         text = self._escape(text)
167 | 
168 |         buf = []
169 |         for c in text:
170 |             cn = ord(c)
171 |             if cn < (2**7):
172 |                 # ASCII character
173 |                 buf.append(str(c))
174 |             elif (2**7) <= cn < (2**16):
175 |                 # single unicode escape sequence
176 |                 buf.append('{\\u%d}' % cn)
177 |             elif (2**16) <= cn:
178 |                 # RTF limits unicode to 16 bits.
179 |                 # Force surrogate pairs
180 |                 buf.append('{\\u%d}{\\u%d}' % surrogatepair(cn))
181 | 
182 |         return ''.join(buf).replace('\n', '\\par')
183 | 
184 |     @staticmethod
185 |     def hex_to_rtf_color(hex_color):
186 |         if hex_color[0] == "#":
187 |             hex_color = hex_color[1:]
188 | 
189 |         return '\\red%d\\green%d\\blue%d;' % (
190 |                         int(hex_color[0:2], 16),
191 |                         int(hex_color[2:4], 16),
192 |                         int(hex_color[4:6], 16)
193 |                     )
194 | 
195 |     def _split_tokens_on_newlines(self, tokensource):
196 |         """
197 |         Split tokens containing newline characters into multiple token
198 |         each representing a line of the input file. Needed for numbering
199 |         lines of e.g. multiline comments.
200 |         """
201 |         for ttype, value in tokensource:
202 |             if value == '\n':
203 |                 yield (ttype, value)
204 |             elif "\n" in value:
205 |                 lines = value.split("\n")
206 |                 for line in lines[:-1]:
207 |                     yield (ttype, line+"\n")
208 |                 if lines[-1]:
209 |                     yield (ttype, lines[-1])
210 |             else:
211 |                 yield (ttype, value)
212 | 
213 |     def _create_color_mapping(self):
214 |         """
215 |         Create a mapping of style hex colors to index/offset in
216 |         the RTF color table.
217 |         """
218 |         color_mapping = OrderedDict()
219 |         offset = 1
220 | 
221 |         if self.linenos:
222 |             color_mapping[self.lineno_color] = offset
223 |             offset += 1
224 | 
225 |         if self.hl_lines:
226 |             color_mapping[self.hl_color] = offset
227 |             offset += 1
228 | 
229 |         for _, style in self.style:
230 |             for color in style['color'], style['bgcolor'], style['border']:
231 |                 if color and color not in color_mapping:
232 |                     color_mapping[color] = offset
233 |                     offset += 1
234 | 
235 |         return color_mapping
236 | 
237 |     @property
238 |     def _lineno_template(self):
239 |         if self.lineno_fontsize != self.fontsize:
240 |             return '{{\\fs{} \\cf{} %s{}}}'.format(self.lineno_fontsize,
241 |                           self.color_mapping[self.lineno_color],
242 |                           " " * self.lineno_padding)
243 | 
244 |         return '{{\\cf{} %s{}}}'.format(self.color_mapping[self.lineno_color],
245 |                       " " * self.lineno_padding)
246 | 
247 |     @property
248 |     def _hl_open_str(self):
249 |         return rf'{{\highlight{self.color_mapping[self.hl_color]} '
250 | 
251 |     @property
252 |     def _rtf_header(self):
253 |         lines = []
254 |         # rtf 1.8 header
255 |         lines.append('{\\rtf1\\ansi\\uc0\\deff0'
256 |                      '{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0%s;}}'
257 |                      % (self.fontface and ' '
258 |                         + self._escape(self.fontface) or ''))
259 | 
260 |         # color table
261 |         lines.append('{\\colortbl;')
262 |         for color, _ in self.color_mapping.items():
263 |             lines.append(self.hex_to_rtf_color(color))
264 |         lines.append('}')
265 | 
266 |         # font and fontsize
267 |         lines.append('\\f0\\sa0')
268 |         if self.fontsize:
269 |             lines.append('\\fs%d' % self.fontsize)
270 | 
271 |         # ensure Libre Office Writer imports and renders consecutive
272 |         # space characters the same width, needed for line numbering.
273 |         # https://bugs.documentfoundation.org/show_bug.cgi?id=144050
274 |         lines.append('\\dntblnsbdb')
275 | 
276 |         return lines
277 | 
278 |     def format_unencoded(self, tokensource, outfile):
279 |         for line in self._rtf_header:
280 |             outfile.write(line + "\n")
281 | 
282 |         tokensource = self._split_tokens_on_newlines(tokensource)
283 | 
284 |         # first pass of tokens to count lines, needed for line numbering
285 |         if self.linenos:
286 |             line_count = 0
287 |             tokens = [] # for copying the token source generator
288 |             for ttype, value in tokensource:
289 |                 tokens.append((ttype, value))
290 |                 if value.endswith("\n"):
291 |                     line_count += 1
292 | 
293 |             # width of line number strings (for padding with spaces)
294 |             linenos_width = len(str(line_count+self.linenostart-1))
295 | 
296 |             tokensource = tokens
297 | 
298 |         # highlight stream
299 |         lineno = 1
300 |         start_new_line = True
301 |         for ttype, value in tokensource:
302 |             if start_new_line and lineno in self.hl_lines:
303 |                 outfile.write(self._hl_open_str)
304 | 
305 |             if start_new_line and self.linenos:
306 |                 if (lineno-self.linenostart+1)%self.linenostep == 0:
307 |                     current_lineno = lineno + self.linenostart - 1
308 |                     lineno_str = str(current_lineno).rjust(linenos_width)
309 |                 else:
310 |                     lineno_str = "".rjust(linenos_width)
311 |                 outfile.write(self._lineno_template % lineno_str)
312 | 
313 |             while not self.style.styles_token(ttype) and ttype.parent:
314 |                 ttype = ttype.parent
315 |             style = self.style.style_for_token(ttype)
316 |             buf = []
317 |             if style['bgcolor']:
318 |                 buf.append('\\cb%d' % self.color_mapping[style['bgcolor']])
319 |             if style['color']:
320 |                 buf.append('\\cf%d' % self.color_mapping[style['color']])
321 |             if style['bold']:
322 |                 buf.append('\\b')
323 |             if style['italic']:
324 |                 buf.append('\\i')
325 |             if style['underline']:
326 |                 buf.append('\\ul')
327 |             if style['border']:
328 |                 buf.append('\\chbrdr\\chcfpat%d' %
329 |                            self.color_mapping[style['border']])
330 |             start = ''.join(buf)
331 |             if start:
332 |                 outfile.write(f'{{{start} ')
333 |             outfile.write(self._escape_text(value))
334 |             if start:
335 |                 outfile.write('}')
336 |             start_new_line = False
337 | 
338 |             # complete line of input
339 |             if value.endswith("\n"):
340 |                 # close line highlighting
341 |                 if lineno in self.hl_lines:
342 |                     outfile.write('}')
343 |                 # newline in RTF file after closing }
344 |                 outfile.write("\n")
345 | 
346 |                 start_new_line = True
347 |                 lineno += 1
348 | 
349 |         outfile.write('}\n')
350 | 
```
Page 44/168FirstPrevNextLast