#
tokens: 44246/50000 1/808 files (page 132/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 132 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/urllib3/connectionpool.py:
--------------------------------------------------------------------------------

```python
   1 | from __future__ import annotations
   2 | 
   3 | import errno
   4 | import logging
   5 | import queue
   6 | import sys
   7 | import typing
   8 | import warnings
   9 | import weakref
  10 | from socket import timeout as SocketTimeout
  11 | from types import TracebackType
  12 | 
  13 | from ._base_connection import _TYPE_BODY
  14 | from ._collections import HTTPHeaderDict
  15 | from ._request_methods import RequestMethods
  16 | from .connection import (
  17 |     BaseSSLError,
  18 |     BrokenPipeError,
  19 |     DummyConnection,
  20 |     HTTPConnection,
  21 |     HTTPException,
  22 |     HTTPSConnection,
  23 |     ProxyConfig,
  24 |     _wrap_proxy_error,
  25 | )
  26 | from .connection import port_by_scheme as port_by_scheme
  27 | from .exceptions import (
  28 |     ClosedPoolError,
  29 |     EmptyPoolError,
  30 |     FullPoolError,
  31 |     HostChangedError,
  32 |     InsecureRequestWarning,
  33 |     LocationValueError,
  34 |     MaxRetryError,
  35 |     NewConnectionError,
  36 |     ProtocolError,
  37 |     ProxyError,
  38 |     ReadTimeoutError,
  39 |     SSLError,
  40 |     TimeoutError,
  41 | )
  42 | from .response import BaseHTTPResponse
  43 | from .util.connection import is_connection_dropped
  44 | from .util.proxy import connection_requires_http_tunnel
  45 | from .util.request import _TYPE_BODY_POSITION, set_file_position
  46 | from .util.retry import Retry
  47 | from .util.ssl_match_hostname import CertificateError
  48 | from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_DEFAULT, Timeout
  49 | from .util.url import Url, _encode_target
  50 | from .util.url import _normalize_host as normalize_host
  51 | from .util.url import parse_url
  52 | from .util.util import to_str
  53 | 
  54 | if typing.TYPE_CHECKING:
  55 |     import ssl
  56 | 
  57 |     from typing_extensions import Self
  58 | 
  59 |     from ._base_connection import BaseHTTPConnection, BaseHTTPSConnection
  60 | 
  61 | log = logging.getLogger(__name__)
  62 | 
  63 | _TYPE_TIMEOUT = typing.Union[Timeout, float, _TYPE_DEFAULT, None]
  64 | 
  65 | 
  66 | # Pool objects
  67 | class ConnectionPool:
  68 |     """
  69 |     Base class for all connection pools, such as
  70 |     :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`.
  71 | 
  72 |     .. note::
  73 |        ConnectionPool.urlopen() does not normalize or percent-encode target URIs
  74 |        which is useful if your target server doesn't support percent-encoded
  75 |        target URIs.
  76 |     """
  77 | 
  78 |     scheme: str | None = None
  79 |     QueueCls = queue.LifoQueue
  80 | 
  81 |     def __init__(self, host: str, port: int | None = None) -> None:
  82 |         if not host:
  83 |             raise LocationValueError("No host specified.")
  84 | 
  85 |         self.host = _normalize_host(host, scheme=self.scheme)
  86 |         self.port = port
  87 | 
  88 |         # This property uses 'normalize_host()' (not '_normalize_host()')
  89 |         # to avoid removing square braces around IPv6 addresses.
  90 |         # This value is sent to `HTTPConnection.set_tunnel()` if called
  91 |         # because square braces are required for HTTP CONNECT tunneling.
  92 |         self._tunnel_host = normalize_host(host, scheme=self.scheme).lower()
  93 | 
  94 |     def __str__(self) -> str:
  95 |         return f"{type(self).__name__}(host={self.host!r}, port={self.port!r})"
  96 | 
  97 |     def __enter__(self) -> Self:
  98 |         return self
  99 | 
 100 |     def __exit__(
 101 |         self,
 102 |         exc_type: type[BaseException] | None,
 103 |         exc_val: BaseException | None,
 104 |         exc_tb: TracebackType | None,
 105 |     ) -> typing.Literal[False]:
 106 |         self.close()
 107 |         # Return False to re-raise any potential exceptions
 108 |         return False
 109 | 
 110 |     def close(self) -> None:
 111 |         """
 112 |         Close all pooled connections and disable the pool.
 113 |         """
 114 | 
 115 | 
 116 | # This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252
 117 | _blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK}
 118 | 
 119 | 
 120 | class HTTPConnectionPool(ConnectionPool, RequestMethods):
 121 |     """
 122 |     Thread-safe connection pool for one host.
 123 | 
 124 |     :param host:
 125 |         Host used for this HTTP Connection (e.g. "localhost"), passed into
 126 |         :class:`http.client.HTTPConnection`.
 127 | 
 128 |     :param port:
 129 |         Port used for this HTTP Connection (None is equivalent to 80), passed
 130 |         into :class:`http.client.HTTPConnection`.
 131 | 
 132 |     :param timeout:
 133 |         Socket timeout in seconds for each individual connection. This can
 134 |         be a float or integer, which sets the timeout for the HTTP request,
 135 |         or an instance of :class:`urllib3.util.Timeout` which gives you more
 136 |         fine-grained control over request timeouts. After the constructor has
 137 |         been parsed, this is always a `urllib3.util.Timeout` object.
 138 | 
 139 |     :param maxsize:
 140 |         Number of connections to save that can be reused. More than 1 is useful
 141 |         in multithreaded situations. If ``block`` is set to False, more
 142 |         connections will be created but they will not be saved once they've
 143 |         been used.
 144 | 
 145 |     :param block:
 146 |         If set to True, no more than ``maxsize`` connections will be used at
 147 |         a time. When no free connections are available, the call will block
 148 |         until a connection has been released. This is a useful side effect for
 149 |         particular multithreaded situations where one does not want to use more
 150 |         than maxsize connections per host to prevent flooding.
 151 | 
 152 |     :param headers:
 153 |         Headers to include with all requests, unless other headers are given
 154 |         explicitly.
 155 | 
 156 |     :param retries:
 157 |         Retry configuration to use by default with requests in this pool.
 158 | 
 159 |     :param _proxy:
 160 |         Parsed proxy URL, should not be used directly, instead, see
 161 |         :class:`urllib3.ProxyManager`
 162 | 
 163 |     :param _proxy_headers:
 164 |         A dictionary with proxy headers, should not be used directly,
 165 |         instead, see :class:`urllib3.ProxyManager`
 166 | 
 167 |     :param \\**conn_kw:
 168 |         Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`,
 169 |         :class:`urllib3.connection.HTTPSConnection` instances.
 170 |     """
 171 | 
 172 |     scheme = "http"
 173 |     ConnectionCls: (
 174 |         type[BaseHTTPConnection] | type[BaseHTTPSConnection]
 175 |     ) = HTTPConnection
 176 | 
 177 |     def __init__(
 178 |         self,
 179 |         host: str,
 180 |         port: int | None = None,
 181 |         timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT,
 182 |         maxsize: int = 1,
 183 |         block: bool = False,
 184 |         headers: typing.Mapping[str, str] | None = None,
 185 |         retries: Retry | bool | int | None = None,
 186 |         _proxy: Url | None = None,
 187 |         _proxy_headers: typing.Mapping[str, str] | None = None,
 188 |         _proxy_config: ProxyConfig | None = None,
 189 |         **conn_kw: typing.Any,
 190 |     ):
 191 |         ConnectionPool.__init__(self, host, port)
 192 |         RequestMethods.__init__(self, headers)
 193 | 
 194 |         if not isinstance(timeout, Timeout):
 195 |             timeout = Timeout.from_float(timeout)
 196 | 
 197 |         if retries is None:
 198 |             retries = Retry.DEFAULT
 199 | 
 200 |         self.timeout = timeout
 201 |         self.retries = retries
 202 | 
 203 |         self.pool: queue.LifoQueue[typing.Any] | None = self.QueueCls(maxsize)
 204 |         self.block = block
 205 | 
 206 |         self.proxy = _proxy
 207 |         self.proxy_headers = _proxy_headers or {}
 208 |         self.proxy_config = _proxy_config
 209 | 
 210 |         # Fill the queue up so that doing get() on it will block properly
 211 |         for _ in range(maxsize):
 212 |             self.pool.put(None)
 213 | 
 214 |         # These are mostly for testing and debugging purposes.
 215 |         self.num_connections = 0
 216 |         self.num_requests = 0
 217 |         self.conn_kw = conn_kw
 218 | 
 219 |         if self.proxy:
 220 |             # Enable Nagle's algorithm for proxies, to avoid packet fragmentation.
 221 |             # We cannot know if the user has added default socket options, so we cannot replace the
 222 |             # list.
 223 |             self.conn_kw.setdefault("socket_options", [])
 224 | 
 225 |             self.conn_kw["proxy"] = self.proxy
 226 |             self.conn_kw["proxy_config"] = self.proxy_config
 227 | 
 228 |         # Do not pass 'self' as callback to 'finalize'.
 229 |         # Then the 'finalize' would keep an endless living (leak) to self.
 230 |         # By just passing a reference to the pool allows the garbage collector
 231 |         # to free self if nobody else has a reference to it.
 232 |         pool = self.pool
 233 | 
 234 |         # Close all the HTTPConnections in the pool before the
 235 |         # HTTPConnectionPool object is garbage collected.
 236 |         weakref.finalize(self, _close_pool_connections, pool)
 237 | 
 238 |     def _new_conn(self) -> BaseHTTPConnection:
 239 |         """
 240 |         Return a fresh :class:`HTTPConnection`.
 241 |         """
 242 |         self.num_connections += 1
 243 |         log.debug(
 244 |             "Starting new HTTP connection (%d): %s:%s",
 245 |             self.num_connections,
 246 |             self.host,
 247 |             self.port or "80",
 248 |         )
 249 | 
 250 |         conn = self.ConnectionCls(
 251 |             host=self.host,
 252 |             port=self.port,
 253 |             timeout=self.timeout.connect_timeout,
 254 |             **self.conn_kw,
 255 |         )
 256 |         return conn
 257 | 
 258 |     def _get_conn(self, timeout: float | None = None) -> BaseHTTPConnection:
 259 |         """
 260 |         Get a connection. Will return a pooled connection if one is available.
 261 | 
 262 |         If no connections are available and :prop:`.block` is ``False``, then a
 263 |         fresh connection is returned.
 264 | 
 265 |         :param timeout:
 266 |             Seconds to wait before giving up and raising
 267 |             :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and
 268 |             :prop:`.block` is ``True``.
 269 |         """
 270 |         conn = None
 271 | 
 272 |         if self.pool is None:
 273 |             raise ClosedPoolError(self, "Pool is closed.")
 274 | 
 275 |         try:
 276 |             conn = self.pool.get(block=self.block, timeout=timeout)
 277 | 
 278 |         except AttributeError:  # self.pool is None
 279 |             raise ClosedPoolError(self, "Pool is closed.") from None  # Defensive:
 280 | 
 281 |         except queue.Empty:
 282 |             if self.block:
 283 |                 raise EmptyPoolError(
 284 |                     self,
 285 |                     "Pool is empty and a new connection can't be opened due to blocking mode.",
 286 |                 ) from None
 287 |             pass  # Oh well, we'll create a new connection then
 288 | 
 289 |         # If this is a persistent connection, check if it got disconnected
 290 |         if conn and is_connection_dropped(conn):
 291 |             log.debug("Resetting dropped connection: %s", self.host)
 292 |             conn.close()
 293 | 
 294 |         return conn or self._new_conn()
 295 | 
 296 |     def _put_conn(self, conn: BaseHTTPConnection | None) -> None:
 297 |         """
 298 |         Put a connection back into the pool.
 299 | 
 300 |         :param conn:
 301 |             Connection object for the current host and port as returned by
 302 |             :meth:`._new_conn` or :meth:`._get_conn`.
 303 | 
 304 |         If the pool is already full, the connection is closed and discarded
 305 |         because we exceeded maxsize. If connections are discarded frequently,
 306 |         then maxsize should be increased.
 307 | 
 308 |         If the pool is closed, then the connection will be closed and discarded.
 309 |         """
 310 |         if self.pool is not None:
 311 |             try:
 312 |                 self.pool.put(conn, block=False)
 313 |                 return  # Everything is dandy, done.
 314 |             except AttributeError:
 315 |                 # self.pool is None.
 316 |                 pass
 317 |             except queue.Full:
 318 |                 # Connection never got put back into the pool, close it.
 319 |                 if conn:
 320 |                     conn.close()
 321 | 
 322 |                 if self.block:
 323 |                     # This should never happen if you got the conn from self._get_conn
 324 |                     raise FullPoolError(
 325 |                         self,
 326 |                         "Pool reached maximum size and no more connections are allowed.",
 327 |                     ) from None
 328 | 
 329 |                 log.warning(
 330 |                     "Connection pool is full, discarding connection: %s. Connection pool size: %s",
 331 |                     self.host,
 332 |                     self.pool.qsize(),
 333 |                 )
 334 | 
 335 |         # Connection never got put back into the pool, close it.
 336 |         if conn:
 337 |             conn.close()
 338 | 
 339 |     def _validate_conn(self, conn: BaseHTTPConnection) -> None:
 340 |         """
 341 |         Called right before a request is made, after the socket is created.
 342 |         """
 343 | 
 344 |     def _prepare_proxy(self, conn: BaseHTTPConnection) -> None:
 345 |         # Nothing to do for HTTP connections.
 346 |         pass
 347 | 
 348 |     def _get_timeout(self, timeout: _TYPE_TIMEOUT) -> Timeout:
 349 |         """Helper that always returns a :class:`urllib3.util.Timeout`"""
 350 |         if timeout is _DEFAULT_TIMEOUT:
 351 |             return self.timeout.clone()
 352 | 
 353 |         if isinstance(timeout, Timeout):
 354 |             return timeout.clone()
 355 |         else:
 356 |             # User passed us an int/float. This is for backwards compatibility,
 357 |             # can be removed later
 358 |             return Timeout.from_float(timeout)
 359 | 
 360 |     def _raise_timeout(
 361 |         self,
 362 |         err: BaseSSLError | OSError | SocketTimeout,
 363 |         url: str,
 364 |         timeout_value: _TYPE_TIMEOUT | None,
 365 |     ) -> None:
 366 |         """Is the error actually a timeout? Will raise a ReadTimeout or pass"""
 367 | 
 368 |         if isinstance(err, SocketTimeout):
 369 |             raise ReadTimeoutError(
 370 |                 self, url, f"Read timed out. (read timeout={timeout_value})"
 371 |             ) from err
 372 | 
 373 |         # See the above comment about EAGAIN in Python 3.
 374 |         if hasattr(err, "errno") and err.errno in _blocking_errnos:
 375 |             raise ReadTimeoutError(
 376 |                 self, url, f"Read timed out. (read timeout={timeout_value})"
 377 |             ) from err
 378 | 
 379 |     def _make_request(
 380 |         self,
 381 |         conn: BaseHTTPConnection,
 382 |         method: str,
 383 |         url: str,
 384 |         body: _TYPE_BODY | None = None,
 385 |         headers: typing.Mapping[str, str] | None = None,
 386 |         retries: Retry | None = None,
 387 |         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
 388 |         chunked: bool = False,
 389 |         response_conn: BaseHTTPConnection | None = None,
 390 |         preload_content: bool = True,
 391 |         decode_content: bool = True,
 392 |         enforce_content_length: bool = True,
 393 |     ) -> BaseHTTPResponse:
 394 |         """
 395 |         Perform a request on a given urllib connection object taken from our
 396 |         pool.
 397 | 
 398 |         :param conn:
 399 |             a connection from one of our connection pools
 400 | 
 401 |         :param method:
 402 |             HTTP request method (such as GET, POST, PUT, etc.)
 403 | 
 404 |         :param url:
 405 |             The URL to perform the request on.
 406 | 
 407 |         :param body:
 408 |             Data to send in the request body, either :class:`str`, :class:`bytes`,
 409 |             an iterable of :class:`str`/:class:`bytes`, or a file-like object.
 410 | 
 411 |         :param headers:
 412 |             Dictionary of custom headers to send, such as User-Agent,
 413 |             If-None-Match, etc. If None, pool headers are used. If provided,
 414 |             these headers completely replace any pool-specific headers.
 415 | 
 416 |         :param retries:
 417 |             Configure the number of retries to allow before raising a
 418 |             :class:`~urllib3.exceptions.MaxRetryError` exception.
 419 | 
 420 |             Pass ``None`` to retry until you receive a response. Pass a
 421 |             :class:`~urllib3.util.retry.Retry` object for fine-grained control
 422 |             over different types of retries.
 423 |             Pass an integer number to retry connection errors that many times,
 424 |             but no other types of errors. Pass zero to never retry.
 425 | 
 426 |             If ``False``, then retries are disabled and any exception is raised
 427 |             immediately. Also, instead of raising a MaxRetryError on redirects,
 428 |             the redirect response will be returned.
 429 | 
 430 |         :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
 431 | 
 432 |         :param timeout:
 433 |             If specified, overrides the default timeout for this one
 434 |             request. It may be a float (in seconds) or an instance of
 435 |             :class:`urllib3.util.Timeout`.
 436 | 
 437 |         :param chunked:
 438 |             If True, urllib3 will send the body using chunked transfer
 439 |             encoding. Otherwise, urllib3 will send the body using the standard
 440 |             content-length form. Defaults to False.
 441 | 
 442 |         :param response_conn:
 443 |             Set this to ``None`` if you will handle releasing the connection or
 444 |             set the connection to have the response release it.
 445 | 
 446 |         :param preload_content:
 447 |           If True, the response's body will be preloaded during construction.
 448 | 
 449 |         :param decode_content:
 450 |             If True, will attempt to decode the body based on the
 451 |             'content-encoding' header.
 452 | 
 453 |         :param enforce_content_length:
 454 |             Enforce content length checking. Body returned by server must match
 455 |             value of Content-Length header, if present. Otherwise, raise error.
 456 |         """
 457 |         self.num_requests += 1
 458 | 
 459 |         timeout_obj = self._get_timeout(timeout)
 460 |         timeout_obj.start_connect()
 461 |         conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout)
 462 | 
 463 |         try:
 464 |             # Trigger any extra validation we need to do.
 465 |             try:
 466 |                 self._validate_conn(conn)
 467 |             except (SocketTimeout, BaseSSLError) as e:
 468 |                 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
 469 |                 raise
 470 | 
 471 |         # _validate_conn() starts the connection to an HTTPS proxy
 472 |         # so we need to wrap errors with 'ProxyError' here too.
 473 |         except (
 474 |             OSError,
 475 |             NewConnectionError,
 476 |             TimeoutError,
 477 |             BaseSSLError,
 478 |             CertificateError,
 479 |             SSLError,
 480 |         ) as e:
 481 |             new_e: Exception = e
 482 |             if isinstance(e, (BaseSSLError, CertificateError)):
 483 |                 new_e = SSLError(e)
 484 |             # If the connection didn't successfully connect to it's proxy
 485 |             # then there
 486 |             if isinstance(
 487 |                 new_e, (OSError, NewConnectionError, TimeoutError, SSLError)
 488 |             ) and (conn and conn.proxy and not conn.has_connected_to_proxy):
 489 |                 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme)
 490 |             raise new_e
 491 | 
 492 |         # conn.request() calls http.client.*.request, not the method in
 493 |         # urllib3.request. It also calls makefile (recv) on the socket.
 494 |         try:
 495 |             conn.request(
 496 |                 method,
 497 |                 url,
 498 |                 body=body,
 499 |                 headers=headers,
 500 |                 chunked=chunked,
 501 |                 preload_content=preload_content,
 502 |                 decode_content=decode_content,
 503 |                 enforce_content_length=enforce_content_length,
 504 |             )
 505 | 
 506 |         # We are swallowing BrokenPipeError (errno.EPIPE) since the server is
 507 |         # legitimately able to close the connection after sending a valid response.
 508 |         # With this behaviour, the received response is still readable.
 509 |         except BrokenPipeError:
 510 |             pass
 511 |         except OSError as e:
 512 |             # MacOS/Linux
 513 |             # EPROTOTYPE and ECONNRESET are needed on macOS
 514 |             # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/
 515 |             # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE.
 516 |             if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET:
 517 |                 raise
 518 | 
 519 |         # Reset the timeout for the recv() on the socket
 520 |         read_timeout = timeout_obj.read_timeout
 521 | 
 522 |         if not conn.is_closed:
 523 |             # In Python 3 socket.py will catch EAGAIN and return None when you
 524 |             # try and read into the file pointer created by http.client, which
 525 |             # instead raises a BadStatusLine exception. Instead of catching
 526 |             # the exception and assuming all BadStatusLine exceptions are read
 527 |             # timeouts, check for a zero timeout before making the request.
 528 |             if read_timeout == 0:
 529 |                 raise ReadTimeoutError(
 530 |                     self, url, f"Read timed out. (read timeout={read_timeout})"
 531 |                 )
 532 |             conn.timeout = read_timeout
 533 | 
 534 |         # Receive the response from the server
 535 |         try:
 536 |             response = conn.getresponse()
 537 |         except (BaseSSLError, OSError) as e:
 538 |             self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
 539 |             raise
 540 | 
 541 |         # Set properties that are used by the pooling layer.
 542 |         response.retries = retries
 543 |         response._connection = response_conn  # type: ignore[attr-defined]
 544 |         response._pool = self  # type: ignore[attr-defined]
 545 | 
 546 |         log.debug(
 547 |             '%s://%s:%s "%s %s HTTP/%s" %s %s',
 548 |             self.scheme,
 549 |             self.host,
 550 |             self.port,
 551 |             method,
 552 |             url,
 553 |             response.version,
 554 |             response.status,
 555 |             response.length_remaining,
 556 |         )
 557 | 
 558 |         return response
 559 | 
 560 |     def close(self) -> None:
 561 |         """
 562 |         Close all pooled connections and disable the pool.
 563 |         """
 564 |         if self.pool is None:
 565 |             return
 566 |         # Disable access to the pool
 567 |         old_pool, self.pool = self.pool, None
 568 | 
 569 |         # Close all the HTTPConnections in the pool.
 570 |         _close_pool_connections(old_pool)
 571 | 
 572 |     def is_same_host(self, url: str) -> bool:
 573 |         """
 574 |         Check if the given ``url`` is a member of the same host as this
 575 |         connection pool.
 576 |         """
 577 |         if url.startswith("/"):
 578 |             return True
 579 | 
 580 |         # TODO: Add optional support for socket.gethostbyname checking.
 581 |         scheme, _, host, port, *_ = parse_url(url)
 582 |         scheme = scheme or "http"
 583 |         if host is not None:
 584 |             host = _normalize_host(host, scheme=scheme)
 585 | 
 586 |         # Use explicit default port for comparison when none is given
 587 |         if self.port and not port:
 588 |             port = port_by_scheme.get(scheme)
 589 |         elif not self.port and port == port_by_scheme.get(scheme):
 590 |             port = None
 591 | 
 592 |         return (scheme, host, port) == (self.scheme, self.host, self.port)
 593 | 
 594 |     def urlopen(  # type: ignore[override]
 595 |         self,
 596 |         method: str,
 597 |         url: str,
 598 |         body: _TYPE_BODY | None = None,
 599 |         headers: typing.Mapping[str, str] | None = None,
 600 |         retries: Retry | bool | int | None = None,
 601 |         redirect: bool = True,
 602 |         assert_same_host: bool = True,
 603 |         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
 604 |         pool_timeout: int | None = None,
 605 |         release_conn: bool | None = None,
 606 |         chunked: bool = False,
 607 |         body_pos: _TYPE_BODY_POSITION | None = None,
 608 |         preload_content: bool = True,
 609 |         decode_content: bool = True,
 610 |         **response_kw: typing.Any,
 611 |     ) -> BaseHTTPResponse:
 612 |         """
 613 |         Get a connection from the pool and perform an HTTP request. This is the
 614 |         lowest level call for making a request, so you'll need to specify all
 615 |         the raw details.
 616 | 
 617 |         .. note::
 618 | 
 619 |            More commonly, it's appropriate to use a convenience method
 620 |            such as :meth:`request`.
 621 | 
 622 |         .. note::
 623 | 
 624 |            `release_conn` will only behave as expected if
 625 |            `preload_content=False` because we want to make
 626 |            `preload_content=False` the default behaviour someday soon without
 627 |            breaking backwards compatibility.
 628 | 
 629 |         :param method:
 630 |             HTTP request method (such as GET, POST, PUT, etc.)
 631 | 
 632 |         :param url:
 633 |             The URL to perform the request on.
 634 | 
 635 |         :param body:
 636 |             Data to send in the request body, either :class:`str`, :class:`bytes`,
 637 |             an iterable of :class:`str`/:class:`bytes`, or a file-like object.
 638 | 
 639 |         :param headers:
 640 |             Dictionary of custom headers to send, such as User-Agent,
 641 |             If-None-Match, etc. If None, pool headers are used. If provided,
 642 |             these headers completely replace any pool-specific headers.
 643 | 
 644 |         :param retries:
 645 |             Configure the number of retries to allow before raising a
 646 |             :class:`~urllib3.exceptions.MaxRetryError` exception.
 647 | 
 648 |             If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
 649 |             :class:`~urllib3.util.retry.Retry` object for fine-grained control
 650 |             over different types of retries.
 651 |             Pass an integer number to retry connection errors that many times,
 652 |             but no other types of errors. Pass zero to never retry.
 653 | 
 654 |             If ``False``, then retries are disabled and any exception is raised
 655 |             immediately. Also, instead of raising a MaxRetryError on redirects,
 656 |             the redirect response will be returned.
 657 | 
 658 |         :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
 659 | 
 660 |         :param redirect:
 661 |             If True, automatically handle redirects (status codes 301, 302,
 662 |             303, 307, 308). Each redirect counts as a retry. Disabling retries
 663 |             will disable redirect, too.
 664 | 
 665 |         :param assert_same_host:
 666 |             If ``True``, will make sure that the host of the pool requests is
 667 |             consistent else will raise HostChangedError. When ``False``, you can
 668 |             use the pool on an HTTP proxy and request foreign hosts.
 669 | 
 670 |         :param timeout:
 671 |             If specified, overrides the default timeout for this one
 672 |             request. It may be a float (in seconds) or an instance of
 673 |             :class:`urllib3.util.Timeout`.
 674 | 
 675 |         :param pool_timeout:
 676 |             If set and the pool is set to block=True, then this method will
 677 |             block for ``pool_timeout`` seconds and raise EmptyPoolError if no
 678 |             connection is available within the time period.
 679 | 
 680 |         :param bool preload_content:
 681 |             If True, the response's body will be preloaded into memory.
 682 | 
 683 |         :param bool decode_content:
 684 |             If True, will attempt to decode the body based on the
 685 |             'content-encoding' header.
 686 | 
 687 |         :param release_conn:
 688 |             If False, then the urlopen call will not release the connection
 689 |             back into the pool once a response is received (but will release if
 690 |             you read the entire contents of the response such as when
 691 |             `preload_content=True`). This is useful if you're not preloading
 692 |             the response's content immediately. You will need to call
 693 |             ``r.release_conn()`` on the response ``r`` to return the connection
 694 |             back into the pool. If None, it takes the value of ``preload_content``
 695 |             which defaults to ``True``.
 696 | 
 697 |         :param bool chunked:
 698 |             If True, urllib3 will send the body using chunked transfer
 699 |             encoding. Otherwise, urllib3 will send the body using the standard
 700 |             content-length form. Defaults to False.
 701 | 
 702 |         :param int body_pos:
 703 |             Position to seek to in file-like body in the event of a retry or
 704 |             redirect. Typically this won't need to be set because urllib3 will
 705 |             auto-populate the value when needed.
 706 |         """
 707 |         parsed_url = parse_url(url)
 708 |         destination_scheme = parsed_url.scheme
 709 | 
 710 |         if headers is None:
 711 |             headers = self.headers
 712 | 
 713 |         if not isinstance(retries, Retry):
 714 |             retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
 715 | 
 716 |         if release_conn is None:
 717 |             release_conn = preload_content
 718 | 
 719 |         # Check host
 720 |         if assert_same_host and not self.is_same_host(url):
 721 |             raise HostChangedError(self, url, retries)
 722 | 
 723 |         # Ensure that the URL we're connecting to is properly encoded
 724 |         if url.startswith("/"):
 725 |             url = to_str(_encode_target(url))
 726 |         else:
 727 |             url = to_str(parsed_url.url)
 728 | 
 729 |         conn = None
 730 | 
 731 |         # Track whether `conn` needs to be released before
 732 |         # returning/raising/recursing. Update this variable if necessary, and
 733 |         # leave `release_conn` constant throughout the function. That way, if
 734 |         # the function recurses, the original value of `release_conn` will be
 735 |         # passed down into the recursive call, and its value will be respected.
 736 |         #
 737 |         # See issue #651 [1] for details.
 738 |         #
 739 |         # [1] <https://github.com/urllib3/urllib3/issues/651>
 740 |         release_this_conn = release_conn
 741 | 
 742 |         http_tunnel_required = connection_requires_http_tunnel(
 743 |             self.proxy, self.proxy_config, destination_scheme
 744 |         )
 745 | 
 746 |         # Merge the proxy headers. Only done when not using HTTP CONNECT. We
 747 |         # have to copy the headers dict so we can safely change it without those
 748 |         # changes being reflected in anyone else's copy.
 749 |         if not http_tunnel_required:
 750 |             headers = headers.copy()  # type: ignore[attr-defined]
 751 |             headers.update(self.proxy_headers)  # type: ignore[union-attr]
 752 | 
 753 |         # Must keep the exception bound to a separate variable or else Python 3
 754 |         # complains about UnboundLocalError.
 755 |         err = None
 756 | 
 757 |         # Keep track of whether we cleanly exited the except block. This
 758 |         # ensures we do proper cleanup in finally.
 759 |         clean_exit = False
 760 | 
 761 |         # Rewind body position, if needed. Record current position
 762 |         # for future rewinds in the event of a redirect/retry.
 763 |         body_pos = set_file_position(body, body_pos)
 764 | 
 765 |         try:
 766 |             # Request a connection from the queue.
 767 |             timeout_obj = self._get_timeout(timeout)
 768 |             conn = self._get_conn(timeout=pool_timeout)
 769 | 
 770 |             conn.timeout = timeout_obj.connect_timeout  # type: ignore[assignment]
 771 | 
 772 |             # Is this a closed/new connection that requires CONNECT tunnelling?
 773 |             if self.proxy is not None and http_tunnel_required and conn.is_closed:
 774 |                 try:
 775 |                     self._prepare_proxy(conn)
 776 |                 except (BaseSSLError, OSError, SocketTimeout) as e:
 777 |                     self._raise_timeout(
 778 |                         err=e, url=self.proxy.url, timeout_value=conn.timeout
 779 |                     )
 780 |                     raise
 781 | 
 782 |             # If we're going to release the connection in ``finally:``, then
 783 |             # the response doesn't need to know about the connection. Otherwise
 784 |             # it will also try to release it and we'll have a double-release
 785 |             # mess.
 786 |             response_conn = conn if not release_conn else None
 787 | 
 788 |             # Make the request on the HTTPConnection object
 789 |             response = self._make_request(
 790 |                 conn,
 791 |                 method,
 792 |                 url,
 793 |                 timeout=timeout_obj,
 794 |                 body=body,
 795 |                 headers=headers,
 796 |                 chunked=chunked,
 797 |                 retries=retries,
 798 |                 response_conn=response_conn,
 799 |                 preload_content=preload_content,
 800 |                 decode_content=decode_content,
 801 |                 **response_kw,
 802 |             )
 803 | 
 804 |             # Everything went great!
 805 |             clean_exit = True
 806 | 
 807 |         except EmptyPoolError:
 808 |             # Didn't get a connection from the pool, no need to clean up
 809 |             clean_exit = True
 810 |             release_this_conn = False
 811 |             raise
 812 | 
 813 |         except (
 814 |             TimeoutError,
 815 |             HTTPException,
 816 |             OSError,
 817 |             ProtocolError,
 818 |             BaseSSLError,
 819 |             SSLError,
 820 |             CertificateError,
 821 |             ProxyError,
 822 |         ) as e:
 823 |             # Discard the connection for these exceptions. It will be
 824 |             # replaced during the next _get_conn() call.
 825 |             clean_exit = False
 826 |             new_e: Exception = e
 827 |             if isinstance(e, (BaseSSLError, CertificateError)):
 828 |                 new_e = SSLError(e)
 829 |             if isinstance(
 830 |                 new_e,
 831 |                 (
 832 |                     OSError,
 833 |                     NewConnectionError,
 834 |                     TimeoutError,
 835 |                     SSLError,
 836 |                     HTTPException,
 837 |                 ),
 838 |             ) and (conn and conn.proxy and not conn.has_connected_to_proxy):
 839 |                 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme)
 840 |             elif isinstance(new_e, (OSError, HTTPException)):
 841 |                 new_e = ProtocolError("Connection aborted.", new_e)
 842 | 
 843 |             retries = retries.increment(
 844 |                 method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]
 845 |             )
 846 |             retries.sleep()
 847 | 
 848 |             # Keep track of the error for the retry warning.
 849 |             err = e
 850 | 
 851 |         finally:
 852 |             if not clean_exit:
 853 |                 # We hit some kind of exception, handled or otherwise. We need
 854 |                 # to throw the connection away unless explicitly told not to.
 855 |                 # Close the connection, set the variable to None, and make sure
 856 |                 # we put the None back in the pool to avoid leaking it.
 857 |                 if conn:
 858 |                     conn.close()
 859 |                     conn = None
 860 |                 release_this_conn = True
 861 | 
 862 |             if release_this_conn:
 863 |                 # Put the connection back to be reused. If the connection is
 864 |                 # expired then it will be None, which will get replaced with a
 865 |                 # fresh connection during _get_conn.
 866 |                 self._put_conn(conn)
 867 | 
 868 |         if not conn:
 869 |             # Try again
 870 |             log.warning(
 871 |                 "Retrying (%r) after connection broken by '%r': %s", retries, err, url
 872 |             )
 873 |             return self.urlopen(
 874 |                 method,
 875 |                 url,
 876 |                 body,
 877 |                 headers,
 878 |                 retries,
 879 |                 redirect,
 880 |                 assert_same_host,
 881 |                 timeout=timeout,
 882 |                 pool_timeout=pool_timeout,
 883 |                 release_conn=release_conn,
 884 |                 chunked=chunked,
 885 |                 body_pos=body_pos,
 886 |                 preload_content=preload_content,
 887 |                 decode_content=decode_content,
 888 |                 **response_kw,
 889 |             )
 890 | 
 891 |         # Handle redirect?
 892 |         redirect_location = redirect and response.get_redirect_location()
 893 |         if redirect_location:
 894 |             if response.status == 303:
 895 |                 # Change the method according to RFC 9110, Section 15.4.4.
 896 |                 method = "GET"
 897 |                 # And lose the body not to transfer anything sensitive.
 898 |                 body = None
 899 |                 headers = HTTPHeaderDict(headers)._prepare_for_method_change()
 900 | 
 901 |             try:
 902 |                 retries = retries.increment(method, url, response=response, _pool=self)
 903 |             except MaxRetryError:
 904 |                 if retries.raise_on_redirect:
 905 |                     response.drain_conn()
 906 |                     raise
 907 |                 return response
 908 | 
 909 |             response.drain_conn()
 910 |             retries.sleep_for_retry(response)
 911 |             log.debug("Redirecting %s -> %s", url, redirect_location)
 912 |             return self.urlopen(
 913 |                 method,
 914 |                 redirect_location,
 915 |                 body,
 916 |                 headers,
 917 |                 retries=retries,
 918 |                 redirect=redirect,
 919 |                 assert_same_host=assert_same_host,
 920 |                 timeout=timeout,
 921 |                 pool_timeout=pool_timeout,
 922 |                 release_conn=release_conn,
 923 |                 chunked=chunked,
 924 |                 body_pos=body_pos,
 925 |                 preload_content=preload_content,
 926 |                 decode_content=decode_content,
 927 |                 **response_kw,
 928 |             )
 929 | 
 930 |         # Check if we should retry the HTTP response.
 931 |         has_retry_after = bool(response.headers.get("Retry-After"))
 932 |         if retries.is_retry(method, response.status, has_retry_after):
 933 |             try:
 934 |                 retries = retries.increment(method, url, response=response, _pool=self)
 935 |             except MaxRetryError:
 936 |                 if retries.raise_on_status:
 937 |                     response.drain_conn()
 938 |                     raise
 939 |                 return response
 940 | 
 941 |             response.drain_conn()
 942 |             retries.sleep(response)
 943 |             log.debug("Retry: %s", url)
 944 |             return self.urlopen(
 945 |                 method,
 946 |                 url,
 947 |                 body,
 948 |                 headers,
 949 |                 retries=retries,
 950 |                 redirect=redirect,
 951 |                 assert_same_host=assert_same_host,
 952 |                 timeout=timeout,
 953 |                 pool_timeout=pool_timeout,
 954 |                 release_conn=release_conn,
 955 |                 chunked=chunked,
 956 |                 body_pos=body_pos,
 957 |                 preload_content=preload_content,
 958 |                 decode_content=decode_content,
 959 |                 **response_kw,
 960 |             )
 961 | 
 962 |         return response
 963 | 
 964 | 
 965 | class HTTPSConnectionPool(HTTPConnectionPool):
 966 |     """
 967 |     Same as :class:`.HTTPConnectionPool`, but HTTPS.
 968 | 
 969 |     :class:`.HTTPSConnection` uses one of ``assert_fingerprint``,
 970 |     ``assert_hostname`` and ``host`` in this order to verify connections.
 971 |     If ``assert_hostname`` is False, no verification is done.
 972 | 
 973 |     The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``,
 974 |     ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl`
 975 |     is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade
 976 |     the connection socket into an SSL socket.
 977 |     """
 978 | 
 979 |     scheme = "https"
 980 |     ConnectionCls: type[BaseHTTPSConnection] = HTTPSConnection
 981 | 
 982 |     def __init__(
 983 |         self,
 984 |         host: str,
 985 |         port: int | None = None,
 986 |         timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT,
 987 |         maxsize: int = 1,
 988 |         block: bool = False,
 989 |         headers: typing.Mapping[str, str] | None = None,
 990 |         retries: Retry | bool | int | None = None,
 991 |         _proxy: Url | None = None,
 992 |         _proxy_headers: typing.Mapping[str, str] | None = None,
 993 |         key_file: str | None = None,
 994 |         cert_file: str | None = None,
 995 |         cert_reqs: int | str | None = None,
 996 |         key_password: str | None = None,
 997 |         ca_certs: str | None = None,
 998 |         ssl_version: int | str | None = None,
 999 |         ssl_minimum_version: ssl.TLSVersion | None = None,
1000 |         ssl_maximum_version: ssl.TLSVersion | None = None,
1001 |         assert_hostname: str | typing.Literal[False] | None = None,
1002 |         assert_fingerprint: str | None = None,
1003 |         ca_cert_dir: str | None = None,
1004 |         **conn_kw: typing.Any,
1005 |     ) -> None:
1006 |         super().__init__(
1007 |             host,
1008 |             port,
1009 |             timeout,
1010 |             maxsize,
1011 |             block,
1012 |             headers,
1013 |             retries,
1014 |             _proxy,
1015 |             _proxy_headers,
1016 |             **conn_kw,
1017 |         )
1018 | 
1019 |         self.key_file = key_file
1020 |         self.cert_file = cert_file
1021 |         self.cert_reqs = cert_reqs
1022 |         self.key_password = key_password
1023 |         self.ca_certs = ca_certs
1024 |         self.ca_cert_dir = ca_cert_dir
1025 |         self.ssl_version = ssl_version
1026 |         self.ssl_minimum_version = ssl_minimum_version
1027 |         self.ssl_maximum_version = ssl_maximum_version
1028 |         self.assert_hostname = assert_hostname
1029 |         self.assert_fingerprint = assert_fingerprint
1030 | 
1031 |     def _prepare_proxy(self, conn: HTTPSConnection) -> None:  # type: ignore[override]
1032 |         """Establishes a tunnel connection through HTTP CONNECT."""
1033 |         if self.proxy and self.proxy.scheme == "https":
1034 |             tunnel_scheme = "https"
1035 |         else:
1036 |             tunnel_scheme = "http"
1037 | 
1038 |         conn.set_tunnel(
1039 |             scheme=tunnel_scheme,
1040 |             host=self._tunnel_host,
1041 |             port=self.port,
1042 |             headers=self.proxy_headers,
1043 |         )
1044 |         conn.connect()
1045 | 
1046 |     def _new_conn(self) -> BaseHTTPSConnection:
1047 |         """
1048 |         Return a fresh :class:`urllib3.connection.HTTPConnection`.
1049 |         """
1050 |         self.num_connections += 1
1051 |         log.debug(
1052 |             "Starting new HTTPS connection (%d): %s:%s",
1053 |             self.num_connections,
1054 |             self.host,
1055 |             self.port or "443",
1056 |         )
1057 | 
1058 |         if not self.ConnectionCls or self.ConnectionCls is DummyConnection:  # type: ignore[comparison-overlap]
1059 |             raise ImportError(
1060 |                 "Can't connect to HTTPS URL because the SSL module is not available."
1061 |             )
1062 | 
1063 |         actual_host: str = self.host
1064 |         actual_port = self.port
1065 |         if self.proxy is not None and self.proxy.host is not None:
1066 |             actual_host = self.proxy.host
1067 |             actual_port = self.proxy.port
1068 | 
1069 |         return self.ConnectionCls(
1070 |             host=actual_host,
1071 |             port=actual_port,
1072 |             timeout=self.timeout.connect_timeout,
1073 |             cert_file=self.cert_file,
1074 |             key_file=self.key_file,
1075 |             key_password=self.key_password,
1076 |             cert_reqs=self.cert_reqs,
1077 |             ca_certs=self.ca_certs,
1078 |             ca_cert_dir=self.ca_cert_dir,
1079 |             assert_hostname=self.assert_hostname,
1080 |             assert_fingerprint=self.assert_fingerprint,
1081 |             ssl_version=self.ssl_version,
1082 |             ssl_minimum_version=self.ssl_minimum_version,
1083 |             ssl_maximum_version=self.ssl_maximum_version,
1084 |             **self.conn_kw,
1085 |         )
1086 | 
1087 |     def _validate_conn(self, conn: BaseHTTPConnection) -> None:
1088 |         """
1089 |         Called right before a request is made, after the socket is created.
1090 |         """
1091 |         super()._validate_conn(conn)
1092 | 
1093 |         # Force connect early to allow us to validate the connection.
1094 |         if conn.is_closed:
1095 |             conn.connect()
1096 | 
1097 |         # TODO revise this, see https://github.com/urllib3/urllib3/issues/2791
1098 |         if not conn.is_verified and not conn.proxy_is_verified:
1099 |             warnings.warn(
1100 |                 (
1101 |                     f"Unverified HTTPS request is being made to host '{conn.host}'. "
1102 |                     "Adding certificate verification is strongly advised. See: "
1103 |                     "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
1104 |                     "#tls-warnings"
1105 |                 ),
1106 |                 InsecureRequestWarning,
1107 |             )
1108 | 
1109 | 
1110 | def connection_from_url(url: str, **kw: typing.Any) -> HTTPConnectionPool:
1111 |     """
1112 |     Given a url, return an :class:`.ConnectionPool` instance of its host.
1113 | 
1114 |     This is a shortcut for not having to parse out the scheme, host, and port
1115 |     of the url before creating an :class:`.ConnectionPool` instance.
1116 | 
1117 |     :param url:
1118 |         Absolute URL string that must include the scheme. Port is optional.
1119 | 
1120 |     :param \\**kw:
1121 |         Passes additional parameters to the constructor of the appropriate
1122 |         :class:`.ConnectionPool`. Useful for specifying things like
1123 |         timeout, maxsize, headers, etc.
1124 | 
1125 |     Example::
1126 | 
1127 |         >>> conn = connection_from_url('http://google.com/')
1128 |         >>> r = conn.request('GET', '/')
1129 |     """
1130 |     scheme, _, host, port, *_ = parse_url(url)
1131 |     scheme = scheme or "http"
1132 |     port = port or port_by_scheme.get(scheme, 80)
1133 |     if scheme == "https":
1134 |         return HTTPSConnectionPool(host, port=port, **kw)  # type: ignore[arg-type]
1135 |     else:
1136 |         return HTTPConnectionPool(host, port=port, **kw)  # type: ignore[arg-type]
1137 | 
1138 | 
1139 | @typing.overload
1140 | def _normalize_host(host: None, scheme: str | None) -> None:
1141 |     ...
1142 | 
1143 | 
1144 | @typing.overload
1145 | def _normalize_host(host: str, scheme: str | None) -> str:
1146 |     ...
1147 | 
1148 | 
1149 | def _normalize_host(host: str | None, scheme: str | None) -> str | None:
1150 |     """
1151 |     Normalize hosts for comparisons and use with sockets.
1152 |     """
1153 | 
1154 |     host = normalize_host(host, scheme)
1155 | 
1156 |     # httplib doesn't like it when we include brackets in IPv6 addresses
1157 |     # Specifically, if we include brackets but also pass the port then
1158 |     # httplib crazily doubles up the square brackets on the Host header.
1159 |     # Instead, we need to make sure we never pass ``None`` as the port.
1160 |     # However, for backward compatibility reasons we can't actually
1161 |     # *assert* that.  See http://bugs.python.org/issue28539
1162 |     if host and host.startswith("[") and host.endswith("]"):
1163 |         host = host[1:-1]
1164 |     return host
1165 | 
1166 | 
1167 | def _url_from_pool(
1168 |     pool: HTTPConnectionPool | HTTPSConnectionPool, path: str | None = None
1169 | ) -> str:
1170 |     """Returns the URL from a given connection pool. This is mainly used for testing and logging."""
1171 |     return Url(scheme=pool.scheme, host=pool.host, port=pool.port, path=path).url
1172 | 
1173 | 
1174 | def _close_pool_connections(pool: queue.LifoQueue[typing.Any]) -> None:
1175 |     """Drains a queue of connections and closes each one."""
1176 |     try:
1177 |         while True:
1178 |             conn = pool.get(block=False)
1179 |             if conn:
1180 |                 conn.close()
1181 |     except queue.Empty:
1182 |         pass  # Done.
1183 | 
```
Page 132/168FirstPrevNextLast