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

# Directory Structure

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

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/html/soupparser.py:
--------------------------------------------------------------------------------

```python
  1 | """External interface to the BeautifulSoup HTML parser.
  2 | """
  3 | 
  4 | __all__ = ["fromstring", "parse", "convert_tree"]
  5 | 
  6 | import re
  7 | from lxml import etree, html
  8 | 
  9 | try:
 10 |     from bs4 import (
 11 |         BeautifulSoup, Tag, Comment, ProcessingInstruction, NavigableString,
 12 |         Declaration, Doctype)
 13 |     _DECLARATION_OR_DOCTYPE = (Declaration, Doctype)
 14 | except ImportError:
 15 |     from BeautifulSoup import (
 16 |         BeautifulSoup, Tag, Comment, ProcessingInstruction, NavigableString,
 17 |         Declaration)
 18 |     _DECLARATION_OR_DOCTYPE = Declaration
 19 | 
 20 | 
 21 | def fromstring(data, beautifulsoup=None, makeelement=None, **bsargs):
 22 |     """Parse a string of HTML data into an Element tree using the
 23 |     BeautifulSoup parser.
 24 | 
 25 |     Returns the root ``<html>`` Element of the tree.
 26 | 
 27 |     You can pass a different BeautifulSoup parser through the
 28 |     `beautifulsoup` keyword, and a diffent Element factory function
 29 |     through the `makeelement` keyword.  By default, the standard
 30 |     ``BeautifulSoup`` class and the default factory of `lxml.html` are
 31 |     used.
 32 |     """
 33 |     return _parse(data, beautifulsoup, makeelement, **bsargs)
 34 | 
 35 | 
 36 | def parse(file, beautifulsoup=None, makeelement=None, **bsargs):
 37 |     """Parse a file into an ElemenTree using the BeautifulSoup parser.
 38 | 
 39 |     You can pass a different BeautifulSoup parser through the
 40 |     `beautifulsoup` keyword, and a diffent Element factory function
 41 |     through the `makeelement` keyword.  By default, the standard
 42 |     ``BeautifulSoup`` class and the default factory of `lxml.html` are
 43 |     used.
 44 |     """
 45 |     if not hasattr(file, 'read'):
 46 |         file = open(file)
 47 |     root = _parse(file, beautifulsoup, makeelement, **bsargs)
 48 |     return etree.ElementTree(root)
 49 | 
 50 | 
 51 | def convert_tree(beautiful_soup_tree, makeelement=None):
 52 |     """Convert a BeautifulSoup tree to a list of Element trees.
 53 | 
 54 |     Returns a list instead of a single root Element to support
 55 |     HTML-like soup with more than one root element.
 56 | 
 57 |     You can pass a different Element factory through the `makeelement`
 58 |     keyword.
 59 |     """
 60 |     root = _convert_tree(beautiful_soup_tree, makeelement)
 61 |     children = root.getchildren()
 62 |     for child in children:
 63 |         root.remove(child)
 64 |     return children
 65 | 
 66 | 
 67 | # helpers
 68 | 
 69 | def _parse(source, beautifulsoup, makeelement, **bsargs):
 70 |     if beautifulsoup is None:
 71 |         beautifulsoup = BeautifulSoup
 72 |     if hasattr(beautifulsoup, "HTML_ENTITIES"):  # bs3
 73 |         if 'convertEntities' not in bsargs:
 74 |             bsargs['convertEntities'] = 'html'
 75 |     if hasattr(beautifulsoup, "DEFAULT_BUILDER_FEATURES"):  # bs4
 76 |         if 'features' not in bsargs:
 77 |             bsargs['features'] = 'html.parser'  # use Python html parser
 78 |     tree = beautifulsoup(source, **bsargs)
 79 |     root = _convert_tree(tree, makeelement)
 80 |     # from ET: wrap the document in a html root element, if necessary
 81 |     if len(root) == 1 and root[0].tag == "html":
 82 |         return root[0]
 83 |     root.tag = "html"
 84 |     return root
 85 | 
 86 | 
 87 | _parse_doctype_declaration = re.compile(
 88 |     r'(?:\s|[<!])*DOCTYPE\s*HTML'
 89 |     r'(?:\s+PUBLIC)?(?:\s+(\'[^\']*\'|"[^"]*"))?'
 90 |     r'(?:\s+(\'[^\']*\'|"[^"]*"))?',
 91 |     re.IGNORECASE).match
 92 | 
 93 | 
 94 | class _PseudoTag:
 95 |     # Minimal imitation of BeautifulSoup.Tag
 96 |     def __init__(self, contents):
 97 |         self.name = 'html'
 98 |         self.attrs = []
 99 |         self.contents = contents
100 | 
101 |     def __iter__(self):
102 |         return self.contents.__iter__()
103 | 
104 | 
105 | def _convert_tree(beautiful_soup_tree, makeelement):
106 |     if makeelement is None:
107 |         makeelement = html.html_parser.makeelement
108 | 
109 |     # Split the tree into three parts:
110 |     # i) everything before the root element: document type
111 |     # declaration, comments, processing instructions, whitespace
112 |     # ii) the root(s),
113 |     # iii) everything after the root: comments, processing
114 |     # instructions, whitespace
115 |     first_element_idx = last_element_idx = None
116 |     html_root = declaration = None
117 |     for i, e in enumerate(beautiful_soup_tree):
118 |         if isinstance(e, Tag):
119 |             if first_element_idx is None:
120 |                 first_element_idx = i
121 |             last_element_idx = i
122 |             if html_root is None and e.name and e.name.lower() == 'html':
123 |                 html_root = e
124 |         elif declaration is None and isinstance(e, _DECLARATION_OR_DOCTYPE):
125 |             declaration = e
126 | 
127 |     # For a nice, well-formatted document, the variable roots below is
128 |     # a list consisting of a single <html> element. However, the document
129 |     # may be a soup like '<meta><head><title>Hello</head><body>Hi
130 |     # all<\p>'. In this example roots is a list containing meta, head
131 |     # and body elements.
132 |     if first_element_idx is None:
133 |         pre_root = post_root = []
134 |         roots = beautiful_soup_tree.contents
135 |     else:
136 |         pre_root = beautiful_soup_tree.contents[:first_element_idx]
137 |         roots = beautiful_soup_tree.contents[first_element_idx:last_element_idx+1]
138 |         post_root = beautiful_soup_tree.contents[last_element_idx+1:]
139 | 
140 |     # Reorganize so that there is one <html> root...
141 |     if html_root is not None:
142 |         # ... use existing one if possible, ...
143 |         i = roots.index(html_root)
144 |         html_root.contents = roots[:i] + html_root.contents + roots[i+1:]
145 |     else:
146 |         # ... otherwise create a new one.
147 |         html_root = _PseudoTag(roots)
148 | 
149 |     convert_node = _init_node_converters(makeelement)
150 | 
151 |     # Process pre_root
152 |     res_root = convert_node(html_root)
153 |     prev = res_root
154 |     for e in reversed(pre_root):
155 |         converted = convert_node(e)
156 |         if converted is not None:
157 |             prev.addprevious(converted)
158 |             prev = converted
159 | 
160 |     # ditto for post_root
161 |     prev = res_root
162 |     for e in post_root:
163 |         converted = convert_node(e)
164 |         if converted is not None:
165 |             prev.addnext(converted)
166 |             prev = converted
167 | 
168 |     if declaration is not None:
169 |         try:
170 |             # bs4 provides full Doctype string
171 |             doctype_string = declaration.output_ready()
172 |         except AttributeError:
173 |             doctype_string = declaration.string
174 | 
175 |         match = _parse_doctype_declaration(doctype_string)
176 |         if not match:
177 |             # Something is wrong if we end up in here. Since soupparser should
178 |             # tolerate errors, do not raise Exception, just let it pass.
179 |             pass
180 |         else:
181 |             external_id, sys_uri = match.groups()
182 |             docinfo = res_root.getroottree().docinfo
183 |             # strip quotes and update DOCTYPE values (any of None, '', '...')
184 |             docinfo.public_id = external_id and external_id[1:-1]
185 |             docinfo.system_url = sys_uri and sys_uri[1:-1]
186 | 
187 |     return res_root
188 | 
189 | 
190 | def _init_node_converters(makeelement):
191 |     converters = {}
192 |     ordered_node_types = []
193 | 
194 |     def converter(*types):
195 |         def add(handler):
196 |             for t in types:
197 |                 converters[t] = handler
198 |                 ordered_node_types.append(t)
199 |             return handler
200 |         return add
201 | 
202 |     def find_best_converter(node):
203 |         for t in ordered_node_types:
204 |             if isinstance(node, t):
205 |                 return converters[t]
206 |         return None
207 | 
208 |     def convert_node(bs_node, parent=None):
209 |         # duplicated in convert_tag() below
210 |         try:
211 |             handler = converters[type(bs_node)]
212 |         except KeyError:
213 |             handler = converters[type(bs_node)] = find_best_converter(bs_node)
214 |         if handler is None:
215 |             return None
216 |         return handler(bs_node, parent)
217 | 
218 |     def map_attrs(bs_attrs):
219 |         if isinstance(bs_attrs, dict):  # bs4
220 |             attribs = {}
221 |             for k, v in bs_attrs.items():
222 |                 if isinstance(v, list):
223 |                     v = " ".join(v)
224 |                 attribs[k] = unescape(v)
225 |         else:
226 |             attribs = {k: unescape(v) for k, v in bs_attrs}
227 |         return attribs
228 | 
229 |     def append_text(parent, text):
230 |         if len(parent) == 0:
231 |             parent.text = (parent.text or '') + text
232 |         else:
233 |             parent[-1].tail = (parent[-1].tail or '') + text
234 | 
235 |     # converters are tried in order of their definition
236 | 
237 |     @converter(Tag, _PseudoTag)
238 |     def convert_tag(bs_node, parent):
239 |         attrs = bs_node.attrs
240 |         if parent is not None:
241 |             attribs = map_attrs(attrs) if attrs else None
242 |             res = etree.SubElement(parent, bs_node.name, attrib=attribs)
243 |         else:
244 |             attribs = map_attrs(attrs) if attrs else {}
245 |             res = makeelement(bs_node.name, attrib=attribs)
246 | 
247 |         for child in bs_node:
248 |             # avoid double recursion by inlining convert_node(), see above
249 |             try:
250 |                 handler = converters[type(child)]
251 |             except KeyError:
252 |                 pass
253 |             else:
254 |                 if handler is not None:
255 |                     handler(child, res)
256 |                 continue
257 |             convert_node(child, res)
258 |         return res
259 | 
260 |     @converter(Comment)
261 |     def convert_comment(bs_node, parent):
262 |         res = html.HtmlComment(bs_node)
263 |         if parent is not None:
264 |             parent.append(res)
265 |         return res
266 | 
267 |     @converter(ProcessingInstruction)
268 |     def convert_pi(bs_node, parent):
269 |         if bs_node.endswith('?'):
270 |             # The PI is of XML style (<?as df?>) but BeautifulSoup
271 |             # interpreted it as being SGML style (<?as df>). Fix.
272 |             bs_node = bs_node[:-1]
273 |         res = etree.ProcessingInstruction(*bs_node.split(' ', 1))
274 |         if parent is not None:
275 |             parent.append(res)
276 |         return res
277 | 
278 |     @converter(NavigableString)
279 |     def convert_text(bs_node, parent):
280 |         if parent is not None:
281 |             append_text(parent, unescape(bs_node))
282 |         return None
283 | 
284 |     return convert_node
285 | 
286 | 
287 | # copied from ET's ElementSoup
288 | 
289 | try:
290 |     from html.entities import name2codepoint  # Python 3
291 | except ImportError:
292 |     from htmlentitydefs import name2codepoint
293 | 
294 | 
295 | handle_entities = re.compile(r"&(\w+);").sub
296 | 
297 | 
298 | try:
299 |     unichr
300 | except NameError:
301 |     # Python 3
302 |     unichr = chr
303 | 
304 | 
305 | def unescape(string):
306 |     if not string:
307 |         return ''
308 |     # work around oddities in BeautifulSoup's entity handling
309 |     def unescape_entity(m):
310 |         try:
311 |             return unichr(name2codepoint[m.group(1)])
312 |         except KeyError:
313 |             return m.group(0)  # use as is
314 |     return handle_entities(unescape_entity, string)
315 | 
```

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

