This is page 5 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxslt/pattern.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: interface for the pattern matching used in template matches.
3 | * Description: the implementation of the lookup of the right template
4 | * for a given node must be really fast in order to keep
5 | * decent performances.
6 | *
7 | * Copy: See Copyright for the status of this software.
8 | *
9 | * Author: Daniel Veillard
10 | */
11 |
12 | #ifndef __XML_XSLT_PATTERN_H__
13 | #define __XML_XSLT_PATTERN_H__
14 |
15 | #include "xsltInternals.h"
16 | #include "xsltexports.h"
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | /**
23 | * xsltCompMatch:
24 | *
25 | * Data structure used for the implementation of patterns.
26 | * It is kept private (in pattern.c).
27 | */
28 | typedef struct _xsltCompMatch xsltCompMatch;
29 | typedef xsltCompMatch *xsltCompMatchPtr;
30 |
31 | /*
32 | * Pattern related interfaces.
33 | */
34 |
35 | XSLTPUBFUN xsltCompMatchPtr XSLTCALL
36 | xsltCompilePattern (const xmlChar *pattern,
37 | xmlDocPtr doc,
38 | xmlNodePtr node,
39 | xsltStylesheetPtr style,
40 | xsltTransformContextPtr runtime);
41 | XSLTPUBFUN void XSLTCALL
42 | xsltFreeCompMatchList (xsltCompMatchPtr comp);
43 | XSLTPUBFUN int XSLTCALL
44 | xsltTestCompMatchList (xsltTransformContextPtr ctxt,
45 | xmlNodePtr node,
46 | xsltCompMatchPtr comp);
47 | XSLTPUBFUN void XSLTCALL
48 | xsltCompMatchClearCache (xsltTransformContextPtr ctxt,
49 | xsltCompMatchPtr comp);
50 | XSLTPUBFUN void XSLTCALL
51 | xsltNormalizeCompSteps (void *payload,
52 | void *data,
53 | const xmlChar *name);
54 |
55 | /*
56 | * Template related interfaces.
57 | */
58 | XSLTPUBFUN int XSLTCALL
59 | xsltAddTemplate (xsltStylesheetPtr style,
60 | xsltTemplatePtr cur,
61 | const xmlChar *mode,
62 | const xmlChar *modeURI);
63 | XSLTPUBFUN xsltTemplatePtr XSLTCALL
64 | xsltGetTemplate (xsltTransformContextPtr ctxt,
65 | xmlNodePtr node,
66 | xsltStylesheetPtr style);
67 | XSLTPUBFUN void XSLTCALL
68 | xsltFreeTemplateHashes (xsltStylesheetPtr style);
69 | XSLTPUBFUN void XSLTCALL
70 | xsltCleanupTemplates (xsltStylesheetPtr style);
71 |
72 | #if 0
73 | int xsltMatchPattern (xsltTransformContextPtr ctxt,
74 | xmlNodePtr node,
75 | const xmlChar *pattern,
76 | xmlDocPtr ctxtdoc,
77 | xmlNodePtr ctxtnode);
78 | #endif
79 | #ifdef __cplusplus
80 | }
81 | #endif
82 |
83 | #endif /* __XML_XSLT_PATTERN_H__ */
84 |
85 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py:
--------------------------------------------------------------------------------
```python
1 | CONSOLE_HTML_FORMAT = """\
2 | <!DOCTYPE html>
3 | <html>
4 | <head>
5 | <meta charset="UTF-8">
6 | <style>
7 | {stylesheet}
8 | body {{
9 | color: {foreground};
10 | background-color: {background};
11 | }}
12 | </style>
13 | </head>
14 | <body>
15 | <pre style="font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><code style="font-family:inherit">{code}</code></pre>
16 | </body>
17 | </html>
18 | """
19 |
20 | CONSOLE_SVG_FORMAT = """\
21 | <svg class="rich-terminal" viewBox="0 0 {width} {height}" xmlns="http://www.w3.org/2000/svg">
22 | <!-- Generated with Rich https://www.textualize.io -->
23 | <style>
24 |
25 | @font-face {{
26 | font-family: "Fira Code";
27 | src: local("FiraCode-Regular"),
28 | url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
29 | url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
30 | font-style: normal;
31 | font-weight: 400;
32 | }}
33 | @font-face {{
34 | font-family: "Fira Code";
35 | src: local("FiraCode-Bold"),
36 | url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
37 | url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
38 | font-style: bold;
39 | font-weight: 700;
40 | }}
41 |
42 | .{unique_id}-matrix {{
43 | font-family: Fira Code, monospace;
44 | font-size: {char_height}px;
45 | line-height: {line_height}px;
46 | font-variant-east-asian: full-width;
47 | }}
48 |
49 | .{unique_id}-title {{
50 | font-size: 18px;
51 | font-weight: bold;
52 | font-family: arial;
53 | }}
54 |
55 | {styles}
56 | </style>
57 |
58 | <defs>
59 | <clipPath id="{unique_id}-clip-terminal">
60 | <rect x="0" y="0" width="{terminal_width}" height="{terminal_height}" />
61 | </clipPath>
62 | {lines}
63 | </defs>
64 |
65 | {chrome}
66 | <g transform="translate({terminal_x}, {terminal_y})" clip-path="url(#{unique_id}-clip-terminal)">
67 | {backgrounds}
68 | <g class="{unique_id}-matrix">
69 | {matrix}
70 | </g>
71 | </g>
72 | </svg>
73 | """
74 |
75 | _SVG_FONT_FAMILY = "Rich Fira Code"
76 | _SVG_CLASSES_PREFIX = "rich-svg"
77 |
```
--------------------------------------------------------------------------------
/.venv/hello.py:
--------------------------------------------------------------------------------
```python
1 | from flask import Flask, request, jsonify, render_template
2 | from markupsafe import escape
3 | import requests
4 | from bs4 import BeautifulSoup
5 | from fake_useragent import UserAgent
6 | app = Flask(__name__)
7 |
8 | def search_query(query):
9 | search_url = f"https://www.google.com/search?q={query}"
10 | ua = UserAgent()
11 | headers = {'User-Agent': ua.random}
12 |
13 | response = requests.get(search_url, headers=headers)
14 | if response.status_code == 200:
15 | soup = BeautifulSoup(response.text, 'lxml')
16 | results = []
17 | for result in soup.select('.tF2Cxc'):
18 | title = result.select_one('.DKV0Md').text
19 | description = result.select_one('.VwiC3b').text
20 | results.append({'title': title, 'description': description})
21 | return results
22 | else:
23 | return []
24 |
25 |
26 |
27 | @app.route('/user/<username>')
28 | def show_user_profile(username):
29 | # show the user profile for that user
30 | return f'User {escape(username)}'
31 |
32 | @app.route('/post/<int:post_id>')
33 | def show_post(post_id):
34 | # show the post with the given id, the id is an integer
35 | return f'Post {post_id}'
36 |
37 | @app.route('/path/<path:subpath>')
38 | def show_subpath(subpath):
39 | # show the subpath after /path/
40 | return f'Subpath {escape(subpath)}'
41 |
42 | @app.route('/')
43 | def hello_world():
44 | return 'Hello, World!'
45 |
46 | # @app.route('/about')
47 | # def about():
48 | # return 'This is the about page'
49 |
50 | # @app.route('/user/<username>')
51 | # def show_user_profile(username):
52 | # return f'User {username}'
53 |
54 | @app.route('/search/', methods=['GET'])
55 | @app.route('/search/<name>')
56 | def index():
57 | return render_template('index.html', __name__=__name__)
58 |
59 | @app.route('/search', methods=['POST'])
60 | def search():
61 | query = request.form['query'] # Получаем запрос из формы
62 | results = search_query(query) # Выполняем поисковый запрос
63 | return render_template('index.html', results=results)
64 |
65 |
66 |
67 | # @app.route('/search', methods=['GET'])
68 | # def search():
69 | # query = request.args.get('query') # Получаем запрос из параметра URL
70 | # results = search_query(query)
71 | # return 'Hello, World!', jsonify(results) # Возвращаем результат в формате JSON
72 |
73 | # if __name__ == "__main__":
74 | # app.run(debug=True)
```
--------------------------------------------------------------------------------
/.venv/bin/activate.fish:
--------------------------------------------------------------------------------
```
1 | # This file must be used with "source <venv>/bin/activate.fish" *from fish*
2 | # (https://fishshell.com/). You cannot run it directly.
3 |
4 | function deactivate -d "Exit virtual environment and return to normal shell environment"
5 | # reset old environment variables
6 | if test -n "$_OLD_VIRTUAL_PATH"
7 | set -gx PATH $_OLD_VIRTUAL_PATH
8 | set -e _OLD_VIRTUAL_PATH
9 | end
10 | if test -n "$_OLD_VIRTUAL_PYTHONHOME"
11 | set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
12 | set -e _OLD_VIRTUAL_PYTHONHOME
13 | end
14 |
15 | if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
16 | set -e _OLD_FISH_PROMPT_OVERRIDE
17 | # prevents error when using nested fish instances (Issue #93858)
18 | if functions -q _old_fish_prompt
19 | functions -e fish_prompt
20 | functions -c _old_fish_prompt fish_prompt
21 | functions -e _old_fish_prompt
22 | end
23 | end
24 |
25 | set -e VIRTUAL_ENV
26 | set -e VIRTUAL_ENV_PROMPT
27 | if test "$argv[1]" != "nondestructive"
28 | # Self-destruct!
29 | functions -e deactivate
30 | end
31 | end
32 |
33 | # Unset irrelevant variables.
34 | deactivate nondestructive
35 |
36 | set -gx VIRTUAL_ENV "/Users/user/Documents/myproject/.venv"
37 |
38 | set -gx _OLD_VIRTUAL_PATH $PATH
39 | set -gx PATH "$VIRTUAL_ENV/bin" $PATH
40 |
41 | # Unset PYTHONHOME if set.
42 | if set -q PYTHONHOME
43 | set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
44 | set -e PYTHONHOME
45 | end
46 |
47 | if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
48 | # fish uses a function instead of an env var to generate the prompt.
49 |
50 | # Save the current fish_prompt function as the function _old_fish_prompt.
51 | functions -c fish_prompt _old_fish_prompt
52 |
53 | # With the original prompt function renamed, we can override with our own.
54 | function fish_prompt
55 | # Save the return status of the last command.
56 | set -l old_status $status
57 |
58 | # Output the venv prompt; color taken from the blue of the Python logo.
59 | printf "%s%s%s" (set_color 4B8BBE) "(.venv) " (set_color normal)
60 |
61 | # Restore the return status of the previous command.
62 | echo "exit $old_status" | .
63 | # Output the original/"old" prompt.
64 | _old_fish_prompt
65 | end
66 |
67 | set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
68 | set -gx VIRTUAL_ENV_PROMPT "(.venv) "
69 | end
70 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.formatters.pangomarkup
3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 |
5 | Formatter for Pango markup output.
6 |
7 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8 | :license: BSD, see LICENSE for details.
9 | """
10 |
11 | from pip._vendor.pygments.formatter import Formatter
12 |
13 |
14 | __all__ = ['PangoMarkupFormatter']
15 |
16 |
17 | _escape_table = {
18 | ord('&'): '&',
19 | ord('<'): '<',
20 | }
21 |
22 |
23 | def escape_special_chars(text, table=_escape_table):
24 | """Escape & and < for Pango Markup."""
25 | return text.translate(table)
26 |
27 |
28 | class PangoMarkupFormatter(Formatter):
29 | """
30 | Format tokens as Pango Markup code. It can then be rendered to an SVG.
31 |
32 | .. versionadded:: 2.9
33 | """
34 |
35 | name = 'Pango Markup'
36 | aliases = ['pango', 'pangomarkup']
37 | filenames = []
38 |
39 | def __init__(self, **options):
40 | Formatter.__init__(self, **options)
41 |
42 | self.styles = {}
43 |
44 | for token, style in self.style:
45 | start = ''
46 | end = ''
47 | if style['color']:
48 | start += '<span fgcolor="#{}">'.format(style['color'])
49 | end = '</span>' + end
50 | if style['bold']:
51 | start += '<b>'
52 | end = '</b>' + end
53 | if style['italic']:
54 | start += '<i>'
55 | end = '</i>' + end
56 | if style['underline']:
57 | start += '<u>'
58 | end = '</u>' + end
59 | self.styles[token] = (start, end)
60 |
61 | def format_unencoded(self, tokensource, outfile):
62 | lastval = ''
63 | lasttype = None
64 |
65 | outfile.write('<tt>')
66 |
67 | for ttype, value in tokensource:
68 | while ttype not in self.styles:
69 | ttype = ttype.parent
70 | if ttype == lasttype:
71 | lastval += escape_special_chars(value)
72 | else:
73 | if lastval:
74 | stylebegin, styleend = self.styles[lasttype]
75 | outfile.write(stylebegin + lastval + styleend)
76 | lastval = escape_special_chars(value)
77 | lasttype = ttype
78 |
79 | if lastval:
80 | stylebegin, styleend = self.styles[lasttype]
81 | outfile.write(stylebegin + lastval + styleend)
82 |
83 | outfile.write('</tt>')
84 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxslt/templates.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: interface for the template processing
3 | * Description: This set of routine encapsulates XPath calls
4 | * and Attribute Value Templates evaluation.
5 | *
6 | * Copy: See Copyright for the status of this software.
7 | *
8 | * Author: Daniel Veillard
9 | */
10 |
11 | #ifndef __XML_XSLT_TEMPLATES_H__
12 | #define __XML_XSLT_TEMPLATES_H__
13 |
14 | #include <libxml/xpath.h>
15 | #include <libxml/xpathInternals.h>
16 | #include "xsltexports.h"
17 | #include "xsltInternals.h"
18 |
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 | XSLTPUBFUN int XSLTCALL
24 | xsltEvalXPathPredicate (xsltTransformContextPtr ctxt,
25 | xmlXPathCompExprPtr comp,
26 | xmlNsPtr *nsList,
27 | int nsNr);
28 | XSLTPUBFUN xmlChar * XSLTCALL
29 | xsltEvalTemplateString (xsltTransformContextPtr ctxt,
30 | xmlNodePtr contextNode,
31 | xmlNodePtr inst);
32 | XSLTPUBFUN xmlChar * XSLTCALL
33 | xsltEvalAttrValueTemplate (xsltTransformContextPtr ctxt,
34 | xmlNodePtr node,
35 | const xmlChar *name,
36 | const xmlChar *ns);
37 | XSLTPUBFUN const xmlChar * XSLTCALL
38 | xsltEvalStaticAttrValueTemplate (xsltStylesheetPtr style,
39 | xmlNodePtr node,
40 | const xmlChar *name,
41 | const xmlChar *ns,
42 | int *found);
43 |
44 | /* TODO: this is obviously broken ... the namespaces should be passed too ! */
45 | XSLTPUBFUN xmlChar * XSLTCALL
46 | xsltEvalXPathString (xsltTransformContextPtr ctxt,
47 | xmlXPathCompExprPtr comp);
48 | XSLTPUBFUN xmlChar * XSLTCALL
49 | xsltEvalXPathStringNs (xsltTransformContextPtr ctxt,
50 | xmlXPathCompExprPtr comp,
51 | int nsNr,
52 | xmlNsPtr *nsList);
53 |
54 | XSLTPUBFUN xmlNodePtr * XSLTCALL
55 | xsltTemplateProcess (xsltTransformContextPtr ctxt,
56 | xmlNodePtr node);
57 | XSLTPUBFUN xmlAttrPtr XSLTCALL
58 | xsltAttrListTemplateProcess (xsltTransformContextPtr ctxt,
59 | xmlNodePtr target,
60 | xmlAttrPtr cur);
61 | XSLTPUBFUN xmlAttrPtr XSLTCALL
62 | xsltAttrTemplateProcess (xsltTransformContextPtr ctxt,
63 | xmlNodePtr target,
64 | xmlAttrPtr attr);
65 | XSLTPUBFUN xmlChar * XSLTCALL
66 | xsltAttrTemplateValueProcess (xsltTransformContextPtr ctxt,
67 | const xmlChar* attr);
68 | XSLTPUBFUN xmlChar * XSLTCALL
69 | xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt,
70 | const xmlChar* str,
71 | xmlNodePtr node);
72 | #ifdef __cplusplus
73 | }
74 | #endif
75 |
76 | #endif /* __XML_XSLT_TEMPLATES_H__ */
77 |
78 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/check.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from optparse import Values
3 | from typing import List
4 |
5 | from pip._internal.cli.base_command import Command
6 | from pip._internal.cli.status_codes import ERROR, SUCCESS
7 | from pip._internal.metadata import get_default_environment
8 | from pip._internal.operations.check import (
9 | check_package_set,
10 | check_unsupported,
11 | create_package_set_from_installed,
12 | )
13 | from pip._internal.utils.compatibility_tags import get_supported
14 | from pip._internal.utils.misc import write_output
15 |
16 | logger = logging.getLogger(__name__)
17 |
18 |
19 | class CheckCommand(Command):
20 | """Verify installed packages have compatible dependencies."""
21 |
22 | ignore_require_venv = True
23 | usage = """
24 | %prog [options]"""
25 |
26 | def run(self, options: Values, args: List[str]) -> int:
27 | package_set, parsing_probs = create_package_set_from_installed()
28 | missing, conflicting = check_package_set(package_set)
29 | unsupported = list(
30 | check_unsupported(
31 | get_default_environment().iter_installed_distributions(),
32 | get_supported(),
33 | )
34 | )
35 |
36 | for project_name in missing:
37 | version = package_set[project_name].version
38 | for dependency in missing[project_name]:
39 | write_output(
40 | "%s %s requires %s, which is not installed.",
41 | project_name,
42 | version,
43 | dependency[0],
44 | )
45 |
46 | for project_name in conflicting:
47 | version = package_set[project_name].version
48 | for dep_name, dep_version, req in conflicting[project_name]:
49 | write_output(
50 | "%s %s has requirement %s, but you have %s %s.",
51 | project_name,
52 | version,
53 | req,
54 | dep_name,
55 | dep_version,
56 | )
57 | for package in unsupported:
58 | write_output(
59 | "%s %s is not supported on this platform",
60 | package.raw_name,
61 | package.version,
62 | )
63 | if missing or conflicting or parsing_probs or unsupported:
64 | return ERROR
65 | else:
66 | write_output("No broken requirements found.")
67 | return SUCCESS
68 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py:
--------------------------------------------------------------------------------
```python
1 | import contextlib
2 | import os
3 | import re
4 | import ssl
5 | import typing
6 |
7 | # candidates based on https://github.com/tiran/certifi-system-store by Christian Heimes
8 | _CA_FILE_CANDIDATES = [
9 | # Alpine, Arch, Fedora 34+, OpenWRT, RHEL 9+, BSD
10 | "/etc/ssl/cert.pem",
11 | # Fedora <= 34, RHEL <= 9, CentOS <= 9
12 | "/etc/pki/tls/cert.pem",
13 | # Debian, Ubuntu (requires ca-certificates)
14 | "/etc/ssl/certs/ca-certificates.crt",
15 | # SUSE
16 | "/etc/ssl/ca-bundle.pem",
17 | ]
18 |
19 | _HASHED_CERT_FILENAME_RE = re.compile(r"^[0-9a-fA-F]{8}\.[0-9]$")
20 |
21 |
22 | @contextlib.contextmanager
23 | def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
24 | # First, check whether the default locations from OpenSSL
25 | # seem like they will give us a usable set of CA certs.
26 | # ssl.get_default_verify_paths already takes care of:
27 | # - getting cafile from either the SSL_CERT_FILE env var
28 | # or the path configured when OpenSSL was compiled,
29 | # and verifying that that path exists
30 | # - getting capath from either the SSL_CERT_DIR env var
31 | # or the path configured when OpenSSL was compiled,
32 | # and verifying that that path exists
33 | # In addition we'll check whether capath appears to contain certs.
34 | defaults = ssl.get_default_verify_paths()
35 | if defaults.cafile or (defaults.capath and _capath_contains_certs(defaults.capath)):
36 | ctx.set_default_verify_paths()
37 | else:
38 | # cafile from OpenSSL doesn't exist
39 | # and capath from OpenSSL doesn't contain certs.
40 | # Let's search other common locations instead.
41 | for cafile in _CA_FILE_CANDIDATES:
42 | if os.path.isfile(cafile):
43 | ctx.load_verify_locations(cafile=cafile)
44 | break
45 |
46 | yield
47 |
48 |
49 | def _capath_contains_certs(capath: str) -> bool:
50 | """Check whether capath exists and contains certs in the expected format."""
51 | if not os.path.isdir(capath):
52 | return False
53 | for name in os.listdir(capath):
54 | if _HASHED_CERT_FILENAME_RE.match(name):
55 | return True
56 | return False
57 |
58 |
59 | def _verify_peercerts_impl(
60 | ssl_context: ssl.SSLContext,
61 | cert_chain: list[bytes],
62 | server_hostname: str | None = None,
63 | ) -> None:
64 | # This is a no-op because we've enabled SSLContext's built-in
65 | # verification via verify_mode=CERT_REQUIRED, and don't need to repeat it.
66 | pass
67 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/charset_normalizer/legacy.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | from typing import TYPE_CHECKING, Any, Optional
4 | from warnings import warn
5 |
6 | from .api import from_bytes
7 | from .constant import CHARDET_CORRESPONDENCE
8 |
9 | # TODO: remove this check when dropping Python 3.7 support
10 | if TYPE_CHECKING:
11 | from typing_extensions import TypedDict
12 |
13 | class ResultDict(TypedDict):
14 | encoding: Optional[str]
15 | language: str
16 | confidence: Optional[float]
17 |
18 |
19 | def detect(
20 | byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any
21 | ) -> ResultDict:
22 | """
23 | chardet legacy method
24 | Detect the encoding of the given byte string. It should be mostly backward-compatible.
25 | Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it)
26 | This function is deprecated and should be used to migrate your project easily, consult the documentation for
27 | further information. Not planned for removal.
28 |
29 | :param byte_str: The byte sequence to examine.
30 | :param should_rename_legacy: Should we rename legacy encodings
31 | to their more modern equivalents?
32 | """
33 | if len(kwargs):
34 | warn(
35 | f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()"
36 | )
37 |
38 | if not isinstance(byte_str, (bytearray, bytes)):
39 | raise TypeError( # pragma: nocover
40 | "Expected object of type bytes or bytearray, got: "
41 | "{0}".format(type(byte_str))
42 | )
43 |
44 | if isinstance(byte_str, bytearray):
45 | byte_str = bytes(byte_str)
46 |
47 | r = from_bytes(byte_str).best()
48 |
49 | encoding = r.encoding if r is not None else None
50 | language = r.language if r is not None and r.language != "Unknown" else ""
51 | confidence = 1.0 - r.chaos if r is not None else None
52 |
53 | # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process
54 | # but chardet does return 'utf-8-sig' and it is a valid codec name.
55 | if r is not None and encoding == "utf_8" and r.bom:
56 | encoding += "_sig"
57 |
58 | if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE:
59 | encoding = CHARDET_CORRESPONDENCE[encoding]
60 |
61 | return {
62 | "encoding": encoding,
63 | "language": language,
64 | "confidence": confidence,
65 | }
66 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/useragent/__init__.py:
--------------------------------------------------------------------------------
```python
1 | import re
2 | import json
3 | from os.path import join, dirname
4 |
5 |
6 | class Result(dict):
7 | def __init__(self, *args, **kwargs):
8 | super(Result, self).__init__(*args, **kwargs)
9 | for k, v in self.iteritems():
10 | setattr(self, k, v)
11 |
12 |
13 | class Parser(object):
14 | def __init__(self, options):
15 | self.options = options
16 | self.pattern = options['regex']
17 | self.regex = re.compile(self.pattern)
18 |
19 | def parse(self, ua_string):
20 | result = self.regex.search(ua_string)
21 | matches = result is not None
22 | if not matches:
23 | return False, None
24 | opts = self.options
25 | family, major, minor, patch, patch_minor = (result.groups() + (None,) * 5)[:5]
26 | family_replacement = opts.get('family_replacement', opts.get('os_replacement', opts.get('device_replacement', None)))
27 | if family_replacement is not None:
28 | family = family_replacement.replace('$1', family or '$1')
29 | family = family if family else "Other"
30 | major = self.options.get('v1_replacement', major)
31 | minor = self.options.get('v2_replacement', minor)
32 | version = '.'.join(filter(bool, (major, minor, patch, patch_minor)))
33 | return matches, Result(
34 | family=family,
35 | major_version=major,
36 | minor_version=minor,
37 | patch_version=patch,
38 | patch_minor_version=patch_minor,
39 | version=version
40 | )
41 |
42 |
43 | REGEXES = json.load(open(join(dirname(__file__), 'resources', 'user_agent_data.json')))
44 | PARSERS = {
45 | 'browser': map(Parser, REGEXES['user_agent_parsers']),
46 | 'device': map(Parser, REGEXES['device_parsers']),
47 | 'os': map(Parser, REGEXES['os_parsers']),
48 | }
49 |
50 |
51 | def detect(ua_string):
52 | results = []
53 | for category, parser_list in PARSERS.items():
54 | empty_result = Result(family='Other' if category == 'browser' else None, major_version=None, minor_version=None, patch_version=None, patch_minor_version=None)
55 | for parser in parser_list:
56 | matches, result = parser.parse(ua_string)
57 | if matches:
58 | results.append((category, result))
59 | break
60 | else:
61 | results.append((category, empty_result))
62 | return Result(results)
63 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/bs4/tests/test_element.py:
--------------------------------------------------------------------------------
```python
1 | """Tests of classes in element.py.
2 |
3 | The really big classes -- Tag, PageElement, and NavigableString --
4 | are tested in separate files.
5 | """
6 |
7 | from bs4.element import (
8 | CharsetMetaAttributeValue,
9 | ContentMetaAttributeValue,
10 | NamespacedAttribute,
11 | )
12 | from . import SoupTest
13 |
14 |
15 | class TestNamedspacedAttribute(object):
16 |
17 | def test_name_may_be_none_or_missing(self):
18 | a = NamespacedAttribute("xmlns", None)
19 | assert a == "xmlns"
20 |
21 | a = NamespacedAttribute("xmlns", "")
22 | assert a == "xmlns"
23 |
24 | a = NamespacedAttribute("xmlns")
25 | assert a == "xmlns"
26 |
27 | def test_namespace_may_be_none_or_missing(self):
28 | a = NamespacedAttribute(None, "tag")
29 | assert a == "tag"
30 |
31 | a = NamespacedAttribute("", "tag")
32 | assert a == "tag"
33 |
34 | def test_attribute_is_equivalent_to_colon_separated_string(self):
35 | a = NamespacedAttribute("a", "b")
36 | assert "a:b" == a
37 |
38 | def test_attributes_are_equivalent_if_prefix_and_name_identical(self):
39 | a = NamespacedAttribute("a", "b", "c")
40 | b = NamespacedAttribute("a", "b", "c")
41 | assert a == b
42 |
43 | # The actual namespace is not considered.
44 | c = NamespacedAttribute("a", "b", None)
45 | assert a == c
46 |
47 | # But name and prefix are important.
48 | d = NamespacedAttribute("a", "z", "c")
49 | assert a != d
50 |
51 | e = NamespacedAttribute("z", "b", "c")
52 | assert a != e
53 |
54 |
55 | class TestAttributeValueWithCharsetSubstitution(object):
56 | """Certain attributes are designed to have the charset of the
57 | final document substituted into their value.
58 | """
59 |
60 | def test_content_meta_attribute_value(self):
61 | # The value of a CharsetMetaAttributeValue is whatever
62 | # encoding the string is in.
63 | value = CharsetMetaAttributeValue("euc-jp")
64 | assert "euc-jp" == value
65 | assert "euc-jp" == value.original_value
66 | assert "utf8" == value.encode("utf8")
67 | assert "ascii" == value.encode("ascii")
68 |
69 | def test_content_meta_attribute_value(self):
70 | value = ContentMetaAttributeValue("text/html; charset=euc-jp")
71 | assert "text/html; charset=euc-jp" == value
72 | assert "text/html; charset=euc-jp" == value.original_value
73 | assert "text/html; charset=utf8" == value.encode("utf8")
74 | assert "text/html; charset=ascii" == value.encode("ascii")
75 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/flask/logging.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import logging
4 | import sys
5 | import typing as t
6 |
7 | from werkzeug.local import LocalProxy
8 |
9 | from .globals import request
10 |
11 | if t.TYPE_CHECKING: # pragma: no cover
12 | from .sansio.app import App
13 |
14 |
15 | @LocalProxy
16 | def wsgi_errors_stream() -> t.TextIO:
17 | """Find the most appropriate error stream for the application. If a request
18 | is active, log to ``wsgi.errors``, otherwise use ``sys.stderr``.
19 |
20 | If you configure your own :class:`logging.StreamHandler`, you may want to
21 | use this for the stream. If you are using file or dict configuration and
22 | can't import this directly, you can refer to it as
23 | ``ext://flask.logging.wsgi_errors_stream``.
24 | """
25 | if request:
26 | return request.environ["wsgi.errors"] # type: ignore[no-any-return]
27 |
28 | return sys.stderr
29 |
30 |
31 | def has_level_handler(logger: logging.Logger) -> bool:
32 | """Check if there is a handler in the logging chain that will handle the
33 | given logger's :meth:`effective level <~logging.Logger.getEffectiveLevel>`.
34 | """
35 | level = logger.getEffectiveLevel()
36 | current = logger
37 |
38 | while current:
39 | if any(handler.level <= level for handler in current.handlers):
40 | return True
41 |
42 | if not current.propagate:
43 | break
44 |
45 | current = current.parent # type: ignore
46 |
47 | return False
48 |
49 |
50 | #: Log messages to :func:`~flask.logging.wsgi_errors_stream` with the format
51 | #: ``[%(asctime)s] %(levelname)s in %(module)s: %(message)s``.
52 | default_handler = logging.StreamHandler(wsgi_errors_stream) # type: ignore
53 | default_handler.setFormatter(
54 | logging.Formatter("[%(asctime)s] %(levelname)s in %(module)s: %(message)s")
55 | )
56 |
57 |
58 | def create_logger(app: App) -> logging.Logger:
59 | """Get the Flask app's logger and configure it if needed.
60 |
61 | The logger name will be the same as
62 | :attr:`app.import_name <flask.Flask.name>`.
63 |
64 | When :attr:`~flask.Flask.debug` is enabled, set the logger level to
65 | :data:`logging.DEBUG` if it is not set.
66 |
67 | If there is no handler for the logger's effective level, add a
68 | :class:`~logging.StreamHandler` for
69 | :func:`~flask.logging.wsgi_errors_stream` with a basic format.
70 | """
71 | logger = logging.getLogger(app.name)
72 |
73 | if app.debug and not logger.level:
74 | logger.setLevel(logging.DEBUG)
75 |
76 | if not has_level_handler(logger):
77 | logger.addHandler(default_handler)
78 |
79 | return logger
80 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/filepost.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import binascii
4 | import codecs
5 | import os
6 | import typing
7 | from io import BytesIO
8 |
9 | from .fields import _TYPE_FIELD_VALUE_TUPLE, RequestField
10 |
11 | writer = codecs.lookup("utf-8")[3]
12 |
13 | _TYPE_FIELDS_SEQUENCE = typing.Sequence[
14 | typing.Union[typing.Tuple[str, _TYPE_FIELD_VALUE_TUPLE], RequestField]
15 | ]
16 | _TYPE_FIELDS = typing.Union[
17 | _TYPE_FIELDS_SEQUENCE,
18 | typing.Mapping[str, _TYPE_FIELD_VALUE_TUPLE],
19 | ]
20 |
21 |
22 | def choose_boundary() -> str:
23 | """
24 | Our embarrassingly-simple replacement for mimetools.choose_boundary.
25 | """
26 | return binascii.hexlify(os.urandom(16)).decode()
27 |
28 |
29 | def iter_field_objects(fields: _TYPE_FIELDS) -> typing.Iterable[RequestField]:
30 | """
31 | Iterate over fields.
32 |
33 | Supports list of (k, v) tuples and dicts, and lists of
34 | :class:`~urllib3.fields.RequestField`.
35 |
36 | """
37 | iterable: typing.Iterable[RequestField | tuple[str, _TYPE_FIELD_VALUE_TUPLE]]
38 |
39 | if isinstance(fields, typing.Mapping):
40 | iterable = fields.items()
41 | else:
42 | iterable = fields
43 |
44 | for field in iterable:
45 | if isinstance(field, RequestField):
46 | yield field
47 | else:
48 | yield RequestField.from_tuples(*field)
49 |
50 |
51 | def encode_multipart_formdata(
52 | fields: _TYPE_FIELDS, boundary: str | None = None
53 | ) -> tuple[bytes, str]:
54 | """
55 | Encode a dictionary of ``fields`` using the multipart/form-data MIME format.
56 |
57 | :param fields:
58 | Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).
59 | Values are processed by :func:`urllib3.fields.RequestField.from_tuples`.
60 |
61 | :param boundary:
62 | If not specified, then a random boundary will be generated using
63 | :func:`urllib3.filepost.choose_boundary`.
64 | """
65 | body = BytesIO()
66 | if boundary is None:
67 | boundary = choose_boundary()
68 |
69 | for field in iter_field_objects(fields):
70 | body.write(f"--{boundary}\r\n".encode("latin-1"))
71 |
72 | writer(body).write(field.render_headers())
73 | data = field.data
74 |
75 | if isinstance(data, int):
76 | data = str(data) # Backwards compatibility
77 |
78 | if isinstance(data, str):
79 | writer(body).write(data)
80 | else:
81 | body.write(data)
82 |
83 | body.write(b"\r\n")
84 |
85 | body.write(f"--{boundary}--\r\n".encode("latin-1"))
86 |
87 | content_type = f"multipart/form-data; boundary={boundary}"
88 |
89 | return body.getvalue(), content_type
90 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py:
--------------------------------------------------------------------------------
```python
1 | """Stuff that differs in different Python versions and platform
2 | distributions."""
3 |
4 | import importlib.resources
5 | import logging
6 | import os
7 | import sys
8 | from typing import IO
9 |
10 | __all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"]
11 |
12 |
13 | logger = logging.getLogger(__name__)
14 |
15 |
16 | def has_tls() -> bool:
17 | try:
18 | import _ssl # noqa: F401 # ignore unused
19 |
20 | return True
21 | except ImportError:
22 | pass
23 |
24 | from pip._vendor.urllib3.util import IS_PYOPENSSL
25 |
26 | return IS_PYOPENSSL
27 |
28 |
29 | def get_path_uid(path: str) -> int:
30 | """
31 | Return path's uid.
32 |
33 | Does not follow symlinks:
34 | https://github.com/pypa/pip/pull/935#discussion_r5307003
35 |
36 | Placed this function in compat due to differences on AIX and
37 | Jython, that should eventually go away.
38 |
39 | :raises OSError: When path is a symlink or can't be read.
40 | """
41 | if hasattr(os, "O_NOFOLLOW"):
42 | fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW)
43 | file_uid = os.fstat(fd).st_uid
44 | os.close(fd)
45 | else: # AIX and Jython
46 | # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW
47 | if not os.path.islink(path):
48 | # older versions of Jython don't have `os.fstat`
49 | file_uid = os.stat(path).st_uid
50 | else:
51 | # raise OSError for parity with os.O_NOFOLLOW above
52 | raise OSError(f"{path} is a symlink; Will not return uid for symlinks")
53 | return file_uid
54 |
55 |
56 | # The importlib.resources.open_text function was deprecated in 3.11 with suggested
57 | # replacement we use below.
58 | if sys.version_info < (3, 11):
59 | open_text_resource = importlib.resources.open_text
60 | else:
61 |
62 | def open_text_resource(
63 | package: str, resource: str, encoding: str = "utf-8", errors: str = "strict"
64 | ) -> IO[str]:
65 | return (importlib.resources.files(package) / resource).open(
66 | "r", encoding=encoding, errors=errors
67 | )
68 |
69 |
70 | # packages in the stdlib that may have installation metadata, but should not be
71 | # considered 'installed'. this theoretically could be determined based on
72 | # dist.location (py27:`sysconfig.get_paths()['stdlib']`,
73 | # py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may
74 | # make this ineffective, so hard-coding
75 | stdlib_pkgs = {"python", "wsgiref", "argparse"}
76 |
77 |
78 | # windows detection, covers cpython and ironpython
79 | WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt")
80 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import absolute_import
2 |
3 | import binascii
4 | import codecs
5 | import os
6 | from io import BytesIO
7 |
8 | from .fields import RequestField
9 | from .packages import six
10 | from .packages.six import b
11 |
12 | writer = codecs.lookup("utf-8")[3]
13 |
14 |
15 | def choose_boundary():
16 | """
17 | Our embarrassingly-simple replacement for mimetools.choose_boundary.
18 | """
19 | boundary = binascii.hexlify(os.urandom(16))
20 | if not six.PY2:
21 | boundary = boundary.decode("ascii")
22 | return boundary
23 |
24 |
25 | def iter_field_objects(fields):
26 | """
27 | Iterate over fields.
28 |
29 | Supports list of (k, v) tuples and dicts, and lists of
30 | :class:`~urllib3.fields.RequestField`.
31 |
32 | """
33 | if isinstance(fields, dict):
34 | i = six.iteritems(fields)
35 | else:
36 | i = iter(fields)
37 |
38 | for field in i:
39 | if isinstance(field, RequestField):
40 | yield field
41 | else:
42 | yield RequestField.from_tuples(*field)
43 |
44 |
45 | def iter_fields(fields):
46 | """
47 | .. deprecated:: 1.6
48 |
49 | Iterate over fields.
50 |
51 | The addition of :class:`~urllib3.fields.RequestField` makes this function
52 | obsolete. Instead, use :func:`iter_field_objects`, which returns
53 | :class:`~urllib3.fields.RequestField` objects.
54 |
55 | Supports list of (k, v) tuples and dicts.
56 | """
57 | if isinstance(fields, dict):
58 | return ((k, v) for k, v in six.iteritems(fields))
59 |
60 | return ((k, v) for k, v in fields)
61 |
62 |
63 | def encode_multipart_formdata(fields, boundary=None):
64 | """
65 | Encode a dictionary of ``fields`` using the multipart/form-data MIME format.
66 |
67 | :param fields:
68 | Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).
69 |
70 | :param boundary:
71 | If not specified, then a random boundary will be generated using
72 | :func:`urllib3.filepost.choose_boundary`.
73 | """
74 | body = BytesIO()
75 | if boundary is None:
76 | boundary = choose_boundary()
77 |
78 | for field in iter_field_objects(fields):
79 | body.write(b("--%s\r\n" % (boundary)))
80 |
81 | writer(body).write(field.render_headers())
82 | data = field.data
83 |
84 | if isinstance(data, int):
85 | data = str(data) # Backwards compatibility
86 |
87 | if isinstance(data, six.text_type):
88 | writer(body).write(data)
89 | else:
90 | body.write(data)
91 |
92 | body.write(b"\r\n")
93 |
94 | body.write(b("--%s--\r\n" % (boundary)))
95 |
96 | content_type = str("multipart/form-data; boundary=%s" % boundary)
97 |
98 | return body.getvalue(), content_type
99 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py:
--------------------------------------------------------------------------------
```python
1 | import os
2 | import re
3 | import sys
4 | from typing import List, Optional
5 |
6 | from pip._internal.locations import site_packages, user_site
7 | from pip._internal.utils.virtualenv import (
8 | running_under_virtualenv,
9 | virtualenv_no_global,
10 | )
11 |
12 | __all__ = [
13 | "egg_link_path_from_sys_path",
14 | "egg_link_path_from_location",
15 | ]
16 |
17 |
18 | def _egg_link_names(raw_name: str) -> List[str]:
19 | """
20 | Convert a Name metadata value to a .egg-link name, by applying
21 | the same substitution as pkg_resources's safe_name function.
22 | Note: we cannot use canonicalize_name because it has a different logic.
23 |
24 | We also look for the raw name (without normalization) as setuptools 69 changed
25 | the way it names .egg-link files (https://github.com/pypa/setuptools/issues/4167).
26 | """
27 | return [
28 | re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link",
29 | f"{raw_name}.egg-link",
30 | ]
31 |
32 |
33 | def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]:
34 | """
35 | Look for a .egg-link file for project name, by walking sys.path.
36 | """
37 | egg_link_names = _egg_link_names(raw_name)
38 | for path_item in sys.path:
39 | for egg_link_name in egg_link_names:
40 | egg_link = os.path.join(path_item, egg_link_name)
41 | if os.path.isfile(egg_link):
42 | return egg_link
43 | return None
44 |
45 |
46 | def egg_link_path_from_location(raw_name: str) -> Optional[str]:
47 | """
48 | Return the path for the .egg-link file if it exists, otherwise, None.
49 |
50 | There's 3 scenarios:
51 | 1) not in a virtualenv
52 | try to find in site.USER_SITE, then site_packages
53 | 2) in a no-global virtualenv
54 | try to find in site_packages
55 | 3) in a yes-global virtualenv
56 | try to find in site_packages, then site.USER_SITE
57 | (don't look in global location)
58 |
59 | For #1 and #3, there could be odd cases, where there's an egg-link in 2
60 | locations.
61 |
62 | This method will just return the first one found.
63 | """
64 | sites: List[str] = []
65 | if running_under_virtualenv():
66 | sites.append(site_packages)
67 | if not virtualenv_no_global() and user_site:
68 | sites.append(user_site)
69 | else:
70 | if user_site:
71 | sites.append(user_site)
72 | sites.append(site_packages)
73 |
74 | egg_link_names = _egg_link_names(raw_name)
75 | for site in sites:
76 | for egg_link_name in egg_link_names:
77 | egglink = os.path.join(site, egg_link_name)
78 | if os.path.isfile(egglink):
79 | return egglink
80 | return None
81 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xmlsave.h:
--------------------------------------------------------------------------------
```
1 | /*
2 | * Summary: the XML document serializer
3 | * Description: API to save document or subtree of document
4 | *
5 | * Copy: See Copyright for the status of this software.
6 | *
7 | * Author: Daniel Veillard
8 | */
9 |
10 | #ifndef __XML_XMLSAVE_H__
11 | #define __XML_XMLSAVE_H__
12 |
13 | #include <libxml/xmlversion.h>
14 | #include <libxml/tree.h>
15 | #include <libxml/encoding.h>
16 | #include <libxml/xmlIO.h>
17 |
18 | #ifdef LIBXML_OUTPUT_ENABLED
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 | /**
24 | * xmlSaveOption:
25 | *
26 | * This is the set of XML save options that can be passed down
27 | * to the xmlSaveToFd() and similar calls.
28 | */
29 | typedef enum {
30 | XML_SAVE_FORMAT = 1<<0, /* format save output */
31 | XML_SAVE_NO_DECL = 1<<1, /* drop the xml declaration */
32 | XML_SAVE_NO_EMPTY = 1<<2, /* no empty tags */
33 | XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */
34 | XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */
35 | XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */
36 | XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */
37 | XML_SAVE_WSNONSIG = 1<<7 /* format with non-significant whitespace */
38 | } xmlSaveOption;
39 |
40 |
41 | typedef struct _xmlSaveCtxt xmlSaveCtxt;
42 | typedef xmlSaveCtxt *xmlSaveCtxtPtr;
43 |
44 | XMLPUBFUN xmlSaveCtxtPtr
45 | xmlSaveToFd (int fd,
46 | const char *encoding,
47 | int options);
48 | XMLPUBFUN xmlSaveCtxtPtr
49 | xmlSaveToFilename (const char *filename,
50 | const char *encoding,
51 | int options);
52 |
53 | XMLPUBFUN xmlSaveCtxtPtr
54 | xmlSaveToBuffer (xmlBufferPtr buffer,
55 | const char *encoding,
56 | int options);
57 |
58 | XMLPUBFUN xmlSaveCtxtPtr
59 | xmlSaveToIO (xmlOutputWriteCallback iowrite,
60 | xmlOutputCloseCallback ioclose,
61 | void *ioctx,
62 | const char *encoding,
63 | int options);
64 |
65 | XMLPUBFUN long
66 | xmlSaveDoc (xmlSaveCtxtPtr ctxt,
67 | xmlDocPtr doc);
68 | XMLPUBFUN long
69 | xmlSaveTree (xmlSaveCtxtPtr ctxt,
70 | xmlNodePtr node);
71 |
72 | XMLPUBFUN int
73 | xmlSaveFlush (xmlSaveCtxtPtr ctxt);
74 | XMLPUBFUN int
75 | xmlSaveClose (xmlSaveCtxtPtr ctxt);
76 | XMLPUBFUN int
77 | xmlSaveSetEscape (xmlSaveCtxtPtr ctxt,
78 | xmlCharEncodingOutputFunc escape);
79 | XMLPUBFUN int
80 | xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt,
81 | xmlCharEncodingOutputFunc escape);
82 |
83 | XMLPUBFUN int
84 | xmlThrDefIndentTreeOutput(int v);
85 | XMLPUBFUN const char *
86 | xmlThrDefTreeIndentString(const char * v);
87 | XMLPUBFUN int
88 | xmlThrDefSaveNoEmptyTags(int v);
89 |
90 | #ifdef __cplusplus
91 | }
92 | #endif
93 |
94 | #endif /* LIBXML_OUTPUT_ENABLED */
95 | #endif /* __XML_XMLSAVE_H__ */
96 |
97 |
98 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/jinja2/async_utils.py:
--------------------------------------------------------------------------------
```python
1 | import inspect
2 | import typing as t
3 | from functools import WRAPPER_ASSIGNMENTS
4 | from functools import wraps
5 |
6 | from .utils import _PassArg
7 | from .utils import pass_eval_context
8 |
9 | V = t.TypeVar("V")
10 |
11 |
12 | def async_variant(normal_func): # type: ignore
13 | def decorator(async_func): # type: ignore
14 | pass_arg = _PassArg.from_obj(normal_func)
15 | need_eval_context = pass_arg is None
16 |
17 | if pass_arg is _PassArg.environment:
18 |
19 | def is_async(args: t.Any) -> bool:
20 | return t.cast(bool, args[0].is_async)
21 |
22 | else:
23 |
24 | def is_async(args: t.Any) -> bool:
25 | return t.cast(bool, args[0].environment.is_async)
26 |
27 | # Take the doc and annotations from the sync function, but the
28 | # name from the async function. Pallets-Sphinx-Themes
29 | # build_function_directive expects __wrapped__ to point to the
30 | # sync function.
31 | async_func_attrs = ("__module__", "__name__", "__qualname__")
32 | normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs))
33 |
34 | @wraps(normal_func, assigned=normal_func_attrs)
35 | @wraps(async_func, assigned=async_func_attrs, updated=())
36 | def wrapper(*args, **kwargs): # type: ignore
37 | b = is_async(args)
38 |
39 | if need_eval_context:
40 | args = args[1:]
41 |
42 | if b:
43 | return async_func(*args, **kwargs)
44 |
45 | return normal_func(*args, **kwargs)
46 |
47 | if need_eval_context:
48 | wrapper = pass_eval_context(wrapper)
49 |
50 | wrapper.jinja_async_variant = True # type: ignore[attr-defined]
51 | return wrapper
52 |
53 | return decorator
54 |
55 |
56 | _common_primitives = {int, float, bool, str, list, dict, tuple, type(None)}
57 |
58 |
59 | async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V":
60 | # Avoid a costly call to isawaitable
61 | if type(value) in _common_primitives:
62 | return t.cast("V", value)
63 |
64 | if inspect.isawaitable(value):
65 | return await t.cast("t.Awaitable[V]", value)
66 |
67 | return t.cast("V", value)
68 |
69 |
70 | async def auto_aiter(
71 | iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]",
72 | ) -> "t.AsyncIterator[V]":
73 | if hasattr(iterable, "__aiter__"):
74 | async for item in t.cast("t.AsyncIterable[V]", iterable):
75 | yield item
76 | else:
77 | for item in iterable:
78 | yield item
79 |
80 |
81 | async def auto_to_list(
82 | value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]",
83 | ) -> t.List["V"]:
84 | return [x async for x in auto_aiter(value)]
85 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py:
--------------------------------------------------------------------------------
```python
1 | from typing import FrozenSet, Optional, Set
2 |
3 | from pip._vendor.packaging.utils import canonicalize_name
4 |
5 | from pip._internal.exceptions import CommandError
6 |
7 |
8 | class FormatControl:
9 | """Helper for managing formats from which a package can be installed."""
10 |
11 | __slots__ = ["no_binary", "only_binary"]
12 |
13 | def __init__(
14 | self,
15 | no_binary: Optional[Set[str]] = None,
16 | only_binary: Optional[Set[str]] = None,
17 | ) -> None:
18 | if no_binary is None:
19 | no_binary = set()
20 | if only_binary is None:
21 | only_binary = set()
22 |
23 | self.no_binary = no_binary
24 | self.only_binary = only_binary
25 |
26 | def __eq__(self, other: object) -> bool:
27 | if not isinstance(other, self.__class__):
28 | return NotImplemented
29 |
30 | if self.__slots__ != other.__slots__:
31 | return False
32 |
33 | return all(getattr(self, k) == getattr(other, k) for k in self.__slots__)
34 |
35 | def __repr__(self) -> str:
36 | return f"{self.__class__.__name__}({self.no_binary}, {self.only_binary})"
37 |
38 | @staticmethod
39 | def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None:
40 | if value.startswith("-"):
41 | raise CommandError(
42 | "--no-binary / --only-binary option requires 1 argument."
43 | )
44 | new = value.split(",")
45 | while ":all:" in new:
46 | other.clear()
47 | target.clear()
48 | target.add(":all:")
49 | del new[: new.index(":all:") + 1]
50 | # Without a none, we want to discard everything as :all: covers it
51 | if ":none:" not in new:
52 | return
53 | for name in new:
54 | if name == ":none:":
55 | target.clear()
56 | continue
57 | name = canonicalize_name(name)
58 | other.discard(name)
59 | target.add(name)
60 |
61 | def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]:
62 | result = {"binary", "source"}
63 | if canonical_name in self.only_binary:
64 | result.discard("source")
65 | elif canonical_name in self.no_binary:
66 | result.discard("binary")
67 | elif ":all:" in self.only_binary:
68 | result.discard("source")
69 | elif ":all:" in self.no_binary:
70 | result.discard("binary")
71 | return frozenset(result)
72 |
73 | def disallow_binaries(self) -> None:
74 | self.handle_mutual_excludes(
75 | ":all:",
76 | self.no_binary,
77 | self.only_binary,
78 | )
79 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py:
--------------------------------------------------------------------------------
```python
1 | import sys
2 | from typing import TYPE_CHECKING, Optional, Union
3 |
4 | from .jupyter import JupyterMixin
5 | from .segment import Segment
6 | from .style import Style
7 | from ._emoji_codes import EMOJI
8 | from ._emoji_replace import _emoji_replace
9 |
10 | if sys.version_info >= (3, 8):
11 | from typing import Literal
12 | else:
13 | from pip._vendor.typing_extensions import Literal # pragma: no cover
14 |
15 |
16 | if TYPE_CHECKING:
17 | from .console import Console, ConsoleOptions, RenderResult
18 |
19 |
20 | EmojiVariant = Literal["emoji", "text"]
21 |
22 |
23 | class NoEmoji(Exception):
24 | """No emoji by that name."""
25 |
26 |
27 | class Emoji(JupyterMixin):
28 | __slots__ = ["name", "style", "_char", "variant"]
29 |
30 | VARIANTS = {"text": "\uFE0E", "emoji": "\uFE0F"}
31 |
32 | def __init__(
33 | self,
34 | name: str,
35 | style: Union[str, Style] = "none",
36 | variant: Optional[EmojiVariant] = None,
37 | ) -> None:
38 | """A single emoji character.
39 |
40 | Args:
41 | name (str): Name of emoji.
42 | style (Union[str, Style], optional): Optional style. Defaults to None.
43 |
44 | Raises:
45 | NoEmoji: If the emoji doesn't exist.
46 | """
47 | self.name = name
48 | self.style = style
49 | self.variant = variant
50 | try:
51 | self._char = EMOJI[name]
52 | except KeyError:
53 | raise NoEmoji(f"No emoji called {name!r}")
54 | if variant is not None:
55 | self._char += self.VARIANTS.get(variant, "")
56 |
57 | @classmethod
58 | def replace(cls, text: str) -> str:
59 | """Replace emoji markup with corresponding unicode characters.
60 |
61 | Args:
62 | text (str): A string with emojis codes, e.g. "Hello :smiley:!"
63 |
64 | Returns:
65 | str: A string with emoji codes replaces with actual emoji.
66 | """
67 | return _emoji_replace(text)
68 |
69 | def __repr__(self) -> str:
70 | return f"<emoji {self.name!r}>"
71 |
72 | def __str__(self) -> str:
73 | return self._char
74 |
75 | def __rich_console__(
76 | self, console: "Console", options: "ConsoleOptions"
77 | ) -> "RenderResult":
78 | yield Segment(self._char, console.get_style(self.style))
79 |
80 |
81 | if __name__ == "__main__": # pragma: no cover
82 | import sys
83 |
84 | from pip._vendor.rich.columns import Columns
85 | from pip._vendor.rich.console import Console
86 |
87 | console = Console(record=True)
88 |
89 | columns = Columns(
90 | (f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200D" not in name),
91 | column_first=True,
92 | )
93 |
94 | console.print(columns)
95 | if len(sys.argv) > 1:
96 | console.save_html(sys.argv[1])
97 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/itsdangerous/url_safe.py:
--------------------------------------------------------------------------------
```python
1 | from __future__ import annotations
2 |
3 | import typing as t
4 | import zlib
5 |
6 | from ._json import _CompactJSON
7 | from .encoding import base64_decode
8 | from .encoding import base64_encode
9 | from .exc import BadPayload
10 | from .serializer import _PDataSerializer
11 | from .serializer import Serializer
12 | from .timed import TimedSerializer
13 |
14 |
15 | class URLSafeSerializerMixin(Serializer[str]):
16 | """Mixed in with a regular serializer it will attempt to zlib
17 | compress the string to make it shorter if necessary. It will also
18 | base64 encode the string so that it can safely be placed in a URL.
19 | """
20 |
21 | default_serializer: _PDataSerializer[str] = _CompactJSON
22 |
23 | def load_payload(
24 | self,
25 | payload: bytes,
26 | *args: t.Any,
27 | serializer: t.Any | None = None,
28 | **kwargs: t.Any,
29 | ) -> t.Any:
30 | decompress = False
31 |
32 | if payload.startswith(b"."):
33 | payload = payload[1:]
34 | decompress = True
35 |
36 | try:
37 | json = base64_decode(payload)
38 | except Exception as e:
39 | raise BadPayload(
40 | "Could not base64 decode the payload because of an exception",
41 | original_error=e,
42 | ) from e
43 |
44 | if decompress:
45 | try:
46 | json = zlib.decompress(json)
47 | except Exception as e:
48 | raise BadPayload(
49 | "Could not zlib decompress the payload before decoding the payload",
50 | original_error=e,
51 | ) from e
52 |
53 | return super().load_payload(json, *args, **kwargs)
54 |
55 | def dump_payload(self, obj: t.Any) -> bytes:
56 | json = super().dump_payload(obj)
57 | is_compressed = False
58 | compressed = zlib.compress(json)
59 |
60 | if len(compressed) < (len(json) - 1):
61 | json = compressed
62 | is_compressed = True
63 |
64 | base64d = base64_encode(json)
65 |
66 | if is_compressed:
67 | base64d = b"." + base64d
68 |
69 | return base64d
70 |
71 |
72 | class URLSafeSerializer(URLSafeSerializerMixin, Serializer[str]):
73 | """Works like :class:`.Serializer` but dumps and loads into a URL
74 | safe string consisting of the upper and lowercase character of the
75 | alphabet as well as ``'_'``, ``'-'`` and ``'.'``.
76 | """
77 |
78 |
79 | class URLSafeTimedSerializer(URLSafeSerializerMixin, TimedSerializer[str]):
80 | """Works like :class:`.TimedSerializer` but dumps and loads into a
81 | URL safe string consisting of the upper and lowercase character of
82 | the alphabet as well as ``'_'``, ``'-'`` and ``'.'``.
83 | """
84 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py:
--------------------------------------------------------------------------------
```python
1 | # coding: utf-8
2 | """Functions for reporting filesizes. Borrowed from https://github.com/PyFilesystem/pyfilesystem2
3 |
4 | The functions declared in this module should cover the different
5 | use cases needed to generate a string representation of a file size
6 | using several different units. Since there are many standards regarding
7 | file size units, three different functions have been implemented.
8 |
9 | See Also:
10 | * `Wikipedia: Binary prefix <https://en.wikipedia.org/wiki/Binary_prefix>`_
11 |
12 | """
13 |
14 | __all__ = ["decimal"]
15 |
16 | from typing import Iterable, List, Optional, Tuple
17 |
18 |
19 | def _to_str(
20 | size: int,
21 | suffixes: Iterable[str],
22 | base: int,
23 | *,
24 | precision: Optional[int] = 1,
25 | separator: Optional[str] = " ",
26 | ) -> str:
27 | if size == 1:
28 | return "1 byte"
29 | elif size < base:
30 | return "{:,} bytes".format(size)
31 |
32 | for i, suffix in enumerate(suffixes, 2): # noqa: B007
33 | unit = base**i
34 | if size < unit:
35 | break
36 | return "{:,.{precision}f}{separator}{}".format(
37 | (base * size / unit),
38 | suffix,
39 | precision=precision,
40 | separator=separator,
41 | )
42 |
43 |
44 | def pick_unit_and_suffix(size: int, suffixes: List[str], base: int) -> Tuple[int, str]:
45 | """Pick a suffix and base for the given size."""
46 | for i, suffix in enumerate(suffixes):
47 | unit = base**i
48 | if size < unit * base:
49 | break
50 | return unit, suffix
51 |
52 |
53 | def decimal(
54 | size: int,
55 | *,
56 | precision: Optional[int] = 1,
57 | separator: Optional[str] = " ",
58 | ) -> str:
59 | """Convert a filesize in to a string (powers of 1000, SI prefixes).
60 |
61 | In this convention, ``1000 B = 1 kB``.
62 |
63 | This is typically the format used to advertise the storage
64 | capacity of USB flash drives and the like (*256 MB* meaning
65 | actually a storage capacity of more than *256 000 000 B*),
66 | or used by **Mac OS X** since v10.6 to report file sizes.
67 |
68 | Arguments:
69 | int (size): A file size.
70 | int (precision): The number of decimal places to include (default = 1).
71 | str (separator): The string to separate the value from the units (default = " ").
72 |
73 | Returns:
74 | `str`: A string containing a abbreviated file size and units.
75 |
76 | Example:
77 | >>> filesize.decimal(30000)
78 | '30.0 kB'
79 | >>> filesize.decimal(30000, precision=2, separator="")
80 | '30.00kB'
81 |
82 | """
83 | return _to_str(
84 | size,
85 | ("kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"),
86 | 1000,
87 | precision=precision,
88 | separator=separator,
89 | )
90 |
```
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/locations/base.py:
--------------------------------------------------------------------------------
```python
1 | import functools
2 | import os
3 | import site
4 | import sys
5 | import sysconfig
6 | import typing
7 |
8 | from pip._internal.exceptions import InstallationError
9 | from pip._internal.utils import appdirs
10 | from pip._internal.utils.virtualenv import running_under_virtualenv
11 |
12 | # Application Directories
13 | USER_CACHE_DIR = appdirs.user_cache_dir("pip")
14 |
15 | # FIXME doesn't account for venv linked to global site-packages
16 | site_packages: str = sysconfig.get_path("purelib")
17 |
18 |
19 | def get_major_minor_version() -> str:
20 | """
21 | Return the major-minor version of the current Python as a string, e.g.
22 | "3.7" or "3.10".
23 | """
24 | return "{}.{}".format(*sys.version_info)
25 |
26 |
27 | def change_root(new_root: str, pathname: str) -> str:
28 | """Return 'pathname' with 'new_root' prepended.
29 |
30 | If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname).
31 | Otherwise, it requires making 'pathname' relative and then joining the
32 | two, which is tricky on DOS/Windows and Mac OS.
33 |
34 | This is borrowed from Python's standard library's distutils module.
35 | """
36 | if os.name == "posix":
37 | if not os.path.isabs(pathname):
38 | return os.path.join(new_root, pathname)
39 | else:
40 | return os.path.join(new_root, pathname[1:])
41 |
42 | elif os.name == "nt":
43 | (drive, path) = os.path.splitdrive(pathname)
44 | if path[0] == "\\":
45 | path = path[1:]
46 | return os.path.join(new_root, path)
47 |
48 | else:
49 | raise InstallationError(
50 | f"Unknown platform: {os.name}\n"
51 | "Can not change root path prefix on unknown platform."
52 | )
53 |
54 |
55 | def get_src_prefix() -> str:
56 | if running_under_virtualenv():
57 | src_prefix = os.path.join(sys.prefix, "src")
58 | else:
59 | # FIXME: keep src in cwd for now (it is not a temporary folder)
60 | try:
61 | src_prefix = os.path.join(os.getcwd(), "src")
62 | except OSError:
63 | # In case the current working directory has been renamed or deleted
64 | sys.exit("The folder you are executing pip from can no longer be found.")
65 |
66 | # under macOS + virtualenv sys.prefix is not properly resolved
67 | # it is something like /path/to/python/bin/..
68 | return os.path.abspath(src_prefix)
69 |
70 |
71 | try:
72 | # Use getusersitepackages if this is present, as it ensures that the
73 | # value is initialised properly.
74 | user_site: typing.Optional[str] = site.getusersitepackages()
75 | except AttributeError:
76 | user_site = site.USER_SITE
77 |
78 |
79 | @functools.lru_cache(maxsize=None)
80 | def is_osx_framework() -> bool:
81 | return bool(sysconfig.get_config_var("PYTHONFRAMEWORK"))
82 |
```