#
tokens: 44611/50000 2/808 files (page 74/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 74 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/werkzeug/local.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import copy
  4 | import math
  5 | import operator
  6 | import typing as t
  7 | from contextvars import ContextVar
  8 | from functools import partial
  9 | from functools import update_wrapper
 10 | from operator import attrgetter
 11 | 
 12 | from .wsgi import ClosingIterator
 13 | 
 14 | if t.TYPE_CHECKING:
 15 |     from _typeshed.wsgi import StartResponse
 16 |     from _typeshed.wsgi import WSGIApplication
 17 |     from _typeshed.wsgi import WSGIEnvironment
 18 | 
 19 | T = t.TypeVar("T")
 20 | F = t.TypeVar("F", bound=t.Callable[..., t.Any])
 21 | 
 22 | 
 23 | def release_local(local: Local | LocalStack[t.Any]) -> None:
 24 |     """Release the data for the current context in a :class:`Local` or
 25 |     :class:`LocalStack` without using a :class:`LocalManager`.
 26 | 
 27 |     This should not be needed for modern use cases, and may be removed
 28 |     in the future.
 29 | 
 30 |     .. versionadded:: 0.6.1
 31 |     """
 32 |     local.__release_local__()
 33 | 
 34 | 
 35 | class Local:
 36 |     """Create a namespace of context-local data. This wraps a
 37 |     :class:`ContextVar` containing a :class:`dict` value.
 38 | 
 39 |     This may incur a performance penalty compared to using individual
 40 |     context vars, as it has to copy data to avoid mutating the dict
 41 |     between nested contexts.
 42 | 
 43 |     :param context_var: The :class:`~contextvars.ContextVar` to use as
 44 |         storage for this local. If not given, one will be created.
 45 |         Context vars not created at the global scope may interfere with
 46 |         garbage collection.
 47 | 
 48 |     .. versionchanged:: 2.0
 49 |         Uses ``ContextVar`` instead of a custom storage implementation.
 50 |     """
 51 | 
 52 |     __slots__ = ("__storage",)
 53 | 
 54 |     def __init__(self, context_var: ContextVar[dict[str, t.Any]] | None = None) -> None:
 55 |         if context_var is None:
 56 |             # A ContextVar not created at global scope interferes with
 57 |             # Python's garbage collection. However, a local only makes
 58 |             # sense defined at the global scope as well, in which case
 59 |             # the GC issue doesn't seem relevant.
 60 |             context_var = ContextVar(f"werkzeug.Local<{id(self)}>.storage")
 61 | 
 62 |         object.__setattr__(self, "_Local__storage", context_var)
 63 | 
 64 |     def __iter__(self) -> t.Iterator[tuple[str, t.Any]]:
 65 |         return iter(self.__storage.get({}).items())
 66 | 
 67 |     def __call__(
 68 |         self, name: str, *, unbound_message: str | None = None
 69 |     ) -> LocalProxy[t.Any]:
 70 |         """Create a :class:`LocalProxy` that access an attribute on this
 71 |         local namespace.
 72 | 
 73 |         :param name: Proxy this attribute.
 74 |         :param unbound_message: The error message that the proxy will
 75 |             show if the attribute isn't set.
 76 |         """
 77 |         return LocalProxy(self, name, unbound_message=unbound_message)
 78 | 
 79 |     def __release_local__(self) -> None:
 80 |         self.__storage.set({})
 81 | 
 82 |     def __getattr__(self, name: str) -> t.Any:
 83 |         values = self.__storage.get({})
 84 | 
 85 |         if name in values:
 86 |             return values[name]
 87 | 
 88 |         raise AttributeError(name)
 89 | 
 90 |     def __setattr__(self, name: str, value: t.Any) -> None:
 91 |         values = self.__storage.get({}).copy()
 92 |         values[name] = value
 93 |         self.__storage.set(values)
 94 | 
 95 |     def __delattr__(self, name: str) -> None:
 96 |         values = self.__storage.get({})
 97 | 
 98 |         if name in values:
 99 |             values = values.copy()
100 |             del values[name]
101 |             self.__storage.set(values)
102 |         else:
103 |             raise AttributeError(name)
104 | 
105 | 
106 | class LocalStack(t.Generic[T]):
107 |     """Create a stack of context-local data. This wraps a
108 |     :class:`ContextVar` containing a :class:`list` value.
109 | 
110 |     This may incur a performance penalty compared to using individual
111 |     context vars, as it has to copy data to avoid mutating the list
112 |     between nested contexts.
113 | 
114 |     :param context_var: The :class:`~contextvars.ContextVar` to use as
115 |         storage for this local. If not given, one will be created.
116 |         Context vars not created at the global scope may interfere with
117 |         garbage collection.
118 | 
119 |     .. versionchanged:: 2.0
120 |         Uses ``ContextVar`` instead of a custom storage implementation.
121 | 
122 |     .. versionadded:: 0.6.1
123 |     """
124 | 
125 |     __slots__ = ("_storage",)
126 | 
127 |     def __init__(self, context_var: ContextVar[list[T]] | None = None) -> None:
128 |         if context_var is None:
129 |             # A ContextVar not created at global scope interferes with
130 |             # Python's garbage collection. However, a local only makes
131 |             # sense defined at the global scope as well, in which case
132 |             # the GC issue doesn't seem relevant.
133 |             context_var = ContextVar(f"werkzeug.LocalStack<{id(self)}>.storage")
134 | 
135 |         self._storage = context_var
136 | 
137 |     def __release_local__(self) -> None:
138 |         self._storage.set([])
139 | 
140 |     def push(self, obj: T) -> list[T]:
141 |         """Add a new item to the top of the stack."""
142 |         stack = self._storage.get([]).copy()
143 |         stack.append(obj)
144 |         self._storage.set(stack)
145 |         return stack
146 | 
147 |     def pop(self) -> T | None:
148 |         """Remove the top item from the stack and return it. If the
149 |         stack is empty, return ``None``.
150 |         """
151 |         stack = self._storage.get([])
152 | 
153 |         if len(stack) == 0:
154 |             return None
155 | 
156 |         rv = stack[-1]
157 |         self._storage.set(stack[:-1])
158 |         return rv
159 | 
160 |     @property
161 |     def top(self) -> T | None:
162 |         """The topmost item on the stack.  If the stack is empty,
163 |         `None` is returned.
164 |         """
165 |         stack = self._storage.get([])
166 | 
167 |         if len(stack) == 0:
168 |             return None
169 | 
170 |         return stack[-1]
171 | 
172 |     def __call__(
173 |         self, name: str | None = None, *, unbound_message: str | None = None
174 |     ) -> LocalProxy[t.Any]:
175 |         """Create a :class:`LocalProxy` that accesses the top of this
176 |         local stack.
177 | 
178 |         :param name: If given, the proxy access this attribute of the
179 |             top item, rather than the item itself.
180 |         :param unbound_message: The error message that the proxy will
181 |             show if the stack is empty.
182 |         """
183 |         return LocalProxy(self, name, unbound_message=unbound_message)
184 | 
185 | 
186 | class LocalManager:
187 |     """Manage releasing the data for the current context in one or more
188 |     :class:`Local` and :class:`LocalStack` objects.
189 | 
190 |     This should not be needed for modern use cases, and may be removed
191 |     in the future.
192 | 
193 |     :param locals: A local or list of locals to manage.
194 | 
195 |     .. versionchanged:: 2.1
196 |         The ``ident_func`` was removed.
197 | 
198 |     .. versionchanged:: 0.7
199 |         The ``ident_func`` parameter was added.
200 | 
201 |     .. versionchanged:: 0.6.1
202 |         The :func:`release_local` function can be used instead of a
203 |         manager.
204 |     """
205 | 
206 |     __slots__ = ("locals",)
207 | 
208 |     def __init__(
209 |         self,
210 |         locals: None
211 |         | (Local | LocalStack[t.Any] | t.Iterable[Local | LocalStack[t.Any]]) = None,
212 |     ) -> None:
213 |         if locals is None:
214 |             self.locals = []
215 |         elif isinstance(locals, Local):
216 |             self.locals = [locals]
217 |         else:
218 |             self.locals = list(locals)  # type: ignore[arg-type]
219 | 
220 |     def cleanup(self) -> None:
221 |         """Release the data in the locals for this context. Call this at
222 |         the end of each request or use :meth:`make_middleware`.
223 |         """
224 |         for local in self.locals:
225 |             release_local(local)
226 | 
227 |     def make_middleware(self, app: WSGIApplication) -> WSGIApplication:
228 |         """Wrap a WSGI application so that local data is released
229 |         automatically after the response has been sent for a request.
230 |         """
231 | 
232 |         def application(
233 |             environ: WSGIEnvironment, start_response: StartResponse
234 |         ) -> t.Iterable[bytes]:
235 |             return ClosingIterator(app(environ, start_response), self.cleanup)
236 | 
237 |         return application
238 | 
239 |     def middleware(self, func: WSGIApplication) -> WSGIApplication:
240 |         """Like :meth:`make_middleware` but used as a decorator on the
241 |         WSGI application function.
242 | 
243 |         .. code-block:: python
244 | 
245 |             @manager.middleware
246 |             def application(environ, start_response):
247 |                 ...
248 |         """
249 |         return update_wrapper(self.make_middleware(func), func)
250 | 
251 |     def __repr__(self) -> str:
252 |         return f"<{type(self).__name__} storages: {len(self.locals)}>"
253 | 
254 | 
255 | class _ProxyLookup:
256 |     """Descriptor that handles proxied attribute lookup for
257 |     :class:`LocalProxy`.
258 | 
259 |     :param f: The built-in function this attribute is accessed through.
260 |         Instead of looking up the special method, the function call
261 |         is redone on the object.
262 |     :param fallback: Return this function if the proxy is unbound
263 |         instead of raising a :exc:`RuntimeError`.
264 |     :param is_attr: This proxied name is an attribute, not a function.
265 |         Call the fallback immediately to get the value.
266 |     :param class_value: Value to return when accessed from the
267 |         ``LocalProxy`` class directly. Used for ``__doc__`` so building
268 |         docs still works.
269 |     """
270 | 
271 |     __slots__ = ("bind_f", "fallback", "is_attr", "class_value", "name")
272 | 
273 |     def __init__(
274 |         self,
275 |         f: t.Callable[..., t.Any] | None = None,
276 |         fallback: t.Callable[[LocalProxy[t.Any]], t.Any] | None = None,
277 |         class_value: t.Any | None = None,
278 |         is_attr: bool = False,
279 |     ) -> None:
280 |         bind_f: t.Callable[[LocalProxy[t.Any], t.Any], t.Callable[..., t.Any]] | None
281 | 
282 |         if hasattr(f, "__get__"):
283 |             # A Python function, can be turned into a bound method.
284 | 
285 |             def bind_f(
286 |                 instance: LocalProxy[t.Any], obj: t.Any
287 |             ) -> t.Callable[..., t.Any]:
288 |                 return f.__get__(obj, type(obj))  # type: ignore
289 | 
290 |         elif f is not None:
291 |             # A C function, use partial to bind the first argument.
292 | 
293 |             def bind_f(
294 |                 instance: LocalProxy[t.Any], obj: t.Any
295 |             ) -> t.Callable[..., t.Any]:
296 |                 return partial(f, obj)
297 | 
298 |         else:
299 |             # Use getattr, which will produce a bound method.
300 |             bind_f = None
301 | 
302 |         self.bind_f = bind_f
303 |         self.fallback = fallback
304 |         self.class_value = class_value
305 |         self.is_attr = is_attr
306 | 
307 |     def __set_name__(self, owner: LocalProxy[t.Any], name: str) -> None:
308 |         self.name = name
309 | 
310 |     def __get__(self, instance: LocalProxy[t.Any], owner: type | None = None) -> t.Any:
311 |         if instance is None:
312 |             if self.class_value is not None:
313 |                 return self.class_value
314 | 
315 |             return self
316 | 
317 |         try:
318 |             obj = instance._get_current_object()
319 |         except RuntimeError:
320 |             if self.fallback is None:
321 |                 raise
322 | 
323 |             fallback = self.fallback.__get__(instance, owner)
324 | 
325 |             if self.is_attr:
326 |                 # __class__ and __doc__ are attributes, not methods.
327 |                 # Call the fallback to get the value.
328 |                 return fallback()
329 | 
330 |             return fallback
331 | 
332 |         if self.bind_f is not None:
333 |             return self.bind_f(instance, obj)
334 | 
335 |         return getattr(obj, self.name)
336 | 
337 |     def __repr__(self) -> str:
338 |         return f"proxy {self.name}"
339 | 
340 |     def __call__(
341 |         self, instance: LocalProxy[t.Any], *args: t.Any, **kwargs: t.Any
342 |     ) -> t.Any:
343 |         """Support calling unbound methods from the class. For example,
344 |         this happens with ``copy.copy``, which does
345 |         ``type(x).__copy__(x)``. ``type(x)`` can't be proxied, so it
346 |         returns the proxy type and descriptor.
347 |         """
348 |         return self.__get__(instance, type(instance))(*args, **kwargs)
349 | 
350 | 
351 | class _ProxyIOp(_ProxyLookup):
352 |     """Look up an augmented assignment method on a proxied object. The
353 |     method is wrapped to return the proxy instead of the object.
354 |     """
355 | 
356 |     __slots__ = ()
357 | 
358 |     def __init__(
359 |         self,
360 |         f: t.Callable[..., t.Any] | None = None,
361 |         fallback: t.Callable[[LocalProxy[t.Any]], t.Any] | None = None,
362 |     ) -> None:
363 |         super().__init__(f, fallback)
364 | 
365 |         def bind_f(instance: LocalProxy[t.Any], obj: t.Any) -> t.Callable[..., t.Any]:
366 |             def i_op(self: t.Any, other: t.Any) -> LocalProxy[t.Any]:
367 |                 f(self, other)  # type: ignore
368 |                 return instance
369 | 
370 |             return i_op.__get__(obj, type(obj))  # type: ignore
371 | 
372 |         self.bind_f = bind_f
373 | 
374 | 
375 | def _l_to_r_op(op: F) -> F:
376 |     """Swap the argument order to turn an l-op into an r-op."""
377 | 
378 |     def r_op(obj: t.Any, other: t.Any) -> t.Any:
379 |         return op(other, obj)
380 | 
381 |     return t.cast(F, r_op)
382 | 
383 | 
384 | def _identity(o: T) -> T:
385 |     return o
386 | 
387 | 
388 | class LocalProxy(t.Generic[T]):
389 |     """A proxy to the object bound to a context-local object. All
390 |     operations on the proxy are forwarded to the bound object. If no
391 |     object is bound, a ``RuntimeError`` is raised.
392 | 
393 |     :param local: The context-local object that provides the proxied
394 |         object.
395 |     :param name: Proxy this attribute from the proxied object.
396 |     :param unbound_message: The error message to show if the
397 |         context-local object is unbound.
398 | 
399 |     Proxy a :class:`~contextvars.ContextVar` to make it easier to
400 |     access. Pass a name to proxy that attribute.
401 | 
402 |     .. code-block:: python
403 | 
404 |         _request_var = ContextVar("request")
405 |         request = LocalProxy(_request_var)
406 |         session = LocalProxy(_request_var, "session")
407 | 
408 |     Proxy an attribute on a :class:`Local` namespace by calling the
409 |     local with the attribute name:
410 | 
411 |     .. code-block:: python
412 | 
413 |         data = Local()
414 |         user = data("user")
415 | 
416 |     Proxy the top item on a :class:`LocalStack` by calling the local.
417 |     Pass a name to proxy that attribute.
418 | 
419 |     .. code-block::
420 | 
421 |         app_stack = LocalStack()
422 |         current_app = app_stack()
423 |         g = app_stack("g")
424 | 
425 |     Pass a function to proxy the return value from that function. This
426 |     was previously used to access attributes of local objects before
427 |     that was supported directly.
428 | 
429 |     .. code-block:: python
430 | 
431 |         session = LocalProxy(lambda: request.session)
432 | 
433 |     ``__repr__`` and ``__class__`` are proxied, so ``repr(x)`` and
434 |     ``isinstance(x, cls)`` will look like the proxied object. Use
435 |     ``issubclass(type(x), LocalProxy)`` to check if an object is a
436 |     proxy.
437 | 
438 |     .. code-block:: python
439 | 
440 |         repr(user)  # <User admin>
441 |         isinstance(user, User)  # True
442 |         issubclass(type(user), LocalProxy)  # True
443 | 
444 |     .. versionchanged:: 2.2.2
445 |         ``__wrapped__`` is set when wrapping an object, not only when
446 |         wrapping a function, to prevent doctest from failing.
447 | 
448 |     .. versionchanged:: 2.2
449 |         Can proxy a ``ContextVar`` or ``LocalStack`` directly.
450 | 
451 |     .. versionchanged:: 2.2
452 |         The ``name`` parameter can be used with any proxied object, not
453 |         only ``Local``.
454 | 
455 |     .. versionchanged:: 2.2
456 |         Added the ``unbound_message`` parameter.
457 | 
458 |     .. versionchanged:: 2.0
459 |         Updated proxied attributes and methods to reflect the current
460 |         data model.
461 | 
462 |     .. versionchanged:: 0.6.1
463 |         The class can be instantiated with a callable.
464 |     """
465 | 
466 |     __slots__ = ("__wrapped", "_get_current_object")
467 | 
468 |     _get_current_object: t.Callable[[], T]
469 |     """Return the current object this proxy is bound to. If the proxy is
470 |     unbound, this raises a ``RuntimeError``.
471 | 
472 |     This should be used if you need to pass the object to something that
473 |     doesn't understand the proxy. It can also be useful for performance
474 |     if you are accessing the object multiple times in a function, rather
475 |     than going through the proxy multiple times.
476 |     """
477 | 
478 |     def __init__(
479 |         self,
480 |         local: ContextVar[T] | Local | LocalStack[T] | t.Callable[[], T],
481 |         name: str | None = None,
482 |         *,
483 |         unbound_message: str | None = None,
484 |     ) -> None:
485 |         if name is None:
486 |             get_name = _identity
487 |         else:
488 |             get_name = attrgetter(name)  # type: ignore[assignment]
489 | 
490 |         if unbound_message is None:
491 |             unbound_message = "object is not bound"
492 | 
493 |         if isinstance(local, Local):
494 |             if name is None:
495 |                 raise TypeError("'name' is required when proxying a 'Local' object.")
496 | 
497 |             def _get_current_object() -> T:
498 |                 try:
499 |                     return get_name(local)  # type: ignore[return-value]
500 |                 except AttributeError:
501 |                     raise RuntimeError(unbound_message) from None
502 | 
503 |         elif isinstance(local, LocalStack):
504 | 
505 |             def _get_current_object() -> T:
506 |                 obj = local.top
507 | 
508 |                 if obj is None:
509 |                     raise RuntimeError(unbound_message)
510 | 
511 |                 return get_name(obj)
512 | 
513 |         elif isinstance(local, ContextVar):
514 | 
515 |             def _get_current_object() -> T:
516 |                 try:
517 |                     obj = local.get()
518 |                 except LookupError:
519 |                     raise RuntimeError(unbound_message) from None
520 | 
521 |                 return get_name(obj)
522 | 
523 |         elif callable(local):
524 | 
525 |             def _get_current_object() -> T:
526 |                 return get_name(local())
527 | 
528 |         else:
529 |             raise TypeError(f"Don't know how to proxy '{type(local)}'.")
530 | 
531 |         object.__setattr__(self, "_LocalProxy__wrapped", local)
532 |         object.__setattr__(self, "_get_current_object", _get_current_object)
533 | 
534 |     __doc__ = _ProxyLookup(  # type: ignore[assignment]
535 |         class_value=__doc__, fallback=lambda self: type(self).__doc__, is_attr=True
536 |     )
537 |     __wrapped__ = _ProxyLookup(
538 |         fallback=lambda self: self._LocalProxy__wrapped,  # type: ignore[attr-defined]
539 |         is_attr=True,
540 |     )
541 |     # __del__ should only delete the proxy
542 |     __repr__ = _ProxyLookup(  # type: ignore[assignment]
543 |         repr, fallback=lambda self: f"<{type(self).__name__} unbound>"
544 |     )
545 |     __str__ = _ProxyLookup(str)  # type: ignore[assignment]
546 |     __bytes__ = _ProxyLookup(bytes)
547 |     __format__ = _ProxyLookup()  # type: ignore[assignment]
548 |     __lt__ = _ProxyLookup(operator.lt)
549 |     __le__ = _ProxyLookup(operator.le)
550 |     __eq__ = _ProxyLookup(operator.eq)  # type: ignore[assignment]
551 |     __ne__ = _ProxyLookup(operator.ne)  # type: ignore[assignment]
552 |     __gt__ = _ProxyLookup(operator.gt)
553 |     __ge__ = _ProxyLookup(operator.ge)
554 |     __hash__ = _ProxyLookup(hash)  # type: ignore[assignment]
555 |     __bool__ = _ProxyLookup(bool, fallback=lambda self: False)
556 |     __getattr__ = _ProxyLookup(getattr)
557 |     # __getattribute__ triggered through __getattr__
558 |     __setattr__ = _ProxyLookup(setattr)  # type: ignore[assignment]
559 |     __delattr__ = _ProxyLookup(delattr)  # type: ignore[assignment]
560 |     __dir__ = _ProxyLookup(dir, fallback=lambda self: [])  # type: ignore[assignment]
561 |     # __get__ (proxying descriptor not supported)
562 |     # __set__ (descriptor)
563 |     # __delete__ (descriptor)
564 |     # __set_name__ (descriptor)
565 |     # __objclass__ (descriptor)
566 |     # __slots__ used by proxy itself
567 |     # __dict__ (__getattr__)
568 |     # __weakref__ (__getattr__)
569 |     # __init_subclass__ (proxying metaclass not supported)
570 |     # __prepare__ (metaclass)
571 |     __class__ = _ProxyLookup(fallback=lambda self: type(self), is_attr=True)  # type: ignore[assignment]
572 |     __instancecheck__ = _ProxyLookup(lambda self, other: isinstance(other, self))
573 |     __subclasscheck__ = _ProxyLookup(lambda self, other: issubclass(other, self))
574 |     # __class_getitem__ triggered through __getitem__
575 |     __call__ = _ProxyLookup(lambda self, *args, **kwargs: self(*args, **kwargs))
576 |     __len__ = _ProxyLookup(len)
577 |     __length_hint__ = _ProxyLookup(operator.length_hint)
578 |     __getitem__ = _ProxyLookup(operator.getitem)
579 |     __setitem__ = _ProxyLookup(operator.setitem)
580 |     __delitem__ = _ProxyLookup(operator.delitem)
581 |     # __missing__ triggered through __getitem__
582 |     __iter__ = _ProxyLookup(iter)
583 |     __next__ = _ProxyLookup(next)
584 |     __reversed__ = _ProxyLookup(reversed)
585 |     __contains__ = _ProxyLookup(operator.contains)
586 |     __add__ = _ProxyLookup(operator.add)
587 |     __sub__ = _ProxyLookup(operator.sub)
588 |     __mul__ = _ProxyLookup(operator.mul)
589 |     __matmul__ = _ProxyLookup(operator.matmul)
590 |     __truediv__ = _ProxyLookup(operator.truediv)
591 |     __floordiv__ = _ProxyLookup(operator.floordiv)
592 |     __mod__ = _ProxyLookup(operator.mod)
593 |     __divmod__ = _ProxyLookup(divmod)
594 |     __pow__ = _ProxyLookup(pow)
595 |     __lshift__ = _ProxyLookup(operator.lshift)
596 |     __rshift__ = _ProxyLookup(operator.rshift)
597 |     __and__ = _ProxyLookup(operator.and_)
598 |     __xor__ = _ProxyLookup(operator.xor)
599 |     __or__ = _ProxyLookup(operator.or_)
600 |     __radd__ = _ProxyLookup(_l_to_r_op(operator.add))
601 |     __rsub__ = _ProxyLookup(_l_to_r_op(operator.sub))
602 |     __rmul__ = _ProxyLookup(_l_to_r_op(operator.mul))
603 |     __rmatmul__ = _ProxyLookup(_l_to_r_op(operator.matmul))
604 |     __rtruediv__ = _ProxyLookup(_l_to_r_op(operator.truediv))
605 |     __rfloordiv__ = _ProxyLookup(_l_to_r_op(operator.floordiv))
606 |     __rmod__ = _ProxyLookup(_l_to_r_op(operator.mod))
607 |     __rdivmod__ = _ProxyLookup(_l_to_r_op(divmod))
608 |     __rpow__ = _ProxyLookup(_l_to_r_op(pow))
609 |     __rlshift__ = _ProxyLookup(_l_to_r_op(operator.lshift))
610 |     __rrshift__ = _ProxyLookup(_l_to_r_op(operator.rshift))
611 |     __rand__ = _ProxyLookup(_l_to_r_op(operator.and_))
612 |     __rxor__ = _ProxyLookup(_l_to_r_op(operator.xor))
613 |     __ror__ = _ProxyLookup(_l_to_r_op(operator.or_))
614 |     __iadd__ = _ProxyIOp(operator.iadd)
615 |     __isub__ = _ProxyIOp(operator.isub)
616 |     __imul__ = _ProxyIOp(operator.imul)
617 |     __imatmul__ = _ProxyIOp(operator.imatmul)
618 |     __itruediv__ = _ProxyIOp(operator.itruediv)
619 |     __ifloordiv__ = _ProxyIOp(operator.ifloordiv)
620 |     __imod__ = _ProxyIOp(operator.imod)
621 |     __ipow__ = _ProxyIOp(operator.ipow)
622 |     __ilshift__ = _ProxyIOp(operator.ilshift)
623 |     __irshift__ = _ProxyIOp(operator.irshift)
624 |     __iand__ = _ProxyIOp(operator.iand)
625 |     __ixor__ = _ProxyIOp(operator.ixor)
626 |     __ior__ = _ProxyIOp(operator.ior)
627 |     __neg__ = _ProxyLookup(operator.neg)
628 |     __pos__ = _ProxyLookup(operator.pos)
629 |     __abs__ = _ProxyLookup(abs)
630 |     __invert__ = _ProxyLookup(operator.invert)
631 |     __complex__ = _ProxyLookup(complex)
632 |     __int__ = _ProxyLookup(int)
633 |     __float__ = _ProxyLookup(float)
634 |     __index__ = _ProxyLookup(operator.index)
635 |     __round__ = _ProxyLookup(round)
636 |     __trunc__ = _ProxyLookup(math.trunc)
637 |     __floor__ = _ProxyLookup(math.floor)
638 |     __ceil__ = _ProxyLookup(math.ceil)
639 |     __enter__ = _ProxyLookup()
640 |     __exit__ = _ProxyLookup()
641 |     __await__ = _ProxyLookup()
642 |     __aiter__ = _ProxyLookup()
643 |     __anext__ = _ProxyLookup()
644 |     __aenter__ = _ProxyLookup()
645 |     __aexit__ = _ProxyLookup()
646 |     __copy__ = _ProxyLookup(copy.copy)
647 |     __deepcopy__ = _ProxyLookup(copy.deepcopy)
648 |     # __getnewargs_ex__ (pickle through proxy not supported)
649 |     # __getnewargs__ (pickle)
650 |     # __getstate__ (pickle)
651 |     # __setstate__ (pickle)
652 |     # __reduce__ (pickle)
653 |     # __reduce_ex__ (pickle)
654 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/charset_normalizer/api.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | from os import PathLike
  3 | from typing import BinaryIO, List, Optional, Set, Union
  4 | 
  5 | from .cd import (
  6 |     coherence_ratio,
  7 |     encoding_languages,
  8 |     mb_encoding_languages,
  9 |     merge_coherence_ratios,
 10 | )
 11 | from .constant import IANA_SUPPORTED, TOO_BIG_SEQUENCE, TOO_SMALL_SEQUENCE, TRACE
 12 | from .md import mess_ratio
 13 | from .models import CharsetMatch, CharsetMatches
 14 | from .utils import (
 15 |     any_specified_encoding,
 16 |     cut_sequence_chunks,
 17 |     iana_name,
 18 |     identify_sig_or_bom,
 19 |     is_cp_similar,
 20 |     is_multi_byte_encoding,
 21 |     should_strip_sig_or_bom,
 22 | )
 23 | 
 24 | # Will most likely be controversial
 25 | # logging.addLevelName(TRACE, "TRACE")
 26 | logger = logging.getLogger("charset_normalizer")
 27 | explain_handler = logging.StreamHandler()
 28 | explain_handler.setFormatter(
 29 |     logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")
 30 | )
 31 | 
 32 | 
 33 | def from_bytes(
 34 |     sequences: Union[bytes, bytearray],
 35 |     steps: int = 5,
 36 |     chunk_size: int = 512,
 37 |     threshold: float = 0.2,
 38 |     cp_isolation: Optional[List[str]] = None,
 39 |     cp_exclusion: Optional[List[str]] = None,
 40 |     preemptive_behaviour: bool = True,
 41 |     explain: bool = False,
 42 |     language_threshold: float = 0.1,
 43 |     enable_fallback: bool = True,
 44 | ) -> CharsetMatches:
 45 |     """
 46 |     Given a raw bytes sequence, return the best possibles charset usable to render str objects.
 47 |     If there is no results, it is a strong indicator that the source is binary/not text.
 48 |     By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence.
 49 |     And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will.
 50 | 
 51 |     The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page
 52 |     but never take it for granted. Can improve the performance.
 53 | 
 54 |     You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that
 55 |     purpose.
 56 | 
 57 |     This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32.
 58 |     By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain'
 59 |     toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging.
 60 |     Custom logging format and handler can be set manually.
 61 |     """
 62 | 
 63 |     if not isinstance(sequences, (bytearray, bytes)):
 64 |         raise TypeError(
 65 |             "Expected object of type bytes or bytearray, got: {0}".format(
 66 |                 type(sequences)
 67 |             )
 68 |         )
 69 | 
 70 |     if explain:
 71 |         previous_logger_level: int = logger.level
 72 |         logger.addHandler(explain_handler)
 73 |         logger.setLevel(TRACE)
 74 | 
 75 |     length: int = len(sequences)
 76 | 
 77 |     if length == 0:
 78 |         logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.")
 79 |         if explain:
 80 |             logger.removeHandler(explain_handler)
 81 |             logger.setLevel(previous_logger_level or logging.WARNING)
 82 |         return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")])
 83 | 
 84 |     if cp_isolation is not None:
 85 |         logger.log(
 86 |             TRACE,
 87 |             "cp_isolation is set. use this flag for debugging purpose. "
 88 |             "limited list of encoding allowed : %s.",
 89 |             ", ".join(cp_isolation),
 90 |         )
 91 |         cp_isolation = [iana_name(cp, False) for cp in cp_isolation]
 92 |     else:
 93 |         cp_isolation = []
 94 | 
 95 |     if cp_exclusion is not None:
 96 |         logger.log(
 97 |             TRACE,
 98 |             "cp_exclusion is set. use this flag for debugging purpose. "
 99 |             "limited list of encoding excluded : %s.",
100 |             ", ".join(cp_exclusion),
101 |         )
102 |         cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion]
103 |     else:
104 |         cp_exclusion = []
105 | 
106 |     if length <= (chunk_size * steps):
107 |         logger.log(
108 |             TRACE,
109 |             "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.",
110 |             steps,
111 |             chunk_size,
112 |             length,
113 |         )
114 |         steps = 1
115 |         chunk_size = length
116 | 
117 |     if steps > 1 and length / steps < chunk_size:
118 |         chunk_size = int(length / steps)
119 | 
120 |     is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE
121 |     is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE
122 | 
123 |     if is_too_small_sequence:
124 |         logger.log(
125 |             TRACE,
126 |             "Trying to detect encoding from a tiny portion of ({}) byte(s).".format(
127 |                 length
128 |             ),
129 |         )
130 |     elif is_too_large_sequence:
131 |         logger.log(
132 |             TRACE,
133 |             "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format(
134 |                 length
135 |             ),
136 |         )
137 | 
138 |     prioritized_encodings: List[str] = []
139 | 
140 |     specified_encoding: Optional[str] = (
141 |         any_specified_encoding(sequences) if preemptive_behaviour else None
142 |     )
143 | 
144 |     if specified_encoding is not None:
145 |         prioritized_encodings.append(specified_encoding)
146 |         logger.log(
147 |             TRACE,
148 |             "Detected declarative mark in sequence. Priority +1 given for %s.",
149 |             specified_encoding,
150 |         )
151 | 
152 |     tested: Set[str] = set()
153 |     tested_but_hard_failure: List[str] = []
154 |     tested_but_soft_failure: List[str] = []
155 | 
156 |     fallback_ascii: Optional[CharsetMatch] = None
157 |     fallback_u8: Optional[CharsetMatch] = None
158 |     fallback_specified: Optional[CharsetMatch] = None
159 | 
160 |     results: CharsetMatches = CharsetMatches()
161 | 
162 |     early_stop_results: CharsetMatches = CharsetMatches()
163 | 
164 |     sig_encoding, sig_payload = identify_sig_or_bom(sequences)
165 | 
166 |     if sig_encoding is not None:
167 |         prioritized_encodings.append(sig_encoding)
168 |         logger.log(
169 |             TRACE,
170 |             "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.",
171 |             len(sig_payload),
172 |             sig_encoding,
173 |         )
174 | 
175 |     prioritized_encodings.append("ascii")
176 | 
177 |     if "utf_8" not in prioritized_encodings:
178 |         prioritized_encodings.append("utf_8")
179 | 
180 |     for encoding_iana in prioritized_encodings + IANA_SUPPORTED:
181 |         if cp_isolation and encoding_iana not in cp_isolation:
182 |             continue
183 | 
184 |         if cp_exclusion and encoding_iana in cp_exclusion:
185 |             continue
186 | 
187 |         if encoding_iana in tested:
188 |             continue
189 | 
190 |         tested.add(encoding_iana)
191 | 
192 |         decoded_payload: Optional[str] = None
193 |         bom_or_sig_available: bool = sig_encoding == encoding_iana
194 |         strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom(
195 |             encoding_iana
196 |         )
197 | 
198 |         if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available:
199 |             logger.log(
200 |                 TRACE,
201 |                 "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.",
202 |                 encoding_iana,
203 |             )
204 |             continue
205 |         if encoding_iana in {"utf_7"} and not bom_or_sig_available:
206 |             logger.log(
207 |                 TRACE,
208 |                 "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.",
209 |                 encoding_iana,
210 |             )
211 |             continue
212 | 
213 |         try:
214 |             is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana)
215 |         except (ModuleNotFoundError, ImportError):
216 |             logger.log(
217 |                 TRACE,
218 |                 "Encoding %s does not provide an IncrementalDecoder",
219 |                 encoding_iana,
220 |             )
221 |             continue
222 | 
223 |         try:
224 |             if is_too_large_sequence and is_multi_byte_decoder is False:
225 |                 str(
226 |                     (
227 |                         sequences[: int(50e4)]
228 |                         if strip_sig_or_bom is False
229 |                         else sequences[len(sig_payload) : int(50e4)]
230 |                     ),
231 |                     encoding=encoding_iana,
232 |                 )
233 |             else:
234 |                 decoded_payload = str(
235 |                     (
236 |                         sequences
237 |                         if strip_sig_or_bom is False
238 |                         else sequences[len(sig_payload) :]
239 |                     ),
240 |                     encoding=encoding_iana,
241 |                 )
242 |         except (UnicodeDecodeError, LookupError) as e:
243 |             if not isinstance(e, LookupError):
244 |                 logger.log(
245 |                     TRACE,
246 |                     "Code page %s does not fit given bytes sequence at ALL. %s",
247 |                     encoding_iana,
248 |                     str(e),
249 |                 )
250 |             tested_but_hard_failure.append(encoding_iana)
251 |             continue
252 | 
253 |         similar_soft_failure_test: bool = False
254 | 
255 |         for encoding_soft_failed in tested_but_soft_failure:
256 |             if is_cp_similar(encoding_iana, encoding_soft_failed):
257 |                 similar_soft_failure_test = True
258 |                 break
259 | 
260 |         if similar_soft_failure_test:
261 |             logger.log(
262 |                 TRACE,
263 |                 "%s is deemed too similar to code page %s and was consider unsuited already. Continuing!",
264 |                 encoding_iana,
265 |                 encoding_soft_failed,
266 |             )
267 |             continue
268 | 
269 |         r_ = range(
270 |             0 if not bom_or_sig_available else len(sig_payload),
271 |             length,
272 |             int(length / steps),
273 |         )
274 | 
275 |         multi_byte_bonus: bool = (
276 |             is_multi_byte_decoder
277 |             and decoded_payload is not None
278 |             and len(decoded_payload) < length
279 |         )
280 | 
281 |         if multi_byte_bonus:
282 |             logger.log(
283 |                 TRACE,
284 |                 "Code page %s is a multi byte encoding table and it appear that at least one character "
285 |                 "was encoded using n-bytes.",
286 |                 encoding_iana,
287 |             )
288 | 
289 |         max_chunk_gave_up: int = int(len(r_) / 4)
290 | 
291 |         max_chunk_gave_up = max(max_chunk_gave_up, 2)
292 |         early_stop_count: int = 0
293 |         lazy_str_hard_failure = False
294 | 
295 |         md_chunks: List[str] = []
296 |         md_ratios = []
297 | 
298 |         try:
299 |             for chunk in cut_sequence_chunks(
300 |                 sequences,
301 |                 encoding_iana,
302 |                 r_,
303 |                 chunk_size,
304 |                 bom_or_sig_available,
305 |                 strip_sig_or_bom,
306 |                 sig_payload,
307 |                 is_multi_byte_decoder,
308 |                 decoded_payload,
309 |             ):
310 |                 md_chunks.append(chunk)
311 | 
312 |                 md_ratios.append(
313 |                     mess_ratio(
314 |                         chunk,
315 |                         threshold,
316 |                         explain is True and 1 <= len(cp_isolation) <= 2,
317 |                     )
318 |                 )
319 | 
320 |                 if md_ratios[-1] >= threshold:
321 |                     early_stop_count += 1
322 | 
323 |                 if (early_stop_count >= max_chunk_gave_up) or (
324 |                     bom_or_sig_available and strip_sig_or_bom is False
325 |                 ):
326 |                     break
327 |         except (
328 |             UnicodeDecodeError
329 |         ) as e:  # Lazy str loading may have missed something there
330 |             logger.log(
331 |                 TRACE,
332 |                 "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s",
333 |                 encoding_iana,
334 |                 str(e),
335 |             )
336 |             early_stop_count = max_chunk_gave_up
337 |             lazy_str_hard_failure = True
338 | 
339 |         # We might want to check the sequence again with the whole content
340 |         # Only if initial MD tests passes
341 |         if (
342 |             not lazy_str_hard_failure
343 |             and is_too_large_sequence
344 |             and not is_multi_byte_decoder
345 |         ):
346 |             try:
347 |                 sequences[int(50e3) :].decode(encoding_iana, errors="strict")
348 |             except UnicodeDecodeError as e:
349 |                 logger.log(
350 |                     TRACE,
351 |                     "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s",
352 |                     encoding_iana,
353 |                     str(e),
354 |                 )
355 |                 tested_but_hard_failure.append(encoding_iana)
356 |                 continue
357 | 
358 |         mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0
359 |         if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up:
360 |             tested_but_soft_failure.append(encoding_iana)
361 |             logger.log(
362 |                 TRACE,
363 |                 "%s was excluded because of initial chaos probing. Gave up %i time(s). "
364 |                 "Computed mean chaos is %f %%.",
365 |                 encoding_iana,
366 |                 early_stop_count,
367 |                 round(mean_mess_ratio * 100, ndigits=3),
368 |             )
369 |             # Preparing those fallbacks in case we got nothing.
370 |             if (
371 |                 enable_fallback
372 |                 and encoding_iana in ["ascii", "utf_8", specified_encoding]
373 |                 and not lazy_str_hard_failure
374 |             ):
375 |                 fallback_entry = CharsetMatch(
376 |                     sequences,
377 |                     encoding_iana,
378 |                     threshold,
379 |                     False,
380 |                     [],
381 |                     decoded_payload,
382 |                     preemptive_declaration=specified_encoding,
383 |                 )
384 |                 if encoding_iana == specified_encoding:
385 |                     fallback_specified = fallback_entry
386 |                 elif encoding_iana == "ascii":
387 |                     fallback_ascii = fallback_entry
388 |                 else:
389 |                     fallback_u8 = fallback_entry
390 |             continue
391 | 
392 |         logger.log(
393 |             TRACE,
394 |             "%s passed initial chaos probing. Mean measured chaos is %f %%",
395 |             encoding_iana,
396 |             round(mean_mess_ratio * 100, ndigits=3),
397 |         )
398 | 
399 |         if not is_multi_byte_decoder:
400 |             target_languages: List[str] = encoding_languages(encoding_iana)
401 |         else:
402 |             target_languages = mb_encoding_languages(encoding_iana)
403 | 
404 |         if target_languages:
405 |             logger.log(
406 |                 TRACE,
407 |                 "{} should target any language(s) of {}".format(
408 |                     encoding_iana, str(target_languages)
409 |                 ),
410 |             )
411 | 
412 |         cd_ratios = []
413 | 
414 |         # We shall skip the CD when its about ASCII
415 |         # Most of the time its not relevant to run "language-detection" on it.
416 |         if encoding_iana != "ascii":
417 |             for chunk in md_chunks:
418 |                 chunk_languages = coherence_ratio(
419 |                     chunk,
420 |                     language_threshold,
421 |                     ",".join(target_languages) if target_languages else None,
422 |                 )
423 | 
424 |                 cd_ratios.append(chunk_languages)
425 | 
426 |         cd_ratios_merged = merge_coherence_ratios(cd_ratios)
427 | 
428 |         if cd_ratios_merged:
429 |             logger.log(
430 |                 TRACE,
431 |                 "We detected language {} using {}".format(
432 |                     cd_ratios_merged, encoding_iana
433 |                 ),
434 |             )
435 | 
436 |         current_match = CharsetMatch(
437 |             sequences,
438 |             encoding_iana,
439 |             mean_mess_ratio,
440 |             bom_or_sig_available,
441 |             cd_ratios_merged,
442 |             (
443 |                 decoded_payload
444 |                 if (
445 |                     is_too_large_sequence is False
446 |                     or encoding_iana in [specified_encoding, "ascii", "utf_8"]
447 |                 )
448 |                 else None
449 |             ),
450 |             preemptive_declaration=specified_encoding,
451 |         )
452 | 
453 |         results.append(current_match)
454 | 
455 |         if (
456 |             encoding_iana in [specified_encoding, "ascii", "utf_8"]
457 |             and mean_mess_ratio < 0.1
458 |         ):
459 |             # If md says nothing to worry about, then... stop immediately!
460 |             if mean_mess_ratio == 0.0:
461 |                 logger.debug(
462 |                     "Encoding detection: %s is most likely the one.",
463 |                     current_match.encoding,
464 |                 )
465 |                 if explain:
466 |                     logger.removeHandler(explain_handler)
467 |                     logger.setLevel(previous_logger_level)
468 |                 return CharsetMatches([current_match])
469 | 
470 |             early_stop_results.append(current_match)
471 | 
472 |         if (
473 |             len(early_stop_results)
474 |             and (specified_encoding is None or specified_encoding in tested)
475 |             and "ascii" in tested
476 |             and "utf_8" in tested
477 |         ):
478 |             probable_result: CharsetMatch = early_stop_results.best()  # type: ignore[assignment]
479 |             logger.debug(
480 |                 "Encoding detection: %s is most likely the one.",
481 |                 probable_result.encoding,
482 |             )
483 |             if explain:
484 |                 logger.removeHandler(explain_handler)
485 |                 logger.setLevel(previous_logger_level)
486 | 
487 |             return CharsetMatches([probable_result])
488 | 
489 |         if encoding_iana == sig_encoding:
490 |             logger.debug(
491 |                 "Encoding detection: %s is most likely the one as we detected a BOM or SIG within "
492 |                 "the beginning of the sequence.",
493 |                 encoding_iana,
494 |             )
495 |             if explain:
496 |                 logger.removeHandler(explain_handler)
497 |                 logger.setLevel(previous_logger_level)
498 |             return CharsetMatches([results[encoding_iana]])
499 | 
500 |     if len(results) == 0:
501 |         if fallback_u8 or fallback_ascii or fallback_specified:
502 |             logger.log(
503 |                 TRACE,
504 |                 "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.",
505 |             )
506 | 
507 |         if fallback_specified:
508 |             logger.debug(
509 |                 "Encoding detection: %s will be used as a fallback match",
510 |                 fallback_specified.encoding,
511 |             )
512 |             results.append(fallback_specified)
513 |         elif (
514 |             (fallback_u8 and fallback_ascii is None)
515 |             or (
516 |                 fallback_u8
517 |                 and fallback_ascii
518 |                 and fallback_u8.fingerprint != fallback_ascii.fingerprint
519 |             )
520 |             or (fallback_u8 is not None)
521 |         ):
522 |             logger.debug("Encoding detection: utf_8 will be used as a fallback match")
523 |             results.append(fallback_u8)
524 |         elif fallback_ascii:
525 |             logger.debug("Encoding detection: ascii will be used as a fallback match")
526 |             results.append(fallback_ascii)
527 | 
528 |     if results:
529 |         logger.debug(
530 |             "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.",
531 |             results.best().encoding,  # type: ignore
532 |             len(results) - 1,
533 |         )
534 |     else:
535 |         logger.debug("Encoding detection: Unable to determine any suitable charset.")
536 | 
537 |     if explain:
538 |         logger.removeHandler(explain_handler)
539 |         logger.setLevel(previous_logger_level)
540 | 
541 |     return results
542 | 
543 | 
544 | def from_fp(
545 |     fp: BinaryIO,
546 |     steps: int = 5,
547 |     chunk_size: int = 512,
548 |     threshold: float = 0.20,
549 |     cp_isolation: Optional[List[str]] = None,
550 |     cp_exclusion: Optional[List[str]] = None,
551 |     preemptive_behaviour: bool = True,
552 |     explain: bool = False,
553 |     language_threshold: float = 0.1,
554 |     enable_fallback: bool = True,
555 | ) -> CharsetMatches:
556 |     """
557 |     Same thing than the function from_bytes but using a file pointer that is already ready.
558 |     Will not close the file pointer.
559 |     """
560 |     return from_bytes(
561 |         fp.read(),
562 |         steps,
563 |         chunk_size,
564 |         threshold,
565 |         cp_isolation,
566 |         cp_exclusion,
567 |         preemptive_behaviour,
568 |         explain,
569 |         language_threshold,
570 |         enable_fallback,
571 |     )
572 | 
573 | 
574 | def from_path(
575 |     path: Union[str, bytes, PathLike],  # type: ignore[type-arg]
576 |     steps: int = 5,
577 |     chunk_size: int = 512,
578 |     threshold: float = 0.20,
579 |     cp_isolation: Optional[List[str]] = None,
580 |     cp_exclusion: Optional[List[str]] = None,
581 |     preemptive_behaviour: bool = True,
582 |     explain: bool = False,
583 |     language_threshold: float = 0.1,
584 |     enable_fallback: bool = True,
585 | ) -> CharsetMatches:
586 |     """
587 |     Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode.
588 |     Can raise IOError.
589 |     """
590 |     with open(path, "rb") as fp:
591 |         return from_fp(
592 |             fp,
593 |             steps,
594 |             chunk_size,
595 |             threshold,
596 |             cp_isolation,
597 |             cp_exclusion,
598 |             preemptive_behaviour,
599 |             explain,
600 |             language_threshold,
601 |             enable_fallback,
602 |         )
603 | 
604 | 
605 | def is_binary(
606 |     fp_or_path_or_payload: Union[PathLike, str, BinaryIO, bytes],  # type: ignore[type-arg]
607 |     steps: int = 5,
608 |     chunk_size: int = 512,
609 |     threshold: float = 0.20,
610 |     cp_isolation: Optional[List[str]] = None,
611 |     cp_exclusion: Optional[List[str]] = None,
612 |     preemptive_behaviour: bool = True,
613 |     explain: bool = False,
614 |     language_threshold: float = 0.1,
615 |     enable_fallback: bool = False,
616 | ) -> bool:
617 |     """
618 |     Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string.
619 |     Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match
620 |     are disabled to be stricter around ASCII-compatible but unlikely to be a string.
621 |     """
622 |     if isinstance(fp_or_path_or_payload, (str, PathLike)):
623 |         guesses = from_path(
624 |             fp_or_path_or_payload,
625 |             steps=steps,
626 |             chunk_size=chunk_size,
627 |             threshold=threshold,
628 |             cp_isolation=cp_isolation,
629 |             cp_exclusion=cp_exclusion,
630 |             preemptive_behaviour=preemptive_behaviour,
631 |             explain=explain,
632 |             language_threshold=language_threshold,
633 |             enable_fallback=enable_fallback,
634 |         )
635 |     elif isinstance(
636 |         fp_or_path_or_payload,
637 |         (
638 |             bytes,
639 |             bytearray,
640 |         ),
641 |     ):
642 |         guesses = from_bytes(
643 |             fp_or_path_or_payload,
644 |             steps=steps,
645 |             chunk_size=chunk_size,
646 |             threshold=threshold,
647 |             cp_isolation=cp_isolation,
648 |             cp_exclusion=cp_exclusion,
649 |             preemptive_behaviour=preemptive_behaviour,
650 |             explain=explain,
651 |             language_threshold=language_threshold,
652 |             enable_fallback=enable_fallback,
653 |         )
654 |     else:
655 |         guesses = from_fp(
656 |             fp_or_path_or_payload,
657 |             steps=steps,
658 |             chunk_size=chunk_size,
659 |             threshold=threshold,
660 |             cp_isolation=cp_isolation,
661 |             cp_exclusion=cp_exclusion,
662 |             preemptive_behaviour=preemptive_behaviour,
663 |             explain=explain,
664 |             language_threshold=language_threshold,
665 |             enable_fallback=enable_fallback,
666 |         )
667 | 
668 |     return not guesses
669 | 
```
Page 74/168FirstPrevNextLast