```python
  1 | # Auto generated by make_terminal_widths.py
  2 | 
  3 | CELL_WIDTHS = [
  4 |     (0, 0, 0),
  5 |     (1, 31, -1),
  6 |     (127, 159, -1),
  7 |     (173, 173, 0),
  8 |     (768, 879, 0),
  9 |     (1155, 1161, 0),
 10 |     (1425, 1469, 0),
 11 |     (1471, 1471, 0),
 12 |     (1473, 1474, 0),
 13 |     (1476, 1477, 0),
 14 |     (1479, 1479, 0),
 15 |     (1536, 1541, 0),
 16 |     (1552, 1562, 0),
 17 |     (1564, 1564, 0),
 18 |     (1611, 1631, 0),
 19 |     (1648, 1648, 0),
 20 |     (1750, 1757, 0),
 21 |     (1759, 1764, 0),
 22 |     (1767, 1768, 0),
 23 |     (1770, 1773, 0),
 24 |     (1807, 1807, 0),
 25 |     (1809, 1809, 0),
 26 |     (1840, 1866, 0),
 27 |     (1958, 1968, 0),
 28 |     (2027, 2035, 0),
 29 |     (2045, 2045, 0),
 30 |     (2070, 2073, 0),
 31 |     (2075, 2083, 0),
 32 |     (2085, 2087, 0),
 33 |     (2089, 2093, 0),
 34 |     (2137, 2139, 0),
 35 |     (2192, 2193, 0),
 36 |     (2200, 2207, 0),
 37 |     (2250, 2307, 0),
 38 |     (2362, 2364, 0),
 39 |     (2366, 2383, 0),
 40 |     (2385, 2391, 0),
 41 |     (2402, 2403, 0),
 42 |     (2433, 2435, 0),
 43 |     (2492, 2492, 0),
 44 |     (2494, 2500, 0),
 45 |     (2503, 2504, 0),
 46 |     (2507, 2509, 0),
 47 |     (2519, 2519, 0),
 48 |     (2530, 2531, 0),
 49 |     (2558, 2558, 0),
 50 |     (2561, 2563, 0),
 51 |     (2620, 2620, 0),
 52 |     (2622, 2626, 0),
 53 |     (2631, 2632, 0),
 54 |     (2635, 2637, 0),
 55 |     (2641, 2641, 0),
 56 |     (2672, 2673, 0),
 57 |     (2677, 2677, 0),
 58 |     (2689, 2691, 0),
 59 |     (2748, 2748, 0),
 60 |     (2750, 2757, 0),
 61 |     (2759, 2761, 0),
 62 |     (2763, 2765, 0),
 63 |     (2786, 2787, 0),
 64 |     (2810, 2815, 0),
 65 |     (2817, 2819, 0),
 66 |     (2876, 2876, 0),
 67 |     (2878, 2884, 0),
 68 |     (2887, 2888, 0),
 69 |     (2891, 2893, 0),
 70 |     (2901, 2903, 0),
 71 |     (2914, 2915, 0),
 72 |     (2946, 2946, 0),
 73 |     (3006, 3010, 0),
 74 |     (3014, 3016, 0),
 75 |     (3018, 3021, 0),
 76 |     (3031, 3031, 0),
 77 |     (3072, 3076, 0),
 78 |     (3132, 3132, 0),
 79 |     (3134, 3140, 0),
 80 |     (3142, 3144, 0),
 81 |     (3146, 3149, 0),
 82 |     (3157, 3158, 0),
 83 |     (3170, 3171, 0),
 84 |     (3201, 3203, 0),
 85 |     (3260, 3260, 0),
 86 |     (3262, 3268, 0),
 87 |     (3270, 3272, 0),
 88 |     (3274, 3277, 0),
 89 |     (3285, 3286, 0),
 90 |     (3298, 3299, 0),
 91 |     (3315, 3315, 0),
 92 |     (3328, 3331, 0),
 93 |     (3387, 3388, 0),
 94 |     (3390, 3396, 0),
 95 |     (3398, 3400, 0),
 96 |     (3402, 3405, 0),
 97 |     (3415, 3415, 0),
 98 |     (3426, 3427, 0),
 99 |     (3457, 3459, 0),
100 |     (3530, 3530, 0),
101 |     (3535, 3540, 0),
102 |     (3542, 3542, 0),
103 |     (3544, 3551, 0),
104 |     (3570, 3571, 0),
105 |     (3633, 3633, 0),
106 |     (3636, 3642, 0),
107 |     (3655, 3662, 0),
108 |     (3761, 3761, 0),
109 |     (3764, 3772, 0),
110 |     (3784, 3790, 0),
111 |     (3864, 3865, 0),
112 |     (3893, 3893, 0),
113 |     (3895, 3895, 0),
114 |     (3897, 3897, 0),
115 |     (3902, 3903, 0),
116 |     (3953, 3972, 0),
117 |     (3974, 3975, 0),
118 |     (3981, 3991, 0),
119 |     (3993, 4028, 0),
120 |     (4038, 4038, 0),
121 |     (4139, 4158, 0),
122 |     (4182, 4185, 0),
123 |     (4190, 4192, 0),
124 |     (4194, 4196, 0),
125 |     (4199, 4205, 0),
126 |     (4209, 4212, 0),
127 |     (4226, 4237, 0),
128 |     (4239, 4239, 0),
129 |     (4250, 4253, 0),
130 |     (4352, 4447, 2),
131 |     (4448, 4607, 0),
132 |     (4957, 4959, 0),
133 |     (5906, 5909, 0),
134 |     (5938, 5940, 0),
135 |     (5970, 5971, 0),
136 |     (6002, 6003, 0),
137 |     (6068, 6099, 0),
138 |     (6109, 6109, 0),
139 |     (6155, 6159, 0),
140 |     (6277, 6278, 0),
141 |     (6313, 6313, 0),
142 |     (6432, 6443, 0),
143 |     (6448, 6459, 0),
144 |     (6679, 6683, 0),
145 |     (6741, 6750, 0),
146 |     (6752, 6780, 0),
147 |     (6783, 6783, 0),
148 |     (6832, 6862, 0),
149 |     (6912, 6916, 0),
150 |     (6964, 6980, 0),
151 |     (7019, 7027, 0),
152 |     (7040, 7042, 0),
153 |     (7073, 7085, 0),
154 |     (7142, 7155, 0),
155 |     (7204, 7223, 0),
156 |     (7376, 7378, 0),
157 |     (7380, 7400, 0),
158 |     (7405, 7405, 0),
159 |     (7412, 7412, 0),
160 |     (7415, 7417, 0),
161 |     (7616, 7679, 0),
162 |     (8203, 8207, 0),
163 |     (8232, 8238, 0),
164 |     (8288, 8292, 0),
165 |     (8294, 8303, 0),
166 |     (8400, 8432, 0),
167 |     (8986, 8987, 2),
168 |     (9001, 9002, 2),
169 |     (9193, 9196, 2),
170 |     (9200, 9200, 2),
171 |     (9203, 9203, 2),
172 |     (9725, 9726, 2),
173 |     (9748, 9749, 2),
174 |     (9800, 9811, 2),
175 |     (9855, 9855, 2),
176 |     (9875, 9875, 2),
177 |     (9889, 9889, 2),
178 |     (9898, 9899, 2),
179 |     (9917, 9918, 2),
180 |     (9924, 9925, 2),
181 |     (9934, 9934, 2),
182 |     (9940, 9940, 2),
183 |     (9962, 9962, 2),
184 |     (9970, 9971, 2),
185 |     (9973, 9973, 2),
186 |     (9978, 9978, 2),
187 |     (9981, 9981, 2),
188 |     (9989, 9989, 2),
189 |     (9994, 9995, 2),
190 |     (10024, 10024, 2),
191 |     (10060, 10060, 2),
192 |     (10062, 10062, 2),
193 |     (10067, 10069, 2),
194 |     (10071, 10071, 2),
195 |     (10133, 10135, 2),
196 |     (10160, 10160, 2),
197 |     (10175, 10175, 2),
198 |     (11035, 11036, 2),
199 |     (11088, 11088, 2),
200 |     (11093, 11093, 2),
201 |     (11503, 11505, 0),
202 |     (11647, 11647, 0),
203 |     (11744, 11775, 0),
204 |     (11904, 11929, 2),
205 |     (11931, 12019, 2),
206 |     (12032, 12245, 2),
207 |     (12272, 12329, 2),
208 |     (12330, 12335, 0),
209 |     (12336, 12350, 2),
210 |     (12353, 12438, 2),
211 |     (12441, 12442, 0),
212 |     (12443, 12543, 2),
213 |     (12549, 12591, 2),
214 |     (12593, 12686, 2),
215 |     (12688, 12771, 2),
216 |     (12783, 12830, 2),
217 |     (12832, 12871, 2),
218 |     (12880, 19903, 2),
219 |     (19968, 42124, 2),
220 |     (42128, 42182, 2),
221 |     (42607, 42610, 0),
222 |     (42612, 42621, 0),
223 |     (42654, 42655, 0),
224 |     (42736, 42737, 0),
225 |     (43010, 43010, 0),
226 |     (43014, 43014, 0),
227 |     (43019, 43019, 0),
228 |     (43043, 43047, 0),
229 |     (43052, 43052, 0),
230 |     (43136, 43137, 0),
231 |     (43188, 43205, 0),
232 |     (43232, 43249, 0),
233 |     (43263, 43263, 0),
234 |     (43302, 43309, 0),
235 |     (43335, 43347, 0),
236 |     (43360, 43388, 2),
237 |     (43392, 43395, 0),
238 |     (43443, 43456, 0),
239 |     (43493, 43493, 0),
240 |     (43561, 43574, 0),
241 |     (43587, 43587, 0),
242 |     (43596, 43597, 0),
243 |     (43643, 43645, 0),
244 |     (43696, 43696, 0),
245 |     (43698, 43700, 0),
246 |     (43703, 43704, 0),
247 |     (43710, 43711, 0),
248 |     (43713, 43713, 0),
249 |     (43755, 43759, 0),
250 |     (43765, 43766, 0),
251 |     (44003, 44010, 0),
252 |     (44012, 44013, 0),
253 |     (44032, 55203, 2),
254 |     (55216, 55295, 0),
255 |     (63744, 64255, 2),
256 |     (64286, 64286, 0),
257 |     (65024, 65039, 0),
258 |     (65040, 65049, 2),
259 |     (65056, 65071, 0),
260 |     (65072, 65106, 2),
261 |     (65108, 65126, 2),
262 |     (65128, 65131, 2),
263 |     (65279, 65279, 0),
264 |     (65281, 65376, 2),
265 |     (65504, 65510, 2),
266 |     (65529, 65531, 0),
267 |     (66045, 66045, 0),
268 |     (66272, 66272, 0),
269 |     (66422, 66426, 0),
270 |     (68097, 68099, 0),
271 |     (68101, 68102, 0),
272 |     (68108, 68111, 0),
273 |     (68152, 68154, 0),
274 |     (68159, 68159, 0),
275 |     (68325, 68326, 0),
276 |     (68900, 68903, 0),
277 |     (69291, 69292, 0),
278 |     (69373, 69375, 0),
279 |     (69446, 69456, 0),
280 |     (69506, 69509, 0),
281 |     (69632, 69634, 0),
282 |     (69688, 69702, 0),
283 |     (69744, 69744, 0),
284 |     (69747, 69748, 0),
285 |     (69759, 69762, 0),
286 |     (69808, 69818, 0),
287 |     (69821, 69821, 0),
288 |     (69826, 69826, 0),
289 |     (69837, 69837, 0),
290 |     (69888, 69890, 0),
291 |     (69927, 69940, 0),
292 |     (69957, 69958, 0),
293 |     (70003, 70003, 0),
294 |     (70016, 70018, 0),
295 |     (70067, 70080, 0),
296 |     (70089, 70092, 0),
297 |     (70094, 70095, 0),
298 |     (70188, 70199, 0),
299 |     (70206, 70206, 0),
300 |     (70209, 70209, 0),
301 |     (70367, 70378, 0),
302 |     (70400, 70403, 0),
303 |     (70459, 70460, 0),
304 |     (70462, 70468, 0),
305 |     (70471, 70472, 0),
306 |     (70475, 70477, 0),
307 |     (70487, 70487, 0),
308 |     (70498, 70499, 0),
309 |     (70502, 70508, 0),
310 |     (70512, 70516, 0),
311 |     (70709, 70726, 0),
312 |     (70750, 70750, 0),
313 |     (70832, 70851, 0),
314 |     (71087, 71093, 0),
315 |     (71096, 71104, 0),
316 |     (71132, 71133, 0),
317 |     (71216, 71232, 0),
318 |     (71339, 71351, 0),
319 |     (71453, 71467, 0),
320 |     (71724, 71738, 0),
321 |     (71984, 71989, 0),
322 |     (71991, 71992, 0),
323 |     (71995, 71998, 0),
324 |     (72000, 72000, 0),
325 |     (72002, 72003, 0),
326 |     (72145, 72151, 0),
327 |     (72154, 72160, 0),
328 |     (72164, 72164, 0),
329 |     (72193, 72202, 0),
330 |     (72243, 72249, 0),
331 |     (72251, 72254, 0),
332 |     (72263, 72263, 0),
333 |     (72273, 72283, 0),
334 |     (72330, 72345, 0),
335 |     (72751, 72758, 0),
336 |     (72760, 72767, 0),
337 |     (72850, 72871, 0),
338 |     (72873, 72886, 0),
339 |     (73009, 73014, 0),
340 |     (73018, 73018, 0),
341 |     (73020, 73021, 0),
342 |     (73023, 73029, 0),
343 |     (73031, 73031, 0),
344 |     (73098, 73102, 0),
345 |     (73104, 73105, 0),
346 |     (73107, 73111, 0),
347 |     (73459, 73462, 0),
348 |     (73472, 73473, 0),
349 |     (73475, 73475, 0),
350 |     (73524, 73530, 0),
351 |     (73534, 73538, 0),
352 |     (78896, 78912, 0),
353 |     (78919, 78933, 0),
354 |     (92912, 92916, 0),
355 |     (92976, 92982, 0),
356 |     (94031, 94031, 0),
357 |     (94033, 94087, 0),
358 |     (94095, 94098, 0),
359 |     (94176, 94179, 2),
360 |     (94180, 94180, 0),
361 |     (94192, 94193, 0),
362 |     (94208, 100343, 2),
363 |     (100352, 101589, 2),
364 |     (101632, 101640, 2),
365 |     (110576, 110579, 2),
366 |     (110581, 110587, 2),
367 |     (110589, 110590, 2),
368 |     (110592, 110882, 2),
369 |     (110898, 110898, 2),
370 |     (110928, 110930, 2),
371 |     (110933, 110933, 2),
372 |     (110948, 110951, 2),
373 |     (110960, 111355, 2),
374 |     (113821, 113822, 0),
375 |     (113824, 113827, 0),
376 |     (118528, 118573, 0),
377 |     (118576, 118598, 0),
378 |     (119141, 119145, 0),
379 |     (119149, 119170, 0),
380 |     (119173, 119179, 0),
381 |     (119210, 119213, 0),
382 |     (119362, 119364, 0),
383 |     (121344, 121398, 0),
384 |     (121403, 121452, 0),
385 |     (121461, 121461, 0),
386 |     (121476, 121476, 0),
387 |     (121499, 121503, 0),
388 |     (121505, 121519, 0),
389 |     (122880, 122886, 0),
390 |     (122888, 122904, 0),
391 |     (122907, 122913, 0),
392 |     (122915, 122916, 0),
393 |     (122918, 122922, 0),
394 |     (123023, 123023, 0),
395 |     (123184, 123190, 0),
396 |     (123566, 123566, 0),
397 |     (123628, 123631, 0),
398 |     (124140, 124143, 0),
399 |     (125136, 125142, 0),
400 |     (125252, 125258, 0),
401 |     (126980, 126980, 2),
402 |     (127183, 127183, 2),
403 |     (127374, 127374, 2),
404 |     (127377, 127386, 2),
405 |     (127488, 127490, 2),
406 |     (127504, 127547, 2),
407 |     (127552, 127560, 2),
408 |     (127568, 127569, 2),
409 |     (127584, 127589, 2),
410 |     (127744, 127776, 2),
411 |     (127789, 127797, 2),
412 |     (127799, 127868, 2),
413 |     (127870, 127891, 2),
414 |     (127904, 127946, 2),
415 |     (127951, 127955, 2),
416 |     (127968, 127984, 2),
417 |     (127988, 127988, 2),
418 |     (127992, 127994, 2),
419 |     (127995, 127999, 0),
420 |     (128000, 128062, 2),
421 |     (128064, 128064, 2),
422 |     (128066, 128252, 2),
423 |     (128255, 128317, 2),
424 |     (128331, 128334, 2),
425 |     (128336, 128359, 2),
426 |     (128378, 128378, 2),
427 |     (128405, 128406, 2),
428 |     (128420, 128420, 2),
429 |     (128507, 128591, 2),
430 |     (128640, 128709, 2),
431 |     (128716, 128716, 2),
432 |     (128720, 128722, 2),
433 |     (128725, 128727, 2),
434 |     (128732, 128735, 2),
435 |     (128747, 128748, 2),
436 |     (128756, 128764, 2),
437 |     (128992, 129003, 2),
438 |     (129008, 129008, 2),
439 |     (129292, 129338, 2),
440 |     (129340, 129349, 2),
441 |     (129351, 129535, 2),
442 |     (129648, 129660, 2),
443 |     (129664, 129672, 2),
444 |     (129680, 129725, 2),
445 |     (129727, 129733, 2),
446 |     (129742, 129755, 2),
447 |     (129760, 129768, 2),
448 |     (129776, 129784, 2),
449 |     (131072, 196605, 2),
450 |     (196608, 262141, 2),
451 |     (917505, 917505, 0),
452 |     (917536, 917631, 0),
453 |     (917760, 917999, 0),
454 | ]
455 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py:
--------------------------------------------------------------------------------

```python
  1 | """Handwritten parser of dependency specifiers.
  2 | 
  3 | The docstring for each __parse_* function contains EBNF-inspired grammar representing
  4 | the implementation.
  5 | """
  6 | 
  7 | from __future__ import annotations
  8 | 
  9 | import ast
 10 | from typing import NamedTuple, Sequence, Tuple, Union
 11 | 
 12 | from ._tokenizer import DEFAULT_RULES, Tokenizer
 13 | 
 14 | 
 15 | class Node:
 16 |     def __init__(self, value: str) -> None:
 17 |         self.value = value
 18 | 
 19 |     def __str__(self) -> str:
 20 |         return self.value
 21 | 
 22 |     def __repr__(self) -> str:
 23 |         return f"<{self.__class__.__name__}('{self}')>"
 24 | 
 25 |     def serialize(self) -> str:
 26 |         raise NotImplementedError
 27 | 
 28 | 
 29 | class Variable(Node):
 30 |     def serialize(self) -> str:
 31 |         return str(self)
 32 | 
 33 | 
 34 | class Value(Node):
 35 |     def serialize(self) -> str:
 36 |         return f'"{self}"'
 37 | 
 38 | 
 39 | class Op(Node):
 40 |     def serialize(self) -> str:
 41 |         return str(self)
 42 | 
 43 | 
 44 | MarkerVar = Union[Variable, Value]
 45 | MarkerItem = Tuple[MarkerVar, Op, MarkerVar]
 46 | MarkerAtom = Union[MarkerItem, Sequence["MarkerAtom"]]
 47 | MarkerList = Sequence[Union["MarkerList", MarkerAtom, str]]
 48 | 
 49 | 
 50 | class ParsedRequirement(NamedTuple):
 51 |     name: str
 52 |     url: str
 53 |     extras: list[str]
 54 |     specifier: str
 55 |     marker: MarkerList | None
 56 | 
 57 | 
 58 | # --------------------------------------------------------------------------------------
 59 | # Recursive descent parser for dependency specifier
 60 | # --------------------------------------------------------------------------------------
 61 | def parse_requirement(source: str) -> ParsedRequirement:
 62 |     return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
 63 | 
 64 | 
 65 | def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement:
 66 |     """
 67 |     requirement = WS? IDENTIFIER WS? extras WS? requirement_details
 68 |     """
 69 |     tokenizer.consume("WS")
 70 | 
 71 |     name_token = tokenizer.expect(
 72 |         "IDENTIFIER", expected="package name at the start of dependency specifier"
 73 |     )
 74 |     name = name_token.text
 75 |     tokenizer.consume("WS")
 76 | 
 77 |     extras = _parse_extras(tokenizer)
 78 |     tokenizer.consume("WS")
 79 | 
 80 |     url, specifier, marker = _parse_requirement_details(tokenizer)
 81 |     tokenizer.expect("END", expected="end of dependency specifier")
 82 | 
 83 |     return ParsedRequirement(name, url, extras, specifier, marker)
 84 | 
 85 | 
 86 | def _parse_requirement_details(
 87 |     tokenizer: Tokenizer,
 88 | ) -> tuple[str, str, MarkerList | None]:
 89 |     """
 90 |     requirement_details = AT URL (WS requirement_marker?)?
 91 |                         | specifier WS? (requirement_marker)?
 92 |     """
 93 | 
 94 |     specifier = ""
 95 |     url = ""
 96 |     marker = None
 97 | 
 98 |     if tokenizer.check("AT"):
 99 |         tokenizer.read()
100 |         tokenizer.consume("WS")
101 | 
102 |         url_start = tokenizer.position
103 |         url = tokenizer.expect("URL", expected="URL after @").text
104 |         if tokenizer.check("END", peek=True):
105 |             return (url, specifier, marker)
106 | 
107 |         tokenizer.expect("WS", expected="whitespace after URL")
108 | 
109 |         # The input might end after whitespace.
110 |         if tokenizer.check("END", peek=True):
111 |             return (url, specifier, marker)
112 | 
113 |         marker = _parse_requirement_marker(
114 |             tokenizer, span_start=url_start, after="URL and whitespace"
115 |         )
116 |     else:
117 |         specifier_start = tokenizer.position
118 |         specifier = _parse_specifier(tokenizer)
119 |         tokenizer.consume("WS")
120 | 
121 |         if tokenizer.check("END", peek=True):
122 |             return (url, specifier, marker)
123 | 
124 |         marker = _parse_requirement_marker(
125 |             tokenizer,
126 |             span_start=specifier_start,
127 |             after=(
128 |                 "version specifier"
129 |                 if specifier
130 |                 else "name and no valid version specifier"
131 |             ),
132 |         )
133 | 
134 |     return (url, specifier, marker)
135 | 
136 | 
137 | def _parse_requirement_marker(
138 |     tokenizer: Tokenizer, *, span_start: int, after: str
139 | ) -> MarkerList:
140 |     """
141 |     requirement_marker = SEMICOLON marker WS?
142 |     """
143 | 
144 |     if not tokenizer.check("SEMICOLON"):
145 |         tokenizer.raise_syntax_error(
146 |             f"Expected end or semicolon (after {after})",
147 |             span_start=span_start,
148 |         )
149 |     tokenizer.read()
150 | 
151 |     marker = _parse_marker(tokenizer)
152 |     tokenizer.consume("WS")
153 | 
154 |     return marker
155 | 
156 | 
157 | def _parse_extras(tokenizer: Tokenizer) -> list[str]:
158 |     """
159 |     extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
160 |     """
161 |     if not tokenizer.check("LEFT_BRACKET", peek=True):
162 |         return []
163 | 
164 |     with tokenizer.enclosing_tokens(
165 |         "LEFT_BRACKET",
166 |         "RIGHT_BRACKET",
167 |         around="extras",
168 |     ):
169 |         tokenizer.consume("WS")
170 |         extras = _parse_extras_list(tokenizer)
171 |         tokenizer.consume("WS")
172 | 
173 |     return extras
174 | 
175 | 
176 | def _parse_extras_list(tokenizer: Tokenizer) -> list[str]:
177 |     """
178 |     extras_list = identifier (wsp* ',' wsp* identifier)*
179 |     """
180 |     extras: list[str] = []
181 | 
182 |     if not tokenizer.check("IDENTIFIER"):
183 |         return extras
184 | 
185 |     extras.append(tokenizer.read().text)
186 | 
187 |     while True:
188 |         tokenizer.consume("WS")
189 |         if tokenizer.check("IDENTIFIER", peek=True):
190 |             tokenizer.raise_syntax_error("Expected comma between extra names")
191 |         elif not tokenizer.check("COMMA"):
192 |             break
193 | 
194 |         tokenizer.read()
195 |         tokenizer.consume("WS")
196 | 
197 |         extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma")
198 |         extras.append(extra_token.text)
199 | 
200 |     return extras
201 | 
202 | 
203 | def _parse_specifier(tokenizer: Tokenizer) -> str:
204 |     """
205 |     specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
206 |               | WS? version_many WS?
207 |     """
208 |     with tokenizer.enclosing_tokens(
209 |         "LEFT_PARENTHESIS",
210 |         "RIGHT_PARENTHESIS",
211 |         around="version specifier",
212 |     ):
213 |         tokenizer.consume("WS")
214 |         parsed_specifiers = _parse_version_many(tokenizer)
215 |         tokenizer.consume("WS")
216 | 
217 |     return parsed_specifiers
218 | 
219 | 
220 | def _parse_version_many(tokenizer: Tokenizer) -> str:
221 |     """
222 |     version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
223 |     """
224 |     parsed_specifiers = ""
225 |     while tokenizer.check("SPECIFIER"):
226 |         span_start = tokenizer.position
227 |         parsed_specifiers += tokenizer.read().text
228 |         if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True):
229 |             tokenizer.raise_syntax_error(
230 |                 ".* suffix can only be used with `==` or `!=` operators",
231 |                 span_start=span_start,
232 |                 span_end=tokenizer.position + 1,
233 |             )
234 |         if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True):
235 |             tokenizer.raise_syntax_error(
236 |                 "Local version label can only be used with `==` or `!=` operators",
237 |                 span_start=span_start,
238 |                 span_end=tokenizer.position,
239 |             )
240 |         tokenizer.consume("WS")
241 |         if not tokenizer.check("COMMA"):
242 |             break
243 |         parsed_specifiers += tokenizer.read().text
244 |         tokenizer.consume("WS")
245 | 
246 |     return parsed_specifiers
247 | 
248 | 
249 | # --------------------------------------------------------------------------------------
250 | # Recursive descent parser for marker expression
251 | # --------------------------------------------------------------------------------------
252 | def parse_marker(source: str) -> MarkerList:
253 |     return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES))
254 | 
255 | 
256 | def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList:
257 |     retval = _parse_marker(tokenizer)
258 |     tokenizer.expect("END", expected="end of marker expression")
259 |     return retval
260 | 
261 | 
262 | def _parse_marker(tokenizer: Tokenizer) -> MarkerList:
263 |     """
264 |     marker = marker_atom (BOOLOP marker_atom)+
265 |     """
266 |     expression = [_parse_marker_atom(tokenizer)]
267 |     while tokenizer.check("BOOLOP"):
268 |         token = tokenizer.read()
269 |         expr_right = _parse_marker_atom(tokenizer)
270 |         expression.extend((token.text, expr_right))
271 |     return expression
272 | 
273 | 
274 | def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom:
275 |     """
276 |     marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
277 |                 | WS? marker_item WS?
278 |     """
279 | 
280 |     tokenizer.consume("WS")
281 |     if tokenizer.check("LEFT_PARENTHESIS", peek=True):
282 |         with tokenizer.enclosing_tokens(
283 |             "LEFT_PARENTHESIS",
284 |             "RIGHT_PARENTHESIS",
285 |             around="marker expression",
286 |         ):
287 |             tokenizer.consume("WS")
288 |             marker: MarkerAtom = _parse_marker(tokenizer)
289 |             tokenizer.consume("WS")
290 |     else:
291 |         marker = _parse_marker_item(tokenizer)
292 |     tokenizer.consume("WS")
293 |     return marker
294 | 
295 | 
296 | def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem:
297 |     """
298 |     marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
299 |     """
300 |     tokenizer.consume("WS")
301 |     marker_var_left = _parse_marker_var(tokenizer)
302 |     tokenizer.consume("WS")
303 |     marker_op = _parse_marker_op(tokenizer)
304 |     tokenizer.consume("WS")
305 |     marker_var_right = _parse_marker_var(tokenizer)
306 |     tokenizer.consume("WS")
307 |     return (marker_var_left, marker_op, marker_var_right)
308 | 
309 | 
310 | def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar:
311 |     """
312 |     marker_var = VARIABLE | QUOTED_STRING
313 |     """
314 |     if tokenizer.check("VARIABLE"):
315 |         return process_env_var(tokenizer.read().text.replace(".", "_"))
316 |     elif tokenizer.check("QUOTED_STRING"):
317 |         return process_python_str(tokenizer.read().text)
318 |     else:
319 |         tokenizer.raise_syntax_error(
320 |             message="Expected a marker variable or quoted string"
321 |         )
322 | 
323 | 
324 | def process_env_var(env_var: str) -> Variable:
325 |     if env_var in ("platform_python_implementation", "python_implementation"):
326 |         return Variable("platform_python_implementation")
327 |     else:
328 |         return Variable(env_var)
329 | 
330 | 
331 | def process_python_str(python_str: str) -> Value:
332 |     value = ast.literal_eval(python_str)
333 |     return Value(str(value))
334 | 
335 | 
336 | def _parse_marker_op(tokenizer: Tokenizer) -> Op:
337 |     """
338 |     marker_op = IN | NOT IN | OP
339 |     """
340 |     if tokenizer.check("IN"):
341 |         tokenizer.read()
342 |         return Op("in")
343 |     elif tokenizer.check("NOT"):
344 |         tokenizer.read()
345 |         tokenizer.expect("WS", expected="whitespace after 'not'")
346 |         tokenizer.expect("IN", expected="'in' after 'not'")
347 |         return Op("not in")
348 |     elif tokenizer.check("OP"):
349 |         return Op(tokenizer.read().text)
350 |     else:
351 |         return tokenizer.raise_syntax_error(
352 |             "Expected marker operator, one of "
353 |             "<=, <, !=, ==, >=, >, ~=, ===, in, not in"
354 |         )
355 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/util/timeout.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import time
  4 | import typing
  5 | from enum import Enum
  6 | from socket import getdefaulttimeout
  7 | 
  8 | from ..exceptions import TimeoutStateError
  9 | 
 10 | if typing.TYPE_CHECKING:
 11 |     from typing import Final
 12 | 
 13 | 
 14 | class _TYPE_DEFAULT(Enum):
 15 |     # This value should never be passed to socket.settimeout() so for safety we use a -1.
 16 |     # socket.settimout() raises a ValueError for negative values.
 17 |     token = -1
 18 | 
 19 | 
 20 | _DEFAULT_TIMEOUT: Final[_TYPE_DEFAULT] = _TYPE_DEFAULT.token
 21 | 
 22 | _TYPE_TIMEOUT = typing.Optional[typing.Union[float, _TYPE_DEFAULT]]
 23 | 
 24 | 
 25 | class Timeout:
 26 |     """Timeout configuration.
 27 | 
 28 |     Timeouts can be defined as a default for a pool:
 29 | 
 30 |     .. code-block:: python
 31 | 
 32 |         import urllib3
 33 | 
 34 |         timeout = urllib3.util.Timeout(connect=2.0, read=7.0)
 35 | 
 36 |         http = urllib3.PoolManager(timeout=timeout)
 37 | 
 38 |         resp = http.request("GET", "https://example.com/")
 39 | 
 40 |         print(resp.status)
 41 | 
 42 |     Or per-request (which overrides the default for the pool):
 43 | 
 44 |     .. code-block:: python
 45 | 
 46 |        response = http.request("GET", "https://example.com/", timeout=Timeout(10))
 47 | 
 48 |     Timeouts can be disabled by setting all the parameters to ``None``:
 49 | 
 50 |     .. code-block:: python
 51 | 
 52 |        no_timeout = Timeout(connect=None, read=None)
 53 |        response = http.request("GET", "https://example.com/", timeout=no_timeout)
 54 | 
 55 | 
 56 |     :param total:
 57 |         This combines the connect and read timeouts into one; the read timeout
 58 |         will be set to the time leftover from the connect attempt. In the
 59 |         event that both a connect timeout and a total are specified, or a read
 60 |         timeout and a total are specified, the shorter timeout will be applied.
 61 | 
 62 |         Defaults to None.
 63 | 
 64 |     :type total: int, float, or None
 65 | 
 66 |     :param connect:
 67 |         The maximum amount of time (in seconds) to wait for a connection
 68 |         attempt to a server to succeed. Omitting the parameter will default the
 69 |         connect timeout to the system default, probably `the global default
 70 |         timeout in socket.py
 71 |         <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
 72 |         None will set an infinite timeout for connection attempts.
 73 | 
 74 |     :type connect: int, float, or None
 75 | 
 76 |     :param read:
 77 |         The maximum amount of time (in seconds) to wait between consecutive
 78 |         read operations for a response from the server. Omitting the parameter
 79 |         will default the read timeout to the system default, probably `the
 80 |         global default timeout in socket.py
 81 |         <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
 82 |         None will set an infinite timeout.
 83 | 
 84 |     :type read: int, float, or None
 85 | 
 86 |     .. note::
 87 | 
 88 |         Many factors can affect the total amount of time for urllib3 to return
 89 |         an HTTP response.
 90 | 
 91 |         For example, Python's DNS resolver does not obey the timeout specified
 92 |         on the socket. Other factors that can affect total request time include
 93 |         high CPU load, high swap, the program running at a low priority level,
 94 |         or other behaviors.
 95 | 
 96 |         In addition, the read and total timeouts only measure the time between
 97 |         read operations on the socket connecting the client and the server,
 98 |         not the total amount of time for the request to return a complete
 99 |         response. For most requests, the timeout is raised because the server
100 |         has not sent the first byte in the specified time. This is not always
101 |         the case; if a server streams one byte every fifteen seconds, a timeout
102 |         of 20 seconds will not trigger, even though the request will take
103 |         several minutes to complete.
104 |     """
105 | 
106 |     #: A sentinel object representing the default timeout value
107 |     DEFAULT_TIMEOUT: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT
108 | 
109 |     def __init__(
110 |         self,
111 |         total: _TYPE_TIMEOUT = None,
112 |         connect: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
113 |         read: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
114 |     ) -> None:
115 |         self._connect = self._validate_timeout(connect, "connect")
116 |         self._read = self._validate_timeout(read, "read")
117 |         self.total = self._validate_timeout(total, "total")
118 |         self._start_connect: float | None = None
119 | 
120 |     def __repr__(self) -> str:
121 |         return f"{type(self).__name__}(connect={self._connect!r}, read={self._read!r}, total={self.total!r})"
122 | 
123 |     # __str__ provided for backwards compatibility
124 |     __str__ = __repr__
125 | 
126 |     @staticmethod
127 |     def resolve_default_timeout(timeout: _TYPE_TIMEOUT) -> float | None:
128 |         return getdefaulttimeout() if timeout is _DEFAULT_TIMEOUT else timeout
129 | 
130 |     @classmethod
131 |     def _validate_timeout(cls, value: _TYPE_TIMEOUT, name: str) -> _TYPE_TIMEOUT:
132 |         """Check that a timeout attribute is valid.
133 | 
134 |         :param value: The timeout value to validate
135 |         :param name: The name of the timeout attribute to validate. This is
136 |             used to specify in error messages.
137 |         :return: The validated and casted version of the given value.
138 |         :raises ValueError: If it is a numeric value less than or equal to
139 |             zero, or the type is not an integer, float, or None.
140 |         """
141 |         if value is None or value is _DEFAULT_TIMEOUT:
142 |             return value
143 | 
144 |         if isinstance(value, bool):
145 |             raise ValueError(
146 |                 "Timeout cannot be a boolean value. It must "
147 |                 "be an int, float or None."
148 |             )
149 |         try:
150 |             float(value)
151 |         except (TypeError, ValueError):
152 |             raise ValueError(
153 |                 "Timeout value %s was %s, but it must be an "
154 |                 "int, float or None." % (name, value)
155 |             ) from None
156 | 
157 |         try:
158 |             if value <= 0:
159 |                 raise ValueError(
160 |                     "Attempted to set %s timeout to %s, but the "
161 |                     "timeout cannot be set to a value less "
162 |                     "than or equal to 0." % (name, value)
163 |                 )
164 |         except TypeError:
165 |             raise ValueError(
166 |                 "Timeout value %s was %s, but it must be an "
167 |                 "int, float or None." % (name, value)
168 |             ) from None
169 | 
170 |         return value
171 | 
172 |     @classmethod
173 |     def from_float(cls, timeout: _TYPE_TIMEOUT) -> Timeout:
174 |         """Create a new Timeout from a legacy timeout value.
175 | 
176 |         The timeout value used by httplib.py sets the same timeout on the
177 |         connect(), and recv() socket requests. This creates a :class:`Timeout`
178 |         object that sets the individual timeouts to the ``timeout`` value
179 |         passed to this function.
180 | 
181 |         :param timeout: The legacy timeout value.
182 |         :type timeout: integer, float, :attr:`urllib3.util.Timeout.DEFAULT_TIMEOUT`, or None
183 |         :return: Timeout object
184 |         :rtype: :class:`Timeout`
185 |         """
186 |         return Timeout(read=timeout, connect=timeout)
187 | 
188 |     def clone(self) -> Timeout:
189 |         """Create a copy of the timeout object
190 | 
191 |         Timeout properties are stored per-pool but each request needs a fresh
192 |         Timeout object to ensure each one has its own start/stop configured.
193 | 
194 |         :return: a copy of the timeout object
195 |         :rtype: :class:`Timeout`
196 |         """
197 |         # We can't use copy.deepcopy because that will also create a new object
198 |         # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to
199 |         # detect the user default.
200 |         return Timeout(connect=self._connect, read=self._read, total=self.total)
201 | 
202 |     def start_connect(self) -> float:
203 |         """Start the timeout clock, used during a connect() attempt
204 | 
205 |         :raises urllib3.exceptions.TimeoutStateError: if you attempt
206 |             to start a timer that has been started already.
207 |         """
208 |         if self._start_connect is not None:
209 |             raise TimeoutStateError("Timeout timer has already been started.")
210 |         self._start_connect = time.monotonic()
211 |         return self._start_connect
212 | 
213 |     def get_connect_duration(self) -> float:
214 |         """Gets the time elapsed since the call to :meth:`start_connect`.
215 | 
216 |         :return: Elapsed time in seconds.
217 |         :rtype: float
218 |         :raises urllib3.exceptions.TimeoutStateError: if you attempt
219 |             to get duration for a timer that hasn't been started.
220 |         """
221 |         if self._start_connect is None:
222 |             raise TimeoutStateError(
223 |                 "Can't get connect duration for timer that has not started."
224 |             )
225 |         return time.monotonic() - self._start_connect
226 | 
227 |     @property
228 |     def connect_timeout(self) -> _TYPE_TIMEOUT:
229 |         """Get the value to use when setting a connection timeout.
230 | 
231 |         This will be a positive float or integer, the value None
232 |         (never timeout), or the default system timeout.
233 | 
234 |         :return: Connect timeout.
235 |         :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
236 |         """
237 |         if self.total is None:
238 |             return self._connect
239 | 
240 |         if self._connect is None or self._connect is _DEFAULT_TIMEOUT:
241 |             return self.total
242 | 
243 |         return min(self._connect, self.total)  # type: ignore[type-var]
244 | 
245 |     @property
246 |     def read_timeout(self) -> float | None:
247 |         """Get the value for the read timeout.
248 | 
249 |         This assumes some time has elapsed in the connection timeout and
250 |         computes the read timeout appropriately.
251 | 
252 |         If self.total is set, the read timeout is dependent on the amount of
253 |         time taken by the connect timeout. If the connection time has not been
254 |         established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be
255 |         raised.
256 | 
257 |         :return: Value to use for the read timeout.
258 |         :rtype: int, float or None
259 |         :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect`
260 |             has not yet been called on this object.
261 |         """
262 |         if (
263 |             self.total is not None
264 |             and self.total is not _DEFAULT_TIMEOUT
265 |             and self._read is not None
266 |             and self._read is not _DEFAULT_TIMEOUT
267 |         ):
268 |             # In case the connect timeout has not yet been established.
269 |             if self._start_connect is None:
270 |                 return self._read
271 |             return max(0, min(self.total - self.get_connect_duration(), self._read))
272 |         elif self.total is not None and self.total is not _DEFAULT_TIMEOUT:
273 |             return max(0, self.total - self.get_connect_duration())
274 |         else:
275 |             return self.resolve_default_timeout(self._read)
276 | 
```
Page 38/168FirstPrevNextLast