From 01c2f94b17d4f62032ad01711726b3ac330e94da Mon Sep 17 00:00:00 2001 From: Laurent Morvillier Date: Fri, 28 Apr 2023 14:52:12 +0200 Subject: [PATCH] flask app config --- ...29333624d5f5af8e38d9f10cd290d98fc53321668b | Bin 0 -> 134221 bytes ...cf88a244dba3560fae86f8a69626a166f0f7b3b6b8 | Bin 0 -> 16874 bytes ...b853219feb91c3867d411e0c8c02476d1e769171e8 | Bin 0 -> 11128 bytes ...18486c4b142f19362b0176ef112b8135637169c623 | Bin 0 -> 3183 bytes ...80bf7410d422bcad653ce13bcb64dda0d07d72b09d | Bin 0 -> 11235 bytes ...0337b947a6ea9f70b99ce376e712f10d1016102485 | Bin 0 -> 243150 bytes ...88ac67db4bf015be7ba931f024227668d42969ea92 | Bin 0 -> 5372 bytes ...d21da49fb515570b6f875b78707de9b08ce1088d1b | Bin 0 -> 11904 bytes ...5527d793717779fce5d54e5f21adb3344c273876fa | Bin 0 -> 45142 bytes ...ce13bdcac1a4f63ac9be8b2e7a5a8148e85ca678e2 | Bin 0 -> 17574 bytes ...71580c0925fde349fd3a6ffd504e86343817f1f661 | Bin 0 -> 14786 bytes ...26fb2bdcdb08a17f0fb0c044bac2cc256d212517bd | Bin 0 -> 97711 bytes ...b3ce87f4a33b119b8cbd0924c48daa9bde5277a8a3 | Bin 0 -> 29115 bytes ...255067faf9b8d9e286ce6151d4e2c84dd2892e77e8 | Bin 0 -> 98094 bytes __init__.py | 12 + env/bin/Activate.ps1 | 247 + env/bin/activate | 69 + env/bin/activate.csh | 26 + env/bin/activate.fish | 66 + env/bin/flask | 8 + env/bin/pip | 8 + env/bin/pip3 | 8 + env/bin/pip3.10 | 8 + env/bin/pip3.11 | 8 + env/bin/python | 1 + env/bin/python3 | 1 + env/bin/python3.11 | 1 + .../Flask-2.3.1.dist-info/INSTALLER | 1 + .../Flask-2.3.1.dist-info/LICENSE.rst | 28 + .../Flask-2.3.1.dist-info/METADATA | 118 + .../Flask-2.3.1.dist-info/RECORD | 54 + .../Flask-2.3.1.dist-info/REQUESTED | 0 .../site-packages/Flask-2.3.1.dist-info/WHEEL | 5 + .../Flask-2.3.1.dist-info/entry_points.txt | 2 + .../Flask-2.3.1.dist-info/top_level.txt | 1 + .../Jinja2-3.1.2.dist-info/INSTALLER | 1 + .../Jinja2-3.1.2.dist-info/LICENSE.rst | 28 + .../Jinja2-3.1.2.dist-info/METADATA | 113 + .../Jinja2-3.1.2.dist-info/RECORD | 58 + .../Jinja2-3.1.2.dist-info/WHEEL | 5 + .../Jinja2-3.1.2.dist-info/entry_points.txt | 2 + .../Jinja2-3.1.2.dist-info/top_level.txt | 1 + .../MarkupSafe-2.1.2.dist-info/INSTALLER | 1 + .../MarkupSafe-2.1.2.dist-info/LICENSE.rst | 28 + .../MarkupSafe-2.1.2.dist-info/METADATA | 98 + .../MarkupSafe-2.1.2.dist-info/RECORD | 14 + .../MarkupSafe-2.1.2.dist-info/WHEEL | 6 + .../MarkupSafe-2.1.2.dist-info/top_level.txt | 1 + .../Werkzeug-2.3.1.dist-info/INSTALLER | 1 + .../Werkzeug-2.3.1.dist-info/LICENSE.rst | 28 + .../Werkzeug-2.3.1.dist-info/METADATA | 120 + .../Werkzeug-2.3.1.dist-info/RECORD | 126 + .../Werkzeug-2.3.1.dist-info/WHEEL | 5 + .../Werkzeug-2.3.1.dist-info/top_level.txt | 1 + .../site-packages/_distutils_hack/__init__.py | 222 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 11196 bytes .../__pycache__/override.cpython-311.pyc | Bin 0 -> 330 bytes .../site-packages/_distutils_hack/override.py | 1 + .../blinker-1.6.2.dist-info/INSTALLER | 1 + .../blinker-1.6.2.dist-info/LICENSE.rst | 20 + .../blinker-1.6.2.dist-info/METADATA | 63 + .../blinker-1.6.2.dist-info/RECORD | 15 + .../blinker-1.6.2.dist-info/WHEEL | 5 + .../blinker-1.6.2.dist-info/top_level.txt | 1 + .../site-packages/blinker/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 651 bytes .../__pycache__/_saferef.cpython-311.pyc | Bin 0 -> 9973 bytes .../__pycache__/_utilities.cpython-311.pyc | Bin 0 -> 6722 bytes .../blinker/__pycache__/base.cpython-311.pyc | Bin 0 -> 24907 bytes .../site-packages/blinker/_saferef.py | 230 + .../site-packages/blinker/_utilities.py | 142 + .../python3.11/site-packages/blinker/base.py | 551 ++ .../python3.11/site-packages/blinker/py.typed | 0 .../click-8.1.3.dist-info/INSTALLER | 1 + .../click-8.1.3.dist-info/LICENSE.rst | 28 + .../click-8.1.3.dist-info/METADATA | 111 + .../click-8.1.3.dist-info/RECORD | 39 + .../site-packages/click-8.1.3.dist-info/WHEEL | 5 + .../click-8.1.3.dist-info/top_level.txt | 1 + .../site-packages/click/__init__.py | 73 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3691 bytes .../click/__pycache__/_compat.cpython-311.pyc | Bin 0 -> 28545 bytes .../__pycache__/_termui_impl.cpython-311.pyc | Bin 0 -> 32719 bytes .../__pycache__/_textwrap.cpython-311.pyc | Bin 0 -> 2655 bytes .../__pycache__/_winconsole.cpython-311.pyc | Bin 0 -> 13387 bytes .../click/__pycache__/core.cpython-311.pyc | Bin 0 -> 141294 bytes .../__pycache__/decorators.cpython-311.pyc | Bin 0 -> 23554 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 16123 bytes .../__pycache__/formatting.cpython-311.pyc | Bin 0 -> 15726 bytes .../click/__pycache__/globals.cpython-311.pyc | Bin 0 -> 3384 bytes .../click/__pycache__/parser.cpython-311.pyc | Bin 0 -> 23244 bytes .../shell_completion.cpython-311.pyc | Bin 0 -> 23627 bytes .../click/__pycache__/termui.cpython-311.pyc | Bin 0 -> 34740 bytes .../click/__pycache__/testing.cpython-311.pyc | Bin 0 -> 25782 bytes .../click/__pycache__/types.cpython-311.pyc | Bin 0 -> 52907 bytes .../click/__pycache__/utils.cpython-311.pyc | Bin 0 -> 26106 bytes .../python3.11/site-packages/click/_compat.py | 626 ++ .../site-packages/click/_termui_impl.py | 717 ++ .../site-packages/click/_textwrap.py | 49 + .../site-packages/click/_winconsole.py | 279 + .../python3.11/site-packages/click/core.py | 2998 ++++++ .../site-packages/click/decorators.py | 497 + .../site-packages/click/exceptions.py | 287 + .../site-packages/click/formatting.py | 301 + .../python3.11/site-packages/click/globals.py | 68 + .../python3.11/site-packages/click/parser.py | 529 + .../python3.11/site-packages/click/py.typed | 0 .../site-packages/click/shell_completion.py | 580 ++ .../python3.11/site-packages/click/termui.py | 787 ++ .../python3.11/site-packages/click/testing.py | 479 + .../python3.11/site-packages/click/types.py | 1073 ++ .../python3.11/site-packages/click/utils.py | 580 ++ .../site-packages/distutils-precedence.pth | 1 + .../site-packages/flask/__init__.py | 102 + .../site-packages/flask/__main__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4089 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 273 bytes .../flask/__pycache__/app.cpython-311.pyc | Bin 0 -> 87291 bytes .../__pycache__/blueprints.cpython-311.pyc | Bin 0 -> 32077 bytes .../flask/__pycache__/cli.cpython-311.pyc | Bin 0 -> 44248 bytes .../flask/__pycache__/config.cpython-311.pyc | Bin 0 -> 16425 bytes .../flask/__pycache__/ctx.cpython-311.pyc | Bin 0 -> 20689 bytes .../__pycache__/debughelpers.cpython-311.pyc | Bin 0 -> 9500 bytes .../flask/__pycache__/globals.cpython-311.pyc | Bin 0 -> 4281 bytes .../flask/__pycache__/helpers.cpython-311.pyc | Bin 0 -> 29827 bytes .../flask/__pycache__/logging.cpython-311.pyc | Bin 0 -> 3461 bytes .../__pycache__/scaffold.cpython-311.pyc | Bin 0 -> 36516 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 17206 bytes .../flask/__pycache__/signals.cpython-311.pyc | Bin 0 -> 1979 bytes .../__pycache__/templating.cpython-311.pyc | Bin 0 -> 10629 bytes .../flask/__pycache__/testing.cpython-311.pyc | Bin 0 -> 14643 bytes .../flask/__pycache__/typing.cpython-311.pyc | Bin 0 -> 3445 bytes .../flask/__pycache__/views.cpython-311.pyc | Bin 0 -> 7323 bytes .../__pycache__/wrappers.cpython-311.pyc | Bin 0 -> 6784 bytes env/lib/python3.11/site-packages/flask/app.py | 2213 +++++ .../site-packages/flask/blueprints.py | 626 ++ env/lib/python3.11/site-packages/flask/cli.py | 1067 ++ .../python3.11/site-packages/flask/config.py | 345 + env/lib/python3.11/site-packages/flask/ctx.py | 440 + .../site-packages/flask/debughelpers.py | 160 + .../python3.11/site-packages/flask/globals.py | 96 + .../python3.11/site-packages/flask/helpers.py | 693 ++ .../site-packages/flask/json/__init__.py | 170 + .../json/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6888 bytes .../json/__pycache__/provider.cpython-311.pyc | Bin 0 -> 10004 bytes .../json/__pycache__/tag.cpython-311.pyc | Bin 0 -> 15611 bytes .../site-packages/flask/json/provider.py | 216 + .../site-packages/flask/json/tag.py | 314 + .../python3.11/site-packages/flask/logging.py | 76 + .../python3.11/site-packages/flask/py.typed | 0 .../site-packages/flask/scaffold.py | 923 ++ .../site-packages/flask/sessions.py | 365 + .../python3.11/site-packages/flask/signals.py | 33 + .../site-packages/flask/templating.py | 220 + .../python3.11/site-packages/flask/testing.py | 292 + .../python3.11/site-packages/flask/typing.py | 82 + .../python3.11/site-packages/flask/views.py | 190 + .../site-packages/flask/wrappers.py | 173 + .../itsdangerous-2.1.2.dist-info/INSTALLER | 1 + .../itsdangerous-2.1.2.dist-info/LICENSE.rst | 28 + .../itsdangerous-2.1.2.dist-info/METADATA | 97 + .../itsdangerous-2.1.2.dist-info/RECORD | 23 + .../itsdangerous-2.1.2.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/itsdangerous/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1162 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 1400 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 0 -> 2987 bytes .../__pycache__/exc.cpython-311.pyc | Bin 0 -> 5003 bytes .../__pycache__/serializer.cpython-311.pyc | Bin 0 -> 13670 bytes .../__pycache__/signer.cpython-311.pyc | Bin 0 -> 12378 bytes .../__pycache__/timed.cpython-311.pyc | Bin 0 -> 10099 bytes .../__pycache__/url_safe.cpython-311.pyc | Bin 0 -> 4009 bytes .../site-packages/itsdangerous/_json.py | 16 + .../site-packages/itsdangerous/encoding.py | 54 + .../site-packages/itsdangerous/exc.py | 107 + .../site-packages/itsdangerous/py.typed | 0 .../site-packages/itsdangerous/serializer.py | 295 + .../site-packages/itsdangerous/signer.py | 257 + .../site-packages/itsdangerous/timed.py | 234 + .../site-packages/itsdangerous/url_safe.py | 80 + .../site-packages/jinja2/__init__.py | 37 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2132 bytes .../__pycache__/_identifier.cpython-311.pyc | Bin 0 -> 2148 bytes .../__pycache__/async_utils.cpython-311.pyc | Bin 0 -> 4654 bytes .../__pycache__/bccache.cpython-311.pyc | Bin 0 -> 20981 bytes .../__pycache__/compiler.cpython-311.pyc | Bin 0 -> 110715 bytes .../__pycache__/constants.cpython-311.pyc | Bin 0 -> 1567 bytes .../jinja2/__pycache__/debug.cpython-311.pyc | Bin 0 -> 6756 bytes .../__pycache__/defaults.cpython-311.pyc | Bin 0 -> 1733 bytes .../__pycache__/environment.cpython-311.pyc | Bin 0 -> 80671 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8627 bytes .../jinja2/__pycache__/ext.cpython-311.pyc | Bin 0 -> 43292 bytes .../__pycache__/filters.cpython-311.pyc | Bin 0 -> 75992 bytes .../__pycache__/idtracking.cpython-311.pyc | Bin 0 -> 19627 bytes .../jinja2/__pycache__/lexer.cpython-311.pyc | Bin 0 -> 35750 bytes .../__pycache__/loaders.cpython-311.pyc | Bin 0 -> 33148 bytes .../jinja2/__pycache__/meta.cpython-311.pyc | Bin 0 -> 5716 bytes .../__pycache__/nativetypes.cpython-311.pyc | Bin 0 -> 7985 bytes .../jinja2/__pycache__/nodes.cpython-311.pyc | Bin 0 -> 64570 bytes .../__pycache__/optimizer.cpython-311.pyc | Bin 0 -> 2863 bytes .../jinja2/__pycache__/parser.cpython-311.pyc | Bin 0 -> 59532 bytes .../__pycache__/runtime.cpython-311.pyc | Bin 0 -> 50732 bytes .../__pycache__/sandbox.cpython-311.pyc | Bin 0 -> 18865 bytes .../jinja2/__pycache__/tests.cpython-311.pyc | Bin 0 -> 9254 bytes .../jinja2/__pycache__/utils.cpython-311.pyc | Bin 0 -> 37129 bytes .../__pycache__/visitor.cpython-311.pyc | Bin 0 -> 5731 bytes .../site-packages/jinja2/_identifier.py | 6 + .../site-packages/jinja2/async_utils.py | 84 + .../site-packages/jinja2/bccache.py | 406 + .../site-packages/jinja2/compiler.py | 1957 ++++ .../site-packages/jinja2/constants.py | 20 + .../python3.11/site-packages/jinja2/debug.py | 191 + .../site-packages/jinja2/defaults.py | 48 + .../site-packages/jinja2/environment.py | 1667 ++++ .../site-packages/jinja2/exceptions.py | 166 + .../python3.11/site-packages/jinja2/ext.py | 859 ++ .../site-packages/jinja2/filters.py | 1840 ++++ .../site-packages/jinja2/idtracking.py | 318 + .../python3.11/site-packages/jinja2/lexer.py | 866 ++ .../site-packages/jinja2/loaders.py | 661 ++ .../python3.11/site-packages/jinja2/meta.py | 111 + .../site-packages/jinja2/nativetypes.py | 130 + .../python3.11/site-packages/jinja2/nodes.py | 1204 +++ .../site-packages/jinja2/optimizer.py | 47 + .../python3.11/site-packages/jinja2/parser.py | 1032 ++ .../python3.11/site-packages/jinja2/py.typed | 0 .../site-packages/jinja2/runtime.py | 1053 ++ .../site-packages/jinja2/sandbox.py | 428 + .../python3.11/site-packages/jinja2/tests.py | 255 + .../python3.11/site-packages/jinja2/utils.py | 755 ++ .../site-packages/jinja2/visitor.py | 92 + .../site-packages/markupsafe/__init__.py | 295 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 18382 bytes .../__pycache__/_native.cpython-311.pyc | Bin 0 -> 2753 bytes .../site-packages/markupsafe/_native.py | 63 + .../site-packages/markupsafe/_speedups.c | 320 + .../_speedups.cpython-311-x86_64-linux-gnu.so | Bin 0 -> 53656 bytes .../site-packages/markupsafe/_speedups.pyi | 9 + .../site-packages/markupsafe/py.typed | 0 .../pip-22.3.dist-info/INSTALLER | 1 + .../pip-22.3.dist-info/LICENSE.txt | 20 + .../site-packages/pip-22.3.dist-info/METADATA | 88 + .../site-packages/pip-22.3.dist-info/RECORD | 993 ++ .../pip-22.3.dist-info/REQUESTED | 0 .../site-packages/pip-22.3.dist-info/WHEEL | 5 + .../pip-22.3.dist-info/entry_points.txt | 4 + .../pip-22.3.dist-info/top_level.txt | 1 + .../python3.11/site-packages/pip/__init__.py | 13 + .../python3.11/site-packages/pip/__main__.py | 31 + .../site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 783 bytes .../pip/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 1102 bytes .../__pip-runner__.cpython-311.pyc | Bin 0 -> 2526 bytes .../site-packages/pip/_internal/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 968 bytes .../__pycache__/build_env.cpython-311.pyc | Bin 0 -> 15924 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 14729 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 19275 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 33974 bytes .../__pycache__/main.cpython-311.pyc | Bin 0 -> 768 bytes .../__pycache__/pyproject.cpython-311.pyc | Bin 0 -> 5561 bytes .../self_outdated_check.cpython-311.pyc | Bin 0 -> 11199 bytes .../__pycache__/wheel_builder.cpython-311.pyc | Bin 0 -> 16029 bytes .../site-packages/pip/_internal/build_env.py | 310 + .../site-packages/pip/_internal/cache.py | 293 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 303 bytes .../autocompletion.cpython-311.pyc | Bin 0 -> 10128 bytes .../__pycache__/base_command.cpython-311.pyc | Bin 0 -> 11093 bytes .../__pycache__/cmdoptions.cpython-311.pyc | Bin 0 -> 32882 bytes .../command_context.cpython-311.pyc | Bin 0 -> 2125 bytes .../cli/__pycache__/main.cpython-311.pyc | Bin 0 -> 2383 bytes .../__pycache__/main_parser.cpython-311.pyc | Bin 0 -> 5549 bytes .../cli/__pycache__/parser.cpython-311.pyc | Bin 0 -> 17067 bytes .../__pycache__/progress_bars.cpython-311.pyc | Bin 0 -> 3189 bytes .../__pycache__/req_command.cpython-311.pyc | Bin 0 -> 20173 bytes .../cli/__pycache__/spinners.cpython-311.pyc | Bin 0 -> 8859 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 391 bytes .../pip/_internal/cli/autocompletion.py | 171 + .../pip/_internal/cli/base_command.py | 216 + .../pip/_internal/cli/cmdoptions.py | 1049 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 70 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 68 + .../pip/_internal/cli/req_command.py | 502 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4471 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 10585 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 2321 bytes .../__pycache__/completion.cpython-311.pyc | Bin 0 -> 5485 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 14937 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 11979 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 7829 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 4157 bytes .../commands/__pycache__/hash.cpython-311.pyc | Bin 0 -> 3373 bytes .../commands/__pycache__/help.cpython-311.pyc | Bin 0 -> 1987 bytes .../__pycache__/index.cpython-311.pyc | Bin 0 -> 7780 bytes .../__pycache__/inspect.cpython-311.pyc | Bin 0 -> 4684 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 35156 bytes .../commands/__pycache__/list.cpython-311.pyc | Bin 0 -> 17213 bytes .../__pycache__/search.cpython-311.pyc | Bin 0 -> 8985 bytes .../commands/__pycache__/show.cpython-311.pyc | Bin 0 -> 11074 bytes .../__pycache__/uninstall.cpython-311.pyc | Bin 0 -> 4886 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 9973 bytes .../pip/_internal/commands/cache.py | 223 + .../pip/_internal/commands/check.py | 53 + .../pip/_internal/commands/completion.py | 126 + .../pip/_internal/commands/configuration.py | 282 + .../pip/_internal/commands/debug.py | 199 + .../pip/_internal/commands/download.py | 149 + .../pip/_internal/commands/freeze.py | 97 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 138 + .../pip/_internal/commands/inspect.py | 97 + .../pip/_internal/commands/install.py | 860 ++ .../pip/_internal/commands/list.py | 365 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 183 + .../pip/_internal/commands/uninstall.py | 106 + .../pip/_internal/commands/wheel.py | 203 + .../pip/_internal/configuration.py | 374 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1053 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 2425 bytes .../__pycache__/installed.cpython-311.pyc | Bin 0 -> 1562 bytes .../__pycache__/sdist.cpython-311.pyc | Bin 0 -> 8964 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 2156 bytes .../pip/_internal/distributions/base.py | 39 + .../pip/_internal/distributions/installed.py | 23 + .../pip/_internal/distributions/sdist.py | 150 + .../pip/_internal/distributions/wheel.py | 34 + .../site-packages/pip/_internal/exceptions.py | 660 ++ .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 257 bytes .../__pycache__/collector.cpython-311.pyc | Bin 0 -> 24614 bytes .../package_finder.cpython-311.pyc | Bin 0 -> 43721 bytes .../index/__pycache__/sources.cpython-311.pyc | Bin 0 -> 11045 bytes .../pip/_internal/index/collector.py | 505 + .../pip/_internal/index/package_finder.py | 1025 ++ .../pip/_internal/index/sources.py | 224 + .../pip/_internal/locations/__init__.py | 528 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 20708 bytes .../__pycache__/_distutils.cpython-311.pyc | Bin 0 -> 7936 bytes .../__pycache__/_sysconfig.cpython-311.pyc | Bin 0 -> 9287 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 4057 bytes .../pip/_internal/locations/_distutils.py | 180 + .../pip/_internal/locations/_sysconfig.py | 218 + .../pip/_internal/locations/base.py | 81 + .../site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 127 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6430 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 3591 bytes .../metadata/__pycache__/base.cpython-311.pyc | Bin 0 -> 38054 bytes .../__pycache__/pkg_resources.cpython-311.pyc | Bin 0 -> 16880 bytes .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 688 ++ .../_internal/metadata/importlib/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 374 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 3581 bytes .../__pycache__/_dists.cpython-311.pyc | Bin 0 -> 14612 bytes .../__pycache__/_envs.cpython-311.pyc | Bin 0 -> 12452 bytes .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 224 + .../pip/_internal/metadata/importlib/_envs.py | 188 + .../pip/_internal/metadata/pkg_resources.py | 270 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 291 bytes .../__pycache__/candidate.cpython-311.pyc | Bin 0 -> 2110 bytes .../__pycache__/direct_url.cpython-311.pyc | Bin 0 -> 11648 bytes .../format_control.cpython-311.pyc | Bin 0 -> 4698 bytes .../models/__pycache__/index.cpython-311.pyc | Bin 0 -> 1916 bytes .../installation_report.cpython-311.pyc | Bin 0 -> 2630 bytes .../models/__pycache__/link.cpython-311.pyc | Bin 0 -> 25057 bytes .../models/__pycache__/scheme.cpython-311.pyc | Bin 0 -> 1282 bytes .../__pycache__/search_scope.cpython-311.pyc | Bin 0 -> 5849 bytes .../selection_prefs.cpython-311.pyc | Bin 0 -> 2015 bytes .../__pycache__/target_python.cpython-311.pyc | Bin 0 -> 4796 bytes .../models/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 6449 bytes .../pip/_internal/models/candidate.py | 34 + .../pip/_internal/models/direct_url.py | 212 + .../pip/_internal/models/format_control.py | 80 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 53 + .../pip/_internal/models/link.py | 507 + .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 133 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 110 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 279 bytes .../network/__pycache__/auth.cpython-311.pyc | Bin 0 -> 12282 bytes .../network/__pycache__/cache.cpython-311.pyc | Bin 0 -> 5202 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 9602 bytes .../__pycache__/lazy_wheel.cpython-311.pyc | Bin 0 -> 13050 bytes .../__pycache__/session.cpython-311.pyc | Bin 0 -> 21361 bytes .../network/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2464 bytes .../__pycache__/xmlrpc.cpython-311.pyc | Bin 0 -> 3207 bytes .../pip/_internal/network/auth.py | 323 + .../pip/_internal/network/cache.py | 69 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 518 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 60 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 217 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 6636 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 11625 bytes .../__pycache__/prepare.cpython-311.pyc | Bin 0 -> 26439 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 223 bytes .../__pycache__/build_tracker.cpython-311.pyc | Bin 0 -> 8154 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 2288 bytes .../metadata_editable.cpython-311.pyc | Bin 0 -> 2324 bytes .../metadata_legacy.cpython-311.pyc | Bin 0 -> 3732 bytes .../build/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 1954 bytes .../wheel_editable.cpython-311.pyc | Bin 0 -> 2398 bytes .../__pycache__/wheel_legacy.cpython-311.pyc | Bin 0 -> 4516 bytes .../operations/build/build_tracker.py | 124 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 149 + .../pip/_internal/operations/freeze.py | 254 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 291 bytes .../editable_legacy.cpython-311.pyc | Bin 0 -> 2287 bytes .../__pycache__/legacy.cpython-311.pyc | Bin 0 -> 6133 bytes .../install/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 40056 bytes .../operations/install/editable_legacy.py | 47 + .../_internal/operations/install/legacy.py | 120 + .../pip/_internal/operations/install/wheel.py | 738 ++ .../pip/_internal/operations/prepare.py | 667 ++ .../site-packages/pip/_internal/pyproject.py | 175 + .../pip/_internal/req/__init__.py | 94 + .../req/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4463 bytes .../__pycache__/constructors.cpython-311.pyc | Bin 0 -> 20758 bytes .../req/__pycache__/req_file.cpython-311.pyc | Bin 0 -> 22472 bytes .../__pycache__/req_install.cpython-311.pyc | Bin 0 -> 40395 bytes .../req/__pycache__/req_set.cpython-311.pyc | Bin 0 -> 6021 bytes .../__pycache__/req_uninstall.cpython-311.pyc | Bin 0 -> 37062 bytes .../pip/_internal/req/constructors.py | 501 + .../pip/_internal/req/req_file.py | 544 ++ .../pip/_internal/req/req_install.py | 942 ++ .../pip/_internal/req/req_set.py | 82 + .../pip/_internal/req/req_uninstall.py | 640 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 217 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 1388 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 224 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 23844 bytes .../_internal/resolution/legacy/resolver.py | 600 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 228 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 9641 bytes .../__pycache__/candidates.cpython-311.pyc | Bin 0 -> 28891 bytes .../__pycache__/factory.cpython-311.pyc | Bin 0 -> 32065 bytes .../found_candidates.cpython-311.pyc | Bin 0 -> 6794 bytes .../__pycache__/provider.cpython-311.pyc | Bin 0 -> 11087 bytes .../__pycache__/reporter.cpython-311.pyc | Bin 0 -> 4675 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 11152 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 12344 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 556 ++ .../resolution/resolvelib/factory.py | 731 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 248 + .../resolution/resolvelib/reporter.py | 68 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 296 + .../pip/_internal/self_outdated_check.py | 239 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../utils/__pycache__/_log.cpython-311.pyc | Bin 0 -> 2033 bytes .../utils/__pycache__/appdirs.cpython-311.pyc | Bin 0 -> 2578 bytes .../utils/__pycache__/compat.cpython-311.pyc | Bin 0 -> 2279 bytes .../compatibility_tags.cpython-311.pyc | Bin 0 -> 6796 bytes .../__pycache__/datetime.cpython-311.pyc | Bin 0 -> 729 bytes .../__pycache__/deprecation.cpython-311.pyc | Bin 0 -> 7129 bytes .../direct_url_helpers.cpython-311.pyc | Bin 0 -> 3735 bytes .../distutils_args.cpython-311.pyc | Bin 0 -> 1479 bytes .../__pycache__/egg_link.cpython-311.pyc | Bin 0 -> 3231 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 0 -> 2339 bytes .../__pycache__/entrypoints.cpython-311.pyc | Bin 0 -> 4257 bytes .../__pycache__/filesystem.cpython-311.pyc | Bin 0 -> 8257 bytes .../__pycache__/filetypes.cpython-311.pyc | Bin 0 -> 1330 bytes .../utils/__pycache__/glibc.cpython-311.pyc | Bin 0 -> 2575 bytes .../utils/__pycache__/hashes.cpython-311.pyc | Bin 0 -> 8355 bytes .../inject_securetransport.cpython-311.pyc | Bin 0 -> 1350 bytes .../utils/__pycache__/logging.cpython-311.pyc | Bin 0 -> 15506 bytes .../utils/__pycache__/misc.cpython-311.pyc | Bin 0 -> 35859 bytes .../utils/__pycache__/models.cpython-311.pyc | Bin 0 -> 2952 bytes .../__pycache__/packaging.cpython-311.pyc | Bin 0 -> 2821 bytes .../setuptools_build.cpython-311.pyc | Bin 0 -> 6124 bytes .../__pycache__/subprocess.cpython-311.pyc | Bin 0 -> 9916 bytes .../__pycache__/temp_dir.cpython-311.pyc | Bin 0 -> 11456 bytes .../__pycache__/unpacking.cpython-311.pyc | Bin 0 -> 12946 bytes .../utils/__pycache__/urls.cpython-311.pyc | Bin 0 -> 2728 bytes .../__pycache__/virtualenv.cpython-311.pyc | Bin 0 -> 4958 bytes .../utils/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 7133 bytes .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 188 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/distutils_args.py | 43 + .../pip/_internal/utils/egg_link.py | 75 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 153 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 144 + .../_internal/utils/inject_securetransport.py | 35 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 723 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 195 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 246 + .../pip/_internal/utils/unpacking.py | 257 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 136 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 647 bytes .../vcs/__pycache__/bazaar.cpython-311.pyc | Bin 0 -> 5878 bytes .../vcs/__pycache__/git.cpython-311.pyc | Bin 0 -> 21566 bytes .../vcs/__pycache__/mercurial.cpython-311.pyc | Bin 0 -> 8727 bytes .../__pycache__/subversion.cpython-311.pyc | Bin 0 -> 14641 bytes .../versioncontrol.cpython-311.pyc | Bin 0 -> 31933 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 382 + .../site-packages/pip/_vendor/__init__.py | 120 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5625 bytes .../_vendor/__pycache__/six.cpython-311.pyc | Bin 0 -> 46520 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 97686 bytes .../pip/_vendor/cachecontrol/__init__.py | 18 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 854 bytes .../__pycache__/_cmd.cpython-311.pyc | Bin 0 -> 2713 bytes .../__pycache__/adapter.cpython-311.pyc | Bin 0 -> 5536 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 3792 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1147 bytes .../__pycache__/controller.cpython-311.pyc | Bin 0 -> 16554 bytes .../__pycache__/filewrapper.cpython-311.pyc | Bin 0 -> 4257 bytes .../__pycache__/heuristics.cpython-311.pyc | Bin 0 -> 6718 bytes .../__pycache__/serialize.cpython-311.pyc | Bin 0 -> 8427 bytes .../__pycache__/wrapper.cpython-311.pyc | Bin 0 -> 976 bytes .../pip/_vendor/cachecontrol/_cmd.py | 61 + .../pip/_vendor/cachecontrol/adapter.py | 137 + .../pip/_vendor/cachecontrol/cache.py | 65 + .../_vendor/cachecontrol/caches/__init__.py | 9 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 429 bytes .../__pycache__/file_cache.cpython-311.pyc | Bin 0 -> 8420 bytes .../__pycache__/redis_cache.cpython-311.pyc | Bin 0 -> 2509 bytes .../_vendor/cachecontrol/caches/file_cache.py | 188 + .../cachecontrol/caches/redis_cache.py | 39 + .../pip/_vendor/cachecontrol/compat.py | 32 + .../pip/_vendor/cachecontrol/controller.py | 439 + .../pip/_vendor/cachecontrol/filewrapper.py | 111 + .../pip/_vendor/cachecontrol/heuristics.py | 139 + .../pip/_vendor/cachecontrol/serialize.py | 190 + .../pip/_vendor/cachecontrol/wrapper.py | 33 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 354 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 755 bytes .../certifi/__pycache__/core.cpython-311.pyc | Bin 0 -> 3389 bytes .../pip/_vendor/certifi/cacert.pem | 4708 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 108 + .../pip/_vendor/chardet/__init__.py | 93 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3988 bytes .../__pycache__/big5freq.cpython-311.pyc | Bin 0 -> 27216 bytes .../__pycache__/big5prober.cpython-311.pyc | Bin 0 -> 1626 bytes .../chardistribution.cpython-311.pyc | Bin 0 -> 10509 bytes .../charsetgroupprober.cpython-311.pyc | Bin 0 -> 3954 bytes .../__pycache__/charsetprober.cpython-311.pyc | Bin 0 -> 4768 bytes .../codingstatemachine.cpython-311.pyc | Bin 0 -> 3704 bytes .../__pycache__/cp949prober.cpython-311.pyc | Bin 0 -> 1635 bytes .../chardet/__pycache__/enums.cpython-311.pyc | Bin 0 -> 3265 bytes .../__pycache__/escprober.cpython-311.pyc | Bin 0 -> 4550 bytes .../chardet/__pycache__/escsm.cpython-311.pyc | Bin 0 -> 12413 bytes .../__pycache__/eucjpprober.cpython-311.pyc | Bin 0 -> 4410 bytes .../__pycache__/euckrfreq.cpython-311.pyc | Bin 0 -> 12099 bytes .../__pycache__/euckrprober.cpython-311.pyc | Bin 0 -> 1627 bytes .../__pycache__/euctwfreq.cpython-311.pyc | Bin 0 -> 27221 bytes .../__pycache__/euctwprober.cpython-311.pyc | Bin 0 -> 1627 bytes .../__pycache__/gb2312freq.cpython-311.pyc | Bin 0 -> 19143 bytes .../__pycache__/gb2312prober.cpython-311.pyc | Bin 0 -> 1642 bytes .../__pycache__/hebrewprober.cpython-311.pyc | Bin 0 -> 4987 bytes .../__pycache__/jisfreq.cpython-311.pyc | Bin 0 -> 22172 bytes .../__pycache__/johabfreq.cpython-311.pyc | Bin 0 -> 84676 bytes .../__pycache__/johabprober.cpython-311.pyc | Bin 0 -> 1633 bytes .../__pycache__/jpcntx.cpython-311.pyc | Bin 0 -> 39693 bytes .../langbulgarianmodel.cpython-311.pyc | Bin 0 -> 85850 bytes .../langgreekmodel.cpython-311.pyc | Bin 0 -> 79272 bytes .../langhebrewmodel.cpython-311.pyc | Bin 0 -> 80034 bytes .../langhungarianmodel.cpython-311.pyc | Bin 0 -> 85804 bytes .../langrussianmodel.cpython-311.pyc | Bin 0 -> 108751 bytes .../__pycache__/langthaimodel.cpython-311.pyc | Bin 0 -> 80212 bytes .../langturkishmodel.cpython-311.pyc | Bin 0 -> 80051 bytes .../__pycache__/latin1prober.cpython-311.pyc | Bin 0 -> 7080 bytes .../mbcharsetprober.cpython-311.pyc | Bin 0 -> 3910 bytes .../mbcsgroupprober.cpython-311.pyc | Bin 0 -> 1877 bytes .../__pycache__/mbcssm.cpython-311.pyc | Bin 0 -> 31269 bytes .../sbcharsetprober.cpython-311.pyc | Bin 0 -> 5618 bytes .../sbcsgroupprober.cpython-311.pyc | Bin 0 -> 2931 bytes .../__pycache__/sjisprober.cpython-311.pyc | Bin 0 -> 4515 bytes .../universaldetector.cpython-311.pyc | Bin 0 -> 11353 bytes .../__pycache__/utf1632prober.cpython-311.pyc | Bin 0 -> 10320 bytes .../__pycache__/utf8prober.cpython-311.pyc | Bin 0 -> 3253 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 517 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 259 + .../pip/_vendor/chardet/charsetgroupprober.py | 109 + .../pip/_vendor/chardet/charsetprober.py | 138 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 216 bytes .../__pycache__/chardetect.cpython-311.pyc | Bin 0 -> 3405 bytes .../pip/_vendor/chardet/cli/chardetect.py | 86 + .../pip/_vendor/chardet/codingstatemachine.py | 88 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 82 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 260 + .../pip/_vendor/chardet/eucjpprober.py | 95 + .../pip/_vendor/chardet/euckrfreq.py | 196 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 388 + .../pip/_vendor/chardet/euctwprober.py | 47 + .../pip/_vendor/chardet/gb2312freq.py | 284 + .../pip/_vendor/chardet/gb2312prober.py | 47 + .../pip/_vendor/chardet/hebrewprober.py | 302 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 237 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4397 +++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5725 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/latin1prober.py | 145 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 56 + .../pip/_vendor/chardet/mbcssm.py | 660 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 221 bytes .../__pycache__/languages.cpython-311.pyc | Bin 0 -> 10428 bytes .../pip/_vendor/chardet/metadata/languages.py | 351 + .../pip/_vendor/chardet/sbcharsetprober.py | 160 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 98 + .../pip/_vendor/chardet/universaldetector.py | 328 + .../pip/_vendor/chardet/utf1632prober.py | 223 + .../pip/_vendor/chardet/utf8prober.py | 80 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 547 bytes .../colorama/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 4586 bytes .../__pycache__/ansitowin32.cpython-311.pyc | Bin 0 -> 15830 bytes .../__pycache__/initialise.cpython-311.pyc | Bin 0 -> 2930 bytes .../__pycache__/win32.cpython-311.pyc | Bin 0 -> 6933 bytes .../__pycache__/winterm.cpython-311.pyc | Bin 0 -> 8084 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 266 + .../pip/_vendor/colorama/initialise.py | 80 + .../pip/_vendor/colorama/win32.py | 152 + .../pip/_vendor/colorama/winterm.py | 169 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1457 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 52433 bytes .../__pycache__/database.cpython-311.pyc | Bin 0 -> 72266 bytes .../distlib/__pycache__/index.cpython-311.pyc | Bin 0 -> 26741 bytes .../__pycache__/locators.cpython-311.pyc | Bin 0 -> 66015 bytes .../__pycache__/manifest.cpython-311.pyc | Bin 0 -> 17112 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 8204 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 47401 bytes .../__pycache__/resources.cpython-311.pyc | Bin 0 -> 19042 bytes .../__pycache__/scripts.cpython-311.pyc | Bin 0 -> 21328 bytes .../distlib/__pycache__/util.cpython-311.pyc | Bin 0 -> 97816 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 34704 bytes .../distlib/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 60604 bytes .../pip/_vendor/distlib/compat.py | 1116 +++ .../pip/_vendor/distlib/database.py | 1350 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1300 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 152 + .../pip/_vendor/distlib/metadata.py | 1076 +++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 437 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 97792 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 182784 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 108032 bytes .../site-packages/pip/_vendor/distlib/util.py | 1932 ++++ .../pip/_vendor/distlib/version.py | 739 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 91648 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 168448 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 101888 bytes .../pip/_vendor/distlib/wheel.py | 1082 +++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1210 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 348 bytes .../distro/__pycache__/distro.cpython-311.pyc | Bin 0 -> 56273 bytes .../pip/_vendor/distro/distro.py | 1374 +++ .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1111 bytes .../idna/__pycache__/codec.cpython-311.pyc | Bin 0 -> 5414 bytes .../idna/__pycache__/compat.cpython-311.pyc | Bin 0 -> 1028 bytes .../idna/__pycache__/core.cpython-311.pyc | Bin 0 -> 19727 bytes .../idna/__pycache__/idnadata.cpython-311.pyc | Bin 0 -> 38987 bytes .../__pycache__/intranges.cpython-311.pyc | Bin 0 -> 3026 bytes .../__pycache__/package_data.cpython-311.pyc | Bin 0 -> 231 bytes .../__pycache__/uts46data.cpython-311.pyc | Bin 0 -> 163211 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 400 + .../pip/_vendor/idna/idnadata.py | 2151 +++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8600 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2092 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 2391 bytes .../msgpack/__pycache__/ext.cpython-311.pyc | Bin 0 -> 9225 bytes .../__pycache__/fallback.cpython-311.pyc | Bin 0 -> 47956 bytes .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1010 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 655 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 576 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13275 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8028 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3698 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16554 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7659 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34416 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21459 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6719 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21952 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pep517/__init__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 355 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 410 bytes .../pep517/__pycache__/build.cpython-311.pyc | Bin 0 -> 6659 bytes .../pep517/__pycache__/check.cpython-311.pyc | Bin 0 -> 11823 bytes .../__pycache__/colorlog.cpython-311.pyc | Bin 0 -> 4864 bytes .../__pycache__/dirtools.cpython-311.pyc | Bin 0 -> 1336 bytes .../__pycache__/envbuild.cpython-311.pyc | Bin 0 -> 7504 bytes .../pep517/__pycache__/meta.cpython-311.pyc | Bin 0 -> 5766 bytes .../__pycache__/wrappers.cpython-311.pyc | Bin 0 -> 18319 bytes .../pip/_vendor/pep517/_compat.py | 8 + .../site-packages/pip/_vendor/pep517/build.py | 126 + .../site-packages/pip/_vendor/pep517/check.py | 207 + .../pip/_vendor/pep517/colorlog.py | 113 + .../pip/_vendor/pep517/dirtools.py | 19 + .../pip/_vendor/pep517/envbuild.py | 170 + .../pip/_vendor/pep517/in_process/__init__.py | 26 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1802 bytes .../__pycache__/_in_process.cpython-311.pyc | Bin 0 -> 16501 bytes .../_vendor/pep517/in_process/_in_process.py | 351 + .../site-packages/pip/_vendor/pep517/meta.py | 93 + .../pip/_vendor/pep517/wrappers.py | 362 + .../pip/_vendor/pkg_resources/__init__.py | 3296 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 158543 bytes .../__pycache__/py31compat.cpython-311.pyc | Bin 0 -> 1009 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 + .../pip/_vendor/platformdirs/__init__.py | 340 + .../pip/_vendor/platformdirs/__main__.py | 46 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12816 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 2144 bytes .../__pycache__/android.cpython-311.pyc | Bin 0 -> 6370 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 7199 bytes .../__pycache__/macos.cpython-311.pyc | Bin 0 -> 4607 bytes .../__pycache__/unix.cpython-311.pyc | Bin 0 -> 11043 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 323 bytes .../__pycache__/windows.cpython-311.pyc | Bin 0 -> 9864 bytes .../pip/_vendor/platformdirs/android.py | 120 + .../pip/_vendor/platformdirs/api.py | 156 + .../pip/_vendor/platformdirs/macos.py | 64 + .../pip/_vendor/platformdirs/unix.py | 181 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 182 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3858 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 794 bytes .../__pycache__/cmdline.cpython-311.pyc | Bin 0 -> 30391 bytes .../__pycache__/console.cpython-311.pyc | Bin 0 -> 3111 bytes .../__pycache__/filter.cpython-311.pyc | Bin 0 -> 3518 bytes .../__pycache__/formatter.cpython-311.pyc | Bin 0 -> 3886 bytes .../__pycache__/lexer.cpython-311.pyc | Bin 0 -> 40559 bytes .../__pycache__/modeline.cpython-311.pyc | Bin 0 -> 1740 bytes .../__pycache__/plugin.cpython-311.pyc | Bin 0 -> 3750 bytes .../__pycache__/regexopt.cpython-311.pyc | Bin 0 -> 5056 bytes .../__pycache__/scanner.cpython-311.pyc | Bin 0 -> 4908 bytes .../__pycache__/sphinxext.cpython-311.pyc | Bin 0 -> 8344 bytes .../__pycache__/style.cpython-311.pyc | Bin 0 -> 7497 bytes .../__pycache__/token.cpython-311.pyc | Bin 0 -> 7482 bytes .../__pycache__/unistring.cpython-311.pyc | Bin 0 -> 33828 bytes .../pygments/__pycache__/util.cpython-311.pyc | Bin 0 -> 14628 bytes .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 40174 bytes .../pip/_vendor/pygments/formatter.py | 94 + .../_vendor/pygments/formatters/__init__.py | 143 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6900 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 4166 bytes .../__pycache__/bbcode.cpython-311.pyc | Bin 0 -> 4498 bytes .../__pycache__/groff.cpython-311.pyc | Bin 0 -> 7848 bytes .../__pycache__/html.cpython-311.pyc | Bin 0 -> 42672 bytes .../__pycache__/img.cpython-311.pyc | Bin 0 -> 28616 bytes .../__pycache__/irc.cpython-311.pyc | Bin 0 -> 7709 bytes .../__pycache__/latex.cpython-311.pyc | Bin 0 -> 21845 bytes .../__pycache__/other.cpython-311.pyc | Bin 0 -> 7676 bytes .../__pycache__/pangomarkup.cpython-311.pyc | Bin 0 -> 3196 bytes .../__pycache__/rtf.cpython-311.pyc | Bin 0 -> 6894 bytes .../__pycache__/svg.cpython-311.pyc | Bin 0 -> 9685 bytes .../__pycache__/terminal.cpython-311.pyc | Bin 0 -> 6062 bytes .../__pycache__/terminal256.cpython-311.pyc | Bin 0 -> 16445 bytes .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 989 ++ .../pip/_vendor/pygments/formatters/img.py | 645 ++ .../pip/_vendor/pygments/formatters/irc.py | 179 + .../pip/_vendor/pygments/formatters/latex.py | 521 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 882 ++ .../pip/_vendor/pygments/lexers/__init__.py | 335 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 15211 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 62792 bytes .../lexers/__pycache__/python.cpython-311.pyc | Bin 0 -> 44006 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 541 ++ .../pip/_vendor/pygments/lexers/python.py | 1204 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 88 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 155 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 97 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4475 bytes .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 308 + .../pip/_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8367 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8489 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14797 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 278402 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12961 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53786 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36398 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19558 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15384 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14308 bytes .../pip/_vendor/pyparsing/actions.py | 207 + .../pip/_vendor/pyparsing/common.py | 424 + .../pip/_vendor/pyparsing/core.py | 5814 +++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28136 bytes .../pip/_vendor/pyparsing/exceptions.py | 267 + .../pip/_vendor/pyparsing/helpers.py | 1088 +++ .../pip/_vendor/pyparsing/results.py | 760 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 352 + .../pip/_vendor/pyparsing/util.py | 235 + .../pip/_vendor/requests/__init__.py | 182 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6478 bytes .../__pycache__/__version__.cpython-311.pyc | Bin 0 -> 605 bytes .../_internal_utils.cpython-311.pyc | Bin 0 -> 2097 bytes .../__pycache__/adapters.cpython-311.pyc | Bin 0 -> 24906 bytes .../requests/__pycache__/api.cpython-311.pyc | Bin 0 -> 7445 bytes .../requests/__pycache__/auth.cpython-311.pyc | Bin 0 -> 14689 bytes .../__pycache__/certs.cpython-311.pyc | Bin 0 -> 1002 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1822 bytes .../__pycache__/cookies.cpython-311.pyc | Bin 0 -> 27199 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8545 bytes .../requests/__pycache__/help.cpython-311.pyc | Bin 0 -> 4548 bytes .../__pycache__/hooks.cpython-311.pyc | Bin 0 -> 1266 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 38927 bytes .../__pycache__/packages.cpython-311.pyc | Bin 0 -> 850 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 29712 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 6250 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 6239 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 40361 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 48 + .../pip/_vendor/requests/adapters.py | 584 ++ .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 315 + .../pip/_vendor/requests/certs.py | 24 + .../pip/_vendor/requests/compat.py | 67 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 141 + .../pip/_vendor/requests/help.py | 131 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1034 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 831 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1086 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 767 bytes .../__pycache__/providers.cpython-311.pyc | Bin 0 -> 7086 bytes .../__pycache__/reporters.cpython-311.pyc | Bin 0 -> 2816 bytes .../__pycache__/resolvers.cpython-311.pyc | Bin 0 -> 25280 bytes .../__pycache__/structs.cpython-311.pyc | Bin 0 -> 11348 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 222 bytes .../collections_abc.cpython-311.pyc | Bin 0 -> 497 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 482 + .../pip/_vendor/resolvelib/structs.py | 165 + .../pip/_vendor/rich/__init__.py | 176 + .../pip/_vendor/rich/__main__.py | 282 + .../rich/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 7378 bytes .../rich/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 11766 bytes .../__pycache__/_cell_widths.cpython-311.pyc | Bin 0 -> 7849 bytes .../__pycache__/_emoji_codes.cpython-311.pyc | Bin 0 -> 208536 bytes .../_emoji_replace.cpython-311.pyc | Bin 0 -> 1948 bytes .../_export_format.cpython-311.pyc | Bin 0 -> 2353 bytes .../__pycache__/_extension.cpython-311.pyc | Bin 0 -> 649 bytes .../rich/__pycache__/_inspect.cpython-311.pyc | Bin 0 -> 14217 bytes .../__pycache__/_log_render.cpython-311.pyc | Bin 0 -> 4791 bytes .../rich/__pycache__/_loop.cpython-311.pyc | Bin 0 -> 2129 bytes .../__pycache__/_palettes.cpython-311.pyc | Bin 0 -> 5265 bytes .../rich/__pycache__/_pick.cpython-311.pyc | Bin 0 -> 812 bytes .../rich/__pycache__/_ratio.cpython-311.pyc | Bin 0 -> 7988 bytes .../__pycache__/_spinners.cpython-311.pyc | Bin 0 -> 13698 bytes .../rich/__pycache__/_stack.cpython-311.pyc | Bin 0 -> 1144 bytes .../rich/__pycache__/_timer.cpython-311.pyc | Bin 0 -> 997 bytes .../_win32_console.cpython-311.pyc | Bin 0 -> 30204 bytes .../rich/__pycache__/_windows.cpython-311.pyc | Bin 0 -> 2850 bytes .../_windows_renderer.cpython-311.pyc | Bin 0 -> 4068 bytes .../rich/__pycache__/_wrap.cpython-311.pyc | Bin 0 -> 2823 bytes .../rich/__pycache__/abc.cpython-311.pyc | Bin 0 -> 1945 bytes .../rich/__pycache__/align.cpython-311.pyc | Bin 0 -> 13534 bytes .../rich/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 10521 bytes .../rich/__pycache__/bar.cpython-311.pyc | Bin 0 -> 4564 bytes .../rich/__pycache__/box.cpython-311.pyc | Bin 0 -> 13027 bytes .../rich/__pycache__/cells.cpython-311.pyc | Bin 0 -> 6490 bytes .../rich/__pycache__/color.cpython-311.pyc | Bin 0 -> 27485 bytes .../__pycache__/color_triplet.cpython-311.pyc | Bin 0 -> 1889 bytes .../rich/__pycache__/columns.cpython-311.pyc | Bin 0 -> 10676 bytes .../rich/__pycache__/console.cpython-311.pyc | Bin 0 -> 121432 bytes .../__pycache__/constrain.cpython-311.pyc | Bin 0 -> 2486 bytes .../__pycache__/containers.cpython-311.pyc | Bin 0 -> 10841 bytes .../rich/__pycache__/control.cpython-311.pyc | Bin 0 -> 11922 bytes .../default_styles.cpython-311.pyc | Bin 0 -> 12517 bytes .../rich/__pycache__/diagnose.cpython-311.pyc | Bin 0 -> 1840 bytes .../rich/__pycache__/emoji.cpython-311.pyc | Bin 0 -> 4828 bytes .../rich/__pycache__/errors.cpython-311.pyc | Bin 0 -> 2345 bytes .../__pycache__/file_proxy.cpython-311.pyc | Bin 0 -> 3793 bytes .../rich/__pycache__/filesize.cpython-311.pyc | Bin 0 -> 3327 bytes .../__pycache__/highlighter.cpython-311.pyc | Bin 0 -> 11018 bytes .../rich/__pycache__/json.cpython-311.pyc | Bin 0 -> 6706 bytes .../rich/__pycache__/jupyter.cpython-311.pyc | Bin 0 -> 6424 bytes .../rich/__pycache__/layout.cpython-311.pyc | Bin 0 -> 23410 bytes .../rich/__pycache__/live.cpython-311.pyc | Bin 0 -> 21175 bytes .../__pycache__/live_render.cpython-311.pyc | Bin 0 -> 5173 bytes .../rich/__pycache__/logging.cpython-311.pyc | Bin 0 -> 14263 bytes .../rich/__pycache__/markup.cpython-311.pyc | Bin 0 -> 10478 bytes .../rich/__pycache__/measure.cpython-311.pyc | Bin 0 -> 7298 bytes .../rich/__pycache__/padding.cpython-311.pyc | Bin 0 -> 7520 bytes .../rich/__pycache__/pager.cpython-311.pyc | Bin 0 -> 2265 bytes .../rich/__pycache__/palette.cpython-311.pyc | Bin 0 -> 5998 bytes .../rich/__pycache__/panel.cpython-311.pyc | Bin 0 -> 11200 bytes .../rich/__pycache__/pretty.cpython-311.pyc | Bin 0 -> 43927 bytes .../rich/__pycache__/progress.cpython-311.pyc | Bin 0 -> 82675 bytes .../__pycache__/progress_bar.cpython-311.pyc | Bin 0 -> 11041 bytes .../rich/__pycache__/prompt.cpython-311.pyc | Bin 0 -> 16425 bytes .../rich/__pycache__/protocol.cpython-311.pyc | Bin 0 -> 2114 bytes .../rich/__pycache__/region.cpython-311.pyc | Bin 0 -> 675 bytes .../rich/__pycache__/repr.cpython-311.pyc | Bin 0 -> 7723 bytes .../rich/__pycache__/rule.cpython-311.pyc | Bin 0 -> 7727 bytes .../rich/__pycache__/scope.cpython-311.pyc | Bin 0 -> 4370 bytes .../rich/__pycache__/screen.cpython-311.pyc | Bin 0 -> 2790 bytes .../rich/__pycache__/segment.cpython-311.pyc | Bin 0 -> 31632 bytes .../rich/__pycache__/spinner.cpython-311.pyc | Bin 0 -> 6912 bytes .../rich/__pycache__/status.cpython-311.pyc | Bin 0 -> 6786 bytes .../rich/__pycache__/style.cpython-311.pyc | Bin 0 -> 34208 bytes .../rich/__pycache__/styled.cpython-311.pyc | Bin 0 -> 2459 bytes .../rich/__pycache__/syntax.cpython-311.pyc | Bin 0 -> 42030 bytes .../rich/__pycache__/table.cpython-311.pyc | Bin 0 -> 48570 bytes .../terminal_theme.cpython-311.pyc | Bin 0 -> 3721 bytes .../rich/__pycache__/text.cpython-311.pyc | Bin 0 -> 64304 bytes .../rich/__pycache__/theme.cpython-311.pyc | Bin 0 -> 7169 bytes .../rich/__pycache__/themes.cpython-311.pyc | Bin 0 -> 371 bytes .../__pycache__/traceback.cpython-311.pyc | Bin 0 -> 31785 bytes .../rich/__pycache__/tree.cpython-311.pyc | Bin 0 -> 12553 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 78 + .../pip/_vendor/rich/_extension.py | 10 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 662 ++ .../pip/_vendor/rich/_windows.py | 72 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 56 + .../site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 237 + .../site-packages/pip/_vendor/rich/bar.py | 94 + .../site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 615 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2572 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 188 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 54 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 445 + .../site-packages/pip/_vendor/rich/live.py | 373 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 280 + .../site-packages/pip/_vendor/rich/markup.py | 246 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 251 + .../site-packages/pip/_vendor/rich/pretty.py | 1010 ++ .../pip/_vendor/rich/progress.py | 1703 ++++ .../pip/_vendor/rich/progress_bar.py | 224 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 152 + .../site-packages/pip/_vendor/rich/rule.py | 134 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 739 ++ .../site-packages/pip/_vendor/rich/spinner.py | 136 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 771 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 934 ++ .../site-packages/pip/_vendor/rich/table.py | 996 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1286 +++ .../site-packages/pip/_vendor/rich/theme.py | 112 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 679 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + .../site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 519 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 27829 bytes .../__pycache__/_asyncio.cpython-311.pyc | Bin 0 -> 4819 bytes .../__pycache__/_utils.cpython-311.pyc | Bin 0 -> 2111 bytes .../__pycache__/after.cpython-311.pyc | Bin 0 -> 1708 bytes .../__pycache__/before.cpython-311.pyc | Bin 0 -> 1542 bytes .../__pycache__/before_sleep.cpython-311.pyc | Bin 0 -> 2119 bytes .../tenacity/__pycache__/nap.cpython-311.pyc | Bin 0 -> 1581 bytes .../__pycache__/retry.cpython-311.pyc | Bin 0 -> 15061 bytes .../tenacity/__pycache__/stop.cpython-311.pyc | Bin 0 -> 5909 bytes .../__pycache__/tornadoweb.cpython-311.pyc | Bin 0 -> 2927 bytes .../tenacity/__pycache__/wait.cpython-311.pyc | Bin 0 -> 13384 bytes .../pip/_vendor/tenacity/_asyncio.py | 92 + .../pip/_vendor/tenacity/_utils.py | 68 + .../pip/_vendor/tenacity/after.py | 46 + .../pip/_vendor/tenacity/before.py | 41 + .../pip/_vendor/tenacity/before_sleep.py | 58 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 240 + .../pip/_vendor/tenacity/stop.py | 96 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 232 + .../pip/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 426 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 31006 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4508 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 418 bytes .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../pip/_vendor/typing_extensions.py | 2209 +++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3724 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 18335 bytes .../__pycache__/_version.cpython-311.pyc | Bin 0 -> 234 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 21954 bytes .../connectionpool.cpython-311.pyc | Bin 0 -> 37694 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 16143 bytes .../__pycache__/fields.cpython-311.pyc | Bin 0 -> 11445 bytes .../__pycache__/filepost.cpython-311.pyc | Bin 0 -> 4514 bytes .../__pycache__/poolmanager.cpython-311.pyc | Bin 0 -> 21869 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 6685 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 36168 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 567 ++ .../pip/_vendor/urllib3/connectionpool.py | 1110 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 220 bytes .../_appengine_environ.cpython-311.pyc | Bin 0 -> 1959 bytes .../__pycache__/appengine.cpython-311.pyc | Bin 0 -> 12171 bytes .../__pycache__/ntlmpool.cpython-311.pyc | Bin 0 -> 6331 bytes .../__pycache__/pyopenssl.cpython-311.pyc | Bin 0 -> 25717 bytes .../securetransport.cpython-311.pyc | Bin 0 -> 36990 bytes .../contrib/__pycache__/socks.cpython-311.pyc | Bin 0 -> 8125 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 237 bytes .../__pycache__/bindings.cpython-311.pyc | Bin 0 -> 16990 bytes .../__pycache__/low_level.cpython-311.pyc | Bin 0 -> 15637 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 519 + .../urllib3/contrib/securetransport.py | 921 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 221 bytes .../packages/__pycache__/six.cpython-311.pyc | Bin 0 -> 46558 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 231 bytes .../__pycache__/makefile.cpython-311.pyc | Bin 0 -> 1989 bytes .../urllib3/packages/backports/makefile.py | 51 + .../pip/_vendor/urllib3/packages/six.py | 1076 +++ .../pip/_vendor/urllib3/poolmanager.py | 537 + .../pip/_vendor/urllib3/request.py | 170 + .../pip/_vendor/urllib3/response.py | 866 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1423 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 5166 bytes .../util/__pycache__/proxy.cpython-311.pyc | Bin 0 -> 1740 bytes .../util/__pycache__/queue.cpython-311.pyc | Bin 0 -> 1515 bytes .../util/__pycache__/request.cpython-311.pyc | Bin 0 -> 4646 bytes .../util/__pycache__/response.cpython-311.pyc | Bin 0 -> 3504 bytes .../util/__pycache__/retry.cpython-311.pyc | Bin 0 -> 22831 bytes .../util/__pycache__/ssl_.cpython-311.pyc | Bin 0 -> 16887 bytes .../ssl_match_hostname.cpython-311.pyc | Bin 0 -> 5845 bytes .../__pycache__/ssltransport.cpython-311.pyc | Bin 0 -> 11693 bytes .../util/__pycache__/timeout.cpython-311.pyc | Bin 0 -> 11090 bytes .../util/__pycache__/url.cpython-311.pyc | Bin 0 -> 17648 bytes .../util/__pycache__/wait.cpython-311.pyc | Bin 0 -> 5032 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 268 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + .../site-packages/pip/_vendor/vendor.txt | 23 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12917 bytes .../__pycache__/labels.cpython-311.pyc | Bin 0 -> 7297 bytes .../__pycache__/mklabels.cpython-311.pyc | Bin 0 -> 3232 bytes .../__pycache__/tests.cpython-311.pyc | Bin 0 -> 11203 bytes .../x_user_defined.cpython-311.pyc | Bin 0 -> 3577 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + env/lib/python3.11/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3296 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 159884 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 214 bytes .../__pycache__/appdirs.cpython-311.pyc | Bin 0 -> 29512 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 16029 bytes .../pkg_resources/_vendor/appdirs.py | 608 ++ .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 848 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10774 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4297 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5579 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1416 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6508 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7509 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8387 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6419 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../pkg_resources/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 221 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 9452 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20319 bytes .../pkg_resources/_vendor/jaraco/context.py | 213 + .../pkg_resources/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26629 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 315 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 168708 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 27006 bytes .../_vendor/more_itertools/more.py | 4316 +++++++++ .../_vendor/more_itertools/recipes.py | 698 ++ .../_vendor/packaging/__about__.py | 26 + .../_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 665 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 586 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13285 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8038 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3708 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16573 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7678 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34426 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21469 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6729 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21962 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../pkg_resources/_vendor/packaging/tags.py | 487 + .../pkg_resources/_vendor/packaging/utils.py | 136 + .../_vendor/packaging/version.py | 504 + .../_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8365 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8499 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14807 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 278378 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12971 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53796 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36408 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19568 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15394 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14318 bytes .../_vendor/pyparsing/actions.py | 207 + .../pkg_resources/_vendor/pyparsing/common.py | 424 + .../pkg_resources/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28116 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../_vendor/pyparsing/helpers.py | 1088 +++ .../_vendor/pyparsing/results.py | 760 ++ .../_vendor/pyparsing/testing.py | 331 + .../_vendor/pyparsing/unicode.py | 352 + .../pkg_resources/_vendor/pyparsing/util.py | 235 + .../pkg_resources/_vendor/zipp.py | 329 + .../pkg_resources/extern/__init__.py | 76 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4337 bytes .../setuptools-65.5.0.dist-info/INSTALLER | 1 + .../setuptools-65.5.0.dist-info/LICENSE | 19 + .../setuptools-65.5.0.dist-info/METADATA | 144 + .../setuptools-65.5.0.dist-info/RECORD | 466 + .../setuptools-65.5.0.dist-info/REQUESTED | 0 .../setuptools-65.5.0.dist-info/WHEEL | 5 + .../entry_points.txt | 57 + .../setuptools-65.5.0.dist-info/top_level.txt | 3 + .../site-packages/setuptools/__init__.py | 247 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12931 bytes .../_deprecation_warning.cpython-311.pyc | Bin 0 -> 658 bytes .../__pycache__/_entry_points.cpython-311.pyc | Bin 0 -> 4807 bytes .../__pycache__/_imp.cpython-311.pyc | Bin 0 -> 3694 bytes .../__pycache__/_importlib.cpython-311.pyc | Bin 0 -> 1977 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1174 bytes .../__pycache__/_path.cpython-311.pyc | Bin 0 -> 1491 bytes .../__pycache__/_reqs.cpython-311.pyc | Bin 0 -> 1152 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10188 bytes .../__pycache__/build_meta.cpython-311.pyc | Bin 0 -> 28137 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 1309 bytes .../__pycache__/depends.cpython-311.pyc | Bin 0 -> 8034 bytes .../__pycache__/discovery.cpython-311.pyc | Bin 0 -> 31161 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 64287 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 2967 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 6823 bytes .../__pycache__/glob.cpython-311.pyc | Bin 0 -> 6584 bytes .../__pycache__/installer.cpython-311.pyc | Bin 0 -> 5647 bytes .../__pycache__/launch.cpython-311.pyc | Bin 0 -> 1550 bytes .../__pycache__/logging.cpython-311.pyc | Bin 0 -> 2064 bytes .../__pycache__/monkey.cpython-311.pyc | Bin 0 -> 7029 bytes .../__pycache__/msvc.cpython-311.pyc | Bin 0 -> 64374 bytes .../__pycache__/namespaces.cpython-311.pyc | Bin 0 -> 5678 bytes .../__pycache__/package_index.cpython-311.pyc | Bin 0 -> 60923 bytes .../__pycache__/py34compat.cpython-311.pyc | Bin 0 -> 733 bytes .../__pycache__/sandbox.cpython-311.pyc | Bin 0 -> 27384 bytes .../__pycache__/unicode_utils.cpython-311.pyc | Bin 0 -> 1835 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 453 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 15519 bytes .../windows_support.cpython-311.pyc | Bin 0 -> 1452 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 24 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 788 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 2941 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 883 bytes .../__pycache__/_macos_compat.cpython-311.pyc | Bin 0 -> 590 bytes .../__pycache__/_msvccompiler.cpython-311.pyc | Bin 0 -> 25162 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10716 bytes .../__pycache__/bcppcompiler.cpython-311.pyc | Bin 0 -> 13545 bytes .../__pycache__/ccompiler.cpython-311.pyc | Bin 0 -> 46500 bytes .../__pycache__/cmd.cpython-311.pyc | Bin 0 -> 18963 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 6092 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 10027 bytes .../cygwinccompiler.cpython-311.pyc | Bin 0 -> 13710 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 340 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 4018 bytes .../__pycache__/dir_util.cpython-311.pyc | Bin 0 -> 10412 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 55510 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 6813 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 10274 bytes .../__pycache__/fancy_getopt.cpython-311.pyc | Bin 0 -> 17351 bytes .../__pycache__/file_util.cpython-311.pyc | Bin 0 -> 10722 bytes .../__pycache__/filelist.cpython-311.pyc | Bin 0 -> 17699 bytes .../__pycache__/log.cpython-311.pyc | Bin 0 -> 3969 bytes .../__pycache__/msvc9compiler.cpython-311.pyc | Bin 0 -> 33705 bytes .../__pycache__/msvccompiler.cpython-311.pyc | Bin 0 -> 27086 bytes .../__pycache__/py38compat.cpython-311.pyc | Bin 0 -> 640 bytes .../__pycache__/py39compat.cpython-311.pyc | Bin 0 -> 1008 bytes .../__pycache__/spawn.cpython-311.pyc | Bin 0 -> 4493 bytes .../__pycache__/sysconfig.cpython-311.pyc | Bin 0 -> 22109 bytes .../__pycache__/text_file.cpython-311.pyc | Bin 0 -> 11342 bytes .../__pycache__/unixccompiler.cpython-311.pyc | Bin 0 -> 16574 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 21013 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 11391 bytes .../versionpredicate.cpython-311.pyc | Bin 0 -> 7767 bytes .../setuptools/_distutils/_collections.py | 56 + .../setuptools/_distutils/_functools.py | 20 + .../setuptools/_distutils/_macos_compat.py | 12 + .../setuptools/_distutils/_msvccompiler.py | 572 ++ .../setuptools/_distutils/archive_util.py | 280 + .../setuptools/_distutils/bcppcompiler.py | 408 + .../setuptools/_distutils/ccompiler.py | 1220 +++ .../setuptools/_distutils/cmd.py | 436 + .../setuptools/_distutils/command/__init__.py | 25 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 560 bytes .../_framework_compat.cpython-311.pyc | Bin 0 -> 2801 bytes .../command/__pycache__/bdist.cpython-311.pyc | Bin 0 -> 6072 bytes .../__pycache__/bdist_dumb.cpython-311.pyc | Bin 0 -> 5787 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 23339 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 6131 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 7846 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 30461 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 17650 bytes .../__pycache__/build_scripts.cpython-311.pyc | Bin 0 -> 7887 bytes .../command/__pycache__/check.cpython-311.pyc | Bin 0 -> 7559 bytes .../command/__pycache__/clean.cpython-311.pyc | Bin 0 -> 3211 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 16292 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 29523 bytes .../__pycache__/install_data.cpython-311.pyc | Bin 0 -> 3799 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 5222 bytes .../install_headers.cpython-311.pyc | Bin 0 -> 2379 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 8737 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 3180 bytes .../__pycache__/py37compat.cpython-311.pyc | Bin 0 -> 1562 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 15604 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 23867 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 10505 bytes .../_distutils/command/_framework_compat.py | 55 + .../setuptools/_distutils/command/bdist.py | 157 + .../_distutils/command/bdist_dumb.py | 144 + .../_distutils/command/bdist_rpm.py | 615 ++ .../setuptools/_distutils/command/build.py | 153 + .../_distutils/command/build_clib.py | 208 + .../_distutils/command/build_ext.py | 787 ++ .../setuptools/_distutils/command/build_py.py | 407 + .../_distutils/command/build_scripts.py | 173 + .../setuptools/_distutils/command/check.py | 151 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 377 + .../setuptools/_distutils/command/install.py | 814 ++ .../_distutils/command/install_data.py | 84 + .../_distutils/command/install_egg_info.py | 91 + .../_distutils/command/install_headers.py | 45 + .../_distutils/command/install_lib.py | 238 + .../_distutils/command/install_scripts.py | 61 + .../_distutils/command/py37compat.py | 31 + .../setuptools/_distutils/command/register.py | 319 + .../setuptools/_distutils/command/sdist.py | 531 + .../setuptools/_distutils/command/upload.py | 205 + .../setuptools/_distutils/config.py | 139 + .../setuptools/_distutils/core.py | 291 + .../setuptools/_distutils/cygwinccompiler.py | 364 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 96 + .../setuptools/_distutils/dir_util.py | 243 + .../setuptools/_distutils/dist.py | 1286 +++ .../setuptools/_distutils/errors.py | 127 + .../setuptools/_distutils/extension.py | 248 + .../setuptools/_distutils/fancy_getopt.py | 470 + .../setuptools/_distutils/file_util.py | 249 + .../setuptools/_distutils/filelist.py | 371 + .../setuptools/_distutils/log.py | 80 + .../setuptools/_distutils/msvc9compiler.py | 832 ++ .../setuptools/_distutils/msvccompiler.py | 695 ++ .../setuptools/_distutils/py38compat.py | 8 + .../setuptools/_distutils/py39compat.py | 22 + .../setuptools/_distutils/spawn.py | 109 + .../setuptools/_distutils/sysconfig.py | 558 ++ .../setuptools/_distutils/text_file.py | 287 + .../setuptools/_distutils/unixccompiler.py | 401 + .../setuptools/_distutils/util.py | 513 + .../setuptools/_distutils/version.py | 358 + .../setuptools/_distutils/versionpredicate.py | 175 + .../site-packages/setuptools/_entry_points.py | 86 + .../site-packages/setuptools/_imp.py | 82 + .../site-packages/setuptools/_importlib.py | 47 + .../site-packages/setuptools/_itertools.py | 23 + .../site-packages/setuptools/_path.py | 29 + .../site-packages/setuptools/_reqs.py | 19 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 211 bytes .../__pycache__/ordered_set.cpython-311.pyc | Bin 0 -> 21833 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 107961 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 16026 bytes .../_vendor/importlib_metadata/__init__.py | 1047 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 58274 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 3867 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 2210 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 2732 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 3654 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 2626 bytes .../__pycache__/_meta.cpython-311.pyc | Bin 0 -> 3017 bytes .../__pycache__/_text.cpython-311.pyc | Bin 0 -> 4408 bytes .../_vendor/importlib_metadata/_adapters.py | 68 + .../importlib_metadata/_collections.py | 30 + .../_vendor/importlib_metadata/_compat.py | 71 + .../_vendor/importlib_metadata/_functools.py | 104 + .../_vendor/importlib_metadata/_itertools.py | 73 + .../_vendor/importlib_metadata/_meta.py | 48 + .../_vendor/importlib_metadata/_text.py | 99 + .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 845 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10771 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4294 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5576 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1413 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6505 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7506 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8384 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6416 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../setuptools/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 218 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 9449 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20310 bytes .../setuptools/_vendor/jaraco/context.py | 213 + .../setuptools/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26617 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 311 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 149859 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 23817 bytes .../setuptools/_vendor/more_itertools/more.py | 3824 ++++++++ .../_vendor/more_itertools/recipes.py | 620 ++ .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 26 + .../setuptools/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 662 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 583 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13282 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8035 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3705 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16567 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7672 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34423 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21466 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6726 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21959 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../setuptools/_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../setuptools/_vendor/packaging/tags.py | 487 + .../setuptools/_vendor/packaging/utils.py | 136 + .../setuptools/_vendor/packaging/version.py | 504 + .../setuptools/_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8362 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8496 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14804 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 278375 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12968 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53793 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36405 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19565 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15391 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14315 bytes .../setuptools/_vendor/pyparsing/actions.py | 207 + .../setuptools/_vendor/pyparsing/common.py | 424 + .../setuptools/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28113 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../setuptools/_vendor/pyparsing/helpers.py | 1088 +++ .../setuptools/_vendor/pyparsing/results.py | 760 ++ .../setuptools/_vendor/pyparsing/testing.py | 331 + .../setuptools/_vendor/pyparsing/unicode.py | 352 + .../setuptools/_vendor/pyparsing/util.py | 235 + .../setuptools/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 433 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 31013 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4515 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 425 bytes .../setuptools/_vendor/tomli/_parser.py | 691 ++ .../setuptools/_vendor/tomli/_re.py | 107 + .../setuptools/_vendor/tomli/_types.py | 10 + .../setuptools/_vendor/typing_extensions.py | 2296 +++++ .../site-packages/setuptools/_vendor/zipp.py | 329 + .../site-packages/setuptools/archive_util.py | 213 + .../site-packages/setuptools/build_meta.py | 511 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli-arm64.exe | Bin 0 -> 137216 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 654 bytes .../command/__pycache__/alias.cpython-311.pyc | Bin 0 -> 3940 bytes .../__pycache__/bdist_egg.cpython-311.pyc | Bin 0 -> 25654 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 2207 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 7015 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 4146 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 22064 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 23233 bytes .../__pycache__/develop.cpython-311.pyc | Bin 0 -> 10949 bytes .../__pycache__/dist_info.cpython-311.pyc | Bin 0 -> 7999 bytes .../__pycache__/easy_install.cpython-311.pyc | Bin 0 -> 119552 bytes .../editable_wheel.cpython-311.pyc | Bin 0 -> 51478 bytes .../__pycache__/egg_info.cpython-311.pyc | Bin 0 -> 39927 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 6840 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 4147 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 6434 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 4298 bytes .../__pycache__/py36compat.cpython-311.pyc | Bin 0 -> 8053 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 1143 bytes .../__pycache__/rotate.cpython-311.pyc | Bin 0 -> 4208 bytes .../__pycache__/saveopts.cpython-311.pyc | Bin 0 -> 1387 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 13465 bytes .../__pycache__/setopt.cpython-311.pyc | Bin 0 -> 7736 bytes .../command/__pycache__/test.cpython-311.pyc | Bin 0 -> 14669 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 1107 bytes .../__pycache__/upload_docs.cpython-311.pyc | Bin 0 -> 11986 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 457 + .../setuptools/command/bdist_rpm.py | 40 + .../site-packages/setuptools/command/build.py | 146 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 383 + .../setuptools/command/build_py.py | 368 + .../setuptools/command/develop.py | 193 + .../setuptools/command/dist_info.py | 142 + .../setuptools/command/easy_install.py | 2312 +++++ .../setuptools/command/editable_wheel.py | 844 ++ .../setuptools/command/egg_info.py | 763 ++ .../setuptools/command/install.py | 139 + .../setuptools/command/install_egg_info.py | 63 + .../setuptools/command/install_lib.py | 122 + .../setuptools/command/install_scripts.py | 70 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 210 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 251 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 213 + .../setuptools/config/__init__.py | 35 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2047 bytes .../_apply_pyprojecttoml.cpython-311.pyc | Bin 0 -> 22581 bytes .../config/__pycache__/expand.cpython-311.pyc | Bin 0 -> 28298 bytes .../__pycache__/pyprojecttoml.cpython-311.pyc | Bin 0 -> 27548 bytes .../__pycache__/setupcfg.cpython-311.pyc | Bin 0 -> 33072 bytes .../setuptools/config/_apply_pyprojecttoml.py | 377 + .../config/_validate_pyproject/__init__.py | 34 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2335 bytes .../error_reporting.cpython-311.pyc | Bin 0 -> 20262 bytes .../extra_validations.cpython-311.pyc | Bin 0 -> 1888 bytes .../fastjsonschema_exceptions.cpython-311.pyc | Bin 0 -> 3263 bytes ...fastjsonschema_validations.cpython-311.pyc | Bin 0 -> 192983 bytes .../__pycache__/formats.cpython-311.pyc | Bin 0 -> 14388 bytes .../_validate_pyproject/error_reporting.py | 318 + .../_validate_pyproject/extra_validations.py | 36 + .../fastjsonschema_exceptions.py | 51 + .../fastjsonschema_validations.py | 1035 ++ .../config/_validate_pyproject/formats.py | 259 + .../site-packages/setuptools/config/expand.py | 462 + .../setuptools/config/pyprojecttoml.py | 493 + .../setuptools/config/setupcfg.py | 762 ++ .../site-packages/setuptools/dep_util.py | 25 + .../site-packages/setuptools/depends.py | 176 + .../site-packages/setuptools/discovery.py | 600 ++ .../site-packages/setuptools/dist.py | 1222 +++ .../site-packages/setuptools/errors.py | 58 + .../site-packages/setuptools/extension.py | 148 + .../setuptools/extern/__init__.py | 76 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4415 bytes .../site-packages/setuptools/glob.py | 167 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui-arm64.exe | Bin 0 -> 137728 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/installer.py | 104 + .../site-packages/setuptools/launch.py | 36 + .../site-packages/setuptools/logging.py | 36 + .../site-packages/setuptools/monkey.py | 165 + .../site-packages/setuptools/msvc.py | 1703 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1126 +++ .../site-packages/setuptools/py34compat.py | 13 + .../site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 222 + .../setuptools/windows_support.py | 29 + .../site-packages/werkzeug/__init__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 438 bytes .../__pycache__/_internal.cpython-311.pyc | Bin 0 -> 14831 bytes .../__pycache__/_reloader.cpython-311.pyc | Bin 0 -> 22733 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 36567 bytes .../__pycache__/formparser.cpython-311.pyc | Bin 0 -> 21164 bytes .../werkzeug/__pycache__/http.cpython-311.pyc | Bin 0 -> 59205 bytes .../__pycache__/local.cpython-311.pyc | Bin 0 -> 31281 bytes .../__pycache__/security.cpython-311.pyc | Bin 0 -> 8238 bytes .../__pycache__/serving.cpython-311.pyc | Bin 0 -> 50065 bytes .../werkzeug/__pycache__/test.cpython-311.pyc | Bin 0 -> 67189 bytes .../__pycache__/testapp.cpython-311.pyc | Bin 0 -> 9214 bytes .../werkzeug/__pycache__/urls.cpython-311.pyc | Bin 0 -> 61638 bytes .../__pycache__/user_agent.cpython-311.pyc | Bin 0 -> 2335 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 30483 bytes .../werkzeug/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 37344 bytes .../site-packages/werkzeug/_internal.py | 311 + .../site-packages/werkzeug/_reloader.py | 458 + .../werkzeug/datastructures/__init__.py | 34 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2123 bytes .../__pycache__/accept.cpython-311.pyc | Bin 0 -> 15741 bytes .../__pycache__/auth.cpython-311.pyc | Bin 0 -> 23323 bytes .../__pycache__/cache_control.cpython-311.pyc | Bin 0 -> 8723 bytes .../__pycache__/csp.cpython-311.pyc | Bin 0 -> 5979 bytes .../__pycache__/etag.cpython-311.pyc | Bin 0 -> 5725 bytes .../__pycache__/file_storage.cpython-311.pyc | Bin 0 -> 8709 bytes .../__pycache__/headers.cpython-311.pyc | Bin 0 -> 27765 bytes .../__pycache__/mixins.cpython-311.pyc | Bin 0 -> 13164 bytes .../__pycache__/range.cpython-311.pyc | Bin 0 -> 9019 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 53415 bytes .../werkzeug/datastructures/accept.py | 326 + .../werkzeug/datastructures/accept.pyi | 54 + .../werkzeug/datastructures/auth.py | 509 + .../werkzeug/datastructures/cache_control.py | 175 + .../werkzeug/datastructures/cache_control.pyi | 109 + .../werkzeug/datastructures/csp.py | 94 + .../werkzeug/datastructures/csp.pyi | 169 + .../werkzeug/datastructures/etag.py | 95 + .../werkzeug/datastructures/etag.pyi | 30 + .../werkzeug/datastructures/file_storage.py | 192 + .../werkzeug/datastructures/file_storage.pyi | 47 + .../werkzeug/datastructures/headers.py | 566 ++ .../werkzeug/datastructures/headers.pyi | 109 + .../werkzeug/datastructures/mixins.py | 242 + .../werkzeug/datastructures/mixins.pyi | 97 + .../werkzeug/datastructures/range.py | 180 + .../werkzeug/datastructures/range.pyi | 57 + .../werkzeug/datastructures/structures.py | 1006 ++ .../werkzeug/datastructures/structures.pyi | 208 + .../site-packages/werkzeug/debug/__init__.py | 534 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 24735 bytes .../debug/__pycache__/console.cpython-311.pyc | Bin 0 -> 13459 bytes .../debug/__pycache__/repr.cpython-311.pyc | Bin 0 -> 16219 bytes .../debug/__pycache__/tbtools.cpython-311.pyc | Bin 0 -> 17981 bytes .../site-packages/werkzeug/debug/console.py | 219 + .../site-packages/werkzeug/debug/repr.py | 283 + .../werkzeug/debug/shared/ICON_LICENSE.md | 6 + .../werkzeug/debug/shared/console.png | Bin 0 -> 507 bytes .../werkzeug/debug/shared/debugger.js | 359 + .../werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes .../werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes .../werkzeug/debug/shared/style.css | 150 + .../site-packages/werkzeug/debug/tbtools.py | 437 + .../site-packages/werkzeug/exceptions.py | 879 ++ .../site-packages/werkzeug/formparser.py | 549 ++ .../python3.11/site-packages/werkzeug/http.py | 1528 +++ .../site-packages/werkzeug/local.py | 643 ++ .../werkzeug/middleware/__init__.py | 22 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 730 bytes .../__pycache__/dispatcher.cpython-311.pyc | Bin 0 -> 3504 bytes .../__pycache__/http_proxy.cpython-311.pyc | Bin 0 -> 10998 bytes .../__pycache__/lint.cpython-311.pyc | Bin 0 -> 20951 bytes .../__pycache__/profiler.cpython-311.pyc | Bin 0 -> 7000 bytes .../__pycache__/proxy_fix.cpython-311.pyc | Bin 0 -> 7701 bytes .../__pycache__/shared_data.cpython-311.pyc | Bin 0 -> 13812 bytes .../werkzeug/middleware/dispatcher.py | 80 + .../werkzeug/middleware/http_proxy.py | 235 + .../site-packages/werkzeug/middleware/lint.py | 420 + .../werkzeug/middleware/profiler.py | 141 + .../werkzeug/middleware/proxy_fix.py | 182 + .../werkzeug/middleware/shared_data.py | 282 + .../site-packages/werkzeug/py.typed | 0 .../werkzeug/routing/__init__.py | 133 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5077 bytes .../__pycache__/converters.cpython-311.pyc | Bin 0 -> 12915 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8875 bytes .../routing/__pycache__/map.cpython-311.pyc | Bin 0 -> 42105 bytes .../__pycache__/matcher.cpython-311.pyc | Bin 0 -> 9113 bytes .../routing/__pycache__/rules.cpython-311.pyc | Bin 0 -> 41499 bytes .../werkzeug/routing/converters.py | 270 + .../werkzeug/routing/exceptions.py | 148 + .../site-packages/werkzeug/routing/map.py | 974 ++ .../site-packages/werkzeug/routing/matcher.py | 202 + .../site-packages/werkzeug/routing/rules.py | 913 ++ .../site-packages/werkzeug/sansio/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 208 bytes .../sansio/__pycache__/http.cpython-311.pyc | Bin 0 -> 7051 bytes .../__pycache__/multipart.cpython-311.pyc | Bin 0 -> 14989 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 27504 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 35132 bytes .../sansio/__pycache__/utils.cpython-311.pyc | Bin 0 -> 6675 bytes .../site-packages/werkzeug/sansio/http.py | 202 + .../werkzeug/sansio/multipart.py | 305 + .../site-packages/werkzeug/sansio/request.py | 659 ++ .../site-packages/werkzeug/sansio/response.py | 789 ++ .../site-packages/werkzeug/sansio/utils.py | 158 + .../site-packages/werkzeug/security.py | 172 + .../site-packages/werkzeug/serving.py | 1107 +++ .../python3.11/site-packages/werkzeug/test.py | 1538 +++ .../site-packages/werkzeug/testapp.py | 181 + .../python3.11/site-packages/werkzeug/urls.py | 1370 +++ .../site-packages/werkzeug/user_agent.py | 47 + .../site-packages/werkzeug/utils.py | 694 ++ .../werkzeug/wrappers/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 373 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 27814 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 37359 bytes .../werkzeug/wrappers/request.py | 659 ++ .../werkzeug/wrappers/response.py | 834 ++ .../python3.11/site-packages/werkzeug/wsgi.py | 843 ++ env/lib64 | 1 + env/pyvenv.cfg | 5 + templates/hello.html | 4 + 1813 files changed, 331751 insertions(+) create mode 100644 .cache/pip/http/0/5/c/5/1/05c5175540a79929333624d5f5af8e38d9f10cd290d98fc53321668b create mode 100644 .cache/pip/http/1/d/a/3/b/1da3b992fe4397cf88a244dba3560fae86f8a69626a166f0f7b3b6b8 create mode 100644 .cache/pip/http/1/e/6/f/2/1e6f2fa1119d47b853219feb91c3867d411e0c8c02476d1e769171e8 create mode 100644 .cache/pip/http/2/2/6/e/2/226e20ef37baae18486c4b142f19362b0176ef112b8135637169c623 create mode 100644 .cache/pip/http/4/5/9/7/6/45976c194ebb9180bf7410d422bcad653ce13bcb64dda0d07d72b09d create mode 100644 .cache/pip/http/4/7/b/e/c/47bec2127f2b030337b947a6ea9f70b99ce376e712f10d1016102485 create mode 100644 .cache/pip/http/8/5/3/8/5/85385fd8a53d3d88ac67db4bf015be7ba931f024227668d42969ea92 create mode 100644 .cache/pip/http/8/a/c/4/d/8ac4d14dc45e27d21da49fb515570b6f875b78707de9b08ce1088d1b create mode 100644 .cache/pip/http/9/4/5/2/4/9452417670b2e75527d793717779fce5d54e5f21adb3344c273876fa create mode 100644 .cache/pip/http/9/c/c/6/9/9cc6939c61442ece13bdcac1a4f63ac9be8b2e7a5a8148e85ca678e2 create mode 100644 .cache/pip/http/b/a/3/5/9/ba35908ba340b071580c0925fde349fd3a6ffd504e86343817f1f661 create mode 100644 .cache/pip/http/c/e/0/b/8/ce0b863dd6f9fe26fb2bdcdb08a17f0fb0c044bac2cc256d212517bd create mode 100644 .cache/pip/http/e/6/a/0/3/e6a03c9eea04e9b3ce87f4a33b119b8cbd0924c48daa9bde5277a8a3 create mode 100644 .cache/pip/http/f/d/9/e/1/fd9e1edb16c7db255067faf9b8d9e286ce6151d4e2c84dd2892e77e8 create mode 100644 __init__.py create mode 100644 env/bin/Activate.ps1 create mode 100644 env/bin/activate create mode 100644 env/bin/activate.csh create mode 100644 env/bin/activate.fish create mode 100755 env/bin/flask create mode 100755 env/bin/pip create mode 100755 env/bin/pip3 create mode 100755 env/bin/pip3.10 create mode 100755 env/bin/pip3.11 create mode 120000 env/bin/python create mode 120000 env/bin/python3 create mode 120000 env/bin/python3.11 create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/REQUESTED create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/entry_points.txt create mode 100644 env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt create mode 100644 env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/_distutils_hack/__init__.py create mode 100644 env/lib/python3.11/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/_distutils_hack/__pycache__/override.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/_distutils_hack/override.py create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/blinker/__init__.py create mode 100644 env/lib/python3.11/site-packages/blinker/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/blinker/__pycache__/_saferef.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/blinker/__pycache__/_utilities.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/blinker/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/blinker/_saferef.py create mode 100644 env/lib/python3.11/site-packages/blinker/_utilities.py create mode 100644 env/lib/python3.11/site-packages/blinker/base.py create mode 100644 env/lib/python3.11/site-packages/blinker/py.typed create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/click-8.1.3.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/click/__init__.py create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/_textwrap.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/_winconsole.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/decorators.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/formatting.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/globals.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/shell_completion.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/termui.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/testing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/types.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/click/_compat.py create mode 100644 env/lib/python3.11/site-packages/click/_termui_impl.py create mode 100644 env/lib/python3.11/site-packages/click/_textwrap.py create mode 100644 env/lib/python3.11/site-packages/click/_winconsole.py create mode 100644 env/lib/python3.11/site-packages/click/core.py create mode 100644 env/lib/python3.11/site-packages/click/decorators.py create mode 100644 env/lib/python3.11/site-packages/click/exceptions.py create mode 100644 env/lib/python3.11/site-packages/click/formatting.py create mode 100644 env/lib/python3.11/site-packages/click/globals.py create mode 100644 env/lib/python3.11/site-packages/click/parser.py create mode 100644 env/lib/python3.11/site-packages/click/py.typed create mode 100644 env/lib/python3.11/site-packages/click/shell_completion.py create mode 100644 env/lib/python3.11/site-packages/click/termui.py create mode 100644 env/lib/python3.11/site-packages/click/testing.py create mode 100644 env/lib/python3.11/site-packages/click/types.py create mode 100644 env/lib/python3.11/site-packages/click/utils.py create mode 100644 env/lib/python3.11/site-packages/distutils-precedence.pth create mode 100644 env/lib/python3.11/site-packages/flask/__init__.py create mode 100644 env/lib/python3.11/site-packages/flask/__main__.py create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/app.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/blueprints.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/cli.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/config.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/ctx.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/debughelpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/globals.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/helpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/logging.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/scaffold.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/sessions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/signals.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/templating.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/testing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/typing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/views.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/__pycache__/wrappers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/app.py create mode 100644 env/lib/python3.11/site-packages/flask/blueprints.py create mode 100644 env/lib/python3.11/site-packages/flask/cli.py create mode 100644 env/lib/python3.11/site-packages/flask/config.py create mode 100644 env/lib/python3.11/site-packages/flask/ctx.py create mode 100644 env/lib/python3.11/site-packages/flask/debughelpers.py create mode 100644 env/lib/python3.11/site-packages/flask/globals.py create mode 100644 env/lib/python3.11/site-packages/flask/helpers.py create mode 100644 env/lib/python3.11/site-packages/flask/json/__init__.py create mode 100644 env/lib/python3.11/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/json/__pycache__/provider.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/json/__pycache__/tag.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/flask/json/provider.py create mode 100644 env/lib/python3.11/site-packages/flask/json/tag.py create mode 100644 env/lib/python3.11/site-packages/flask/logging.py create mode 100644 env/lib/python3.11/site-packages/flask/py.typed create mode 100644 env/lib/python3.11/site-packages/flask/scaffold.py create mode 100644 env/lib/python3.11/site-packages/flask/sessions.py create mode 100644 env/lib/python3.11/site-packages/flask/signals.py create mode 100644 env/lib/python3.11/site-packages/flask/templating.py create mode 100644 env/lib/python3.11/site-packages/flask/testing.py create mode 100644 env/lib/python3.11/site-packages/flask/typing.py create mode 100644 env/lib/python3.11/site-packages/flask/views.py create mode 100644 env/lib/python3.11/site-packages/flask/wrappers.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__init__.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/encoding.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/exc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/signer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/timed.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/__pycache__/url_safe.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/itsdangerous/_json.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/encoding.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/exc.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/py.typed create mode 100644 env/lib/python3.11/site-packages/itsdangerous/serializer.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/signer.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/timed.py create mode 100644 env/lib/python3.11/site-packages/itsdangerous/url_safe.py create mode 100644 env/lib/python3.11/site-packages/jinja2/__init__.py create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/constants.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/debug.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/environment.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/ext.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/filters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/lexer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/loaders.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/meta.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/nativetypes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/nodes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/tests.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/jinja2/_identifier.py create mode 100644 env/lib/python3.11/site-packages/jinja2/async_utils.py create mode 100644 env/lib/python3.11/site-packages/jinja2/bccache.py create mode 100644 env/lib/python3.11/site-packages/jinja2/compiler.py create mode 100644 env/lib/python3.11/site-packages/jinja2/constants.py create mode 100644 env/lib/python3.11/site-packages/jinja2/debug.py create mode 100644 env/lib/python3.11/site-packages/jinja2/defaults.py create mode 100644 env/lib/python3.11/site-packages/jinja2/environment.py create mode 100644 env/lib/python3.11/site-packages/jinja2/exceptions.py create mode 100644 env/lib/python3.11/site-packages/jinja2/ext.py create mode 100644 env/lib/python3.11/site-packages/jinja2/filters.py create mode 100644 env/lib/python3.11/site-packages/jinja2/idtracking.py create mode 100644 env/lib/python3.11/site-packages/jinja2/lexer.py create mode 100644 env/lib/python3.11/site-packages/jinja2/loaders.py create mode 100644 env/lib/python3.11/site-packages/jinja2/meta.py create mode 100644 env/lib/python3.11/site-packages/jinja2/nativetypes.py create mode 100644 env/lib/python3.11/site-packages/jinja2/nodes.py create mode 100644 env/lib/python3.11/site-packages/jinja2/optimizer.py create mode 100644 env/lib/python3.11/site-packages/jinja2/parser.py create mode 100644 env/lib/python3.11/site-packages/jinja2/py.typed create mode 100644 env/lib/python3.11/site-packages/jinja2/runtime.py create mode 100644 env/lib/python3.11/site-packages/jinja2/sandbox.py create mode 100644 env/lib/python3.11/site-packages/jinja2/tests.py create mode 100644 env/lib/python3.11/site-packages/jinja2/utils.py create mode 100644 env/lib/python3.11/site-packages/jinja2/visitor.py create mode 100644 env/lib/python3.11/site-packages/markupsafe/__init__.py create mode 100644 env/lib/python3.11/site-packages/markupsafe/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/markupsafe/__pycache__/_native.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/markupsafe/_native.py create mode 100644 env/lib/python3.11/site-packages/markupsafe/_speedups.c create mode 100755 env/lib/python3.11/site-packages/markupsafe/_speedups.cpython-311-x86_64-linux-gnu.so create mode 100644 env/lib/python3.11/site-packages/markupsafe/_speedups.pyi create mode 100644 env/lib/python3.11/site-packages/markupsafe/py.typed create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/LICENSE.txt create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/REQUESTED create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/entry_points.txt create mode 100644 env/lib/python3.11/site-packages/pip-22.3.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/pip/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/__pip-runner__.py create mode 100644 env/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/build_env.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/base_command.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/command_context.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/main.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/parser.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/req_command.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/spinners.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/check.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/completion.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/configuration.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/debug.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/download.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/freeze.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/hash.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/help.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/index.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/inspect.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/install.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/list.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/search.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/show.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/commands/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/configuration.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/base.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/installed.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/collector.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/package_finder.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/index/sources.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/locations/base.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/main.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/_json.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/base.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/candidate.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/direct_url.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/format_control.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/index.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/installation_report.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/link.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/scheme.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/search_scope.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/target_python.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/models/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/auth.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/download.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/session.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/utils.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/check.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/freeze.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/legacy.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/operations/prepare.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/pyproject.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/constructors.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/req_file.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/req_install.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/req_set.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/base.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/_log.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/datetime.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/distutils_args.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/encoding.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/glibc.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/hashes.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/logging.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/misc.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/models.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/packaging.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/urls.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/utils/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/git.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 env/lib/python3.11/site-packages/pip/_internal/wheel_builder.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/certifi/core.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/chardet/version.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/database.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/index.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/locators.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/markers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/resources.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/util.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/version.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/distro/distro.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/codec.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/core.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/tags.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/packaging/version.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/dirtools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/meta.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/_compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/build.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/check.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/colorlog.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/dirtools.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/envbuild.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/_in_process.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/meta.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pep517/wrappers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pkg_resources/py31compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/console.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/filter.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/style.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/token.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pygments/util.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/__version__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/adapters.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/api.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/auth.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/certs.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/compat.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/cookies.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/help.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/hooks.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/models.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/packages.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/sessions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/structures.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/requests/utils.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__main__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_extension.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_loop.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_pick.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_stack.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_timer.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_windows.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/abc.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/align.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/ansi.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/bar.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/box.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/cells.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/color.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/columns.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/console.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/constrain.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/containers.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/control.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/emoji.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/errors.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/filesize.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/json.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/layout.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/live.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/live_render.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/logging.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/markup.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/measure.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/padding.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/pager.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/palette.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/panel.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/pretty.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/progress.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/prompt.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/protocol.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/region.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/repr.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/rule.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/scope.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/screen.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/segment.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/spinner.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/status.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/style.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/styled.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/syntax.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/table.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/text.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/theme.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/themes.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/traceback.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/rich/tree.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/six.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/after.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/before.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/_re.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/tomli/_types.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/typing_extensions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/response.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/vendor.txt create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 env/lib/python3.11/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 env/lib/python3.11/site-packages/pip/py.typed create mode 100644 env/lib/python3.11/site-packages/pkg_resources/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_common.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/abc.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/readers.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/simple.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/context.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/functools.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/more.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/recipes.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_manylinux.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_musllinux.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/actions.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/common.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/core.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/helpers.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/results.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/testing.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/unicode.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/util.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/_vendor/zipp.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/extern/__init__.py create mode 100644 env/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/INSTALLER create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/LICENSE create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/METADATA create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/RECORD create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/REQUESTED create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/WHEEL create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/entry_points.txt create mode 100644 env/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/top_level.txt create mode 100644 env/lib/python3.11/site-packages/setuptools/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_entry_points.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_imp.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_importlib.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_itertools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_path.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/_reqs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/archive_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/build_meta.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/dep_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/depends.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/discovery.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/dist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/errors.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/extension.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/glob.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/installer.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/launch.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/logging.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/monkey.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/msvc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/namespaces.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/package_index.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/py34compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/sandbox.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/unicode_utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/__pycache__/windows_support.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_deprecation_warning.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_collections.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_functools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_macos_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_msvccompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/archive_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/bcppcompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/ccompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/cmd.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/config.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/cygwinccompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/debug.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dep_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dir_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/errors.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/extension.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/fancy_getopt.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/file_util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/filelist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/log.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/msvc9compiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/msvccompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/py38compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/py39compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/spawn.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/sysconfig.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/text_file.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/unixccompiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/versionpredicate.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/_collections.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/_functools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/_macos_compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/archive_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/cmd.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/_framework_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_py.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_scripts.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/check.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/clean.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/config.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_data.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_headers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/py37compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/register.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/sdist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/upload.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/_framework_compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/build.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/check.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/clean.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/config.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/register.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/command/upload.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/config.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/core.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/debug.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/dep_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/dir_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/dist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/errors.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/extension.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/file_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/filelist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/log.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/py38compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/py39compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/spawn.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/text_file.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/version.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_entry_points.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_imp.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_importlib.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_itertools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_path.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_reqs.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_adapters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_collections.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_functools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_itertools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_meta.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_text.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_collections.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_functools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_meta.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_text.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_adapters.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_common.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_itertools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_legacy.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/abc.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/readers.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/simple.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/context.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/functools.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/text/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/_manylinux.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/_musllinux.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/actions.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/common.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/core.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/exceptions.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/helpers.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/results.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/testing.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/unicode.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/_parser.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/_re.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/tomli/_types.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/typing_extensions.py create mode 100644 env/lib/python3.11/site-packages/setuptools/_vendor/zipp.py create mode 100644 env/lib/python3.11/site-packages/setuptools/archive_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/build_meta.py create mode 100644 env/lib/python3.11/site-packages/setuptools/cli-32.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/cli-64.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/cli-arm64.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/cli.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/alias.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/build.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/build_py.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/develop.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/dist_info.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/easy_install.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/editable_wheel.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/egg_info.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/install.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/py36compat.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/register.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/rotate.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/saveopts.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/sdist.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/setopt.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/test.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/upload.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/__pycache__/upload_docs.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/command/alias.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/bdist_egg.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/bdist_rpm.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/build.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/build_clib.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/build_ext.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/build_py.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/develop.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/dist_info.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/easy_install.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/editable_wheel.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/egg_info.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/install.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/install_egg_info.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/install_lib.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/install_scripts.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/launcher manifest.xml create mode 100644 env/lib/python3.11/site-packages/setuptools/command/py36compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/register.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/rotate.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/saveopts.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/sdist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/setopt.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/test.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/upload.py create mode 100644 env/lib/python3.11/site-packages/setuptools/command/upload_docs.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__pycache__/_apply_pyprojecttoml.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__pycache__/expand.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__pycache__/pyprojecttoml.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/__pycache__/setupcfg.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/error_reporting.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/extra_validations.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_validations.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/formats.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/error_reporting.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/extra_validations.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/formats.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/expand.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py create mode 100644 env/lib/python3.11/site-packages/setuptools/config/setupcfg.py create mode 100644 env/lib/python3.11/site-packages/setuptools/dep_util.py create mode 100644 env/lib/python3.11/site-packages/setuptools/depends.py create mode 100644 env/lib/python3.11/site-packages/setuptools/discovery.py create mode 100644 env/lib/python3.11/site-packages/setuptools/dist.py create mode 100644 env/lib/python3.11/site-packages/setuptools/errors.py create mode 100644 env/lib/python3.11/site-packages/setuptools/extension.py create mode 100644 env/lib/python3.11/site-packages/setuptools/extern/__init__.py create mode 100644 env/lib/python3.11/site-packages/setuptools/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/setuptools/glob.py create mode 100644 env/lib/python3.11/site-packages/setuptools/gui-32.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/gui-64.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/gui-arm64.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/gui.exe create mode 100644 env/lib/python3.11/site-packages/setuptools/installer.py create mode 100644 env/lib/python3.11/site-packages/setuptools/launch.py create mode 100644 env/lib/python3.11/site-packages/setuptools/logging.py create mode 100644 env/lib/python3.11/site-packages/setuptools/monkey.py create mode 100644 env/lib/python3.11/site-packages/setuptools/msvc.py create mode 100644 env/lib/python3.11/site-packages/setuptools/namespaces.py create mode 100644 env/lib/python3.11/site-packages/setuptools/package_index.py create mode 100644 env/lib/python3.11/site-packages/setuptools/py34compat.py create mode 100644 env/lib/python3.11/site-packages/setuptools/sandbox.py create mode 100644 env/lib/python3.11/site-packages/setuptools/script (dev).tmpl create mode 100644 env/lib/python3.11/site-packages/setuptools/script.tmpl create mode 100644 env/lib/python3.11/site-packages/setuptools/unicode_utils.py create mode 100644 env/lib/python3.11/site-packages/setuptools/version.py create mode 100644 env/lib/python3.11/site-packages/setuptools/wheel.py create mode 100644 env/lib/python3.11/site-packages/setuptools/windows_support.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/_internal.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/_reloader.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/formparser.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/http.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/local.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/security.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/serving.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/test.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/testapp.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/urls.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/user_agent.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/__pycache__/wsgi.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/_internal.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/_reloader.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/accept.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/auth.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/cache_control.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/csp.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/etag.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/file_storage.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/headers.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/mixins.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/range.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/__pycache__/structures.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/accept.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/accept.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/auth.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/cache_control.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/cache_control.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/csp.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/csp.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/etag.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/etag.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/file_storage.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/file_storage.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/headers.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/headers.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/mixins.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/mixins.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/range.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/range.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/structures.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/datastructures/structures.pyi create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/__pycache__/console.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/__pycache__/repr.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/console.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/repr.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/ICON_LICENSE.md create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/console.png create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/less.png create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/more.png create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/shared/style.css create mode 100644 env/lib/python3.11/site-packages/werkzeug/debug/tbtools.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/exceptions.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/formparser.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/http.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/local.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/lint.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/dispatcher.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/http_proxy.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/lint.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/profiler.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/proxy_fix.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/middleware/shared_data.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/py.typed create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/converters.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/exceptions.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/map.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/matcher.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/__pycache__/rules.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/converters.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/exceptions.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/map.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/matcher.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/routing/rules.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/http.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/multipart.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/request.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/response.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/__pycache__/utils.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/http.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/multipart.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/request.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/response.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/sansio/utils.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/security.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/serving.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/test.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/testapp.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/urls.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/user_agent.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/utils.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/__init__.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/__pycache__/request.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/__pycache__/response.cpython-311.pyc create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/request.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/wrappers/response.py create mode 100644 env/lib/python3.11/site-packages/werkzeug/wsgi.py create mode 120000 env/lib64 create mode 100644 env/pyvenv.cfg create mode 100644 templates/hello.html diff --git a/.cache/pip/http/0/5/c/5/1/05c5175540a79929333624d5f5af8e38d9f10cd290d98fc53321668b b/.cache/pip/http/0/5/c/5/1/05c5175540a79929333624d5f5af8e38d9f10cd290d98fc53321668b new file mode 100644 index 0000000000000000000000000000000000000000..6f3dde20094606e43a046d9e2473b69c3d372bf0 GIT binary patch literal 134221 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

(k?Jo}cvewxPcCJME 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 literal 0 HcmV?d00001 diff --git a/.cache/pip/http/1/d/a/3/b/1da3b992fe4397cf88a244dba3560fae86f8a69626a166f0f7b3b6b8 b/.cache/pip/http/1/d/a/3/b/1da3b992fe4397cf88a244dba3560fae86f8a69626a166f0f7b3b6b8 new file mode 100644 index 0000000000000000000000000000000000000000..94006754836d75bbe279d7c6135bd30cd96b53af GIT binary patch literal 16874 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 Ge*X_m98{qI literal 0 HcmV?d00001 diff --git a/.cache/pip/http/1/e/6/f/2/1e6f2fa1119d47b853219feb91c3867d411e0c8c02476d1e769171e8 b/.cache/pip/http/1/e/6/f/2/1e6f2fa1119d47b853219feb91c3867d411e0c8c02476d1e769171e8 new file mode 100644 index 0000000000000000000000000000000000000000..3efbb9607a9d4502f2dbe9a4488a6c6e31560f81 GIT binary patch literal 11128 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 HcHh4M17w^o literal 0 HcmV?d00001 diff --git a/.cache/pip/http/4/5/9/7/6/45976c194ebb9180bf7410d422bcad653ce13bcb64dda0d07d72b09d b/.cache/pip/http/4/5/9/7/6/45976c194ebb9180bf7410d422bcad653ce13bcb64dda0d07d72b09d new file mode 100644 index 0000000000000000000000000000000000000000..564b5c32a4f8267bc631ab4d3f980deed5c775d5 GIT binary patch literal 11235 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 G2K-+pn_&z9 literal 0 HcmV?d00001 diff --git a/.cache/pip/http/4/7/b/e/c/47bec2127f2b030337b947a6ea9f70b99ce376e712f10d1016102485 b/.cache/pip/http/4/7/b/e/c/47bec2127f2b030337b947a6ea9f70b99ce376e712f10d1016102485 new file mode 100644 index 0000000000000000000000000000000000000000..22b42b8965f0a4da190b09b5de27cc4b39dd5474 GIT binary patch literal 243150 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≀Y9}j zC=9>P?|ldVBcw?TxRG7I0%XZFo}mMQiZy>Qh-sd@zfy;P-gkn34nFrCDS}isia`4@-g-7*2C$G(gC(Sb+$jsu#tyrbi#zZtK`5SGwZqBKUlI|K9%;wC?@jBMhh2Hrd;Y8PY9Q+0m*En^#e6O=eR&v z>pWW)|HddiFvk}O>zCH_DMhI*loc?G_=I2ovH#}B!=wH7M$00xHTCg_8x@wkiq7<$ z8=T&2HE>vp2V-v$A;{2%LV+9hbXYYThHyuu;tx^SsMA#fYLPDpSq9Q_!do)6OkR#O zRK)TJp!5Nt)RL9elWhL`d(HRbzqbAitWq`Wx`9d&2F73(1%eFYVgXB>Eo0Y4Ug{yL z@eL_2Ir+|S3$q}wPN>Bn6lPJ21%Fxagr)U0O@u|G?R{)0m8t7BcvI?g>$X;GXg)@C zs48pN&CXIMc*8aREu!UcHe-K( zeIEe&tx>r=J0}GuWDbW6byUD=4;jzUMxC=@Jx2jST-#Z&C(76?yiqEZEEO`3LFY}c zIOdxX28)M-r1kbJEhCKR6Tk#kLf6R-{`vUj3p`DijKgefPwQ+N;DiQOus~&kH(7|o zY ztiz`1c!{{o1MkNaw_RaE*aW0)Rb~x-O*s6W(U1G%%(1NqbPrKX@W$zA!Eqq7MUHCB zXd2S~^Y^euLYIL&#XUnqD8nqh%8~J5Uj)^JW&%u;Xy!bNCSZqv<&Ij+c?|Mg_Q}<# z9j7Es^&(-MeUWpx%UWd@Mxs<-;W{lGh1zA8XS~lIvh!pu=a9oT+IsipLPr9DmL~0r z5`?dKMaCdmGdzw4>(yEUdKq9bq=y)WpOJ$sf$0s$$VMq}Nb(DmT$HzU`F8$bvjx(u zl(tgdM_Ad;z6A72z%S6Gy*B`Zo5mNBUWzK<*T-qW4lv!0S8s2dLD2+y7|tndZF&{n z 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

LHBWNC7WF(F65M{YCy?!dutQ@^ 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 z zxi11)iY9fK1YmC~I8$^t^4>Igd%g&Xs{eVd1ME`>?3zPy<$N4z`}w!0>&#kfQkj%4>I(fnb-tQ zewvMvkp&%kW$<~_G>H_@Ma)9ZEvVrc2NsKt^i+m`t(i?KuO#7ZS*s`4GRqcl1(_9~ z7#E_BJIOXZ%j7OP%a9ZJ`D?0ZaA%*mQaEuKM+26)cLU}L8z&m7XP-?gVxaE3v;=nh zei*JM9;qjw9n`{#bE@|J<;>bd!U{!xwfg^z$8(u5IgK1ugnw-hB(AO+LeZODSKA-Rx|BM^XMVvh;Pz+gCUlZ+cSFFX79 z(jh&ZGxEtV$(aJYi2p%p@RcAn0sss%2jI)1=-c>$6;wK`4}p2HEZ%q4zz-TG7S-!n zszkYdZ>flX&Z{=o>N7jK#6jCF78T#?Ye<=9v+K9Vln{&m8LjAn_9NQghdfj7?5(Qk zEqRWXOY#oDfx9q5gX95z@%9Ln(o|li&61#PfO>JKR1KCC!68m!-ag>`V91Ip(m<1d zuxCP}8<`pgoyh&@{80B#!khOk>>`f=QV{sf_%i#JANR6q6OrBL=( zN4WC;k>r#QIvE@t8wz#zJ-_d{YLU)^4xvrM09e&Lq70Jnb2!+?`5}&o1crPcc1

Wt&+8jbh(zF4mG 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 WMPpDvn=^4g;25gufk<*l#Qy+quGj(q literal 0 HcmV?d00001 diff --git a/.cache/pip/http/8/5/3/8/5/85385fd8a53d3d88ac67db4bf015be7ba931f024227668d42969ea92 b/.cache/pip/http/8/5/3/8/5/85385fd8a53d3d88ac67db4bf015be7ba931f024227668d42969ea92 new file mode 100644 index 0000000000000000000000000000000000000000..0aadf773f3a294f5d9d066dd20eb57cf9f190224 GIT binary patch literal 5372 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 S|Hi#^Z=Ap&`q+5T)Aui0?8uz} literal 0 HcmV?d00001 diff --git a/.cache/pip/http/8/a/c/4/d/8ac4d14dc45e27d21da49fb515570b6f875b78707de9b08ce1088d1b b/.cache/pip/http/8/a/c/4/d/8ac4d14dc45e27d21da49fb515570b6f875b78707de9b08ce1088d1b new file mode 100644 index 0000000000000000000000000000000000000000..c92f07de8beee99011c0ceb5d8921f671fde1226 GIT binary patch literal 11904 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/.cache/pip/http/9/4/5/2/4/9452417670b2e75527d793717779fce5d54e5f21adb3344c273876fa b/.cache/pip/http/9/4/5/2/4/9452417670b2e75527d793717779fce5d54e5f21adb3344c273876fa new file mode 100644 index 0000000000000000000000000000000000000000..01dbf23cfbcd8fc930bd36de408d181047adcbfe GIT binary patch literal 45142 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 z�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 Geg6m3SWd$L literal 0 HcmV?d00001 diff --git a/.cache/pip/http/9/c/c/6/9/9cc6939c61442ece13bdcac1a4f63ac9be8b2e7a5a8148e85ca678e2 b/.cache/pip/http/9/c/c/6/9/9cc6939c61442ece13bdcac1a4f63ac9be8b2e7a5a8148e85ca678e2 new file mode 100644 index 0000000000000000000000000000000000000000..588f5e58105f0bc0fce58249139803a54e264d02 GIT binary patch literal 17574 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 UQ3Ji(CZ=T|%_e%|PlZ^&0iXo0mjD0& literal 0 HcmV?d00001 diff --git a/.cache/pip/http/b/a/3/5/9/ba35908ba340b071580c0925fde349fd3a6ffd504e86343817f1f661 b/.cache/pip/http/b/a/3/5/9/ba35908ba340b071580c0925fde349fd3a6ffd504e86343817f1f661 new file mode 100644 index 0000000000000000000000000000000000000000..2f9cf77768186dad982de35bf64731551223f678 GIT binary patch literal 14786 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 + {% endblock %} + + +Donate +------ + +The Pallets organization develops and supports Jinja and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://jinja.palletsprojects.com/ +- Changes: https://jinja.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/Jinja2/ +- Source Code: https://github.com/pallets/jinja/ +- Issue Tracker: https://github.com/pallets/jinja/issues/ +- Website: https://palletsprojects.com/p/jinja/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/RECORD b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/RECORD new file mode 100644 index 0000000..b20e953 --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/RECORD @@ -0,0 +1,58 @@ +Jinja2-3.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Jinja2-3.1.2.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Jinja2-3.1.2.dist-info/METADATA,sha256=PZ6v2SIidMNixR7MRUX9f7ZWsPwtXanknqiZUmRbh4U,3539 +Jinja2-3.1.2.dist-info/RECORD,, +Jinja2-3.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +Jinja2-3.1.2.dist-info/entry_points.txt,sha256=zRd62fbqIyfUpsRtU7EVIFyiu1tPwfgO7EvPErnxgTE,59 +Jinja2-3.1.2.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 +jinja2/__init__.py,sha256=8vGduD8ytwgD6GDSqpYc2m3aU-T7PKOAddvVXgGr_Fs,1927 +jinja2/__pycache__/__init__.cpython-311.pyc,, +jinja2/__pycache__/_identifier.cpython-311.pyc,, +jinja2/__pycache__/async_utils.cpython-311.pyc,, +jinja2/__pycache__/bccache.cpython-311.pyc,, +jinja2/__pycache__/compiler.cpython-311.pyc,, +jinja2/__pycache__/constants.cpython-311.pyc,, +jinja2/__pycache__/debug.cpython-311.pyc,, +jinja2/__pycache__/defaults.cpython-311.pyc,, +jinja2/__pycache__/environment.cpython-311.pyc,, +jinja2/__pycache__/exceptions.cpython-311.pyc,, +jinja2/__pycache__/ext.cpython-311.pyc,, +jinja2/__pycache__/filters.cpython-311.pyc,, +jinja2/__pycache__/idtracking.cpython-311.pyc,, +jinja2/__pycache__/lexer.cpython-311.pyc,, +jinja2/__pycache__/loaders.cpython-311.pyc,, +jinja2/__pycache__/meta.cpython-311.pyc,, +jinja2/__pycache__/nativetypes.cpython-311.pyc,, +jinja2/__pycache__/nodes.cpython-311.pyc,, +jinja2/__pycache__/optimizer.cpython-311.pyc,, +jinja2/__pycache__/parser.cpython-311.pyc,, +jinja2/__pycache__/runtime.cpython-311.pyc,, +jinja2/__pycache__/sandbox.cpython-311.pyc,, +jinja2/__pycache__/tests.cpython-311.pyc,, +jinja2/__pycache__/utils.cpython-311.pyc,, +jinja2/__pycache__/visitor.cpython-311.pyc,, +jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958 +jinja2/async_utils.py,sha256=dHlbTeaxFPtAOQEYOGYh_PHcDT0rsDaUJAFDl_0XtTg,2472 +jinja2/bccache.py,sha256=mhz5xtLxCcHRAa56azOhphIAe19u1we0ojifNMClDio,14061 +jinja2/compiler.py,sha256=Gs-N8ThJ7OWK4-reKoO8Wh1ZXz95MVphBKNVf75qBr8,72172 +jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 +jinja2/debug.py,sha256=iWJ432RadxJNnaMOPrjIDInz50UEgni3_HKuFXi2vuQ,6299 +jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 +jinja2/environment.py,sha256=6uHIcc7ZblqOMdx_uYNKqRnnwAF0_nzbyeMP9FFtuh4,61349 +jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 +jinja2/ext.py,sha256=ivr3P7LKbddiXDVez20EflcO3q2aHQwz9P_PgWGHVqE,31502 +jinja2/filters.py,sha256=9js1V-h2RlyW90IhLiBGLM2U-k6SCy2F4BUUMgB3K9Q,53509 +jinja2/idtracking.py,sha256=GfNmadir4oDALVxzn3DL9YInhJDr69ebXeA2ygfuCGA,10704 +jinja2/lexer.py,sha256=DW2nX9zk-6MWp65YR2bqqj0xqCvLtD-u9NWT8AnFRxQ,29726 +jinja2/loaders.py,sha256=BfptfvTVpClUd-leMkHczdyPNYFzp_n7PKOJ98iyHOg,23207 +jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 +jinja2/nativetypes.py,sha256=DXgORDPRmVWgy034H0xL8eF7qYoK3DrMxs-935d0Fzk,4226 +jinja2/nodes.py,sha256=i34GPRAZexXMT6bwuf5SEyvdmS-bRCy9KMjwN5O6pjk,34550 +jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 +jinja2/parser.py,sha256=nHd-DFHbiygvfaPtm9rcQXJChZG7DPsWfiEsqfwKerY,39595 +jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jinja2/runtime.py,sha256=5CmD5BjbEJxSiDNTFBeKCaq8qU4aYD2v6q2EluyExms,33476 +jinja2/sandbox.py,sha256=Y0xZeXQnH6EX5VjaV2YixESxoepnRbW_3UeQosaBU3M,14584 +jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 +jinja2/utils.py,sha256=u9jXESxGn8ATZNVolwmkjUVu4SA-tLgV0W7PcSfPfdQ,23965 +jinja2/visitor.py,sha256=MH14C6yq24G_KVtWzjwaI7Wg14PCJIYlWW1kpkxYak0,3568 diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/WHEEL b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt new file mode 100644 index 0000000..7b9666c --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[babel.extractors] +jinja2 = jinja2.ext:babel_extract[i18n] diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/top_level.txt b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/top_level.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/INSTALLER b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/METADATA b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/METADATA new file mode 100644 index 0000000..4a34999 --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/METADATA @@ -0,0 +1,98 @@ +Metadata-Version: 2.1 +Name: MarkupSafe +Version: 2.1.2 +Summary: Safely add untrusted strings to HTML/XML markup. +Home-page: https://palletsprojects.com/p/markupsafe/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://markupsafe.palletsprojects.com/ +Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/markupsafe/ +Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +MarkupSafe +========== + +MarkupSafe implements a text object that escapes characters so it is +safe to use in HTML and XML. Characters that have special meanings are +replaced so that they display as the actual characters. This mitigates +injection attacks, meaning untrusted user input can safely be displayed +on a page. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U MarkupSafe + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +Examples +-------- + +.. code-block:: pycon + + >>> from markupsafe import Markup, escape + + >>> # escape replaces special characters and wraps in Markup + >>> escape("") + Markup('<script>alert(document.cookie);</script>') + + >>> # wrap in Markup to mark text "safe" and prevent escaping + >>> Markup("Hello") + Markup('hello') + + >>> escape(Markup("Hello")) + Markup('hello') + + >>> # Markup is a str subclass + >>> # methods and operators escape their arguments + >>> template = Markup("Hello {name}") + >>> template.format(name='"World"') + Markup('Hello "World"') + + +Donate +------ + +The Pallets organization develops and supports MarkupSafe and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://markupsafe.palletsprojects.com/ +- Changes: https://markupsafe.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/MarkupSafe/ +- Source Code: https://github.com/pallets/markupsafe/ +- Issue Tracker: https://github.com/pallets/markupsafe/issues/ +- Website: https://palletsprojects.com/p/markupsafe/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/RECORD b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/RECORD new file mode 100644 index 0000000..39ce15f --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/RECORD @@ -0,0 +1,14 @@ +MarkupSafe-2.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +MarkupSafe-2.1.2.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +MarkupSafe-2.1.2.dist-info/METADATA,sha256=jPw4iOiZg6adxZ5bdvjZapeNmPMINMGG2q2v2rI4SqA,3222 +MarkupSafe-2.1.2.dist-info/RECORD,, +MarkupSafe-2.1.2.dist-info/WHEEL,sha256=zcODeksSPXfEVqloqbuxG5DqZN6qJmVdi0EN9bjsiGQ,152 +MarkupSafe-2.1.2.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +markupsafe/__init__.py,sha256=LtjnhQ6AHmAgHl37cev2oQBXjr4xOF-QhdXgsCAL3-0,9306 +markupsafe/__pycache__/__init__.cpython-311.pyc,, +markupsafe/__pycache__/_native.cpython-311.pyc,, +markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713 +markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083 +markupsafe/_speedups.cpython-311-x86_64-linux-gnu.so,sha256=oxS10ynvGJxxD2aGbEyu_VASpUD-XwDsjQOlaw6cSzs,53656 +markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229 +markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/WHEEL b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/WHEEL new file mode 100644 index 0000000..9a9cfe1 --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.38.4) +Root-Is-Purelib: false +Tag: cp311-cp311-manylinux_2_17_x86_64 +Tag: cp311-cp311-manylinux2014_x86_64 + diff --git a/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/top_level.txt b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/env/lib/python3.11/site-packages/MarkupSafe-2.1.2.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/INSTALLER b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/LICENSE.rst new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/METADATA b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/METADATA new file mode 100644 index 0000000..f538db1 --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/METADATA @@ -0,0 +1,120 @@ +Metadata-Version: 2.1 +Name: Werkzeug +Version: 2.3.1 +Summary: The comprehensive WSGI web application library. +Author-email: Armin Ronacher +Maintainer-email: Pallets +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://werkzeug.palletsprojects.com/ +Project-URL: Changes, https://werkzeug.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/werkzeug/ +Project-URL: Issue Tracker, https://github.com/pallets/werkzeug/issues/ +Project-URL: Chat, https://discord.gg/pallets +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Requires-Python: >=3.8 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: MarkupSafe (>=2.1.1) +Provides-Extra: watchdog +Requires-Dist: watchdog (>=2.3) ; extra == 'watchdog' + +Werkzeug +======== + +*werkzeug* German noun: "tool". Etymology: *werk* ("work"), *zeug* ("stuff") + +Werkzeug is a comprehensive `WSGI`_ web application library. It began as +a simple collection of various utilities for WSGI applications and has +become one of the most advanced WSGI utility libraries. + +It includes: + +- An interactive debugger that allows inspecting stack traces and + source code in the browser with an interactive interpreter for any + frame in the stack. +- A full-featured request object with objects to interact with + headers, query args, form data, files, and cookies. +- A response object that can wrap other WSGI applications and handle + streaming data. +- A routing system for matching URLs to endpoints and generating URLs + for endpoints, with an extensible system for capturing variables + from URLs. +- HTTP utilities to handle entity tags, cache control, dates, user + agents, cookies, files, and more. +- A threaded WSGI server for use while developing applications + locally. +- A test client for simulating HTTP requests during testing without + requiring running a server. + +Werkzeug doesn't enforce any dependencies. It is up to the developer to +choose a template engine, database adapter, and even how to handle +requests. It can be used to build all sorts of end user applications +such as blogs, wikis, or bulletin boards. + +`Flask`_ wraps Werkzeug, using it to handle the details of WSGI while +providing more structure and patterns for defining powerful +applications. + +.. _WSGI: https://wsgi.readthedocs.io/en/latest/ +.. _Flask: https://www.palletsprojects.com/p/flask/ + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U Werkzeug + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + from werkzeug.wrappers import Request, Response + + @Request.application + def application(request): + return Response('Hello, World!') + + if __name__ == '__main__': + from werkzeug.serving import run_simple + run_simple('localhost', 4000, application) + + +Donate +------ + +The Pallets organization develops and supports Werkzeug and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://werkzeug.palletsprojects.com/ +- Changes: https://werkzeug.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/Werkzeug/ +- Source Code: https://github.com/pallets/werkzeug/ +- Issue Tracker: https://github.com/pallets/werkzeug/issues/ +- Chat: https://discord.gg/pallets diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/RECORD b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/RECORD new file mode 100644 index 0000000..f7f2e55 --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/RECORD @@ -0,0 +1,126 @@ +Werkzeug-2.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Werkzeug-2.3.1.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Werkzeug-2.3.1.dist-info/METADATA,sha256=QwOKm2-QqQoVlH9tzI-B49E5OKidwDO3RjBTF0TUdvw,4205 +Werkzeug-2.3.1.dist-info/RECORD,, +Werkzeug-2.3.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92 +Werkzeug-2.3.1.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 +werkzeug/__init__.py,sha256=7vWJ_awK54Vr7-f0q3RGfU_pmjOwpst68xjWGA4WuNo,188 +werkzeug/__pycache__/__init__.cpython-311.pyc,, +werkzeug/__pycache__/_internal.cpython-311.pyc,, +werkzeug/__pycache__/_reloader.cpython-311.pyc,, +werkzeug/__pycache__/exceptions.cpython-311.pyc,, +werkzeug/__pycache__/formparser.cpython-311.pyc,, +werkzeug/__pycache__/http.cpython-311.pyc,, +werkzeug/__pycache__/local.cpython-311.pyc,, +werkzeug/__pycache__/security.cpython-311.pyc,, +werkzeug/__pycache__/serving.cpython-311.pyc,, +werkzeug/__pycache__/test.cpython-311.pyc,, +werkzeug/__pycache__/testapp.cpython-311.pyc,, +werkzeug/__pycache__/urls.cpython-311.pyc,, +werkzeug/__pycache__/user_agent.cpython-311.pyc,, +werkzeug/__pycache__/utils.cpython-311.pyc,, +werkzeug/__pycache__/wsgi.cpython-311.pyc,, +werkzeug/_internal.py,sha256=10weRWsedmoDrJUvS4MkCe-VsOkwbAU9PxY4-J3nOXE,7830 +werkzeug/_reloader.py,sha256=1O1DDWlqVwYIX8kgJwH5B4a_Uh6acQnw3sQf01JpXtM,14745 +werkzeug/datastructures/__init__.py,sha256=yzBdOT9DdK3nraNG49pA3bVsvtPPLx2-t2N8ZmuAd9w,1900 +werkzeug/datastructures/__pycache__/__init__.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/accept.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/auth.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/cache_control.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/csp.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/etag.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/file_storage.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/headers.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/mixins.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/range.cpython-311.pyc,, +werkzeug/datastructures/__pycache__/structures.cpython-311.pyc,, +werkzeug/datastructures/accept.py,sha256=CuCvBAxNzbt4QUb17rH986vvOVGURFUjo0DX2PQy_yI,10670 +werkzeug/datastructures/accept.pyi,sha256=6P114gncjZoy-i_n_3OQy2nJVwjEAIe7PcBxKYqCEfc,1917 +werkzeug/datastructures/auth.py,sha256=6b3LCrLRcFyhw3KvgiZjCozHllEEZ3xvcXDIFSu1aU8,16022 +werkzeug/datastructures/cache_control.py,sha256=RTUipZev50s-1TAn2rYGZrytm_6IOIxQd67fkR5bNF0,6043 +werkzeug/datastructures/cache_control.pyi,sha256=6Q93jRysAKMPWRA72OMksyn7d3ZysuxwGlHp_iwF9pA,3756 +werkzeug/datastructures/csp.py,sha256=DAOAO266LK0JKbvlG80bbkAgfrNsnU9HBoz-FdIYNdo,3244 +werkzeug/datastructures/csp.pyi,sha256=AmDWiZU4rrJA4SZmyMNI1L5PLdIfJsI5Li9r5lE1q6M,5765 +werkzeug/datastructures/etag.py,sha256=JsyI-yXayF-hQu26MyFzbHFIZsaQ6odj3RZO_jF-_cc,2913 +werkzeug/datastructures/etag.pyi,sha256=N9cuUBrZnxHmsbW0BBmjKW-djNY7WKbI6t_WopB8Zo0,1047 +werkzeug/datastructures/file_storage.py,sha256=d3E8riRUr2a9fbfXMIIJ57HeEEkWVMy6R4RKHRtu73I,6076 +werkzeug/datastructures/file_storage.pyi,sha256=2sdbKHhvbQF5FjrJuO6l_m1yZvZ4oPCUTspmdmjQlSU,1433 +werkzeug/datastructures/headers.py,sha256=yOWto7HUzcIKqQBhtom-oQ4OT8xE_ZfVZ3TwldGgT3A,18882 +werkzeug/datastructures/headers.pyi,sha256=66Gh9DbD8QNpLRBOuer4DMCj12csddHrcgxiJPLE5n8,4237 +werkzeug/datastructures/mixins.py,sha256=-IQSQ70UOMQlqtJEIyyhplOd4obaTOfzGvka-cunCtM,5337 +werkzeug/datastructures/mixins.pyi,sha256=y92tClxVslJBEGgAwDRsQLExfin2p0x7NfnP_b8w6xc,4191 +werkzeug/datastructures/range.py,sha256=JXSDPseG7iH5giJp3R1SnQC_SqQp634M8Iv6QTsbTxM,5669 +werkzeug/datastructures/range.pyi,sha256=bsM61iNp86gT2lyN0F_Dqg8xsnfPerdmElipuHppiJQ,1792 +werkzeug/datastructures/structures.py,sha256=_bhAf0adEk6WU2uy8jdmuxFMTFcuClY1p7jQ-3wYXj4,31761 +werkzeug/datastructures/structures.pyi,sha256=MRg-RubT3UPjh62i9-7Xht8DVL0zTApRzjs52Hfz_j4,8148 +werkzeug/debug/__init__.py,sha256=0nIJfNC8GCjaMMDBJHwp4bgWLDI-uAYIpAoNdHiVCCc,18757 +werkzeug/debug/__pycache__/__init__.cpython-311.pyc,, +werkzeug/debug/__pycache__/console.cpython-311.pyc,, +werkzeug/debug/__pycache__/repr.cpython-311.pyc,, +werkzeug/debug/__pycache__/tbtools.cpython-311.pyc,, +werkzeug/debug/console.py,sha256=FIO8gDX2eQ1_4MtpJ4s0i2gR4fFCJZTPwhSVByF4kbo,6068 +werkzeug/debug/repr.py,sha256=ECmIpNVlCppTfCuIuEgrJVfuhr8iDqPSWeVJyxt1QOM,9328 +werkzeug/debug/shared/ICON_LICENSE.md,sha256=DhA6Y1gUl5Jwfg0NFN9Rj4VWITt8tUx0IvdGf0ux9-s,222 +werkzeug/debug/shared/console.png,sha256=bxax6RXXlvOij_KeqvSNX0ojJf83YbnZ7my-3Gx9w2A,507 +werkzeug/debug/shared/debugger.js,sha256=tg42SZs1SVmYWZ-_Fj5ELK5-FLHnGNQrei0K2By8Bw8,10521 +werkzeug/debug/shared/less.png,sha256=-4-kNRaXJSONVLahrQKUxMwXGm9R4OnZ9SxDGpHlIR4,191 +werkzeug/debug/shared/more.png,sha256=GngN7CioHQoV58rH6ojnkYi8c_qED2Aka5FO5UXrReY,200 +werkzeug/debug/shared/style.css,sha256=-xSxzUEZGw_IqlDR5iZxitNl8LQUjBM-_Y4UAvXVH8g,6078 +werkzeug/debug/tbtools.py,sha256=WyNL0RCDIi3YZGifMbs99BdmwmqQRL7zJFYZ1x_GJN4,13263 +werkzeug/exceptions.py,sha256=d6VNzGcVgLazIpfwRD8pN_d3yAJNyngBDFvlXQbR-38,26062 +werkzeug/formparser.py,sha256=jnc6NhnjaeR-88dSMYv2L3A60IEhtVswZJsZ-KSf-ks,19624 +werkzeug/http.py,sha256=koW09z2mgQLAFJGfM9FM-Qfxq8NfZP5fXCVm-z5FIu4,48422 +werkzeug/local.py,sha256=zrXlO1IP3KTz310h9LSdVKMaFsJfNyXkfCYCkbvlBXQ,22075 +werkzeug/middleware/__init__.py,sha256=qfqgdT5npwG9ses3-FXQJf3aB95JYP1zchetH_T3PUw,500 +werkzeug/middleware/__pycache__/__init__.cpython-311.pyc,, +werkzeug/middleware/__pycache__/dispatcher.cpython-311.pyc,, +werkzeug/middleware/__pycache__/http_proxy.cpython-311.pyc,, +werkzeug/middleware/__pycache__/lint.cpython-311.pyc,, +werkzeug/middleware/__pycache__/profiler.cpython-311.pyc,, +werkzeug/middleware/__pycache__/proxy_fix.cpython-311.pyc,, +werkzeug/middleware/__pycache__/shared_data.cpython-311.pyc,, +werkzeug/middleware/dispatcher.py,sha256=6ltzPtDsIdLTY_T1GW6kxBJL0KZftbipa_WVdKtpVQ8,2601 +werkzeug/middleware/http_proxy.py,sha256=vsSvt84m656x3mV_Fj78y7O2eYHmurWngErTcjeiz8U,7833 +werkzeug/middleware/lint.py,sha256=6CqcwMWro1p-GRUGPgQ1n21KFnTTqc6-81CGTzpcK74,13916 +werkzeug/middleware/profiler.py,sha256=KKr8nAiF9dr9pNd3G0D3xs7mUba9gvWkyK7X9ceke70,4906 +werkzeug/middleware/proxy_fix.py,sha256=dcOOSjSok2QsSh1VSNsw-a0Vy_Jn5DunlO6PRbXBq0A,6754 +werkzeug/middleware/shared_data.py,sha256=wHbKFw2vh6aZMFcL_SwHKAk6F99QHXYEC-8npqLwGt4,9489 +werkzeug/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/routing/__init__.py,sha256=HpvahY7WwkLdV4Cq3Bsc3GrqNon4u6t8-vhbb9E5o00,4819 +werkzeug/routing/__pycache__/__init__.cpython-311.pyc,, +werkzeug/routing/__pycache__/converters.cpython-311.pyc,, +werkzeug/routing/__pycache__/exceptions.cpython-311.pyc,, +werkzeug/routing/__pycache__/map.cpython-311.pyc,, +werkzeug/routing/__pycache__/matcher.cpython-311.pyc,, +werkzeug/routing/__pycache__/rules.cpython-311.pyc,, +werkzeug/routing/converters.py,sha256=GVXW-a6iC79fH48QCgW7a3Nd9Cu5hke9273OMOJsNy4,7602 +werkzeug/routing/exceptions.py,sha256=yGZ5AUL-buHp-vK8AJbZ0bLIbSckh1UyiGKgRg4ZjaA,4698 +werkzeug/routing/map.py,sha256=Gb_t8LNVP08iecqgDRSRzNz2YBzC12_4pB366Lopl7U,37254 +werkzeug/routing/matcher.py,sha256=FyPG45iqR1XwxFujejSqfNEKV7IgbR2td7Jp-ocSASY,7817 +werkzeug/routing/rules.py,sha256=O9FHwCWclj_MskT0fn49UC2JI_OYWIx4BrPbO9JFssw,32012 +werkzeug/sansio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/sansio/__pycache__/__init__.cpython-311.pyc,, +werkzeug/sansio/__pycache__/http.cpython-311.pyc,, +werkzeug/sansio/__pycache__/multipart.cpython-311.pyc,, +werkzeug/sansio/__pycache__/request.cpython-311.pyc,, +werkzeug/sansio/__pycache__/response.cpython-311.pyc,, +werkzeug/sansio/__pycache__/utils.cpython-311.pyc,, +werkzeug/sansio/http.py,sha256=UDQNOo8Z9j0xU2m0ZgsCTBNnhZ3BxpwufzC7lzsXoB4,6234 +werkzeug/sansio/multipart.py,sha256=_trP0CPc5B9JAdIVUrn4MWrD7DFqzNfTXzYK6jzJKsI,10633 +werkzeug/sansio/request.py,sha256=pHR5KJAalFOWZhcl033QAX4SkDJ7iV4zOd0ByJbzqxc,24243 +werkzeug/sansio/response.py,sha256=Ba52DQruA283scO9WwVgZc3Xni0AisJg2LZWsqiD6J0,29013 +werkzeug/sansio/utils.py,sha256=DCMLtg4S5TuNtaJl6PTHMNAUDdIegmEcMFwciq-x0ag,4908 +werkzeug/security.py,sha256=v-_qRo0-DEJi7ga_snNEuYXCBQSsKfUME2Y8tt2cvkQ,5814 +werkzeug/serving.py,sha256=HUyO2O5FYcvajDc8A6gGOt7gC01wk9sljugxxHYG7lU,39223 +werkzeug/test.py,sha256=NhQQ2f8h3mgnrcWylher0kMDUYOpYEB8nXF22Lvnq8k,55528 +werkzeug/testapp.py,sha256=w9AdbZcmSvydD-OP6EjxVENuaZof9MkbYNFVALhcoqQ,6151 +werkzeug/urls.py,sha256=vifWlqXEWkkvo7eht_LchyGqQT29f7MfLq5ZeDpr2r4,45871 +werkzeug/user_agent.py,sha256=lSlLYKCcbzCUSkbdAoO8zPk2UR-8Mdn6iu_iA2kYPBA,1416 +werkzeug/utils.py,sha256=FAKW7eW_JCobj4qacEZLN2oB1Fl51j2DuBxmQ8xMooc,24744 +werkzeug/wrappers/__init__.py,sha256=kGyK7rOud3qCxll_jFyW15YarJhj1xtdf3ocx9ZheB8,120 +werkzeug/wrappers/__pycache__/__init__.cpython-311.pyc,, +werkzeug/wrappers/__pycache__/request.cpython-311.pyc,, +werkzeug/wrappers/__pycache__/response.cpython-311.pyc,, +werkzeug/wrappers/request.py,sha256=2uqUE3P8DkaixJg2WnuOzVO3fnxQyVEzAm5qUVICwqc,25099 +werkzeug/wrappers/response.py,sha256=wAjIzLNRGE1XerLET-hkdohFA0XSsPx0FPsKNfP0qmE,32615 +werkzeug/wsgi.py,sha256=q6_Mxak8FCaZbH89Gs0c0xYDHSQOcdaj83ADJpmTDkY,28992 diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/WHEEL b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/WHEEL new file mode 100644 index 0000000..1f37c02 --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.40.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/top_level.txt b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/top_level.txt new file mode 100644 index 0000000..6fe8da8 --- /dev/null +++ b/env/lib/python3.11/site-packages/Werkzeug-2.3.1.dist-info/top_level.txt @@ -0,0 +1 @@ +werkzeug diff --git a/env/lib/python3.11/site-packages/_distutils_hack/__init__.py b/env/lib/python3.11/site-packages/_distutils_hack/__init__.py new file mode 100644 index 0000000..f987a53 --- /dev/null +++ b/env/lib/python3.11/site-packages/_distutils_hack/__init__.py @@ -0,0 +1,222 @@ +# don't import any costly modules +import sys +import os + + +is_pypy = '__pypy__' in sys.builtin_module_names + + +def warn_distutils_present(): + if 'distutils' not in sys.modules: + return + if is_pypy and sys.version_info < (3, 7): + # PyPy for 3.6 unconditionally imports distutils, so bypass the warning + # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 + return + import warnings + + warnings.warn( + "Distutils was imported before Setuptools, but importing Setuptools " + "also replaces the `distutils` module in `sys.modules`. This may lead " + "to undesirable behaviors or errors. To avoid these issues, avoid " + "using distutils directly, ensure that setuptools is installed in the " + "traditional way (e.g. not an editable install), and/or make sure " + "that setuptools is always imported before distutils." + ) + + +def clear_distutils(): + if 'distutils' not in sys.modules: + return + import warnings + + warnings.warn("Setuptools is replacing distutils.") + mods = [ + name + for name in sys.modules + if name == "distutils" or name.startswith("distutils.") + ] + for name in mods: + del sys.modules[name] + + +def enabled(): + """ + Allow selection of distutils by environment variable. + """ + which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local') + return which == 'local' + + +def ensure_local_distutils(): + import importlib + + clear_distutils() + + # With the DistutilsMetaFinder in place, + # perform an import to cause distutils to be + # loaded from setuptools._distutils. Ref #2906. + with shim(): + importlib.import_module('distutils') + + # check that submodules load as expected + core = importlib.import_module('distutils.core') + assert '_distutils' in core.__file__, core.__file__ + assert 'setuptools._distutils.log' not in sys.modules + + +def do_override(): + """ + Ensure that the local copy of distutils is preferred over stdlib. + + See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 + for more motivation. + """ + if enabled(): + warn_distutils_present() + ensure_local_distutils() + + +class _TrivialRe: + def __init__(self, *patterns): + self._patterns = patterns + + def match(self, string): + return all(pat in string for pat in self._patterns) + + +class DistutilsMetaFinder: + def find_spec(self, fullname, path, target=None): + # optimization: only consider top level modules and those + # found in the CPython test suite. + if path is not None and not fullname.startswith('test.'): + return + + method_name = 'spec_for_{fullname}'.format(**locals()) + method = getattr(self, method_name, lambda: None) + return method() + + def spec_for_distutils(self): + if self.is_cpython(): + return + + import importlib + import importlib.abc + import importlib.util + + try: + mod = importlib.import_module('setuptools._distutils') + except Exception: + # There are a couple of cases where setuptools._distutils + # may not be present: + # - An older Setuptools without a local distutils is + # taking precedence. Ref #2957. + # - Path manipulation during sitecustomize removes + # setuptools from the path but only after the hook + # has been loaded. Ref #2980. + # In either case, fall back to stdlib behavior. + return + + class DistutilsLoader(importlib.abc.Loader): + def create_module(self, spec): + mod.__name__ = 'distutils' + return mod + + def exec_module(self, module): + pass + + return importlib.util.spec_from_loader( + 'distutils', DistutilsLoader(), origin=mod.__file__ + ) + + @staticmethod + def is_cpython(): + """ + Suppress supplying distutils for CPython (build and tests). + Ref #2965 and #3007. + """ + return os.path.isfile('pybuilddir.txt') + + def spec_for_pip(self): + """ + Ensure stdlib distutils when running under pip. + See pypa/pip#8761 for rationale. + """ + if self.pip_imported_during_build(): + return + clear_distutils() + self.spec_for_distutils = lambda: None + + @classmethod + def pip_imported_during_build(cls): + """ + Detect if pip is being imported in a build script. Ref #2355. + """ + import traceback + + return any( + cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None) + ) + + @staticmethod + def frame_file_is_setup(frame): + """ + Return True if the indicated frame suggests a setup.py file. + """ + # some frames may not have __file__ (#2940) + return frame.f_globals.get('__file__', '').endswith('setup.py') + + def spec_for_sensitive_tests(self): + """ + Ensure stdlib distutils when running select tests under CPython. + + python/cpython#91169 + """ + clear_distutils() + self.spec_for_distutils = lambda: None + + sensitive_tests = ( + [ + 'test.test_distutils', + 'test.test_peg_generator', + 'test.test_importlib', + ] + if sys.version_info < (3, 10) + else [ + 'test.test_distutils', + ] + ) + + +for name in DistutilsMetaFinder.sensitive_tests: + setattr( + DistutilsMetaFinder, + f'spec_for_{name}', + DistutilsMetaFinder.spec_for_sensitive_tests, + ) + + +DISTUTILS_FINDER = DistutilsMetaFinder() + + +def add_shim(): + DISTUTILS_FINDER in sys.meta_path or insert_shim() + + +class shim: + def __enter__(self): + insert_shim() + + def __exit__(self, exc, value, tb): + remove_shim() + + +def insert_shim(): + sys.meta_path.insert(0, DISTUTILS_FINDER) + + +def remove_shim(): + try: + sys.meta_path.remove(DISTUTILS_FINDER) + except ValueError: + pass diff --git a/env/lib/python3.11/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fd5b1e5dee407216bea0d2003c1e1aa51e931a5 GIT binary patch literal 11196 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/_distutils_hack/override.py b/env/lib/python3.11/site-packages/_distutils_hack/override.py new file mode 100644 index 0000000..2cc433a --- /dev/null +++ b/env/lib/python3.11/site-packages/_distutils_hack/override.py @@ -0,0 +1 @@ +__import__('_distutils_hack').do_override() diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/INSTALLER b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..79c9825 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/LICENSE.rst @@ -0,0 +1,20 @@ +Copyright 2010 Jason Kirtland + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/METADATA b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/METADATA new file mode 100644 index 0000000..d181f19 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/METADATA @@ -0,0 +1,63 @@ +Metadata-Version: 2.1 +Name: blinker +Version: 1.6.2 +Summary: Fast, simple object-to-object and broadcast signaling +Author-email: Jason Kirtland +Maintainer-email: Pallets Ecosystem +License: MIT License +Project-URL: Homepage, https://blinker.readthedocs.io +Project-URL: Documentation, https://blinker.readthedocs.io +Project-URL: Source Code, https://github.com/pallets-eco/blinker/ +Project-URL: Issue Tracker, https://github.com/pallets-eco/blinker/issues/ +Project-URL: Chat, https://discord.gg/pallets +Keywords: signal,emit,events,broadcast +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Libraries +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +Blinker +======= + +Blinker provides a fast dispatching system that allows any number of +interested parties to subscribe to events, or "signals". + +Signal receivers can subscribe to specific senders or receive signals +sent by any sender. + +.. code-block:: pycon + + >>> from blinker import signal + >>> started = signal('round-started') + >>> def each(round): + ... print(f"Round {round}") + ... + >>> started.connect(each) + + >>> def round_two(round): + ... print("This is round two.") + ... + >>> started.connect(round_two, sender=2) + + >>> for round in range(1, 4): + ... started.send(round) + ... + Round 1! + Round 2! + This is round two. + Round 3! + + +Links +----- + +- Documentation: https://blinker.readthedocs.io/ +- Changes: https://blinker.readthedocs.io/#changes +- PyPI Releases: https://pypi.org/project/blinker/ +- Source Code: https://github.com/pallets-eco/blinker/ +- Issue Tracker: https://github.com/pallets-eco/blinker/issues/ diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/RECORD b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/RECORD new file mode 100644 index 0000000..8b67abc --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/RECORD @@ -0,0 +1,15 @@ +blinker-1.6.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +blinker-1.6.2.dist-info/LICENSE.rst,sha256=nrc6HzhZekqhcCXSrhvjg5Ykx5XphdTw6Xac4p-spGc,1054 +blinker-1.6.2.dist-info/METADATA,sha256=7MRskabu2wQvWIMFwgqP3w2LDt8nR5nCxH7Anu1ZrBM,1964 +blinker-1.6.2.dist-info/RECORD,, +blinker-1.6.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92 +blinker-1.6.2.dist-info/top_level.txt,sha256=2NmsENM0J2t9Z8mkjxHDmGMQj7Bm8f5ZTTYe1x1fZtM,8 +blinker/__init__.py,sha256=Ko7EbvxyCl_UewgsP8XgDJqJcHZA7EsuhG72R_zDrcY,408 +blinker/__pycache__/__init__.cpython-311.pyc,, +blinker/__pycache__/_saferef.cpython-311.pyc,, +blinker/__pycache__/_utilities.cpython-311.pyc,, +blinker/__pycache__/base.cpython-311.pyc,, +blinker/_saferef.py,sha256=kWOTIWnCY3kOb8lZP74Rbx7bR_BLVg4TjwzNCRLhKHs,9096 +blinker/_utilities.py,sha256=GPXtJzykzVotoxHC79mgFQMPJtICwpVDCCpus4_JtsA,4110 +blinker/base.py,sha256=7Y-C0ZVIe-NrrskPeqj0bLSp4R6Cpq5LrzI1DmLqMEA,20469 +blinker/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/WHEEL b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/WHEEL new file mode 100644 index 0000000..1f37c02 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.40.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/top_level.txt b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/top_level.txt new file mode 100644 index 0000000..1ff4ca5 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker-1.6.2.dist-info/top_level.txt @@ -0,0 +1 @@ +blinker diff --git a/env/lib/python3.11/site-packages/blinker/__init__.py b/env/lib/python3.11/site-packages/blinker/__init__.py new file mode 100644 index 0000000..71d66d3 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker/__init__.py @@ -0,0 +1,19 @@ +from blinker.base import ANY +from blinker.base import NamedSignal +from blinker.base import Namespace +from blinker.base import receiver_connected +from blinker.base import Signal +from blinker.base import signal +from blinker.base import WeakNamespace + +__all__ = [ + "ANY", + "NamedSignal", + "Namespace", + "Signal", + "WeakNamespace", + "receiver_connected", + "signal", +] + +__version__ = "1.6.2" diff --git a/env/lib/python3.11/site-packages/blinker/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/blinker/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57aa5bb995a50aaf57e653d0322e68ada25a5e93 GIT binary patch literal 651 zcmZvZziZn-6vyA`x2?Jfp=1gaN-3C99d4jg31lvK$xw0~jFZ5r~D7<#+X2_N)??l|9($nL6pLe|Py?5x_V9*C#KYqTG*972~O?Jz9fZLA< zUqFH+8O#YI#Il3zFsEe~*=26a9|n1YPH5*EoG>&gBZ z4CCLn>5y#P)A2cO@mS22Jk!%$WSI7BY8E0@m>iTUReGsPo)&qo(n?7@4gM4dW@j6` zS7P?p8kR0LDLpH`mC#DhN?;{I`RtF9H_7Yqu)ldU$#gzbWik;){cCLvt>3!ZOEw|r zBFi}6#GK=JMi)8f-{BSu;O+yxDCUZqN_?WL)ru|(yjtM%)|E~T#|}%KDnnJiq?w-3 z#k#sE^5bMQqDEKh6+V6@rdaSW73Ey#y5c-ptnZ??^Fm%`>ZIJqUid@7+@Ne-LP!Hg ybvGJ#UU#E`XLUCkcv*L&fv0sh{&(`ChE8m~D0a56ldEw11ojTEV*8bkamIV-q^zz0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/blinker/__pycache__/_saferef.cpython-311.pyc b/env/lib/python3.11/site-packages/blinker/__pycache__/_saferef.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a56b23bad0244b74647167385741bc291c36f035 GIT binary patch literal 9973 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 LWWR@q{r7(XO7hCw literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/blinker/__pycache__/base.cpython-311.pyc b/env/lib/python3.11/site-packages/blinker/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b58e26ce357691fd1dcc26816507471f6f6f1ebb GIT binary patch literal 24907 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/blinker/_saferef.py b/env/lib/python3.11/site-packages/blinker/_saferef.py new file mode 100644 index 0000000..dcb70c1 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker/_saferef.py @@ -0,0 +1,230 @@ +# extracted from Louie, http://pylouie.org/ +# updated for Python 3 +# +# Copyright (c) 2006 Patrick K. O'Brien, Mike C. Fletcher, +# Matthew R. Scott +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# * Neither the name of the nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +"""Refactored 'safe reference from dispatcher.py""" +import operator +import sys +import traceback +import weakref + + +get_self = operator.attrgetter("__self__") +get_func = operator.attrgetter("__func__") + + +def safe_ref(target, on_delete=None): + """Return a *safe* weak reference to a callable target. + + - ``target``: The object to be weakly referenced, if it's a bound + method reference, will create a BoundMethodWeakref, otherwise + creates a simple weakref. + + - ``on_delete``: If provided, will have a hard reference stored to + the callable to be called after the safe reference goes out of + scope with the reference object, (either a weakref or a + BoundMethodWeakref) as argument. + """ + try: + im_self = get_self(target) + except AttributeError: + if callable(on_delete): + return weakref.ref(target, on_delete) + else: + return weakref.ref(target) + else: + if im_self is not None: + # Turn a bound method into a BoundMethodWeakref instance. + # Keep track of these instances for lookup by disconnect(). + assert hasattr(target, "im_func") or hasattr(target, "__func__"), ( + f"safe_ref target {target!r} has im_self, but no im_func, " + "don't know how to create reference" + ) + reference = BoundMethodWeakref(target=target, on_delete=on_delete) + return reference + + +class BoundMethodWeakref: + """'Safe' and reusable weak references to instance methods. + + BoundMethodWeakref objects provide a mechanism for referencing a + bound method without requiring that the method object itself + (which is normally a transient object) is kept alive. Instead, + the BoundMethodWeakref object keeps weak references to both the + object and the function which together define the instance method. + + Attributes: + + - ``key``: The identity key for the reference, calculated by the + class's calculate_key method applied to the target instance method. + + - ``deletion_methods``: Sequence of callable objects taking single + argument, a reference to this object which will be called when + *either* the target object or target function is garbage + collected (i.e. when this object becomes invalid). These are + specified as the on_delete parameters of safe_ref calls. + + - ``weak_self``: Weak reference to the target object. + + - ``weak_func``: Weak reference to the target function. + + Class Attributes: + + - ``_all_instances``: Class attribute pointing to all live + BoundMethodWeakref objects indexed by the class's + calculate_key(target) method applied to the target objects. + This weak value dictionary is used to short-circuit creation so + that multiple references to the same (object, function) pair + produce the same BoundMethodWeakref instance. + """ + + _all_instances = weakref.WeakValueDictionary() # type: ignore[var-annotated] + + def __new__(cls, target, on_delete=None, *arguments, **named): + """Create new instance or return current instance. + + Basically this method of construction allows us to + short-circuit creation of references to already-referenced + instance methods. The key corresponding to the target is + calculated, and if there is already an existing reference, + that is returned, with its deletion_methods attribute updated. + Otherwise the new instance is created and registered in the + table of already-referenced methods. + """ + key = cls.calculate_key(target) + current = cls._all_instances.get(key) + if current is not None: + current.deletion_methods.append(on_delete) + return current + else: + base = super().__new__(cls) + cls._all_instances[key] = base + base.__init__(target, on_delete, *arguments, **named) + return base + + def __init__(self, target, on_delete=None): + """Return a weak-reference-like instance for a bound method. + + - ``target``: The instance-method target for the weak reference, + must have im_self and im_func attributes and be + reconstructable via the following, which is true of built-in + instance methods:: + + target.im_func.__get__( target.im_self ) + + - ``on_delete``: Optional callback which will be called when + this weak reference ceases to be valid (i.e. either the + object or the function is garbage collected). Should take a + single argument, which will be passed a pointer to this + object. + """ + + def remove(weak, self=self): + """Set self.isDead to True when method or instance is destroyed.""" + methods = self.deletion_methods[:] + del self.deletion_methods[:] + try: + del self.__class__._all_instances[self.key] + except KeyError: + pass + for function in methods: + try: + if callable(function): + function(self) + except Exception: + try: + traceback.print_exc() + except AttributeError: + e = sys.exc_info()[1] + print( + f"Exception during saferef {self} " + f"cleanup function {function}: {e}" + ) + + self.deletion_methods = [on_delete] + self.key = self.calculate_key(target) + im_self = get_self(target) + im_func = get_func(target) + self.weak_self = weakref.ref(im_self, remove) + self.weak_func = weakref.ref(im_func, remove) + self.self_name = str(im_self) + self.func_name = str(im_func.__name__) + + @classmethod + def calculate_key(cls, target): + """Calculate the reference key for this reference. + + Currently this is a two-tuple of the id()'s of the target + object and the target function respectively. + """ + return (id(get_self(target)), id(get_func(target))) + + def __str__(self): + """Give a friendly representation of the object.""" + return "{}({}.{})".format( + self.__class__.__name__, + self.self_name, + self.func_name, + ) + + __repr__ = __str__ + + def __hash__(self): + return hash((self.self_name, self.key)) + + def __nonzero__(self): + """Whether we are still a valid reference.""" + return self() is not None + + def __eq__(self, other): + """Compare with another reference.""" + if not isinstance(other, self.__class__): + return operator.eq(self.__class__, type(other)) + return operator.eq(self.key, other.key) + + def __call__(self): + """Return a strong reference to the bound method. + + If the target cannot be retrieved, then will return None, + otherwise returns a bound instance method for our object and + function. + + Note: You may call this method any number of times, as it does + not invalidate the reference. + """ + target = self.weak_self() + if target is not None: + function = self.weak_func() + if function is not None: + return function.__get__(target) + return None diff --git a/env/lib/python3.11/site-packages/blinker/_utilities.py b/env/lib/python3.11/site-packages/blinker/_utilities.py new file mode 100644 index 0000000..068d94c --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker/_utilities.py @@ -0,0 +1,142 @@ +from __future__ import annotations + +import asyncio +import inspect +import sys +import typing as t +from functools import partial +from weakref import ref + +from blinker._saferef import BoundMethodWeakref + +IdentityType = t.Union[t.Tuple[int, int], str, int] + + +class _symbol: + def __init__(self, name): + """Construct a new named symbol.""" + self.__name__ = self.name = name + + def __reduce__(self): + return symbol, (self.name,) + + def __repr__(self): + return self.name + + +_symbol.__name__ = "symbol" + + +class symbol: + """A constant symbol. + + >>> symbol('foo') is symbol('foo') + True + >>> symbol('foo') + foo + + A slight refinement of the MAGICCOOKIE=object() pattern. The primary + advantage of symbol() is its repr(). They are also singletons. + + Repeated calls of symbol('name') will all return the same instance. + + """ + + symbols = {} # type: ignore[var-annotated] + + def __new__(cls, name): + try: + return cls.symbols[name] + except KeyError: + return cls.symbols.setdefault(name, _symbol(name)) + + +def hashable_identity(obj: object) -> IdentityType: + if hasattr(obj, "__func__"): + return (id(obj.__func__), id(obj.__self__)) # type: ignore[attr-defined] + elif hasattr(obj, "im_func"): + return (id(obj.im_func), id(obj.im_self)) # type: ignore[attr-defined] + elif isinstance(obj, (int, str)): + return obj + else: + return id(obj) + + +WeakTypes = (ref, BoundMethodWeakref) + + +class annotatable_weakref(ref): + """A weakref.ref that supports custom instance attributes.""" + + receiver_id: t.Optional[IdentityType] + sender_id: t.Optional[IdentityType] + + +def reference( # type: ignore[no-untyped-def] + object, callback=None, **annotations +) -> annotatable_weakref: + """Return an annotated weak ref.""" + if callable(object): + weak = callable_reference(object, callback) + else: + weak = annotatable_weakref(object, callback) + for key, value in annotations.items(): + setattr(weak, key, value) + return weak # type: ignore[no-any-return] + + +def callable_reference(object, callback=None): + """Return an annotated weak ref, supporting bound instance methods.""" + if hasattr(object, "im_self") and object.im_self is not None: + return BoundMethodWeakref(target=object, on_delete=callback) + elif hasattr(object, "__self__") and object.__self__ is not None: + return BoundMethodWeakref(target=object, on_delete=callback) + return annotatable_weakref(object, callback) + + +class lazy_property: + """A @property that is only evaluated once.""" + + def __init__(self, deferred): + self._deferred = deferred + self.__doc__ = deferred.__doc__ + + def __get__(self, obj, cls): + if obj is None: + return self + value = self._deferred(obj) + setattr(obj, self._deferred.__name__, value) + return value + + +def is_coroutine_function(func: t.Any) -> bool: + # Python < 3.8 does not correctly determine partially wrapped + # coroutine functions are coroutine functions, hence the need for + # this to exist. Code taken from CPython. + if sys.version_info >= (3, 8): + return asyncio.iscoroutinefunction(func) + else: + # Note that there is something special about the AsyncMock + # such that it isn't determined as a coroutine function + # without an explicit check. + try: + from unittest.mock import AsyncMock # type: ignore[attr-defined] + + if isinstance(func, AsyncMock): + return True + except ImportError: + # Not testing, no asynctest to import + pass + + while inspect.ismethod(func): + func = func.__func__ + while isinstance(func, partial): + func = func.func + if not inspect.isfunction(func): + return False + + if func.__code__.co_flags & inspect.CO_COROUTINE: + return True + + acic = asyncio.coroutines._is_coroutine # type: ignore[attr-defined] + return getattr(func, "_is_coroutine", None) is acic diff --git a/env/lib/python3.11/site-packages/blinker/base.py b/env/lib/python3.11/site-packages/blinker/base.py new file mode 100644 index 0000000..80e24e2 --- /dev/null +++ b/env/lib/python3.11/site-packages/blinker/base.py @@ -0,0 +1,551 @@ +"""Signals and events. + +A small implementation of signals, inspired by a snippet of Django signal +API client code seen in a blog post. Signals are first-class objects and +each manages its own receivers and message emission. + +The :func:`signal` function provides singleton behavior for named signals. + +""" +from __future__ import annotations + +import typing as t +from collections import defaultdict +from contextlib import contextmanager +from warnings import warn +from weakref import WeakValueDictionary + +from blinker._utilities import annotatable_weakref +from blinker._utilities import hashable_identity +from blinker._utilities import IdentityType +from blinker._utilities import is_coroutine_function +from blinker._utilities import lazy_property +from blinker._utilities import reference +from blinker._utilities import symbol +from blinker._utilities import WeakTypes + +if t.TYPE_CHECKING: + import typing_extensions as te + + T_callable = t.TypeVar("T_callable", bound=t.Callable[..., t.Any]) + + T = t.TypeVar("T") + P = te.ParamSpec("P") + + AsyncWrapperType = t.Callable[[t.Callable[P, T]], t.Callable[P, t.Awaitable[T]]] + SyncWrapperType = t.Callable[[t.Callable[P, t.Awaitable[T]]], t.Callable[P, T]] + +ANY = symbol("ANY") +ANY.__doc__ = 'Token for "any sender".' +ANY_ID = 0 + + +class Signal: + """A notification emitter.""" + + #: An :obj:`ANY` convenience synonym, allows ``Signal.ANY`` + #: without an additional import. + ANY = ANY + + @lazy_property + def receiver_connected(self) -> Signal: + """Emitted after each :meth:`connect`. + + The signal sender is the signal instance, and the :meth:`connect` + arguments are passed through: *receiver*, *sender*, and *weak*. + + .. versionadded:: 1.2 + + """ + return Signal(doc="Emitted after a receiver connects.") + + @lazy_property + def receiver_disconnected(self) -> Signal: + """Emitted after :meth:`disconnect`. + + The sender is the signal instance, and the :meth:`disconnect` arguments + are passed through: *receiver* and *sender*. + + Note, this signal is emitted **only** when :meth:`disconnect` is + called explicitly. + + The disconnect signal can not be emitted by an automatic disconnect + (due to a weakly referenced receiver or sender going out of scope), + as the receiver and/or sender instances are no longer available for + use at the time this signal would be emitted. + + An alternative approach is available by subscribing to + :attr:`receiver_connected` and setting up a custom weakref cleanup + callback on weak receivers and senders. + + .. versionadded:: 1.2 + + """ + return Signal(doc="Emitted after a receiver disconnects.") + + def __init__(self, doc: str | None = None) -> None: + """ + :param doc: optional. If provided, will be assigned to the signal's + __doc__ attribute. + + """ + if doc: + self.__doc__ = doc + #: A mapping of connected receivers. + #: + #: The values of this mapping are not meaningful outside of the + #: internal :class:`Signal` implementation, however the boolean value + #: of the mapping is useful as an extremely efficient check to see if + #: any receivers are connected to the signal. + self.receivers: dict[IdentityType, t.Callable | annotatable_weakref] = {} + self.is_muted = False + self._by_receiver: dict[IdentityType, set[IdentityType]] = defaultdict(set) + self._by_sender: dict[IdentityType, set[IdentityType]] = defaultdict(set) + self._weak_senders: dict[IdentityType, annotatable_weakref] = {} + + def connect( + self, receiver: T_callable, sender: t.Any = ANY, weak: bool = True + ) -> T_callable: + """Connect *receiver* to signal events sent by *sender*. + + :param receiver: A callable. Will be invoked by :meth:`send` with + `sender=` as a single positional argument and any ``kwargs`` that + were provided to a call to :meth:`send`. + + :param sender: Any object or :obj:`ANY`, defaults to ``ANY``. + Restricts notifications delivered to *receiver* to only those + :meth:`send` emissions sent by *sender*. If ``ANY``, the receiver + will always be notified. A *receiver* may be connected to + multiple *sender* values on the same Signal through multiple calls + to :meth:`connect`. + + :param weak: If true, the Signal will hold a weakref to *receiver* + and automatically disconnect when *receiver* goes out of scope or + is garbage collected. Defaults to True. + + """ + receiver_id = hashable_identity(receiver) + receiver_ref: T_callable | annotatable_weakref + + if weak: + receiver_ref = reference(receiver, self._cleanup_receiver) + receiver_ref.receiver_id = receiver_id + else: + receiver_ref = receiver + sender_id: IdentityType + if sender is ANY: + sender_id = ANY_ID + else: + sender_id = hashable_identity(sender) + + self.receivers.setdefault(receiver_id, receiver_ref) + self._by_sender[sender_id].add(receiver_id) + self._by_receiver[receiver_id].add(sender_id) + del receiver_ref + + if sender is not ANY and sender_id not in self._weak_senders: + # wire together a cleanup for weakref-able senders + try: + sender_ref = reference(sender, self._cleanup_sender) + sender_ref.sender_id = sender_id + except TypeError: + pass + else: + self._weak_senders.setdefault(sender_id, sender_ref) + del sender_ref + + # broadcast this connection. if receivers raise, disconnect. + if "receiver_connected" in self.__dict__ and self.receiver_connected.receivers: + try: + self.receiver_connected.send( + self, receiver=receiver, sender=sender, weak=weak + ) + except TypeError as e: + self.disconnect(receiver, sender) + raise e + if receiver_connected.receivers and self is not receiver_connected: + try: + receiver_connected.send( + self, receiver_arg=receiver, sender_arg=sender, weak_arg=weak + ) + except TypeError as e: + self.disconnect(receiver, sender) + raise e + return receiver + + def connect_via( + self, sender: t.Any, weak: bool = False + ) -> t.Callable[[T_callable], T_callable]: + """Connect the decorated function as a receiver for *sender*. + + :param sender: Any object or :obj:`ANY`. The decorated function + will only receive :meth:`send` emissions sent by *sender*. If + ``ANY``, the receiver will always be notified. A function may be + decorated multiple times with differing *sender* values. + + :param weak: If true, the Signal will hold a weakref to the + decorated function and automatically disconnect when *receiver* + goes out of scope or is garbage collected. Unlike + :meth:`connect`, this defaults to False. + + The decorated function will be invoked by :meth:`send` with + `sender=` as a single positional argument and any ``kwargs`` that + were provided to the call to :meth:`send`. + + + .. versionadded:: 1.1 + + """ + + def decorator(fn: T_callable) -> T_callable: + self.connect(fn, sender, weak) + return fn + + return decorator + + @contextmanager + def connected_to( + self, receiver: t.Callable, sender: t.Any = ANY + ) -> t.Generator[None, None, None]: + """Execute a block with the signal temporarily connected to *receiver*. + + :param receiver: a receiver callable + :param sender: optional, a sender to filter on + + This is a context manager for use in the ``with`` statement. It can + be useful in unit tests. *receiver* is connected to the signal for + the duration of the ``with`` block, and will be disconnected + automatically when exiting the block: + + .. code-block:: python + + with on_ready.connected_to(receiver): + # do stuff + on_ready.send(123) + + .. versionadded:: 1.1 + + """ + self.connect(receiver, sender=sender, weak=False) + try: + yield None + except Exception as e: + self.disconnect(receiver) + raise e + else: + self.disconnect(receiver) + + @contextmanager + def muted(self) -> t.Generator[None, None, None]: + """Context manager for temporarily disabling signal. + Useful for test purposes. + """ + self.is_muted = True + try: + yield None + except Exception as e: + raise e + finally: + self.is_muted = False + + def temporarily_connected_to( + self, receiver: t.Callable, sender: t.Any = ANY + ) -> t.ContextManager[None]: + """An alias for :meth:`connected_to`. + + :param receiver: a receiver callable + :param sender: optional, a sender to filter on + + .. versionadded:: 0.9 + + .. versionchanged:: 1.1 + Renamed to :meth:`connected_to`. ``temporarily_connected_to`` was + deprecated in 1.2 and will be removed in a subsequent version. + + """ + warn( + "temporarily_connected_to is deprecated; use connected_to instead.", + DeprecationWarning, + ) + return self.connected_to(receiver, sender) + + def send( + self, + *sender: t.Any, + _async_wrapper: AsyncWrapperType | None = None, + **kwargs: t.Any, + ) -> list[tuple[t.Callable, t.Any]]: + """Emit this signal on behalf of *sender*, passing on ``kwargs``. + + Returns a list of 2-tuples, pairing receivers with their return + value. The ordering of receiver notification is undefined. + + :param sender: Any object or ``None``. If omitted, synonymous + with ``None``. Only accepts one positional argument. + :param _async_wrapper: A callable that should wrap a coroutine + receiver and run it when called synchronously. + + :param kwargs: Data to be sent to receivers. + """ + if self.is_muted: + return [] + + sender = self._extract_sender(sender) + results = [] + for receiver in self.receivers_for(sender): + if is_coroutine_function(receiver): + if _async_wrapper is None: + raise RuntimeError("Cannot send to a coroutine function") + receiver = _async_wrapper(receiver) + result = receiver(sender, **kwargs) # type: ignore[call-arg] + results.append((receiver, result)) + return results + + async def send_async( + self, + *sender: t.Any, + _sync_wrapper: SyncWrapperType | None = None, + **kwargs: t.Any, + ) -> list[tuple[t.Callable, t.Any]]: + """Emit this signal on behalf of *sender*, passing on ``kwargs``. + + Returns a list of 2-tuples, pairing receivers with their return + value. The ordering of receiver notification is undefined. + + :param sender: Any object or ``None``. If omitted, synonymous + with ``None``. Only accepts one positional argument. + :param _sync_wrapper: A callable that should wrap a synchronous + receiver and run it when awaited. + + :param kwargs: Data to be sent to receivers. + """ + if self.is_muted: + return [] + + sender = self._extract_sender(sender) + results = [] + for receiver in self.receivers_for(sender): + if not is_coroutine_function(receiver): + if _sync_wrapper is None: + raise RuntimeError("Cannot send to a non-coroutine function") + receiver = _sync_wrapper(receiver) # type: ignore[arg-type] + result = await receiver(sender, **kwargs) # type: ignore[call-arg, misc] + results.append((receiver, result)) + return results + + def _extract_sender(self, sender: t.Any) -> t.Any: + if not self.receivers: + # Ensure correct signature even on no-op sends, disable with -O + # for lowest possible cost. + if __debug__ and sender and len(sender) > 1: + raise TypeError( + f"send() accepts only one positional argument, {len(sender)} given" + ) + return [] + + # Using '*sender' rather than 'sender=None' allows 'sender' to be + # used as a keyword argument- i.e. it's an invisible name in the + # function signature. + if len(sender) == 0: + sender = None + elif len(sender) > 1: + raise TypeError( + f"send() accepts only one positional argument, {len(sender)} given" + ) + else: + sender = sender[0] + return sender + + def has_receivers_for(self, sender: t.Any) -> bool: + """True if there is probably a receiver for *sender*. + + Performs an optimistic check only. Does not guarantee that all + weakly referenced receivers are still alive. See + :meth:`receivers_for` for a stronger search. + + """ + if not self.receivers: + return False + if self._by_sender[ANY_ID]: + return True + if sender is ANY: + return False + return hashable_identity(sender) in self._by_sender + + def receivers_for( + self, sender: t.Any + ) -> t.Generator[t.Callable | annotatable_weakref, None, None]: + """Iterate all live receivers listening for *sender*.""" + # TODO: test receivers_for(ANY) + if self.receivers: + sender_id = hashable_identity(sender) + if sender_id in self._by_sender: + ids = self._by_sender[ANY_ID] | self._by_sender[sender_id] + else: + ids = self._by_sender[ANY_ID].copy() + for receiver_id in ids: + receiver = self.receivers.get(receiver_id) + if receiver is None: + continue + if isinstance(receiver, WeakTypes): + strong = receiver() + if strong is None: + self._disconnect(receiver_id, ANY_ID) + continue + receiver = strong + yield receiver # type: ignore[misc] + + def disconnect(self, receiver: t.Callable, sender: t.Any = ANY) -> None: + """Disconnect *receiver* from this signal's events. + + :param receiver: a previously :meth:`connected` callable + + :param sender: a specific sender to disconnect from, or :obj:`ANY` + to disconnect from all senders. Defaults to ``ANY``. + + """ + sender_id: IdentityType + if sender is ANY: + sender_id = ANY_ID + else: + sender_id = hashable_identity(sender) + receiver_id = hashable_identity(receiver) + self._disconnect(receiver_id, sender_id) + + if ( + "receiver_disconnected" in self.__dict__ + and self.receiver_disconnected.receivers + ): + self.receiver_disconnected.send(self, receiver=receiver, sender=sender) + + def _disconnect(self, receiver_id: IdentityType, sender_id: IdentityType) -> None: + if sender_id == ANY_ID: + if self._by_receiver.pop(receiver_id, False): + for bucket in self._by_sender.values(): + bucket.discard(receiver_id) + self.receivers.pop(receiver_id, None) + else: + self._by_sender[sender_id].discard(receiver_id) + self._by_receiver[receiver_id].discard(sender_id) + + def _cleanup_receiver(self, receiver_ref: annotatable_weakref) -> None: + """Disconnect a receiver from all senders.""" + self._disconnect(t.cast(IdentityType, receiver_ref.receiver_id), ANY_ID) + + def _cleanup_sender(self, sender_ref: annotatable_weakref) -> None: + """Disconnect all receivers from a sender.""" + sender_id = t.cast(IdentityType, sender_ref.sender_id) + assert sender_id != ANY_ID + self._weak_senders.pop(sender_id, None) + for receiver_id in self._by_sender.pop(sender_id, ()): + self._by_receiver[receiver_id].discard(sender_id) + + def _cleanup_bookkeeping(self) -> None: + """Prune unused sender/receiver bookkeeping. Not threadsafe. + + Connecting & disconnecting leave behind a small amount of bookkeeping + for the receiver and sender values. Typical workloads using Blinker, + for example in most web apps, Flask, CLI scripts, etc., are not + adversely affected by this bookkeeping. + + With a long-running Python process performing dynamic signal routing + with high volume- e.g. connecting to function closures, "senders" are + all unique object instances, and doing all of this over and over- you + may see memory usage will grow due to extraneous bookkeeping. (An empty + set() for each stale sender/receiver pair.) + + This method will prune that bookkeeping away, with the caveat that such + pruning is not threadsafe. The risk is that cleanup of a fully + disconnected receiver/sender pair occurs while another thread is + connecting that same pair. If you are in the highly dynamic, unique + receiver/sender situation that has lead you to this method, that + failure mode is perhaps not a big deal for you. + """ + for mapping in (self._by_sender, self._by_receiver): + for _id, bucket in list(mapping.items()): + if not bucket: + mapping.pop(_id, None) + + def _clear_state(self) -> None: + """Throw away all signal state. Useful for unit tests.""" + self._weak_senders.clear() + self.receivers.clear() + self._by_sender.clear() + self._by_receiver.clear() + + +receiver_connected = Signal( + """\ +Sent by a :class:`Signal` after a receiver connects. + +:argument: the Signal that was connected to +:keyword receiver_arg: the connected receiver +:keyword sender_arg: the sender to connect to +:keyword weak_arg: true if the connection to receiver_arg is a weak reference + +.. deprecated:: 1.2 + +As of 1.2, individual signals have their own private +:attr:`~Signal.receiver_connected` and +:attr:`~Signal.receiver_disconnected` signals with a slightly simplified +call signature. This global signal is planned to be removed in 1.6. + +""" +) + + +class NamedSignal(Signal): + """A named generic notification emitter.""" + + def __init__(self, name: str, doc: str | None = None) -> None: + Signal.__init__(self, doc) + + #: The name of this signal. + self.name = name + + def __repr__(self) -> str: + base = Signal.__repr__(self) + return f"{base[:-1]}; {self.name!r}>" + + +class Namespace(dict): + """A mapping of signal names to signals.""" + + def signal(self, name: str, doc: str | None = None) -> NamedSignal: + """Return the :class:`NamedSignal` *name*, creating it if required. + + Repeated calls to this function will return the same signal object. + + """ + try: + return self[name] # type: ignore[no-any-return] + except KeyError: + result = self.setdefault(name, NamedSignal(name, doc)) + return result # type: ignore[no-any-return] + + +class WeakNamespace(WeakValueDictionary): + """A weak mapping of signal names to signals. + + Automatically cleans up unused Signals when the last reference goes out + of scope. This namespace implementation exists for a measure of legacy + compatibility with Blinker <= 1.2, and may be dropped in the future. + + .. versionadded:: 1.3 + + """ + + def signal(self, name: str, doc: str | None = None) -> NamedSignal: + """Return the :class:`NamedSignal` *name*, creating it if required. + + Repeated calls to this function will return the same signal object. + + """ + try: + return self[name] # type: ignore[no-any-return] + except KeyError: + result = self.setdefault(name, NamedSignal(name, doc)) + return result # type: ignore[no-any-return] + + +signal = Namespace().signal diff --git a/env/lib/python3.11/site-packages/blinker/py.typed b/env/lib/python3.11/site-packages/blinker/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/INSTALLER b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/LICENSE.rst new file mode 100644 index 0000000..d12a849 --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2014 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/METADATA b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/METADATA new file mode 100644 index 0000000..8e5dc1e --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/METADATA @@ -0,0 +1,111 @@ +Metadata-Version: 2.1 +Name: click +Version: 8.1.3 +Summary: Composable command line interface toolkit +Home-page: https://palletsprojects.com/p/click/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://click.palletsprojects.com/ +Project-URL: Changes, https://click.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/click/ +Project-URL: Issue Tracker, https://github.com/pallets/click/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: colorama ; platform_system == "Windows" +Requires-Dist: importlib-metadata ; python_version < "3.8" + +\$ click\_ +========== + +Click is a Python package for creating beautiful command line interfaces +in a composable way with as little code as necessary. It's the "Command +Line Interface Creation Kit". It's highly configurable but comes with +sensible defaults out of the box. + +It aims to make the process of writing command line tools quick and fun +while also preventing any frustration caused by the inability to +implement an intended CLI API. + +Click in three points: + +- Arbitrary nesting of commands +- Automatic help page generation +- Supports lazy loading of subcommands at runtime + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U click + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + import click + + @click.command() + @click.option("--count", default=1, help="Number of greetings.") + @click.option("--name", prompt="Your name", help="The person to greet.") + def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for _ in range(count): + click.echo(f"Hello, {name}!") + + if __name__ == '__main__': + hello() + +.. code-block:: text + + $ python hello.py --count=3 + Your name: Click + Hello, Click! + Hello, Click! + Hello, Click! + + +Donate +------ + +The Pallets organization develops and supports Click and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://click.palletsprojects.com/ +- Changes: https://click.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/click/ +- Source Code: https://github.com/pallets/click +- Issue Tracker: https://github.com/pallets/click/issues +- Website: https://palletsprojects.com/p/click +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/RECORD b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/RECORD new file mode 100644 index 0000000..0c973f8 --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/RECORD @@ -0,0 +1,39 @@ +click-8.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click-8.1.3.dist-info/LICENSE.rst,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475 +click-8.1.3.dist-info/METADATA,sha256=tFJIX5lOjx7c5LjZbdTPFVDJSgyv9F74XY0XCPp_gnc,3247 +click-8.1.3.dist-info/RECORD,, +click-8.1.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +click-8.1.3.dist-info/top_level.txt,sha256=J1ZQogalYS4pphY_lPECoNMfw0HzTSrZglC4Yfwo4xA,6 +click/__init__.py,sha256=rQBLutqg-z6m8nOzivIfigDn_emijB_dKv9BZ2FNi5s,3138 +click/__pycache__/__init__.cpython-311.pyc,, +click/__pycache__/_compat.cpython-311.pyc,, +click/__pycache__/_termui_impl.cpython-311.pyc,, +click/__pycache__/_textwrap.cpython-311.pyc,, +click/__pycache__/_winconsole.cpython-311.pyc,, +click/__pycache__/core.cpython-311.pyc,, +click/__pycache__/decorators.cpython-311.pyc,, +click/__pycache__/exceptions.cpython-311.pyc,, +click/__pycache__/formatting.cpython-311.pyc,, +click/__pycache__/globals.cpython-311.pyc,, +click/__pycache__/parser.cpython-311.pyc,, +click/__pycache__/shell_completion.cpython-311.pyc,, +click/__pycache__/termui.cpython-311.pyc,, +click/__pycache__/testing.cpython-311.pyc,, +click/__pycache__/types.cpython-311.pyc,, +click/__pycache__/utils.cpython-311.pyc,, +click/_compat.py,sha256=JIHLYs7Jzz4KT9t-ds4o4jBzLjnwCiJQKqur-5iwCKI,18810 +click/_termui_impl.py,sha256=qK6Cfy4mRFxvxE8dya8RBhLpSC8HjF-lvBc6aNrPdwg,23451 +click/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353 +click/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860 +click/core.py,sha256=mz87bYEKzIoNYEa56BFAiOJnvt1Y0L-i7wD4_ZecieE,112782 +click/decorators.py,sha256=yo3zvzgUm5q7h5CXjyV6q3h_PJAiUaem178zXwdWUFI,16350 +click/exceptions.py,sha256=7gDaLGuFZBeCNwY9ERMsF2-Z3R9Fvq09Zc6IZSKjseo,9167 +click/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706 +click/globals.py,sha256=TP-qM88STzc7f127h35TD_v920FgfOD2EwzqA0oE8XU,1961 +click/parser.py,sha256=cAEt1uQR8gq3-S9ysqbVU-fdAZNvilxw4ReJ_T1OQMk,19044 +click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click/shell_completion.py,sha256=qOp_BeC9esEOSZKyu5G7RIxEUaLsXUX-mTb7hB1r4QY,18018 +click/termui.py,sha256=ACBQVOvFCTSqtD5VREeCAdRtlHd-Imla-Lte4wSfMjA,28355 +click/testing.py,sha256=ptpMYgRY7dVfE3UDgkgwayu9ePw98sQI3D7zZXiCpj4,16063 +click/types.py,sha256=rEb1aZSQKq3ciCMmjpG2Uva9vk498XRL7ThrcK2GRss,35805 +click/utils.py,sha256=33D6E7poH_nrKB-xr-UyDEXnxOcCiQqxuRLtrqeVv6o,18682 diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/WHEEL b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/click-8.1.3.dist-info/top_level.txt b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/top_level.txt new file mode 100644 index 0000000..dca9a90 --- /dev/null +++ b/env/lib/python3.11/site-packages/click-8.1.3.dist-info/top_level.txt @@ -0,0 +1 @@ +click diff --git a/env/lib/python3.11/site-packages/click/__init__.py b/env/lib/python3.11/site-packages/click/__init__.py new file mode 100644 index 0000000..e3ef423 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/__init__.py @@ -0,0 +1,73 @@ +""" +Click is a simple Python module inspired by the stdlib optparse to make +writing command line scripts fun. Unlike other modules, it's based +around a simple API that does not come with too much magic and is +composable. +""" +from .core import Argument as Argument +from .core import BaseCommand as BaseCommand +from .core import Command as Command +from .core import CommandCollection as CommandCollection +from .core import Context as Context +from .core import Group as Group +from .core import MultiCommand as MultiCommand +from .core import Option as Option +from .core import Parameter as Parameter +from .decorators import argument as argument +from .decorators import command as command +from .decorators import confirmation_option as confirmation_option +from .decorators import group as group +from .decorators import help_option as help_option +from .decorators import make_pass_decorator as make_pass_decorator +from .decorators import option as option +from .decorators import pass_context as pass_context +from .decorators import pass_obj as pass_obj +from .decorators import password_option as password_option +from .decorators import version_option as version_option +from .exceptions import Abort as Abort +from .exceptions import BadArgumentUsage as BadArgumentUsage +from .exceptions import BadOptionUsage as BadOptionUsage +from .exceptions import BadParameter as BadParameter +from .exceptions import ClickException as ClickException +from .exceptions import FileError as FileError +from .exceptions import MissingParameter as MissingParameter +from .exceptions import NoSuchOption as NoSuchOption +from .exceptions import UsageError as UsageError +from .formatting import HelpFormatter as HelpFormatter +from .formatting import wrap_text as wrap_text +from .globals import get_current_context as get_current_context +from .parser import OptionParser as OptionParser +from .termui import clear as clear +from .termui import confirm as confirm +from .termui import echo_via_pager as echo_via_pager +from .termui import edit as edit +from .termui import getchar as getchar +from .termui import launch as launch +from .termui import pause as pause +from .termui import progressbar as progressbar +from .termui import prompt as prompt +from .termui import secho as secho +from .termui import style as style +from .termui import unstyle as unstyle +from .types import BOOL as BOOL +from .types import Choice as Choice +from .types import DateTime as DateTime +from .types import File as File +from .types import FLOAT as FLOAT +from .types import FloatRange as FloatRange +from .types import INT as INT +from .types import IntRange as IntRange +from .types import ParamType as ParamType +from .types import Path as Path +from .types import STRING as STRING +from .types import Tuple as Tuple +from .types import UNPROCESSED as UNPROCESSED +from .types import UUID as UUID +from .utils import echo as echo +from .utils import format_filename as format_filename +from .utils import get_app_dir as get_app_dir +from .utils import get_binary_stream as get_binary_stream +from .utils import get_text_stream as get_text_stream +from .utils import open_file as open_file + +__version__ = "8.1.3" diff --git a/env/lib/python3.11/site-packages/click/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abdd441c70768b215015fcee45b80d0e6f85d310 GIT binary patch literal 3691 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 SbdYiffNje85PM{ErT+&Dt}p8V literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1c5d97b40752f5193cb499d0100c9530584274d GIT binary patch literal 32719 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 cEK!{N^C+grW`V7g*f$Hp64j zI=>B~hjlTEda>8F5kTq#FFq_nJhJWk7=rke#L{V%*zH7JQi-l&B|ewY7Ia&RXNZza zXsX@fa;jzv*#tJ`Y>}u&hGWH?bXwg{PX zGM8FZBf1e=j%2ghNIJEk62NJ4#Yn_;MOVpEBChHYRa=TA6W1c?6=N=?jgO3uM)ZWC zz7G2=0I2myJei0uL==kiEI?!=y<&GNb1@Ak;T-i4R)b9t8hJ)cqtJ^$*3ds~s5emP zDIWUf*n{Kco>NxOsl0c`*KYYj4r=j?SGxL(V^-Ht{&L0NyLqGF-MnG>2lAKbY<2TS zeI|F`p5B-)Tq?^UOAeLfP^Et`KV5jIEFUYmz0w(Q5Ci^dn$y4cMSkmxl>0`lzR|Kg zX31lvdUrTbbhUTkjK~%f8dfzU-V7!R>jAiT9|5@n*xo__THvcK$2LPa$C+rE*^`>g zYAZryY{(lc9)Qm$Xo~@;g6AeX@T@enD8vR{s*y#@+-E4ugqf)@Yquq| zgpr6Pm1=-?r=Gc{tJgCSY;7sb6F(f1906kcQ%MZ#`%HT1+B0T4O%KH$IYbR*01JuL zT&^B&#zwP*zT^5=K>mVj4ebPvTfx&M=}0AX!V0}nl7baUE=fl%>1bi8EDcs!ckLBR zdZjp2mWE3bWgVXPoU6#4`FH8H(?5~FY{|zegJ$+fQg;2e+m ziz50}?6}y=**r!3J_yh%=T^1~Fk5IA<=B1IjVU%B3@9|(%PPfX^u^fc0J9vI;{iYo zz(GaiFtb3j3N-*EjT!_Jw&<=mHmEVCa2J{UUGyz`uo~SO$852=MmJ2&1G;X-BJ>zf z8E;s$J*t*jgt}pKqQw?fMX|k#vY5gdD1VAAE6Vju zELoEsu(Oy=bO6RM&ew(}r0{VXGaUf8!8K#2T m*W9au{H1!Ypuy7q?uaLupo5+zo5PlW=m{14{T!)#i2nh1ICA9x literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/_winconsole.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/_winconsole.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3db59d0e06b96708d1bebaf4340b431664b9cb78 GIT binary patch literal 13387 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 O`1tcIZ^MMCM*k1*Xrmnf literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/exceptions.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4f410c26cef91c6a4373cd9d1f9b1d57f0bf80f GIT binary patch literal 16123 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 H(eD2PLP$3d literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/globals.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/globals.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2266e64b29a9c18bdedac416358bc225cf69b3f GIT binary patch literal 3384 zcmb7GO>7&-6`uVeMNyO~Df)?BM;W&c3_1=ODQR60{c{w%QJgTTtwXJ%poTj`aqZ>q zc6LZgf>J1k4l3Y7Z|bh7kHvcH#nkRUV(y5W0;hqMC!2HK=t*uN%vT zhM0EUjM;fwaU_Yxr46D?xa)>@dCuw>+afD}NfM<#( zS%#)yY%~@_hmXfiR5fYln-W0scdZ)TPAremX`0x6v>XeYU#ZYg0}1A{3$Pa)l~Xf9lmcI>aaZQMrnK zfJ7?pAtZXSicnQQjrhs;v`rL@iC!#16dQM7$B%ovZfZC6YlxcfX}{OpR8+UL7Fsi| zp_WEXh>--j30q!Kz7DXcG2AsRR))u21LrYbs@Vayh>I%>Hv&d62{6GevW|t9#!!d_ z4m~0xau4<@*O?`7m3wte-1SzCaTbdNsRY+O&ahqg!P&Nmq&X0dE)jNR$%Ax7 zGppvU;8x9s(Yn1_6L451#D)vQSs>upwu`MAaaV13726^Jjv8s&AhSZGRbb-*D@GQ` zr*?ocX}=e74eW@ve}39ydXEI3l5x(P9z*F#mESzvvTA z>NvX9MQm4bz=Sm4$`WsYFsWH|uW^$&4KR6tS4y4>Q^4zbvAdPB(x-hz`l(55hg6)% zcMNP_B@IU!scQn@fz3Fv1BS`B2`REQ@Zgn(E9^SE$hpT?@`_L4%%gup**LW%!$YbD z3K8%nM8IG$mU2U(CPLF9fe4dj1#V#iu*SL(9=jj}w<`@1i4W6@E@f+Kt1#2QaZXow z6>2Pymk#42mwpNcgB>7S=y29dT-LtGj@@eh(f-Ty2Pf}VI;ZCLvh$tnd^qhQ<#L#YsO`p9m?XZ>T$;rT5 zPp!N9p7~zQIo{t^YWPn8y5#>;1kW$W2worx%4d3&l%%l>K1p06U#(HNy4I}gL2hudr zncsS7PChUv_sr>zIo*ywb;2-Vd5*^i0!1ED9rPE_xQ#Z^`}!s%^!_A9^-qqZ6-YeV z`$L=B(@?q^9n;+SXi)+sr1>twO20$CR!5A{B0?Uoss@!xxayEq!0*Ls7d3j|B(Yv% zt~e8PfeU&7@DhL-J%>H89dAjvQ7n!J&kSJjm0=aINaMy)7bi0{QCd<7A7DT}9{3AD zpe?H?()vIloC56koF)Uyg9XdolkhXZd>;PbM?e53(kL|wcR4Y&pPk&ve3gD~cd4B| zyO%!ONuS+XI2cOH$>aOkiCgRK)UyX8*_~IFXL8ylxCHX`#O3>i%e1cmF{kBWLV8zq z)kF!jlnf>Ha>H z%#|r52z9{#Ng@A6TSQk8LX|rnp~^O)S@Aq4OuggFyhPurBooh;~$*3`#K~P)w}it)u;^sfB$u)BT literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/parser.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/parser.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f10b7fe31669f1da965db0f47a47d2e41c44581 GIT binary patch literal 23244 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/shell_completion.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/shell_completion.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acc977e9e69229ff24862746886413ed0bbd89fd GIT binary patch literal 23627 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 XTIsum4ES>AGJkxe^2de&bB_NT>_4=P literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/testing.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/testing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63d75fe8417424f35df9982ea9761b4411ddef5f GIT binary patch literal 25782 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/types.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/types.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4c7302afe19758b2d263c4c82d2218ad94d8f93 GIT binary patch literal 52907 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 XR&ZZS&fA>#widjtSKRy)WXS&uQZwNu literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/__pycache__/utils.cpython-311.pyc b/env/lib/python3.11/site-packages/click/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04efe672ce76b6255c56b85a0910ecbd3adacc9f GIT binary patch literal 26106 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/click/_compat.py b/env/lib/python3.11/site-packages/click/_compat.py new file mode 100644 index 0000000..766d286 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/_compat.py @@ -0,0 +1,626 @@ +import codecs +import io +import os +import re +import sys +import typing as t +from weakref import WeakKeyDictionary + +CYGWIN = sys.platform.startswith("cygwin") +MSYS2 = sys.platform.startswith("win") and ("GCC" in sys.version) +# Determine local App Engine environment, per Google's own suggestion +APP_ENGINE = "APPENGINE_RUNTIME" in os.environ and "Development/" in os.environ.get( + "SERVER_SOFTWARE", "" +) +WIN = sys.platform.startswith("win") and not APP_ENGINE and not MSYS2 +auto_wrap_for_ansi: t.Optional[t.Callable[[t.TextIO], t.TextIO]] = None +_ansi_re = re.compile(r"\033\[[;?0-9]*[a-zA-Z]") + + +def get_filesystem_encoding() -> str: + return sys.getfilesystemencoding() or sys.getdefaultencoding() + + +def _make_text_stream( + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if encoding is None: + encoding = get_best_encoding(stream) + if errors is None: + errors = "replace" + return _NonClosingTextIOWrapper( + stream, + encoding, + errors, + line_buffering=True, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def is_ascii_encoding(encoding: str) -> bool: + """Checks if a given encoding is ascii.""" + try: + return codecs.lookup(encoding).name == "ascii" + except LookupError: + return False + + +def get_best_encoding(stream: t.IO) -> str: + """Returns the default stream encoding if not found.""" + rv = getattr(stream, "encoding", None) or sys.getdefaultencoding() + if is_ascii_encoding(rv): + return "utf-8" + return rv + + +class _NonClosingTextIOWrapper(io.TextIOWrapper): + def __init__( + self, + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, + **extra: t.Any, + ) -> None: + self._stream = stream = t.cast( + t.BinaryIO, _FixupStream(stream, force_readable, force_writable) + ) + super().__init__(stream, encoding, errors, **extra) + + def __del__(self) -> None: + try: + self.detach() + except Exception: + pass + + def isatty(self) -> bool: + # https://bitbucket.org/pypy/pypy/issue/1803 + return self._stream.isatty() + + +class _FixupStream: + """The new io interface needs more from streams than streams + traditionally implement. As such, this fix-up code is necessary in + some circumstances. + + The forcing of readable and writable flags are there because some tools + put badly patched objects on sys (one such offender are certain version + of jupyter notebook). + """ + + def __init__( + self, + stream: t.BinaryIO, + force_readable: bool = False, + force_writable: bool = False, + ): + self._stream = stream + self._force_readable = force_readable + self._force_writable = force_writable + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._stream, name) + + def read1(self, size: int) -> bytes: + f = getattr(self._stream, "read1", None) + + if f is not None: + return t.cast(bytes, f(size)) + + return self._stream.read(size) + + def readable(self) -> bool: + if self._force_readable: + return True + x = getattr(self._stream, "readable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.read(0) + except Exception: + return False + return True + + def writable(self) -> bool: + if self._force_writable: + return True + x = getattr(self._stream, "writable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.write("") # type: ignore + except Exception: + try: + self._stream.write(b"") + except Exception: + return False + return True + + def seekable(self) -> bool: + x = getattr(self._stream, "seekable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.seek(self._stream.tell()) + except Exception: + return False + return True + + +def _is_binary_reader(stream: t.IO, default: bool = False) -> bool: + try: + return isinstance(stream.read(0), bytes) + except Exception: + return default + # This happens in some cases where the stream was already + # closed. In this case, we assume the default. + + +def _is_binary_writer(stream: t.IO, default: bool = False) -> bool: + try: + stream.write(b"") + except Exception: + try: + stream.write("") + return False + except Exception: + pass + return default + return True + + +def _find_binary_reader(stream: t.IO) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_reader(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_reader(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _find_binary_writer(stream: t.IO) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_writer(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_writer(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _stream_is_misconfigured(stream: t.TextIO) -> bool: + """A stream is misconfigured if its encoding is ASCII.""" + # If the stream does not have an encoding set, we assume it's set + # to ASCII. This appears to happen in certain unittest + # environments. It's not quite clear what the correct behavior is + # but this at least will force Click to recover somehow. + return is_ascii_encoding(getattr(stream, "encoding", None) or "ascii") + + +def _is_compat_stream_attr(stream: t.TextIO, attr: str, value: t.Optional[str]) -> bool: + """A stream attribute is compatible if it is equal to the + desired value or the desired value is unset and the attribute + has a value. + """ + stream_value = getattr(stream, attr, None) + return stream_value == value or (value is None and stream_value is not None) + + +def _is_compatible_text_stream( + stream: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] +) -> bool: + """Check if a stream's encoding and errors attributes are + compatible with the desired values. + """ + return _is_compat_stream_attr( + stream, "encoding", encoding + ) and _is_compat_stream_attr(stream, "errors", errors) + + +def _force_correct_text_stream( + text_stream: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + is_binary: t.Callable[[t.IO, bool], bool], + find_binary: t.Callable[[t.IO], t.Optional[t.BinaryIO]], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if is_binary(text_stream, False): + binary_reader = t.cast(t.BinaryIO, text_stream) + else: + text_stream = t.cast(t.TextIO, text_stream) + # If the stream looks compatible, and won't default to a + # misconfigured ascii encoding, return it as-is. + if _is_compatible_text_stream(text_stream, encoding, errors) and not ( + encoding is None and _stream_is_misconfigured(text_stream) + ): + return text_stream + + # Otherwise, get the underlying binary reader. + possible_binary_reader = find_binary(text_stream) + + # If that's not possible, silently use the original reader + # and get mojibake instead of exceptions. + if possible_binary_reader is None: + return text_stream + + binary_reader = possible_binary_reader + + # Default errors to replace instead of strict in order to get + # something that works. + if errors is None: + errors = "replace" + + # Wrap the binary stream in a text stream with the correct + # encoding parameters. + return _make_text_stream( + binary_reader, + encoding, + errors, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def _force_correct_text_reader( + text_reader: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_reader, + encoding, + errors, + _is_binary_reader, + _find_binary_reader, + force_readable=force_readable, + ) + + +def _force_correct_text_writer( + text_writer: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_writable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_writer, + encoding, + errors, + _is_binary_writer, + _find_binary_writer, + force_writable=force_writable, + ) + + +def get_binary_stdin() -> t.BinaryIO: + reader = _find_binary_reader(sys.stdin) + if reader is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdin.") + return reader + + +def get_binary_stdout() -> t.BinaryIO: + writer = _find_binary_writer(sys.stdout) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdout.") + return writer + + +def get_binary_stderr() -> t.BinaryIO: + writer = _find_binary_writer(sys.stderr) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stderr.") + return writer + + +def get_text_stdin( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdin, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True) + + +def get_text_stdout( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdout, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True) + + +def get_text_stderr( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stderr, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stderr, encoding, errors, force_writable=True) + + +def _wrap_io_open( + file: t.Union[str, os.PathLike, int], + mode: str, + encoding: t.Optional[str], + errors: t.Optional[str], +) -> t.IO: + """Handles not passing ``encoding`` and ``errors`` in binary mode.""" + if "b" in mode: + return open(file, mode) + + return open(file, mode, encoding=encoding, errors=errors) + + +def open_stream( + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, +) -> t.Tuple[t.IO, bool]: + binary = "b" in mode + + # Standard streams first. These are simple because they ignore the + # atomic flag. Use fsdecode to handle Path("-"). + if os.fsdecode(filename) == "-": + if any(m in mode for m in ["w", "a", "x"]): + if binary: + return get_binary_stdout(), False + return get_text_stdout(encoding=encoding, errors=errors), False + if binary: + return get_binary_stdin(), False + return get_text_stdin(encoding=encoding, errors=errors), False + + # Non-atomic writes directly go out through the regular open functions. + if not atomic: + return _wrap_io_open(filename, mode, encoding, errors), True + + # Some usability stuff for atomic writes + if "a" in mode: + raise ValueError( + "Appending to an existing file is not supported, because that" + " would involve an expensive `copy`-operation to a temporary" + " file. Open the file in normal `w`-mode and copy explicitly" + " if that's what you're after." + ) + if "x" in mode: + raise ValueError("Use the `overwrite`-parameter instead.") + if "w" not in mode: + raise ValueError("Atomic writes only make sense with `w`-mode.") + + # Atomic writes are more complicated. They work by opening a file + # as a proxy in the same folder and then using the fdopen + # functionality to wrap it in a Python file. Then we wrap it in an + # atomic file that moves the file over on close. + import errno + import random + + try: + perm: t.Optional[int] = os.stat(filename).st_mode + except OSError: + perm = None + + flags = os.O_RDWR | os.O_CREAT | os.O_EXCL + + if binary: + flags |= getattr(os, "O_BINARY", 0) + + while True: + tmp_filename = os.path.join( + os.path.dirname(filename), + f".__atomic-write{random.randrange(1 << 32):08x}", + ) + try: + fd = os.open(tmp_filename, flags, 0o666 if perm is None else perm) + break + except OSError as e: + if e.errno == errno.EEXIST or ( + os.name == "nt" + and e.errno == errno.EACCES + and os.path.isdir(e.filename) + and os.access(e.filename, os.W_OK) + ): + continue + raise + + if perm is not None: + os.chmod(tmp_filename, perm) # in case perm includes bits in umask + + f = _wrap_io_open(fd, mode, encoding, errors) + af = _AtomicFile(f, tmp_filename, os.path.realpath(filename)) + return t.cast(t.IO, af), True + + +class _AtomicFile: + def __init__(self, f: t.IO, tmp_filename: str, real_filename: str) -> None: + self._f = f + self._tmp_filename = tmp_filename + self._real_filename = real_filename + self.closed = False + + @property + def name(self) -> str: + return self._real_filename + + def close(self, delete: bool = False) -> None: + if self.closed: + return + self._f.close() + os.replace(self._tmp_filename, self._real_filename) + self.closed = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._f, name) + + def __enter__(self) -> "_AtomicFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.close(delete=exc_type is not None) + + def __repr__(self) -> str: + return repr(self._f) + + +def strip_ansi(value: str) -> str: + return _ansi_re.sub("", value) + + +def _is_jupyter_kernel_output(stream: t.IO) -> bool: + while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)): + stream = stream._stream + + return stream.__class__.__module__.startswith("ipykernel.") + + +def should_strip_ansi( + stream: t.Optional[t.IO] = None, color: t.Optional[bool] = None +) -> bool: + if color is None: + if stream is None: + stream = sys.stdin + return not isatty(stream) and not _is_jupyter_kernel_output(stream) + return not color + + +# On Windows, wrap the output streams with colorama to support ANSI +# color codes. +# NOTE: double check is needed so mypy does not analyze this on Linux +if sys.platform.startswith("win") and WIN: + from ._winconsole import _get_windows_console_stream + + def _get_argv_encoding() -> str: + import locale + + return locale.getpreferredencoding() + + _ansi_stream_wrappers: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def auto_wrap_for_ansi( + stream: t.TextIO, color: t.Optional[bool] = None + ) -> t.TextIO: + """Support ANSI color and style codes on Windows by wrapping a + stream with colorama. + """ + try: + cached = _ansi_stream_wrappers.get(stream) + except Exception: + cached = None + + if cached is not None: + return cached + + import colorama + + strip = should_strip_ansi(stream, color) + ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip) + rv = t.cast(t.TextIO, ansi_wrapper.stream) + _write = rv.write + + def _safe_write(s): + try: + return _write(s) + except BaseException: + ansi_wrapper.reset_all() + raise + + rv.write = _safe_write + + try: + _ansi_stream_wrappers[stream] = rv + except Exception: + pass + + return rv + +else: + + def _get_argv_encoding() -> str: + return getattr(sys.stdin, "encoding", None) or get_filesystem_encoding() + + def _get_windows_console_stream( + f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] + ) -> t.Optional[t.TextIO]: + return None + + +def term_len(x: str) -> int: + return len(strip_ansi(x)) + + +def isatty(stream: t.IO) -> bool: + try: + return stream.isatty() + except Exception: + return False + + +def _make_cached_stream_func( + src_func: t.Callable[[], t.TextIO], wrapper_func: t.Callable[[], t.TextIO] +) -> t.Callable[[], t.TextIO]: + cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def func() -> t.TextIO: + stream = src_func() + try: + rv = cache.get(stream) + except Exception: + rv = None + if rv is not None: + return rv + rv = wrapper_func() + try: + cache[stream] = rv + except Exception: + pass + return rv + + return func + + +_default_text_stdin = _make_cached_stream_func(lambda: sys.stdin, get_text_stdin) +_default_text_stdout = _make_cached_stream_func(lambda: sys.stdout, get_text_stdout) +_default_text_stderr = _make_cached_stream_func(lambda: sys.stderr, get_text_stderr) + + +binary_streams: t.Mapping[str, t.Callable[[], t.BinaryIO]] = { + "stdin": get_binary_stdin, + "stdout": get_binary_stdout, + "stderr": get_binary_stderr, +} + +text_streams: t.Mapping[ + str, t.Callable[[t.Optional[str], t.Optional[str]], t.TextIO] +] = { + "stdin": get_text_stdin, + "stdout": get_text_stdout, + "stderr": get_text_stderr, +} diff --git a/env/lib/python3.11/site-packages/click/_termui_impl.py b/env/lib/python3.11/site-packages/click/_termui_impl.py new file mode 100644 index 0000000..4b979bc --- /dev/null +++ b/env/lib/python3.11/site-packages/click/_termui_impl.py @@ -0,0 +1,717 @@ +""" +This module contains implementations for the termui module. To keep the +import time of Click down, some infrequently used functionality is +placed in this module and only imported as needed. +""" +import contextlib +import math +import os +import sys +import time +import typing as t +from gettext import gettext as _ + +from ._compat import _default_text_stdout +from ._compat import CYGWIN +from ._compat import get_best_encoding +from ._compat import isatty +from ._compat import open_stream +from ._compat import strip_ansi +from ._compat import term_len +from ._compat import WIN +from .exceptions import ClickException +from .utils import echo + +V = t.TypeVar("V") + +if os.name == "nt": + BEFORE_BAR = "\r" + AFTER_BAR = "\n" +else: + BEFORE_BAR = "\r\033[?25l" + AFTER_BAR = "\033[?25h\n" + + +class ProgressBar(t.Generic[V]): + def __init__( + self, + iterable: t.Optional[t.Iterable[V]], + length: t.Optional[int] = None, + fill_char: str = "#", + empty_char: str = " ", + bar_template: str = "%(bar)s", + info_sep: str = " ", + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + label: t.Optional[str] = None, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, + width: int = 30, + ) -> None: + self.fill_char = fill_char + self.empty_char = empty_char + self.bar_template = bar_template + self.info_sep = info_sep + self.show_eta = show_eta + self.show_percent = show_percent + self.show_pos = show_pos + self.item_show_func = item_show_func + self.label = label or "" + if file is None: + file = _default_text_stdout() + self.file = file + self.color = color + self.update_min_steps = update_min_steps + self._completed_intervals = 0 + self.width = width + self.autowidth = width == 0 + + if length is None: + from operator import length_hint + + length = length_hint(iterable, -1) + + if length == -1: + length = None + if iterable is None: + if length is None: + raise TypeError("iterable or length is required") + iterable = t.cast(t.Iterable[V], range(length)) + self.iter = iter(iterable) + self.length = length + self.pos = 0 + self.avg: t.List[float] = [] + self.start = self.last_eta = time.time() + self.eta_known = False + self.finished = False + self.max_width: t.Optional[int] = None + self.entered = False + self.current_item: t.Optional[V] = None + self.is_hidden = not isatty(self.file) + self._last_line: t.Optional[str] = None + + def __enter__(self) -> "ProgressBar": + self.entered = True + self.render_progress() + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.render_finish() + + def __iter__(self) -> t.Iterator[V]: + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + self.render_progress() + return self.generator() + + def __next__(self) -> V: + # Iteration is defined in terms of a generator function, + # returned by iter(self); use that to define next(). This works + # because `self.iter` is an iterable consumed by that generator, + # so it is re-entry safe. Calling `next(self.generator())` + # twice works and does "what you want". + return next(iter(self)) + + def render_finish(self) -> None: + if self.is_hidden: + return + self.file.write(AFTER_BAR) + self.file.flush() + + @property + def pct(self) -> float: + if self.finished: + return 1.0 + return min(self.pos / (float(self.length or 1) or 1), 1.0) + + @property + def time_per_iteration(self) -> float: + if not self.avg: + return 0.0 + return sum(self.avg) / float(len(self.avg)) + + @property + def eta(self) -> float: + if self.length is not None and not self.finished: + return self.time_per_iteration * (self.length - self.pos) + return 0.0 + + def format_eta(self) -> str: + if self.eta_known: + t = int(self.eta) + seconds = t % 60 + t //= 60 + minutes = t % 60 + t //= 60 + hours = t % 24 + t //= 24 + if t > 0: + return f"{t}d {hours:02}:{minutes:02}:{seconds:02}" + else: + return f"{hours:02}:{minutes:02}:{seconds:02}" + return "" + + def format_pos(self) -> str: + pos = str(self.pos) + if self.length is not None: + pos += f"/{self.length}" + return pos + + def format_pct(self) -> str: + return f"{int(self.pct * 100): 4}%"[1:] + + def format_bar(self) -> str: + if self.length is not None: + bar_length = int(self.pct * self.width) + bar = self.fill_char * bar_length + bar += self.empty_char * (self.width - bar_length) + elif self.finished: + bar = self.fill_char * self.width + else: + chars = list(self.empty_char * (self.width or 1)) + if self.time_per_iteration != 0: + chars[ + int( + (math.cos(self.pos * self.time_per_iteration) / 2.0 + 0.5) + * self.width + ) + ] = self.fill_char + bar = "".join(chars) + return bar + + def format_progress_line(self) -> str: + show_percent = self.show_percent + + info_bits = [] + if self.length is not None and show_percent is None: + show_percent = not self.show_pos + + if self.show_pos: + info_bits.append(self.format_pos()) + if show_percent: + info_bits.append(self.format_pct()) + if self.show_eta and self.eta_known and not self.finished: + info_bits.append(self.format_eta()) + if self.item_show_func is not None: + item_info = self.item_show_func(self.current_item) + if item_info is not None: + info_bits.append(item_info) + + return ( + self.bar_template + % { + "label": self.label, + "bar": self.format_bar(), + "info": self.info_sep.join(info_bits), + } + ).rstrip() + + def render_progress(self) -> None: + import shutil + + if self.is_hidden: + # Only output the label as it changes if the output is not a + # TTY. Use file=stderr if you expect to be piping stdout. + if self._last_line != self.label: + self._last_line = self.label + echo(self.label, file=self.file, color=self.color) + + return + + buf = [] + # Update width in case the terminal has been resized + if self.autowidth: + old_width = self.width + self.width = 0 + clutter_length = term_len(self.format_progress_line()) + new_width = max(0, shutil.get_terminal_size().columns - clutter_length) + if new_width < old_width: + buf.append(BEFORE_BAR) + buf.append(" " * self.max_width) # type: ignore + self.max_width = new_width + self.width = new_width + + clear_width = self.width + if self.max_width is not None: + clear_width = self.max_width + + buf.append(BEFORE_BAR) + line = self.format_progress_line() + line_len = term_len(line) + if self.max_width is None or self.max_width < line_len: + self.max_width = line_len + + buf.append(line) + buf.append(" " * (clear_width - line_len)) + line = "".join(buf) + # Render the line only if it changed. + + if line != self._last_line: + self._last_line = line + echo(line, file=self.file, color=self.color, nl=False) + self.file.flush() + + def make_step(self, n_steps: int) -> None: + self.pos += n_steps + if self.length is not None and self.pos >= self.length: + self.finished = True + + if (time.time() - self.last_eta) < 1.0: + return + + self.last_eta = time.time() + + # self.avg is a rolling list of length <= 7 of steps where steps are + # defined as time elapsed divided by the total progress through + # self.length. + if self.pos: + step = (time.time() - self.start) / self.pos + else: + step = time.time() - self.start + + self.avg = self.avg[-6:] + [step] + + self.eta_known = self.length is not None + + def update(self, n_steps: int, current_item: t.Optional[V] = None) -> None: + """Update the progress bar by advancing a specified number of + steps, and optionally set the ``current_item`` for this new + position. + + :param n_steps: Number of steps to advance. + :param current_item: Optional item to set as ``current_item`` + for the updated position. + + .. versionchanged:: 8.0 + Added the ``current_item`` optional parameter. + + .. versionchanged:: 8.0 + Only render when the number of steps meets the + ``update_min_steps`` threshold. + """ + if current_item is not None: + self.current_item = current_item + + self._completed_intervals += n_steps + + if self._completed_intervals >= self.update_min_steps: + self.make_step(self._completed_intervals) + self.render_progress() + self._completed_intervals = 0 + + def finish(self) -> None: + self.eta_known = False + self.current_item = None + self.finished = True + + def generator(self) -> t.Iterator[V]: + """Return a generator which yields the items added to the bar + during construction, and updates the progress bar *after* the + yielded block returns. + """ + # WARNING: the iterator interface for `ProgressBar` relies on + # this and only works because this is a simple generator which + # doesn't create or manage additional state. If this function + # changes, the impact should be evaluated both against + # `iter(bar)` and `next(bar)`. `next()` in particular may call + # `self.generator()` repeatedly, and this must remain safe in + # order for that interface to work. + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + + if self.is_hidden: + yield from self.iter + else: + for rv in self.iter: + self.current_item = rv + + # This allows show_item_func to be updated before the + # item is processed. Only trigger at the beginning of + # the update interval. + if self._completed_intervals == 0: + self.render_progress() + + yield rv + self.update(1) + + self.finish() + self.render_progress() + + +def pager(generator: t.Iterable[str], color: t.Optional[bool] = None) -> None: + """Decide what method to use for paging through text.""" + stdout = _default_text_stdout() + if not isatty(sys.stdin) or not isatty(stdout): + return _nullpager(stdout, generator, color) + pager_cmd = (os.environ.get("PAGER", None) or "").strip() + if pager_cmd: + if WIN: + return _tempfilepager(generator, pager_cmd, color) + return _pipepager(generator, pager_cmd, color) + if os.environ.get("TERM") in ("dumb", "emacs"): + return _nullpager(stdout, generator, color) + if WIN or sys.platform.startswith("os2"): + return _tempfilepager(generator, "more <", color) + if hasattr(os, "system") and os.system("(less) 2>/dev/null") == 0: + return _pipepager(generator, "less", color) + + import tempfile + + fd, filename = tempfile.mkstemp() + os.close(fd) + try: + if hasattr(os, "system") and os.system(f'more "{filename}"') == 0: + return _pipepager(generator, "more", color) + return _nullpager(stdout, generator, color) + finally: + os.unlink(filename) + + +def _pipepager(generator: t.Iterable[str], cmd: str, color: t.Optional[bool]) -> None: + """Page through text by feeding it to another program. Invoking a + pager through this might support colors. + """ + import subprocess + + env = dict(os.environ) + + # If we're piping to less we might support colors under the + # condition that + cmd_detail = cmd.rsplit("/", 1)[-1].split() + if color is None and cmd_detail[0] == "less": + less_flags = f"{os.environ.get('LESS', '')}{' '.join(cmd_detail[1:])}" + if not less_flags: + env["LESS"] = "-R" + color = True + elif "r" in less_flags or "R" in less_flags: + color = True + + c = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, env=env) + stdin = t.cast(t.BinaryIO, c.stdin) + encoding = get_best_encoding(stdin) + try: + for text in generator: + if not color: + text = strip_ansi(text) + + stdin.write(text.encode(encoding, "replace")) + except (OSError, KeyboardInterrupt): + pass + else: + stdin.close() + + # Less doesn't respect ^C, but catches it for its own UI purposes (aborting + # search or other commands inside less). + # + # That means when the user hits ^C, the parent process (click) terminates, + # but less is still alive, paging the output and messing up the terminal. + # + # If the user wants to make the pager exit on ^C, they should set + # `LESS='-K'`. It's not our decision to make. + while True: + try: + c.wait() + except KeyboardInterrupt: + pass + else: + break + + +def _tempfilepager( + generator: t.Iterable[str], cmd: str, color: t.Optional[bool] +) -> None: + """Page through text by invoking a program on a temporary file.""" + import tempfile + + fd, filename = tempfile.mkstemp() + # TODO: This never terminates if the passed generator never terminates. + text = "".join(generator) + if not color: + text = strip_ansi(text) + encoding = get_best_encoding(sys.stdout) + with open_stream(filename, "wb")[0] as f: + f.write(text.encode(encoding)) + try: + os.system(f'{cmd} "{filename}"') + finally: + os.close(fd) + os.unlink(filename) + + +def _nullpager( + stream: t.TextIO, generator: t.Iterable[str], color: t.Optional[bool] +) -> None: + """Simply print unformatted text. This is the ultimate fallback.""" + for text in generator: + if not color: + text = strip_ansi(text) + stream.write(text) + + +class Editor: + def __init__( + self, + editor: t.Optional[str] = None, + env: t.Optional[t.Mapping[str, str]] = None, + require_save: bool = True, + extension: str = ".txt", + ) -> None: + self.editor = editor + self.env = env + self.require_save = require_save + self.extension = extension + + def get_editor(self) -> str: + if self.editor is not None: + return self.editor + for key in "VISUAL", "EDITOR": + rv = os.environ.get(key) + if rv: + return rv + if WIN: + return "notepad" + for editor in "sensible-editor", "vim", "nano": + if os.system(f"which {editor} >/dev/null 2>&1") == 0: + return editor + return "vi" + + def edit_file(self, filename: str) -> None: + import subprocess + + editor = self.get_editor() + environ: t.Optional[t.Dict[str, str]] = None + + if self.env: + environ = os.environ.copy() + environ.update(self.env) + + try: + c = subprocess.Popen(f'{editor} "{filename}"', env=environ, shell=True) + exit_code = c.wait() + if exit_code != 0: + raise ClickException( + _("{editor}: Editing failed").format(editor=editor) + ) + except OSError as e: + raise ClickException( + _("{editor}: Editing failed: {e}").format(editor=editor, e=e) + ) from e + + def edit(self, text: t.Optional[t.AnyStr]) -> t.Optional[t.AnyStr]: + import tempfile + + if not text: + data = b"" + elif isinstance(text, (bytes, bytearray)): + data = text + else: + if text and not text.endswith("\n"): + text += "\n" + + if WIN: + data = text.replace("\n", "\r\n").encode("utf-8-sig") + else: + data = text.encode("utf-8") + + fd, name = tempfile.mkstemp(prefix="editor-", suffix=self.extension) + f: t.BinaryIO + + try: + with os.fdopen(fd, "wb") as f: + f.write(data) + + # If the filesystem resolution is 1 second, like Mac OS + # 10.12 Extended, or 2 seconds, like FAT32, and the editor + # closes very fast, require_save can fail. Set the modified + # time to be 2 seconds in the past to work around this. + os.utime(name, (os.path.getatime(name), os.path.getmtime(name) - 2)) + # Depending on the resolution, the exact value might not be + # recorded, so get the new recorded value. + timestamp = os.path.getmtime(name) + + self.edit_file(name) + + if self.require_save and os.path.getmtime(name) == timestamp: + return None + + with open(name, "rb") as f: + rv = f.read() + + if isinstance(text, (bytes, bytearray)): + return rv + + return rv.decode("utf-8-sig").replace("\r\n", "\n") # type: ignore + finally: + os.unlink(name) + + +def open_url(url: str, wait: bool = False, locate: bool = False) -> int: + import subprocess + + def _unquote_file(url: str) -> str: + from urllib.parse import unquote + + if url.startswith("file://"): + url = unquote(url[7:]) + + return url + + if sys.platform == "darwin": + args = ["open"] + if wait: + args.append("-W") + if locate: + args.append("-R") + args.append(_unquote_file(url)) + null = open("/dev/null", "w") + try: + return subprocess.Popen(args, stderr=null).wait() + finally: + null.close() + elif WIN: + if locate: + url = _unquote_file(url.replace('"', "")) + args = f'explorer /select,"{url}"' + else: + url = url.replace('"', "") + wait_str = "/WAIT" if wait else "" + args = f'start {wait_str} "" "{url}"' + return os.system(args) + elif CYGWIN: + if locate: + url = os.path.dirname(_unquote_file(url).replace('"', "")) + args = f'cygstart "{url}"' + else: + url = url.replace('"', "") + wait_str = "-w" if wait else "" + args = f'cygstart {wait_str} "{url}"' + return os.system(args) + + try: + if locate: + url = os.path.dirname(_unquote_file(url)) or "." + else: + url = _unquote_file(url) + c = subprocess.Popen(["xdg-open", url]) + if wait: + return c.wait() + return 0 + except OSError: + if url.startswith(("http://", "https://")) and not locate and not wait: + import webbrowser + + webbrowser.open(url) + return 0 + return 1 + + +def _translate_ch_to_exc(ch: str) -> t.Optional[BaseException]: + if ch == "\x03": + raise KeyboardInterrupt() + + if ch == "\x04" and not WIN: # Unix-like, Ctrl+D + raise EOFError() + + if ch == "\x1a" and WIN: # Windows, Ctrl+Z + raise EOFError() + + return None + + +if WIN: + import msvcrt + + @contextlib.contextmanager + def raw_terminal() -> t.Iterator[int]: + yield -1 + + def getchar(echo: bool) -> str: + # The function `getch` will return a bytes object corresponding to + # the pressed character. Since Windows 10 build 1803, it will also + # return \x00 when called a second time after pressing a regular key. + # + # `getwch` does not share this probably-bugged behavior. Moreover, it + # returns a Unicode object by default, which is what we want. + # + # Either of these functions will return \x00 or \xe0 to indicate + # a special key, and you need to call the same function again to get + # the "rest" of the code. The fun part is that \u00e0 is + # "latin small letter a with grave", so if you type that on a French + # keyboard, you _also_ get a \xe0. + # E.g., consider the Up arrow. This returns \xe0 and then \x48. The + # resulting Unicode string reads as "a with grave" + "capital H". + # This is indistinguishable from when the user actually types + # "a with grave" and then "capital H". + # + # When \xe0 is returned, we assume it's part of a special-key sequence + # and call `getwch` again, but that means that when the user types + # the \u00e0 character, `getchar` doesn't return until a second + # character is typed. + # The alternative is returning immediately, but that would mess up + # cross-platform handling of arrow keys and others that start with + # \xe0. Another option is using `getch`, but then we can't reliably + # read non-ASCII characters, because return values of `getch` are + # limited to the current 8-bit codepage. + # + # Anyway, Click doesn't claim to do this Right(tm), and using `getwch` + # is doing the right thing in more situations than with `getch`. + func: t.Callable[[], str] + + if echo: + func = msvcrt.getwche # type: ignore + else: + func = msvcrt.getwch # type: ignore + + rv = func() + + if rv in ("\x00", "\xe0"): + # \x00 and \xe0 are control characters that indicate special key, + # see above. + rv += func() + + _translate_ch_to_exc(rv) + return rv + +else: + import tty + import termios + + @contextlib.contextmanager + def raw_terminal() -> t.Iterator[int]: + f: t.Optional[t.TextIO] + fd: int + + if not isatty(sys.stdin): + f = open("/dev/tty") + fd = f.fileno() + else: + fd = sys.stdin.fileno() + f = None + + try: + old_settings = termios.tcgetattr(fd) + + try: + tty.setraw(fd) + yield fd + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + sys.stdout.flush() + + if f is not None: + f.close() + except termios.error: + pass + + def getchar(echo: bool) -> str: + with raw_terminal() as fd: + ch = os.read(fd, 32).decode(get_best_encoding(sys.stdin), "replace") + + if echo and isatty(sys.stdout): + sys.stdout.write(ch) + + _translate_ch_to_exc(ch) + return ch diff --git a/env/lib/python3.11/site-packages/click/_textwrap.py b/env/lib/python3.11/site-packages/click/_textwrap.py new file mode 100644 index 0000000..b47dcbd --- /dev/null +++ b/env/lib/python3.11/site-packages/click/_textwrap.py @@ -0,0 +1,49 @@ +import textwrap +import typing as t +from contextlib import contextmanager + + +class TextWrapper(textwrap.TextWrapper): + def _handle_long_word( + self, + reversed_chunks: t.List[str], + cur_line: t.List[str], + cur_len: int, + width: int, + ) -> None: + space_left = max(width - cur_len, 1) + + if self.break_long_words: + last = reversed_chunks[-1] + cut = last[:space_left] + res = last[space_left:] + cur_line.append(cut) + reversed_chunks[-1] = res + elif not cur_line: + cur_line.append(reversed_chunks.pop()) + + @contextmanager + def extra_indent(self, indent: str) -> t.Iterator[None]: + old_initial_indent = self.initial_indent + old_subsequent_indent = self.subsequent_indent + self.initial_indent += indent + self.subsequent_indent += indent + + try: + yield + finally: + self.initial_indent = old_initial_indent + self.subsequent_indent = old_subsequent_indent + + def indent_only(self, text: str) -> str: + rv = [] + + for idx, line in enumerate(text.splitlines()): + indent = self.initial_indent + + if idx > 0: + indent = self.subsequent_indent + + rv.append(f"{indent}{line}") + + return "\n".join(rv) diff --git a/env/lib/python3.11/site-packages/click/_winconsole.py b/env/lib/python3.11/site-packages/click/_winconsole.py new file mode 100644 index 0000000..6b20df3 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/_winconsole.py @@ -0,0 +1,279 @@ +# This module is based on the excellent work by Adam Bartoš who +# provided a lot of what went into the implementation here in +# the discussion to issue1602 in the Python bug tracker. +# +# There are some general differences in regards to how this works +# compared to the original patches as we do not need to patch +# the entire interpreter but just work in our little world of +# echo and prompt. +import io +import sys +import time +import typing as t +from ctypes import byref +from ctypes import c_char +from ctypes import c_char_p +from ctypes import c_int +from ctypes import c_ssize_t +from ctypes import c_ulong +from ctypes import c_void_p +from ctypes import POINTER +from ctypes import py_object +from ctypes import Structure +from ctypes.wintypes import DWORD +from ctypes.wintypes import HANDLE +from ctypes.wintypes import LPCWSTR +from ctypes.wintypes import LPWSTR + +from ._compat import _NonClosingTextIOWrapper + +assert sys.platform == "win32" +import msvcrt # noqa: E402 +from ctypes import windll # noqa: E402 +from ctypes import WINFUNCTYPE # noqa: E402 + +c_ssize_p = POINTER(c_ssize_t) + +kernel32 = windll.kernel32 +GetStdHandle = kernel32.GetStdHandle +ReadConsoleW = kernel32.ReadConsoleW +WriteConsoleW = kernel32.WriteConsoleW +GetConsoleMode = kernel32.GetConsoleMode +GetLastError = kernel32.GetLastError +GetCommandLineW = WINFUNCTYPE(LPWSTR)(("GetCommandLineW", windll.kernel32)) +CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))( + ("CommandLineToArgvW", windll.shell32) +) +LocalFree = WINFUNCTYPE(c_void_p, c_void_p)(("LocalFree", windll.kernel32)) + +STDIN_HANDLE = GetStdHandle(-10) +STDOUT_HANDLE = GetStdHandle(-11) +STDERR_HANDLE = GetStdHandle(-12) + +PyBUF_SIMPLE = 0 +PyBUF_WRITABLE = 1 + +ERROR_SUCCESS = 0 +ERROR_NOT_ENOUGH_MEMORY = 8 +ERROR_OPERATION_ABORTED = 995 + +STDIN_FILENO = 0 +STDOUT_FILENO = 1 +STDERR_FILENO = 2 + +EOF = b"\x1a" +MAX_BYTES_WRITTEN = 32767 + +try: + from ctypes import pythonapi +except ImportError: + # On PyPy we cannot get buffers so our ability to operate here is + # severely limited. + get_buffer = None +else: + + class Py_buffer(Structure): + _fields_ = [ + ("buf", c_void_p), + ("obj", py_object), + ("len", c_ssize_t), + ("itemsize", c_ssize_t), + ("readonly", c_int), + ("ndim", c_int), + ("format", c_char_p), + ("shape", c_ssize_p), + ("strides", c_ssize_p), + ("suboffsets", c_ssize_p), + ("internal", c_void_p), + ] + + PyObject_GetBuffer = pythonapi.PyObject_GetBuffer + PyBuffer_Release = pythonapi.PyBuffer_Release + + def get_buffer(obj, writable=False): + buf = Py_buffer() + flags = PyBUF_WRITABLE if writable else PyBUF_SIMPLE + PyObject_GetBuffer(py_object(obj), byref(buf), flags) + + try: + buffer_type = c_char * buf.len + return buffer_type.from_address(buf.buf) + finally: + PyBuffer_Release(byref(buf)) + + +class _WindowsConsoleRawIOBase(io.RawIOBase): + def __init__(self, handle): + self.handle = handle + + def isatty(self): + super().isatty() + return True + + +class _WindowsConsoleReader(_WindowsConsoleRawIOBase): + def readable(self): + return True + + def readinto(self, b): + bytes_to_be_read = len(b) + if not bytes_to_be_read: + return 0 + elif bytes_to_be_read % 2: + raise ValueError( + "cannot read odd number of bytes from UTF-16-LE encoded console" + ) + + buffer = get_buffer(b, writable=True) + code_units_to_be_read = bytes_to_be_read // 2 + code_units_read = c_ulong() + + rv = ReadConsoleW( + HANDLE(self.handle), + buffer, + code_units_to_be_read, + byref(code_units_read), + None, + ) + if GetLastError() == ERROR_OPERATION_ABORTED: + # wait for KeyboardInterrupt + time.sleep(0.1) + if not rv: + raise OSError(f"Windows error: {GetLastError()}") + + if buffer[0] == EOF: + return 0 + return 2 * code_units_read.value + + +class _WindowsConsoleWriter(_WindowsConsoleRawIOBase): + def writable(self): + return True + + @staticmethod + def _get_error_message(errno): + if errno == ERROR_SUCCESS: + return "ERROR_SUCCESS" + elif errno == ERROR_NOT_ENOUGH_MEMORY: + return "ERROR_NOT_ENOUGH_MEMORY" + return f"Windows error {errno}" + + def write(self, b): + bytes_to_be_written = len(b) + buf = get_buffer(b) + code_units_to_be_written = min(bytes_to_be_written, MAX_BYTES_WRITTEN) // 2 + code_units_written = c_ulong() + + WriteConsoleW( + HANDLE(self.handle), + buf, + code_units_to_be_written, + byref(code_units_written), + None, + ) + bytes_written = 2 * code_units_written.value + + if bytes_written == 0 and bytes_to_be_written > 0: + raise OSError(self._get_error_message(GetLastError())) + return bytes_written + + +class ConsoleStream: + def __init__(self, text_stream: t.TextIO, byte_stream: t.BinaryIO) -> None: + self._text_stream = text_stream + self.buffer = byte_stream + + @property + def name(self) -> str: + return self.buffer.name + + def write(self, x: t.AnyStr) -> int: + if isinstance(x, str): + return self._text_stream.write(x) + try: + self.flush() + except Exception: + pass + return self.buffer.write(x) + + def writelines(self, lines: t.Iterable[t.AnyStr]) -> None: + for line in lines: + self.write(line) + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._text_stream, name) + + def isatty(self) -> bool: + return self.buffer.isatty() + + def __repr__(self): + return f"" + + +def _get_text_stdin(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedReader(_WindowsConsoleReader(STDIN_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +def _get_text_stdout(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDOUT_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +def _get_text_stderr(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDERR_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +_stream_factories: t.Mapping[int, t.Callable[[t.BinaryIO], t.TextIO]] = { + 0: _get_text_stdin, + 1: _get_text_stdout, + 2: _get_text_stderr, +} + + +def _is_console(f: t.TextIO) -> bool: + if not hasattr(f, "fileno"): + return False + + try: + fileno = f.fileno() + except (OSError, io.UnsupportedOperation): + return False + + handle = msvcrt.get_osfhandle(fileno) + return bool(GetConsoleMode(handle, byref(DWORD()))) + + +def _get_windows_console_stream( + f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] +) -> t.Optional[t.TextIO]: + if ( + get_buffer is not None + and encoding in {"utf-16-le", None} + and errors in {"strict", None} + and _is_console(f) + ): + func = _stream_factories.get(f.fileno()) + if func is not None: + b = getattr(f, "buffer", None) + + if b is None: + return None + + return func(b) diff --git a/env/lib/python3.11/site-packages/click/core.py b/env/lib/python3.11/site-packages/click/core.py new file mode 100644 index 0000000..5abfb0f --- /dev/null +++ b/env/lib/python3.11/site-packages/click/core.py @@ -0,0 +1,2998 @@ +import enum +import errno +import inspect +import os +import sys +import typing as t +from collections import abc +from contextlib import contextmanager +from contextlib import ExitStack +from functools import partial +from functools import update_wrapper +from gettext import gettext as _ +from gettext import ngettext +from itertools import repeat + +from . import types +from .exceptions import Abort +from .exceptions import BadParameter +from .exceptions import ClickException +from .exceptions import Exit +from .exceptions import MissingParameter +from .exceptions import UsageError +from .formatting import HelpFormatter +from .formatting import join_options +from .globals import pop_context +from .globals import push_context +from .parser import _flag_needs_value +from .parser import OptionParser +from .parser import split_opt +from .termui import confirm +from .termui import prompt +from .termui import style +from .utils import _detect_program_name +from .utils import _expand_args +from .utils import echo +from .utils import make_default_short_help +from .utils import make_str +from .utils import PacifyFlushWrapper + +if t.TYPE_CHECKING: + import typing_extensions as te + from .shell_completion import CompletionItem + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +V = t.TypeVar("V") + + +def _complete_visible_commands( + ctx: "Context", incomplete: str +) -> t.Iterator[t.Tuple[str, "Command"]]: + """List all the subcommands of a group that start with the + incomplete value and aren't hidden. + + :param ctx: Invocation context for the group. + :param incomplete: Value being completed. May be empty. + """ + multi = t.cast(MultiCommand, ctx.command) + + for name in multi.list_commands(ctx): + if name.startswith(incomplete): + command = multi.get_command(ctx, name) + + if command is not None and not command.hidden: + yield name, command + + +def _check_multicommand( + base_command: "MultiCommand", cmd_name: str, cmd: "Command", register: bool = False +) -> None: + if not base_command.chain or not isinstance(cmd, MultiCommand): + return + if register: + hint = ( + "It is not possible to add multi commands as children to" + " another multi command that is in chain mode." + ) + else: + hint = ( + "Found a multi command as subcommand to a multi command" + " that is in chain mode. This is not supported." + ) + raise RuntimeError( + f"{hint}. Command {base_command.name!r} is set to chain and" + f" {cmd_name!r} was added as a subcommand but it in itself is a" + f" multi command. ({cmd_name!r} is a {type(cmd).__name__}" + f" within a chained {type(base_command).__name__} named" + f" {base_command.name!r})." + ) + + +def batch(iterable: t.Iterable[V], batch_size: int) -> t.List[t.Tuple[V, ...]]: + return list(zip(*repeat(iter(iterable), batch_size))) + + +@contextmanager +def augment_usage_errors( + ctx: "Context", param: t.Optional["Parameter"] = None +) -> t.Iterator[None]: + """Context manager that attaches extra information to exceptions.""" + try: + yield + except BadParameter as e: + if e.ctx is None: + e.ctx = ctx + if param is not None and e.param is None: + e.param = param + raise + except UsageError as e: + if e.ctx is None: + e.ctx = ctx + raise + + +def iter_params_for_processing( + invocation_order: t.Sequence["Parameter"], + declaration_order: t.Sequence["Parameter"], +) -> t.List["Parameter"]: + """Given a sequence of parameters in the order as should be considered + for processing and an iterable of parameters that exist, this returns + a list in the correct order as they should be processed. + """ + + def sort_key(item: "Parameter") -> t.Tuple[bool, float]: + try: + idx: float = invocation_order.index(item) + except ValueError: + idx = float("inf") + + return not item.is_eager, idx + + return sorted(declaration_order, key=sort_key) + + +class ParameterSource(enum.Enum): + """This is an :class:`~enum.Enum` that indicates the source of a + parameter's value. + + Use :meth:`click.Context.get_parameter_source` to get the + source for a parameter by name. + + .. versionchanged:: 8.0 + Use :class:`~enum.Enum` and drop the ``validate`` method. + + .. versionchanged:: 8.0 + Added the ``PROMPT`` value. + """ + + COMMANDLINE = enum.auto() + """The value was provided by the command line args.""" + ENVIRONMENT = enum.auto() + """The value was provided with an environment variable.""" + DEFAULT = enum.auto() + """Used the default specified by the parameter.""" + DEFAULT_MAP = enum.auto() + """Used a default provided by :attr:`Context.default_map`.""" + PROMPT = enum.auto() + """Used a prompt to confirm a default or provide a value.""" + + +class Context: + """The context is a special internal object that holds state relevant + for the script execution at every single level. It's normally invisible + to commands unless they opt-in to getting access to it. + + The context is useful as it can pass internal objects around and can + control special execution features such as reading data from + environment variables. + + A context can be used as context manager in which case it will call + :meth:`close` on teardown. + + :param command: the command class for this context. + :param parent: the parent context. + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it is usually + the name of the script, for commands below it it's + the name of the script. + :param obj: an arbitrary object of user data. + :param auto_envvar_prefix: the prefix to use for automatic environment + variables. If this is `None` then reading + from environment variables is disabled. This + does not affect manually set environment + variables which are always read. + :param default_map: a dictionary (like object) with default values + for parameters. + :param terminal_width: the width of the terminal. The default is + inherit from parent context. If no context + defines the terminal width then auto + detection will be applied. + :param max_content_width: the maximum width for content rendered by + Click (this currently only affects help + pages). This defaults to 80 characters if + not overridden. In other words: even if the + terminal is larger than that, Click will not + format things wider than 80 characters by + default. In addition to that, formatters might + add some safety mapping on the right. + :param resilient_parsing: if this flag is enabled then Click will + parse without any interactivity or callback + invocation. Default values will also be + ignored. This is useful for implementing + things such as completion support. + :param allow_extra_args: if this is set to `True` then extra arguments + at the end will not raise an error and will be + kept on the context. The default is to inherit + from the command. + :param allow_interspersed_args: if this is set to `False` then options + and arguments cannot be mixed. The + default is to inherit from the command. + :param ignore_unknown_options: instructs click to ignore options it does + not know and keeps them for later + processing. + :param help_option_names: optionally a list of strings that define how + the default help parameter is named. The + default is ``['--help']``. + :param token_normalize_func: an optional function that is used to + normalize tokens (options, choices, + etc.). This for instance can be used to + implement case insensitive behavior. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are used in texts that Click prints which is by + default not the case. This for instance would affect + help output. + :param show_default: Show the default value for commands. If this + value is not set, it defaults to the value from the parent + context. ``Command.show_default`` overrides this default for the + specific command. + + .. versionchanged:: 8.1 + The ``show_default`` parameter is overridden by + ``Command.show_default``, instead of the other way around. + + .. versionchanged:: 8.0 + The ``show_default`` parameter defaults to the value from the + parent context. + + .. versionchanged:: 7.1 + Added the ``show_default`` parameter. + + .. versionchanged:: 4.0 + Added the ``color``, ``ignore_unknown_options``, and + ``max_content_width`` parameters. + + .. versionchanged:: 3.0 + Added the ``allow_extra_args`` and ``allow_interspersed_args`` + parameters. + + .. versionchanged:: 2.0 + Added the ``resilient_parsing``, ``help_option_names``, and + ``token_normalize_func`` parameters. + """ + + #: The formatter class to create with :meth:`make_formatter`. + #: + #: .. versionadded:: 8.0 + formatter_class: t.Type["HelpFormatter"] = HelpFormatter + + def __init__( + self, + command: "Command", + parent: t.Optional["Context"] = None, + info_name: t.Optional[str] = None, + obj: t.Optional[t.Any] = None, + auto_envvar_prefix: t.Optional[str] = None, + default_map: t.Optional[t.Dict[str, t.Any]] = None, + terminal_width: t.Optional[int] = None, + max_content_width: t.Optional[int] = None, + resilient_parsing: bool = False, + allow_extra_args: t.Optional[bool] = None, + allow_interspersed_args: t.Optional[bool] = None, + ignore_unknown_options: t.Optional[bool] = None, + help_option_names: t.Optional[t.List[str]] = None, + token_normalize_func: t.Optional[t.Callable[[str], str]] = None, + color: t.Optional[bool] = None, + show_default: t.Optional[bool] = None, + ) -> None: + #: the parent context or `None` if none exists. + self.parent = parent + #: the :class:`Command` for this context. + self.command = command + #: the descriptive information name + self.info_name = info_name + #: Map of parameter names to their parsed values. Parameters + #: with ``expose_value=False`` are not stored. + self.params: t.Dict[str, t.Any] = {} + #: the leftover arguments. + self.args: t.List[str] = [] + #: protected arguments. These are arguments that are prepended + #: to `args` when certain parsing scenarios are encountered but + #: must be never propagated to another arguments. This is used + #: to implement nested parsing. + self.protected_args: t.List[str] = [] + #: the collected prefixes of the command's options. + self._opt_prefixes: t.Set[str] = set(parent._opt_prefixes) if parent else set() + + if obj is None and parent is not None: + obj = parent.obj + + #: the user object stored. + self.obj: t.Any = obj + self._meta: t.Dict[str, t.Any] = getattr(parent, "meta", {}) + + #: A dictionary (-like object) with defaults for parameters. + if ( + default_map is None + and info_name is not None + and parent is not None + and parent.default_map is not None + ): + default_map = parent.default_map.get(info_name) + + self.default_map: t.Optional[t.Dict[str, t.Any]] = default_map + + #: This flag indicates if a subcommand is going to be executed. A + #: group callback can use this information to figure out if it's + #: being executed directly or because the execution flow passes + #: onwards to a subcommand. By default it's None, but it can be + #: the name of the subcommand to execute. + #: + #: If chaining is enabled this will be set to ``'*'`` in case + #: any commands are executed. It is however not possible to + #: figure out which ones. If you require this knowledge you + #: should use a :func:`result_callback`. + self.invoked_subcommand: t.Optional[str] = None + + if terminal_width is None and parent is not None: + terminal_width = parent.terminal_width + + #: The width of the terminal (None is autodetection). + self.terminal_width: t.Optional[int] = terminal_width + + if max_content_width is None and parent is not None: + max_content_width = parent.max_content_width + + #: The maximum width of formatted content (None implies a sensible + #: default which is 80 for most things). + self.max_content_width: t.Optional[int] = max_content_width + + if allow_extra_args is None: + allow_extra_args = command.allow_extra_args + + #: Indicates if the context allows extra args or if it should + #: fail on parsing. + #: + #: .. versionadded:: 3.0 + self.allow_extra_args = allow_extra_args + + if allow_interspersed_args is None: + allow_interspersed_args = command.allow_interspersed_args + + #: Indicates if the context allows mixing of arguments and + #: options or not. + #: + #: .. versionadded:: 3.0 + self.allow_interspersed_args: bool = allow_interspersed_args + + if ignore_unknown_options is None: + ignore_unknown_options = command.ignore_unknown_options + + #: Instructs click to ignore options that a command does not + #: understand and will store it on the context for later + #: processing. This is primarily useful for situations where you + #: want to call into external programs. Generally this pattern is + #: strongly discouraged because it's not possibly to losslessly + #: forward all arguments. + #: + #: .. versionadded:: 4.0 + self.ignore_unknown_options: bool = ignore_unknown_options + + if help_option_names is None: + if parent is not None: + help_option_names = parent.help_option_names + else: + help_option_names = ["--help"] + + #: The names for the help options. + self.help_option_names: t.List[str] = help_option_names + + if token_normalize_func is None and parent is not None: + token_normalize_func = parent.token_normalize_func + + #: An optional normalization function for tokens. This is + #: options, choices, commands etc. + self.token_normalize_func: t.Optional[ + t.Callable[[str], str] + ] = token_normalize_func + + #: Indicates if resilient parsing is enabled. In that case Click + #: will do its best to not cause any failures and default values + #: will be ignored. Useful for completion. + self.resilient_parsing: bool = resilient_parsing + + # If there is no envvar prefix yet, but the parent has one and + # the command on this level has a name, we can expand the envvar + # prefix automatically. + if auto_envvar_prefix is None: + if ( + parent is not None + and parent.auto_envvar_prefix is not None + and self.info_name is not None + ): + auto_envvar_prefix = ( + f"{parent.auto_envvar_prefix}_{self.info_name.upper()}" + ) + else: + auto_envvar_prefix = auto_envvar_prefix.upper() + + if auto_envvar_prefix is not None: + auto_envvar_prefix = auto_envvar_prefix.replace("-", "_") + + self.auto_envvar_prefix: t.Optional[str] = auto_envvar_prefix + + if color is None and parent is not None: + color = parent.color + + #: Controls if styling output is wanted or not. + self.color: t.Optional[bool] = color + + if show_default is None and parent is not None: + show_default = parent.show_default + + #: Show option default values when formatting help text. + self.show_default: t.Optional[bool] = show_default + + self._close_callbacks: t.List[t.Callable[[], t.Any]] = [] + self._depth = 0 + self._parameter_source: t.Dict[str, ParameterSource] = {} + self._exit_stack = ExitStack() + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire CLI + structure. + + .. code-block:: python + + with Context(cli) as ctx: + info = ctx.to_info_dict() + + .. versionadded:: 8.0 + """ + return { + "command": self.command.to_info_dict(self), + "info_name": self.info_name, + "allow_extra_args": self.allow_extra_args, + "allow_interspersed_args": self.allow_interspersed_args, + "ignore_unknown_options": self.ignore_unknown_options, + "auto_envvar_prefix": self.auto_envvar_prefix, + } + + def __enter__(self) -> "Context": + self._depth += 1 + push_context(self) + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self._depth -= 1 + if self._depth == 0: + self.close() + pop_context() + + @contextmanager + def scope(self, cleanup: bool = True) -> t.Iterator["Context"]: + """This helper method can be used with the context object to promote + it to the current thread local (see :func:`get_current_context`). + The default behavior of this is to invoke the cleanup functions which + can be disabled by setting `cleanup` to `False`. The cleanup + functions are typically used for things such as closing file handles. + + If the cleanup is intended the context object can also be directly + used as a context manager. + + Example usage:: + + with ctx.scope(): + assert get_current_context() is ctx + + This is equivalent:: + + with ctx: + assert get_current_context() is ctx + + .. versionadded:: 5.0 + + :param cleanup: controls if the cleanup functions should be run or + not. The default is to run these functions. In + some situations the context only wants to be + temporarily pushed in which case this can be disabled. + Nested pushes automatically defer the cleanup. + """ + if not cleanup: + self._depth += 1 + try: + with self as rv: + yield rv + finally: + if not cleanup: + self._depth -= 1 + + @property + def meta(self) -> t.Dict[str, t.Any]: + """This is a dictionary which is shared with all the contexts + that are nested. It exists so that click utilities can store some + state here if they need to. It is however the responsibility of + that code to manage this dictionary well. + + The keys are supposed to be unique dotted strings. For instance + module paths are a good choice for it. What is stored in there is + irrelevant for the operation of click. However what is important is + that code that places data here adheres to the general semantics of + the system. + + Example usage:: + + LANG_KEY = f'{__name__}.lang' + + def set_language(value): + ctx = get_current_context() + ctx.meta[LANG_KEY] = value + + def get_language(): + return get_current_context().meta.get(LANG_KEY, 'en_US') + + .. versionadded:: 5.0 + """ + return self._meta + + def make_formatter(self) -> HelpFormatter: + """Creates the :class:`~click.HelpFormatter` for the help and + usage output. + + To quickly customize the formatter class used without overriding + this method, set the :attr:`formatter_class` attribute. + + .. versionchanged:: 8.0 + Added the :attr:`formatter_class` attribute. + """ + return self.formatter_class( + width=self.terminal_width, max_width=self.max_content_width + ) + + def with_resource(self, context_manager: t.ContextManager[V]) -> V: + """Register a resource as if it were used in a ``with`` + statement. The resource will be cleaned up when the context is + popped. + + Uses :meth:`contextlib.ExitStack.enter_context`. It calls the + resource's ``__enter__()`` method and returns the result. When + the context is popped, it closes the stack, which calls the + resource's ``__exit__()`` method. + + To register a cleanup function for something that isn't a + context manager, use :meth:`call_on_close`. Or use something + from :mod:`contextlib` to turn it into a context manager first. + + .. code-block:: python + + @click.group() + @click.option("--name") + @click.pass_context + def cli(ctx): + ctx.obj = ctx.with_resource(connect_db(name)) + + :param context_manager: The context manager to enter. + :return: Whatever ``context_manager.__enter__()`` returns. + + .. versionadded:: 8.0 + """ + return self._exit_stack.enter_context(context_manager) + + def call_on_close(self, f: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]: + """Register a function to be called when the context tears down. + + This can be used to close resources opened during the script + execution. Resources that support Python's context manager + protocol which would be used in a ``with`` statement should be + registered with :meth:`with_resource` instead. + + :param f: The function to execute on teardown. + """ + return self._exit_stack.callback(f) + + def close(self) -> None: + """Invoke all close callbacks registered with + :meth:`call_on_close`, and exit all context managers entered + with :meth:`with_resource`. + """ + self._exit_stack.close() + # In case the context is reused, create a new exit stack. + self._exit_stack = ExitStack() + + @property + def command_path(self) -> str: + """The computed command path. This is used for the ``usage`` + information on the help page. It's automatically created by + combining the info names of the chain of contexts to the root. + """ + rv = "" + if self.info_name is not None: + rv = self.info_name + if self.parent is not None: + parent_command_path = [self.parent.command_path] + + if isinstance(self.parent.command, Command): + for param in self.parent.command.get_params(self): + parent_command_path.extend(param.get_usage_pieces(self)) + + rv = f"{' '.join(parent_command_path)} {rv}" + return rv.lstrip() + + def find_root(self) -> "Context": + """Finds the outermost context.""" + node = self + while node.parent is not None: + node = node.parent + return node + + def find_object(self, object_type: t.Type[V]) -> t.Optional[V]: + """Finds the closest object of a given type.""" + node: t.Optional["Context"] = self + + while node is not None: + if isinstance(node.obj, object_type): + return node.obj + + node = node.parent + + return None + + def ensure_object(self, object_type: t.Type[V]) -> V: + """Like :meth:`find_object` but sets the innermost object to a + new instance of `object_type` if it does not exist. + """ + rv = self.find_object(object_type) + if rv is None: + self.obj = rv = object_type() + return rv + + @t.overload + def lookup_default( + self, name: str, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def lookup_default( + self, name: str, call: "te.Literal[False]" = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def lookup_default(self, name: str, call: bool = True) -> t.Optional[t.Any]: + """Get the default for a parameter from :attr:`default_map`. + + :param name: Name of the parameter. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + if self.default_map is not None: + value = self.default_map.get(name) + + if call and callable(value): + return value() + + return value + + return None + + def fail(self, message: str) -> "te.NoReturn": + """Aborts the execution of the program with a specific error + message. + + :param message: the error message to fail with. + """ + raise UsageError(message, self) + + def abort(self) -> "te.NoReturn": + """Aborts the script.""" + raise Abort() + + def exit(self, code: int = 0) -> "te.NoReturn": + """Exits the application with a given exit code.""" + raise Exit(code) + + def get_usage(self) -> str: + """Helper method to get formatted usage string for the current + context and command. + """ + return self.command.get_usage(self) + + def get_help(self) -> str: + """Helper method to get formatted help page for the current + context and command. + """ + return self.command.get_help(self) + + def _make_sub_context(self, command: "Command") -> "Context": + """Create a new context of the same type as this context, but + for a new command. + + :meta private: + """ + return type(self)(command, info_name=command.name, parent=self) + + def invoke( + __self, # noqa: B902 + __callback: t.Union["Command", t.Callable[..., t.Any]], + *args: t.Any, + **kwargs: t.Any, + ) -> t.Any: + """Invokes a command callback in exactly the way it expects. There + are two ways to invoke this method: + + 1. the first argument can be a callback and all other arguments and + keyword arguments are forwarded directly to the function. + 2. the first argument is a click command object. In that case all + arguments are forwarded as well but proper click parameters + (options and click arguments) must be keyword arguments and Click + will fill in defaults. + + Note that before Click 3.2 keyword arguments were not properly filled + in against the intention of this code and no context was created. For + more information about this change and why it was done in a bugfix + release see :ref:`upgrade-to-3.2`. + + .. versionchanged:: 8.0 + All ``kwargs`` are tracked in :attr:`params` so they will be + passed if :meth:`forward` is called at multiple levels. + """ + if isinstance(__callback, Command): + other_cmd = __callback + + if other_cmd.callback is None: + raise TypeError( + "The given command does not have a callback that can be invoked." + ) + else: + __callback = other_cmd.callback + + ctx = __self._make_sub_context(other_cmd) + + for param in other_cmd.params: + if param.name not in kwargs and param.expose_value: + kwargs[param.name] = param.type_cast_value( # type: ignore + ctx, param.get_default(ctx) + ) + + # Track all kwargs as params, so that forward() will pass + # them on in subsequent calls. + ctx.params.update(kwargs) + else: + ctx = __self + + with augment_usage_errors(__self): + with ctx: + return __callback(*args, **kwargs) + + def forward( + __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any # noqa: B902 + ) -> t.Any: + """Similar to :meth:`invoke` but fills in default keyword + arguments from the current context if the other command expects + it. This cannot invoke callbacks directly, only other commands. + + .. versionchanged:: 8.0 + All ``kwargs`` are tracked in :attr:`params` so they will be + passed if ``forward`` is called at multiple levels. + """ + # Can only forward to other commands, not direct callbacks. + if not isinstance(__cmd, Command): + raise TypeError("Callback is not a command.") + + for param in __self.params: + if param not in kwargs: + kwargs[param] = __self.params[param] + + return __self.invoke(__cmd, *args, **kwargs) + + def set_parameter_source(self, name: str, source: ParameterSource) -> None: + """Set the source of a parameter. This indicates the location + from which the value of the parameter was obtained. + + :param name: The name of the parameter. + :param source: A member of :class:`~click.core.ParameterSource`. + """ + self._parameter_source[name] = source + + def get_parameter_source(self, name: str) -> t.Optional[ParameterSource]: + """Get the source of a parameter. This indicates the location + from which the value of the parameter was obtained. + + This can be useful for determining when a user specified a value + on the command line that is the same as the default value. It + will be :attr:`~click.core.ParameterSource.DEFAULT` only if the + value was actually taken from the default. + + :param name: The name of the parameter. + :rtype: ParameterSource + + .. versionchanged:: 8.0 + Returns ``None`` if the parameter was not provided from any + source. + """ + return self._parameter_source.get(name) + + +class BaseCommand: + """The base command implements the minimal API contract of commands. + Most code will never use this as it does not implement a lot of useful + functionality but it can act as the direct subclass of alternative + parsing methods that do not depend on the Click parser. + + For instance, this can be used to bridge Click and other systems like + argparse or docopt. + + Because base commands do not implement a lot of the API that other + parts of Click take for granted, they are not supported for all + operations. For instance, they cannot be used with the decorators + usually and they have no built-in callback system. + + .. versionchanged:: 2.0 + Added the `context_settings` parameter. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + """ + + #: The context class to create with :meth:`make_context`. + #: + #: .. versionadded:: 8.0 + context_class: t.Type[Context] = Context + #: the default for the :attr:`Context.allow_extra_args` flag. + allow_extra_args = False + #: the default for the :attr:`Context.allow_interspersed_args` flag. + allow_interspersed_args = True + #: the default for the :attr:`Context.ignore_unknown_options` flag. + ignore_unknown_options = False + + def __init__( + self, + name: t.Optional[str], + context_settings: t.Optional[t.Dict[str, t.Any]] = None, + ) -> None: + #: the name the command thinks it has. Upon registering a command + #: on a :class:`Group` the group will default the command name + #: with this information. You should instead use the + #: :class:`Context`\'s :attr:`~Context.info_name` attribute. + self.name = name + + if context_settings is None: + context_settings = {} + + #: an optional dictionary with defaults passed to the context. + self.context_settings: t.Dict[str, t.Any] = context_settings + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire structure + below this command. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + :param ctx: A :class:`Context` representing this command. + + .. versionadded:: 8.0 + """ + return {"name": self.name} + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.name}>" + + def get_usage(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get usage") + + def get_help(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get help") + + def make_context( + self, + info_name: t.Optional[str], + args: t.List[str], + parent: t.Optional[Context] = None, + **extra: t.Any, + ) -> Context: + """This function when given an info name and arguments will kick + off the parsing and create a new :class:`Context`. It does not + invoke the actual command callback though. + + To quickly customize the context class used without overriding + this method, set the :attr:`context_class` attribute. + + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it's usually + the name of the script, for commands below it it's + the name of the command. + :param args: the arguments to parse as list of strings. + :param parent: the parent context if available. + :param extra: extra keyword arguments forwarded to the context + constructor. + + .. versionchanged:: 8.0 + Added the :attr:`context_class` attribute. + """ + for key, value in self.context_settings.items(): + if key not in extra: + extra[key] = value + + ctx = self.context_class( + self, info_name=info_name, parent=parent, **extra # type: ignore + ) + + with ctx.scope(cleanup=False): + self.parse_args(ctx, args) + return ctx + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + """Given a context and a list of arguments this creates the parser + and parses the arguments, then modifies the context as necessary. + This is automatically invoked by :meth:`make_context`. + """ + raise NotImplementedError("Base commands do not know how to parse arguments.") + + def invoke(self, ctx: Context) -> t.Any: + """Given a context, this invokes the command. The default + implementation is raising a not implemented error. + """ + raise NotImplementedError("Base commands are not invokable by default") + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of chained multi-commands. + + Any command could be part of a chained multi-command, so sibling + commands are valid at any point during command completion. Other + command classes will return more completions. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + while ctx.parent is not None: + ctx = ctx.parent + + if isinstance(ctx.command, MultiCommand) and ctx.command.chain: + results.extend( + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + if name not in ctx.protected_args + ) + + return results + + @t.overload + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: "te.Literal[True]" = True, + **extra: t.Any, + ) -> "te.NoReturn": + ... + + @t.overload + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: bool = ..., + **extra: t.Any, + ) -> t.Any: + ... + + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: bool = True, + windows_expand_args: bool = True, + **extra: t.Any, + ) -> t.Any: + """This is the way to invoke a script with all the bells and + whistles as a command line application. This will always terminate + the application after a call. If this is not wanted, ``SystemExit`` + needs to be caught. + + This method is also available by directly calling the instance of + a :class:`Command`. + + :param args: the arguments that should be used for parsing. If not + provided, ``sys.argv[1:]`` is used. + :param prog_name: the program name that should be used. By default + the program name is constructed by taking the file + name from ``sys.argv[0]``. + :param complete_var: the environment variable that controls the + bash completion support. The default is + ``"__COMPLETE"`` with prog_name in + uppercase. + :param standalone_mode: the default behavior is to invoke the script + in standalone mode. Click will then + handle exceptions and convert them into + error messages and the function will never + return but shut down the interpreter. If + this is set to `False` they will be + propagated to the caller and the return + value of this function is the return value + of :meth:`invoke`. + :param windows_expand_args: Expand glob patterns, user dir, and + env vars in command line args on Windows. + :param extra: extra keyword arguments are forwarded to the context + constructor. See :class:`Context` for more information. + + .. versionchanged:: 8.0.1 + Added the ``windows_expand_args`` parameter to allow + disabling command line arg expansion on Windows. + + .. versionchanged:: 8.0 + When taking arguments from ``sys.argv`` on Windows, glob + patterns, user dir, and env vars are expanded. + + .. versionchanged:: 3.0 + Added the ``standalone_mode`` parameter. + """ + if args is None: + args = sys.argv[1:] + + if os.name == "nt" and windows_expand_args: + args = _expand_args(args) + else: + args = list(args) + + if prog_name is None: + prog_name = _detect_program_name() + + # Process shell completion requests and exit early. + self._main_shell_completion(extra, prog_name, complete_var) + + try: + try: + with self.make_context(prog_name, args, **extra) as ctx: + rv = self.invoke(ctx) + if not standalone_mode: + return rv + # it's not safe to `ctx.exit(rv)` here! + # note that `rv` may actually contain data like "1" which + # has obvious effects + # more subtle case: `rv=[None, None]` can come out of + # chained commands which all returned `None` -- so it's not + # even always obvious that `rv` indicates success/failure + # by its truthiness/falsiness + ctx.exit() + except (EOFError, KeyboardInterrupt): + echo(file=sys.stderr) + raise Abort() from None + except ClickException as e: + if not standalone_mode: + raise + e.show() + sys.exit(e.exit_code) + except OSError as e: + if e.errno == errno.EPIPE: + sys.stdout = t.cast(t.TextIO, PacifyFlushWrapper(sys.stdout)) + sys.stderr = t.cast(t.TextIO, PacifyFlushWrapper(sys.stderr)) + sys.exit(1) + else: + raise + except Exit as e: + if standalone_mode: + sys.exit(e.exit_code) + else: + # in non-standalone mode, return the exit code + # note that this is only reached if `self.invoke` above raises + # an Exit explicitly -- thus bypassing the check there which + # would return its result + # the results of non-standalone execution may therefore be + # somewhat ambiguous: if there are codepaths which lead to + # `ctx.exit(1)` and to `return 1`, the caller won't be able to + # tell the difference between the two + return e.exit_code + except Abort: + if not standalone_mode: + raise + echo(_("Aborted!"), file=sys.stderr) + sys.exit(1) + + def _main_shell_completion( + self, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: t.Optional[str] = None, + ) -> None: + """Check if the shell is asking for tab completion, process + that, then exit early. Called from :meth:`main` before the + program is invoked. + + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. Defaults to + ``_{PROG_NAME}_COMPLETE``. + """ + if complete_var is None: + complete_var = f"_{prog_name}_COMPLETE".replace("-", "_").upper() + + instruction = os.environ.get(complete_var) + + if not instruction: + return + + from .shell_completion import shell_complete + + rv = shell_complete(self, ctx_args, prog_name, complete_var, instruction) + sys.exit(rv) + + def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + """Alias for :meth:`main`.""" + return self.main(*args, **kwargs) + + +class Command(BaseCommand): + """Commands are the basic building block of command line interfaces in + Click. A basic command handles command line parsing and might dispatch + more parsing to commands nested below it. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + :param callback: the callback to invoke. This is optional. + :param params: the parameters to register with this command. This can + be either :class:`Option` or :class:`Argument` objects. + :param help: the help string to use for this command. + :param epilog: like the help string but it's printed at the end of the + help page after everything else. + :param short_help: the short help to use for this command. This is + shown on the command listing of the parent command. + :param add_help_option: by default each command registers a ``--help`` + option. This can be disabled by this parameter. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is disabled by default. + If enabled this will add ``--help`` as argument + if no arguments are passed + :param hidden: hide this command from help outputs. + + :param deprecated: issues a message indicating that + the command is deprecated. + + .. versionchanged:: 8.1 + ``help``, ``epilog``, and ``short_help`` are stored unprocessed, + all formatting is done when outputting help text, not at init, + and is done even if not using the ``@command`` decorator. + + .. versionchanged:: 8.0 + Added a ``repr`` showing the command name. + + .. versionchanged:: 7.1 + Added the ``no_args_is_help`` parameter. + + .. versionchanged:: 2.0 + Added the ``context_settings`` parameter. + """ + + def __init__( + self, + name: t.Optional[str], + context_settings: t.Optional[t.Dict[str, t.Any]] = None, + callback: t.Optional[t.Callable[..., t.Any]] = None, + params: t.Optional[t.List["Parameter"]] = None, + help: t.Optional[str] = None, + epilog: t.Optional[str] = None, + short_help: t.Optional[str] = None, + options_metavar: t.Optional[str] = "[OPTIONS]", + add_help_option: bool = True, + no_args_is_help: bool = False, + hidden: bool = False, + deprecated: bool = False, + ) -> None: + super().__init__(name, context_settings) + #: the callback to execute when the command fires. This might be + #: `None` in which case nothing happens. + self.callback = callback + #: the list of parameters for this command in the order they + #: should show up in the help page and execute. Eager parameters + #: will automatically be handled before non eager ones. + self.params: t.List["Parameter"] = params or [] + self.help = help + self.epilog = epilog + self.options_metavar = options_metavar + self.short_help = short_help + self.add_help_option = add_help_option + self.no_args_is_help = no_args_is_help + self.hidden = hidden + self.deprecated = deprecated + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + info_dict.update( + params=[param.to_info_dict() for param in self.get_params(ctx)], + help=self.help, + epilog=self.epilog, + short_help=self.short_help, + hidden=self.hidden, + deprecated=self.deprecated, + ) + return info_dict + + def get_usage(self, ctx: Context) -> str: + """Formats the usage line into a string and returns it. + + Calls :meth:`format_usage` internally. + """ + formatter = ctx.make_formatter() + self.format_usage(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_params(self, ctx: Context) -> t.List["Parameter"]: + rv = self.params + help_option = self.get_help_option(ctx) + + if help_option is not None: + rv = [*rv, help_option] + + return rv + + def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the usage line into the formatter. + + This is a low-level method called by :meth:`get_usage`. + """ + pieces = self.collect_usage_pieces(ctx) + formatter.write_usage(ctx.command_path, " ".join(pieces)) + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + """Returns all the pieces that go into the usage line and returns + it as a list of strings. + """ + rv = [self.options_metavar] if self.options_metavar else [] + + for param in self.get_params(ctx): + rv.extend(param.get_usage_pieces(ctx)) + + return rv + + def get_help_option_names(self, ctx: Context) -> t.List[str]: + """Returns the names for the help option.""" + all_names = set(ctx.help_option_names) + for param in self.params: + all_names.difference_update(param.opts) + all_names.difference_update(param.secondary_opts) + return list(all_names) + + def get_help_option(self, ctx: Context) -> t.Optional["Option"]: + """Returns the help option object.""" + help_options = self.get_help_option_names(ctx) + + if not help_options or not self.add_help_option: + return None + + def show_help(ctx: Context, param: "Parameter", value: str) -> None: + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + return Option( + help_options, + is_flag=True, + is_eager=True, + expose_value=False, + callback=show_help, + help=_("Show this message and exit."), + ) + + def make_parser(self, ctx: Context) -> OptionParser: + """Creates the underlying option parser for this command.""" + parser = OptionParser(ctx) + for param in self.get_params(ctx): + param.add_to_parser(parser, ctx) + return parser + + def get_help(self, ctx: Context) -> str: + """Formats the help into a string and returns it. + + Calls :meth:`format_help` internally. + """ + formatter = ctx.make_formatter() + self.format_help(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_short_help_str(self, limit: int = 45) -> str: + """Gets short help for the command or makes it by shortening the + long help string. + """ + if self.short_help: + text = inspect.cleandoc(self.short_help) + elif self.help: + text = make_default_short_help(self.help, limit) + else: + text = "" + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + return text.strip() + + def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help into the formatter if it exists. + + This is a low-level method called by :meth:`get_help`. + + This calls the following methods: + + - :meth:`format_usage` + - :meth:`format_help_text` + - :meth:`format_options` + - :meth:`format_epilog` + """ + self.format_usage(ctx, formatter) + self.format_help_text(ctx, formatter) + self.format_options(ctx, formatter) + self.format_epilog(ctx, formatter) + + def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help text to the formatter if it exists.""" + text = self.help if self.help is not None else "" + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + if text: + text = inspect.cleandoc(text).partition("\f")[0] + formatter.write_paragraph() + + with formatter.indentation(): + formatter.write_text(text) + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes all the options into the formatter if they exist.""" + opts = [] + for param in self.get_params(ctx): + rv = param.get_help_record(ctx) + if rv is not None: + opts.append(rv) + + if opts: + with formatter.section(_("Options")): + formatter.write_dl(opts) + + def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the epilog into the formatter if it exists.""" + if self.epilog: + epilog = inspect.cleandoc(self.epilog) + formatter.write_paragraph() + + with formatter.indentation(): + formatter.write_text(epilog) + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + if not args and self.no_args_is_help and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + parser = self.make_parser(ctx) + opts, args, param_order = parser.parse_args(args=args) + + for param in iter_params_for_processing(param_order, self.get_params(ctx)): + value, args = param.handle_parse_result(ctx, opts, args) + + if args and not ctx.allow_extra_args and not ctx.resilient_parsing: + ctx.fail( + ngettext( + "Got unexpected extra argument ({args})", + "Got unexpected extra arguments ({args})", + len(args), + ).format(args=" ".join(map(str, args))) + ) + + ctx.args = args + ctx._opt_prefixes.update(parser._opt_prefixes) + return args + + def invoke(self, ctx: Context) -> t.Any: + """Given a context, this invokes the attached callback (if it exists) + in the right way. + """ + if self.deprecated: + message = _( + "DeprecationWarning: The command {name!r} is deprecated." + ).format(name=self.name) + echo(style(message, fg="red"), err=True) + + if self.callback is not None: + return ctx.invoke(self.callback, **ctx.params) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options and chained multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + if incomplete and not incomplete[0].isalnum(): + for param in self.get_params(ctx): + if ( + not isinstance(param, Option) + or param.hidden + or ( + not param.multiple + and ctx.get_parameter_source(param.name) # type: ignore + is ParameterSource.COMMANDLINE + ) + ): + continue + + results.extend( + CompletionItem(name, help=param.help) + for name in [*param.opts, *param.secondary_opts] + if name.startswith(incomplete) + ) + + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class MultiCommand(Command): + """A multi command is the basic implementation of a command that + dispatches to subcommands. The most common version is the + :class:`Group`. + + :param invoke_without_command: this controls how the multi command itself + is invoked. By default it's only invoked + if a subcommand is provided. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is enabled by default if + `invoke_without_command` is disabled or disabled + if it's enabled. If enabled this will add + ``--help`` as argument if no arguments are + passed. + :param subcommand_metavar: the string that is used in the documentation + to indicate the subcommand place. + :param chain: if this is set to `True` chaining of multiple subcommands + is enabled. This restricts the form of commands in that + they cannot have optional arguments but it allows + multiple commands to be chained together. + :param result_callback: The result callback to attach to this multi + command. This can be set or changed later with the + :meth:`result_callback` decorator. + """ + + allow_extra_args = True + allow_interspersed_args = False + + def __init__( + self, + name: t.Optional[str] = None, + invoke_without_command: bool = False, + no_args_is_help: t.Optional[bool] = None, + subcommand_metavar: t.Optional[str] = None, + chain: bool = False, + result_callback: t.Optional[t.Callable[..., t.Any]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if no_args_is_help is None: + no_args_is_help = not invoke_without_command + + self.no_args_is_help = no_args_is_help + self.invoke_without_command = invoke_without_command + + if subcommand_metavar is None: + if chain: + subcommand_metavar = "COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]..." + else: + subcommand_metavar = "COMMAND [ARGS]..." + + self.subcommand_metavar = subcommand_metavar + self.chain = chain + # The result callback that is stored. This can be set or + # overridden with the :func:`result_callback` decorator. + self._result_callback = result_callback + + if self.chain: + for param in self.params: + if isinstance(param, Argument) and not param.required: + raise RuntimeError( + "Multi commands in chain mode cannot have" + " optional arguments." + ) + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + commands = {} + + for name in self.list_commands(ctx): + command = self.get_command(ctx, name) + + if command is None: + continue + + sub_ctx = ctx._make_sub_context(command) + + with sub_ctx.scope(cleanup=False): + commands[name] = command.to_info_dict(sub_ctx) + + info_dict.update(commands=commands, chain=self.chain) + return info_dict + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + rv = super().collect_usage_pieces(ctx) + rv.append(self.subcommand_metavar) + return rv + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + super().format_options(ctx, formatter) + self.format_commands(ctx, formatter) + + def result_callback(self, replace: bool = False) -> t.Callable[[F], F]: + """Adds a result callback to the command. By default if a + result callback is already registered this will chain them but + this can be disabled with the `replace` parameter. The result + callback is invoked with the return value of the subcommand + (or the list of return values from all subcommands if chaining + is enabled) as well as the parameters as they would be passed + to the main callback. + + Example:: + + @click.group() + @click.option('-i', '--input', default=23) + def cli(input): + return 42 + + @cli.result_callback() + def process_result(result, input): + return result + input + + :param replace: if set to `True` an already existing result + callback will be removed. + + .. versionchanged:: 8.0 + Renamed from ``resultcallback``. + + .. versionadded:: 3.0 + """ + + def decorator(f: F) -> F: + old_callback = self._result_callback + + if old_callback is None or replace: + self._result_callback = f + return f + + def function(__value, *args, **kwargs): # type: ignore + inner = old_callback(__value, *args, **kwargs) # type: ignore + return f(inner, *args, **kwargs) + + self._result_callback = rv = update_wrapper(t.cast(F, function), f) + return rv + + return decorator + + def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None: + """Extra format methods for multi methods that adds all the commands + after the options. + """ + commands = [] + for subcommand in self.list_commands(ctx): + cmd = self.get_command(ctx, subcommand) + # What is this, the tool lied about a command. Ignore it + if cmd is None: + continue + if cmd.hidden: + continue + + commands.append((subcommand, cmd)) + + # allow for 3 times the default spacing + if len(commands): + limit = formatter.width - 6 - max(len(cmd[0]) for cmd in commands) + + rows = [] + for subcommand, cmd in commands: + help = cmd.get_short_help_str(limit) + rows.append((subcommand, help)) + + if rows: + with formatter.section(_("Commands")): + formatter.write_dl(rows) + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + if not args and self.no_args_is_help and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + rest = super().parse_args(ctx, args) + + if self.chain: + ctx.protected_args = rest + ctx.args = [] + elif rest: + ctx.protected_args, ctx.args = rest[:1], rest[1:] + + return ctx.args + + def invoke(self, ctx: Context) -> t.Any: + def _process_result(value: t.Any) -> t.Any: + if self._result_callback is not None: + value = ctx.invoke(self._result_callback, value, **ctx.params) + return value + + if not ctx.protected_args: + if self.invoke_without_command: + # No subcommand was invoked, so the result callback is + # invoked with the group return value for regular + # groups, or an empty list for chained groups. + with ctx: + rv = super().invoke(ctx) + return _process_result([] if self.chain else rv) + ctx.fail(_("Missing command.")) + + # Fetch args back out + args = [*ctx.protected_args, *ctx.args] + ctx.args = [] + ctx.protected_args = [] + + # If we're not in chain mode, we only allow the invocation of a + # single command but we also inform the current context about the + # name of the command to invoke. + if not self.chain: + # Make sure the context is entered so we do not clean up + # resources until the result processor has worked. + with ctx: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + ctx.invoked_subcommand = cmd_name + super().invoke(ctx) + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) + with sub_ctx: + return _process_result(sub_ctx.command.invoke(sub_ctx)) + + # In chain mode we create the contexts step by step, but after the + # base command has been invoked. Because at that point we do not + # know the subcommands yet, the invoked subcommand attribute is + # set to ``*`` to inform the command that subcommands are executed + # but nothing else. + with ctx: + ctx.invoked_subcommand = "*" if args else None + super().invoke(ctx) + + # Otherwise we make every single context and invoke them in a + # chain. In that case the return value to the result processor + # is the list of all invoked subcommand's results. + contexts = [] + while args: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + sub_ctx = cmd.make_context( + cmd_name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + ) + contexts.append(sub_ctx) + args, sub_ctx.args = sub_ctx.args, [] + + rv = [] + for sub_ctx in contexts: + with sub_ctx: + rv.append(sub_ctx.command.invoke(sub_ctx)) + return _process_result(rv) + + def resolve_command( + self, ctx: Context, args: t.List[str] + ) -> t.Tuple[t.Optional[str], t.Optional[Command], t.List[str]]: + cmd_name = make_str(args[0]) + original_cmd_name = cmd_name + + # Get the command + cmd = self.get_command(ctx, cmd_name) + + # If we can't find the command but there is a normalization + # function available, we try with that one. + if cmd is None and ctx.token_normalize_func is not None: + cmd_name = ctx.token_normalize_func(cmd_name) + cmd = self.get_command(ctx, cmd_name) + + # If we don't find the command we want to show an error message + # to the user that it was not provided. However, there is + # something else we should do: if the first argument looks like + # an option we want to kick off parsing again for arguments to + # resolve things like --help which now should go to the main + # place. + if cmd is None and not ctx.resilient_parsing: + if split_opt(cmd_name)[0]: + self.parse_args(ctx, ctx.args) + ctx.fail(_("No such command {name!r}.").format(name=original_cmd_name)) + return cmd_name if cmd else None, cmd, args[1:] + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + """Given a context and a command name, this returns a + :class:`Command` object if it exists or returns `None`. + """ + raise NotImplementedError + + def list_commands(self, ctx: Context) -> t.List[str]: + """Returns a list of subcommand names in the order they should + appear. + """ + return [] + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options, subcommands, and chained + multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results = [ + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + ] + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class Group(MultiCommand): + """A group allows a command to have subcommands attached. This is + the most common way to implement nesting in Click. + + :param name: The name of the group command. + :param commands: A dict mapping names to :class:`Command` objects. + Can also be a list of :class:`Command`, which will use + :attr:`Command.name` to create the dict. + :param attrs: Other command arguments described in + :class:`MultiCommand`, :class:`Command`, and + :class:`BaseCommand`. + + .. versionchanged:: 8.0 + The ``commmands`` argument can be a list of command objects. + """ + + #: If set, this is used by the group's :meth:`command` decorator + #: as the default :class:`Command` class. This is useful to make all + #: subcommands use a custom command class. + #: + #: .. versionadded:: 8.0 + command_class: t.Optional[t.Type[Command]] = None + + #: If set, this is used by the group's :meth:`group` decorator + #: as the default :class:`Group` class. This is useful to make all + #: subgroups use a custom group class. + #: + #: If set to the special value :class:`type` (literally + #: ``group_class = type``), this group's class will be used as the + #: default class. This makes a custom group class continue to make + #: custom groups. + #: + #: .. versionadded:: 8.0 + group_class: t.Optional[t.Union[t.Type["Group"], t.Type[type]]] = None + # Literal[type] isn't valid, so use Type[type] + + def __init__( + self, + name: t.Optional[str] = None, + commands: t.Optional[t.Union[t.Dict[str, Command], t.Sequence[Command]]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if commands is None: + commands = {} + elif isinstance(commands, abc.Sequence): + commands = {c.name: c for c in commands if c.name is not None} + + #: The registered subcommands by their exported names. + self.commands: t.Dict[str, Command] = commands + + def add_command(self, cmd: Command, name: t.Optional[str] = None) -> None: + """Registers another :class:`Command` with this group. If the name + is not provided, the name of the command is used. + """ + name = name or cmd.name + if name is None: + raise TypeError("Command has no name.") + _check_multicommand(self, name, cmd, register=True) + self.commands[name] = cmd + + @t.overload + def command(self, __func: t.Callable[..., t.Any]) -> Command: + ... + + @t.overload + def command( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], Command]: + ... + + def command( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], Command], Command]: + """A shortcut decorator for declaring and attaching a command to + the group. This takes the same arguments as :func:`command` and + immediately registers the created command with this group by + calling :meth:`add_command`. + + To customize the command class used, set the + :attr:`command_class` attribute. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.0 + Added the :attr:`command_class` attribute. + """ + from .decorators import command + + if self.command_class and kwargs.get("cls") is None: + kwargs["cls"] = self.command_class + + func: t.Optional[t.Callable] = None + + if args and callable(args[0]): + assert ( + len(args) == 1 and not kwargs + ), "Use 'command(**kwargs)(callable)' to provide arguments." + (func,) = args + args = () + + def decorator(f: t.Callable[..., t.Any]) -> Command: + cmd: Command = command(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + if func is not None: + return decorator(func) + + return decorator + + @t.overload + def group(self, __func: t.Callable[..., t.Any]) -> "Group": + ... + + @t.overload + def group( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], "Group"]: + ... + + def group( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], "Group"], "Group"]: + """A shortcut decorator for declaring and attaching a group to + the group. This takes the same arguments as :func:`group` and + immediately registers the created group with this group by + calling :meth:`add_command`. + + To customize the group class used, set the :attr:`group_class` + attribute. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.0 + Added the :attr:`group_class` attribute. + """ + from .decorators import group + + func: t.Optional[t.Callable] = None + + if args and callable(args[0]): + assert ( + len(args) == 1 and not kwargs + ), "Use 'group(**kwargs)(callable)' to provide arguments." + (func,) = args + args = () + + if self.group_class is not None and kwargs.get("cls") is None: + if self.group_class is type: + kwargs["cls"] = type(self) + else: + kwargs["cls"] = self.group_class + + def decorator(f: t.Callable[..., t.Any]) -> "Group": + cmd: Group = group(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + if func is not None: + return decorator(func) + + return decorator + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + return self.commands.get(cmd_name) + + def list_commands(self, ctx: Context) -> t.List[str]: + return sorted(self.commands) + + +class CommandCollection(MultiCommand): + """A command collection is a multi command that merges multiple multi + commands together into one. This is a straightforward implementation + that accepts a list of different multi commands as sources and + provides all the commands for each of them. + """ + + def __init__( + self, + name: t.Optional[str] = None, + sources: t.Optional[t.List[MultiCommand]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + #: The list of registered multi commands. + self.sources: t.List[MultiCommand] = sources or [] + + def add_source(self, multi_cmd: MultiCommand) -> None: + """Adds a new multi command to the chain dispatcher.""" + self.sources.append(multi_cmd) + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + for source in self.sources: + rv = source.get_command(ctx, cmd_name) + + if rv is not None: + if self.chain: + _check_multicommand(self, cmd_name, rv) + + return rv + + return None + + def list_commands(self, ctx: Context) -> t.List[str]: + rv: t.Set[str] = set() + + for source in self.sources: + rv.update(source.list_commands(ctx)) + + return sorted(rv) + + +def _check_iter(value: t.Any) -> t.Iterator[t.Any]: + """Check if the value is iterable but not a string. Raises a type + error, or return an iterator over the value. + """ + if isinstance(value, str): + raise TypeError + + return iter(value) + + +class Parameter: + r"""A parameter to a command comes in two versions: they are either + :class:`Option`\s or :class:`Argument`\s. Other subclasses are currently + not supported by design as some of the internals for parsing are + intentionally not finalized. + + Some settings are supported by both options and arguments. + + :param param_decls: the parameter declarations for this option or + argument. This is a list of flags or argument + names. + :param type: the type that should be used. Either a :class:`ParamType` + or a Python type. The later is converted into the former + automatically if supported. + :param required: controls if this is optional or not. + :param default: the default value if omitted. This can also be a callable, + in which case it's invoked when the default is needed + without any arguments. + :param callback: A function to further process or validate the value + after type conversion. It is called as ``f(ctx, param, value)`` + and must return the value. It is called for all sources, + including prompts. + :param nargs: the number of arguments to match. If not ``1`` the return + value is a tuple instead of single value. The default for + nargs is ``1`` (except if the type is a tuple, then it's + the arity of the tuple). If ``nargs=-1``, all remaining + parameters are collected. + :param metavar: how the value is represented in the help page. + :param expose_value: if this is `True` then the value is passed onwards + to the command callback and stored on the context, + otherwise it's skipped. + :param is_eager: eager values are processed before non eager ones. This + should not be set for arguments or it will inverse the + order of processing. + :param envvar: a string or list of strings that are environment variables + that should be checked. + :param shell_complete: A function that returns custom shell + completions. Used instead of the param's type completion if + given. Takes ``ctx, param, incomplete`` and must return a list + of :class:`~click.shell_completion.CompletionItem` or a list of + strings. + + .. versionchanged:: 8.0 + ``process_value`` validates required parameters and bounded + ``nargs``, and invokes the parameter callback before returning + the value. This allows the callback to validate prompts. + ``full_process_value`` is removed. + + .. versionchanged:: 8.0 + ``autocompletion`` is renamed to ``shell_complete`` and has new + semantics described above. The old name is deprecated and will + be removed in 8.1, until then it will be wrapped to match the + new requirements. + + .. versionchanged:: 8.0 + For ``multiple=True, nargs>1``, the default must be a list of + tuples. + + .. versionchanged:: 8.0 + Setting a default is no longer required for ``nargs>1``, it will + default to ``None``. ``multiple=True`` or ``nargs=-1`` will + default to ``()``. + + .. versionchanged:: 7.1 + Empty environment variables are ignored rather than taking the + empty string value. This makes it possible for scripts to clear + variables if they can't unset them. + + .. versionchanged:: 2.0 + Changed signature for parameter callback to also be passed the + parameter. The old callback format will still work, but it will + raise a warning to give you a chance to migrate the code easier. + """ + + param_type_name = "parameter" + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + type: t.Optional[t.Union[types.ParamType, t.Any]] = None, + required: bool = False, + default: t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]] = None, + callback: t.Optional[t.Callable[[Context, "Parameter", t.Any], t.Any]] = None, + nargs: t.Optional[int] = None, + multiple: bool = False, + metavar: t.Optional[str] = None, + expose_value: bool = True, + is_eager: bool = False, + envvar: t.Optional[t.Union[str, t.Sequence[str]]] = None, + shell_complete: t.Optional[ + t.Callable[ + [Context, "Parameter", str], + t.Union[t.List["CompletionItem"], t.List[str]], + ] + ] = None, + ) -> None: + self.name, self.opts, self.secondary_opts = self._parse_decls( + param_decls or (), expose_value + ) + self.type = types.convert_type(type, default) + + # Default nargs to what the type tells us if we have that + # information available. + if nargs is None: + if self.type.is_composite: + nargs = self.type.arity + else: + nargs = 1 + + self.required = required + self.callback = callback + self.nargs = nargs + self.multiple = multiple + self.expose_value = expose_value + self.default = default + self.is_eager = is_eager + self.metavar = metavar + self.envvar = envvar + self._custom_shell_complete = shell_complete + + if __debug__: + if self.type.is_composite and nargs != self.type.arity: + raise ValueError( + f"'nargs' must be {self.type.arity} (or None) for" + f" type {self.type!r}, but it was {nargs}." + ) + + # Skip no default or callable default. + check_default = default if not callable(default) else None + + if check_default is not None: + if multiple: + try: + # Only check the first value against nargs. + check_default = next(_check_iter(check_default), None) + except TypeError: + raise ValueError( + "'default' must be a list when 'multiple' is true." + ) from None + + # Can be None for multiple with empty default. + if nargs != 1 and check_default is not None: + try: + _check_iter(check_default) + except TypeError: + if multiple: + message = ( + "'default' must be a list of lists when 'multiple' is" + " true and 'nargs' != 1." + ) + else: + message = "'default' must be a list when 'nargs' != 1." + + raise ValueError(message) from None + + if nargs > 1 and len(check_default) != nargs: + subject = "item length" if multiple else "length" + raise ValueError( + f"'default' {subject} must match nargs={nargs}." + ) + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + .. versionadded:: 8.0 + """ + return { + "name": self.name, + "param_type_name": self.param_type_name, + "opts": self.opts, + "secondary_opts": self.secondary_opts, + "type": self.type.to_info_dict(), + "required": self.required, + "nargs": self.nargs, + "multiple": self.multiple, + "default": self.default, + "envvar": self.envvar, + } + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.name}>" + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + raise NotImplementedError() + + @property + def human_readable_name(self) -> str: + """Returns the human readable name of this parameter. This is the + same as the name for options, but the metavar for arguments. + """ + return self.name # type: ignore + + def make_metavar(self) -> str: + if self.metavar is not None: + return self.metavar + + metavar = self.type.get_metavar(self) + + if metavar is None: + metavar = self.type.name.upper() + + if self.nargs != 1: + metavar += "..." + + return metavar + + @t.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def get_default( + self, ctx: Context, call: bool = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def get_default( + self, ctx: Context, call: bool = True + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + """Get the default for the parameter. Tries + :meth:`Context.lookup_default` first, then the local default. + + :param ctx: Current context. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0.2 + Type casting is no longer performed when getting a default. + + .. versionchanged:: 8.0.1 + Type casting can fail in resilient parsing mode. Invalid + defaults will not prevent showing help text. + + .. versionchanged:: 8.0 + Looks at ``ctx.default_map`` first. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + value = ctx.lookup_default(self.name, call=False) # type: ignore + + if value is None: + value = self.default + + if call and callable(value): + value = value() + + return value + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + raise NotImplementedError() + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, t.Any] + ) -> t.Tuple[t.Any, ParameterSource]: + value = opts.get(self.name) # type: ignore + source = ParameterSource.COMMANDLINE + + if value is None: + value = self.value_from_envvar(ctx) + source = ParameterSource.ENVIRONMENT + + if value is None: + value = ctx.lookup_default(self.name) # type: ignore + source = ParameterSource.DEFAULT_MAP + + if value is None: + value = self.get_default(ctx) + source = ParameterSource.DEFAULT + + return value, source + + def type_cast_value(self, ctx: Context, value: t.Any) -> t.Any: + """Convert and validate a value against the option's + :attr:`type`, :attr:`multiple`, and :attr:`nargs`. + """ + if value is None: + return () if self.multiple or self.nargs == -1 else None + + def check_iter(value: t.Any) -> t.Iterator: + try: + return _check_iter(value) + except TypeError: + # This should only happen when passing in args manually, + # the parser should construct an iterable when parsing + # the command line. + raise BadParameter( + _("Value must be an iterable."), ctx=ctx, param=self + ) from None + + if self.nargs == 1 or self.type.is_composite: + convert: t.Callable[[t.Any], t.Any] = partial( + self.type, param=self, ctx=ctx + ) + elif self.nargs == -1: + + def convert(value: t.Any) -> t.Tuple: + return tuple(self.type(x, self, ctx) for x in check_iter(value)) + + else: # nargs > 1 + + def convert(value: t.Any) -> t.Tuple: + value = tuple(check_iter(value)) + + if len(value) != self.nargs: + raise BadParameter( + ngettext( + "Takes {nargs} values but 1 was given.", + "Takes {nargs} values but {len} were given.", + len(value), + ).format(nargs=self.nargs, len=len(value)), + ctx=ctx, + param=self, + ) + + return tuple(self.type(x, self, ctx) for x in value) + + if self.multiple: + return tuple(convert(x) for x in check_iter(value)) + + return convert(value) + + def value_is_missing(self, value: t.Any) -> bool: + if value is None: + return True + + if (self.nargs != 1 or self.multiple) and value == (): + return True + + return False + + def process_value(self, ctx: Context, value: t.Any) -> t.Any: + value = self.type_cast_value(ctx, value) + + if self.required and self.value_is_missing(value): + raise MissingParameter(ctx=ctx, param=self) + + if self.callback is not None: + value = self.callback(ctx, self, value) + + return value + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + if self.envvar is None: + return None + + if isinstance(self.envvar, str): + rv = os.environ.get(self.envvar) + + if rv: + return rv + else: + for envvar in self.envvar: + rv = os.environ.get(envvar) + + if rv: + return rv + + return None + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is not None and self.nargs != 1: + rv = self.type.split_envvar_value(rv) + + return rv + + def handle_parse_result( + self, ctx: Context, opts: t.Mapping[str, t.Any], args: t.List[str] + ) -> t.Tuple[t.Any, t.List[str]]: + with augment_usage_errors(ctx, param=self): + value, source = self.consume_value(ctx, opts) + ctx.set_parameter_source(self.name, source) # type: ignore + + try: + value = self.process_value(ctx, value) + except Exception: + if not ctx.resilient_parsing: + raise + + value = None + + if self.expose_value: + ctx.params[self.name] = value # type: ignore + + return value, args + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + pass + + def get_usage_pieces(self, ctx: Context) -> t.List[str]: + return [] + + def get_error_hint(self, ctx: Context) -> str: + """Get a stringified version of the param for use in error messages to + indicate which param caused the error. + """ + hint_list = self.opts or [self.human_readable_name] + return " / ".join(f"'{x}'" for x in hint_list) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. If a + ``shell_complete`` function was given during init, it is used. + Otherwise, the :attr:`type` + :meth:`~click.types.ParamType.shell_complete` function is used. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + if self._custom_shell_complete is not None: + results = self._custom_shell_complete(ctx, self, incomplete) + + if results and isinstance(results[0], str): + from click.shell_completion import CompletionItem + + results = [CompletionItem(c) for c in results] + + return t.cast(t.List["CompletionItem"], results) + + return self.type.shell_complete(ctx, self, incomplete) + + +class Option(Parameter): + """Options are usually optional values on the command line and + have some extra features that arguments don't have. + + All other parameters are passed onwards to the parameter constructor. + + :param show_default: Show the default value for this option in its + help text. Values are not shown by default, unless + :attr:`Context.show_default` is ``True``. If this value is a + string, it shows that string in parentheses instead of the + actual value. This is particularly useful for dynamic options. + For single option boolean flags, the default remains hidden if + its value is ``False``. + :param show_envvar: Controls if an environment variable should be + shown on the help page. Normally, environment variables are not + shown. + :param prompt: If set to ``True`` or a non empty string then the + user will be prompted for input. If set to ``True`` the prompt + will be the option name capitalized. + :param confirmation_prompt: Prompt a second time to confirm the + value if it was prompted for. Can be set to a string instead of + ``True`` to customize the message. + :param prompt_required: If set to ``False``, the user will be + prompted for input only when the option was specified as a flag + without a value. + :param hide_input: If this is ``True`` then the input on the prompt + will be hidden from the user. This is useful for password input. + :param is_flag: forces this option to act as a flag. The default is + auto detection. + :param flag_value: which value should be used for this flag if it's + enabled. This is set to a boolean automatically if + the option string contains a slash to mark two options. + :param multiple: if this is set to `True` then the argument is accepted + multiple times and recorded. This is similar to ``nargs`` + in how it works but supports arbitrary number of + arguments. + :param count: this flag makes an option increment an integer. + :param allow_from_autoenv: if this is enabled then the value of this + parameter will be pulled from an environment + variable in case a prefix is defined on the + context. + :param help: the help string. + :param hidden: hide this option from help outputs. + + .. versionchanged:: 8.1.0 + Help text indentation is cleaned here instead of only in the + ``@option`` decorator. + + .. versionchanged:: 8.1.0 + The ``show_default`` parameter overrides + ``Context.show_default``. + + .. versionchanged:: 8.1.0 + The default of a single option boolean flag is not shown if the + default value is ``False``. + + .. versionchanged:: 8.0.1 + ``type`` is detected from ``flag_value`` if given. + """ + + param_type_name = "option" + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + show_default: t.Union[bool, str, None] = None, + prompt: t.Union[bool, str] = False, + confirmation_prompt: t.Union[bool, str] = False, + prompt_required: bool = True, + hide_input: bool = False, + is_flag: t.Optional[bool] = None, + flag_value: t.Optional[t.Any] = None, + multiple: bool = False, + count: bool = False, + allow_from_autoenv: bool = True, + type: t.Optional[t.Union[types.ParamType, t.Any]] = None, + help: t.Optional[str] = None, + hidden: bool = False, + show_choices: bool = True, + show_envvar: bool = False, + **attrs: t.Any, + ) -> None: + if help: + help = inspect.cleandoc(help) + + default_is_missing = "default" not in attrs + super().__init__(param_decls, type=type, multiple=multiple, **attrs) + + if prompt is True: + if self.name is None: + raise TypeError("'name' is required with 'prompt=True'.") + + prompt_text: t.Optional[str] = self.name.replace("_", " ").capitalize() + elif prompt is False: + prompt_text = None + else: + prompt_text = prompt + + self.prompt = prompt_text + self.confirmation_prompt = confirmation_prompt + self.prompt_required = prompt_required + self.hide_input = hide_input + self.hidden = hidden + + # If prompt is enabled but not required, then the option can be + # used as a flag to indicate using prompt or flag_value. + self._flag_needs_value = self.prompt is not None and not self.prompt_required + + if is_flag is None: + if flag_value is not None: + # Implicitly a flag because flag_value was set. + is_flag = True + elif self._flag_needs_value: + # Not a flag, but when used as a flag it shows a prompt. + is_flag = False + else: + # Implicitly a flag because flag options were given. + is_flag = bool(self.secondary_opts) + elif is_flag is False and not self._flag_needs_value: + # Not a flag, and prompt is not enabled, can be used as a + # flag if flag_value is set. + self._flag_needs_value = flag_value is not None + + if is_flag and default_is_missing and not self.required: + self.default: t.Union[t.Any, t.Callable[[], t.Any]] = False + + if flag_value is None: + flag_value = not self.default + + if is_flag and type is None: + # Re-guess the type from the flag value instead of the + # default. + self.type = types.convert_type(None, flag_value) + + self.is_flag: bool = is_flag + self.is_bool_flag = is_flag and isinstance(self.type, types.BoolParamType) + self.flag_value: t.Any = flag_value + + # Counting + self.count = count + if count: + if type is None: + self.type = types.IntRange(min=0) + if default_is_missing: + self.default = 0 + + self.allow_from_autoenv = allow_from_autoenv + self.help = help + self.show_default = show_default + self.show_choices = show_choices + self.show_envvar = show_envvar + + if __debug__: + if self.nargs == -1: + raise TypeError("nargs=-1 is not supported for options.") + + if self.prompt and self.is_flag and not self.is_bool_flag: + raise TypeError("'prompt' is not valid for non-boolean flag.") + + if not self.is_bool_flag and self.secondary_opts: + raise TypeError("Secondary flag is not valid for non-boolean flag.") + + if self.is_bool_flag and self.hide_input and self.prompt is not None: + raise TypeError( + "'prompt' with 'hide_input' is not valid for boolean flag." + ) + + if self.count: + if self.multiple: + raise TypeError("'count' is not valid with 'multiple'.") + + if self.is_flag: + raise TypeError("'count' is not valid with 'is_flag'.") + + if self.multiple and self.is_flag: + raise TypeError("'multiple' is not valid with 'is_flag', use 'count'.") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + help=self.help, + prompt=self.prompt, + is_flag=self.is_flag, + flag_value=self.flag_value, + count=self.count, + hidden=self.hidden, + ) + return info_dict + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + opts = [] + secondary_opts = [] + name = None + possible_names = [] + + for decl in decls: + if decl.isidentifier(): + if name is not None: + raise TypeError(f"Name '{name}' defined twice") + name = decl + else: + split_char = ";" if decl[:1] == "/" else "/" + if split_char in decl: + first, second = decl.split(split_char, 1) + first = first.rstrip() + if first: + possible_names.append(split_opt(first)) + opts.append(first) + second = second.lstrip() + if second: + secondary_opts.append(second.lstrip()) + if first == second: + raise ValueError( + f"Boolean option {decl!r} cannot use the" + " same flag for true/false." + ) + else: + possible_names.append(split_opt(decl)) + opts.append(decl) + + if name is None and possible_names: + possible_names.sort(key=lambda x: -len(x[0])) # group long options first + name = possible_names[0][1].replace("-", "_").lower() + if not name.isidentifier(): + name = None + + if name is None: + if not expose_value: + return None, opts, secondary_opts + raise TypeError("Could not determine name for option") + + if not opts and not secondary_opts: + raise TypeError( + f"No options defined but a name was passed ({name})." + " Did you mean to declare an argument instead? Did" + f" you mean to pass '--{name}'?" + ) + + return name, opts, secondary_opts + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + if self.multiple: + action = "append" + elif self.count: + action = "count" + else: + action = "store" + + if self.is_flag: + action = f"{action}_const" + + if self.is_bool_flag and self.secondary_opts: + parser.add_option( + obj=self, opts=self.opts, dest=self.name, action=action, const=True + ) + parser.add_option( + obj=self, + opts=self.secondary_opts, + dest=self.name, + action=action, + const=False, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + const=self.flag_value, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + nargs=self.nargs, + ) + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + if self.hidden: + return None + + any_prefix_is_slash = False + + def _write_opts(opts: t.Sequence[str]) -> str: + nonlocal any_prefix_is_slash + + rv, any_slashes = join_options(opts) + + if any_slashes: + any_prefix_is_slash = True + + if not self.is_flag and not self.count: + rv += f" {self.make_metavar()}" + + return rv + + rv = [_write_opts(self.opts)] + + if self.secondary_opts: + rv.append(_write_opts(self.secondary_opts)) + + help = self.help or "" + extra = [] + + if self.show_envvar: + envvar = self.envvar + + if envvar is None: + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + + if envvar is not None: + var_str = ( + envvar + if isinstance(envvar, str) + else ", ".join(str(d) for d in envvar) + ) + extra.append(_("env var: {var}").format(var=var_str)) + + # Temporarily enable resilient parsing to avoid type casting + # failing for the default. Might be possible to extend this to + # help formatting in general. + resilient = ctx.resilient_parsing + ctx.resilient_parsing = True + + try: + default_value = self.get_default(ctx, call=False) + finally: + ctx.resilient_parsing = resilient + + show_default = False + show_default_is_str = False + + if self.show_default is not None: + if isinstance(self.show_default, str): + show_default_is_str = show_default = True + else: + show_default = self.show_default + elif ctx.show_default is not None: + show_default = ctx.show_default + + if show_default_is_str or (show_default and (default_value is not None)): + if show_default_is_str: + default_string = f"({self.show_default})" + elif isinstance(default_value, (list, tuple)): + default_string = ", ".join(str(d) for d in default_value) + elif inspect.isfunction(default_value): + default_string = _("(dynamic)") + elif self.is_bool_flag and self.secondary_opts: + # For boolean flags that have distinct True/False opts, + # use the opt without prefix instead of the value. + default_string = split_opt( + (self.opts if self.default else self.secondary_opts)[0] + )[1] + elif self.is_bool_flag and not self.secondary_opts and not default_value: + default_string = "" + else: + default_string = str(default_value) + + if default_string: + extra.append(_("default: {default}").format(default=default_string)) + + if ( + isinstance(self.type, types._NumberRangeBase) + # skip count with default range type + and not (self.count and self.type.min == 0 and self.type.max is None) + ): + range_str = self.type._describe_range() + + if range_str: + extra.append(range_str) + + if self.required: + extra.append(_("required")) + + if extra: + extra_str = "; ".join(extra) + help = f"{help} [{extra_str}]" if help else f"[{extra_str}]" + + return ("; " if any_prefix_is_slash else " / ").join(rv), help + + @t.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def get_default( + self, ctx: Context, call: bool = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def get_default( + self, ctx: Context, call: bool = True + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + # If we're a non boolean flag our default is more complex because + # we need to look at all flags in the same group to figure out + # if we're the default one in which case we return the flag + # value as default. + if self.is_flag and not self.is_bool_flag: + for param in ctx.command.params: + if param.name == self.name and param.default: + return param.flag_value # type: ignore + + return None + + return super().get_default(ctx, call=call) + + def prompt_for_value(self, ctx: Context) -> t.Any: + """This is an alternative flow that can be activated in the full + value processing if a value does not exist. It will prompt the + user until a valid value exists and then returns the processed + value as result. + """ + assert self.prompt is not None + + # Calculate the default before prompting anything to be stable. + default = self.get_default(ctx) + + # If this is a prompt for a flag we need to handle this + # differently. + if self.is_bool_flag: + return confirm(self.prompt, default) + + return prompt( + self.prompt, + default=default, + type=self.type, + hide_input=self.hide_input, + show_choices=self.show_choices, + confirmation_prompt=self.confirmation_prompt, + value_proc=lambda x: self.process_value(ctx, x), + ) + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + rv = super().resolve_envvar_value(ctx) + + if rv is not None: + return rv + + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + rv = os.environ.get(envvar) + + if rv: + return rv + + return None + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is None: + return None + + value_depth = (self.nargs != 1) + bool(self.multiple) + + if value_depth > 0: + rv = self.type.split_envvar_value(rv) + + if self.multiple and self.nargs != 1: + rv = batch(rv, self.nargs) + + return rv + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, "Parameter"] + ) -> t.Tuple[t.Any, ParameterSource]: + value, source = super().consume_value(ctx, opts) + + # The parser will emit a sentinel value if the option can be + # given as a flag without a value. This is different from None + # to distinguish from the flag not being given at all. + if value is _flag_needs_value: + if self.prompt is not None and not ctx.resilient_parsing: + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + else: + value = self.flag_value + source = ParameterSource.COMMANDLINE + + elif ( + self.multiple + and value is not None + and any(v is _flag_needs_value for v in value) + ): + value = [self.flag_value if v is _flag_needs_value else v for v in value] + source = ParameterSource.COMMANDLINE + + # The value wasn't set, or used the param's default, prompt if + # prompting is enabled. + elif ( + source in {None, ParameterSource.DEFAULT} + and self.prompt is not None + and (self.required or self.prompt_required) + and not ctx.resilient_parsing + ): + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + + return value, source + + +class Argument(Parameter): + """Arguments are positional parameters to a command. They generally + provide fewer features than options but can have infinite ``nargs`` + and are required by default. + + All parameters are passed onwards to the parameter constructor. + """ + + param_type_name = "argument" + + def __init__( + self, + param_decls: t.Sequence[str], + required: t.Optional[bool] = None, + **attrs: t.Any, + ) -> None: + if required is None: + if attrs.get("default") is not None: + required = False + else: + required = attrs.get("nargs", 1) > 0 + + if "multiple" in attrs: + raise TypeError("__init__() got an unexpected keyword argument 'multiple'.") + + super().__init__(param_decls, required=required, **attrs) + + if __debug__: + if self.default is not None and self.nargs == -1: + raise TypeError("'default' is not supported for nargs=-1.") + + @property + def human_readable_name(self) -> str: + if self.metavar is not None: + return self.metavar + return self.name.upper() # type: ignore + + def make_metavar(self) -> str: + if self.metavar is not None: + return self.metavar + var = self.type.get_metavar(self) + if not var: + var = self.name.upper() # type: ignore + if not self.required: + var = f"[{var}]" + if self.nargs != 1: + var += "..." + return var + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + if not decls: + if not expose_value: + return None, [], [] + raise TypeError("Could not determine name for argument") + if len(decls) == 1: + name = arg = decls[0] + name = name.replace("-", "_").lower() + else: + raise TypeError( + "Arguments take exactly one parameter declaration, got" + f" {len(decls)}." + ) + return name, [arg], [] + + def get_usage_pieces(self, ctx: Context) -> t.List[str]: + return [self.make_metavar()] + + def get_error_hint(self, ctx: Context) -> str: + return f"'{self.make_metavar()}'" + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + parser.add_argument(dest=self.name, nargs=self.nargs, obj=self) diff --git a/env/lib/python3.11/site-packages/click/decorators.py b/env/lib/python3.11/site-packages/click/decorators.py new file mode 100644 index 0000000..28618dc --- /dev/null +++ b/env/lib/python3.11/site-packages/click/decorators.py @@ -0,0 +1,497 @@ +import inspect +import types +import typing as t +from functools import update_wrapper +from gettext import gettext as _ + +from .core import Argument +from .core import Command +from .core import Context +from .core import Group +from .core import Option +from .core import Parameter +from .globals import get_current_context +from .utils import echo + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +FC = t.TypeVar("FC", bound=t.Union[t.Callable[..., t.Any], Command]) + + +def pass_context(f: F) -> F: + """Marks a callback as wanting to receive the current context + object as first argument. + """ + + def new_func(*args, **kwargs): # type: ignore + return f(get_current_context(), *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def pass_obj(f: F) -> F: + """Similar to :func:`pass_context`, but only pass the object on the + context onwards (:attr:`Context.obj`). This is useful if that object + represents the state of a nested system. + """ + + def new_func(*args, **kwargs): # type: ignore + return f(get_current_context().obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def make_pass_decorator( + object_type: t.Type, ensure: bool = False +) -> "t.Callable[[F], F]": + """Given an object type this creates a decorator that will work + similar to :func:`pass_obj` but instead of passing the object of the + current context, it will find the innermost context of type + :func:`object_type`. + + This generates a decorator that works roughly like this:: + + from functools import update_wrapper + + def decorator(f): + @pass_context + def new_func(ctx, *args, **kwargs): + obj = ctx.find_object(object_type) + return ctx.invoke(f, obj, *args, **kwargs) + return update_wrapper(new_func, f) + return decorator + + :param object_type: the type of the object to pass. + :param ensure: if set to `True`, a new object will be created and + remembered on the context if it's not there yet. + """ + + def decorator(f: F) -> F: + def new_func(*args, **kwargs): # type: ignore + ctx = get_current_context() + + if ensure: + obj = ctx.ensure_object(object_type) + else: + obj = ctx.find_object(object_type) + + if obj is None: + raise RuntimeError( + "Managed to invoke callback without a context" + f" object of type {object_type.__name__!r}" + " existing." + ) + + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + return decorator + + +def pass_meta_key( + key: str, *, doc_description: t.Optional[str] = None +) -> "t.Callable[[F], F]": + """Create a decorator that passes a key from + :attr:`click.Context.meta` as the first argument to the decorated + function. + + :param key: Key in ``Context.meta`` to pass. + :param doc_description: Description of the object being passed, + inserted into the decorator's docstring. Defaults to "the 'key' + key from Context.meta". + + .. versionadded:: 8.0 + """ + + def decorator(f: F) -> F: + def new_func(*args, **kwargs): # type: ignore + ctx = get_current_context() + obj = ctx.meta[key] + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + if doc_description is None: + doc_description = f"the {key!r} key from :attr:`click.Context.meta`" + + decorator.__doc__ = ( + f"Decorator that passes {doc_description} as the first argument" + " to the decorated function." + ) + return decorator + + +CmdType = t.TypeVar("CmdType", bound=Command) + + +@t.overload +def command( + __func: t.Callable[..., t.Any], +) -> Command: + ... + + +@t.overload +def command( + name: t.Optional[str] = None, + **attrs: t.Any, +) -> t.Callable[..., Command]: + ... + + +@t.overload +def command( + name: t.Optional[str] = None, + cls: t.Type[CmdType] = ..., + **attrs: t.Any, +) -> t.Callable[..., CmdType]: + ... + + +def command( + name: t.Union[str, t.Callable[..., t.Any], None] = None, + cls: t.Optional[t.Type[Command]] = None, + **attrs: t.Any, +) -> t.Union[Command, t.Callable[..., Command]]: + r"""Creates a new :class:`Command` and uses the decorated function as + callback. This will also automatically attach all decorated + :func:`option`\s and :func:`argument`\s as parameters to the command. + + The name of the command defaults to the name of the function with + underscores replaced by dashes. If you want to change that, you can + pass the intended name as the first argument. + + All keyword arguments are forwarded to the underlying command class. + For the ``params`` argument, any decorated params are appended to + the end of the list. + + Once decorated the function turns into a :class:`Command` instance + that can be invoked as a command line utility or be attached to a + command :class:`Group`. + + :param name: the name of the command. This defaults to the function + name with underscores replaced by dashes. + :param cls: the command class to instantiate. This defaults to + :class:`Command`. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.1 + The ``params`` argument can be used. Decorated params are + appended to the end of the list. + """ + + func: t.Optional[t.Callable[..., t.Any]] = None + + if callable(name): + func = name + name = None + assert cls is None, "Use 'command(cls=cls)(callable)' to specify a class." + assert not attrs, "Use 'command(**kwargs)(callable)' to provide arguments." + + if cls is None: + cls = Command + + def decorator(f: t.Callable[..., t.Any]) -> Command: + if isinstance(f, Command): + raise TypeError("Attempted to convert a callback into a command twice.") + + attr_params = attrs.pop("params", None) + params = attr_params if attr_params is not None else [] + + try: + decorator_params = f.__click_params__ # type: ignore + except AttributeError: + pass + else: + del f.__click_params__ # type: ignore + params.extend(reversed(decorator_params)) + + if attrs.get("help") is None: + attrs["help"] = f.__doc__ + + cmd = cls( # type: ignore[misc] + name=name or f.__name__.lower().replace("_", "-"), # type: ignore[arg-type] + callback=f, + params=params, + **attrs, + ) + cmd.__doc__ = f.__doc__ + return cmd + + if func is not None: + return decorator(func) + + return decorator + + +@t.overload +def group( + __func: t.Callable[..., t.Any], +) -> Group: + ... + + +@t.overload +def group( + name: t.Optional[str] = None, + **attrs: t.Any, +) -> t.Callable[[F], Group]: + ... + + +def group( + name: t.Union[str, t.Callable[..., t.Any], None] = None, **attrs: t.Any +) -> t.Union[Group, t.Callable[[F], Group]]: + """Creates a new :class:`Group` with a function as callback. This + works otherwise the same as :func:`command` just that the `cls` + parameter is set to :class:`Group`. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + """ + if attrs.get("cls") is None: + attrs["cls"] = Group + + if callable(name): + grp: t.Callable[[F], Group] = t.cast(Group, command(**attrs)) + return grp(name) + + return t.cast(Group, command(name, **attrs)) + + +def _param_memo(f: FC, param: Parameter) -> None: + if isinstance(f, Command): + f.params.append(param) + else: + if not hasattr(f, "__click_params__"): + f.__click_params__ = [] # type: ignore + + f.__click_params__.append(param) # type: ignore + + +def argument(*param_decls: str, **attrs: t.Any) -> t.Callable[[FC], FC]: + """Attaches an argument to the command. All positional arguments are + passed as parameter declarations to :class:`Argument`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Argument` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the argument class to instantiate. This defaults to + :class:`Argument`. + """ + + def decorator(f: FC) -> FC: + ArgumentClass = attrs.pop("cls", None) or Argument + _param_memo(f, ArgumentClass(param_decls, **attrs)) + return f + + return decorator + + +def option(*param_decls: str, **attrs: t.Any) -> t.Callable[[FC], FC]: + """Attaches an option to the command. All positional arguments are + passed as parameter declarations to :class:`Option`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Option` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the option class to instantiate. This defaults to + :class:`Option`. + """ + + def decorator(f: FC) -> FC: + # Issue 926, copy attrs, so pre-defined options can re-use the same cls= + option_attrs = attrs.copy() + OptionClass = option_attrs.pop("cls", None) or Option + _param_memo(f, OptionClass(param_decls, **option_attrs)) + return f + + return decorator + + +def confirmation_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--yes`` option which shows a prompt before continuing if + not passed. If the prompt is declined, the program will exit. + + :param param_decls: One or more option names. Defaults to the single + value ``"--yes"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value: + ctx.abort() + + if not param_decls: + param_decls = ("--yes",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("callback", callback) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("prompt", "Do you want to continue?") + kwargs.setdefault("help", "Confirm the action without prompting.") + return option(*param_decls, **kwargs) + + +def password_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--password`` option which prompts for a password, hiding + input and asking to enter the value again for confirmation. + + :param param_decls: One or more option names. Defaults to the single + value ``"--password"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + if not param_decls: + param_decls = ("--password",) + + kwargs.setdefault("prompt", True) + kwargs.setdefault("confirmation_prompt", True) + kwargs.setdefault("hide_input", True) + return option(*param_decls, **kwargs) + + +def version_option( + version: t.Optional[str] = None, + *param_decls: str, + package_name: t.Optional[str] = None, + prog_name: t.Optional[str] = None, + message: t.Optional[str] = None, + **kwargs: t.Any, +) -> t.Callable[[FC], FC]: + """Add a ``--version`` option which immediately prints the version + number and exits the program. + + If ``version`` is not provided, Click will try to detect it using + :func:`importlib.metadata.version` to get the version for the + ``package_name``. On Python < 3.8, the ``importlib_metadata`` + backport must be installed. + + If ``package_name`` is not provided, Click will try to detect it by + inspecting the stack frames. This will be used to detect the + version, so it must match the name of the installed package. + + :param version: The version number to show. If not provided, Click + will try to detect it. + :param param_decls: One or more option names. Defaults to the single + value ``"--version"``. + :param package_name: The package name to detect the version from. If + not provided, Click will try to detect it. + :param prog_name: The name of the CLI to show in the message. If not + provided, it will be detected from the command. + :param message: The message to show. The values ``%(prog)s``, + ``%(package)s``, and ``%(version)s`` are available. Defaults to + ``"%(prog)s, version %(version)s"``. + :param kwargs: Extra arguments are passed to :func:`option`. + :raise RuntimeError: ``version`` could not be detected. + + .. versionchanged:: 8.0 + Add the ``package_name`` parameter, and the ``%(package)s`` + value for messages. + + .. versionchanged:: 8.0 + Use :mod:`importlib.metadata` instead of ``pkg_resources``. The + version is detected based on the package name, not the entry + point name. The Python package name must match the installed + package name, or be passed with ``package_name=``. + """ + if message is None: + message = _("%(prog)s, version %(version)s") + + if version is None and package_name is None: + frame = inspect.currentframe() + f_back = frame.f_back if frame is not None else None + f_globals = f_back.f_globals if f_back is not None else None + # break reference cycle + # https://docs.python.org/3/library/inspect.html#the-interpreter-stack + del frame + + if f_globals is not None: + package_name = f_globals.get("__name__") + + if package_name == "__main__": + package_name = f_globals.get("__package__") + + if package_name: + package_name = package_name.partition(".")[0] + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value or ctx.resilient_parsing: + return + + nonlocal prog_name + nonlocal version + + if prog_name is None: + prog_name = ctx.find_root().info_name + + if version is None and package_name is not None: + metadata: t.Optional[types.ModuleType] + + try: + from importlib import metadata # type: ignore + except ImportError: + # Python < 3.8 + import importlib_metadata as metadata # type: ignore + + try: + version = metadata.version(package_name) # type: ignore + except metadata.PackageNotFoundError: # type: ignore + raise RuntimeError( + f"{package_name!r} is not installed. Try passing" + " 'package_name' instead." + ) from None + + if version is None: + raise RuntimeError( + f"Could not determine the version for {package_name!r} automatically." + ) + + echo( + t.cast(str, message) + % {"prog": prog_name, "package": package_name, "version": version}, + color=ctx.color, + ) + ctx.exit() + + if not param_decls: + param_decls = ("--version",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("is_eager", True) + kwargs.setdefault("help", _("Show the version and exit.")) + kwargs["callback"] = callback + return option(*param_decls, **kwargs) + + +def help_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--help`` option which immediately prints the help page + and exits the program. + + This is usually unnecessary, as the ``--help`` option is added to + each command automatically unless ``add_help_option=False`` is + passed. + + :param param_decls: One or more option names. Defaults to the single + value ``"--help"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value or ctx.resilient_parsing: + return + + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + if not param_decls: + param_decls = ("--help",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("is_eager", True) + kwargs.setdefault("help", _("Show this message and exit.")) + kwargs["callback"] = callback + return option(*param_decls, **kwargs) diff --git a/env/lib/python3.11/site-packages/click/exceptions.py b/env/lib/python3.11/site-packages/click/exceptions.py new file mode 100644 index 0000000..9e20b3e --- /dev/null +++ b/env/lib/python3.11/site-packages/click/exceptions.py @@ -0,0 +1,287 @@ +import os +import typing as t +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import get_text_stderr +from .utils import echo + +if t.TYPE_CHECKING: + from .core import Context + from .core import Parameter + + +def _join_param_hints( + param_hint: t.Optional[t.Union[t.Sequence[str], str]] +) -> t.Optional[str]: + if param_hint is not None and not isinstance(param_hint, str): + return " / ".join(repr(x) for x in param_hint) + + return param_hint + + +class ClickException(Exception): + """An exception that Click can handle and show to the user.""" + + #: The exit code for this exception. + exit_code = 1 + + def __init__(self, message: str) -> None: + super().__init__(message) + self.message = message + + def format_message(self) -> str: + return self.message + + def __str__(self) -> str: + return self.message + + def show(self, file: t.Optional[t.IO] = None) -> None: + if file is None: + file = get_text_stderr() + + echo(_("Error: {message}").format(message=self.format_message()), file=file) + + +class UsageError(ClickException): + """An internal exception that signals a usage error. This typically + aborts any further handling. + + :param message: the error message to display. + :param ctx: optionally the context that caused this error. Click will + fill in the context automatically in some situations. + """ + + exit_code = 2 + + def __init__(self, message: str, ctx: t.Optional["Context"] = None) -> None: + super().__init__(message) + self.ctx = ctx + self.cmd = self.ctx.command if self.ctx else None + + def show(self, file: t.Optional[t.IO] = None) -> None: + if file is None: + file = get_text_stderr() + color = None + hint = "" + if ( + self.ctx is not None + and self.ctx.command.get_help_option(self.ctx) is not None + ): + hint = _("Try '{command} {option}' for help.").format( + command=self.ctx.command_path, option=self.ctx.help_option_names[0] + ) + hint = f"{hint}\n" + if self.ctx is not None: + color = self.ctx.color + echo(f"{self.ctx.get_usage()}\n{hint}", file=file, color=color) + echo( + _("Error: {message}").format(message=self.format_message()), + file=file, + color=color, + ) + + +class BadParameter(UsageError): + """An exception that formats out a standardized error message for a + bad parameter. This is useful when thrown from a callback or type as + Click will attach contextual information to it (for instance, which + parameter it is). + + .. versionadded:: 2.0 + + :param param: the parameter object that caused this error. This can + be left out, and Click will attach this info itself + if possible. + :param param_hint: a string that shows up as parameter name. This + can be used as alternative to `param` in cases + where custom validation should happen. If it is + a string it's used as such, if it's a list then + each item is quoted and separated. + """ + + def __init__( + self, + message: str, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + ) -> None: + super().__init__(message, ctx) + self.param = param + self.param_hint = param_hint + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + return _("Invalid value: {message}").format(message=self.message) + + return _("Invalid value for {param_hint}: {message}").format( + param_hint=_join_param_hints(param_hint), message=self.message + ) + + +class MissingParameter(BadParameter): + """Raised if click required an option or argument but it was not + provided when invoking the script. + + .. versionadded:: 4.0 + + :param param_type: a string that indicates the type of the parameter. + The default is to inherit the parameter type from + the given `param`. Valid values are ``'parameter'``, + ``'option'`` or ``'argument'``. + """ + + def __init__( + self, + message: t.Optional[str] = None, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + param_type: t.Optional[str] = None, + ) -> None: + super().__init__(message or "", ctx, param, param_hint) + self.param_type = param_type + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint: t.Optional[str] = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + param_hint = None + + param_hint = _join_param_hints(param_hint) + param_hint = f" {param_hint}" if param_hint else "" + + param_type = self.param_type + if param_type is None and self.param is not None: + param_type = self.param.param_type_name + + msg = self.message + if self.param is not None: + msg_extra = self.param.type.get_missing_message(self.param) + if msg_extra: + if msg: + msg += f". {msg_extra}" + else: + msg = msg_extra + + msg = f" {msg}" if msg else "" + + # Translate param_type for known types. + if param_type == "argument": + missing = _("Missing argument") + elif param_type == "option": + missing = _("Missing option") + elif param_type == "parameter": + missing = _("Missing parameter") + else: + missing = _("Missing {param_type}").format(param_type=param_type) + + return f"{missing}{param_hint}.{msg}" + + def __str__(self) -> str: + if not self.message: + param_name = self.param.name if self.param else None + return _("Missing parameter: {param_name}").format(param_name=param_name) + else: + return self.message + + +class NoSuchOption(UsageError): + """Raised if click attempted to handle an option that does not + exist. + + .. versionadded:: 4.0 + """ + + def __init__( + self, + option_name: str, + message: t.Optional[str] = None, + possibilities: t.Optional[t.Sequence[str]] = None, + ctx: t.Optional["Context"] = None, + ) -> None: + if message is None: + message = _("No such option: {name}").format(name=option_name) + + super().__init__(message, ctx) + self.option_name = option_name + self.possibilities = possibilities + + def format_message(self) -> str: + if not self.possibilities: + return self.message + + possibility_str = ", ".join(sorted(self.possibilities)) + suggest = ngettext( + "Did you mean {possibility}?", + "(Possible options: {possibilities})", + len(self.possibilities), + ).format(possibility=possibility_str, possibilities=possibility_str) + return f"{self.message} {suggest}" + + +class BadOptionUsage(UsageError): + """Raised if an option is generally supplied but the use of the option + was incorrect. This is for instance raised if the number of arguments + for an option is not correct. + + .. versionadded:: 4.0 + + :param option_name: the name of the option being used incorrectly. + """ + + def __init__( + self, option_name: str, message: str, ctx: t.Optional["Context"] = None + ) -> None: + super().__init__(message, ctx) + self.option_name = option_name + + +class BadArgumentUsage(UsageError): + """Raised if an argument is generally supplied but the use of the argument + was incorrect. This is for instance raised if the number of values + for an argument is not correct. + + .. versionadded:: 6.0 + """ + + +class FileError(ClickException): + """Raised if a file cannot be opened.""" + + def __init__(self, filename: str, hint: t.Optional[str] = None) -> None: + if hint is None: + hint = _("unknown error") + + super().__init__(hint) + self.ui_filename = os.fsdecode(filename) + self.filename = filename + + def format_message(self) -> str: + return _("Could not open file {filename!r}: {message}").format( + filename=self.ui_filename, message=self.message + ) + + +class Abort(RuntimeError): + """An internal signalling exception that signals Click to abort.""" + + +class Exit(RuntimeError): + """An exception that indicates that the application should exit with some + status code. + + :param code: the status code to exit with. + """ + + __slots__ = ("exit_code",) + + def __init__(self, code: int = 0) -> None: + self.exit_code = code diff --git a/env/lib/python3.11/site-packages/click/formatting.py b/env/lib/python3.11/site-packages/click/formatting.py new file mode 100644 index 0000000..ddd2a2f --- /dev/null +++ b/env/lib/python3.11/site-packages/click/formatting.py @@ -0,0 +1,301 @@ +import typing as t +from contextlib import contextmanager +from gettext import gettext as _ + +from ._compat import term_len +from .parser import split_opt + +# Can force a width. This is used by the test system +FORCED_WIDTH: t.Optional[int] = None + + +def measure_table(rows: t.Iterable[t.Tuple[str, str]]) -> t.Tuple[int, ...]: + widths: t.Dict[int, int] = {} + + for row in rows: + for idx, col in enumerate(row): + widths[idx] = max(widths.get(idx, 0), term_len(col)) + + return tuple(y for x, y in sorted(widths.items())) + + +def iter_rows( + rows: t.Iterable[t.Tuple[str, str]], col_count: int +) -> t.Iterator[t.Tuple[str, ...]]: + for row in rows: + yield row + ("",) * (col_count - len(row)) + + +def wrap_text( + text: str, + width: int = 78, + initial_indent: str = "", + subsequent_indent: str = "", + preserve_paragraphs: bool = False, +) -> str: + """A helper function that intelligently wraps text. By default, it + assumes that it operates on a single paragraph of text but if the + `preserve_paragraphs` parameter is provided it will intelligently + handle paragraphs (defined by two empty lines). + + If paragraphs are handled, a paragraph can be prefixed with an empty + line containing the ``\\b`` character (``\\x08``) to indicate that + no rewrapping should happen in that block. + + :param text: the text that should be rewrapped. + :param width: the maximum width for the text. + :param initial_indent: the initial indent that should be placed on the + first line as a string. + :param subsequent_indent: the indent string that should be placed on + each consecutive line. + :param preserve_paragraphs: if this flag is set then the wrapping will + intelligently handle paragraphs. + """ + from ._textwrap import TextWrapper + + text = text.expandtabs() + wrapper = TextWrapper( + width, + initial_indent=initial_indent, + subsequent_indent=subsequent_indent, + replace_whitespace=False, + ) + if not preserve_paragraphs: + return wrapper.fill(text) + + p: t.List[t.Tuple[int, bool, str]] = [] + buf: t.List[str] = [] + indent = None + + def _flush_par() -> None: + if not buf: + return + if buf[0].strip() == "\b": + p.append((indent or 0, True, "\n".join(buf[1:]))) + else: + p.append((indent or 0, False, " ".join(buf))) + del buf[:] + + for line in text.splitlines(): + if not line: + _flush_par() + indent = None + else: + if indent is None: + orig_len = term_len(line) + line = line.lstrip() + indent = orig_len - term_len(line) + buf.append(line) + _flush_par() + + rv = [] + for indent, raw, text in p: + with wrapper.extra_indent(" " * indent): + if raw: + rv.append(wrapper.indent_only(text)) + else: + rv.append(wrapper.fill(text)) + + return "\n\n".join(rv) + + +class HelpFormatter: + """This class helps with formatting text-based help pages. It's + usually just needed for very special internal cases, but it's also + exposed so that developers can write their own fancy outputs. + + At present, it always writes into memory. + + :param indent_increment: the additional increment for each level. + :param width: the width for the text. This defaults to the terminal + width clamped to a maximum of 78. + """ + + def __init__( + self, + indent_increment: int = 2, + width: t.Optional[int] = None, + max_width: t.Optional[int] = None, + ) -> None: + import shutil + + self.indent_increment = indent_increment + if max_width is None: + max_width = 80 + if width is None: + width = FORCED_WIDTH + if width is None: + width = max(min(shutil.get_terminal_size().columns, max_width) - 2, 50) + self.width = width + self.current_indent = 0 + self.buffer: t.List[str] = [] + + def write(self, string: str) -> None: + """Writes a unicode string into the internal buffer.""" + self.buffer.append(string) + + def indent(self) -> None: + """Increases the indentation.""" + self.current_indent += self.indent_increment + + def dedent(self) -> None: + """Decreases the indentation.""" + self.current_indent -= self.indent_increment + + def write_usage( + self, prog: str, args: str = "", prefix: t.Optional[str] = None + ) -> None: + """Writes a usage line into the buffer. + + :param prog: the program name. + :param args: whitespace separated list of arguments. + :param prefix: The prefix for the first line. Defaults to + ``"Usage: "``. + """ + if prefix is None: + prefix = f"{_('Usage:')} " + + usage_prefix = f"{prefix:>{self.current_indent}}{prog} " + text_width = self.width - self.current_indent + + if text_width >= (term_len(usage_prefix) + 20): + # The arguments will fit to the right of the prefix. + indent = " " * term_len(usage_prefix) + self.write( + wrap_text( + args, + text_width, + initial_indent=usage_prefix, + subsequent_indent=indent, + ) + ) + else: + # The prefix is too long, put the arguments on the next line. + self.write(usage_prefix) + self.write("\n") + indent = " " * (max(self.current_indent, term_len(prefix)) + 4) + self.write( + wrap_text( + args, text_width, initial_indent=indent, subsequent_indent=indent + ) + ) + + self.write("\n") + + def write_heading(self, heading: str) -> None: + """Writes a heading into the buffer.""" + self.write(f"{'':>{self.current_indent}}{heading}:\n") + + def write_paragraph(self) -> None: + """Writes a paragraph into the buffer.""" + if self.buffer: + self.write("\n") + + def write_text(self, text: str) -> None: + """Writes re-indented text into the buffer. This rewraps and + preserves paragraphs. + """ + indent = " " * self.current_indent + self.write( + wrap_text( + text, + self.width, + initial_indent=indent, + subsequent_indent=indent, + preserve_paragraphs=True, + ) + ) + self.write("\n") + + def write_dl( + self, + rows: t.Sequence[t.Tuple[str, str]], + col_max: int = 30, + col_spacing: int = 2, + ) -> None: + """Writes a definition list into the buffer. This is how options + and commands are usually formatted. + + :param rows: a list of two item tuples for the terms and values. + :param col_max: the maximum width of the first column. + :param col_spacing: the number of spaces between the first and + second column. + """ + rows = list(rows) + widths = measure_table(rows) + if len(widths) != 2: + raise TypeError("Expected two columns for definition list") + + first_col = min(widths[0], col_max) + col_spacing + + for first, second in iter_rows(rows, len(widths)): + self.write(f"{'':>{self.current_indent}}{first}") + if not second: + self.write("\n") + continue + if term_len(first) <= first_col - col_spacing: + self.write(" " * (first_col - term_len(first))) + else: + self.write("\n") + self.write(" " * (first_col + self.current_indent)) + + text_width = max(self.width - first_col - 2, 10) + wrapped_text = wrap_text(second, text_width, preserve_paragraphs=True) + lines = wrapped_text.splitlines() + + if lines: + self.write(f"{lines[0]}\n") + + for line in lines[1:]: + self.write(f"{'':>{first_col + self.current_indent}}{line}\n") + else: + self.write("\n") + + @contextmanager + def section(self, name: str) -> t.Iterator[None]: + """Helpful context manager that writes a paragraph, a heading, + and the indents. + + :param name: the section name that is written as heading. + """ + self.write_paragraph() + self.write_heading(name) + self.indent() + try: + yield + finally: + self.dedent() + + @contextmanager + def indentation(self) -> t.Iterator[None]: + """A context manager that increases the indentation.""" + self.indent() + try: + yield + finally: + self.dedent() + + def getvalue(self) -> str: + """Returns the buffer contents.""" + return "".join(self.buffer) + + +def join_options(options: t.Sequence[str]) -> t.Tuple[str, bool]: + """Given a list of option strings this joins them in the most appropriate + way and returns them in the form ``(formatted_string, + any_prefix_is_slash)`` where the second item in the tuple is a flag that + indicates if any of the option prefixes was a slash. + """ + rv = [] + any_prefix_is_slash = False + + for opt in options: + prefix = split_opt(opt)[0] + + if prefix == "/": + any_prefix_is_slash = True + + rv.append((len(prefix), opt)) + + rv.sort(key=lambda x: x[0]) + return ", ".join(x[1] for x in rv), any_prefix_is_slash diff --git a/env/lib/python3.11/site-packages/click/globals.py b/env/lib/python3.11/site-packages/click/globals.py new file mode 100644 index 0000000..480058f --- /dev/null +++ b/env/lib/python3.11/site-packages/click/globals.py @@ -0,0 +1,68 @@ +import typing as t +from threading import local + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + +_local = local() + + +@t.overload +def get_current_context(silent: "te.Literal[False]" = False) -> "Context": + ... + + +@t.overload +def get_current_context(silent: bool = ...) -> t.Optional["Context"]: + ... + + +def get_current_context(silent: bool = False) -> t.Optional["Context"]: + """Returns the current click context. This can be used as a way to + access the current context object from anywhere. This is a more implicit + alternative to the :func:`pass_context` decorator. This function is + primarily useful for helpers such as :func:`echo` which might be + interested in changing its behavior based on the current context. + + To push the current context, :meth:`Context.scope` can be used. + + .. versionadded:: 5.0 + + :param silent: if set to `True` the return value is `None` if no context + is available. The default behavior is to raise a + :exc:`RuntimeError`. + """ + try: + return t.cast("Context", _local.stack[-1]) + except (AttributeError, IndexError) as e: + if not silent: + raise RuntimeError("There is no active click context.") from e + + return None + + +def push_context(ctx: "Context") -> None: + """Pushes a new context to the current stack.""" + _local.__dict__.setdefault("stack", []).append(ctx) + + +def pop_context() -> None: + """Removes the top level from the stack.""" + _local.stack.pop() + + +def resolve_color_default(color: t.Optional[bool] = None) -> t.Optional[bool]: + """Internal helper to get the default value of the color flag. If a + value is passed it's returned unchanged, otherwise it's looked up from + the current context. + """ + if color is not None: + return color + + ctx = get_current_context(silent=True) + + if ctx is not None: + return ctx.color + + return None diff --git a/env/lib/python3.11/site-packages/click/parser.py b/env/lib/python3.11/site-packages/click/parser.py new file mode 100644 index 0000000..2d5a2ed --- /dev/null +++ b/env/lib/python3.11/site-packages/click/parser.py @@ -0,0 +1,529 @@ +""" +This module started out as largely a copy paste from the stdlib's +optparse module with the features removed that we do not need from +optparse because we implement them in Click on a higher level (for +instance type handling, help formatting and a lot more). + +The plan is to remove more and more from here over time. + +The reason this is a different module and not optparse from the stdlib +is that there are differences in 2.x and 3.x about the error messages +generated and optparse in the stdlib uses gettext for no good reason +and might cause us issues. + +Click uses parts of optparse written by Gregory P. Ward and maintained +by the Python Software Foundation. This is limited to code in parser.py. + +Copyright 2001-2006 Gregory P. Ward. All rights reserved. +Copyright 2002-2006 Python Software Foundation. All rights reserved. +""" +# This code uses parts of optparse written by Gregory P. Ward and +# maintained by the Python Software Foundation. +# Copyright 2001-2006 Gregory P. Ward +# Copyright 2002-2006 Python Software Foundation +import typing as t +from collections import deque +from gettext import gettext as _ +from gettext import ngettext + +from .exceptions import BadArgumentUsage +from .exceptions import BadOptionUsage +from .exceptions import NoSuchOption +from .exceptions import UsageError + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Argument as CoreArgument + from .core import Context + from .core import Option as CoreOption + from .core import Parameter as CoreParameter + +V = t.TypeVar("V") + +# Sentinel value that indicates an option was passed as a flag without a +# value but is not a flag option. Option.consume_value uses this to +# prompt or use the flag_value. +_flag_needs_value = object() + + +def _unpack_args( + args: t.Sequence[str], nargs_spec: t.Sequence[int] +) -> t.Tuple[t.Sequence[t.Union[str, t.Sequence[t.Optional[str]], None]], t.List[str]]: + """Given an iterable of arguments and an iterable of nargs specifications, + it returns a tuple with all the unpacked arguments at the first index + and all remaining arguments as the second. + + The nargs specification is the number of arguments that should be consumed + or `-1` to indicate that this position should eat up all the remainders. + + Missing items are filled with `None`. + """ + args = deque(args) + nargs_spec = deque(nargs_spec) + rv: t.List[t.Union[str, t.Tuple[t.Optional[str], ...], None]] = [] + spos: t.Optional[int] = None + + def _fetch(c: "te.Deque[V]") -> t.Optional[V]: + try: + if spos is None: + return c.popleft() + else: + return c.pop() + except IndexError: + return None + + while nargs_spec: + nargs = _fetch(nargs_spec) + + if nargs is None: + continue + + if nargs == 1: + rv.append(_fetch(args)) + elif nargs > 1: + x = [_fetch(args) for _ in range(nargs)] + + # If we're reversed, we're pulling in the arguments in reverse, + # so we need to turn them around. + if spos is not None: + x.reverse() + + rv.append(tuple(x)) + elif nargs < 0: + if spos is not None: + raise TypeError("Cannot have two nargs < 0") + + spos = len(rv) + rv.append(None) + + # spos is the position of the wildcard (star). If it's not `None`, + # we fill it with the remainder. + if spos is not None: + rv[spos] = tuple(args) + args = [] + rv[spos + 1 :] = reversed(rv[spos + 1 :]) + + return tuple(rv), list(args) + + +def split_opt(opt: str) -> t.Tuple[str, str]: + first = opt[:1] + if first.isalnum(): + return "", opt + if opt[1:2] == first: + return opt[:2], opt[2:] + return first, opt[1:] + + +def normalize_opt(opt: str, ctx: t.Optional["Context"]) -> str: + if ctx is None or ctx.token_normalize_func is None: + return opt + prefix, opt = split_opt(opt) + return f"{prefix}{ctx.token_normalize_func(opt)}" + + +def split_arg_string(string: str) -> t.List[str]: + """Split an argument string as with :func:`shlex.split`, but don't + fail if the string is incomplete. Ignores a missing closing quote or + incomplete escape sequence and uses the partial token as-is. + + .. code-block:: python + + split_arg_string("example 'my file") + ["example", "my file"] + + split_arg_string("example my\\") + ["example", "my"] + + :param string: String to split. + """ + import shlex + + lex = shlex.shlex(string, posix=True) + lex.whitespace_split = True + lex.commenters = "" + out = [] + + try: + for token in lex: + out.append(token) + except ValueError: + # Raised when end-of-string is reached in an invalid state. Use + # the partial token as-is. The quote or escape character is in + # lex.state, not lex.token. + out.append(lex.token) + + return out + + +class Option: + def __init__( + self, + obj: "CoreOption", + opts: t.Sequence[str], + dest: t.Optional[str], + action: t.Optional[str] = None, + nargs: int = 1, + const: t.Optional[t.Any] = None, + ): + self._short_opts = [] + self._long_opts = [] + self.prefixes = set() + + for opt in opts: + prefix, value = split_opt(opt) + if not prefix: + raise ValueError(f"Invalid start character for option ({opt})") + self.prefixes.add(prefix[0]) + if len(prefix) == 1 and len(value) == 1: + self._short_opts.append(opt) + else: + self._long_opts.append(opt) + self.prefixes.add(prefix) + + if action is None: + action = "store" + + self.dest = dest + self.action = action + self.nargs = nargs + self.const = const + self.obj = obj + + @property + def takes_value(self) -> bool: + return self.action in ("store", "append") + + def process(self, value: str, state: "ParsingState") -> None: + if self.action == "store": + state.opts[self.dest] = value # type: ignore + elif self.action == "store_const": + state.opts[self.dest] = self.const # type: ignore + elif self.action == "append": + state.opts.setdefault(self.dest, []).append(value) # type: ignore + elif self.action == "append_const": + state.opts.setdefault(self.dest, []).append(self.const) # type: ignore + elif self.action == "count": + state.opts[self.dest] = state.opts.get(self.dest, 0) + 1 # type: ignore + else: + raise ValueError(f"unknown action '{self.action}'") + state.order.append(self.obj) + + +class Argument: + def __init__(self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1): + self.dest = dest + self.nargs = nargs + self.obj = obj + + def process( + self, + value: t.Union[t.Optional[str], t.Sequence[t.Optional[str]]], + state: "ParsingState", + ) -> None: + if self.nargs > 1: + assert value is not None + holes = sum(1 for x in value if x is None) + if holes == len(value): + value = None + elif holes != 0: + raise BadArgumentUsage( + _("Argument {name!r} takes {nargs} values.").format( + name=self.dest, nargs=self.nargs + ) + ) + + if self.nargs == -1 and self.obj.envvar is not None and value == (): + # Replace empty tuple with None so that a value from the + # environment may be tried. + value = None + + state.opts[self.dest] = value # type: ignore + state.order.append(self.obj) + + +class ParsingState: + def __init__(self, rargs: t.List[str]) -> None: + self.opts: t.Dict[str, t.Any] = {} + self.largs: t.List[str] = [] + self.rargs = rargs + self.order: t.List["CoreParameter"] = [] + + +class OptionParser: + """The option parser is an internal class that is ultimately used to + parse options and arguments. It's modelled after optparse and brings + a similar but vastly simplified API. It should generally not be used + directly as the high level Click classes wrap it for you. + + It's not nearly as extensible as optparse or argparse as it does not + implement features that are implemented on a higher level (such as + types or defaults). + + :param ctx: optionally the :class:`~click.Context` where this parser + should go with. + """ + + def __init__(self, ctx: t.Optional["Context"] = None) -> None: + #: The :class:`~click.Context` for this parser. This might be + #: `None` for some advanced use cases. + self.ctx = ctx + #: This controls how the parser deals with interspersed arguments. + #: If this is set to `False`, the parser will stop on the first + #: non-option. Click uses this to implement nested subcommands + #: safely. + self.allow_interspersed_args = True + #: This tells the parser how to deal with unknown options. By + #: default it will error out (which is sensible), but there is a + #: second mode where it will ignore it and continue processing + #: after shifting all the unknown options into the resulting args. + self.ignore_unknown_options = False + + if ctx is not None: + self.allow_interspersed_args = ctx.allow_interspersed_args + self.ignore_unknown_options = ctx.ignore_unknown_options + + self._short_opt: t.Dict[str, Option] = {} + self._long_opt: t.Dict[str, Option] = {} + self._opt_prefixes = {"-", "--"} + self._args: t.List[Argument] = [] + + def add_option( + self, + obj: "CoreOption", + opts: t.Sequence[str], + dest: t.Optional[str], + action: t.Optional[str] = None, + nargs: int = 1, + const: t.Optional[t.Any] = None, + ) -> None: + """Adds a new option named `dest` to the parser. The destination + is not inferred (unlike with optparse) and needs to be explicitly + provided. Action can be any of ``store``, ``store_const``, + ``append``, ``append_const`` or ``count``. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + opts = [normalize_opt(opt, self.ctx) for opt in opts] + option = Option(obj, opts, dest, action=action, nargs=nargs, const=const) + self._opt_prefixes.update(option.prefixes) + for opt in option._short_opts: + self._short_opt[opt] = option + for opt in option._long_opts: + self._long_opt[opt] = option + + def add_argument( + self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1 + ) -> None: + """Adds a positional argument named `dest` to the parser. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + self._args.append(Argument(obj, dest=dest, nargs=nargs)) + + def parse_args( + self, args: t.List[str] + ) -> t.Tuple[t.Dict[str, t.Any], t.List[str], t.List["CoreParameter"]]: + """Parses positional arguments and returns ``(values, args, order)`` + for the parsed options and arguments as well as the leftover + arguments if there are any. The order is a list of objects as they + appear on the command line. If arguments appear multiple times they + will be memorized multiple times as well. + """ + state = ParsingState(args) + try: + self._process_args_for_options(state) + self._process_args_for_args(state) + except UsageError: + if self.ctx is None or not self.ctx.resilient_parsing: + raise + return state.opts, state.largs, state.order + + def _process_args_for_args(self, state: ParsingState) -> None: + pargs, args = _unpack_args( + state.largs + state.rargs, [x.nargs for x in self._args] + ) + + for idx, arg in enumerate(self._args): + arg.process(pargs[idx], state) + + state.largs = args + state.rargs = [] + + def _process_args_for_options(self, state: ParsingState) -> None: + while state.rargs: + arg = state.rargs.pop(0) + arglen = len(arg) + # Double dashes always handled explicitly regardless of what + # prefixes are valid. + if arg == "--": + return + elif arg[:1] in self._opt_prefixes and arglen > 1: + self._process_opts(arg, state) + elif self.allow_interspersed_args: + state.largs.append(arg) + else: + state.rargs.insert(0, arg) + return + + # Say this is the original argument list: + # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] + # ^ + # (we are about to process arg(i)). + # + # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of + # [arg0, ..., arg(i-1)] (any options and their arguments will have + # been removed from largs). + # + # The while loop will usually consume 1 or more arguments per pass. + # If it consumes 1 (eg. arg is an option that takes no arguments), + # then after _process_arg() is done the situation is: + # + # largs = subset of [arg0, ..., arg(i)] + # rargs = [arg(i+1), ..., arg(N-1)] + # + # If allow_interspersed_args is false, largs will always be + # *empty* -- still a subset of [arg0, ..., arg(i-1)], but + # not a very interesting subset! + + def _match_long_opt( + self, opt: str, explicit_value: t.Optional[str], state: ParsingState + ) -> None: + if opt not in self._long_opt: + from difflib import get_close_matches + + possibilities = get_close_matches(opt, self._long_opt) + raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx) + + option = self._long_opt[opt] + if option.takes_value: + # At this point it's safe to modify rargs by injecting the + # explicit value, because no exception is raised in this + # branch. This means that the inserted value will be fully + # consumed. + if explicit_value is not None: + state.rargs.insert(0, explicit_value) + + value = self._get_value_from_state(opt, option, state) + + elif explicit_value is not None: + raise BadOptionUsage( + opt, _("Option {name!r} does not take a value.").format(name=opt) + ) + + else: + value = None + + option.process(value, state) + + def _match_short_opt(self, arg: str, state: ParsingState) -> None: + stop = False + i = 1 + prefix = arg[0] + unknown_options = [] + + for ch in arg[1:]: + opt = normalize_opt(f"{prefix}{ch}", self.ctx) + option = self._short_opt.get(opt) + i += 1 + + if not option: + if self.ignore_unknown_options: + unknown_options.append(ch) + continue + raise NoSuchOption(opt, ctx=self.ctx) + if option.takes_value: + # Any characters left in arg? Pretend they're the + # next arg, and stop consuming characters of arg. + if i < len(arg): + state.rargs.insert(0, arg[i:]) + stop = True + + value = self._get_value_from_state(opt, option, state) + + else: + value = None + + option.process(value, state) + + if stop: + break + + # If we got any unknown options we re-combinate the string of the + # remaining options and re-attach the prefix, then report that + # to the state as new larg. This way there is basic combinatorics + # that can be achieved while still ignoring unknown arguments. + if self.ignore_unknown_options and unknown_options: + state.largs.append(f"{prefix}{''.join(unknown_options)}") + + def _get_value_from_state( + self, option_name: str, option: Option, state: ParsingState + ) -> t.Any: + nargs = option.nargs + + if len(state.rargs) < nargs: + if option.obj._flag_needs_value: + # Option allows omitting the value. + value = _flag_needs_value + else: + raise BadOptionUsage( + option_name, + ngettext( + "Option {name!r} requires an argument.", + "Option {name!r} requires {nargs} arguments.", + nargs, + ).format(name=option_name, nargs=nargs), + ) + elif nargs == 1: + next_rarg = state.rargs[0] + + if ( + option.obj._flag_needs_value + and isinstance(next_rarg, str) + and next_rarg[:1] in self._opt_prefixes + and len(next_rarg) > 1 + ): + # The next arg looks like the start of an option, don't + # use it as the value if omitting the value is allowed. + value = _flag_needs_value + else: + value = state.rargs.pop(0) + else: + value = tuple(state.rargs[:nargs]) + del state.rargs[:nargs] + + return value + + def _process_opts(self, arg: str, state: ParsingState) -> None: + explicit_value = None + # Long option handling happens in two parts. The first part is + # supporting explicitly attached values. In any case, we will try + # to long match the option first. + if "=" in arg: + long_opt, explicit_value = arg.split("=", 1) + else: + long_opt = arg + norm_long_opt = normalize_opt(long_opt, self.ctx) + + # At this point we will match the (assumed) long option through + # the long option matching code. Note that this allows options + # like "-foo" to be matched as long options. + try: + self._match_long_opt(norm_long_opt, explicit_value, state) + except NoSuchOption: + # At this point the long option matching failed, and we need + # to try with short options. However there is a special rule + # which says, that if we have a two character options prefix + # (applies to "--foo" for instance), we do not dispatch to the + # short option code and will instead raise the no option + # error. + if arg[:2] not in self._opt_prefixes: + self._match_short_opt(arg, state) + return + + if not self.ignore_unknown_options: + raise + + state.largs.append(arg) diff --git a/env/lib/python3.11/site-packages/click/py.typed b/env/lib/python3.11/site-packages/click/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.11/site-packages/click/shell_completion.py b/env/lib/python3.11/site-packages/click/shell_completion.py new file mode 100644 index 0000000..c17a8e6 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/shell_completion.py @@ -0,0 +1,580 @@ +import os +import re +import typing as t +from gettext import gettext as _ + +from .core import Argument +from .core import BaseCommand +from .core import Context +from .core import MultiCommand +from .core import Option +from .core import Parameter +from .core import ParameterSource +from .parser import split_arg_string +from .utils import echo + + +def shell_complete( + cli: BaseCommand, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: str, + instruction: str, +) -> int: + """Perform shell completion for the given CLI program. + + :param cli: Command being called. + :param ctx_args: Extra arguments to pass to + ``cli.make_context``. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + :param instruction: Value of ``complete_var`` with the completion + instruction and shell, in the form ``instruction_shell``. + :return: Status code to exit with. + """ + shell, _, instruction = instruction.partition("_") + comp_cls = get_completion_class(shell) + + if comp_cls is None: + return 1 + + comp = comp_cls(cli, ctx_args, prog_name, complete_var) + + if instruction == "source": + echo(comp.source()) + return 0 + + if instruction == "complete": + echo(comp.complete()) + return 0 + + return 1 + + +class CompletionItem: + """Represents a completion value and metadata about the value. The + default metadata is ``type`` to indicate special shell handling, + and ``help`` if a shell supports showing a help string next to the + value. + + Arbitrary parameters can be passed when creating the object, and + accessed using ``item.attr``. If an attribute wasn't passed, + accessing it returns ``None``. + + :param value: The completion suggestion. + :param type: Tells the shell script to provide special completion + support for the type. Click uses ``"dir"`` and ``"file"``. + :param help: String shown next to the value if supported. + :param kwargs: Arbitrary metadata. The built-in implementations + don't use this, but custom type completions paired with custom + shell support could use it. + """ + + __slots__ = ("value", "type", "help", "_info") + + def __init__( + self, + value: t.Any, + type: str = "plain", + help: t.Optional[str] = None, + **kwargs: t.Any, + ) -> None: + self.value = value + self.type = type + self.help = help + self._info = kwargs + + def __getattr__(self, name: str) -> t.Any: + return self._info.get(name) + + +# Only Bash >= 4.4 has the nosort option. +_SOURCE_BASH = """\ +%(complete_func)s() { + local IFS=$'\\n' + local response + + response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD \ +%(complete_var)s=bash_complete $1) + + for completion in $response; do + IFS=',' read type value <<< "$completion" + + if [[ $type == 'dir' ]]; then + COMPREPLY=() + compopt -o dirnames + elif [[ $type == 'file' ]]; then + COMPREPLY=() + compopt -o default + elif [[ $type == 'plain' ]]; then + COMPREPLY+=($value) + fi + done + + return 0 +} + +%(complete_func)s_setup() { + complete -o nosort -F %(complete_func)s %(prog_name)s +} + +%(complete_func)s_setup; +""" + +_SOURCE_ZSH = """\ +#compdef %(prog_name)s + +%(complete_func)s() { + local -a completions + local -a completions_with_descriptions + local -a response + (( ! $+commands[%(prog_name)s] )) && return 1 + + response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) \ +%(complete_var)s=zsh_complete %(prog_name)s)}") + + for type key descr in ${response}; do + if [[ "$type" == "plain" ]]; then + if [[ "$descr" == "_" ]]; then + completions+=("$key") + else + completions_with_descriptions+=("$key":"$descr") + fi + elif [[ "$type" == "dir" ]]; then + _path_files -/ + elif [[ "$type" == "file" ]]; then + _path_files -f + fi + done + + if [ -n "$completions_with_descriptions" ]; then + _describe -V unsorted completions_with_descriptions -U + fi + + if [ -n "$completions" ]; then + compadd -U -V unsorted -a completions + fi +} + +compdef %(complete_func)s %(prog_name)s; +""" + +_SOURCE_FISH = """\ +function %(complete_func)s; + set -l response; + + for value in (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \ +COMP_CWORD=(commandline -t) %(prog_name)s); + set response $response $value; + end; + + for completion in $response; + set -l metadata (string split "," $completion); + + if test $metadata[1] = "dir"; + __fish_complete_directories $metadata[2]; + else if test $metadata[1] = "file"; + __fish_complete_path $metadata[2]; + else if test $metadata[1] = "plain"; + echo $metadata[2]; + end; + end; +end; + +complete --no-files --command %(prog_name)s --arguments \ +"(%(complete_func)s)"; +""" + + +class ShellComplete: + """Base class for providing shell completion support. A subclass for + a given shell will override attributes and methods to implement the + completion instructions (``source`` and ``complete``). + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + + .. versionadded:: 8.0 + """ + + name: t.ClassVar[str] + """Name to register the shell as with :func:`add_completion_class`. + This is used in completion instructions (``{name}_source`` and + ``{name}_complete``). + """ + + source_template: t.ClassVar[str] + """Completion script template formatted by :meth:`source`. This must + be provided by subclasses. + """ + + def __init__( + self, + cli: BaseCommand, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: str, + ) -> None: + self.cli = cli + self.ctx_args = ctx_args + self.prog_name = prog_name + self.complete_var = complete_var + + @property + def func_name(self) -> str: + """The name of the shell function defined by the completion + script. + """ + safe_name = re.sub(r"\W*", "", self.prog_name.replace("-", "_"), re.ASCII) + return f"_{safe_name}_completion" + + def source_vars(self) -> t.Dict[str, t.Any]: + """Vars for formatting :attr:`source_template`. + + By default this provides ``complete_func``, ``complete_var``, + and ``prog_name``. + """ + return { + "complete_func": self.func_name, + "complete_var": self.complete_var, + "prog_name": self.prog_name, + } + + def source(self) -> str: + """Produce the shell script that defines the completion + function. By default this ``%``-style formats + :attr:`source_template` with the dict returned by + :meth:`source_vars`. + """ + return self.source_template % self.source_vars() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + """Use the env vars defined by the shell script to return a + tuple of ``args, incomplete``. This must be implemented by + subclasses. + """ + raise NotImplementedError + + def get_completions( + self, args: t.List[str], incomplete: str + ) -> t.List[CompletionItem]: + """Determine the context and last complete command or parameter + from the complete args. Call that object's ``shell_complete`` + method to get the completions for the incomplete value. + + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + ctx = _resolve_context(self.cli, self.ctx_args, self.prog_name, args) + obj, incomplete = _resolve_incomplete(ctx, args, incomplete) + return obj.shell_complete(ctx, incomplete) + + def format_completion(self, item: CompletionItem) -> str: + """Format a completion item into the form recognized by the + shell script. This must be implemented by subclasses. + + :param item: Completion item to format. + """ + raise NotImplementedError + + def complete(self) -> str: + """Produce the completion data to send back to the shell. + + By default this calls :meth:`get_completion_args`, gets the + completions, then calls :meth:`format_completion` for each + completion. + """ + args, incomplete = self.get_completion_args() + completions = self.get_completions(args, incomplete) + out = [self.format_completion(item) for item in completions] + return "\n".join(out) + + +class BashComplete(ShellComplete): + """Shell completion for Bash.""" + + name = "bash" + source_template = _SOURCE_BASH + + def _check_version(self) -> None: + import subprocess + + output = subprocess.run( + ["bash", "-c", "echo ${BASH_VERSION}"], stdout=subprocess.PIPE + ) + match = re.search(r"^(\d+)\.(\d+)\.\d+", output.stdout.decode()) + + if match is not None: + major, minor = match.groups() + + if major < "4" or major == "4" and minor < "4": + raise RuntimeError( + _( + "Shell completion is not supported for Bash" + " versions older than 4.4." + ) + ) + else: + raise RuntimeError( + _("Couldn't detect Bash version, shell completion is not supported.") + ) + + def source(self) -> str: + self._check_version() + return super().source() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type},{item.value}" + + +class ZshComplete(ShellComplete): + """Shell completion for Zsh.""" + + name = "zsh" + source_template = _SOURCE_ZSH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type}\n{item.value}\n{item.help if item.help else '_'}" + + +class FishComplete(ShellComplete): + """Shell completion for Fish.""" + + name = "fish" + source_template = _SOURCE_FISH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + incomplete = os.environ["COMP_CWORD"] + args = cwords[1:] + + # Fish stores the partial word in both COMP_WORDS and + # COMP_CWORD, remove it from complete args. + if incomplete and args and args[-1] == incomplete: + args.pop() + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + if item.help: + return f"{item.type},{item.value}\t{item.help}" + + return f"{item.type},{item.value}" + + +_available_shells: t.Dict[str, t.Type[ShellComplete]] = { + "bash": BashComplete, + "fish": FishComplete, + "zsh": ZshComplete, +} + + +def add_completion_class( + cls: t.Type[ShellComplete], name: t.Optional[str] = None +) -> None: + """Register a :class:`ShellComplete` subclass under the given name. + The name will be provided by the completion instruction environment + variable during completion. + + :param cls: The completion class that will handle completion for the + shell. + :param name: Name to register the class under. Defaults to the + class's ``name`` attribute. + """ + if name is None: + name = cls.name + + _available_shells[name] = cls + + +def get_completion_class(shell: str) -> t.Optional[t.Type[ShellComplete]]: + """Look up a registered :class:`ShellComplete` subclass by the name + provided by the completion instruction environment variable. If the + name isn't registered, returns ``None``. + + :param shell: Name the class is registered under. + """ + return _available_shells.get(shell) + + +def _is_incomplete_argument(ctx: Context, param: Parameter) -> bool: + """Determine if the given parameter is an argument that can still + accept values. + + :param ctx: Invocation context for the command represented by the + parsed complete args. + :param param: Argument object being checked. + """ + if not isinstance(param, Argument): + return False + + assert param.name is not None + value = ctx.params[param.name] + return ( + param.nargs == -1 + or ctx.get_parameter_source(param.name) is not ParameterSource.COMMANDLINE + or ( + param.nargs > 1 + and isinstance(value, (tuple, list)) + and len(value) < param.nargs + ) + ) + + +def _start_of_option(ctx: Context, value: str) -> bool: + """Check if the value looks like the start of an option.""" + if not value: + return False + + c = value[0] + return c in ctx._opt_prefixes + + +def _is_incomplete_option(ctx: Context, args: t.List[str], param: Parameter) -> bool: + """Determine if the given parameter is an option that needs a value. + + :param args: List of complete args before the incomplete value. + :param param: Option object being checked. + """ + if not isinstance(param, Option): + return False + + if param.is_flag or param.count: + return False + + last_option = None + + for index, arg in enumerate(reversed(args)): + if index + 1 > param.nargs: + break + + if _start_of_option(ctx, arg): + last_option = arg + + return last_option is not None and last_option in param.opts + + +def _resolve_context( + cli: BaseCommand, ctx_args: t.Dict[str, t.Any], prog_name: str, args: t.List[str] +) -> Context: + """Produce the context hierarchy starting with the command and + traversing the complete arguments. This only follows the commands, + it doesn't trigger input prompts or callbacks. + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param args: List of complete args before the incomplete value. + """ + ctx_args["resilient_parsing"] = True + ctx = cli.make_context(prog_name, args.copy(), **ctx_args) + args = ctx.protected_args + ctx.args + + while args: + command = ctx.command + + if isinstance(command, MultiCommand): + if not command.chain: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + ctx = cmd.make_context(name, args, parent=ctx, resilient_parsing=True) + args = ctx.protected_args + ctx.args + else: + while args: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + sub_ctx = cmd.make_context( + name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + resilient_parsing=True, + ) + args = sub_ctx.args + + ctx = sub_ctx + args = [*sub_ctx.protected_args, *sub_ctx.args] + else: + break + + return ctx + + +def _resolve_incomplete( + ctx: Context, args: t.List[str], incomplete: str +) -> t.Tuple[t.Union[BaseCommand, Parameter], str]: + """Find the Click object that will handle the completion of the + incomplete value. Return the object and the incomplete value. + + :param ctx: Invocation context for the command represented by + the parsed complete args. + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + # Different shells treat an "=" between a long option name and + # value differently. Might keep the value joined, return the "=" + # as a separate item, or return the split name and value. Always + # split and discard the "=" to make completion easier. + if incomplete == "=": + incomplete = "" + elif "=" in incomplete and _start_of_option(ctx, incomplete): + name, _, incomplete = incomplete.partition("=") + args.append(name) + + # The "--" marker tells Click to stop treating values as options + # even if they start with the option character. If it hasn't been + # given and the incomplete arg looks like an option, the current + # command will provide option name completions. + if "--" not in args and _start_of_option(ctx, incomplete): + return ctx.command, incomplete + + params = ctx.command.get_params(ctx) + + # If the last complete arg is an option name with an incomplete + # value, the option will provide value completions. + for param in params: + if _is_incomplete_option(ctx, args, param): + return param, incomplete + + # It's not an option name or value. The first argument without a + # parsed value will provide value completions. + for param in params: + if _is_incomplete_argument(ctx, param): + return param, incomplete + + # There were no unparsed arguments, the command may be a group that + # will provide command name completions. + return ctx.command, incomplete diff --git a/env/lib/python3.11/site-packages/click/termui.py b/env/lib/python3.11/site-packages/click/termui.py new file mode 100644 index 0000000..bfb2f5a --- /dev/null +++ b/env/lib/python3.11/site-packages/click/termui.py @@ -0,0 +1,787 @@ +import inspect +import io +import itertools +import os +import sys +import typing as t +from gettext import gettext as _ + +from ._compat import isatty +from ._compat import strip_ansi +from ._compat import WIN +from .exceptions import Abort +from .exceptions import UsageError +from .globals import resolve_color_default +from .types import Choice +from .types import convert_type +from .types import ParamType +from .utils import echo +from .utils import LazyFile + +if t.TYPE_CHECKING: + from ._termui_impl import ProgressBar + +V = t.TypeVar("V") + +# The prompt functions to use. The doc tools currently override these +# functions to customize how they work. +visible_prompt_func: t.Callable[[str], str] = input + +_ansi_colors = { + "black": 30, + "red": 31, + "green": 32, + "yellow": 33, + "blue": 34, + "magenta": 35, + "cyan": 36, + "white": 37, + "reset": 39, + "bright_black": 90, + "bright_red": 91, + "bright_green": 92, + "bright_yellow": 93, + "bright_blue": 94, + "bright_magenta": 95, + "bright_cyan": 96, + "bright_white": 97, +} +_ansi_reset_all = "\033[0m" + + +def hidden_prompt_func(prompt: str) -> str: + import getpass + + return getpass.getpass(prompt) + + +def _build_prompt( + text: str, + suffix: str, + show_default: bool = False, + default: t.Optional[t.Any] = None, + show_choices: bool = True, + type: t.Optional[ParamType] = None, +) -> str: + prompt = text + if type is not None and show_choices and isinstance(type, Choice): + prompt += f" ({', '.join(map(str, type.choices))})" + if default is not None and show_default: + prompt = f"{prompt} [{_format_default(default)}]" + return f"{prompt}{suffix}" + + +def _format_default(default: t.Any) -> t.Any: + if isinstance(default, (io.IOBase, LazyFile)) and hasattr(default, "name"): + return default.name # type: ignore + + return default + + +def prompt( + text: str, + default: t.Optional[t.Any] = None, + hide_input: bool = False, + confirmation_prompt: t.Union[bool, str] = False, + type: t.Optional[t.Union[ParamType, t.Any]] = None, + value_proc: t.Optional[t.Callable[[str], t.Any]] = None, + prompt_suffix: str = ": ", + show_default: bool = True, + err: bool = False, + show_choices: bool = True, +) -> t.Any: + """Prompts a user for input. This is a convenience function that can + be used to prompt a user for input later. + + If the user aborts the input by sending an interrupt signal, this + function will catch it and raise a :exc:`Abort` exception. + + :param text: the text to show for the prompt. + :param default: the default value to use if no input happens. If this + is not given it will prompt until it's aborted. + :param hide_input: if this is set to true then the input value will + be hidden. + :param confirmation_prompt: Prompt a second time to confirm the + value. Can be set to a string instead of ``True`` to customize + the message. + :param type: the type to use to check the value against. + :param value_proc: if this parameter is provided it's a function that + is invoked instead of the type conversion to + convert a value. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + :param show_choices: Show or hide choices if the passed type is a Choice. + For example if type is a Choice of either day or week, + show_choices is true and text is "Group by" then the + prompt will be "Group by (day, week): ". + + .. versionadded:: 8.0 + ``confirmation_prompt`` can be a custom string. + + .. versionadded:: 7.0 + Added the ``show_choices`` parameter. + + .. versionadded:: 6.0 + Added unicode support for cmd.exe on Windows. + + .. versionadded:: 4.0 + Added the `err` parameter. + + """ + + def prompt_func(text: str) -> str: + f = hidden_prompt_func if hide_input else visible_prompt_func + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(text.rstrip(" "), nl=False, err=err) + # Echo a space to stdout to work around an issue where + # readline causes backspace to clear the whole line. + return f(" ") + except (KeyboardInterrupt, EOFError): + # getpass doesn't print a newline if the user aborts input with ^C. + # Allegedly this behavior is inherited from getpass(3). + # A doc bug has been filed at https://bugs.python.org/issue24711 + if hide_input: + echo(None, err=err) + raise Abort() from None + + if value_proc is None: + value_proc = convert_type(type, default) + + prompt = _build_prompt( + text, prompt_suffix, show_default, default, show_choices, type + ) + + if confirmation_prompt: + if confirmation_prompt is True: + confirmation_prompt = _("Repeat for confirmation") + + confirmation_prompt = _build_prompt(confirmation_prompt, prompt_suffix) + + while True: + while True: + value = prompt_func(prompt) + if value: + break + elif default is not None: + value = default + break + try: + result = value_proc(value) + except UsageError as e: + if hide_input: + echo(_("Error: The value you entered was invalid."), err=err) + else: + echo(_("Error: {e.message}").format(e=e), err=err) # noqa: B306 + continue + if not confirmation_prompt: + return result + while True: + value2 = prompt_func(confirmation_prompt) + is_empty = not value and not value2 + if value2 or is_empty: + break + if value == value2: + return result + echo(_("Error: The two entered values do not match."), err=err) + + +def confirm( + text: str, + default: t.Optional[bool] = False, + abort: bool = False, + prompt_suffix: str = ": ", + show_default: bool = True, + err: bool = False, +) -> bool: + """Prompts for confirmation (yes/no question). + + If the user aborts the input by sending a interrupt signal this + function will catch it and raise a :exc:`Abort` exception. + + :param text: the question to ask. + :param default: The default value to use when no input is given. If + ``None``, repeat until input is given. + :param abort: if this is set to `True` a negative answer aborts the + exception by raising :exc:`Abort`. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + + .. versionchanged:: 8.0 + Repeat until input is given if ``default`` is ``None``. + + .. versionadded:: 4.0 + Added the ``err`` parameter. + """ + prompt = _build_prompt( + text, + prompt_suffix, + show_default, + "y/n" if default is None else ("Y/n" if default else "y/N"), + ) + + while True: + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(prompt.rstrip(" "), nl=False, err=err) + # Echo a space to stdout to work around an issue where + # readline causes backspace to clear the whole line. + value = visible_prompt_func(" ").lower().strip() + except (KeyboardInterrupt, EOFError): + raise Abort() from None + if value in ("y", "yes"): + rv = True + elif value in ("n", "no"): + rv = False + elif default is not None and value == "": + rv = default + else: + echo(_("Error: invalid input"), err=err) + continue + break + if abort and not rv: + raise Abort() + return rv + + +def echo_via_pager( + text_or_generator: t.Union[t.Iterable[str], t.Callable[[], t.Iterable[str]], str], + color: t.Optional[bool] = None, +) -> None: + """This function takes a text and shows it via an environment specific + pager on stdout. + + .. versionchanged:: 3.0 + Added the `color` flag. + + :param text_or_generator: the text to page, or alternatively, a + generator emitting the text to page. + :param color: controls if the pager supports ANSI colors or not. The + default is autodetection. + """ + color = resolve_color_default(color) + + if inspect.isgeneratorfunction(text_or_generator): + i = t.cast(t.Callable[[], t.Iterable[str]], text_or_generator)() + elif isinstance(text_or_generator, str): + i = [text_or_generator] + else: + i = iter(t.cast(t.Iterable[str], text_or_generator)) + + # convert every element of i to a text type if necessary + text_generator = (el if isinstance(el, str) else str(el) for el in i) + + from ._termui_impl import pager + + return pager(itertools.chain(text_generator, "\n"), color) + + +def progressbar( + iterable: t.Optional[t.Iterable[V]] = None, + length: t.Optional[int] = None, + label: t.Optional[str] = None, + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + fill_char: str = "#", + empty_char: str = "-", + bar_template: str = "%(label)s [%(bar)s] %(info)s", + info_sep: str = " ", + width: int = 36, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, +) -> "ProgressBar[V]": + """This function creates an iterable context manager that can be used + to iterate over something while showing a progress bar. It will + either iterate over the `iterable` or `length` items (that are counted + up). While iteration happens, this function will print a rendered + progress bar to the given `file` (defaults to stdout) and will attempt + to calculate remaining time and more. By default, this progress bar + will not be rendered if the file is not a terminal. + + The context manager creates the progress bar. When the context + manager is entered the progress bar is already created. With every + iteration over the progress bar, the iterable passed to the bar is + advanced and the bar is updated. When the context manager exits, + a newline is printed and the progress bar is finalized on screen. + + Note: The progress bar is currently designed for use cases where the + total progress can be expected to take at least several seconds. + Because of this, the ProgressBar class object won't display + progress that is considered too fast, and progress where the time + between steps is less than a second. + + No printing must happen or the progress bar will be unintentionally + destroyed. + + Example usage:: + + with progressbar(items) as bar: + for item in bar: + do_something_with(item) + + Alternatively, if no iterable is specified, one can manually update the + progress bar through the `update()` method instead of directly + iterating over the progress bar. The update method accepts the number + of steps to increment the bar with:: + + with progressbar(length=chunks.total_bytes) as bar: + for chunk in chunks: + process_chunk(chunk) + bar.update(chunks.bytes) + + The ``update()`` method also takes an optional value specifying the + ``current_item`` at the new position. This is useful when used + together with ``item_show_func`` to customize the output for each + manual step:: + + with click.progressbar( + length=total_size, + label='Unzipping archive', + item_show_func=lambda a: a.filename + ) as bar: + for archive in zip_file: + archive.extract() + bar.update(archive.size, archive) + + :param iterable: an iterable to iterate over. If not provided the length + is required. + :param length: the number of items to iterate over. By default the + progressbar will attempt to ask the iterator about its + length, which might or might not work. If an iterable is + also provided this parameter can be used to override the + length. If an iterable is not provided the progress bar + will iterate over a range of that length. + :param label: the label to show next to the progress bar. + :param show_eta: enables or disables the estimated time display. This is + automatically disabled if the length cannot be + determined. + :param show_percent: enables or disables the percentage display. The + default is `True` if the iterable has a length or + `False` if not. + :param show_pos: enables or disables the absolute position display. The + default is `False`. + :param item_show_func: A function called with the current item which + can return a string to show next to the progress bar. If the + function returns ``None`` nothing is shown. The current item can + be ``None``, such as when entering and exiting the bar. + :param fill_char: the character to use to show the filled part of the + progress bar. + :param empty_char: the character to use to show the non-filled part of + the progress bar. + :param bar_template: the format string to use as template for the bar. + The parameters in it are ``label`` for the label, + ``bar`` for the progress bar and ``info`` for the + info section. + :param info_sep: the separator between multiple info items (eta etc.) + :param width: the width of the progress bar in characters, 0 means full + terminal width + :param file: The file to write to. If this is not a terminal then + only the label is printed. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are included anywhere in the progress bar output + which is not the case by default. + :param update_min_steps: Render only when this many updates have + completed. This allows tuning for very fast iterators. + + .. versionchanged:: 8.0 + Output is shown even if execution time is less than 0.5 seconds. + + .. versionchanged:: 8.0 + ``item_show_func`` shows the current item, not the previous one. + + .. versionchanged:: 8.0 + Labels are echoed if the output is not a TTY. Reverts a change + in 7.0 that removed all output. + + .. versionadded:: 8.0 + Added the ``update_min_steps`` parameter. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. Added the ``update`` method to + the object. + + .. versionadded:: 2.0 + """ + from ._termui_impl import ProgressBar + + color = resolve_color_default(color) + return ProgressBar( + iterable=iterable, + length=length, + show_eta=show_eta, + show_percent=show_percent, + show_pos=show_pos, + item_show_func=item_show_func, + fill_char=fill_char, + empty_char=empty_char, + bar_template=bar_template, + info_sep=info_sep, + file=file, + label=label, + width=width, + color=color, + update_min_steps=update_min_steps, + ) + + +def clear() -> None: + """Clears the terminal screen. This will have the effect of clearing + the whole visible space of the terminal and moving the cursor to the + top left. This does not do anything if not connected to a terminal. + + .. versionadded:: 2.0 + """ + if not isatty(sys.stdout): + return + if WIN: + os.system("cls") + else: + sys.stdout.write("\033[2J\033[1;1H") + + +def _interpret_color( + color: t.Union[int, t.Tuple[int, int, int], str], offset: int = 0 +) -> str: + if isinstance(color, int): + return f"{38 + offset};5;{color:d}" + + if isinstance(color, (tuple, list)): + r, g, b = color + return f"{38 + offset};2;{r:d};{g:d};{b:d}" + + return str(_ansi_colors[color] + offset) + + +def style( + text: t.Any, + fg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bold: t.Optional[bool] = None, + dim: t.Optional[bool] = None, + underline: t.Optional[bool] = None, + overline: t.Optional[bool] = None, + italic: t.Optional[bool] = None, + blink: t.Optional[bool] = None, + reverse: t.Optional[bool] = None, + strikethrough: t.Optional[bool] = None, + reset: bool = True, +) -> str: + """Styles a text with ANSI styles and returns the new string. By + default the styling is self contained which means that at the end + of the string a reset code is issued. This can be prevented by + passing ``reset=False``. + + Examples:: + + click.echo(click.style('Hello World!', fg='green')) + click.echo(click.style('ATTENTION!', blink=True)) + click.echo(click.style('Some things', reverse=True, fg='cyan')) + click.echo(click.style('More colors', fg=(255, 12, 128), bg=117)) + + Supported color names: + + * ``black`` (might be a gray) + * ``red`` + * ``green`` + * ``yellow`` (might be an orange) + * ``blue`` + * ``magenta`` + * ``cyan`` + * ``white`` (might be light gray) + * ``bright_black`` + * ``bright_red`` + * ``bright_green`` + * ``bright_yellow`` + * ``bright_blue`` + * ``bright_magenta`` + * ``bright_cyan`` + * ``bright_white`` + * ``reset`` (reset the color code only) + + If the terminal supports it, color may also be specified as: + + - An integer in the interval [0, 255]. The terminal must support + 8-bit/256-color mode. + - An RGB tuple of three integers in [0, 255]. The terminal must + support 24-bit/true-color mode. + + See https://en.wikipedia.org/wiki/ANSI_color and + https://gist.github.com/XVilka/8346728 for more information. + + :param text: the string to style with ansi codes. + :param fg: if provided this will become the foreground color. + :param bg: if provided this will become the background color. + :param bold: if provided this will enable or disable bold mode. + :param dim: if provided this will enable or disable dim mode. This is + badly supported. + :param underline: if provided this will enable or disable underline. + :param overline: if provided this will enable or disable overline. + :param italic: if provided this will enable or disable italic. + :param blink: if provided this will enable or disable blinking. + :param reverse: if provided this will enable or disable inverse + rendering (foreground becomes background and the + other way round). + :param strikethrough: if provided this will enable or disable + striking through text. + :param reset: by default a reset-all code is added at the end of the + string which means that styles do not carry over. This + can be disabled to compose styles. + + .. versionchanged:: 8.0 + A non-string ``message`` is converted to a string. + + .. versionchanged:: 8.0 + Added support for 256 and RGB color codes. + + .. versionchanged:: 8.0 + Added the ``strikethrough``, ``italic``, and ``overline`` + parameters. + + .. versionchanged:: 7.0 + Added support for bright colors. + + .. versionadded:: 2.0 + """ + if not isinstance(text, str): + text = str(text) + + bits = [] + + if fg: + try: + bits.append(f"\033[{_interpret_color(fg)}m") + except KeyError: + raise TypeError(f"Unknown color {fg!r}") from None + + if bg: + try: + bits.append(f"\033[{_interpret_color(bg, 10)}m") + except KeyError: + raise TypeError(f"Unknown color {bg!r}") from None + + if bold is not None: + bits.append(f"\033[{1 if bold else 22}m") + if dim is not None: + bits.append(f"\033[{2 if dim else 22}m") + if underline is not None: + bits.append(f"\033[{4 if underline else 24}m") + if overline is not None: + bits.append(f"\033[{53 if overline else 55}m") + if italic is not None: + bits.append(f"\033[{3 if italic else 23}m") + if blink is not None: + bits.append(f"\033[{5 if blink else 25}m") + if reverse is not None: + bits.append(f"\033[{7 if reverse else 27}m") + if strikethrough is not None: + bits.append(f"\033[{9 if strikethrough else 29}m") + bits.append(text) + if reset: + bits.append(_ansi_reset_all) + return "".join(bits) + + +def unstyle(text: str) -> str: + """Removes ANSI styling information from a string. Usually it's not + necessary to use this function as Click's echo function will + automatically remove styling if necessary. + + .. versionadded:: 2.0 + + :param text: the text to remove style information from. + """ + return strip_ansi(text) + + +def secho( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO[t.AnyStr]] = None, + nl: bool = True, + err: bool = False, + color: t.Optional[bool] = None, + **styles: t.Any, +) -> None: + """This function combines :func:`echo` and :func:`style` into one + call. As such the following two calls are the same:: + + click.secho('Hello World!', fg='green') + click.echo(click.style('Hello World!', fg='green')) + + All keyword arguments are forwarded to the underlying functions + depending on which one they go with. + + Non-string types will be converted to :class:`str`. However, + :class:`bytes` are passed directly to :meth:`echo` without applying + style. If you want to style bytes that represent text, call + :meth:`bytes.decode` first. + + .. versionchanged:: 8.0 + A non-string ``message`` is converted to a string. Bytes are + passed through without style applied. + + .. versionadded:: 2.0 + """ + if message is not None and not isinstance(message, (bytes, bytearray)): + message = style(message, **styles) + + return echo(message, file=file, nl=nl, err=err, color=color) + + +def edit( + text: t.Optional[t.AnyStr] = None, + editor: t.Optional[str] = None, + env: t.Optional[t.Mapping[str, str]] = None, + require_save: bool = True, + extension: str = ".txt", + filename: t.Optional[str] = None, +) -> t.Optional[t.AnyStr]: + r"""Edits the given text in the defined editor. If an editor is given + (should be the full path to the executable but the regular operating + system search path is used for finding the executable) it overrides + the detected editor. Optionally, some environment variables can be + used. If the editor is closed without changes, `None` is returned. In + case a file is edited directly the return value is always `None` and + `require_save` and `extension` are ignored. + + If the editor cannot be opened a :exc:`UsageError` is raised. + + Note for Windows: to simplify cross-platform usage, the newlines are + automatically converted from POSIX to Windows and vice versa. As such, + the message here will have ``\n`` as newline markers. + + :param text: the text to edit. + :param editor: optionally the editor to use. Defaults to automatic + detection. + :param env: environment variables to forward to the editor. + :param require_save: if this is true, then not saving in the editor + will make the return value become `None`. + :param extension: the extension to tell the editor about. This defaults + to `.txt` but changing this might change syntax + highlighting. + :param filename: if provided it will edit this file instead of the + provided text contents. It will not use a temporary + file as an indirection in that case. + """ + from ._termui_impl import Editor + + ed = Editor(editor=editor, env=env, require_save=require_save, extension=extension) + + if filename is None: + return ed.edit(text) + + ed.edit_file(filename) + return None + + +def launch(url: str, wait: bool = False, locate: bool = False) -> int: + """This function launches the given URL (or filename) in the default + viewer application for this file type. If this is an executable, it + might launch the executable in a new session. The return value is + the exit code of the launched application. Usually, ``0`` indicates + success. + + Examples:: + + click.launch('https://click.palletsprojects.com/') + click.launch('/my/downloaded/file', locate=True) + + .. versionadded:: 2.0 + + :param url: URL or filename of the thing to launch. + :param wait: Wait for the program to exit before returning. This + only works if the launched program blocks. In particular, + ``xdg-open`` on Linux does not block. + :param locate: if this is set to `True` then instead of launching the + application associated with the URL it will attempt to + launch a file manager with the file located. This + might have weird effects if the URL does not point to + the filesystem. + """ + from ._termui_impl import open_url + + return open_url(url, wait=wait, locate=locate) + + +# If this is provided, getchar() calls into this instead. This is used +# for unittesting purposes. +_getchar: t.Optional[t.Callable[[bool], str]] = None + + +def getchar(echo: bool = False) -> str: + """Fetches a single character from the terminal and returns it. This + will always return a unicode character and under certain rare + circumstances this might return more than one character. The + situations which more than one character is returned is when for + whatever reason multiple characters end up in the terminal buffer or + standard input was not actually a terminal. + + Note that this will always read from the terminal, even if something + is piped into the standard input. + + Note for Windows: in rare cases when typing non-ASCII characters, this + function might wait for a second character and then return both at once. + This is because certain Unicode characters look like special-key markers. + + .. versionadded:: 2.0 + + :param echo: if set to `True`, the character read will also show up on + the terminal. The default is to not show it. + """ + global _getchar + + if _getchar is None: + from ._termui_impl import getchar as f + + _getchar = f + + return _getchar(echo) + + +def raw_terminal() -> t.ContextManager[int]: + from ._termui_impl import raw_terminal as f + + return f() + + +def pause(info: t.Optional[str] = None, err: bool = False) -> None: + """This command stops execution and waits for the user to press any + key to continue. This is similar to the Windows batch "pause" + command. If the program is not run through a terminal, this command + will instead do nothing. + + .. versionadded:: 2.0 + + .. versionadded:: 4.0 + Added the `err` parameter. + + :param info: The message to print before pausing. Defaults to + ``"Press any key to continue..."``. + :param err: if set to message goes to ``stderr`` instead of + ``stdout``, the same as with echo. + """ + if not isatty(sys.stdin) or not isatty(sys.stdout): + return + + if info is None: + info = _("Press any key to continue...") + + try: + if info: + echo(info, nl=False, err=err) + try: + getchar() + except (KeyboardInterrupt, EOFError): + pass + finally: + if info: + echo(err=err) diff --git a/env/lib/python3.11/site-packages/click/testing.py b/env/lib/python3.11/site-packages/click/testing.py new file mode 100644 index 0000000..e395c2e --- /dev/null +++ b/env/lib/python3.11/site-packages/click/testing.py @@ -0,0 +1,479 @@ +import contextlib +import io +import os +import shlex +import shutil +import sys +import tempfile +import typing as t +from types import TracebackType + +from . import formatting +from . import termui +from . import utils +from ._compat import _find_binary_reader + +if t.TYPE_CHECKING: + from .core import BaseCommand + + +class EchoingStdin: + def __init__(self, input: t.BinaryIO, output: t.BinaryIO) -> None: + self._input = input + self._output = output + self._paused = False + + def __getattr__(self, x: str) -> t.Any: + return getattr(self._input, x) + + def _echo(self, rv: bytes) -> bytes: + if not self._paused: + self._output.write(rv) + + return rv + + def read(self, n: int = -1) -> bytes: + return self._echo(self._input.read(n)) + + def read1(self, n: int = -1) -> bytes: + return self._echo(self._input.read1(n)) # type: ignore + + def readline(self, n: int = -1) -> bytes: + return self._echo(self._input.readline(n)) + + def readlines(self) -> t.List[bytes]: + return [self._echo(x) for x in self._input.readlines()] + + def __iter__(self) -> t.Iterator[bytes]: + return iter(self._echo(x) for x in self._input) + + def __repr__(self) -> str: + return repr(self._input) + + +@contextlib.contextmanager +def _pause_echo(stream: t.Optional[EchoingStdin]) -> t.Iterator[None]: + if stream is None: + yield + else: + stream._paused = True + yield + stream._paused = False + + +class _NamedTextIOWrapper(io.TextIOWrapper): + def __init__( + self, buffer: t.BinaryIO, name: str, mode: str, **kwargs: t.Any + ) -> None: + super().__init__(buffer, **kwargs) + self._name = name + self._mode = mode + + @property + def name(self) -> str: + return self._name + + @property + def mode(self) -> str: + return self._mode + + +def make_input_stream( + input: t.Optional[t.Union[str, bytes, t.IO]], charset: str +) -> t.BinaryIO: + # Is already an input stream. + if hasattr(input, "read"): + rv = _find_binary_reader(t.cast(t.IO, input)) + + if rv is not None: + return rv + + raise TypeError("Could not find binary reader for input stream.") + + if input is None: + input = b"" + elif isinstance(input, str): + input = input.encode(charset) + + return io.BytesIO(t.cast(bytes, input)) + + +class Result: + """Holds the captured result of an invoked CLI script.""" + + def __init__( + self, + runner: "CliRunner", + stdout_bytes: bytes, + stderr_bytes: t.Optional[bytes], + return_value: t.Any, + exit_code: int, + exception: t.Optional[BaseException], + exc_info: t.Optional[ + t.Tuple[t.Type[BaseException], BaseException, TracebackType] + ] = None, + ): + #: The runner that created the result + self.runner = runner + #: The standard output as bytes. + self.stdout_bytes = stdout_bytes + #: The standard error as bytes, or None if not available + self.stderr_bytes = stderr_bytes + #: The value returned from the invoked command. + #: + #: .. versionadded:: 8.0 + self.return_value = return_value + #: The exit code as integer. + self.exit_code = exit_code + #: The exception that happened if one did. + self.exception = exception + #: The traceback + self.exc_info = exc_info + + @property + def output(self) -> str: + """The (standard) output as unicode string.""" + return self.stdout + + @property + def stdout(self) -> str: + """The standard output as unicode string.""" + return self.stdout_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + @property + def stderr(self) -> str: + """The standard error as unicode string.""" + if self.stderr_bytes is None: + raise ValueError("stderr not separately captured") + return self.stderr_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + def __repr__(self) -> str: + exc_str = repr(self.exception) if self.exception else "okay" + return f"<{type(self).__name__} {exc_str}>" + + +class CliRunner: + """The CLI runner provides functionality to invoke a Click command line + script for unittesting purposes in a isolated environment. This only + works in single-threaded systems without any concurrency as it changes the + global interpreter state. + + :param charset: the character set for the input and output data. + :param env: a dictionary with environment variables for overriding. + :param echo_stdin: if this is set to `True`, then reading from stdin writes + to stdout. This is useful for showing examples in + some circumstances. Note that regular prompts + will automatically echo the input. + :param mix_stderr: if this is set to `False`, then stdout and stderr are + preserved as independent streams. This is useful for + Unix-philosophy apps that have predictable stdout and + noisy stderr, such that each may be measured + independently + """ + + def __init__( + self, + charset: str = "utf-8", + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + echo_stdin: bool = False, + mix_stderr: bool = True, + ) -> None: + self.charset = charset + self.env = env or {} + self.echo_stdin = echo_stdin + self.mix_stderr = mix_stderr + + def get_default_prog_name(self, cli: "BaseCommand") -> str: + """Given a command object it will return the default program name + for it. The default is the `name` attribute or ``"root"`` if not + set. + """ + return cli.name or "root" + + def make_env( + self, overrides: t.Optional[t.Mapping[str, t.Optional[str]]] = None + ) -> t.Mapping[str, t.Optional[str]]: + """Returns the environment overrides for invoking a script.""" + rv = dict(self.env) + if overrides: + rv.update(overrides) + return rv + + @contextlib.contextmanager + def isolation( + self, + input: t.Optional[t.Union[str, bytes, t.IO]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + color: bool = False, + ) -> t.Iterator[t.Tuple[io.BytesIO, t.Optional[io.BytesIO]]]: + """A context manager that sets up the isolation for invoking of a + command line tool. This sets up stdin with the given input data + and `os.environ` with the overrides from the given dictionary. + This also rebinds some internals in Click to be mocked (like the + prompt functionality). + + This is automatically done in the :meth:`invoke` method. + + :param input: the input stream to put into sys.stdin. + :param env: the environment overrides as dictionary. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + ``stderr`` is opened with ``errors="backslashreplace"`` + instead of the default ``"strict"``. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + """ + bytes_input = make_input_stream(input, self.charset) + echo_input = None + + old_stdin = sys.stdin + old_stdout = sys.stdout + old_stderr = sys.stderr + old_forced_width = formatting.FORCED_WIDTH + formatting.FORCED_WIDTH = 80 + + env = self.make_env(env) + + bytes_output = io.BytesIO() + + if self.echo_stdin: + bytes_input = echo_input = t.cast( + t.BinaryIO, EchoingStdin(bytes_input, bytes_output) + ) + + sys.stdin = text_input = _NamedTextIOWrapper( + bytes_input, encoding=self.charset, name="", mode="r" + ) + + if self.echo_stdin: + # Force unbuffered reads, otherwise TextIOWrapper reads a + # large chunk which is echoed early. + text_input._CHUNK_SIZE = 1 # type: ignore + + sys.stdout = _NamedTextIOWrapper( + bytes_output, encoding=self.charset, name="", mode="w" + ) + + bytes_error = None + if self.mix_stderr: + sys.stderr = sys.stdout + else: + bytes_error = io.BytesIO() + sys.stderr = _NamedTextIOWrapper( + bytes_error, + encoding=self.charset, + name="", + mode="w", + errors="backslashreplace", + ) + + @_pause_echo(echo_input) # type: ignore + def visible_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(prompt or "") + val = text_input.readline().rstrip("\r\n") + sys.stdout.write(f"{val}\n") + sys.stdout.flush() + return val + + @_pause_echo(echo_input) # type: ignore + def hidden_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(f"{prompt or ''}\n") + sys.stdout.flush() + return text_input.readline().rstrip("\r\n") + + @_pause_echo(echo_input) # type: ignore + def _getchar(echo: bool) -> str: + char = sys.stdin.read(1) + + if echo: + sys.stdout.write(char) + + sys.stdout.flush() + return char + + default_color = color + + def should_strip_ansi( + stream: t.Optional[t.IO] = None, color: t.Optional[bool] = None + ) -> bool: + if color is None: + return not default_color + return not color + + old_visible_prompt_func = termui.visible_prompt_func + old_hidden_prompt_func = termui.hidden_prompt_func + old__getchar_func = termui._getchar + old_should_strip_ansi = utils.should_strip_ansi # type: ignore + termui.visible_prompt_func = visible_input + termui.hidden_prompt_func = hidden_input + termui._getchar = _getchar + utils.should_strip_ansi = should_strip_ansi # type: ignore + + old_env = {} + try: + for key, value in env.items(): + old_env[key] = os.environ.get(key) + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + yield (bytes_output, bytes_error) + finally: + for key, value in old_env.items(): + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + sys.stdout = old_stdout + sys.stderr = old_stderr + sys.stdin = old_stdin + termui.visible_prompt_func = old_visible_prompt_func + termui.hidden_prompt_func = old_hidden_prompt_func + termui._getchar = old__getchar_func + utils.should_strip_ansi = old_should_strip_ansi # type: ignore + formatting.FORCED_WIDTH = old_forced_width + + def invoke( + self, + cli: "BaseCommand", + args: t.Optional[t.Union[str, t.Sequence[str]]] = None, + input: t.Optional[t.Union[str, bytes, t.IO]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + catch_exceptions: bool = True, + color: bool = False, + **extra: t.Any, + ) -> Result: + """Invokes a command in an isolated environment. The arguments are + forwarded directly to the command line script, the `extra` keyword + arguments are passed to the :meth:`~clickpkg.Command.main` function of + the command. + + This returns a :class:`Result` object. + + :param cli: the command to invoke + :param args: the arguments to invoke. It may be given as an iterable + or a string. When given as string it will be interpreted + as a Unix shell command. More details at + :func:`shlex.split`. + :param input: the input data for `sys.stdin`. + :param env: the environment overrides. + :param catch_exceptions: Whether to catch any other exceptions than + ``SystemExit``. + :param extra: the keyword arguments to pass to :meth:`main`. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + The result object has the ``return_value`` attribute with + the value returned from the invoked command. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionchanged:: 3.0 + Added the ``catch_exceptions`` parameter. + + .. versionchanged:: 3.0 + The result object has the ``exc_info`` attribute with the + traceback if available. + """ + exc_info = None + with self.isolation(input=input, env=env, color=color) as outstreams: + return_value = None + exception: t.Optional[BaseException] = None + exit_code = 0 + + if isinstance(args, str): + args = shlex.split(args) + + try: + prog_name = extra.pop("prog_name") + except KeyError: + prog_name = self.get_default_prog_name(cli) + + try: + return_value = cli.main(args=args or (), prog_name=prog_name, **extra) + except SystemExit as e: + exc_info = sys.exc_info() + e_code = t.cast(t.Optional[t.Union[int, t.Any]], e.code) + + if e_code is None: + e_code = 0 + + if e_code != 0: + exception = e + + if not isinstance(e_code, int): + sys.stdout.write(str(e_code)) + sys.stdout.write("\n") + e_code = 1 + + exit_code = e_code + + except Exception as e: + if not catch_exceptions: + raise + exception = e + exit_code = 1 + exc_info = sys.exc_info() + finally: + sys.stdout.flush() + stdout = outstreams[0].getvalue() + if self.mix_stderr: + stderr = None + else: + stderr = outstreams[1].getvalue() # type: ignore + + return Result( + runner=self, + stdout_bytes=stdout, + stderr_bytes=stderr, + return_value=return_value, + exit_code=exit_code, + exception=exception, + exc_info=exc_info, # type: ignore + ) + + @contextlib.contextmanager + def isolated_filesystem( + self, temp_dir: t.Optional[t.Union[str, os.PathLike]] = None + ) -> t.Iterator[str]: + """A context manager that creates a temporary directory and + changes the current working directory to it. This isolates tests + that affect the contents of the CWD to prevent them from + interfering with each other. + + :param temp_dir: Create the temporary directory under this + directory. If given, the created directory is not removed + when exiting. + + .. versionchanged:: 8.0 + Added the ``temp_dir`` parameter. + """ + cwd = os.getcwd() + dt = tempfile.mkdtemp(dir=temp_dir) # type: ignore[type-var] + os.chdir(dt) + + try: + yield t.cast(str, dt) + finally: + os.chdir(cwd) + + if temp_dir is None: + try: + shutil.rmtree(dt) + except OSError: # noqa: B014 + pass diff --git a/env/lib/python3.11/site-packages/click/types.py b/env/lib/python3.11/site-packages/click/types.py new file mode 100644 index 0000000..b45ee53 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/types.py @@ -0,0 +1,1073 @@ +import os +import stat +import typing as t +from datetime import datetime +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import _get_argv_encoding +from ._compat import get_filesystem_encoding +from ._compat import open_stream +from .exceptions import BadParameter +from .utils import LazyFile +from .utils import safecall + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + from .core import Parameter + from .shell_completion import CompletionItem + + +class ParamType: + """Represents the type of a parameter. Validates and converts values + from the command line or Python into the correct type. + + To implement a custom type, subclass and implement at least the + following: + + - The :attr:`name` class attribute must be set. + - Calling an instance of the type with ``None`` must return + ``None``. This is already implemented by default. + - :meth:`convert` must convert string values to the correct type. + - :meth:`convert` must accept values that are already the correct + type. + - It must be able to convert a value if the ``ctx`` and ``param`` + arguments are ``None``. This can occur when converting prompt + input. + """ + + is_composite: t.ClassVar[bool] = False + arity: t.ClassVar[int] = 1 + + #: the descriptive name of this type + name: str + + #: if a list of this type is expected and the value is pulled from a + #: string environment variable, this is what splits it up. `None` + #: means any whitespace. For all parameters the general rule is that + #: whitespace splits them up. The exception are paths and files which + #: are split by ``os.path.pathsep`` by default (":" on Unix and ";" on + #: Windows). + envvar_list_splitter: t.ClassVar[t.Optional[str]] = None + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + .. versionadded:: 8.0 + """ + # The class name without the "ParamType" suffix. + param_type = type(self).__name__.partition("ParamType")[0] + param_type = param_type.partition("ParameterType")[0] + + # Custom subclasses might not remember to set a name. + if hasattr(self, "name"): + name = self.name + else: + name = param_type + + return {"param_type": param_type, "name": name} + + def __call__( + self, + value: t.Any, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> t.Any: + if value is not None: + return self.convert(value, param, ctx) + + def get_metavar(self, param: "Parameter") -> t.Optional[str]: + """Returns the metavar default for this param if it provides one.""" + + def get_missing_message(self, param: "Parameter") -> t.Optional[str]: + """Optionally might return extra information about a missing + parameter. + + .. versionadded:: 2.0 + """ + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + """Convert the value to the correct type. This is not called if + the value is ``None`` (the missing value). + + This must accept string values from the command line, as well as + values that are already the correct type. It may also convert + other compatible types. + + The ``param`` and ``ctx`` arguments may be ``None`` in certain + situations, such as when converting prompt input. + + If the value cannot be converted, call :meth:`fail` with a + descriptive message. + + :param value: The value to convert. + :param param: The parameter that is using this type to convert + its value. May be ``None``. + :param ctx: The current context that arrived at this value. May + be ``None``. + """ + return value + + def split_envvar_value(self, rv: str) -> t.Sequence[str]: + """Given a value from an environment variable this splits it up + into small chunks depending on the defined envvar list splitter. + + If the splitter is set to `None`, which means that whitespace splits, + then leading and trailing whitespace is ignored. Otherwise, leading + and trailing splitters usually lead to empty items being included. + """ + return (rv or "").split(self.envvar_list_splitter) + + def fail( + self, + message: str, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> "t.NoReturn": + """Helper method to fail with an invalid value message.""" + raise BadParameter(message, ctx=ctx, param=param) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a list of + :class:`~click.shell_completion.CompletionItem` objects for the + incomplete value. Most types do not provide completions, but + some do, and this allows custom types to provide custom + completions as well. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + return [] + + +class CompositeParamType(ParamType): + is_composite = True + + @property + def arity(self) -> int: # type: ignore + raise NotImplementedError() + + +class FuncParamType(ParamType): + def __init__(self, func: t.Callable[[t.Any], t.Any]) -> None: + self.name = func.__name__ + self.func = func + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["func"] = self.func + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self.func(value) + except ValueError: + try: + value = str(value) + except UnicodeError: + value = value.decode("utf-8", "replace") + + self.fail(value, param, ctx) + + +class UnprocessedParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + return value + + def __repr__(self) -> str: + return "UNPROCESSED" + + +class StringParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, bytes): + enc = _get_argv_encoding() + try: + value = value.decode(enc) + except UnicodeError: + fs_enc = get_filesystem_encoding() + if fs_enc != enc: + try: + value = value.decode(fs_enc) + except UnicodeError: + value = value.decode("utf-8", "replace") + else: + value = value.decode("utf-8", "replace") + return value + return str(value) + + def __repr__(self) -> str: + return "STRING" + + +class Choice(ParamType): + """The choice type allows a value to be checked against a fixed set + of supported values. All of these values have to be strings. + + You should only pass a list or tuple of choices. Other iterables + (like generators) may lead to surprising results. + + The resulting value will always be one of the originally passed choices + regardless of ``case_sensitive`` or any ``ctx.token_normalize_func`` + being specified. + + See :ref:`choice-opts` for an example. + + :param case_sensitive: Set to false to make choices case + insensitive. Defaults to true. + """ + + name = "choice" + + def __init__(self, choices: t.Sequence[str], case_sensitive: bool = True) -> None: + self.choices = choices + self.case_sensitive = case_sensitive + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["choices"] = self.choices + info_dict["case_sensitive"] = self.case_sensitive + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + choices_str = "|".join(self.choices) + + # Use curly braces to indicate a required argument. + if param.required and param.param_type_name == "argument": + return f"{{{choices_str}}}" + + # Use square braces to indicate an option or optional argument. + return f"[{choices_str}]" + + def get_missing_message(self, param: "Parameter") -> str: + return _("Choose from:\n\t{choices}").format(choices=",\n\t".join(self.choices)) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + # Match through normalization and case sensitivity + # first do token_normalize_func, then lowercase + # preserve original `value` to produce an accurate message in + # `self.fail` + normed_value = value + normed_choices = {choice: choice for choice in self.choices} + + if ctx is not None and ctx.token_normalize_func is not None: + normed_value = ctx.token_normalize_func(value) + normed_choices = { + ctx.token_normalize_func(normed_choice): original + for normed_choice, original in normed_choices.items() + } + + if not self.case_sensitive: + normed_value = normed_value.casefold() + normed_choices = { + normed_choice.casefold(): original + for normed_choice, original in normed_choices.items() + } + + if normed_value in normed_choices: + return normed_choices[normed_value] + + choices_str = ", ".join(map(repr, self.choices)) + self.fail( + ngettext( + "{value!r} is not {choice}.", + "{value!r} is not one of {choices}.", + len(self.choices), + ).format(value=value, choice=choices_str, choices=choices_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return f"Choice({list(self.choices)})" + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Complete choices that start with the incomplete value. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + str_choices = map(str, self.choices) + + if self.case_sensitive: + matched = (c for c in str_choices if c.startswith(incomplete)) + else: + incomplete = incomplete.lower() + matched = (c for c in str_choices if c.lower().startswith(incomplete)) + + return [CompletionItem(c) for c in matched] + + +class DateTime(ParamType): + """The DateTime type converts date strings into `datetime` objects. + + The format strings which are checked are configurable, but default to some + common (non-timezone aware) ISO 8601 formats. + + When specifying *DateTime* formats, you should only pass a list or a tuple. + Other iterables, like generators, may lead to surprising results. + + The format strings are processed using ``datetime.strptime``, and this + consequently defines the format strings which are allowed. + + Parsing is tried using each format, in order, and the first format which + parses successfully is used. + + :param formats: A list or tuple of date format strings, in the order in + which they should be tried. Defaults to + ``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``, + ``'%Y-%m-%d %H:%M:%S'``. + """ + + name = "datetime" + + def __init__(self, formats: t.Optional[t.Sequence[str]] = None): + self.formats = formats or ["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["formats"] = self.formats + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + return f"[{'|'.join(self.formats)}]" + + def _try_to_convert_date(self, value: t.Any, format: str) -> t.Optional[datetime]: + try: + return datetime.strptime(value, format) + except ValueError: + return None + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, datetime): + return value + + for format in self.formats: + converted = self._try_to_convert_date(value, format) + + if converted is not None: + return converted + + formats_str = ", ".join(map(repr, self.formats)) + self.fail( + ngettext( + "{value!r} does not match the format {format}.", + "{value!r} does not match the formats {formats}.", + len(self.formats), + ).format(value=value, format=formats_str, formats=formats_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return "DateTime" + + +class _NumberParamTypeBase(ParamType): + _number_class: t.ClassVar[t.Type] + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self._number_class(value) + except ValueError: + self.fail( + _("{value!r} is not a valid {number_type}.").format( + value=value, number_type=self.name + ), + param, + ctx, + ) + + +class _NumberRangeBase(_NumberParamTypeBase): + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + self.min = min + self.max = max + self.min_open = min_open + self.max_open = max_open + self.clamp = clamp + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + min=self.min, + max=self.max, + min_open=self.min_open, + max_open=self.max_open, + clamp=self.clamp, + ) + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import operator + + rv = super().convert(value, param, ctx) + lt_min: bool = self.min is not None and ( + operator.le if self.min_open else operator.lt + )(rv, self.min) + gt_max: bool = self.max is not None and ( + operator.ge if self.max_open else operator.gt + )(rv, self.max) + + if self.clamp: + if lt_min: + return self._clamp(self.min, 1, self.min_open) # type: ignore + + if gt_max: + return self._clamp(self.max, -1, self.max_open) # type: ignore + + if lt_min or gt_max: + self.fail( + _("{value} is not in the range {range}.").format( + value=rv, range=self._describe_range() + ), + param, + ctx, + ) + + return rv + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + """Find the valid value to clamp to bound in the given + direction. + + :param bound: The boundary value. + :param dir: 1 or -1 indicating the direction to move. + :param open: If true, the range does not include the bound. + """ + raise NotImplementedError + + def _describe_range(self) -> str: + """Describe the range for use in help text.""" + if self.min is None: + op = "<" if self.max_open else "<=" + return f"x{op}{self.max}" + + if self.max is None: + op = ">" if self.min_open else ">=" + return f"x{op}{self.min}" + + lop = "<" if self.min_open else "<=" + rop = "<" if self.max_open else "<=" + return f"{self.min}{lop}x{rop}{self.max}" + + def __repr__(self) -> str: + clamp = " clamped" if self.clamp else "" + return f"<{type(self).__name__} {self._describe_range()}{clamp}>" + + +class IntParamType(_NumberParamTypeBase): + name = "integer" + _number_class = int + + def __repr__(self) -> str: + return "INT" + + +class IntRange(_NumberRangeBase, IntParamType): + """Restrict an :data:`click.INT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "integer range" + + def _clamp( # type: ignore + self, bound: int, dir: "te.Literal[1, -1]", open: bool + ) -> int: + if not open: + return bound + + return bound + dir + + +class FloatParamType(_NumberParamTypeBase): + name = "float" + _number_class = float + + def __repr__(self) -> str: + return "FLOAT" + + +class FloatRange(_NumberRangeBase, FloatParamType): + """Restrict a :data:`click.FLOAT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. This is not supported if either + boundary is marked ``open``. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "float range" + + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + super().__init__( + min=min, max=max, min_open=min_open, max_open=max_open, clamp=clamp + ) + + if (min_open or max_open) and clamp: + raise TypeError("Clamping is not supported for open bounds.") + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + if not open: + return bound + + # Could use Python 3.9's math.nextafter here, but clamping an + # open float range doesn't seem to be particularly useful. It's + # left up to the user to write a callback to do it if needed. + raise RuntimeError("Clamping is not supported for open bounds.") + + +class BoolParamType(ParamType): + name = "boolean" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if value in {False, True}: + return bool(value) + + norm = value.strip().lower() + + if norm in {"1", "true", "t", "yes", "y", "on"}: + return True + + if norm in {"0", "false", "f", "no", "n", "off"}: + return False + + self.fail( + _("{value!r} is not a valid boolean.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "BOOL" + + +class UUIDParameterType(ParamType): + name = "uuid" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import uuid + + if isinstance(value, uuid.UUID): + return value + + value = value.strip() + + try: + return uuid.UUID(value) + except ValueError: + self.fail( + _("{value!r} is not a valid UUID.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "UUID" + + +class File(ParamType): + """Declares a parameter to be a file for reading or writing. The file + is automatically closed once the context tears down (after the command + finished working). + + Files can be opened for reading or writing. The special value ``-`` + indicates stdin or stdout depending on the mode. + + By default, the file is opened for reading text data, but it can also be + opened in binary mode or for writing. The encoding parameter can be used + to force a specific encoding. + + The `lazy` flag controls if the file should be opened immediately or upon + first IO. The default is to be non-lazy for standard input and output + streams as well as files opened for reading, `lazy` otherwise. When opening a + file lazily for reading, it is still opened temporarily for validation, but + will not be held open until first IO. lazy is mainly useful when opening + for writing to avoid creating the file until it is needed. + + Starting with Click 2.0, files can also be opened atomically in which + case all writes go into a separate file in the same folder and upon + completion the file will be moved over to the original location. This + is useful if a file regularly read by other users is modified. + + See :ref:`file-args` for more information. + """ + + name = "filename" + envvar_list_splitter = os.path.pathsep + + def __init__( + self, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: t.Optional[bool] = None, + atomic: bool = False, + ) -> None: + self.mode = mode + self.encoding = encoding + self.errors = errors + self.lazy = lazy + self.atomic = atomic + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update(mode=self.mode, encoding=self.encoding) + return info_dict + + def resolve_lazy_flag(self, value: t.Any) -> bool: + if self.lazy is not None: + return self.lazy + if value == "-": + return False + elif "w" in self.mode: + return True + return False + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + if hasattr(value, "read") or hasattr(value, "write"): + return value + + lazy = self.resolve_lazy_flag(value) + + if lazy: + f: t.IO = t.cast( + t.IO, + LazyFile( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ), + ) + + if ctx is not None: + ctx.call_on_close(f.close_intelligently) # type: ignore + + return f + + f, should_close = open_stream( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + + # If a context is provided, we automatically close the file + # at the end of the context execution (or flush out). If a + # context does not exist, it's the caller's responsibility to + # properly close the file. This for instance happens when the + # type is used with prompts. + if ctx is not None: + if should_close: + ctx.call_on_close(safecall(f.close)) + else: + ctx.call_on_close(safecall(f.flush)) + + return f + except OSError as e: # noqa: B014 + self.fail(f"'{os.fsdecode(value)}': {e.strerror}", param, ctx) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide file path completions. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + return [CompletionItem(incomplete, type="file")] + + +class Path(ParamType): + """The ``Path`` type is similar to the :class:`File` type, but + returns the filename instead of an open file. Various checks can be + enabled to validate the type of file and permissions. + + :param exists: The file or directory needs to exist for the value to + be valid. If this is not set to ``True``, and the file does not + exist, then all further checks are silently skipped. + :param file_okay: Allow a file as a value. + :param dir_okay: Allow a directory as a value. + :param readable: if true, a readable check is performed. + :param writable: if true, a writable check is performed. + :param executable: if true, an executable check is performed. + :param resolve_path: Make the value absolute and resolve any + symlinks. A ``~`` is not expanded, as this is supposed to be + done by the shell only. + :param allow_dash: Allow a single dash as a value, which indicates + a standard stream (but does not open it). Use + :func:`~click.open_file` to handle opening this value. + :param path_type: Convert the incoming path value to this type. If + ``None``, keep Python's default, which is ``str``. Useful to + convert to :class:`pathlib.Path`. + + .. versionchanged:: 8.1 + Added the ``executable`` parameter. + + .. versionchanged:: 8.0 + Allow passing ``type=pathlib.Path``. + + .. versionchanged:: 6.0 + Added the ``allow_dash`` parameter. + """ + + envvar_list_splitter = os.path.pathsep + + def __init__( + self, + exists: bool = False, + file_okay: bool = True, + dir_okay: bool = True, + writable: bool = False, + readable: bool = True, + resolve_path: bool = False, + allow_dash: bool = False, + path_type: t.Optional[t.Type] = None, + executable: bool = False, + ): + self.exists = exists + self.file_okay = file_okay + self.dir_okay = dir_okay + self.readable = readable + self.writable = writable + self.executable = executable + self.resolve_path = resolve_path + self.allow_dash = allow_dash + self.type = path_type + + if self.file_okay and not self.dir_okay: + self.name = _("file") + elif self.dir_okay and not self.file_okay: + self.name = _("directory") + else: + self.name = _("path") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + exists=self.exists, + file_okay=self.file_okay, + dir_okay=self.dir_okay, + writable=self.writable, + readable=self.readable, + allow_dash=self.allow_dash, + ) + return info_dict + + def coerce_path_result(self, rv: t.Any) -> t.Any: + if self.type is not None and not isinstance(rv, self.type): + if self.type is str: + rv = os.fsdecode(rv) + elif self.type is bytes: + rv = os.fsencode(rv) + else: + rv = self.type(rv) + + return rv + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + rv = value + + is_dash = self.file_okay and self.allow_dash and rv in (b"-", "-") + + if not is_dash: + if self.resolve_path: + # os.path.realpath doesn't resolve symlinks on Windows + # until Python 3.8. Use pathlib for now. + import pathlib + + rv = os.fsdecode(pathlib.Path(rv).resolve()) + + try: + st = os.stat(rv) + except OSError: + if not self.exists: + return self.coerce_path_result(rv) + self.fail( + _("{name} {filename!r} does not exist.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + if not self.file_okay and stat.S_ISREG(st.st_mode): + self.fail( + _("{name} {filename!r} is a file.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + if not self.dir_okay and stat.S_ISDIR(st.st_mode): + self.fail( + _("{name} '{filename}' is a directory.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + if self.readable and not os.access(rv, os.R_OK): + self.fail( + _("{name} {filename!r} is not readable.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + if self.writable and not os.access(rv, os.W_OK): + self.fail( + _("{name} {filename!r} is not writable.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + if self.executable and not os.access(value, os.X_OK): + self.fail( + _("{name} {filename!r} is not executable.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + return self.coerce_path_result(rv) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide path completions for only + directories or any paths. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + type = "dir" if self.dir_okay and not self.file_okay else "file" + return [CompletionItem(incomplete, type=type)] + + +class Tuple(CompositeParamType): + """The default behavior of Click is to apply a type on a value directly. + This works well in most cases, except for when `nargs` is set to a fixed + count and different types should be used for different items. In this + case the :class:`Tuple` type can be used. This type can only be used + if `nargs` is set to a fixed number. + + For more information see :ref:`tuple-type`. + + This can be selected by using a Python tuple literal as a type. + + :param types: a list of types that should be used for the tuple items. + """ + + def __init__(self, types: t.Sequence[t.Union[t.Type, ParamType]]) -> None: + self.types = [convert_type(ty) for ty in types] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["types"] = [t.to_info_dict() for t in self.types] + return info_dict + + @property + def name(self) -> str: # type: ignore + return f"<{' '.join(ty.name for ty in self.types)}>" + + @property + def arity(self) -> int: # type: ignore + return len(self.types) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + len_type = len(self.types) + len_value = len(value) + + if len_value != len_type: + self.fail( + ngettext( + "{len_type} values are required, but {len_value} was given.", + "{len_type} values are required, but {len_value} were given.", + len_value, + ).format(len_type=len_type, len_value=len_value), + param=param, + ctx=ctx, + ) + + return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value)) + + +def convert_type(ty: t.Optional[t.Any], default: t.Optional[t.Any] = None) -> ParamType: + """Find the most appropriate :class:`ParamType` for the given Python + type. If the type isn't provided, it can be inferred from a default + value. + """ + guessed_type = False + + if ty is None and default is not None: + if isinstance(default, (tuple, list)): + # If the default is empty, ty will remain None and will + # return STRING. + if default: + item = default[0] + + # A tuple of tuples needs to detect the inner types. + # Can't call convert recursively because that would + # incorrectly unwind the tuple to a single type. + if isinstance(item, (tuple, list)): + ty = tuple(map(type, item)) + else: + ty = type(item) + else: + ty = type(default) + + guessed_type = True + + if isinstance(ty, tuple): + return Tuple(ty) + + if isinstance(ty, ParamType): + return ty + + if ty is str or ty is None: + return STRING + + if ty is int: + return INT + + if ty is float: + return FLOAT + + if ty is bool: + return BOOL + + if guessed_type: + return STRING + + if __debug__: + try: + if issubclass(ty, ParamType): + raise AssertionError( + f"Attempted to use an uninstantiated parameter type ({ty})." + ) + except TypeError: + # ty is an instance (correct), so issubclass fails. + pass + + return FuncParamType(ty) + + +#: A dummy parameter type that just does nothing. From a user's +#: perspective this appears to just be the same as `STRING` but +#: internally no string conversion takes place if the input was bytes. +#: This is usually useful when working with file paths as they can +#: appear in bytes and unicode. +#: +#: For path related uses the :class:`Path` type is a better choice but +#: there are situations where an unprocessed type is useful which is why +#: it is is provided. +#: +#: .. versionadded:: 4.0 +UNPROCESSED = UnprocessedParamType() + +#: A unicode string parameter type which is the implicit default. This +#: can also be selected by using ``str`` as type. +STRING = StringParamType() + +#: An integer parameter. This can also be selected by using ``int`` as +#: type. +INT = IntParamType() + +#: A floating point value parameter. This can also be selected by using +#: ``float`` as type. +FLOAT = FloatParamType() + +#: A boolean parameter. This is the default for boolean flags. This can +#: also be selected by using ``bool`` as a type. +BOOL = BoolParamType() + +#: A UUID parameter. +UUID = UUIDParameterType() diff --git a/env/lib/python3.11/site-packages/click/utils.py b/env/lib/python3.11/site-packages/click/utils.py new file mode 100644 index 0000000..8283788 --- /dev/null +++ b/env/lib/python3.11/site-packages/click/utils.py @@ -0,0 +1,580 @@ +import os +import re +import sys +import typing as t +from functools import update_wrapper +from types import ModuleType + +from ._compat import _default_text_stderr +from ._compat import _default_text_stdout +from ._compat import _find_binary_writer +from ._compat import auto_wrap_for_ansi +from ._compat import binary_streams +from ._compat import get_filesystem_encoding +from ._compat import open_stream +from ._compat import should_strip_ansi +from ._compat import strip_ansi +from ._compat import text_streams +from ._compat import WIN +from .globals import resolve_color_default + +if t.TYPE_CHECKING: + import typing_extensions as te + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + + +def _posixify(name: str) -> str: + return "-".join(name.split()).lower() + + +def safecall(func: F) -> F: + """Wraps a function so that it swallows exceptions.""" + + def wrapper(*args, **kwargs): # type: ignore + try: + return func(*args, **kwargs) + except Exception: + pass + + return update_wrapper(t.cast(F, wrapper), func) + + +def make_str(value: t.Any) -> str: + """Converts a value into a valid string.""" + if isinstance(value, bytes): + try: + return value.decode(get_filesystem_encoding()) + except UnicodeError: + return value.decode("utf-8", "replace") + return str(value) + + +def make_default_short_help(help: str, max_length: int = 45) -> str: + """Returns a condensed version of help string.""" + # Consider only the first paragraph. + paragraph_end = help.find("\n\n") + + if paragraph_end != -1: + help = help[:paragraph_end] + + # Collapse newlines, tabs, and spaces. + words = help.split() + + if not words: + return "" + + # The first paragraph started with a "no rewrap" marker, ignore it. + if words[0] == "\b": + words = words[1:] + + total_length = 0 + last_index = len(words) - 1 + + for i, word in enumerate(words): + total_length += len(word) + (i > 0) + + if total_length > max_length: # too long, truncate + break + + if word[-1] == ".": # sentence end, truncate without "..." + return " ".join(words[: i + 1]) + + if total_length == max_length and i != last_index: + break # not at sentence end, truncate with "..." + else: + return " ".join(words) # no truncation needed + + # Account for the length of the suffix. + total_length += len("...") + + # remove words until the length is short enough + while i > 0: + total_length -= len(words[i]) + (i > 0) + + if total_length <= max_length: + break + + i -= 1 + + return " ".join(words[:i]) + "..." + + +class LazyFile: + """A lazy file works like a regular file but it does not fully open + the file but it does perform some basic checks early to see if the + filename parameter does make sense. This is useful for safely opening + files for writing. + """ + + def __init__( + self, + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, + ): + self.name = filename + self.mode = mode + self.encoding = encoding + self.errors = errors + self.atomic = atomic + self._f: t.Optional[t.IO] + + if filename == "-": + self._f, self.should_close = open_stream(filename, mode, encoding, errors) + else: + if "r" in mode: + # Open and close the file in case we're opening it for + # reading so that we can catch at least some errors in + # some cases early. + open(filename, mode).close() + self._f = None + self.should_close = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self.open(), name) + + def __repr__(self) -> str: + if self._f is not None: + return repr(self._f) + return f"" + + def open(self) -> t.IO: + """Opens the file if it's not yet open. This call might fail with + a :exc:`FileError`. Not handling this error will produce an error + that Click shows. + """ + if self._f is not None: + return self._f + try: + rv, self.should_close = open_stream( + self.name, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + except OSError as e: # noqa: E402 + from .exceptions import FileError + + raise FileError(self.name, hint=e.strerror) from e + self._f = rv + return rv + + def close(self) -> None: + """Closes the underlying file, no matter what.""" + if self._f is not None: + self._f.close() + + def close_intelligently(self) -> None: + """This function only closes the file if it was opened by the lazy + file wrapper. For instance this will never close stdin. + """ + if self.should_close: + self.close() + + def __enter__(self) -> "LazyFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.close_intelligently() + + def __iter__(self) -> t.Iterator[t.AnyStr]: + self.open() + return iter(self._f) # type: ignore + + +class KeepOpenFile: + def __init__(self, file: t.IO) -> None: + self._file = file + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._file, name) + + def __enter__(self) -> "KeepOpenFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + pass + + def __repr__(self) -> str: + return repr(self._file) + + def __iter__(self) -> t.Iterator[t.AnyStr]: + return iter(self._file) + + +def echo( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO[t.Any]] = None, + nl: bool = True, + err: bool = False, + color: t.Optional[bool] = None, +) -> None: + """Print a message and newline to stdout or a file. This should be + used instead of :func:`print` because it provides better support + for different data, files, and environments. + + Compared to :func:`print`, this does the following: + + - Ensures that the output encoding is not misconfigured on Linux. + - Supports Unicode in the Windows console. + - Supports writing to binary outputs, and supports writing bytes + to text outputs. + - Supports colors and styles on Windows. + - Removes ANSI color and style codes if the output does not look + like an interactive terminal. + - Always flushes the output. + + :param message: The string or bytes to output. Other objects are + converted to strings. + :param file: The file to write to. Defaults to ``stdout``. + :param err: Write to ``stderr`` instead of ``stdout``. + :param nl: Print a newline after the message. Enabled by default. + :param color: Force showing or hiding colors and other styles. By + default Click will remove color if the output does not look like + an interactive terminal. + + .. versionchanged:: 6.0 + Support Unicode output on the Windows console. Click does not + modify ``sys.stdout``, so ``sys.stdout.write()`` and ``print()`` + will still not support Unicode. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionadded:: 3.0 + Added the ``err`` parameter. + + .. versionchanged:: 2.0 + Support colors on Windows if colorama is installed. + """ + if file is None: + if err: + file = _default_text_stderr() + else: + file = _default_text_stdout() + + # Convert non bytes/text into the native string type. + if message is not None and not isinstance(message, (str, bytes, bytearray)): + out: t.Optional[t.Union[str, bytes]] = str(message) + else: + out = message + + if nl: + out = out or "" + if isinstance(out, str): + out += "\n" + else: + out += b"\n" + + if not out: + file.flush() + return + + # If there is a message and the value looks like bytes, we manually + # need to find the binary stream and write the message in there. + # This is done separately so that most stream types will work as you + # would expect. Eg: you can write to StringIO for other cases. + if isinstance(out, (bytes, bytearray)): + binary_file = _find_binary_writer(file) + + if binary_file is not None: + file.flush() + binary_file.write(out) + binary_file.flush() + return + + # ANSI style code support. For no message or bytes, nothing happens. + # When outputting to a file instead of a terminal, strip codes. + else: + color = resolve_color_default(color) + + if should_strip_ansi(file, color): + out = strip_ansi(out) + elif WIN: + if auto_wrap_for_ansi is not None: + file = auto_wrap_for_ansi(file) # type: ignore + elif not color: + out = strip_ansi(out) + + file.write(out) # type: ignore + file.flush() + + +def get_binary_stream(name: "te.Literal['stdin', 'stdout', 'stderr']") -> t.BinaryIO: + """Returns a system stream for byte processing. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + """ + opener = binary_streams.get(name) + if opener is None: + raise TypeError(f"Unknown standard stream '{name}'") + return opener() + + +def get_text_stream( + name: "te.Literal['stdin', 'stdout', 'stderr']", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", +) -> t.TextIO: + """Returns a system stream for text processing. This usually returns + a wrapped stream around a binary stream returned from + :func:`get_binary_stream` but it also can take shortcuts for already + correctly configured streams. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + :param encoding: overrides the detected default encoding. + :param errors: overrides the default error mode. + """ + opener = text_streams.get(name) + if opener is None: + raise TypeError(f"Unknown standard stream '{name}'") + return opener(encoding, errors) + + +def open_file( + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: bool = False, + atomic: bool = False, +) -> t.IO: + """Open a file, with extra behavior to handle ``'-'`` to indicate + a standard stream, lazy open on write, and atomic write. Similar to + the behavior of the :class:`~click.File` param type. + + If ``'-'`` is given to open ``stdout`` or ``stdin``, the stream is + wrapped so that using it in a context manager will not close it. + This makes it possible to use the function without accidentally + closing a standard stream: + + .. code-block:: python + + with open_file(filename) as f: + ... + + :param filename: The name of the file to open, or ``'-'`` for + ``stdin``/``stdout``. + :param mode: The mode in which to open the file. + :param encoding: The encoding to decode or encode a file opened in + text mode. + :param errors: The error handling mode. + :param lazy: Wait to open the file until it is accessed. For read + mode, the file is temporarily opened to raise access errors + early, then closed until it is read again. + :param atomic: Write to a temporary file and replace the given file + on close. + + .. versionadded:: 3.0 + """ + if lazy: + return t.cast(t.IO, LazyFile(filename, mode, encoding, errors, atomic=atomic)) + + f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic) + + if not should_close: + f = t.cast(t.IO, KeepOpenFile(f)) + + return f + + +def format_filename( + filename: t.Union[str, bytes, os.PathLike], shorten: bool = False +) -> str: + """Formats a filename for user display. The main purpose of this + function is to ensure that the filename can be displayed at all. This + will decode the filename to unicode if necessary in a way that it will + not fail. Optionally, it can shorten the filename to not include the + full path to the filename. + + :param filename: formats a filename for UI display. This will also convert + the filename into unicode without failing. + :param shorten: this optionally shortens the filename to strip of the + path that leads up to it. + """ + if shorten: + filename = os.path.basename(filename) + + return os.fsdecode(filename) + + +def get_app_dir(app_name: str, roaming: bool = True, force_posix: bool = False) -> str: + r"""Returns the config folder for the application. The default behavior + is to return whatever is most appropriate for the operating system. + + To give you an idea, for an app called ``"Foo Bar"``, something like + the following folders could be returned: + + Mac OS X: + ``~/Library/Application Support/Foo Bar`` + Mac OS X (POSIX): + ``~/.foo-bar`` + Unix: + ``~/.config/foo-bar`` + Unix (POSIX): + ``~/.foo-bar`` + Windows (roaming): + ``C:\Users\\AppData\Roaming\Foo Bar`` + Windows (not roaming): + ``C:\Users\\AppData\Local\Foo Bar`` + + .. versionadded:: 2.0 + + :param app_name: the application name. This should be properly capitalized + and can contain whitespace. + :param roaming: controls if the folder should be roaming or not on Windows. + Has no affect otherwise. + :param force_posix: if this is set to `True` then on any POSIX system the + folder will be stored in the home folder with a leading + dot instead of the XDG config home or darwin's + application support folder. + """ + if WIN: + key = "APPDATA" if roaming else "LOCALAPPDATA" + folder = os.environ.get(key) + if folder is None: + folder = os.path.expanduser("~") + return os.path.join(folder, app_name) + if force_posix: + return os.path.join(os.path.expanduser(f"~/.{_posixify(app_name)}")) + if sys.platform == "darwin": + return os.path.join( + os.path.expanduser("~/Library/Application Support"), app_name + ) + return os.path.join( + os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")), + _posixify(app_name), + ) + + +class PacifyFlushWrapper: + """This wrapper is used to catch and suppress BrokenPipeErrors resulting + from ``.flush()`` being called on broken pipe during the shutdown/final-GC + of the Python interpreter. Notably ``.flush()`` is always called on + ``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any + other cleanup code, and the case where the underlying file is not a broken + pipe, all calls and attributes are proxied. + """ + + def __init__(self, wrapped: t.IO) -> None: + self.wrapped = wrapped + + def flush(self) -> None: + try: + self.wrapped.flush() + except OSError as e: + import errno + + if e.errno != errno.EPIPE: + raise + + def __getattr__(self, attr: str) -> t.Any: + return getattr(self.wrapped, attr) + + +def _detect_program_name( + path: t.Optional[str] = None, _main: t.Optional[ModuleType] = None +) -> str: + """Determine the command used to run the program, for use in help + text. If a file or entry point was executed, the file name is + returned. If ``python -m`` was used to execute a module or package, + ``python -m name`` is returned. + + This doesn't try to be too precise, the goal is to give a concise + name for help text. Files are only shown as their name without the + path. ``python`` is only shown for modules, and the full path to + ``sys.executable`` is not shown. + + :param path: The Python file being executed. Python puts this in + ``sys.argv[0]``, which is used by default. + :param _main: The ``__main__`` module. This should only be passed + during internal testing. + + .. versionadded:: 8.0 + Based on command args detection in the Werkzeug reloader. + + :meta private: + """ + if _main is None: + _main = sys.modules["__main__"] + + if not path: + path = sys.argv[0] + + # The value of __package__ indicates how Python was called. It may + # not exist if a setuptools script is installed as an egg. It may be + # set incorrectly for entry points created with pip on Windows. + if getattr(_main, "__package__", None) is None or ( + os.name == "nt" + and _main.__package__ == "" + and not os.path.exists(path) + and os.path.exists(f"{path}.exe") + ): + # Executed a file, like "python app.py". + return os.path.basename(path) + + # Executed a module, like "python -m example". + # Rewritten by Python from "-m script" to "/path/to/script.py". + # Need to look at main module to determine how it was executed. + py_module = t.cast(str, _main.__package__) + name = os.path.splitext(os.path.basename(path))[0] + + # A submodule like "example.cli". + if name != "__main__": + py_module = f"{py_module}.{name}" + + return f"python -m {py_module.lstrip('.')}" + + +def _expand_args( + args: t.Iterable[str], + *, + user: bool = True, + env: bool = True, + glob_recursive: bool = True, +) -> t.List[str]: + """Simulate Unix shell expansion with Python functions. + + See :func:`glob.glob`, :func:`os.path.expanduser`, and + :func:`os.path.expandvars`. + + This is intended for use on Windows, where the shell does not do any + expansion. It may not exactly match what a Unix shell would do. + + :param args: List of command line arguments to expand. + :param user: Expand user home directory. + :param env: Expand environment variables. + :param glob_recursive: ``**`` matches directories recursively. + + .. versionchanged:: 8.1 + Invalid glob patterns are treated as empty expansions rather + than raising an error. + + .. versionadded:: 8.0 + + :meta private: + """ + from glob import glob + + out = [] + + for arg in args: + if user: + arg = os.path.expanduser(arg) + + if env: + arg = os.path.expandvars(arg) + + try: + matches = glob(arg, recursive=glob_recursive) + except re.error: + matches = [] + + if not matches: + out.append(arg) + else: + out.extend(matches) + + return out diff --git a/env/lib/python3.11/site-packages/distutils-precedence.pth b/env/lib/python3.11/site-packages/distutils-precedence.pth new file mode 100644 index 0000000..7f009fe --- /dev/null +++ b/env/lib/python3.11/site-packages/distutils-precedence.pth @@ -0,0 +1 @@ +import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim(); diff --git a/env/lib/python3.11/site-packages/flask/__init__.py b/env/lib/python3.11/site-packages/flask/__init__.py new file mode 100644 index 0000000..1cc4408 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/__init__.py @@ -0,0 +1,102 @@ +from . import json as json +from .app import Flask as Flask +from .app import Request as Request +from .app import Response as Response +from .blueprints import Blueprint as Blueprint +from .config import Config as Config +from .ctx import after_this_request as after_this_request +from .ctx import copy_current_request_context as copy_current_request_context +from .ctx import has_app_context as has_app_context +from .ctx import has_request_context as has_request_context +from .globals import current_app as current_app +from .globals import g as g +from .globals import request as request +from .globals import session as session +from .helpers import abort as abort +from .helpers import flash as flash +from .helpers import get_flashed_messages as get_flashed_messages +from .helpers import get_template_attribute as get_template_attribute +from .helpers import make_response as make_response +from .helpers import redirect as redirect +from .helpers import send_file as send_file +from .helpers import send_from_directory as send_from_directory +from .helpers import stream_with_context as stream_with_context +from .helpers import url_for as url_for +from .json import jsonify as jsonify +from .signals import appcontext_popped as appcontext_popped +from .signals import appcontext_pushed as appcontext_pushed +from .signals import appcontext_tearing_down as appcontext_tearing_down +from .signals import before_render_template as before_render_template +from .signals import got_request_exception as got_request_exception +from .signals import message_flashed as message_flashed +from .signals import request_finished as request_finished +from .signals import request_started as request_started +from .signals import request_tearing_down as request_tearing_down +from .signals import template_rendered as template_rendered +from .templating import render_template as render_template +from .templating import render_template_string as render_template_string +from .templating import stream_template as stream_template +from .templating import stream_template_string as stream_template_string + +__version__ = "2.3.1" + + +def __getattr__(name): + if name == "_app_ctx_stack": + import warnings + from .globals import __app_ctx_stack + + warnings.warn( + "'_app_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __app_ctx_stack + + if name == "_request_ctx_stack": + import warnings + from .globals import __request_ctx_stack + + warnings.warn( + "'_request_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + if name == "escape": + import warnings + from markupsafe import escape + + warnings.warn( + "'flask.escape' is deprecated and will be removed in Flask 2.4. Import" + " 'markupsafe.escape' instead.", + DeprecationWarning, + stacklevel=2, + ) + return escape + + if name == "Markup": + import warnings + from markupsafe import Markup + + warnings.warn( + "'flask.Markup' is deprecated and will be removed in Flask 2.4. Import" + " 'markupsafe.Markup' instead.", + DeprecationWarning, + stacklevel=2, + ) + return Markup + + if name == "signals_available": + import warnings + + warnings.warn( + "'signals_available' is deprecated and will be removed in Flask 2.4." + " Signals are always available", + DeprecationWarning, + stacklevel=2, + ) + return True + + raise AttributeError(name) diff --git a/env/lib/python3.11/site-packages/flask/__main__.py b/env/lib/python3.11/site-packages/flask/__main__.py new file mode 100644 index 0000000..4e28416 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/__main__.py @@ -0,0 +1,3 @@ +from .cli import main + +main() diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaaf4d1c8d06530abf2c2a43c617488c7cbbe57b GIT binary patch literal 4089 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%0AjjxFoFSdxRmm&8FY0#RzIS)DJ9b6N;8 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/blueprints.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/blueprints.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..062d44d14603ba41b191223d55799fe7b74b7b37 GIT binary patch literal 32077 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/cli.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/cli.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90b1575f3fd8d269cafd385403db9daa892e556f GIT binary patch literal 44248 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 rN99_%7lMxiG)H6zLu@V%H!pa~@#Fsh;{2{^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/debughelpers.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/debughelpers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bba8839e553b76b7e6c2064b83cb11f9327ee05 GIT binary patch literal 9500 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 Oi_9s2{QswuuKF*5wv0{y literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/scaffold.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/scaffold.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7fc3ff73c0753656595cbe32b42e244e8608741 GIT binary patch literal 36516 zcmdUY32Yo!dS>;>BH3h9?B*#-Dp8b3N>o$#LF=#%N}?^x8i~GWdz#IzCe>22o33u^ z;7}9V5irz1n<$12D;Yb(%-S>b&Lq)hlU*kpAlV~X>@F7QCTdqiEd*$@FpvNNLdRpQ zqung_``@d2UDZv>(yV8Klv?!!Z2c3+ul7;hYE#C?@o zooX7Fhnm@aAk{M7I@HSUYf`Jn+lJcMeQj#Z_}Zbh>^_M5bwlgeeO*c!Uq7_oB_%2^ zwp(4+{3vx*YQuQPP=`x$ONos?#H$}$uce_)h^xHVX+@~@csIYkF+jYz$9#nh3K)J;g;yJG5XC8?W{di#p0ca)@V zLF%0=rruSOx)rH+ub6sIN$S-|y?4db`$|%`A@%+hQ}?O8>be`=p{Lx^Nl8_1Nb35M z89AVCQ#T^TL3Ps&Y3Pu;UEPAG!)gzno>q6L5j-7H-RGt5oqt8ubi0h|SUR1_#d66^ zI(vqm)x>CQGL=)4@f;p2bII|9nn>khc&MG6P-D47^okanm`G@dsXLKOCC*>V<`Uzl zGclFL)teC$U=dMj8(_=^> zADNgqsbwZ7a9;yWWFkB}hc=nBCCex}B9E`?Ba|tb~CEl1! zWOGK{V00ugn$Z#>21yc{meHaYVrey%(2T0VXf6@c)XbH%(MI=Hm6>!daTRT~sx@i{ zqmx?7YFyT6=FgX7smTPAC5kC42GP&S99lPO__aiCQcK5aq^zp~H$ZK!&o$h9NBWNY zJ?W-&(RwR=*RA?zrCIl=TlL)tTzBP=*19f=rJOU-B)!R1TJI%k+I3TMf|&COfK+kD z@W!;U>_cBJawL7t@L#$@kJ?(4;%KN35$mX-CvfvFnmH}a;ja9;>HQ%(_+!yY!eKW( z)6$r0+Vun1IVmYkyFYaOitD`ev5O$KAqqH(Uy5ciI1|y)WICAzTy^^lZ#Iz{)fCjA z5pvYlATa!+(R6G)k)`G+iZV0v@Ri;Rnejw#HW$0vd*#ZN-igemgceK3QrB|HcoxNK zmy>{&-bDIxZz?&`J8>;{A(P%2*}lCuo6IG)PQ>DuVq-`!nu=vF^=9L-(a}swjZ9oK z0_IAIj!vfIQ|nm^#}mk|Mh>Jh@mMN*C}K}SI4eu&;>#InQ4ZXb+ZW{axjhAWvo3GW z%bOR2b+d2W4(EfNcf1JrZ_aPt%AKDhtJLl1eO`}y-f?zE6Qa=_Mn;aZL5M~TSI+Rp zW7(V*qSpil-5xej8qolah(wk^W>|SzBN|~;+d82|5JUg7rxAQfjjpM^H8gW#$?NuY zElH0GzL2Fr&8|3#ffh zN=QR4RT^@?0D=w@?oN1B&jBP+y&&K|Jo(KhKYOa6r%LmmdQLsB*52@ev=6FvK#8*Y zf*Qi#%0!j=q8h&8Eg_iIiRz01t0n47YU45~s??X&=Cb%2R$@z8d~KrER^lsaYk3NF zNL_(yvRbQeRWom!+#$Ust~gbnhDqsZk($?@&0=pbitNFX=@ii|;LqZ({M= z%Ho?@{Pwc=78bvwEWVY+?<|X7ooL`Aug267b^i@tNxRyRFRngSmTwK>RrOF={942( z)Thhh*CBpXJz5s8Abw0eUKYO|@fXw+W%2EZPpYTN;x{1vqI$Y4z60@>)H7xA8xxz< zl=_Xb_)gUeyg6>j=S@rz`#XU2vCQ~*CasJlF2pV;Gn$gU5YrMWo^w|ciL}xe2Xe{w z4S$;Dv)dkqIrC&SfJp3pg6|9H}D9^yHaj`eIB;F}CUvJrP_GpGWEq zS|7`qBhe!ofYC{-s4|%JgmaK zGOe7+q!UJM)Bztxo%L)@no(`5$*6Ipe%Q=Q%48!1R;QDf5>~lEGodIZXibp`iAJRu z(>PH?>mrr`w9xf=n314q*R&M1-hn5!u2U4-| z5jA#bYJ){VBGD+2O)eTOvXxe%@1T$@jpmH>QT1;hFDTn}W%~>-uREme!5fV@PL1SF zt&f5r1y4~x^JaMBsiaYRIhnY^*jOge@wU}F#Ghz(A`v&dsU(D@uv1iG8M8*nAyJu; zjh4t{$yGdFqq#6vi={~z)geP=jV4;bh&U$sZ`N5ja^tW|!U4;I&EmcWMFS~nC9bS@L zmHX~DZ=6&0O?wK>d-dkMvja=A)Vg8Td#m<~fD~@~wZ3=y@E|YMNqhEDzSUoJNHxv* z=I!_u0z34;j-?8zvPPHJebJ5=A9xFaHF{vpl8;5M|3WE`RF+G*!Hm3<`>&h&^BYg( z*Pbi{PU(SDW=UPFUQs-+v%?w5>uk@<^yA>UtjxzS=1~k6v~Mo^5|}Q*EEmP{_#QNK z(^649{hnL(eBi_S@}7Cz+B!&@hy!g)=b^$jeau+oNZ*I2ZpyFW95!NcZkdw+{m%S7x(mjtU zCNwy8fmq7eNH&v#>O$c>Nro|1SjVHuu}NYdO#X^9Q4uf>G_J$Lf}2Q=g7rFr|m+k40k4Lc&Q@8dohztbNuxUys^OpLv&M(VpJU*!(UQbQZZshS4n|7y?X7E z|Jkm+QGjF?$a(OA)2#;7V`2-ElG79>JSh)F z5Zf2vO~9fWo+O0;lSlz;o(7T5>TN48cf;3 zF>QFkcz;v8A?#hwYi^6|7ElG15hr*hz+tSq5QDbIE|N^O3Q#F~_jfcTMEwCS0jVym z2iMO-F|#!MJxor8hk_dulPX{`S?|hi)Ib7wTFFbGy#5#2m=di$WPL z_)Xk6DQIy$sIC^g<=1uhw0p))wv3z&rl;L@Rko8jY3m(Q*9vRlhbX>iD=S?W(_}mG z#MWS*ULe_b1PTvgF#CqN{Q=z^CN+hcfazcynh{3xhKI*vSEJAo1C24Ohk$EFHJHL7 zri=mX(@ZSq1QQ64FPd~`4l!A#JrOyNUL)NLS!y8RlL~~}2C_;YOf<2+;q(1xjz>=n zobHc4cjV>hk(2$=p z(eEB;jFNFEArh$+bT%k|M9W-(;)VtWIv}b}O%h8UOQF@wx>77CnT9bb2Cc%V5>uG* zi4U1oDk`5eRZXO>fu_JK2QM%O)ASKa~?K>1` zv9#>6^;imxZIS(AIEg8>2>Y-4Tto) z!?Qk<$~ObS-QM+Sb;Iq%2d@;WJN4>L!h4bXp~l;j_nI~@G;J<4_2^AKHe42-4X{P8 z5pi^^aX%v18vmELank#2&~BJ2MQ3k;(OI4;DrKFnyK@yN+`R1T{i47UIibIRflIn5 z(mSyQm@D^B+&@Hne@sKoE?WCje?!ni(y(GlmQ1lJl#`~ek|>}6hvmtaazx<-6i^qN z%w@(&8_HB}T4D@RG}Ey`O(=?C>zq{$^`5g#i&8z3PZ9+|SNav8T;!Lgc62(JqE2Oe zGMgiQ7wQM~`oVl) z5OR2^>0W)$LVeHt%Z2(qdi|c+iu=L#`>;`+cz5R=uim`55ZIyzw#>i$$(1FKyRPap z3BgY(AhKV@VE$oKsXg4Hb!dmU#5#BjQOaI7#xg|J9mBqjEa2-jj~Bc;Pb#8PB8A=;|Q z)W$N1=B(k9fGwd}rp==D&BP(b4{F54Eh`)v0oK+iZ|YQofGK`;?+oOny z1bNOv7cw4;WZy`UR0xp*YC*z7#A#3x0Z+rja2A0X9?2{l7Uk!*GZ@b%Cb+!8ELcqZ zh{wnRr@$cvHZ4)kl_U&A#ioJ7h-1dKj=+L{3ETzu2PnR$=2I4`AVNh!vB`&}tG(Fv z_HG5@&}g5ig|g8FdY_IYt|sEpoMht=+jCu`5gMSb?(SkGecX&^m0UEQ(I{B4_8D;0 zW3IH~Y!pQ)vtWYBK7~!IHLhTYIHyVPBFgh=*oMrB!#Fz1&rVK|c`>2(DBy6DDur;O zQOL^FuC*&&nB8_QM`Hk!RJ%6PUTnZ2f_%fJX;Q;Im^pC?>!9GQU&Iv^D0o4WGV z@Op4nJ_GX7mS1zKP(Ps8599*_p9Vwk9)0H|6O_UquD#n_2>0pXzE6%9f=Be=k-U6_ z%SnFj9AbDi7+#Hv4ELVW4xy5VYjcrfU=E1gef3q-Dd_bc#kz}ok;uA;5?~lzpFe{e z(z{N3E<>;XXoTT*=pLrsqb}rgk!5At!~Jc#J!e4Ing2?5Y99n3w&pq+6VnNfI-b#D zaJ-_$NPIp4PN$i?6LUW{Nt(|{x7(i!^ zCdv!r4pFvgam0_(v>Zi7OiMrtG~B7k6OwjSzKmH}oo{=wQ2&x%&oFYZWj1$f>P|;K zcmTio#(5ck?w;h2dHDe6W7nfB2OmqLTTP?84L3x;=kT}uqS2c!=OEovubsbu#ewzB zV7HGt)i=zB0f>qa2joRQ$Om6-KiNOn{<<)u(qI%N982=BOsVwN@E`|N;WyEsk4>qe zIH0t)kcf|`2U5XQK+riny@9d&ybWpC*wuya1=lYG*UxR756@pI1o!GiP59S3Ag@2k zfSi5){1c9dm$GQL&@JtsAaJgA??fh>o2n6`K#$i5gvy6u(|pI>ib8Oo9^99g_c7r3 zT8H6@;Nt8HPdEx5b?06)*P zQfK{eXN7uZDk$chN8DU~*1P79-|Z{}`}AO6Uhez)hvS=1G8|`*3?4i6WTW9@c~%+> z9}EQX3sbdXEZFm}Ek6{U^Skag6@vTq;QqY4zkDbNT{FZ;YX`olF7ifIeY5Ua*Q_+^ zQN8d$^-O!fHTq+J4X*Jxrx>sll?c=zAeIQsbYO%OiJEW~85Gij+aN;8mOXQEX)X6Q>dx@+^JfPK zoo|7uQ)K>}doX{ue# zArg65KFcBRNB8I|0lHB!Gb z-ivc##FUw?(lawNoNcHSjNa6Gfi@US6}?YHlHVgtLUQ<*FtazUeeYXue`~I9K38bk zr8n(@Q6#Wt_BcEk?x=I8=41K5Q~2H8%l{%=425S;F+2kXk+n|@pvLYFqhyPB6kLw> zThwYoM#BIW)@W@OPc|&an)~b2HnJIgNv_LFJ3N&QB+P$RP$kv1b>SqohHFDKPRRA~C5CXhX>Cd;U$C=yB>v3IVl>!NHMxE&A2IMfe^C56H3)TGh&TIY`EcZQ1~O! zw4*e_1%&VIi;2)aBwx#8>L5e-HsSpr4<1*Jq!s4mC4j|psnudhGJt_5z+KmLu~LY# z#!@7WlY|bHkVVDGo=bw^g(A_l(2;Fs2n2stT44jlSn5jb8X7`QzfKClU105`gdm&J ziT;V@$rSOh@0n!E)=Vdas~IRZ$VV1FK`?*Ev?Te=CQvoj3Dgwaa@V7bfVJQhRMf=@ z68Db=A%*ro3HA%z2L{eu!q9hE1I3BBseBh@z%H1HCy`4vl};tB6gdK8dyB&P0BeKHCc@wN^>&Wc%n4OrzKY-ei#%#f&=77km`R+=u6hF)3MF| z{jeuYHPr-JLQ8N`Phv)(T*PjiY!NC=!P~}SnCuasMutEIh$v=i=DnRP`o&unm!o_$ zgR=!(xebj8pcU+xZH<_)XDLAK%oYQ=GOO?t^F7w!b1unx;-H3}3+Up&g|;y&VO^=I|~^iu;ZK}HMSf5 z%Gw}m{JF8DFMz**nS^QH827}uzaJo0`;dZPMvx`r19isK8fkNQwpmB)bng#|p@IMi z_0bo{-BJ*qq1-3&VZB{>c>-$76R$gT3La#_f7j>DxFN}r$&Dm6x|!4nXAdSd{tjw* zT&d9#cbL#9=H8lj6G$2TVtCl11PsyvwV-P@NW_XI+$oA#PQLvA$C!z$;2W$K9&9%a zAYXwsi>dfD@sRMQ`DQs$)4{`-E6S?)@o@nyIx!?vuf+)zftj=IYiD4wCaFG?y*KA~c;k&`p}zlDdX4k4FVeOg8| z3AzET4M+~=f3asP$sz0Jo@JpaI75?blBP%!Hv_LJZB$myychb8Y__^AJ4f0 zvLtiLjQt*}v&kLSq!ZTFCdq<^r3W@2`@1d4!?rX|fDaUwJ?7D1THP1{L=j|UQDO?Y zF_G^cGl*f=8T1=Hip^$-lw_)9xHy#=gQpMiO(;ZT4o)mSOa6$Nw5|5XVPzOs;@rUC z0CHMdRCSapTW)ayskGC(Xi{ybMw!hhSNPD98H=zsA5_$lh}B-G;=9cIS4By$+n6Wf zl*O=HEIA2fCL74`SNfVTx4Q`v$}zC=6+#*=oXAq`1p+&xYdYgtwWlww;N*)dtu zN()fLPD)-10GHck&D_OO?WLgm;JRrHMRs!#NzAsXHW@b_v!${tyv(YWZD$X&ubDKc zxW_YM0xf!NZKkpDO=o~P`+)(BD)>>DoTcGMS|BIOE1WQl-5=Dbb*_V{CV^R*x+@EiIUFzQ0wp72X#1^D;mQEd-SX>jZTX$;gn0`Cu@86I9tC6eSB3Y9`t*Y^G*w znK-!^-^9h&78@&bf%GWZNe~*6oQkeQ@f3tQ8a%ew70d1gJeupJbiWyMMPcPSrVv9z zBmHy2J|;NX(Z=H=AC_4Re8OG`AD^!a_bk)Ol~50#{FO1!39NAKClvfP1;2y9foN)Y z0VX208TTFWIOs>9nGS|#lzZ})1$hgMbnOLsw=VC#Cm&dl4}9{Cf_zw)59j5>HZ()h z#Xm5bSqla43cQn899(p!Nwi2NoPucgBOp>tJ5=~YFl`&P88dZ(A#?yPr$E5%%FY5sXMzH{N2|awOBuI2qAZYvJ1v z6RD$3?0k`XwKCTAD~5g?Cmn&WBa}pk5r_&{L*cbFW=~YZc~O*qO;l*{I^;n8_!1_^3uJHo1I0K3fXW~g%Vh&lNpyA=127kX^*eDsj60kyDf|S5$7gK24efbC3 zN~5EdEJrmg8PWM786#*(j-^4fevypoGD!FzH>t2jmd^6BkUGc(YoG6#j4vqtZ z`amgk~YmF2bVVJ&+%Mk`|@N`uhW##Tnxd{~zw z_vGCR^6tBk)M#MNhsBDdO~%XG~y;Mh%RS5)<8kPXL`XmBQ}0N$g2v z&g|yk61Z}Ckz~U(7_Ko;P&gNn`UYB!G_z(BXJV7JIAGJruQUKyZ>IT-`fuq%xsi#g zG)IJR4@XTUVlbb1l=2HBz5+uy@XX`sh#YyvsGD?(g!Z3ZIb`AzQK*FgS;HQMQfPY^ z8%4+Ak|lU$U}e10xO@Rq>x4RJ`2<&O7^a6|n2xzYoMm`V-o7Aj$FYC%E?wT0mv`AP zOzSTO!;mWe7;wf2j&F1#5<)hnehfP_NcUi37Lm-Nn_?mym_-@LflQeEK4VZFU~hwX zy5;%~Q4&95)s864rGw?jmZoEo(VF<$l@tyDHtCiLzF*0BI`WE6{lf#lHJ>FQPx~WQ zAf*9f z6RZ;|`nG%9wqoCYPE0#-BTisqERTbDeI;Tk79y~U37M?0|8EQuP9ZbBaAgtGfeky_ol;>#n2WCV){8?@g-^DqEE{p0KaO)a z=sZZ?223^R&o))3HNWOi#T@yH(e-<#^u4x@~ZeFs(l5oiY~$I+2MT|&x$`I zvbYW-4(0;~i#`^XXSe9L#_sGs7OYWaJ{Cs6-V7Us zwnu-TnnHF-=5TS^^+;z6=89qWxM1$w{e+ND0WIK&cVZYx84`zhDlWRmf7jumZ7n?- z?VZ5}gr+E+NP^WFW$Q4C(S_OrYMf)}B=#Z@1Zr&B$s%o3ij+959LcQH+by58KS3g! zEV4X^|7QY){YVLIN3*ng-M!X53$1(ddruWw2lUo~o59)2+q)L`;{-;WuQ-Qb68be$hHRoYFPM*iM+!8hp+IDf+(d%)$D~=znU=Z_d#5xZKopv4# ziZ&O&xS?&Ylg^}e;)F3c>wQpimKY8qpz}n{>rtg;n@ig2x`_P^ z{6edJrL8V2nGT#Wuab6FVpELkqUgscoC&90s)zn!D_S+Wdy>vFA?1X{gq!DBj3mf* z!O=X7Z6~k>h>)-Y&?X_|5ip8%fS1_2WdF_uv?mt5N@RP$12ZE7^I~zP2O%INMtUuwN(^Pw29hHCUYb)Nm|ik@1d)6>YJS;SCS1r zhDOITW9j4+G*hfNj&G<0ZdP}aWJmYGWw4!l(0H&KO;#pyX6gcyTd8*R7AGI|n3Zv| zteEJQr0C*?e`{Hj&J5k_cTN?&@U6)ywlEu+O4+(%%>}8wMfS+oSX+0smI4TB;}j6| z8uGJ=Ym9eXA9q^iozOYVxAw)<_7eDBkG+mYLqw=2KAA6mU6 z`D)sV!Tm;M$?a~~oNw-ipJK!2V(^*A+f@Hk2?37IX>MDp^sZ`K@*p$zQsIcamd&#R zbZk`eqn1MT7QK24%B-x#{`cara?^P!%6pyvS|)Z2&i zf%Ys7^?NlNrH|Gf@p^E!EUxY+etwm1uTw^3}$hdC}P*x`9)x6 zI<0#idmfKg3Mv69==?5T2FqtpF>Fi0>MN%3YGahI7<+-IWwETiEG;2HtG*oFyVyY* zaPz)O*;&GC;*MpRqGYo6rigt@-2F1$9io7xyn#EERPuhk^Sy`0Fqt z?%KDgbS%}JbNg_l?+W1sugkY@Npc2$m#>}T?15kM*8+L^nwKOi_{@X28!z+NddVNs zeJx9Fudf3b%?v0>tB4M;GJL)W(3=^EGAN>!y|3}%&~Pgd?c*=)7QJKd_tSeG*xv7_-al6Urzk%UZ26xO`TOWS4{Y!I%=c?BN0JqY z_Y`r6>X#*@V{z;D#qGP7s*f-TC=Ep(_Tq$_wYq^ywE~fXA|mX4vv1XsWCh|qMeJhl z>*>7}i1!rH#on)@_f{a@Qv{ACqhYJ11XdstP=vzXH`0465br5s8+%_(@2x<*r-)Ye zzMDE|1>!wLyvQ36peeBek$@uFB!B&qyW6*c3g7{~ufOqHNi4?<3@H%Bcvw|bgfjx> zkfq#60fgcDoG=MV-!oOu(22%)`Z50Vi%yWdXg$z|c+XUJ0Je+_WWZLs!jIr{=~}aL&ZsTW^`2le5=nrg{@sp~$7(nq)9# zX=rz!u!)*nx4HjJ#Yu{cNZ=2RgzYSIqd972;-9^v^4O;nwEu>b6&R9iJ8mHC;!9f% zdGC4pwVy9|&+F`du{w++i}T(!Y_uIFeb@x}kp3s!l!~V~oD)NC6G|I!0Fny{%dS#| z$9d;by(P#0(}BLlBd%5VC7M`#f&#H#t7z3@#zN3UX|&bMyi}h(9mGX{xwzO}G4%&W zKn}+z$bOBp;^-K9g|aZd zfgFrXfsvI;#? z(y^Ebc+m~l=XAKods5|!=Y^Fn7kuFr+pVC}VG9A7aY3i!bxE%PznzyXjSWs^8$1D> zTD5iFViaeveH)1(22fMAzd&G@AdN8l=2aAfZO`&4l6BF5AH@yOhS%$BU>_lDUXYvb zgbVUoU0$1)*RoOj@_seA3m35%Rf`rNWWgy34K$i$APs4 ziupenpYO;kYfVef0)7oGyzaX0zV3!D%r-J#`2ma4&nMs@qM4vW<5Z#*d&`Bn@)XYv zR=qew@Asal&QcWTo%X)@jcM;i(*Lnbd&aIEE9$#)HeFUxZ#8E_cvcD6AZaVlsn>Hp zeOI29ai*W|hKyc`79216lGJryI-Dc1$h_=no#kEktrTQpXRK@wt?abdTGu%eip}fd zD(kKkOI-I)```3Ko9Q=6W61ustBa!LPJRe|>aaR#| zFDXkdDNCOAUnHTNUDqqpE%q~xFOm??uF{e(k{yU$*DF?-0TSxVt`*WQ4+9m>xpqE% zSI+G$7C((qF6r62C#mbETw3}~8JuY4)Q%H49D}h6L{m5eLB5*UV8uDfa<<^13p&(F z($6yQhC_r1&lr`&OE5m54A-I`uFuJW^seh!$;J5O*BhOh{+swlh_ipcTR-i3QF_ni zl5RE8CnT(G*hDEn@ZFJZhD@KaC6@vtV78Lc7L)4pJ=qT{4~*eJ-K!JYp{b4ZfnI#{ znKLsiZP9=zl08FY=p<_S@-L;oBw8eSJL*~Rpjo-!v}OMECtZc6V|vrEr3$=R3`6&5 zr6{H?-Z8pOU%jPGYoul&>l2+7Oao?A#5AxZmlNHsMkPCjh4rVh$X|JJoKniDWGyE@ z46e%cXSC#4GHtX%fom#ove*d`zW~;Tk4e_3Fu4T7ODsb1C|aY6dtuUR!;7y7YeofZ z^{hEwI?&jt9$;VSWXu(cxirSwP(=+l`7A%~<5yJezhj)VzoB3WflaJvpPNRmM0W3H+SJeFYA^Vn_m{RtHbJv}{)9zEHV-)-~0;W&34Bt=l zv%>1jr(3Ipu&|vb_;o-nEW{65H{NUQU1;sS>nXJE(pz^GyiGID-QIpXw&dO5+kHR0 z=AAS5!aWP&p83}c;ivTQQ?r%k_tZAyoZUOG7V5k8`tE$78>|Nu+l>%+^y=05bvyFa zJ0Of#?!LdebHJ5Y1RHGf*~InQrDUAO7|Y5KC! z$$Q~V3*k+3(|YHbLil+-{QPGgw*rMXg4=;5e>t!{=-8@v;QMKK^BF-aG};~Y`8owZ zu&y0l^Obtn>B5HR^bOA;ihoq<@Y{z!+LiCxSJ<#$->|<8@`1hwHH~`Bc0ey$ z&OSax>2`d$_eY0+aQNlhU5B%7iZu zz^*U9*hwFRYt2_Pez}HtH6DPkoAnZ>Rs&A$i+xgUgI=?4uBK2E(Q6_zCmvKFncKJe z&YJnn3oX0Y{infIx31m%)~#>l<^tUK47J<~ZCVIzn!8>I z?bbuPXTfgVudKV>c&DXMxk0al!0$)82cedC4$(XC-QhKQX!HERLTJBEzoWDAr)B-c z;2h9594Lei>Y;-(r;!VOqm7@eDO8-)D^606cC#<;y!T6Q|I*yFd9GaGL3LB!+mt1$ z`Tn;4UDBWJT6IG9{CR~7Ap`s}1POq2eNIedsl4k%+CZ64z;xP4e36kXDbZ~=qAt%4 zmXbysD~wjyWN>mKaFIE4h1QX&qwFdzRX8Mg=Y*-$p2^8Vs4kP?xbsAHmN40@P9HHb zk5#9o74YK2sE_LJ@{Do`+xbK_u3w>-B;}M{r3@}_D?SR#+N_#?yS=fsn8qUY$9`yh zewgW@ipmFQBAAhso$UZm#)QWAi<82F&^gmYasLf`V$1s0GA9Bg;1|EdHAp#l9VnFY zbN8?eJQYoTgN)tuf{d~%`F@BLteOi+d~XL7?wZmC(H9#@lWCk+lZ!{X%?}t;leo?V zH4uAJY&v&HVZ~&x;o~ObN|*HslWW-sZ`W`)*R@K3%u|{VU(U{u|eka9y9iuCL&2n|b#3>LrvAx>wP>P|;kdXw@rP z?_?G#VEhjFy6?BFe!uDaYkp(R+_wrXJN1^GH*078xBbWwsQ=Xi-#u{i(5*vvURbCm zyH8~oNZXwQ`A}y*(1}(BYH#hmSG{_ndi9+Xh3XA@^@e-Z-3!&-+|E5exlj#y>8ji> zNcY^HLTED)y3_g4zI-sFY_4H@eB|TKYM|H^jF5gJPG=e5C2$IB~x?b0Mo2SIt9bezxbjNL>QrE z95I<&1aosRYQ<}6PL^3D4Se%qG^ZV*7LdqhRE(uEBk&~UAI+-Z%KEHEPDNTBC8#p@ z)M4@Pj|SHazH+uddhAsHv1bR)oHXPs8tsYKvh0gghMyn0VN}uwv#^&vkuoaia|AEO zG()!h`wS19YS>{$TpNwLL36{j zD2?P;Lm4!;Q6A$vKF?~IILkmRM`?0ctMp9MX0o34T(x3GfAW(&bu| z+Vjre1F0cz{T8Ll8TM~cs-0o~Y&TUi?BAkPpSOOC(uTbAw+PGG<)LasavOJDj#@jW{%t#n2q0A^?vKzvH4X$X_$LPZ|Ti@w-vnG zbnmtq*JAzZ+w0%y&bMv7drsedI$!@>q5e6&{<)bTJYjBce`kMwP48Vz-}`(%bhZ#W ztB20!rMgFCs%f14#;sRwPtWhrw;amX94^!x)@u&WR4uOSy7R{S*U;ekc75}6_$rp- z##gZvH;GB^ywrw8__rQ zBXb*NZlla?$lQ#~)#2Iox4Lf+%$?IW?#@^3DOByztM<%PEcq*3dtiQd1mV-wF31?m zho75(G$sA}NZpSJZ`qMS+r~S}x-_mMJQdEm1N_Co!E2u*5D&h`42U zA&Lyua#FQrQZ-Riw^pY&w&S?c*pqQPX~$1(Ch1Gt7m$M)Vs`4OI+;G?jT*@_uAch+ z=j<-90H`>Vhc3Z?FXy`d{r}I|ziV%A6>$9MUtX76&IrQK>Bc(z{KEC<6_+5qE69TE z$_QE4jLSvW?u>iJ&CZ?~FV3EfFYBN2vodcckPXZP*tHMW!I>bt_GenMtuw9cI)Ll8 znKpJE%!IP-Gwrx;ky|t2Y-A?l5)|*X4r?lE7$t3)&TQ9A7poP@M6=y9-Pt`edt8EB z__83k-xB1o;(y;G2p`~|A2U6yEP}EQrCsTH--}ZGo29+1v=gOWN^f1uK2{b*S@-*H zw8FpHYOh;RBJbno1M876)6Z(}LG2!8Z(UFOWcQR1>-`1Qj=79BDVNLZlAg}zvD6)l7C}J`>lqe`_R>~{iZ-I;u8(BW zvm=FNeIcJa6+d}$L`&<+@d79<&7;B`QF6q@h!!s_8!h(SR(fjj8n>VKVhUOxz?!h* z7dpDXf8)D1?uIs$&B$;$GF%D{KO)Q+zUxw^s2JV}@M6jq29yw6FpNHji+2UR2HUHy z_i^`u{bUs?OKICx)(*2CZ+BL*lp?qRGClxfA$~P zIQ(aC|Ha$u-u16<2K!6wr}m@9`RNJt-btOYk-TgWcFmtsH?dYDm`LQLtddB8Vu@^C zE@tRDlt_HDC}qr&Kq4XMQ+OOKsCl4JUuF|D{FudaJQ1C~}zCAl` zmoK&>Sb(bZ*pEX(TgTeiPAe$7cELQYU0A!o=Ru>V@NXX^7dTvxz5@9Bb>c0%q2k>$ zJ~<+HtP684Ie4pm#xHlW>$Y1Vh;T&iVt4H*3EFpI+_kI=H(WC$+EF7qrKF&{#`5{a zv|_TO)B^r^RninO1@6_vxx8x0v_>MY$YMSxYS4SQO0kw&ytP%t!KBfWe^Pf!PKHv* zWYB@mByg0p!f4VWNK%9EvZ@Oy*(5a6%Y(Yd5`&f0Y z)~PzO$sm_+qGssYrX-$G;*~*MU|`p(kg&UBcXn;+=)QYm8UlD2Rn#K{dH}fQWAb3M zn zGa+{yKCK9`C0XZv#=Knbkn&PT0F0JIf-zzup%IS3W@}t*PvUN6;As;)j~d!<0(=Ht z>UOsrfc(~iPlG~B_&b5yf$d=5RZ zh}WsyJnHCPtFEmoLcMaH5>&E@F%Kuw30xa(i3F?_OiVVBKmpUxr%<3i51`S2Hg;aX z&C0XQv19jfnVJ#T06~?$fpzcg_D>?+-&wl7v>h4TiVSX?+Kdd9BSWR&5XVG7R_3H) zMo-neoM5v)=_yEm!XA%G@SKd==! zuyJr>X)`iXj*OIoBV1@*6A(-$lgH4ms)z8DA^)`fl*(iNnx~8|)mE&$O?`$MJWD_% zaDYHnBavvU#KDZrD!r7^Zt8)QlF5MkU7Y7hv%SLgL5%7XAW_l&836BR{q4B@zTl2P zpkL_N0}~wLC$Epp`cpyJ?K?`Azc~oH$>={7pvnoV@~Z)cdGx*RF^}IN* zEiQSMJ`J`2k zPvj?Ah~Wq>NJ&M=Fp9Wvy25guEBtL29N?9;Y0Rj`jVR{qcM@lnlmz_XZBZkIfQCgD zOOl3L9dA5kx;VTrL172{Bzi>zl9_ahMVR!~8e$850dFN1b7=&4QsiNvcY&`kL@bxF5E!ee|Kn8)JSY@!2lQCm+6YY4E{ATBbMBf;r5W^5@_}LFnK2k3s+pzu9A0Z?R9`V z#{f2b0QWou<^ewT|D?YXY+v`S`}mMFP;-%5L5WkO6ffLtH=OH1CRzdcpxg!#3(AL( z;qW3xJ}gIYZpD2E&TaA$xfACQ&RsaS<9QV4uskI9;vA8W%6&L@$T4{U=T7-KS;V3eLI`dJwJgyTXOxJWNJ2nmvShNBA25LU zMNYG$R)QsFvj9pP+oS&FWs_$vTAdz^aW=V(Xdn&s!%&W7C1jGafD9kV-q9e@gI;u-H^J2qM%>!!vkWfAy_nS&Y9J# zjXdevL*5Zj6z-OKb;ho+QZDJ=;B}8N`K2^4iMCA~ju%UerCLE2P2J07nN5;34*ID! zw*@<2%*Z6RM59bzq6Cc$SBV&(s6LmTFTz2^d)xgmCzZ)HkWSehay8T71R@gb2He;i zNHwID9BiWH%u(63{H&N~`o-?c@k(6YH0H}%^UEObRV*-8&%<4{bOG@f+*i9Fp6BAO zA5aCpl5!eMEZ&Ami6ky4nF3ifhl@?qSpqBA{g9VO{AoX6nKrJH$hv@wkgTQ`LrW{q zRiklv1|><>&Qy7v*9re{IlF4LGp~E!%>S|s0db0%|1~-r)cML_y>5s%)cH&Fp!ER2 zpX){nbUSinD{{mcTN@rQh~ej4!qUNxbc@$w*I`^Zoq43pgliNDvZG<0z_s%4V+%@Z zkwq?&IG?@_1!FN|JqLq>$O>2t&8TLhofr}seUJ}~NZNxWx`8bASj1g5<9uE+*~2v@ zm)mGfLj!Pnt5@*KNU5<*&?K&FbM;0ftvL+uie>q2Egr9{ai6-N&enua!$L>@-Gg`a z^0O~&M$VKYXG*~{+<~TO-$5H&l?p;AE=8CfHmPkr0e!dsULZf6Q$q@hKVPwND7LpV#6YgjgX^g zx;sK{x>wyQ{&QH~0&+akAA^etKWuTwLQpb!E>8*#zE%PD2#zF_nQ4$Lqi7)yUYqH6 z3|HAm%`ZX!k!1#BGlv~!7(9%DcspWex>IgIbHkOU(U_g$(XB}SYE@%gK~;4rttre$ zr)57TFX$1bjWl#_ncP*g8?IVSspId3UYC%?sSzBaIh(;K(#{h6VJBVBUAcVr;sjhW zrul2yRqY@5_{jo3A3tTkIw`mb?uXSVzhS&0#v??{k&{KP0ZlxKaVNhrKFK)DS^=Og zj6F>!G@-r)@>(%EsY=7GUU!D*oiz-_G15d|Hq`ki^reXaOkajOZ_kwaM#}9c*4>po zy`{*3b#-06J6#GMU~Jf27Ab$WJL?rf4k>jzq|_t1!H7Jg!s$|w;MCDlP}T7NiR%KU%fJM>8++@t-*b7 z9V=MvcENVEMu@CAuN<1H%csPf)cOw~{81OjI@V_y)=!lqr%S=pzaFB$*9_4OV#D(+ zmgi~*LN=mV`2YFQJ2gJ`=Hxio8nI_JciL2o@v6JvvsQ8ODL!3s@j6??!6q()CN58w zBhQzD&;NS3{8x@ki0sf5HkPE=-VW#^++UJz&_)lFk)8O3n3G+xkqK^u0i8l%h!*x5 zbDXiZXybl&mbN=0K5uTUrr@4TU7Q|oMuB>sw(9OegIb=}FmKvj@^qfIYE?i7b%6k7 zS&e|{C$Mb}Pa@WaCd+j}7-%1KjepmpBrae-+*MyrJyN@3hUJ54@y2*nzJkpf>&dv+*s1ZVtIr&h}_aV+!JZ)%n%U)%(t?M!uY{V zOV#N$L~)sP&UD?W?JW0-tUj3hRrzEWyJgKOhZT)u%we(j?N}YzlgXs#*sd|tYe6oR z?VO;o;oMp)0#$`a$#}BDD&Yw`SMp0L;nnaI^_0T zR7GHdZD4Dz7wc;M7xhJJ@XQ*8qUE*$>~3kf;`$`I@12)^7<@0Z89iQ(9{=tPGpuN%+qO3Exr%Y2!tK7&A^D$Sv&VNVqjCfZ`UPyl}GgojqS zu)G88)<(Nk=ewGGI(gC_))=r1c(d8VYi8@cjN@t9M=dt6ZYL)ZINpldnwX%5I<&D< zqXj0gZJ*H5TaG-7#n+D33OG2lzZAN(aqzw8O2=O>4_?~wxXqO?BVeZ8)ONIdf{jtt z6nQf(X>;^5sP4>0I1^@ASaeB02j8-k4Ny%va$wlZ8MFLej`BuumneN`rT^g5&ViY2 zY!-?dTQelSu(FFFzpmVX`#YciL|DXVPQ>!MNq*Bgj7$oi834-r5oUPy z3x)PPSdJe|&FcZF6w0NsS|X>>ni7Ao8MJ;%hTX=O-Q2_*4_qA)V3BgG*1AVS7ONVE zu(UrTriN7}(k65u^$qBC`U{QtF^Nvs(KGfI}N6lC3yx zHpRLOmeGLcCcF#<$+G6ABC@-ILNb?=>M~Zemyg!+D43&orZ#L>Z{nS;9c8w8RM+s- z+BRb@q=#zP9-Gjhwix^9Z5o6dXh0if*ig>QJDyHrSapg3ZCbGQzSh;H)LLT?UvK)9 z+-&#^)gH+BGY^lCQ1~U~4eg0Hnf~MLzlGcT!KVGMQBB5U>|Kb_V$r5s1!&oUWhsqN zA)Q*p9$vPGRDFYa`j^G4cZr@4Ty;BQ;r92!IcVH^Z0o$0BB^c52e&*j+njK<&ld7*e+|j~`d!IPdFWW( zE6(!;$x(P_qsg?c$+SBF&$T2uYuH%Mb@)n{J8Q?y5e@G`R!Y?f05SWM{mnn~u)GA@ zdqrLH-+@xsqwnFunTylhv=_HFp28Z2-4@p-DFop|mvcn}TZ&uIoq5z|@zBbSv2bli zWvlKF-Of*KDA|l%_(mApl(2C}OYsKLn`Fl&XXhry=a2+zj;&+W?=>8gb>+ z(^!QibQ&8Ck&-6Of{m@n+y52?E`60~@14`1^bJ(@JzL%v|5z@+d=(zx-qwc#z+(dI z?VsYCizAg#IzJX6~P`m7z%E~@X-DZn?qt6r@eZM}Ab znhU323*K$37J>_HZriZcL$zEGoUQA|^|c7Ao(*D_hGW&c>T8ey|88?!^*ei>5)KMF z**Wt#B&fYE!uaQS!<73iNa&Jq!}FG~MB4+gQX0rgHxk$c8EaMl2wfTht}rydPnGx$ z^1(v~zK&{mptV$;73lcPj5fi*{ggGsNA9hr60%|ezJSLpIq{R>(hLt$&9 z<>-m^b9O%)@@Di{IeM%VI`-Kok$r5CDzK~B!(l}Hc08ENXPQjb6N9((nK@Y55| zjCFc`*5LwVX%X%jtpNkOc*m_MVsd#0GW9FSr5F4J^t=yzePH9v{QSo|5%U>- zzJzFaX|;&Hazn~mF@jds*9clGABKO7rM+T)Bf!#nil+W8hF1TIz+V&CAn-Q;vCeuQ zoE&NHe$Ug@VF0)WECFOLpR*@ElQ-B;Onpt5&A!TpEv+i4d%haL)n&aTG<;L-zh z3GLDK^O!!RWx1BDgt~8E-VW{G3hlqUuo)UEGtKybW`1}pa(E+k@62Wd>skmrTo^ml zwSN9VSI>6Wb6Z`{-8=PBV6*GRa@ULNfl9b*I~>~z$L<~649Cmi_;&d8R`~QkPJcY~ z_uu&OH#Wm#_7TG6yYa={^_08@0u)?TZ058;uwjUqfJ=nv8NCr&VMjOy(I zc!WpuiVe^gv~xxJOg)iM$*ia!0vLXMnLcqhT)GiS<&l5Q%T7iK|*X?m*!Q{-$wiNTUW;uV;9E9UcWf;ezS1g5aiLQP`fZ=EmkAi$gAaeAEc;4&Mtsr00*T zh10IED~tp~11NPJen^iWSIY)dZWoda&EZ4#{BdpRC7-Zwq|_hZ>_1WN2UdD_{BOBj UVB+Smbnw(eR`ht63XBE*4_P%;1poj5 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/signals.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/signals.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..567ca0803dcb859678bed2bfd0ecdcb3f445cc16 GIT binary patch literal 1979 zcmZ`(&2QsG6dxy!lcvq4`RJxC(3--k1gWu>ElbftySo%5gw#EBB~UJw6Hi+c$2Q|h z(?m#HAr6bQr(S}3DW@V-#J|A5;Gi6=kyfgN_OKTeR8Bqd?8H%$-Au;gH_yL$Z{Ei* zza|oK1mllCzfzk#LVtUkV1#=Dcl8g4Pz$L@<#bf#iX7+3Aw5(K`)|I;!#k`;szOoV zPzYh+9FATDc2F^jqrb!k+aW>a&%yQuJiSqznuv^yA>$K~!WeRTA~HILoSBG>jUf{g zkyB&H8xxW7F=TQga(WCoI}tfEhD=RFCdQCyHKV3~nmNU?%BDf_5d|kh_|(t`tL7UX zQJIznzLF4vt?c8qJzeoIj5i=E7Pcv20>QLKjOz$3JTMyNL2E)fBJcnyxT^yYTIhQq zL?r|wB1?1#_w7JdLlj6A3^n{ae-7s_`oscDNR8|w8VwK#Y>t-Y2QDw{u#~Os8;Wkr z%Aum^N=e5}^YH-|S6|VuiVCGfE7d3#HCt4%MQ|BPq>756igiub#S#_?u9}CS(+u$o z$UsH>ps-#LcY97mgq^5G2mT5#y+EPOxz`z+B7afyu=GfQr6zB?6}ivNpX`OjOr{xXARvrp-Z z`25e=c6_N5Uvl`RD=>!gydMt{Kqg)(iT78R&$75I@717}F!=XM&IH=9AXki|B;oC& zC0#QhT;eqei^=`VGodH20m0;eV60EDzCsQN#sY%LeS)!oU~)h(77z>$`Gk=@f-#R^ zV9h6(JRlewBG@Q?h)r^jU~EL?6O07}lluho^Zy$n83>f5V7ZQcQZ?0@jyK6I*m}KS z--5Lp<~YtpE6(V=L}@3OE=nHzzf1I%GdjBhnwfk0@lW@j-8+t5X5VZ*I(g*0`%yc) z(aCN&DCI7^eYSkM?BpM`7an#N9y;izn_g^5Cz7*rr=4E!q}Pv=Zsv{F*2$Lh&WG*H z-A?ANgJ#{_a_h;-6KD0)c5bti+jLOYofprNr%C6%t@ix=&is7`&AE#!XVR(Uy#HBy eal5m)?Vz0dnmfEk^~xQ(LY!Ofq6v$i#{U5V91DB^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/templating.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/templating.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57b20f74d43fb977422e35f9dfd17295f1662aaa GIT binary patch literal 10629 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/testing.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/testing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..853d35b850ad4b92d177ce91fc3f9a3d30e1ffec GIT binary patch literal 14643 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 B_i_LL literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/typing.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/typing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c9fef8bc241005f756e7b442b0673a1dcaa1581 GIT binary patch literal 3445 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/__pycache__/wrappers.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/__pycache__/wrappers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fae0ab28a2086e488a7988428606b1414bf664d GIT binary patch literal 6784 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 MME$Bmmyp?i0fDFkcmMzZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/app.py b/env/lib/python3.11/site-packages/flask/app.py new file mode 100644 index 0000000..bd90a24 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/app.py @@ -0,0 +1,2213 @@ +from __future__ import annotations + +import logging +import os +import sys +import typing as t +import weakref +from collections.abc import Iterator as _abc_Iterator +from datetime import timedelta +from inspect import iscoroutinefunction +from itertools import chain +from types import TracebackType +from urllib.parse import quote as _url_quote + +import click +from werkzeug.datastructures import Headers +from werkzeug.datastructures import ImmutableDict +from werkzeug.exceptions import Aborter +from werkzeug.exceptions import BadRequest +from werkzeug.exceptions import BadRequestKeyError +from werkzeug.exceptions import HTTPException +from werkzeug.exceptions import InternalServerError +from werkzeug.routing import BuildError +from werkzeug.routing import Map +from werkzeug.routing import MapAdapter +from werkzeug.routing import RequestRedirect +from werkzeug.routing import RoutingException +from werkzeug.routing import Rule +from werkzeug.serving import is_running_from_reloader +from werkzeug.utils import cached_property +from werkzeug.utils import redirect as _wz_redirect +from werkzeug.wrappers import Response as BaseResponse + +from . import cli +from . import typing as ft +from .config import Config +from .config import ConfigAttribute +from .ctx import _AppCtxGlobals +from .ctx import AppContext +from .ctx import RequestContext +from .globals import _cv_app +from .globals import _cv_request +from .globals import g +from .globals import request +from .globals import request_ctx +from .globals import session +from .helpers import _split_blueprint_path +from .helpers import get_debug_flag +from .helpers import get_flashed_messages +from .helpers import get_load_dotenv +from .json.provider import DefaultJSONProvider +from .json.provider import JSONProvider +from .logging import create_logger +from .scaffold import _endpoint_from_view_func +from .scaffold import _sentinel +from .scaffold import find_package +from .scaffold import Scaffold +from .scaffold import setupmethod +from .sessions import SecureCookieSessionInterface +from .sessions import SessionInterface +from .signals import appcontext_tearing_down +from .signals import got_request_exception +from .signals import request_finished +from .signals import request_started +from .signals import request_tearing_down +from .templating import DispatchingJinjaLoader +from .templating import Environment +from .wrappers import Request +from .wrappers import Response + +if t.TYPE_CHECKING: # pragma: no cover + from .blueprints import Blueprint + from .testing import FlaskClient + from .testing import FlaskCliRunner + +T_shell_context_processor = t.TypeVar( + "T_shell_context_processor", bound=ft.ShellContextProcessorCallable +) +T_teardown = t.TypeVar("T_teardown", bound=ft.TeardownCallable) +T_template_filter = t.TypeVar("T_template_filter", bound=ft.TemplateFilterCallable) +T_template_global = t.TypeVar("T_template_global", bound=ft.TemplateGlobalCallable) +T_template_test = t.TypeVar("T_template_test", bound=ft.TemplateTestCallable) + + +def _make_timedelta(value: timedelta | int | None) -> timedelta | None: + if value is None or isinstance(value, timedelta): + return value + + return timedelta(seconds=value) + + +class Flask(Scaffold): + """The flask object implements a WSGI application and acts as the central + object. It is passed the name of the module or package of the + application. Once it is created it will act as a central registry for + the view functions, the URL rules, template configuration and much more. + + The name of the package is used to resolve resources from inside the + package or the folder the module is contained in depending on if the + package parameter resolves to an actual python package (a folder with + an :file:`__init__.py` file inside) or a standard module (just a ``.py`` file). + + For more information about resource loading, see :func:`open_resource`. + + Usually you create a :class:`Flask` instance in your main module or + in the :file:`__init__.py` file of your package like this:: + + from flask import Flask + app = Flask(__name__) + + .. admonition:: About the First Parameter + + The idea of the first parameter is to give Flask an idea of what + belongs to your application. This name is used to find resources + on the filesystem, can be used by extensions to improve debugging + information and a lot more. + + So it's important what you provide there. If you are using a single + module, `__name__` is always the correct value. If you however are + using a package, it's usually recommended to hardcode the name of + your package there. + + For example if your application is defined in :file:`yourapplication/app.py` + you should create it with one of the two versions below:: + + app = Flask('yourapplication') + app = Flask(__name__.split('.')[0]) + + Why is that? The application will work even with `__name__`, thanks + to how resources are looked up. However it will make debugging more + painful. Certain extensions can make assumptions based on the + import name of your application. For example the Flask-SQLAlchemy + extension will look for the code in your application that triggered + an SQL query in debug mode. If the import name is not properly set + up, that debugging information is lost. (For example it would only + pick up SQL queries in `yourapplication.app` and not + `yourapplication.views.frontend`) + + .. versionadded:: 0.7 + The `static_url_path`, `static_folder`, and `template_folder` + parameters were added. + + .. versionadded:: 0.8 + The `instance_path` and `instance_relative_config` parameters were + added. + + .. versionadded:: 0.11 + The `root_path` parameter was added. + + .. versionadded:: 1.0 + The ``host_matching`` and ``static_host`` parameters were added. + + .. versionadded:: 1.0 + The ``subdomain_matching`` parameter was added. Subdomain + matching needs to be enabled manually now. Setting + :data:`SERVER_NAME` does not implicitly enable it. + + :param import_name: the name of the application package + :param static_url_path: can be used to specify a different path for the + static files on the web. Defaults to the name + of the `static_folder` folder. + :param static_folder: The folder with static files that is served at + ``static_url_path``. Relative to the application ``root_path`` + or an absolute path. Defaults to ``'static'``. + :param static_host: the host to use when adding the static route. + Defaults to None. Required when using ``host_matching=True`` + with a ``static_folder`` configured. + :param host_matching: set ``url_map.host_matching`` attribute. + Defaults to False. + :param subdomain_matching: consider the subdomain relative to + :data:`SERVER_NAME` when matching routes. Defaults to False. + :param template_folder: the folder that contains the templates that should + be used by the application. Defaults to + ``'templates'`` folder in the root path of the + application. + :param instance_path: An alternative instance path for the application. + By default the folder ``'instance'`` next to the + package or module is assumed to be the instance + path. + :param instance_relative_config: if set to ``True`` relative filenames + for loading the config are assumed to + be relative to the instance path instead + of the application root. + :param root_path: The path to the root of the application files. + This should only be set manually when it can't be detected + automatically, such as for namespace packages. + """ + + #: The class that is used for request objects. See :class:`~flask.Request` + #: for more information. + request_class = Request + + #: The class that is used for response objects. See + #: :class:`~flask.Response` for more information. + response_class = Response + + #: The class of the object assigned to :attr:`aborter`, created by + #: :meth:`create_aborter`. That object is called by + #: :func:`flask.abort` to raise HTTP errors, and can be + #: called directly as well. + #: + #: Defaults to :class:`werkzeug.exceptions.Aborter`. + #: + #: .. versionadded:: 2.2 + aborter_class = Aborter + + #: The class that is used for the Jinja environment. + #: + #: .. versionadded:: 0.11 + jinja_environment = Environment + + #: The class that is used for the :data:`~flask.g` instance. + #: + #: Example use cases for a custom class: + #: + #: 1. Store arbitrary attributes on flask.g. + #: 2. Add a property for lazy per-request database connectors. + #: 3. Return None instead of AttributeError on unexpected attributes. + #: 4. Raise exception if an unexpected attr is set, a "controlled" flask.g. + #: + #: In Flask 0.9 this property was called `request_globals_class` but it + #: was changed in 0.10 to :attr:`app_ctx_globals_class` because the + #: flask.g object is now application context scoped. + #: + #: .. versionadded:: 0.10 + app_ctx_globals_class = _AppCtxGlobals + + #: The class that is used for the ``config`` attribute of this app. + #: Defaults to :class:`~flask.Config`. + #: + #: Example use cases for a custom class: + #: + #: 1. Default values for certain config options. + #: 2. Access to config values through attributes in addition to keys. + #: + #: .. versionadded:: 0.11 + config_class = Config + + #: The testing flag. Set this to ``True`` to enable the test mode of + #: Flask extensions (and in the future probably also Flask itself). + #: For example this might activate test helpers that have an + #: additional runtime cost which should not be enabled by default. + #: + #: If this is enabled and PROPAGATE_EXCEPTIONS is not changed from the + #: default it's implicitly enabled. + #: + #: This attribute can also be configured from the config with the + #: ``TESTING`` configuration key. Defaults to ``False``. + testing = ConfigAttribute("TESTING") + + #: If a secret key is set, cryptographic components can use this to + #: sign cookies and other things. Set this to a complex random value + #: when you want to use the secure cookie for instance. + #: + #: This attribute can also be configured from the config with the + #: :data:`SECRET_KEY` configuration key. Defaults to ``None``. + secret_key = ConfigAttribute("SECRET_KEY") + + #: A :class:`~datetime.timedelta` which is used to set the expiration + #: date of a permanent session. The default is 31 days which makes a + #: permanent session survive for roughly one month. + #: + #: This attribute can also be configured from the config with the + #: ``PERMANENT_SESSION_LIFETIME`` configuration key. Defaults to + #: ``timedelta(days=31)`` + permanent_session_lifetime = ConfigAttribute( + "PERMANENT_SESSION_LIFETIME", get_converter=_make_timedelta + ) + + json_provider_class: type[JSONProvider] = DefaultJSONProvider + """A subclass of :class:`~flask.json.provider.JSONProvider`. An + instance is created and assigned to :attr:`app.json` when creating + the app. + + The default, :class:`~flask.json.provider.DefaultJSONProvider`, uses + Python's built-in :mod:`json` library. A different provider can use + a different JSON library. + + .. versionadded:: 2.2 + """ + + #: Options that are passed to the Jinja environment in + #: :meth:`create_jinja_environment`. Changing these options after + #: the environment is created (accessing :attr:`jinja_env`) will + #: have no effect. + #: + #: .. versionchanged:: 1.1.0 + #: This is a ``dict`` instead of an ``ImmutableDict`` to allow + #: easier configuration. + #: + jinja_options: dict = {} + + #: Default configuration parameters. + default_config = ImmutableDict( + { + "DEBUG": None, + "TESTING": False, + "PROPAGATE_EXCEPTIONS": None, + "SECRET_KEY": None, + "PERMANENT_SESSION_LIFETIME": timedelta(days=31), + "USE_X_SENDFILE": False, + "SERVER_NAME": None, + "APPLICATION_ROOT": "/", + "SESSION_COOKIE_NAME": "session", + "SESSION_COOKIE_DOMAIN": None, + "SESSION_COOKIE_PATH": None, + "SESSION_COOKIE_HTTPONLY": True, + "SESSION_COOKIE_SECURE": False, + "SESSION_COOKIE_SAMESITE": None, + "SESSION_REFRESH_EACH_REQUEST": True, + "MAX_CONTENT_LENGTH": None, + "SEND_FILE_MAX_AGE_DEFAULT": None, + "TRAP_BAD_REQUEST_ERRORS": None, + "TRAP_HTTP_EXCEPTIONS": False, + "EXPLAIN_TEMPLATE_LOADING": False, + "PREFERRED_URL_SCHEME": "http", + "TEMPLATES_AUTO_RELOAD": None, + "MAX_COOKIE_SIZE": 4093, + } + ) + + #: The rule object to use for URL rules created. This is used by + #: :meth:`add_url_rule`. Defaults to :class:`werkzeug.routing.Rule`. + #: + #: .. versionadded:: 0.7 + url_rule_class = Rule + + #: The map object to use for storing the URL rules and routing + #: configuration parameters. Defaults to :class:`werkzeug.routing.Map`. + #: + #: .. versionadded:: 1.1.0 + url_map_class = Map + + #: The :meth:`test_client` method creates an instance of this test + #: client class. Defaults to :class:`~flask.testing.FlaskClient`. + #: + #: .. versionadded:: 0.7 + test_client_class: type[FlaskClient] | None = None + + #: The :class:`~click.testing.CliRunner` subclass, by default + #: :class:`~flask.testing.FlaskCliRunner` that is used by + #: :meth:`test_cli_runner`. Its ``__init__`` method should take a + #: Flask app object as the first argument. + #: + #: .. versionadded:: 1.0 + test_cli_runner_class: type[FlaskCliRunner] | None = None + + #: the session interface to use. By default an instance of + #: :class:`~flask.sessions.SecureCookieSessionInterface` is used here. + #: + #: .. versionadded:: 0.8 + session_interface: SessionInterface = SecureCookieSessionInterface() + + def __init__( + self, + import_name: str, + static_url_path: str | None = None, + static_folder: str | os.PathLike | None = "static", + static_host: str | None = None, + host_matching: bool = False, + subdomain_matching: bool = False, + template_folder: str | os.PathLike | None = "templates", + instance_path: str | None = None, + instance_relative_config: bool = False, + root_path: str | None = None, + ): + super().__init__( + import_name=import_name, + static_folder=static_folder, + static_url_path=static_url_path, + template_folder=template_folder, + root_path=root_path, + ) + + if instance_path is None: + instance_path = self.auto_find_instance_path() + elif not os.path.isabs(instance_path): + raise ValueError( + "If an instance path is provided it must be absolute." + " A relative path was given instead." + ) + + #: Holds the path to the instance folder. + #: + #: .. versionadded:: 0.8 + self.instance_path = instance_path + + #: The configuration dictionary as :class:`Config`. This behaves + #: exactly like a regular dictionary but supports additional methods + #: to load a config from files. + self.config = self.make_config(instance_relative_config) + + #: An instance of :attr:`aborter_class` created by + #: :meth:`make_aborter`. This is called by :func:`flask.abort` + #: to raise HTTP errors, and can be called directly as well. + #: + #: .. versionadded:: 2.2 + #: Moved from ``flask.abort``, which calls this object. + self.aborter = self.make_aborter() + + self.json: JSONProvider = self.json_provider_class(self) + """Provides access to JSON methods. Functions in ``flask.json`` + will call methods on this provider when the application context + is active. Used for handling JSON requests and responses. + + An instance of :attr:`json_provider_class`. Can be customized by + changing that attribute on a subclass, or by assigning to this + attribute afterwards. + + The default, :class:`~flask.json.provider.DefaultJSONProvider`, + uses Python's built-in :mod:`json` library. A different provider + can use a different JSON library. + + .. versionadded:: 2.2 + """ + + #: A list of functions that are called by + #: :meth:`handle_url_build_error` when :meth:`.url_for` raises a + #: :exc:`~werkzeug.routing.BuildError`. Each function is called + #: with ``error``, ``endpoint`` and ``values``. If a function + #: returns ``None`` or raises a ``BuildError``, it is skipped. + #: Otherwise, its return value is returned by ``url_for``. + #: + #: .. versionadded:: 0.9 + self.url_build_error_handlers: list[ + t.Callable[[Exception, str, dict[str, t.Any]], str] + ] = [] + + #: A list of functions that are called when the application context + #: is destroyed. Since the application context is also torn down + #: if the request ends this is the place to store code that disconnects + #: from databases. + #: + #: .. versionadded:: 0.9 + self.teardown_appcontext_funcs: list[ft.TeardownCallable] = [] + + #: A list of shell context processor functions that should be run + #: when a shell context is created. + #: + #: .. versionadded:: 0.11 + self.shell_context_processors: list[ft.ShellContextProcessorCallable] = [] + + #: Maps registered blueprint names to blueprint objects. The + #: dict retains the order the blueprints were registered in. + #: Blueprints can be registered multiple times, this dict does + #: not track how often they were attached. + #: + #: .. versionadded:: 0.7 + self.blueprints: dict[str, Blueprint] = {} + + #: a place where extensions can store application specific state. For + #: example this is where an extension could store database engines and + #: similar things. + #: + #: The key must match the name of the extension module. For example in + #: case of a "Flask-Foo" extension in `flask_foo`, the key would be + #: ``'foo'``. + #: + #: .. versionadded:: 0.7 + self.extensions: dict = {} + + #: The :class:`~werkzeug.routing.Map` for this instance. You can use + #: this to change the routing converters after the class was created + #: but before any routes are connected. Example:: + #: + #: from werkzeug.routing import BaseConverter + #: + #: class ListConverter(BaseConverter): + #: def to_python(self, value): + #: return value.split(',') + #: def to_url(self, values): + #: return ','.join(super(ListConverter, self).to_url(value) + #: for value in values) + #: + #: app = Flask(__name__) + #: app.url_map.converters['list'] = ListConverter + self.url_map = self.url_map_class() + + self.url_map.host_matching = host_matching + self.subdomain_matching = subdomain_matching + + # tracks internally if the application already handled at least one + # request. + self._got_first_request = False + + # Add a static route using the provided static_url_path, static_host, + # and static_folder if there is a configured static_folder. + # Note we do this without checking if static_folder exists. + # For one, it might be created while the server is running (e.g. during + # development). Also, Google App Engine stores static files somewhere + if self.has_static_folder: + assert ( + bool(static_host) == host_matching + ), "Invalid static_host/host_matching combination" + # Use a weakref to avoid creating a reference cycle between the app + # and the view function (see #3761). + self_ref = weakref.ref(self) + self.add_url_rule( + f"{self.static_url_path}/", + endpoint="static", + host=static_host, + view_func=lambda **kw: self_ref().send_static_file(**kw), # type: ignore # noqa: B950 + ) + + # Set the name of the Click group in case someone wants to add + # the app's commands to another CLI tool. + self.cli.name = self.name + + def _check_setup_finished(self, f_name: str) -> None: + if self._got_first_request: + raise AssertionError( + f"The setup method '{f_name}' can no longer be called" + " on the application. It has already handled its first" + " request, any changes will not be applied" + " consistently.\n" + "Make sure all imports, decorators, functions, etc." + " needed to set up the application are done before" + " running it." + ) + + @cached_property + def name(self) -> str: # type: ignore + """The name of the application. This is usually the import name + with the difference that it's guessed from the run file if the + import name is main. This name is used as a display name when + Flask needs the name of the application. It can be set and overridden + to change the value. + + .. versionadded:: 0.8 + """ + if self.import_name == "__main__": + fn = getattr(sys.modules["__main__"], "__file__", None) + if fn is None: + return "__main__" + return os.path.splitext(os.path.basename(fn))[0] + return self.import_name + + @cached_property + def logger(self) -> logging.Logger: + """A standard Python :class:`~logging.Logger` for the app, with + the same name as :attr:`name`. + + In debug mode, the logger's :attr:`~logging.Logger.level` will + be set to :data:`~logging.DEBUG`. + + If there are no handlers configured, a default handler will be + added. See :doc:`/logging` for more information. + + .. versionchanged:: 1.1.0 + The logger takes the same name as :attr:`name` rather than + hard-coding ``"flask.app"``. + + .. versionchanged:: 1.0.0 + Behavior was simplified. The logger is always named + ``"flask.app"``. The level is only set during configuration, + it doesn't check ``app.debug`` each time. Only one format is + used, not different ones depending on ``app.debug``. No + handlers are removed, and a handler is only added if no + handlers are already configured. + + .. versionadded:: 0.3 + """ + return create_logger(self) + + @cached_property + def jinja_env(self) -> Environment: + """The Jinja environment used to load templates. + + The environment is created the first time this property is + accessed. Changing :attr:`jinja_options` after that will have no + effect. + """ + return self.create_jinja_environment() + + @property + def got_first_request(self) -> bool: + """This attribute is set to ``True`` if the application started + handling the first request. + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. + + .. versionadded:: 0.8 + """ + import warnings + + warnings.warn( + "'got_first_request' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return self._got_first_request + + def make_config(self, instance_relative: bool = False) -> Config: + """Used to create the config attribute by the Flask constructor. + The `instance_relative` parameter is passed in from the constructor + of Flask (there named `instance_relative_config`) and indicates if + the config should be relative to the instance path or the root path + of the application. + + .. versionadded:: 0.8 + """ + root_path = self.root_path + if instance_relative: + root_path = self.instance_path + defaults = dict(self.default_config) + defaults["DEBUG"] = get_debug_flag() + return self.config_class(root_path, defaults) + + def make_aborter(self) -> Aborter: + """Create the object to assign to :attr:`aborter`. That object + is called by :func:`flask.abort` to raise HTTP errors, and can + be called directly as well. + + By default, this creates an instance of :attr:`aborter_class`, + which defaults to :class:`werkzeug.exceptions.Aborter`. + + .. versionadded:: 2.2 + """ + return self.aborter_class() + + def auto_find_instance_path(self) -> str: + """Tries to locate the instance path if it was not provided to the + constructor of the application class. It will basically calculate + the path to a folder named ``instance`` next to your main file or + the package. + + .. versionadded:: 0.8 + """ + prefix, package_path = find_package(self.import_name) + if prefix is None: + return os.path.join(package_path, "instance") + return os.path.join(prefix, "var", f"{self.name}-instance") + + def open_instance_resource(self, resource: str, mode: str = "rb") -> t.IO[t.AnyStr]: + """Opens a resource from the application's instance folder + (:attr:`instance_path`). Otherwise works like + :meth:`open_resource`. Instance resources can also be opened for + writing. + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: resource file opening mode, default is 'rb'. + """ + return open(os.path.join(self.instance_path, resource), mode) + + def create_jinja_environment(self) -> Environment: + """Create the Jinja environment based on :attr:`jinja_options` + and the various Jinja-related methods of the app. Changing + :attr:`jinja_options` after this will have no effect. Also adds + Flask-related globals and filters to the environment. + + .. versionchanged:: 0.11 + ``Environment.auto_reload`` set in accordance with + ``TEMPLATES_AUTO_RELOAD`` configuration option. + + .. versionadded:: 0.5 + """ + options = dict(self.jinja_options) + + if "autoescape" not in options: + options["autoescape"] = self.select_jinja_autoescape + + if "auto_reload" not in options: + auto_reload = self.config["TEMPLATES_AUTO_RELOAD"] + + if auto_reload is None: + auto_reload = self.debug + + options["auto_reload"] = auto_reload + + rv = self.jinja_environment(self, **options) + rv.globals.update( + url_for=self.url_for, + get_flashed_messages=get_flashed_messages, + config=self.config, + # request, session and g are normally added with the + # context processor for efficiency reasons but for imported + # templates we also want the proxies in there. + request=request, + session=session, + g=g, + ) + rv.policies["json.dumps_function"] = self.json.dumps + return rv + + def create_global_jinja_loader(self) -> DispatchingJinjaLoader: + """Creates the loader for the Jinja2 environment. Can be used to + override just the loader and keeping the rest unchanged. It's + discouraged to override this function. Instead one should override + the :meth:`jinja_loader` function instead. + + The global loader dispatches between the loaders of the application + and the individual blueprints. + + .. versionadded:: 0.7 + """ + return DispatchingJinjaLoader(self) + + def select_jinja_autoescape(self, filename: str) -> bool: + """Returns ``True`` if autoescaping should be active for the given + template name. If no template name is given, returns `True`. + + .. versionchanged:: 2.2 + Autoescaping is now enabled by default for ``.svg`` files. + + .. versionadded:: 0.5 + """ + if filename is None: + return True + return filename.endswith((".html", ".htm", ".xml", ".xhtml", ".svg")) + + def update_template_context(self, context: dict) -> None: + """Update the template context with some commonly used variables. + This injects request, session, config and g into the template + context as well as everything template context processors want + to inject. Note that the as of Flask 0.6, the original values + in the context will not be overridden if a context processor + decides to return a value with the same key. + + :param context: the context as a dictionary that is updated in place + to add extra variables. + """ + names: t.Iterable[str | None] = (None,) + + # A template may be rendered outside a request context. + if request: + names = chain(names, reversed(request.blueprints)) + + # The values passed to render_template take precedence. Keep a + # copy to re-apply after all context functions. + orig_ctx = context.copy() + + for name in names: + if name in self.template_context_processors: + for func in self.template_context_processors[name]: + context.update(func()) + + context.update(orig_ctx) + + def make_shell_context(self) -> dict: + """Returns the shell context for an interactive shell for this + application. This runs all the registered shell context + processors. + + .. versionadded:: 0.11 + """ + rv = {"app": self, "g": g} + for processor in self.shell_context_processors: + rv.update(processor()) + return rv + + @property + def debug(self) -> bool: + """Whether debug mode is enabled. When using ``flask run`` to start the + development server, an interactive debugger will be shown for unhandled + exceptions, and the server will be reloaded when code changes. This maps to the + :data:`DEBUG` config key. It may not behave as expected if set late. + + **Do not enable debug mode when deploying in production.** + + Default: ``False`` + """ + return self.config["DEBUG"] + + @debug.setter + def debug(self, value: bool) -> None: + self.config["DEBUG"] = value + + if self.config["TEMPLATES_AUTO_RELOAD"] is None: + self.jinja_env.auto_reload = value + + def run( + self, + host: str | None = None, + port: int | None = None, + debug: bool | None = None, + load_dotenv: bool = True, + **options: t.Any, + ) -> None: + """Runs the application on a local development server. + + Do not use ``run()`` in a production setting. It is not intended to + meet security and performance requirements for a production server. + Instead, see :doc:`/deploying/index` for WSGI server recommendations. + + If the :attr:`debug` flag is set the server will automatically reload + for code changes and show a debugger in case an exception happened. + + If you want to run the application in debug mode, but disable the + code execution on the interactive debugger, you can pass + ``use_evalex=False`` as parameter. This will keep the debugger's + traceback screen active, but disable code execution. + + It is not recommended to use this function for development with + automatic reloading as this is badly supported. Instead you should + be using the :command:`flask` command line script's ``run`` support. + + .. admonition:: Keep in Mind + + Flask will suppress any server error with a generic error page + unless it is in debug mode. As such to enable just the + interactive debugger without the code reloading, you have to + invoke :meth:`run` with ``debug=True`` and ``use_reloader=False``. + Setting ``use_debugger`` to ``True`` without being in debug mode + won't catch any exceptions because there won't be any to + catch. + + :param host: the hostname to listen on. Set this to ``'0.0.0.0'`` to + have the server available externally as well. Defaults to + ``'127.0.0.1'`` or the host in the ``SERVER_NAME`` config variable + if present. + :param port: the port of the webserver. Defaults to ``5000`` or the + port defined in the ``SERVER_NAME`` config variable if present. + :param debug: if given, enable or disable debug mode. See + :attr:`debug`. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param options: the options to be forwarded to the underlying Werkzeug + server. See :func:`werkzeug.serving.run_simple` for more + information. + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment + variables from :file:`.env` and :file:`.flaskenv` files. + + The :envvar:`FLASK_DEBUG` environment variable will override :attr:`debug`. + + Threaded mode is enabled by default. + + .. versionchanged:: 0.10 + The default port is now picked from the ``SERVER_NAME`` + variable. + """ + # Ignore this call so that it doesn't start another server if + # the 'flask run' command is used. + if os.environ.get("FLASK_RUN_FROM_CLI") == "true": + if not is_running_from_reloader(): + click.secho( + " * Ignoring a call to 'app.run()' that would block" + " the current 'flask' CLI command.\n" + " Only call 'app.run()' in an 'if __name__ ==" + ' "__main__"\' guard.', + fg="red", + ) + + return + + if get_load_dotenv(load_dotenv): + cli.load_dotenv() + + # if set, env var overrides existing value + if "FLASK_DEBUG" in os.environ: + self.debug = get_debug_flag() + + # debug passed to method overrides all other sources + if debug is not None: + self.debug = bool(debug) + + server_name = self.config.get("SERVER_NAME") + sn_host = sn_port = None + + if server_name: + sn_host, _, sn_port = server_name.partition(":") + + if not host: + if sn_host: + host = sn_host + else: + host = "127.0.0.1" + + if port or port == 0: + port = int(port) + elif sn_port: + port = int(sn_port) + else: + port = 5000 + + options.setdefault("use_reloader", self.debug) + options.setdefault("use_debugger", self.debug) + options.setdefault("threaded", True) + + cli.show_server_banner(self.debug, self.name) + + from werkzeug.serving import run_simple + + try: + run_simple(t.cast(str, host), port, self, **options) + finally: + # reset the first request information if the development server + # reset normally. This makes it possible to restart the server + # without reloader and that stuff from an interactive shell. + self._got_first_request = False + + def test_client(self, use_cookies: bool = True, **kwargs: t.Any) -> FlaskClient: + """Creates a test client for this application. For information + about unit testing head over to :doc:`/testing`. + + Note that if you are testing for assertions or exceptions in your + application code, you must set ``app.testing = True`` in order for the + exceptions to propagate to the test client. Otherwise, the exception + will be handled by the application (not visible to the test client) and + the only indication of an AssertionError or other exception will be a + 500 status code response to the test client. See the :attr:`testing` + attribute. For example:: + + app.testing = True + client = app.test_client() + + The test client can be used in a ``with`` block to defer the closing down + of the context until the end of the ``with`` block. This is useful if + you want to access the context locals for testing:: + + with app.test_client() as c: + rv = c.get('/?vodka=42') + assert request.args['vodka'] == '42' + + Additionally, you may pass optional keyword arguments that will then + be passed to the application's :attr:`test_client_class` constructor. + For example:: + + from flask.testing import FlaskClient + + class CustomClient(FlaskClient): + def __init__(self, *args, **kwargs): + self._authentication = kwargs.pop("authentication") + super(CustomClient,self).__init__( *args, **kwargs) + + app.test_client_class = CustomClient + client = app.test_client(authentication='Basic ....') + + See :class:`~flask.testing.FlaskClient` for more information. + + .. versionchanged:: 0.4 + added support for ``with`` block usage for the client. + + .. versionadded:: 0.7 + The `use_cookies` parameter was added as well as the ability + to override the client to be used by setting the + :attr:`test_client_class` attribute. + + .. versionchanged:: 0.11 + Added `**kwargs` to support passing additional keyword arguments to + the constructor of :attr:`test_client_class`. + """ + cls = self.test_client_class + if cls is None: + from .testing import FlaskClient as cls + return cls( # type: ignore + self, self.response_class, use_cookies=use_cookies, **kwargs + ) + + def test_cli_runner(self, **kwargs: t.Any) -> FlaskCliRunner: + """Create a CLI runner for testing CLI commands. + See :ref:`testing-cli`. + + Returns an instance of :attr:`test_cli_runner_class`, by default + :class:`~flask.testing.FlaskCliRunner`. The Flask app object is + passed as the first argument. + + .. versionadded:: 1.0 + """ + cls = self.test_cli_runner_class + + if cls is None: + from .testing import FlaskCliRunner as cls + + return cls(self, **kwargs) # type: ignore + + @setupmethod + def register_blueprint(self, blueprint: Blueprint, **options: t.Any) -> None: + """Register a :class:`~flask.Blueprint` on the application. Keyword + arguments passed to this method will override the defaults set on the + blueprint. + + Calls the blueprint's :meth:`~flask.Blueprint.register` method after + recording the blueprint in the application's :attr:`blueprints`. + + :param blueprint: The blueprint to register. + :param url_prefix: Blueprint routes will be prefixed with this. + :param subdomain: Blueprint routes will match on this subdomain. + :param url_defaults: Blueprint routes will use these default values for + view arguments. + :param options: Additional keyword arguments are passed to + :class:`~flask.blueprints.BlueprintSetupState`. They can be + accessed in :meth:`~flask.Blueprint.record` callbacks. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + + .. versionadded:: 0.7 + """ + blueprint.register(self, options) + + def iter_blueprints(self) -> t.ValuesView[Blueprint]: + """Iterates over all blueprints by the order they were registered. + + .. versionadded:: 0.11 + """ + return self.blueprints.values() + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) # type: ignore + options["endpoint"] = endpoint + methods = options.pop("methods", None) + + # if the methods are not given and the view_func object knows its + # methods we can use that instead. If neither exists, we go with + # a tuple of only ``GET`` as default. + if methods is None: + methods = getattr(view_func, "methods", None) or ("GET",) + if isinstance(methods, str): + raise TypeError( + "Allowed methods must be a list of strings, for" + ' example: @app.route(..., methods=["POST"])' + ) + methods = {item.upper() for item in methods} + + # Methods that should always be added + required_methods = set(getattr(view_func, "required_methods", ())) + + # starting with Flask 0.8 the view_func object can disable and + # force-enable the automatic options handling. + if provide_automatic_options is None: + provide_automatic_options = getattr( + view_func, "provide_automatic_options", None + ) + + if provide_automatic_options is None: + if "OPTIONS" not in methods: + provide_automatic_options = True + required_methods.add("OPTIONS") + else: + provide_automatic_options = False + + # Add the required methods now. + methods |= required_methods + + rule = self.url_rule_class(rule, methods=methods, **options) + rule.provide_automatic_options = provide_automatic_options # type: ignore + + self.url_map.add(rule) + if view_func is not None: + old_func = self.view_functions.get(endpoint) + if old_func is not None and old_func != view_func: + raise AssertionError( + "View function mapping is overwriting an existing" + f" endpoint function: {endpoint}" + ) + self.view_functions[endpoint] = view_func + + @setupmethod + def template_filter( + self, name: str | None = None + ) -> t.Callable[[T_template_filter], T_template_filter]: + """A decorator that is used to register custom template filter. + You can specify a name for the filter, otherwise the function + name will be used. Example:: + + @app.template_filter() + def reverse(s): + return s[::-1] + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f: T_template_filter) -> T_template_filter: + self.add_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_filter( + self, f: ft.TemplateFilterCallable, name: str | None = None + ) -> None: + """Register a custom template filter. Works exactly like the + :meth:`template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + self.jinja_env.filters[name or f.__name__] = f + + @setupmethod + def template_test( + self, name: str | None = None + ) -> t.Callable[[T_template_test], T_template_test]: + """A decorator that is used to register custom template test. + You can specify a name for the test, otherwise the function + name will be used. Example:: + + @app.template_test() + def is_prime(n): + if n == 2: + return True + for i in range(2, int(math.ceil(math.sqrt(n))) + 1): + if n % i == 0: + return False + return True + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f: T_template_test) -> T_template_test: + self.add_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_test( + self, f: ft.TemplateTestCallable, name: str | None = None + ) -> None: + """Register a custom template test. Works exactly like the + :meth:`template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + self.jinja_env.tests[name or f.__name__] = f + + @setupmethod + def template_global( + self, name: str | None = None + ) -> t.Callable[[T_template_global], T_template_global]: + """A decorator that is used to register a custom template global function. + You can specify a name for the global function, otherwise the function + name will be used. Example:: + + @app.template_global() + def double(n): + return 2 * n + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + + def decorator(f: T_template_global) -> T_template_global: + self.add_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_global( + self, f: ft.TemplateGlobalCallable, name: str | None = None + ) -> None: + """Register a custom template global function. Works exactly like the + :meth:`template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + self.jinja_env.globals[name or f.__name__] = f + + @setupmethod + def teardown_appcontext(self, f: T_teardown) -> T_teardown: + """Registers a function to be called when the application + context is popped. The application context is typically popped + after the request context for each request, at the end of CLI + commands, or after a manually pushed context ends. + + .. code-block:: python + + with app.app_context(): + ... + + When the ``with`` block exits (or ``ctx.pop()`` is called), the + teardown functions are called just before the app context is + made inactive. Since a request context typically also manages an + application context it would also be called when you pop a + request context. + + When a teardown function was called because of an unhandled + exception it will be passed an error object. If an + :meth:`errorhandler` is registered, it will handle the exception + and the teardown will not receive it. + + Teardown functions must avoid raising exceptions. If they + execute code that might fail they must surround that code with a + ``try``/``except`` block and log any errors. + + The return values of teardown functions are ignored. + + .. versionadded:: 0.9 + """ + self.teardown_appcontext_funcs.append(f) + return f + + @setupmethod + def shell_context_processor( + self, f: T_shell_context_processor + ) -> T_shell_context_processor: + """Registers a shell context processor function. + + .. versionadded:: 0.11 + """ + self.shell_context_processors.append(f) + return f + + def _find_error_handler(self, e: Exception) -> ft.ErrorHandlerCallable | None: + """Return a registered error handler for an exception in this order: + blueprint handler for a specific code, app handler for a specific code, + blueprint handler for an exception class, app handler for an exception + class, or ``None`` if a suitable handler is not found. + """ + exc_class, code = self._get_exc_class_and_code(type(e)) + names = (*request.blueprints, None) + + for c in (code, None) if code is not None else (None,): + for name in names: + handler_map = self.error_handler_spec[name][c] + + if not handler_map: + continue + + for cls in exc_class.__mro__: + handler = handler_map.get(cls) + + if handler is not None: + return handler + return None + + def handle_http_exception( + self, e: HTTPException + ) -> HTTPException | ft.ResponseReturnValue: + """Handles an HTTP exception. By default this will invoke the + registered error handlers and fall back to returning the + exception as response. + + .. versionchanged:: 1.0.3 + ``RoutingException``, used internally for actions such as + slash redirects during routing, is not passed to error + handlers. + + .. versionchanged:: 1.0 + Exceptions are looked up by code *and* by MRO, so + ``HTTPException`` subclasses can be handled with a catch-all + handler for the base ``HTTPException``. + + .. versionadded:: 0.3 + """ + # Proxy exceptions don't have error codes. We want to always return + # those unchanged as errors + if e.code is None: + return e + + # RoutingExceptions are used internally to trigger routing + # actions, such as slash redirects raising RequestRedirect. They + # are not raised or handled in user code. + if isinstance(e, RoutingException): + return e + + handler = self._find_error_handler(e) + if handler is None: + return e + return self.ensure_sync(handler)(e) + + def trap_http_exception(self, e: Exception) -> bool: + """Checks if an HTTP exception should be trapped or not. By default + this will return ``False`` for all exceptions except for a bad request + key error if ``TRAP_BAD_REQUEST_ERRORS`` is set to ``True``. It + also returns ``True`` if ``TRAP_HTTP_EXCEPTIONS`` is set to ``True``. + + This is called for all HTTP exceptions raised by a view function. + If it returns ``True`` for any exception the error handler for this + exception is not called and it shows up as regular exception in the + traceback. This is helpful for debugging implicitly raised HTTP + exceptions. + + .. versionchanged:: 1.0 + Bad request errors are not trapped by default in debug mode. + + .. versionadded:: 0.8 + """ + if self.config["TRAP_HTTP_EXCEPTIONS"]: + return True + + trap_bad_request = self.config["TRAP_BAD_REQUEST_ERRORS"] + + # if unset, trap key errors in debug mode + if ( + trap_bad_request is None + and self.debug + and isinstance(e, BadRequestKeyError) + ): + return True + + if trap_bad_request: + return isinstance(e, BadRequest) + + return False + + def handle_user_exception( + self, e: Exception + ) -> HTTPException | ft.ResponseReturnValue: + """This method is called whenever an exception occurs that + should be handled. A special case is :class:`~werkzeug + .exceptions.HTTPException` which is forwarded to the + :meth:`handle_http_exception` method. This function will either + return a response value or reraise the exception with the same + traceback. + + .. versionchanged:: 1.0 + Key errors raised from request data like ``form`` show the + bad key in debug mode rather than a generic bad request + message. + + .. versionadded:: 0.7 + """ + if isinstance(e, BadRequestKeyError) and ( + self.debug or self.config["TRAP_BAD_REQUEST_ERRORS"] + ): + e.show_exception = True + + if isinstance(e, HTTPException) and not self.trap_http_exception(e): + return self.handle_http_exception(e) + + handler = self._find_error_handler(e) + + if handler is None: + raise + + return self.ensure_sync(handler)(e) + + def handle_exception(self, e: Exception) -> Response: + """Handle an exception that did not have an error handler + associated with it, or that was raised from an error handler. + This always causes a 500 ``InternalServerError``. + + Always sends the :data:`got_request_exception` signal. + + If :data:`PROPAGATE_EXCEPTIONS` is ``True``, such as in debug + mode, the error will be re-raised so that the debugger can + display it. Otherwise, the original exception is logged, and + an :exc:`~werkzeug.exceptions.InternalServerError` is returned. + + If an error handler is registered for ``InternalServerError`` or + ``500``, it will be used. For consistency, the handler will + always receive the ``InternalServerError``. The original + unhandled exception is available as ``e.original_exception``. + + .. versionchanged:: 1.1.0 + Always passes the ``InternalServerError`` instance to the + handler, setting ``original_exception`` to the unhandled + error. + + .. versionchanged:: 1.1.0 + ``after_request`` functions and other finalization is done + even for the default 500 response when there is no handler. + + .. versionadded:: 0.3 + """ + exc_info = sys.exc_info() + got_request_exception.send(self, _async_wrapper=self.ensure_sync, exception=e) + propagate = self.config["PROPAGATE_EXCEPTIONS"] + + if propagate is None: + propagate = self.testing or self.debug + + if propagate: + # Re-raise if called with an active exception, otherwise + # raise the passed in exception. + if exc_info[1] is e: + raise + + raise e + + self.log_exception(exc_info) + server_error: InternalServerError | ft.ResponseReturnValue + server_error = InternalServerError(original_exception=e) + handler = self._find_error_handler(server_error) + + if handler is not None: + server_error = self.ensure_sync(handler)(server_error) + + return self.finalize_request(server_error, from_error_handler=True) + + def log_exception( + self, + exc_info: (tuple[type, BaseException, TracebackType] | tuple[None, None, None]), + ) -> None: + """Logs an exception. This is called by :meth:`handle_exception` + if debugging is disabled and right before the handler is called. + The default implementation logs the exception as error on the + :attr:`logger`. + + .. versionadded:: 0.8 + """ + self.logger.error( + f"Exception on {request.path} [{request.method}]", exc_info=exc_info + ) + + def raise_routing_exception(self, request: Request) -> t.NoReturn: + """Intercept routing exceptions and possibly do something else. + + In debug mode, intercept a routing redirect and replace it with + an error if the body will be discarded. + + With modern Werkzeug this shouldn't occur, since it now uses a + 308 status which tells the browser to resend the method and + body. + + .. versionchanged:: 2.1 + Don't intercept 307 and 308 redirects. + + :meta private: + :internal: + """ + if ( + not self.debug + or not isinstance(request.routing_exception, RequestRedirect) + or request.routing_exception.code in {307, 308} + or request.method in {"GET", "HEAD", "OPTIONS"} + ): + raise request.routing_exception # type: ignore + + from .debughelpers import FormDataRoutingRedirect + + raise FormDataRoutingRedirect(request) + + def dispatch_request(self) -> ft.ResponseReturnValue: + """Does the request dispatching. Matches the URL and returns the + return value of the view or error handler. This does not have to + be a response object. In order to convert the return value to a + proper response object, call :func:`make_response`. + + .. versionchanged:: 0.7 + This no longer does the exception handling, this code was + moved to the new :meth:`full_dispatch_request`. + """ + req = request_ctx.request + if req.routing_exception is not None: + self.raise_routing_exception(req) + rule: Rule = req.url_rule # type: ignore[assignment] + # if we provide automatic options for this URL and the + # request came with the OPTIONS method, reply automatically + if ( + getattr(rule, "provide_automatic_options", False) + and req.method == "OPTIONS" + ): + return self.make_default_options_response() + # otherwise dispatch to the handler for that endpoint + view_args: dict[str, t.Any] = req.view_args # type: ignore[assignment] + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + + def full_dispatch_request(self) -> Response: + """Dispatches the request and on top of that performs request + pre and postprocessing as well as HTTP exception catching and + error handling. + + .. versionadded:: 0.7 + """ + self._got_first_request = True + + try: + request_started.send(self, _async_wrapper=self.ensure_sync) + rv = self.preprocess_request() + if rv is None: + rv = self.dispatch_request() + except Exception as e: + rv = self.handle_user_exception(e) + return self.finalize_request(rv) + + def finalize_request( + self, + rv: ft.ResponseReturnValue | HTTPException, + from_error_handler: bool = False, + ) -> Response: + """Given the return value from a view function this finalizes + the request by converting it into a response and invoking the + postprocessing functions. This is invoked for both normal + request dispatching as well as error handlers. + + Because this means that it might be called as a result of a + failure a special safe mode is available which can be enabled + with the `from_error_handler` flag. If enabled, failures in + response processing will be logged and otherwise ignored. + + :internal: + """ + response = self.make_response(rv) + try: + response = self.process_response(response) + request_finished.send( + self, _async_wrapper=self.ensure_sync, response=response + ) + except Exception: + if not from_error_handler: + raise + self.logger.exception( + "Request finalizing failed with an error while handling an error" + ) + return response + + def make_default_options_response(self) -> Response: + """This method is called to create the default ``OPTIONS`` response. + This can be changed through subclassing to change the default + behavior of ``OPTIONS`` responses. + + .. versionadded:: 0.7 + """ + adapter = request_ctx.url_adapter + methods = adapter.allowed_methods() # type: ignore[union-attr] + rv = self.response_class() + rv.allow.update(methods) + return rv + + def should_ignore_error(self, error: BaseException | None) -> bool: + """This is called to figure out if an error should be ignored + or not as far as the teardown system is concerned. If this + function returns ``True`` then the teardown handlers will not be + passed the error. + + .. versionadded:: 0.10 + """ + return False + + def ensure_sync(self, func: t.Callable) -> t.Callable: + """Ensure that the function is synchronous for WSGI workers. + Plain ``def`` functions are returned as-is. ``async def`` + functions are wrapped to run and wait for the response. + + Override this method to change how the app runs async views. + + .. versionadded:: 2.0 + """ + if iscoroutinefunction(func): + return self.async_to_sync(func) + + return func + + def async_to_sync( + self, func: t.Callable[..., t.Coroutine] + ) -> t.Callable[..., t.Any]: + """Return a sync function that will run the coroutine function. + + .. code-block:: python + + result = app.async_to_sync(func)(*args, **kwargs) + + Override this method to change how the app converts async code + to be synchronously callable. + + .. versionadded:: 2.0 + """ + try: + from asgiref.sync import async_to_sync as asgiref_async_to_sync + except ImportError: + raise RuntimeError( + "Install Flask with the 'async' extra in order to use async views." + ) from None + + return asgiref_async_to_sync(func) + + def url_for( + self, + endpoint: str, + *, + _anchor: str | None = None, + _method: str | None = None, + _scheme: str | None = None, + _external: bool | None = None, + **values: t.Any, + ) -> str: + """Generate a URL to the given endpoint with the given values. + + This is called by :func:`flask.url_for`, and can be called + directly as well. + + An *endpoint* is the name of a URL rule, usually added with + :meth:`@app.route() `, and usually the same name as the + view function. A route defined in a :class:`~flask.Blueprint` + will prepend the blueprint's name separated by a ``.`` to the + endpoint. + + In some cases, such as email messages, you want URLs to include + the scheme and domain, like ``https://example.com/hello``. When + not in an active request, URLs will be external by default, but + this requires setting :data:`SERVER_NAME` so Flask knows what + domain to use. :data:`APPLICATION_ROOT` and + :data:`PREFERRED_URL_SCHEME` should also be configured as + needed. This config is only used when not in an active request. + + Functions can be decorated with :meth:`url_defaults` to modify + keyword arguments before the URL is built. + + If building fails for some reason, such as an unknown endpoint + or incorrect values, the app's :meth:`handle_url_build_error` + method is called. If that returns a string, that is returned, + otherwise a :exc:`~werkzeug.routing.BuildError` is raised. + + :param endpoint: The endpoint name associated with the URL to + generate. If this starts with a ``.``, the current blueprint + name (if any) will be used. + :param _anchor: If given, append this as ``#anchor`` to the URL. + :param _method: If given, generate the URL associated with this + method for the endpoint. + :param _scheme: If given, the URL will have this scheme if it + is external. + :param _external: If given, prefer the URL to be internal + (False) or require it to be external (True). External URLs + include the scheme and domain. When not in an active + request, URLs are external by default. + :param values: Values to use for the variable parts of the URL + rule. Unknown keys are appended as query string arguments, + like ``?a=b&c=d``. + + .. versionadded:: 2.2 + Moved from ``flask.url_for``, which calls this method. + """ + req_ctx = _cv_request.get(None) + + if req_ctx is not None: + url_adapter = req_ctx.url_adapter + blueprint_name = req_ctx.request.blueprint + + # If the endpoint starts with "." and the request matches a + # blueprint, the endpoint is relative to the blueprint. + if endpoint[:1] == ".": + if blueprint_name is not None: + endpoint = f"{blueprint_name}{endpoint}" + else: + endpoint = endpoint[1:] + + # When in a request, generate a URL without scheme and + # domain by default, unless a scheme is given. + if _external is None: + _external = _scheme is not None + else: + app_ctx = _cv_app.get(None) + + # If called by helpers.url_for, an app context is active, + # use its url_adapter. Otherwise, app.url_for was called + # directly, build an adapter. + if app_ctx is not None: + url_adapter = app_ctx.url_adapter + else: + url_adapter = self.create_url_adapter(None) + + if url_adapter is None: + raise RuntimeError( + "Unable to build URLs outside an active request" + " without 'SERVER_NAME' configured. Also configure" + " 'APPLICATION_ROOT' and 'PREFERRED_URL_SCHEME' as" + " needed." + ) + + # When outside a request, generate a URL with scheme and + # domain by default. + if _external is None: + _external = True + + # It is an error to set _scheme when _external=False, in order + # to avoid accidental insecure URLs. + if _scheme is not None and not _external: + raise ValueError("When specifying '_scheme', '_external' must be True.") + + self.inject_url_defaults(endpoint, values) + + try: + rv = url_adapter.build( # type: ignore[union-attr] + endpoint, + values, + method=_method, + url_scheme=_scheme, + force_external=_external, + ) + except BuildError as error: + values.update( + _anchor=_anchor, _method=_method, _scheme=_scheme, _external=_external + ) + return self.handle_url_build_error(error, endpoint, values) + + if _anchor is not None: + _anchor = _url_quote(_anchor, safe="%!#$&'()*+,/:;=?@") + rv = f"{rv}#{_anchor}" + + return rv + + def redirect(self, location: str, code: int = 302) -> BaseResponse: + """Create a redirect response object. + + This is called by :func:`flask.redirect`, and can be called + directly as well. + + :param location: The URL to redirect to. + :param code: The status code for the redirect. + + .. versionadded:: 2.2 + Moved from ``flask.redirect``, which calls this method. + """ + return _wz_redirect(location, code=code, Response=self.response_class) + + def make_response(self, rv: ft.ResponseReturnValue) -> Response: + """Convert the return value from a view function to an instance of + :attr:`response_class`. + + :param rv: the return value from the view function. The view function + must return a response. Returning ``None``, or the view ending + without returning, is not allowed. The following types are allowed + for ``view_rv``: + + ``str`` + A response object is created with the string encoded to UTF-8 + as the body. + + ``bytes`` + A response object is created with the bytes as the body. + + ``dict`` + A dictionary that will be jsonify'd before being returned. + + ``list`` + A list that will be jsonify'd before being returned. + + ``generator`` or ``iterator`` + A generator that returns ``str`` or ``bytes`` to be + streamed as the response. + + ``tuple`` + Either ``(body, status, headers)``, ``(body, status)``, or + ``(body, headers)``, where ``body`` is any of the other types + allowed here, ``status`` is a string or an integer, and + ``headers`` is a dictionary or a list of ``(key, value)`` + tuples. If ``body`` is a :attr:`response_class` instance, + ``status`` overwrites the exiting value and ``headers`` are + extended. + + :attr:`response_class` + The object is returned unchanged. + + other :class:`~werkzeug.wrappers.Response` class + The object is coerced to :attr:`response_class`. + + :func:`callable` + The function is called as a WSGI application. The result is + used to create a response object. + + .. versionchanged:: 2.2 + A generator will be converted to a streaming response. + A list will be converted to a JSON response. + + .. versionchanged:: 1.1 + A dict will be converted to a JSON response. + + .. versionchanged:: 0.9 + Previously a tuple was interpreted as the arguments for the + response object. + """ + + status = headers = None + + # unpack tuple returns + if isinstance(rv, tuple): + len_rv = len(rv) + + # a 3-tuple is unpacked directly + if len_rv == 3: + rv, status, headers = rv # type: ignore[misc] + # decide if a 2-tuple has status or headers + elif len_rv == 2: + if isinstance(rv[1], (Headers, dict, tuple, list)): + rv, headers = rv + else: + rv, status = rv # type: ignore[assignment,misc] + # other sized tuples are not allowed + else: + raise TypeError( + "The view function did not return a valid response tuple." + " The tuple must have the form (body, status, headers)," + " (body, status), or (body, headers)." + ) + + # the body must not be None + if rv is None: + raise TypeError( + f"The view function for {request.endpoint!r} did not" + " return a valid response. The function either returned" + " None or ended without a return statement." + ) + + # make sure the body is an instance of the response class + if not isinstance(rv, self.response_class): + if isinstance(rv, (str, bytes, bytearray)) or isinstance(rv, _abc_Iterator): + # let the response class set the status and headers instead of + # waiting to do it manually, so that the class can handle any + # special logic + rv = self.response_class( + rv, + status=status, + headers=headers, # type: ignore[arg-type] + ) + status = headers = None + elif isinstance(rv, (dict, list)): + rv = self.json.response(rv) + elif isinstance(rv, BaseResponse) or callable(rv): + # evaluate a WSGI callable, or coerce a different response + # class to the correct type + try: + rv = self.response_class.force_type( + rv, request.environ # type: ignore[arg-type] + ) + except TypeError as e: + raise TypeError( + f"{e}\nThe view function did not return a valid" + " response. The return type must be a string," + " dict, list, tuple with headers or status," + " Response instance, or WSGI callable, but it" + f" was a {type(rv).__name__}." + ).with_traceback(sys.exc_info()[2]) from None + else: + raise TypeError( + "The view function did not return a valid" + " response. The return type must be a string," + " dict, list, tuple with headers or status," + " Response instance, or WSGI callable, but it was a" + f" {type(rv).__name__}." + ) + + rv = t.cast(Response, rv) + # prefer the status if it was provided + if status is not None: + if isinstance(status, (str, bytes, bytearray)): + rv.status = status + else: + rv.status_code = status + + # extend existing headers with provided headers + if headers: + rv.headers.update(headers) + + return rv + + def create_url_adapter(self, request: Request | None) -> MapAdapter | None: + """Creates a URL adapter for the given request. The URL adapter + is created at a point where the request context is not yet set + up so the request is passed explicitly. + + .. versionadded:: 0.6 + + .. versionchanged:: 0.9 + This can now also be called without a request object when the + URL adapter is created for the application context. + + .. versionchanged:: 1.0 + :data:`SERVER_NAME` no longer implicitly enables subdomain + matching. Use :attr:`subdomain_matching` instead. + """ + if request is not None: + # If subdomain matching is disabled (the default), use the + # default subdomain in all cases. This should be the default + # in Werkzeug but it currently does not have that feature. + if not self.subdomain_matching: + subdomain = self.url_map.default_subdomain or None + else: + subdomain = None + + return self.url_map.bind_to_environ( + request.environ, + server_name=self.config["SERVER_NAME"], + subdomain=subdomain, + ) + # We need at the very least the server name to be set for this + # to work. + if self.config["SERVER_NAME"] is not None: + return self.url_map.bind( + self.config["SERVER_NAME"], + script_name=self.config["APPLICATION_ROOT"], + url_scheme=self.config["PREFERRED_URL_SCHEME"], + ) + + return None + + def inject_url_defaults(self, endpoint: str, values: dict) -> None: + """Injects the URL defaults for the given endpoint directly into + the values dictionary passed. This is used internally and + automatically called on URL building. + + .. versionadded:: 0.7 + """ + names: t.Iterable[str | None] = (None,) + + # url_for may be called outside a request context, parse the + # passed endpoint instead of using request.blueprints. + if "." in endpoint: + names = chain( + names, reversed(_split_blueprint_path(endpoint.rpartition(".")[0])) + ) + + for name in names: + if name in self.url_default_functions: + for func in self.url_default_functions[name]: + func(endpoint, values) + + def handle_url_build_error( + self, error: BuildError, endpoint: str, values: dict[str, t.Any] + ) -> str: + """Called by :meth:`.url_for` if a + :exc:`~werkzeug.routing.BuildError` was raised. If this returns + a value, it will be returned by ``url_for``, otherwise the error + will be re-raised. + + Each function in :attr:`url_build_error_handlers` is called with + ``error``, ``endpoint`` and ``values``. If a function returns + ``None`` or raises a ``BuildError``, it is skipped. Otherwise, + its return value is returned by ``url_for``. + + :param error: The active ``BuildError`` being handled. + :param endpoint: The endpoint being built. + :param values: The keyword arguments passed to ``url_for``. + """ + for handler in self.url_build_error_handlers: + try: + rv = handler(error, endpoint, values) + except BuildError as e: + # make error available outside except block + error = e + else: + if rv is not None: + return rv + + # Re-raise if called with an active exception, otherwise raise + # the passed in exception. + if error is sys.exc_info()[1]: + raise + + raise error + + def preprocess_request(self) -> ft.ResponseReturnValue | None: + """Called before the request is dispatched. Calls + :attr:`url_value_preprocessors` registered with the app and the + current blueprint (if any). Then calls :attr:`before_request_funcs` + registered with the app and the blueprint. + + If any :meth:`before_request` handler returns a non-None value, the + value is handled as if it was the return value from the view, and + further request handling is stopped. + """ + names = (None, *reversed(request.blueprints)) + + for name in names: + if name in self.url_value_preprocessors: + for url_func in self.url_value_preprocessors[name]: + url_func(request.endpoint, request.view_args) + + for name in names: + if name in self.before_request_funcs: + for before_func in self.before_request_funcs[name]: + rv = self.ensure_sync(before_func)() + + if rv is not None: + return rv + + return None + + def process_response(self, response: Response) -> Response: + """Can be overridden in order to modify the response object + before it's sent to the WSGI server. By default this will + call all the :meth:`after_request` decorated functions. + + .. versionchanged:: 0.5 + As of Flask 0.5 the functions registered for after request + execution are called in reverse order of registration. + + :param response: a :attr:`response_class` object. + :return: a new response object or the same, has to be an + instance of :attr:`response_class`. + """ + ctx = request_ctx._get_current_object() # type: ignore[attr-defined] + + for func in ctx._after_request_functions: + response = self.ensure_sync(func)(response) + + for name in chain(request.blueprints, (None,)): + if name in self.after_request_funcs: + for func in reversed(self.after_request_funcs[name]): + response = self.ensure_sync(func)(response) + + if not self.session_interface.is_null_session(ctx.session): + self.session_interface.save_session(self, ctx.session, response) + + return response + + def do_teardown_request( + self, exc: BaseException | None = _sentinel # type: ignore + ) -> None: + """Called after the request is dispatched and the response is + returned, right before the request context is popped. + + This calls all functions decorated with + :meth:`teardown_request`, and :meth:`Blueprint.teardown_request` + if a blueprint handled the request. Finally, the + :data:`request_tearing_down` signal is sent. + + This is called by + :meth:`RequestContext.pop() `, + which may be delayed during testing to maintain access to + resources. + + :param exc: An unhandled exception raised while dispatching the + request. Detected from the current exception information if + not passed. Passed to each teardown function. + + .. versionchanged:: 0.9 + Added the ``exc`` argument. + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + + for name in chain(request.blueprints, (None,)): + if name in self.teardown_request_funcs: + for func in reversed(self.teardown_request_funcs[name]): + self.ensure_sync(func)(exc) + + request_tearing_down.send(self, _async_wrapper=self.ensure_sync, exc=exc) + + def do_teardown_appcontext( + self, exc: BaseException | None = _sentinel # type: ignore + ) -> None: + """Called right before the application context is popped. + + When handling a request, the application context is popped + after the request context. See :meth:`do_teardown_request`. + + This calls all functions decorated with + :meth:`teardown_appcontext`. Then the + :data:`appcontext_tearing_down` signal is sent. + + This is called by + :meth:`AppContext.pop() `. + + .. versionadded:: 0.9 + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + + for func in reversed(self.teardown_appcontext_funcs): + self.ensure_sync(func)(exc) + + appcontext_tearing_down.send(self, _async_wrapper=self.ensure_sync, exc=exc) + + def app_context(self) -> AppContext: + """Create an :class:`~flask.ctx.AppContext`. Use as a ``with`` + block to push the context, which will make :data:`current_app` + point at this application. + + An application context is automatically pushed by + :meth:`RequestContext.push() ` + when handling a request, and when running a CLI command. Use + this to manually create a context outside of these situations. + + :: + + with app.app_context(): + init_db() + + See :doc:`/appcontext`. + + .. versionadded:: 0.9 + """ + return AppContext(self) + + def request_context(self, environ: dict) -> RequestContext: + """Create a :class:`~flask.ctx.RequestContext` representing a + WSGI environment. Use a ``with`` block to push the context, + which will make :data:`request` point at this request. + + See :doc:`/reqcontext`. + + Typically you should not call this from your own code. A request + context is automatically pushed by the :meth:`wsgi_app` when + handling a request. Use :meth:`test_request_context` to create + an environment and context instead of this method. + + :param environ: a WSGI environment + """ + return RequestContext(self, environ) + + def test_request_context(self, *args: t.Any, **kwargs: t.Any) -> RequestContext: + """Create a :class:`~flask.ctx.RequestContext` for a WSGI + environment created from the given values. This is mostly useful + during testing, where you may want to run a function that uses + request data without dispatching a full request. + + See :doc:`/reqcontext`. + + Use a ``with`` block to push the context, which will make + :data:`request` point at the request for the created + environment. :: + + with app.test_request_context(...): + generate_report() + + When using the shell, it may be easier to push and pop the + context manually to avoid indentation. :: + + ctx = app.test_request_context(...) + ctx.push() + ... + ctx.pop() + + Takes the same arguments as Werkzeug's + :class:`~werkzeug.test.EnvironBuilder`, with some defaults from + the application. See the linked Werkzeug docs for most of the + available arguments. Flask-specific behavior is listed here. + + :param path: URL path being requested. + :param base_url: Base URL where the app is being served, which + ``path`` is relative to. If not given, built from + :data:`PREFERRED_URL_SCHEME`, ``subdomain``, + :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`. + :param subdomain: Subdomain name to append to + :data:`SERVER_NAME`. + :param url_scheme: Scheme to use instead of + :data:`PREFERRED_URL_SCHEME`. + :param data: The request body, either as a string or a dict of + form keys and values. + :param json: If given, this is serialized as JSON and passed as + ``data``. Also defaults ``content_type`` to + ``application/json``. + :param args: other positional arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + :param kwargs: other keyword arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + """ + from .testing import EnvironBuilder + + builder = EnvironBuilder(self, *args, **kwargs) + + try: + return self.request_context(builder.get_environ()) + finally: + builder.close() + + def wsgi_app(self, environ: dict, start_response: t.Callable) -> t.Any: + """The actual WSGI application. This is not implemented in + :meth:`__call__` so that middlewares can be applied without + losing a reference to the app object. Instead of doing this:: + + app = MyMiddleware(app) + + It's a better idea to do this instead:: + + app.wsgi_app = MyMiddleware(app.wsgi_app) + + Then you still have the original application object around and + can continue to call methods on it. + + .. versionchanged:: 0.7 + Teardown events for the request and app contexts are called + even if an unhandled error occurs. Other events may not be + called depending on when an error occurs during dispatch. + See :ref:`callbacks-and-errors`. + + :param environ: A WSGI environment. + :param start_response: A callable accepting a status code, + a list of headers, and an optional exception context to + start the response. + """ + ctx = self.request_context(environ) + error: BaseException | None = None + try: + try: + ctx.push() + response = self.full_dispatch_request() + except Exception as e: + error = e + response = self.handle_exception(e) + except: # noqa: B001 + error = sys.exc_info()[1] + raise + return response(environ, start_response) + finally: + if "werkzeug.debug.preserve_context" in environ: + environ["werkzeug.debug.preserve_context"](_cv_app.get()) + environ["werkzeug.debug.preserve_context"](_cv_request.get()) + + if error is not None and self.should_ignore_error(error): + error = None + + ctx.pop(error) + + def __call__(self, environ: dict, start_response: t.Callable) -> t.Any: + """The WSGI server calls the Flask application object as the + WSGI application. This calls :meth:`wsgi_app`, which can be + wrapped to apply middleware. + """ + return self.wsgi_app(environ, start_response) diff --git a/env/lib/python3.11/site-packages/flask/blueprints.py b/env/lib/python3.11/site-packages/flask/blueprints.py new file mode 100644 index 0000000..0407f86 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/blueprints.py @@ -0,0 +1,626 @@ +from __future__ import annotations + +import os +import typing as t +from collections import defaultdict +from functools import update_wrapper + +from . import typing as ft +from .scaffold import _endpoint_from_view_func +from .scaffold import _sentinel +from .scaffold import Scaffold +from .scaffold import setupmethod + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + +DeferredSetupFunction = t.Callable[["BlueprintSetupState"], t.Callable] +T_after_request = t.TypeVar("T_after_request", bound=ft.AfterRequestCallable) +T_before_request = t.TypeVar("T_before_request", bound=ft.BeforeRequestCallable) +T_error_handler = t.TypeVar("T_error_handler", bound=ft.ErrorHandlerCallable) +T_teardown = t.TypeVar("T_teardown", bound=ft.TeardownCallable) +T_template_context_processor = t.TypeVar( + "T_template_context_processor", bound=ft.TemplateContextProcessorCallable +) +T_template_filter = t.TypeVar("T_template_filter", bound=ft.TemplateFilterCallable) +T_template_global = t.TypeVar("T_template_global", bound=ft.TemplateGlobalCallable) +T_template_test = t.TypeVar("T_template_test", bound=ft.TemplateTestCallable) +T_url_defaults = t.TypeVar("T_url_defaults", bound=ft.URLDefaultCallable) +T_url_value_preprocessor = t.TypeVar( + "T_url_value_preprocessor", bound=ft.URLValuePreprocessorCallable +) + + +class BlueprintSetupState: + """Temporary holder object for registering a blueprint with the + application. An instance of this class is created by the + :meth:`~flask.Blueprint.make_setup_state` method and later passed + to all register callback functions. + """ + + def __init__( + self, + blueprint: Blueprint, + app: Flask, + options: t.Any, + first_registration: bool, + ) -> None: + #: a reference to the current application + self.app = app + + #: a reference to the blueprint that created this setup state. + self.blueprint = blueprint + + #: a dictionary with all options that were passed to the + #: :meth:`~flask.Flask.register_blueprint` method. + self.options = options + + #: as blueprints can be registered multiple times with the + #: application and not everything wants to be registered + #: multiple times on it, this attribute can be used to figure + #: out if the blueprint was registered in the past already. + self.first_registration = first_registration + + subdomain = self.options.get("subdomain") + if subdomain is None: + subdomain = self.blueprint.subdomain + + #: The subdomain that the blueprint should be active for, ``None`` + #: otherwise. + self.subdomain = subdomain + + url_prefix = self.options.get("url_prefix") + if url_prefix is None: + url_prefix = self.blueprint.url_prefix + #: The prefix that should be used for all URLs defined on the + #: blueprint. + self.url_prefix = url_prefix + + self.name = self.options.get("name", blueprint.name) + self.name_prefix = self.options.get("name_prefix", "") + + #: A dictionary with URL defaults that is added to each and every + #: URL that was defined with the blueprint. + self.url_defaults = dict(self.blueprint.url_values_defaults) + self.url_defaults.update(self.options.get("url_defaults", ())) + + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: t.Callable | None = None, + **options: t.Any, + ) -> None: + """A helper method to register a rule (and optionally a view function) + to the application. The endpoint is automatically prefixed with the + blueprint's name. + """ + if self.url_prefix is not None: + if rule: + rule = "/".join((self.url_prefix.rstrip("/"), rule.lstrip("/"))) + else: + rule = self.url_prefix + options.setdefault("subdomain", self.subdomain) + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) # type: ignore + defaults = self.url_defaults + if "defaults" in options: + defaults = dict(defaults, **options.pop("defaults")) + + self.app.add_url_rule( + rule, + f"{self.name_prefix}.{self.name}.{endpoint}".lstrip("."), + view_func, + defaults=defaults, + **options, + ) + + +class Blueprint(Scaffold): + """Represents a blueprint, a collection of routes and other + app-related functions that can be registered on a real application + later. + + A blueprint is an object that allows defining application functions + without requiring an application object ahead of time. It uses the + same decorators as :class:`~flask.Flask`, but defers the need for an + application by recording them for later registration. + + Decorating a function with a blueprint creates a deferred function + that is called with :class:`~flask.blueprints.BlueprintSetupState` + when the blueprint is registered on an application. + + See :doc:`/blueprints` for more information. + + :param name: The name of the blueprint. Will be prepended to each + endpoint name. + :param import_name: The name of the blueprint package, usually + ``__name__``. This helps locate the ``root_path`` for the + blueprint. + :param static_folder: A folder with static files that should be + served by the blueprint's static route. The path is relative to + the blueprint's root path. Blueprint static files are disabled + by default. + :param static_url_path: The url to serve static files from. + Defaults to ``static_folder``. If the blueprint does not have + a ``url_prefix``, the app's static route will take precedence, + and the blueprint's static files won't be accessible. + :param template_folder: A folder with templates that should be added + to the app's template search path. The path is relative to the + blueprint's root path. Blueprint templates are disabled by + default. Blueprint templates have a lower precedence than those + in the app's templates folder. + :param url_prefix: A path to prepend to all of the blueprint's URLs, + to make them distinct from the rest of the app's routes. + :param subdomain: A subdomain that blueprint routes will match on by + default. + :param url_defaults: A dict of default values that blueprint routes + will receive by default. + :param root_path: By default, the blueprint will automatically set + this based on ``import_name``. In certain situations this + automatic detection can fail, so the path can be specified + manually instead. + + .. versionchanged:: 1.1.0 + Blueprints have a ``cli`` group to register nested CLI commands. + The ``cli_group`` parameter controls the name of the group under + the ``flask`` command. + + .. versionadded:: 0.7 + """ + + _got_registered_once = False + + def __init__( + self, + name: str, + import_name: str, + static_folder: str | os.PathLike | None = None, + static_url_path: str | None = None, + template_folder: str | os.PathLike | None = None, + url_prefix: str | None = None, + subdomain: str | None = None, + url_defaults: dict | None = None, + root_path: str | None = None, + cli_group: str | None = _sentinel, # type: ignore + ): + super().__init__( + import_name=import_name, + static_folder=static_folder, + static_url_path=static_url_path, + template_folder=template_folder, + root_path=root_path, + ) + + if not name: + raise ValueError("'name' may not be empty.") + + if "." in name: + raise ValueError("'name' may not contain a dot '.' character.") + + self.name = name + self.url_prefix = url_prefix + self.subdomain = subdomain + self.deferred_functions: list[DeferredSetupFunction] = [] + + if url_defaults is None: + url_defaults = {} + + self.url_values_defaults = url_defaults + self.cli_group = cli_group + self._blueprints: list[tuple[Blueprint, dict]] = [] + + def _check_setup_finished(self, f_name: str) -> None: + if self._got_registered_once: + raise AssertionError( + f"The setup method '{f_name}' can no longer be called on the blueprint" + f" '{self.name}'. It has already been registered at least once, any" + " changes will not be applied consistently.\n" + "Make sure all imports, decorators, functions, etc. needed to set up" + " the blueprint are done before registering it." + ) + + @setupmethod + def record(self, func: t.Callable) -> None: + """Registers a function that is called when the blueprint is + registered on the application. This function is called with the + state as argument as returned by the :meth:`make_setup_state` + method. + """ + self.deferred_functions.append(func) + + @setupmethod + def record_once(self, func: t.Callable) -> None: + """Works like :meth:`record` but wraps the function in another + function that will ensure the function is only called once. If the + blueprint is registered a second time on the application, the + function passed is not called. + """ + + def wrapper(state: BlueprintSetupState) -> None: + if state.first_registration: + func(state) + + self.record(update_wrapper(wrapper, func)) + + def make_setup_state( + self, app: Flask, options: dict, first_registration: bool = False + ) -> BlueprintSetupState: + """Creates an instance of :meth:`~flask.blueprints.BlueprintSetupState` + object that is later passed to the register callback functions. + Subclasses can override this to return a subclass of the setup state. + """ + return BlueprintSetupState(self, app, options, first_registration) + + @setupmethod + def register_blueprint(self, blueprint: Blueprint, **options: t.Any) -> None: + """Register a :class:`~flask.Blueprint` on this blueprint. Keyword + arguments passed to this method will override the defaults set + on the blueprint. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + + .. versionadded:: 2.0 + """ + if blueprint is self: + raise ValueError("Cannot register a blueprint on itself") + self._blueprints.append((blueprint, options)) + + def register(self, app: Flask, options: dict) -> None: + """Called by :meth:`Flask.register_blueprint` to register all + views and callbacks registered on the blueprint with the + application. Creates a :class:`.BlueprintSetupState` and calls + each :meth:`record` callback with it. + + :param app: The application this blueprint is being registered + with. + :param options: Keyword arguments forwarded from + :meth:`~Flask.register_blueprint`. + + .. versionchanged:: 2.3 + Nested blueprints now correctly apply subdomains. + + .. versionchanged:: 2.1 + Registering the same blueprint with the same name multiple + times is an error. + + .. versionchanged:: 2.0.1 + Nested blueprints are registered with their dotted name. + This allows different blueprints with the same name to be + nested at different locations. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + """ + name_prefix = options.get("name_prefix", "") + self_name = options.get("name", self.name) + name = f"{name_prefix}.{self_name}".lstrip(".") + + if name in app.blueprints: + bp_desc = "this" if app.blueprints[name] is self else "a different" + existing_at = f" '{name}'" if self_name != name else "" + + raise ValueError( + f"The name '{self_name}' is already registered for" + f" {bp_desc} blueprint{existing_at}. Use 'name=' to" + f" provide a unique name." + ) + + first_bp_registration = not any(bp is self for bp in app.blueprints.values()) + first_name_registration = name not in app.blueprints + + app.blueprints[name] = self + self._got_registered_once = True + state = self.make_setup_state(app, options, first_bp_registration) + + if self.has_static_folder: + state.add_url_rule( + f"{self.static_url_path}/", + view_func=self.send_static_file, + endpoint="static", + ) + + # Merge blueprint data into parent. + if first_bp_registration or first_name_registration: + + def extend(bp_dict, parent_dict): + for key, values in bp_dict.items(): + key = name if key is None else f"{name}.{key}" + parent_dict[key].extend(values) + + for key, value in self.error_handler_spec.items(): + key = name if key is None else f"{name}.{key}" + value = defaultdict( + dict, + { + code: { + exc_class: func for exc_class, func in code_values.items() + } + for code, code_values in value.items() + }, + ) + app.error_handler_spec[key] = value + + for endpoint, func in self.view_functions.items(): + app.view_functions[endpoint] = func + + extend(self.before_request_funcs, app.before_request_funcs) + extend(self.after_request_funcs, app.after_request_funcs) + extend( + self.teardown_request_funcs, + app.teardown_request_funcs, + ) + extend(self.url_default_functions, app.url_default_functions) + extend(self.url_value_preprocessors, app.url_value_preprocessors) + extend(self.template_context_processors, app.template_context_processors) + + for deferred in self.deferred_functions: + deferred(state) + + cli_resolved_group = options.get("cli_group", self.cli_group) + + if self.cli.commands: + if cli_resolved_group is None: + app.cli.commands.update(self.cli.commands) + elif cli_resolved_group is _sentinel: + self.cli.name = name + app.cli.add_command(self.cli) + else: + self.cli.name = cli_resolved_group + app.cli.add_command(self.cli) + + for blueprint, bp_options in self._blueprints: + bp_options = bp_options.copy() + bp_url_prefix = bp_options.get("url_prefix") + bp_subdomain = bp_options.get("subdomain") + + if bp_subdomain is None: + bp_subdomain = blueprint.subdomain + + if state.subdomain is not None and bp_subdomain is not None: + bp_options["subdomain"] = bp_subdomain + "." + state.subdomain + elif bp_subdomain is not None: + bp_options["subdomain"] = bp_subdomain + elif state.subdomain is not None: + bp_options["subdomain"] = state.subdomain + + if bp_url_prefix is None: + bp_url_prefix = blueprint.url_prefix + + if state.url_prefix is not None and bp_url_prefix is not None: + bp_options["url_prefix"] = ( + state.url_prefix.rstrip("/") + "/" + bp_url_prefix.lstrip("/") + ) + elif bp_url_prefix is not None: + bp_options["url_prefix"] = bp_url_prefix + elif state.url_prefix is not None: + bp_options["url_prefix"] = state.url_prefix + + bp_options["name_prefix"] = name + blueprint.register(app, bp_options) + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + """Register a URL rule with the blueprint. See :meth:`.Flask.add_url_rule` for + full documentation. + + The URL rule is prefixed with the blueprint's URL prefix. The endpoint name, + used with :func:`url_for`, is prefixed with the blueprint's name. + """ + if endpoint and "." in endpoint: + raise ValueError("'endpoint' may not contain a dot '.' character.") + + if view_func and hasattr(view_func, "__name__") and "." in view_func.__name__: + raise ValueError("'view_func' name may not contain a dot '.' character.") + + self.record( + lambda s: s.add_url_rule( + rule, + endpoint, + view_func, + provide_automatic_options=provide_automatic_options, + **options, + ) + ) + + @setupmethod + def app_template_filter( + self, name: str | None = None + ) -> t.Callable[[T_template_filter], T_template_filter]: + """Register a template filter, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_filter`. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f: T_template_filter) -> T_template_filter: + self.add_app_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_filter( + self, f: ft.TemplateFilterCallable, name: str | None = None + ) -> None: + """Register a template filter, available in any template rendered by the + application. Works like the :meth:`app_template_filter` decorator. Equivalent to + :meth:`.Flask.add_template_filter`. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.filters[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def app_template_test( + self, name: str | None = None + ) -> t.Callable[[T_template_test], T_template_test]: + """Register a template test, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_test`. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f: T_template_test) -> T_template_test: + self.add_app_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_test( + self, f: ft.TemplateTestCallable, name: str | None = None + ) -> None: + """Register a template test, available in any template rendered by the + application. Works like the :meth:`app_template_test` decorator. Equivalent to + :meth:`.Flask.add_template_test`. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.tests[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def app_template_global( + self, name: str | None = None + ) -> t.Callable[[T_template_global], T_template_global]: + """Register a template global, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_global`. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def decorator(f: T_template_global) -> T_template_global: + self.add_app_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_global( + self, f: ft.TemplateGlobalCallable, name: str | None = None + ) -> None: + """Register a template global, available in any template rendered by the + application. Works like the :meth:`app_template_global` decorator. Equivalent to + :meth:`.Flask.add_template_global`. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.globals[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def before_app_request(self, f: T_before_request) -> T_before_request: + """Like :meth:`before_request`, but before every request, not only those handled + by the blueprint. Equivalent to :meth:`.Flask.before_request`. + """ + self.record_once( + lambda s: s.app.before_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def after_app_request(self, f: T_after_request) -> T_after_request: + """Like :meth:`after_request`, but after every request, not only those handled + by the blueprint. Equivalent to :meth:`.Flask.after_request`. + """ + self.record_once( + lambda s: s.app.after_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def teardown_app_request(self, f: T_teardown) -> T_teardown: + """Like :meth:`teardown_request`, but after every request, not only those + handled by the blueprint. Equivalent to :meth:`.Flask.teardown_request`. + """ + self.record_once( + lambda s: s.app.teardown_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_context_processor( + self, f: T_template_context_processor + ) -> T_template_context_processor: + """Like :meth:`context_processor`, but for templates rendered by every view, not + only by the blueprint. Equivalent to :meth:`.Flask.context_processor`. + """ + self.record_once( + lambda s: s.app.template_context_processors.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_errorhandler( + self, code: type[Exception] | int + ) -> t.Callable[[T_error_handler], T_error_handler]: + """Like :meth:`errorhandler`, but for every request, not only those handled by + the blueprint. Equivalent to :meth:`.Flask.errorhandler`. + """ + + def decorator(f: T_error_handler) -> T_error_handler: + self.record_once(lambda s: s.app.errorhandler(code)(f)) + return f + + return decorator + + @setupmethod + def app_url_value_preprocessor( + self, f: T_url_value_preprocessor + ) -> T_url_value_preprocessor: + """Like :meth:`url_value_preprocessor`, but for every request, not only those + handled by the blueprint. Equivalent to :meth:`.Flask.url_value_preprocessor`. + """ + self.record_once( + lambda s: s.app.url_value_preprocessors.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_url_defaults(self, f: T_url_defaults) -> T_url_defaults: + """Like :meth:`url_defaults`, but for every request, not only those handled by + the blueprint. Equivalent to :meth:`.Flask.url_defaults`. + """ + self.record_once( + lambda s: s.app.url_default_functions.setdefault(None, []).append(f) + ) + return f diff --git a/env/lib/python3.11/site-packages/flask/cli.py b/env/lib/python3.11/site-packages/flask/cli.py new file mode 100644 index 0000000..f7e1f29 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/cli.py @@ -0,0 +1,1067 @@ +from __future__ import annotations + +import ast +import inspect +import os +import platform +import re +import sys +import traceback +import typing as t +from functools import update_wrapper +from operator import itemgetter + +import click +from click.core import ParameterSource +from werkzeug import run_simple +from werkzeug.serving import is_running_from_reloader +from werkzeug.utils import import_string + +from .globals import current_app +from .helpers import get_debug_flag +from .helpers import get_load_dotenv + +if t.TYPE_CHECKING: + from .app import Flask + + +class NoAppException(click.UsageError): + """Raised if an application cannot be found or loaded.""" + + +def find_best_app(module): + """Given a module instance this tries to find the best possible + application in the module or raises an exception. + """ + from . import Flask + + # Search for the most common names first. + for attr_name in ("app", "application"): + app = getattr(module, attr_name, None) + + if isinstance(app, Flask): + return app + + # Otherwise find the only object that is a Flask instance. + matches = [v for v in module.__dict__.values() if isinstance(v, Flask)] + + if len(matches) == 1: + return matches[0] + elif len(matches) > 1: + raise NoAppException( + "Detected multiple Flask applications in module" + f" '{module.__name__}'. Use '{module.__name__}:name'" + " to specify the correct one." + ) + + # Search for app factory functions. + for attr_name in ("create_app", "make_app"): + app_factory = getattr(module, attr_name, None) + + if inspect.isfunction(app_factory): + try: + app = app_factory() + + if isinstance(app, Flask): + return app + except TypeError as e: + if not _called_with_wrong_args(app_factory): + raise + + raise NoAppException( + f"Detected factory '{attr_name}' in module '{module.__name__}'," + " but could not call it without arguments. Use" + f" '{module.__name__}:{attr_name}(args)'" + " to specify arguments." + ) from e + + raise NoAppException( + "Failed to find Flask application or factory in module" + f" '{module.__name__}'. Use '{module.__name__}:name'" + " to specify one." + ) + + +def _called_with_wrong_args(f): + """Check whether calling a function raised a ``TypeError`` because + the call failed or because something in the factory raised the + error. + + :param f: The function that was called. + :return: ``True`` if the call failed. + """ + tb = sys.exc_info()[2] + + try: + while tb is not None: + if tb.tb_frame.f_code is f.__code__: + # In the function, it was called successfully. + return False + + tb = tb.tb_next + + # Didn't reach the function. + return True + finally: + # Delete tb to break a circular reference. + # https://docs.python.org/2/library/sys.html#sys.exc_info + del tb + + +def find_app_by_string(module, app_name): + """Check if the given string is a variable name or a function. Call + a function to get the app instance, or return the variable directly. + """ + from . import Flask + + # Parse app_name as a single expression to determine if it's a valid + # attribute name or function call. + try: + expr = ast.parse(app_name.strip(), mode="eval").body + except SyntaxError: + raise NoAppException( + f"Failed to parse {app_name!r} as an attribute name or function call." + ) from None + + if isinstance(expr, ast.Name): + name = expr.id + args = [] + kwargs = {} + elif isinstance(expr, ast.Call): + # Ensure the function name is an attribute name only. + if not isinstance(expr.func, ast.Name): + raise NoAppException( + f"Function reference must be a simple name: {app_name!r}." + ) + + name = expr.func.id + + # Parse the positional and keyword arguments as literals. + try: + args = [ast.literal_eval(arg) for arg in expr.args] + kwargs = {kw.arg: ast.literal_eval(kw.value) for kw in expr.keywords} + except ValueError: + # literal_eval gives cryptic error messages, show a generic + # message with the full expression instead. + raise NoAppException( + f"Failed to parse arguments as literal values: {app_name!r}." + ) from None + else: + raise NoAppException( + f"Failed to parse {app_name!r} as an attribute name or function call." + ) + + try: + attr = getattr(module, name) + except AttributeError as e: + raise NoAppException( + f"Failed to find attribute {name!r} in {module.__name__!r}." + ) from e + + # If the attribute is a function, call it with any args and kwargs + # to get the real application. + if inspect.isfunction(attr): + try: + app = attr(*args, **kwargs) + except TypeError as e: + if not _called_with_wrong_args(attr): + raise + + raise NoAppException( + f"The factory {app_name!r} in module" + f" {module.__name__!r} could not be called with the" + " specified arguments." + ) from e + else: + app = attr + + if isinstance(app, Flask): + return app + + raise NoAppException( + "A valid Flask application was not obtained from" + f" '{module.__name__}:{app_name}'." + ) + + +def prepare_import(path): + """Given a filename this will try to calculate the python path, add it + to the search path and return the actual module name that is expected. + """ + path = os.path.realpath(path) + + fname, ext = os.path.splitext(path) + if ext == ".py": + path = fname + + if os.path.basename(path) == "__init__": + path = os.path.dirname(path) + + module_name = [] + + # move up until outside package structure (no __init__.py) + while True: + path, name = os.path.split(path) + module_name.append(name) + + if not os.path.exists(os.path.join(path, "__init__.py")): + break + + if sys.path[0] != path: + sys.path.insert(0, path) + + return ".".join(module_name[::-1]) + + +def locate_app(module_name, app_name, raise_if_not_found=True): + try: + __import__(module_name) + except ImportError: + # Reraise the ImportError if it occurred within the imported module. + # Determine this by checking whether the trace has a depth > 1. + if sys.exc_info()[2].tb_next: + raise NoAppException( + f"While importing {module_name!r}, an ImportError was" + f" raised:\n\n{traceback.format_exc()}" + ) from None + elif raise_if_not_found: + raise NoAppException(f"Could not import {module_name!r}.") from None + else: + return + + module = sys.modules[module_name] + + if app_name is None: + return find_best_app(module) + else: + return find_app_by_string(module, app_name) + + +def get_version(ctx, param, value): + if not value or ctx.resilient_parsing: + return + + import werkzeug + from . import __version__ + + click.echo( + f"Python {platform.python_version()}\n" + f"Flask {__version__}\n" + f"Werkzeug {werkzeug.__version__}", + color=ctx.color, + ) + ctx.exit() + + +version_option = click.Option( + ["--version"], + help="Show the Flask version.", + expose_value=False, + callback=get_version, + is_flag=True, + is_eager=True, +) + + +class ScriptInfo: + """Helper object to deal with Flask applications. This is usually not + necessary to interface with as it's used internally in the dispatching + to click. In future versions of Flask this object will most likely play + a bigger role. Typically it's created automatically by the + :class:`FlaskGroup` but you can also manually create it and pass it + onwards as click object. + """ + + def __init__( + self, + app_import_path: str | None = None, + create_app: t.Callable[..., Flask] | None = None, + set_debug_flag: bool = True, + ) -> None: + #: Optionally the import path for the Flask application. + self.app_import_path = app_import_path + #: Optionally a function that is passed the script info to create + #: the instance of the application. + self.create_app = create_app + #: A dictionary with arbitrary data that can be associated with + #: this script info. + self.data: dict[t.Any, t.Any] = {} + self.set_debug_flag = set_debug_flag + self._loaded_app: Flask | None = None + + def load_app(self) -> Flask: + """Loads the Flask app (if not yet loaded) and returns it. Calling + this multiple times will just result in the already loaded app to + be returned. + """ + if self._loaded_app is not None: + return self._loaded_app + + if self.create_app is not None: + app = self.create_app() + else: + if self.app_import_path: + path, name = ( + re.split(r":(?![\\/])", self.app_import_path, 1) + [None] + )[:2] + import_name = prepare_import(path) + app = locate_app(import_name, name) + else: + for path in ("wsgi.py", "app.py"): + import_name = prepare_import(path) + app = locate_app(import_name, None, raise_if_not_found=False) + + if app: + break + + if not app: + raise NoAppException( + "Could not locate a Flask application. Use the" + " 'flask --app' option, 'FLASK_APP' environment" + " variable, or a 'wsgi.py' or 'app.py' file in the" + " current directory." + ) + + if self.set_debug_flag: + # Update the app's debug flag through the descriptor so that + # other values repopulate as well. + app.debug = get_debug_flag() + + self._loaded_app = app + return app + + +pass_script_info = click.make_pass_decorator(ScriptInfo, ensure=True) + + +def with_appcontext(f): + """Wraps a callback so that it's guaranteed to be executed with the + script's application context. + + Custom commands (and their options) registered under ``app.cli`` or + ``blueprint.cli`` will always have an app context available, this + decorator is not required in that case. + + .. versionchanged:: 2.2 + The app context is active for subcommands as well as the + decorated callback. The app context is always available to + ``app.cli`` command and parameter callbacks. + """ + + @click.pass_context + def decorator(__ctx, *args, **kwargs): + if not current_app: + app = __ctx.ensure_object(ScriptInfo).load_app() + __ctx.with_resource(app.app_context()) + + return __ctx.invoke(f, *args, **kwargs) + + return update_wrapper(decorator, f) + + +class AppGroup(click.Group): + """This works similar to a regular click :class:`~click.Group` but it + changes the behavior of the :meth:`command` decorator so that it + automatically wraps the functions in :func:`with_appcontext`. + + Not to be confused with :class:`FlaskGroup`. + """ + + def command(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it wraps callbacks in :func:`with_appcontext` + unless it's disabled by passing ``with_appcontext=False``. + """ + wrap_for_ctx = kwargs.pop("with_appcontext", True) + + def decorator(f): + if wrap_for_ctx: + f = with_appcontext(f) + return click.Group.command(self, *args, **kwargs)(f) + + return decorator + + def group(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it defaults the group class to + :class:`AppGroup`. + """ + kwargs.setdefault("cls", AppGroup) + return click.Group.group(self, *args, **kwargs) + + +def _set_app(ctx: click.Context, param: click.Option, value: str | None) -> str | None: + if value is None: + return None + + info = ctx.ensure_object(ScriptInfo) + info.app_import_path = value + return value + + +# This option is eager so the app will be available if --help is given. +# --help is also eager, so --app must be before it in the param list. +# no_args_is_help bypasses eager processing, so this option must be +# processed manually in that case to ensure FLASK_APP gets picked up. +_app_option = click.Option( + ["-A", "--app"], + metavar="IMPORT", + help=( + "The Flask application or factory function to load, in the form 'module:name'." + " Module can be a dotted import or file path. Name is not required if it is" + " 'app', 'application', 'create_app', or 'make_app', and can be 'name(args)' to" + " pass arguments." + ), + is_eager=True, + expose_value=False, + callback=_set_app, +) + + +def _set_debug(ctx: click.Context, param: click.Option, value: bool) -> bool | None: + # If the flag isn't provided, it will default to False. Don't use + # that, let debug be set by env in that case. + source = ctx.get_parameter_source(param.name) # type: ignore[arg-type] + + if source is not None and source in ( + ParameterSource.DEFAULT, + ParameterSource.DEFAULT_MAP, + ): + return None + + # Set with env var instead of ScriptInfo.load so that it can be + # accessed early during a factory function. + os.environ["FLASK_DEBUG"] = "1" if value else "0" + return value + + +_debug_option = click.Option( + ["--debug/--no-debug"], + help="Set debug mode.", + expose_value=False, + callback=_set_debug, +) + + +def _env_file_callback( + ctx: click.Context, param: click.Option, value: str | None +) -> str | None: + if value is None: + return None + + import importlib + + try: + importlib.import_module("dotenv") + except ImportError: + raise click.BadParameter( + "python-dotenv must be installed to load an env file.", + ctx=ctx, + param=param, + ) from None + + # Don't check FLASK_SKIP_DOTENV, that only disables automatically + # loading .env and .flaskenv files. + load_dotenv(value) + return value + + +# This option is eager so env vars are loaded as early as possible to be +# used by other options. +_env_file_option = click.Option( + ["-e", "--env-file"], + type=click.Path(exists=True, dir_okay=False), + help="Load environment variables from this file. python-dotenv must be installed.", + is_eager=True, + expose_value=False, + callback=_env_file_callback, +) + + +class FlaskGroup(AppGroup): + """Special subclass of the :class:`AppGroup` group that supports + loading more commands from the configured Flask app. Normally a + developer does not have to interface with this class but there are + some very advanced use cases for which it makes sense to create an + instance of this. see :ref:`custom-scripts`. + + :param add_default_commands: if this is True then the default run and + shell commands will be added. + :param add_version_option: adds the ``--version`` option. + :param create_app: an optional callback that is passed the script info and + returns the loaded app. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param set_debug_flag: Set the app's debug flag. + + .. versionchanged:: 2.2 + Added the ``-A/--app``, ``--debug/--no-debug``, ``-e/--env-file`` options. + + .. versionchanged:: 2.2 + An app context is pushed when running ``app.cli`` commands, so + ``@with_appcontext`` is no longer required for those commands. + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment variables + from :file:`.env` and :file:`.flaskenv` files. + """ + + def __init__( + self, + add_default_commands: bool = True, + create_app: t.Callable[..., Flask] | None = None, + add_version_option: bool = True, + load_dotenv: bool = True, + set_debug_flag: bool = True, + **extra: t.Any, + ) -> None: + params = list(extra.pop("params", None) or ()) + # Processing is done with option callbacks instead of a group + # callback. This allows users to make a custom group callback + # without losing the behavior. --env-file must come first so + # that it is eagerly evaluated before --app. + params.extend((_env_file_option, _app_option, _debug_option)) + + if add_version_option: + params.append(version_option) + + if "context_settings" not in extra: + extra["context_settings"] = {} + + extra["context_settings"].setdefault("auto_envvar_prefix", "FLASK") + + super().__init__(params=params, **extra) + + self.create_app = create_app + self.load_dotenv = load_dotenv + self.set_debug_flag = set_debug_flag + + if add_default_commands: + self.add_command(run_command) + self.add_command(shell_command) + self.add_command(routes_command) + + self._loaded_plugin_commands = False + + def _load_plugin_commands(self): + if self._loaded_plugin_commands: + return + + if sys.version_info >= (3, 10): + from importlib import metadata + else: + # Use a backport on Python < 3.10. We technically have + # importlib.metadata on 3.8+, but the API changed in 3.10, + # so use the backport for consistency. + import importlib_metadata as metadata + + for ep in metadata.entry_points(group="flask.commands"): + self.add_command(ep.load(), ep.name) + + self._loaded_plugin_commands = True + + def get_command(self, ctx, name): + self._load_plugin_commands() + # Look up built-in and plugin commands, which should be + # available even if the app fails to load. + rv = super().get_command(ctx, name) + + if rv is not None: + return rv + + info = ctx.ensure_object(ScriptInfo) + + # Look up commands provided by the app, showing an error and + # continuing if the app couldn't be loaded. + try: + app = info.load_app() + except NoAppException as e: + click.secho(f"Error: {e.format_message()}\n", err=True, fg="red") + return None + + # Push an app context for the loaded app unless it is already + # active somehow. This makes the context available to parameter + # and command callbacks without needing @with_appcontext. + if not current_app or current_app._get_current_object() is not app: + ctx.with_resource(app.app_context()) + + return app.cli.get_command(ctx, name) + + def list_commands(self, ctx): + self._load_plugin_commands() + # Start with the built-in and plugin commands. + rv = set(super().list_commands(ctx)) + info = ctx.ensure_object(ScriptInfo) + + # Add commands provided by the app, showing an error and + # continuing if the app couldn't be loaded. + try: + rv.update(info.load_app().cli.list_commands(ctx)) + except NoAppException as e: + # When an app couldn't be loaded, show the error message + # without the traceback. + click.secho(f"Error: {e.format_message()}\n", err=True, fg="red") + except Exception: + # When any other errors occurred during loading, show the + # full traceback. + click.secho(f"{traceback.format_exc()}\n", err=True, fg="red") + + return sorted(rv) + + def make_context( + self, + info_name: str | None, + args: list[str], + parent: click.Context | None = None, + **extra: t.Any, + ) -> click.Context: + # Set a flag to tell app.run to become a no-op. If app.run was + # not in a __name__ == __main__ guard, it would start the server + # when importing, blocking whatever command is being called. + os.environ["FLASK_RUN_FROM_CLI"] = "true" + + # Attempt to load .env and .flask env files. The --env-file + # option can cause another file to be loaded. + if get_load_dotenv(self.load_dotenv): + load_dotenv() + + if "obj" not in extra and "obj" not in self.context_settings: + extra["obj"] = ScriptInfo( + create_app=self.create_app, set_debug_flag=self.set_debug_flag + ) + + return super().make_context(info_name, args, parent=parent, **extra) + + def parse_args(self, ctx: click.Context, args: list[str]) -> list[str]: + if not args and self.no_args_is_help: + # Attempt to load --env-file and --app early in case they + # were given as env vars. Otherwise no_args_is_help will not + # see commands from app.cli. + _env_file_option.handle_parse_result(ctx, {}, []) + _app_option.handle_parse_result(ctx, {}, []) + + return super().parse_args(ctx, args) + + +def _path_is_ancestor(path, other): + """Take ``other`` and remove the length of ``path`` from it. Then join it + to ``path``. If it is the original value, ``path`` is an ancestor of + ``other``.""" + return os.path.join(path, other[len(path) :].lstrip(os.sep)) == other + + +def load_dotenv(path: str | os.PathLike | None = None) -> bool: + """Load "dotenv" files in order of precedence to set environment variables. + + If an env var is already set it is not overwritten, so earlier files in the + list are preferred over later files. + + This is a no-op if `python-dotenv`_ is not installed. + + .. _python-dotenv: https://github.com/theskumar/python-dotenv#readme + + :param path: Load the file at this location instead of searching. + :return: ``True`` if a file was loaded. + + .. versionchanged:: 2.0 + The current directory is not changed to the location of the + loaded file. + + .. versionchanged:: 2.0 + When loading the env files, set the default encoding to UTF-8. + + .. versionchanged:: 1.1.0 + Returns ``False`` when python-dotenv is not installed, or when + the given path isn't a file. + + .. versionadded:: 1.0 + """ + try: + import dotenv + except ImportError: + if path or os.path.isfile(".env") or os.path.isfile(".flaskenv"): + click.secho( + " * Tip: There are .env or .flaskenv files present." + ' Do "pip install python-dotenv" to use them.', + fg="yellow", + err=True, + ) + + return False + + # Always return after attempting to load a given path, don't load + # the default files. + if path is not None: + if os.path.isfile(path): + return dotenv.load_dotenv(path, encoding="utf-8") + + return False + + loaded = False + + for name in (".env", ".flaskenv"): + path = dotenv.find_dotenv(name, usecwd=True) + + if not path: + continue + + dotenv.load_dotenv(path, encoding="utf-8") + loaded = True + + return loaded # True if at least one file was located and loaded. + + +def show_server_banner(debug, app_import_path): + """Show extra startup messages the first time the server is run, + ignoring the reloader. + """ + if is_running_from_reloader(): + return + + if app_import_path is not None: + click.echo(f" * Serving Flask app '{app_import_path}'") + + if debug is not None: + click.echo(f" * Debug mode: {'on' if debug else 'off'}") + + +class CertParamType(click.ParamType): + """Click option type for the ``--cert`` option. Allows either an + existing file, the string ``'adhoc'``, or an import for a + :class:`~ssl.SSLContext` object. + """ + + name = "path" + + def __init__(self): + self.path_type = click.Path(exists=True, dir_okay=False, resolve_path=True) + + def convert(self, value, param, ctx): + try: + import ssl + except ImportError: + raise click.BadParameter( + 'Using "--cert" requires Python to be compiled with SSL support.', + ctx, + param, + ) from None + + try: + return self.path_type(value, param, ctx) + except click.BadParameter: + value = click.STRING(value, param, ctx).lower() + + if value == "adhoc": + try: + import cryptography # noqa: F401 + except ImportError: + raise click.BadParameter( + "Using ad-hoc certificates requires the cryptography library.", + ctx, + param, + ) from None + + return value + + obj = import_string(value, silent=True) + + if isinstance(obj, ssl.SSLContext): + return obj + + raise + + +def _validate_key(ctx, param, value): + """The ``--key`` option must be specified when ``--cert`` is a file. + Modifies the ``cert`` param to be a ``(cert, key)`` pair if needed. + """ + cert = ctx.params.get("cert") + is_adhoc = cert == "adhoc" + + try: + import ssl + except ImportError: + is_context = False + else: + is_context = isinstance(cert, ssl.SSLContext) + + if value is not None: + if is_adhoc: + raise click.BadParameter( + 'When "--cert" is "adhoc", "--key" is not used.', ctx, param + ) + + if is_context: + raise click.BadParameter( + 'When "--cert" is an SSLContext object, "--key is not used.', ctx, param + ) + + if not cert: + raise click.BadParameter('"--cert" must also be specified.', ctx, param) + + ctx.params["cert"] = cert, value + + else: + if cert and not (is_adhoc or is_context): + raise click.BadParameter('Required when using "--cert".', ctx, param) + + return value + + +class SeparatedPathType(click.Path): + """Click option type that accepts a list of values separated by the + OS's path separator (``:``, ``;`` on Windows). Each value is + validated as a :class:`click.Path` type. + """ + + def convert(self, value, param, ctx): + items = self.split_envvar_value(value) + super_convert = super().convert + return [super_convert(item, param, ctx) for item in items] + + +@click.command("run", short_help="Run a development server.") +@click.option("--host", "-h", default="127.0.0.1", help="The interface to bind to.") +@click.option("--port", "-p", default=5000, help="The port to bind to.") +@click.option( + "--cert", + type=CertParamType(), + help="Specify a certificate file to use HTTPS.", + is_eager=True, +) +@click.option( + "--key", + type=click.Path(exists=True, dir_okay=False, resolve_path=True), + callback=_validate_key, + expose_value=False, + help="The key file to use when specifying a certificate.", +) +@click.option( + "--reload/--no-reload", + default=None, + help="Enable or disable the reloader. By default the reloader " + "is active if debug is enabled.", +) +@click.option( + "--debugger/--no-debugger", + default=None, + help="Enable or disable the debugger. By default the debugger " + "is active if debug is enabled.", +) +@click.option( + "--with-threads/--without-threads", + default=True, + help="Enable or disable multithreading.", +) +@click.option( + "--extra-files", + default=None, + type=SeparatedPathType(), + help=( + "Extra files that trigger a reload on change. Multiple paths" + f" are separated by {os.path.pathsep!r}." + ), +) +@click.option( + "--exclude-patterns", + default=None, + type=SeparatedPathType(), + help=( + "Files matching these fnmatch patterns will not trigger a reload" + " on change. Multiple patterns are separated by" + f" {os.path.pathsep!r}." + ), +) +@pass_script_info +def run_command( + info, + host, + port, + reload, + debugger, + with_threads, + cert, + extra_files, + exclude_patterns, +): + """Run a local development server. + + This server is for development purposes only. It does not provide + the stability, security, or performance of production WSGI servers. + + The reloader and debugger are enabled by default with the '--debug' + option. + """ + try: + app = info.load_app() + except Exception as e: + if is_running_from_reloader(): + # When reloading, print out the error immediately, but raise + # it later so the debugger or server can handle it. + traceback.print_exc() + err = e + + def app(environ, start_response): + raise err from None + + else: + # When not reloading, raise the error immediately so the + # command fails. + raise e from None + + debug = get_debug_flag() + + if reload is None: + reload = debug + + if debugger is None: + debugger = debug + + show_server_banner(debug, info.app_import_path) + + run_simple( + host, + port, + app, + use_reloader=reload, + use_debugger=debugger, + threaded=with_threads, + ssl_context=cert, + extra_files=extra_files, + exclude_patterns=exclude_patterns, + ) + + +run_command.params.insert(0, _debug_option) + + +@click.command("shell", short_help="Run a shell in the app context.") +@with_appcontext +def shell_command() -> None: + """Run an interactive Python shell in the context of a given + Flask application. The application will populate the default + namespace of this shell according to its configuration. + + This is useful for executing small snippets of management code + without having to manually configure the application. + """ + import code + + banner = ( + f"Python {sys.version} on {sys.platform}\n" + f"App: {current_app.import_name}\n" + f"Instance: {current_app.instance_path}" + ) + ctx: dict = {} + + # Support the regular Python interpreter startup script if someone + # is using it. + startup = os.environ.get("PYTHONSTARTUP") + if startup and os.path.isfile(startup): + with open(startup) as f: + eval(compile(f.read(), startup, "exec"), ctx) + + ctx.update(current_app.make_shell_context()) + + # Site, customize, or startup script can set a hook to call when + # entering interactive mode. The default one sets up readline with + # tab and history completion. + interactive_hook = getattr(sys, "__interactivehook__", None) + + if interactive_hook is not None: + try: + import readline + from rlcompleter import Completer + except ImportError: + pass + else: + # rlcompleter uses __main__.__dict__ by default, which is + # flask.__main__. Use the shell context instead. + readline.set_completer(Completer(ctx).complete) + + interactive_hook() + + code.interact(banner=banner, local=ctx) + + +@click.command("routes", short_help="Show the routes for the app.") +@click.option( + "--sort", + "-s", + type=click.Choice(("endpoint", "methods", "domain", "rule", "match")), + default="endpoint", + help=( + "Method to sort routes by. 'match' is the order that Flask will match routes" + " when dispatching a request." + ), +) +@click.option("--all-methods", is_flag=True, help="Show HEAD and OPTIONS methods.") +@with_appcontext +def routes_command(sort: str, all_methods: bool) -> None: + """Show all registered routes with endpoints and methods.""" + rules = list(current_app.url_map.iter_rules()) + + if not rules: + click.echo("No routes were registered.") + return + + ignored_methods = set() if all_methods else {"HEAD", "OPTIONS"} + host_matching = current_app.url_map.host_matching + has_domain = any(rule.host if host_matching else rule.subdomain for rule in rules) + rows = [] + + for rule in rules: + row = [ + rule.endpoint, + ", ".join(sorted((rule.methods or set()) - ignored_methods)), + ] + + if has_domain: + row.append((rule.host if host_matching else rule.subdomain) or "") + + row.append(rule.rule) + rows.append(row) + + headers = ["Endpoint", "Methods"] + sorts = ["endpoint", "methods"] + + if has_domain: + headers.append("Host" if host_matching else "Subdomain") + sorts.append("domain") + + headers.append("Rule") + sorts.append("rule") + + try: + rows.sort(key=itemgetter(sorts.index(sort))) + except ValueError: + pass + + rows.insert(0, headers) + widths = [max(len(row[i]) for row in rows) for i in range(len(headers))] + rows.insert(1, ["-" * w for w in widths]) + template = " ".join(f"{{{i}:<{w}}}" for i, w in enumerate(widths)) + + for row in rows: + click.echo(template.format(*row)) + + +cli = FlaskGroup( + name="flask", + help="""\ +A general utility script for Flask applications. + +An application to load must be given with the '--app' option, +'FLASK_APP' environment variable, or with a 'wsgi.py' or 'app.py' file +in the current directory. +""", +) + + +def main() -> None: + cli.main() + + +if __name__ == "__main__": + main() diff --git a/env/lib/python3.11/site-packages/flask/config.py b/env/lib/python3.11/site-packages/flask/config.py new file mode 100644 index 0000000..a73dd78 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/config.py @@ -0,0 +1,345 @@ +from __future__ import annotations + +import errno +import json +import os +import types +import typing as t + +from werkzeug.utils import import_string + + +class ConfigAttribute: + """Makes an attribute forward to the config""" + + def __init__(self, name: str, get_converter: t.Callable | None = None) -> None: + self.__name__ = name + self.get_converter = get_converter + + def __get__(self, obj: t.Any, owner: t.Any = None) -> t.Any: + if obj is None: + return self + rv = obj.config[self.__name__] + if self.get_converter is not None: + rv = self.get_converter(rv) + return rv + + def __set__(self, obj: t.Any, value: t.Any) -> None: + obj.config[self.__name__] = value + + +class Config(dict): + """Works exactly like a dict but provides ways to fill it from files + or special dictionaries. There are two common patterns to populate the + config. + + Either you can fill the config from a config file:: + + app.config.from_pyfile('yourconfig.cfg') + + Or alternatively you can define the configuration options in the + module that calls :meth:`from_object` or provide an import path to + a module that should be loaded. It is also possible to tell it to + use the same module and with that provide the configuration values + just before the call:: + + DEBUG = True + SECRET_KEY = 'development key' + app.config.from_object(__name__) + + In both cases (loading from any Python file or loading from modules), + only uppercase keys are added to the config. This makes it possible to use + lowercase values in the config file for temporary values that are not added + to the config or to define the config keys in the same file that implements + the application. + + Probably the most interesting way to load configurations is from an + environment variable pointing to a file:: + + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + + In this case before launching the application you have to set this + environment variable to the file you want to use. On Linux and OS X + use the export statement:: + + export YOURAPPLICATION_SETTINGS='/path/to/config/file' + + On windows use `set` instead. + + :param root_path: path to which files are read relative from. When the + config object is created by the application, this is + the application's :attr:`~flask.Flask.root_path`. + :param defaults: an optional dictionary of default values + """ + + def __init__(self, root_path: str, defaults: dict | None = None) -> None: + super().__init__(defaults or {}) + self.root_path = root_path + + def from_envvar(self, variable_name: str, silent: bool = False) -> bool: + """Loads a configuration from an environment variable pointing to + a configuration file. This is basically just a shortcut with nicer + error messages for this line of code:: + + app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS']) + + :param variable_name: name of the environment variable + :param silent: set to ``True`` if you want silent failure for missing + files. + :return: ``True`` if the file was loaded successfully. + """ + rv = os.environ.get(variable_name) + if not rv: + if silent: + return False + raise RuntimeError( + f"The environment variable {variable_name!r} is not set" + " and as such configuration could not be loaded. Set" + " this variable and make it point to a configuration" + " file" + ) + return self.from_pyfile(rv, silent=silent) + + def from_prefixed_env( + self, prefix: str = "FLASK", *, loads: t.Callable[[str], t.Any] = json.loads + ) -> bool: + """Load any environment variables that start with ``FLASK_``, + dropping the prefix from the env key for the config key. Values + are passed through a loading function to attempt to convert them + to more specific types than strings. + + Keys are loaded in :func:`sorted` order. + + The default loading function attempts to parse values as any + valid JSON type, including dicts and lists. + + Specific items in nested dicts can be set by separating the + keys with double underscores (``__``). If an intermediate key + doesn't exist, it will be initialized to an empty dict. + + :param prefix: Load env vars that start with this prefix, + separated with an underscore (``_``). + :param loads: Pass each string value to this function and use + the returned value as the config value. If any error is + raised it is ignored and the value remains a string. The + default is :func:`json.loads`. + + .. versionadded:: 2.1 + """ + prefix = f"{prefix}_" + len_prefix = len(prefix) + + for key in sorted(os.environ): + if not key.startswith(prefix): + continue + + value = os.environ[key] + + try: + value = loads(value) + except Exception: + # Keep the value as a string if loading failed. + pass + + # Change to key.removeprefix(prefix) on Python >= 3.9. + key = key[len_prefix:] + + if "__" not in key: + # A non-nested key, set directly. + self[key] = value + continue + + # Traverse nested dictionaries with keys separated by "__". + current = self + *parts, tail = key.split("__") + + for part in parts: + # If an intermediate dict does not exist, create it. + if part not in current: + current[part] = {} + + current = current[part] + + current[tail] = value + + return True + + def from_pyfile(self, filename: str, silent: bool = False) -> bool: + """Updates the values in the config from a Python file. This function + behaves as if the file was imported as module with the + :meth:`from_object` function. + + :param filename: the filename of the config. This can either be an + absolute filename or a filename relative to the + root path. + :param silent: set to ``True`` if you want silent failure for missing + files. + :return: ``True`` if the file was loaded successfully. + + .. versionadded:: 0.7 + `silent` parameter. + """ + filename = os.path.join(self.root_path, filename) + d = types.ModuleType("config") + d.__file__ = filename + try: + with open(filename, mode="rb") as config_file: + exec(compile(config_file.read(), filename, "exec"), d.__dict__) + except OSError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR, errno.ENOTDIR): + return False + e.strerror = f"Unable to load configuration file ({e.strerror})" + raise + self.from_object(d) + return True + + def from_object(self, obj: object | str) -> None: + """Updates the values from the given object. An object can be of one + of the following two types: + + - a string: in this case the object with that name will be imported + - an actual object reference: that object is used directly + + Objects are usually either modules or classes. :meth:`from_object` + loads only the uppercase attributes of the module/class. A ``dict`` + object will not work with :meth:`from_object` because the keys of a + ``dict`` are not attributes of the ``dict`` class. + + Example of module-based configuration:: + + app.config.from_object('yourapplication.default_config') + from yourapplication import default_config + app.config.from_object(default_config) + + Nothing is done to the object before loading. If the object is a + class and has ``@property`` attributes, it needs to be + instantiated before being passed to this method. + + You should not use this function to load the actual configuration but + rather configuration defaults. The actual config should be loaded + with :meth:`from_pyfile` and ideally from a location not within the + package because the package might be installed system wide. + + See :ref:`config-dev-prod` for an example of class-based configuration + using :meth:`from_object`. + + :param obj: an import name or object + """ + if isinstance(obj, str): + obj = import_string(obj) + for key in dir(obj): + if key.isupper(): + self[key] = getattr(obj, key) + + def from_file( + self, + filename: str, + load: t.Callable[[t.IO[t.Any]], t.Mapping], + silent: bool = False, + text: bool = True, + ) -> bool: + """Update the values in the config from a file that is loaded + using the ``load`` parameter. The loaded data is passed to the + :meth:`from_mapping` method. + + .. code-block:: python + + import json + app.config.from_file("config.json", load=json.load) + + import tomllib + app.config.from_file("config.toml", load=tomllib.load, text=False) + + :param filename: The path to the data file. This can be an + absolute path or relative to the config root path. + :param load: A callable that takes a file handle and returns a + mapping of loaded data from the file. + :type load: ``Callable[[Reader], Mapping]`` where ``Reader`` + implements a ``read`` method. + :param silent: Ignore the file if it doesn't exist. + :param text: Open the file in text or binary mode. + :return: ``True`` if the file was loaded successfully. + + .. versionchanged:: 2.3 + The ``text`` parameter was added. + + .. versionadded:: 2.0 + """ + filename = os.path.join(self.root_path, filename) + + try: + with open(filename, "r" if text else "rb") as f: + obj = load(f) + except OSError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR): + return False + + e.strerror = f"Unable to load configuration file ({e.strerror})" + raise + + return self.from_mapping(obj) + + def from_mapping( + self, mapping: t.Mapping[str, t.Any] | None = None, **kwargs: t.Any + ) -> bool: + """Updates the config like :meth:`update` ignoring items with + non-upper keys. + + :return: Always returns ``True``. + + .. versionadded:: 0.11 + """ + mappings: dict[str, t.Any] = {} + if mapping is not None: + mappings.update(mapping) + mappings.update(kwargs) + for key, value in mappings.items(): + if key.isupper(): + self[key] = value + return True + + def get_namespace( + self, namespace: str, lowercase: bool = True, trim_namespace: bool = True + ) -> dict[str, t.Any]: + """Returns a dictionary containing a subset of configuration options + that match the specified namespace/prefix. Example usage:: + + app.config['IMAGE_STORE_TYPE'] = 'fs' + app.config['IMAGE_STORE_PATH'] = '/var/app/images' + app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com' + image_store_config = app.config.get_namespace('IMAGE_STORE_') + + The resulting dictionary `image_store_config` would look like:: + + { + 'type': 'fs', + 'path': '/var/app/images', + 'base_url': 'http://img.website.com' + } + + This is often useful when configuration options map directly to + keyword arguments in functions or class constructors. + + :param namespace: a configuration namespace + :param lowercase: a flag indicating if the keys of the resulting + dictionary should be lowercase + :param trim_namespace: a flag indicating if the keys of the resulting + dictionary should not include the namespace + + .. versionadded:: 0.11 + """ + rv = {} + for k, v in self.items(): + if not k.startswith(namespace): + continue + if trim_namespace: + key = k[len(namespace) :] + else: + key = k + if lowercase: + key = key.lower() + rv[key] = v + return rv + + def __repr__(self) -> str: + return f"<{type(self).__name__} {dict.__repr__(self)}>" diff --git a/env/lib/python3.11/site-packages/flask/ctx.py b/env/lib/python3.11/site-packages/flask/ctx.py new file mode 100644 index 0000000..b37e4e0 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/ctx.py @@ -0,0 +1,440 @@ +from __future__ import annotations + +import contextvars +import sys +import typing as t +from functools import update_wrapper +from types import TracebackType + +from werkzeug.exceptions import HTTPException + +from . import typing as ft +from .globals import _cv_app +from .globals import _cv_request +from .signals import appcontext_popped +from .signals import appcontext_pushed + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .sessions import SessionMixin + from .wrappers import Request + + +# a singleton sentinel value for parameter defaults +_sentinel = object() + + +class _AppCtxGlobals: + """A plain object. Used as a namespace for storing data during an + application context. + + Creating an app context automatically creates this object, which is + made available as the :data:`g` proxy. + + .. describe:: 'key' in g + + Check whether an attribute is present. + + .. versionadded:: 0.10 + + .. describe:: iter(g) + + Return an iterator over the attribute names. + + .. versionadded:: 0.10 + """ + + # Define attr methods to let mypy know this is a namespace object + # that has arbitrary attributes. + + def __getattr__(self, name: str) -> t.Any: + try: + return self.__dict__[name] + except KeyError: + raise AttributeError(name) from None + + def __setattr__(self, name: str, value: t.Any) -> None: + self.__dict__[name] = value + + def __delattr__(self, name: str) -> None: + try: + del self.__dict__[name] + except KeyError: + raise AttributeError(name) from None + + def get(self, name: str, default: t.Any | None = None) -> t.Any: + """Get an attribute by name, or a default value. Like + :meth:`dict.get`. + + :param name: Name of attribute to get. + :param default: Value to return if the attribute is not present. + + .. versionadded:: 0.10 + """ + return self.__dict__.get(name, default) + + def pop(self, name: str, default: t.Any = _sentinel) -> t.Any: + """Get and remove an attribute by name. Like :meth:`dict.pop`. + + :param name: Name of attribute to pop. + :param default: Value to return if the attribute is not present, + instead of raising a ``KeyError``. + + .. versionadded:: 0.11 + """ + if default is _sentinel: + return self.__dict__.pop(name) + else: + return self.__dict__.pop(name, default) + + def setdefault(self, name: str, default: t.Any = None) -> t.Any: + """Get the value of an attribute if it is present, otherwise + set and return a default value. Like :meth:`dict.setdefault`. + + :param name: Name of attribute to get. + :param default: Value to set and return if the attribute is not + present. + + .. versionadded:: 0.11 + """ + return self.__dict__.setdefault(name, default) + + def __contains__(self, item: str) -> bool: + return item in self.__dict__ + + def __iter__(self) -> t.Iterator[str]: + return iter(self.__dict__) + + def __repr__(self) -> str: + ctx = _cv_app.get(None) + if ctx is not None: + return f"" + return object.__repr__(self) + + +def after_this_request(f: ft.AfterRequestCallable) -> ft.AfterRequestCallable: + """Executes a function after this request. This is useful to modify + response objects. The function is passed the response object and has + to return the same or a new one. + + Example:: + + @app.route('/') + def index(): + @after_this_request + def add_header(response): + response.headers['X-Foo'] = 'Parachute' + return response + return 'Hello World!' + + This is more useful if a function other than the view function wants to + modify a response. For instance think of a decorator that wants to add + some headers without converting the return value into a response object. + + .. versionadded:: 0.9 + """ + ctx = _cv_request.get(None) + + if ctx is None: + raise RuntimeError( + "'after_this_request' can only be used when a request" + " context is active, such as in a view function." + ) + + ctx._after_request_functions.append(f) + return f + + +def copy_current_request_context(f: t.Callable) -> t.Callable: + """A helper function that decorates a function to retain the current + request context. This is useful when working with greenlets. The moment + the function is decorated a copy of the request context is created and + then pushed when the function is called. The current session is also + included in the copied request context. + + Example:: + + import gevent + from flask import copy_current_request_context + + @app.route('/') + def index(): + @copy_current_request_context + def do_some_work(): + # do some work here, it can access flask.request or + # flask.session like you would otherwise in the view function. + ... + gevent.spawn(do_some_work) + return 'Regular response' + + .. versionadded:: 0.10 + """ + ctx = _cv_request.get(None) + + if ctx is None: + raise RuntimeError( + "'copy_current_request_context' can only be used when a" + " request context is active, such as in a view function." + ) + + ctx = ctx.copy() + + def wrapper(*args, **kwargs): + with ctx: + return ctx.app.ensure_sync(f)(*args, **kwargs) + + return update_wrapper(wrapper, f) + + +def has_request_context() -> bool: + """If you have code that wants to test if a request context is there or + not this function can be used. For instance, you may want to take advantage + of request information if the request object is available, but fail + silently if it is unavailable. + + :: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and has_request_context(): + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + Alternatively you can also just test any of the context bound objects + (such as :class:`request` or :class:`g`) for truthness:: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and request: + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + .. versionadded:: 0.7 + """ + return _cv_request.get(None) is not None + + +def has_app_context() -> bool: + """Works like :func:`has_request_context` but for the application + context. You can also just do a boolean check on the + :data:`current_app` object instead. + + .. versionadded:: 0.9 + """ + return _cv_app.get(None) is not None + + +class AppContext: + """The app context contains application-specific information. An app + context is created and pushed at the beginning of each request if + one is not already active. An app context is also pushed when + running CLI commands. + """ + + def __init__(self, app: Flask) -> None: + self.app = app + self.url_adapter = app.create_url_adapter(None) + self.g: _AppCtxGlobals = app.app_ctx_globals_class() + self._cv_tokens: list[contextvars.Token] = [] + + def push(self) -> None: + """Binds the app context to the current context.""" + self._cv_tokens.append(_cv_app.set(self)) + appcontext_pushed.send(self.app, _async_wrapper=self.app.ensure_sync) + + def pop(self, exc: BaseException | None = _sentinel) -> None: # type: ignore + """Pops the app context.""" + try: + if len(self._cv_tokens) == 1: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_appcontext(exc) + finally: + ctx = _cv_app.get() + _cv_app.reset(self._cv_tokens.pop()) + + if ctx is not self: + raise AssertionError( + f"Popped wrong app context. ({ctx!r} instead of {self!r})" + ) + + appcontext_popped.send(self.app, _async_wrapper=self.app.ensure_sync) + + def __enter__(self) -> AppContext: + self.push() + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.pop(exc_value) + + +class RequestContext: + """The request context contains per-request information. The Flask + app creates and pushes it at the beginning of the request, then pops + it at the end of the request. It will create the URL adapter and + request object for the WSGI environment provided. + + Do not attempt to use this class directly, instead use + :meth:`~flask.Flask.test_request_context` and + :meth:`~flask.Flask.request_context` to create this object. + + When the request context is popped, it will evaluate all the + functions registered on the application for teardown execution + (:meth:`~flask.Flask.teardown_request`). + + The request context is automatically popped at the end of the + request. When using the interactive debugger, the context will be + restored so ``request`` is still accessible. Similarly, the test + client can preserve the context after the request ends. However, + teardown functions may already have closed some resources such as + database connections. + """ + + def __init__( + self, + app: Flask, + environ: dict, + request: Request | None = None, + session: SessionMixin | None = None, + ) -> None: + self.app = app + if request is None: + request = app.request_class(environ) + request.json_module = app.json + self.request: Request = request + self.url_adapter = None + try: + self.url_adapter = app.create_url_adapter(self.request) + except HTTPException as e: + self.request.routing_exception = e + self.flashes: list[tuple[str, str]] | None = None + self.session: SessionMixin | None = session + # Functions that should be executed after the request on the response + # object. These will be called before the regular "after_request" + # functions. + self._after_request_functions: list[ft.AfterRequestCallable] = [] + + self._cv_tokens: list[tuple[contextvars.Token, AppContext | None]] = [] + + def copy(self) -> RequestContext: + """Creates a copy of this request context with the same request object. + This can be used to move a request context to a different greenlet. + Because the actual request object is the same this cannot be used to + move a request context to a different thread unless access to the + request object is locked. + + .. versionadded:: 0.10 + + .. versionchanged:: 1.1 + The current session object is used instead of reloading the original + data. This prevents `flask.session` pointing to an out-of-date object. + """ + return self.__class__( + self.app, + environ=self.request.environ, + request=self.request, + session=self.session, + ) + + def match_request(self) -> None: + """Can be overridden by a subclass to hook into the matching + of the request. + """ + try: + result = self.url_adapter.match(return_rule=True) # type: ignore + self.request.url_rule, self.request.view_args = result # type: ignore + except HTTPException as e: + self.request.routing_exception = e + + def push(self) -> None: + # Before we push the request context we have to ensure that there + # is an application context. + app_ctx = _cv_app.get(None) + + if app_ctx is None or app_ctx.app is not self.app: + app_ctx = self.app.app_context() + app_ctx.push() + else: + app_ctx = None + + self._cv_tokens.append((_cv_request.set(self), app_ctx)) + + # Open the session at the moment that the request context is available. + # This allows a custom open_session method to use the request context. + # Only open a new session if this is the first time the request was + # pushed, otherwise stream_with_context loses the session. + if self.session is None: + session_interface = self.app.session_interface + self.session = session_interface.open_session(self.app, self.request) + + if self.session is None: + self.session = session_interface.make_null_session(self.app) + + # Match the request URL after loading the session, so that the + # session is available in custom URL converters. + if self.url_adapter is not None: + self.match_request() + + def pop(self, exc: BaseException | None = _sentinel) -> None: # type: ignore + """Pops the request context and unbinds it by doing that. This will + also trigger the execution of functions registered by the + :meth:`~flask.Flask.teardown_request` decorator. + + .. versionchanged:: 0.9 + Added the `exc` argument. + """ + clear_request = len(self._cv_tokens) == 1 + + try: + if clear_request: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_request(exc) + + request_close = getattr(self.request, "close", None) + if request_close is not None: + request_close() + finally: + ctx = _cv_request.get() + token, app_ctx = self._cv_tokens.pop() + _cv_request.reset(token) + + # get rid of circular dependencies at the end of the request + # so that we don't require the GC to be active. + if clear_request: + ctx.request.environ["werkzeug.request"] = None + + if app_ctx is not None: + app_ctx.pop(exc) + + if ctx is not self: + raise AssertionError( + f"Popped wrong request context. ({ctx!r} instead of {self!r})" + ) + + def __enter__(self) -> RequestContext: + self.push() + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.pop(exc_value) + + def __repr__(self) -> str: + return ( + f"<{type(self).__name__} {self.request.url!r}" + f" [{self.request.method}] of {self.app.name}>" + ) diff --git a/env/lib/python3.11/site-packages/flask/debughelpers.py b/env/lib/python3.11/site-packages/flask/debughelpers.py new file mode 100644 index 0000000..6061441 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/debughelpers.py @@ -0,0 +1,160 @@ +from __future__ import annotations + +import typing as t + +from .app import Flask +from .blueprints import Blueprint +from .globals import request_ctx + + +class UnexpectedUnicodeError(AssertionError, UnicodeError): + """Raised in places where we want some better error reporting for + unexpected unicode or binary data. + """ + + +class DebugFilesKeyError(KeyError, AssertionError): + """Raised from request.files during debugging. The idea is that it can + provide a better error message than just a generic KeyError/BadRequest. + """ + + def __init__(self, request, key): + form_matches = request.form.getlist(key) + buf = [ + f"You tried to access the file {key!r} in the request.files" + " dictionary but it does not exist. The mimetype for the" + f" request is {request.mimetype!r} instead of" + " 'multipart/form-data' which means that no file contents" + " were transmitted. To fix this error you should provide" + ' enctype="multipart/form-data" in your form.' + ] + if form_matches: + names = ", ".join(repr(x) for x in form_matches) + buf.append( + "\n\nThe browser instead transmitted some file names. " + f"This was submitted: {names}" + ) + self.msg = "".join(buf) + + def __str__(self): + return self.msg + + +class FormDataRoutingRedirect(AssertionError): + """This exception is raised in debug mode if a routing redirect + would cause the browser to drop the method or body. This happens + when method is not GET, HEAD or OPTIONS and the status code is not + 307 or 308. + """ + + def __init__(self, request): + exc = request.routing_exception + buf = [ + f"A request was sent to '{request.url}', but routing issued" + f" a redirect to the canonical URL '{exc.new_url}'." + ] + + if f"{request.base_url}/" == exc.new_url.partition("?")[0]: + buf.append( + " The URL was defined with a trailing slash. Flask" + " will redirect to the URL with a trailing slash if it" + " was accessed without one." + ) + + buf.append( + " Send requests to the canonical URL, or use 307 or 308 for" + " routing redirects. Otherwise, browsers will drop form" + " data.\n\n" + "This exception is only raised in debug mode." + ) + super().__init__("".join(buf)) + + +def attach_enctype_error_multidict(request): + """Patch ``request.files.__getitem__`` to raise a descriptive error + about ``enctype=multipart/form-data``. + + :param request: The request to patch. + :meta private: + """ + oldcls = request.files.__class__ + + class newcls(oldcls): + def __getitem__(self, key): + try: + return super().__getitem__(key) + except KeyError as e: + if key not in request.form: + raise + + raise DebugFilesKeyError(request, key).with_traceback( + e.__traceback__ + ) from None + + newcls.__name__ = oldcls.__name__ + newcls.__module__ = oldcls.__module__ + request.files.__class__ = newcls + + +def _dump_loader_info(loader) -> t.Generator: + yield f"class: {type(loader).__module__}.{type(loader).__name__}" + for key, value in sorted(loader.__dict__.items()): + if key.startswith("_"): + continue + if isinstance(value, (tuple, list)): + if not all(isinstance(x, str) for x in value): + continue + yield f"{key}:" + for item in value: + yield f" - {item}" + continue + elif not isinstance(value, (str, int, float, bool)): + continue + yield f"{key}: {value!r}" + + +def explain_template_loading_attempts(app: Flask, template, attempts) -> None: + """This should help developers understand what failed""" + info = [f"Locating template {template!r}:"] + total_found = 0 + blueprint = None + if request_ctx and request_ctx.request.blueprint is not None: + blueprint = request_ctx.request.blueprint + + for idx, (loader, srcobj, triple) in enumerate(attempts): + if isinstance(srcobj, Flask): + src_info = f"application {srcobj.import_name!r}" + elif isinstance(srcobj, Blueprint): + src_info = f"blueprint {srcobj.name!r} ({srcobj.import_name})" + else: + src_info = repr(srcobj) + + info.append(f"{idx + 1:5}: trying loader of {src_info}") + + for line in _dump_loader_info(loader): + info.append(f" {line}") + + if triple is None: + detail = "no match" + else: + detail = f"found ({triple[1] or ''!r})" + total_found += 1 + info.append(f" -> {detail}") + + seems_fishy = False + if total_found == 0: + info.append("Error: the template could not be found.") + seems_fishy = True + elif total_found > 1: + info.append("Warning: multiple loaders returned a match for the template.") + seems_fishy = True + + if blueprint is not None and seems_fishy: + info.append( + " The template was looked up from an endpoint that belongs" + f" to the blueprint {blueprint!r}." + ) + info.append(" Maybe you did not place a template in the right folder?") + info.append(" See https://flask.palletsprojects.com/blueprints/#templates") + + app.logger.info("\n".join(info)) diff --git a/env/lib/python3.11/site-packages/flask/globals.py b/env/lib/python3.11/site-packages/flask/globals.py new file mode 100644 index 0000000..e9cd4ac --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/globals.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +import typing as t +from contextvars import ContextVar + +from werkzeug.local import LocalProxy + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .ctx import _AppCtxGlobals + from .ctx import AppContext + from .ctx import RequestContext + from .sessions import SessionMixin + from .wrappers import Request + + +class _FakeStack: + def __init__(self, name: str, cv: ContextVar[t.Any]) -> None: + self.name = name + self.cv = cv + + @property + def top(self) -> t.Any | None: + import warnings + + warnings.warn( + f"'_{self.name}_ctx_stack' is deprecated and will be removed in Flask 2.4." + f" Use 'g' to store data, or '{self.name}_ctx' to access the current" + " context.", + DeprecationWarning, + stacklevel=2, + ) + return self.cv.get(None) + + +_no_app_msg = """\ +Working outside of application context. + +This typically means that you attempted to use functionality that needed +the current application. To solve this, set up an application context +with app.app_context(). See the documentation for more information.\ +""" +_cv_app: ContextVar[AppContext] = ContextVar("flask.app_ctx") +__app_ctx_stack = _FakeStack("app", _cv_app) +app_ctx: AppContext = LocalProxy( # type: ignore[assignment] + _cv_app, unbound_message=_no_app_msg +) +current_app: Flask = LocalProxy( # type: ignore[assignment] + _cv_app, "app", unbound_message=_no_app_msg +) +g: _AppCtxGlobals = LocalProxy( # type: ignore[assignment] + _cv_app, "g", unbound_message=_no_app_msg +) + +_no_req_msg = """\ +Working outside of request context. + +This typically means that you attempted to use functionality that needed +an active HTTP request. Consult the documentation on testing for +information about how to avoid this problem.\ +""" +_cv_request: ContextVar[RequestContext] = ContextVar("flask.request_ctx") +__request_ctx_stack = _FakeStack("request", _cv_request) +request_ctx: RequestContext = LocalProxy( # type: ignore[assignment] + _cv_request, unbound_message=_no_req_msg +) +request: Request = LocalProxy( # type: ignore[assignment] + _cv_request, "request", unbound_message=_no_req_msg +) +session: SessionMixin = LocalProxy( # type: ignore[assignment] + _cv_request, "session", unbound_message=_no_req_msg +) + + +def __getattr__(name: str) -> t.Any: + if name == "_app_ctx_stack": + import warnings + + warnings.warn( + "'_app_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __app_ctx_stack + + if name == "_request_ctx_stack": + import warnings + + warnings.warn( + "'_request_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + raise AttributeError(name) diff --git a/env/lib/python3.11/site-packages/flask/helpers.py b/env/lib/python3.11/site-packages/flask/helpers.py new file mode 100644 index 0000000..61a0f81 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/helpers.py @@ -0,0 +1,693 @@ +from __future__ import annotations + +import os +import pkgutil +import socket +import sys +import typing as t +import warnings +from datetime import datetime +from functools import lru_cache +from functools import update_wrapper +from threading import RLock + +import werkzeug.utils +from werkzeug.exceptions import abort as _wz_abort +from werkzeug.utils import redirect as _wz_redirect + +from .globals import _cv_request +from .globals import current_app +from .globals import request +from .globals import request_ctx +from .globals import session +from .signals import message_flashed + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.wrappers import Response as BaseResponse + from .wrappers import Response + + +def get_debug_flag() -> bool: + """Get whether debug mode should be enabled for the app, indicated by the + :envvar:`FLASK_DEBUG` environment variable. The default is ``False``. + """ + val = os.environ.get("FLASK_DEBUG") + return bool(val and val.lower() not in {"0", "false", "no"}) + + +def get_load_dotenv(default: bool = True) -> bool: + """Get whether the user has disabled loading default dotenv files by + setting :envvar:`FLASK_SKIP_DOTENV`. The default is ``True``, load + the files. + + :param default: What to return if the env var isn't set. + """ + val = os.environ.get("FLASK_SKIP_DOTENV") + + if not val: + return default + + return val.lower() in ("0", "false", "no") + + +def stream_with_context( + generator_or_function: ( + t.Iterator[t.AnyStr] | t.Callable[..., t.Iterator[t.AnyStr]] + ) +) -> t.Iterator[t.AnyStr]: + """Request contexts disappear when the response is started on the server. + This is done for efficiency reasons and to make it less likely to encounter + memory leaks with badly written WSGI middlewares. The downside is that if + you are using streamed responses, the generator cannot access request bound + information any more. + + This function however can help you keep the context around for longer:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + @stream_with_context + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(generate()) + + Alternatively it can also be used around a specific generator:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(stream_with_context(generate())) + + .. versionadded:: 0.9 + """ + try: + gen = iter(generator_or_function) # type: ignore + except TypeError: + + def decorator(*args: t.Any, **kwargs: t.Any) -> t.Any: + gen = generator_or_function(*args, **kwargs) # type: ignore + return stream_with_context(gen) + + return update_wrapper(decorator, generator_or_function) # type: ignore + + def generator() -> t.Generator: + ctx = _cv_request.get(None) + if ctx is None: + raise RuntimeError( + "'stream_with_context' can only be used when a request" + " context is active, such as in a view function." + ) + with ctx: + # Dummy sentinel. Has to be inside the context block or we're + # not actually keeping the context around. + yield None + + # The try/finally is here so that if someone passes a WSGI level + # iterator in we're still running the cleanup logic. Generators + # don't need that because they are closed on their destruction + # automatically. + try: + yield from gen + finally: + if hasattr(gen, "close"): + gen.close() + + # The trick is to start the generator. Then the code execution runs until + # the first dummy None is yielded at which point the context was already + # pushed. This item is discarded. Then when the iteration continues the + # real generator is executed. + wrapped_g = generator() + next(wrapped_g) + return wrapped_g + + +def make_response(*args: t.Any) -> Response: + """Sometimes it is necessary to set additional headers in a view. Because + views do not have to return response objects but can return a value that + is converted into a response object by Flask itself, it becomes tricky to + add headers to it. This function can be called instead of using a return + and you will get a response object which you can use to attach headers. + + If view looked like this and you want to add a new header:: + + def index(): + return render_template('index.html', foo=42) + + You can now do something like this:: + + def index(): + response = make_response(render_template('index.html', foo=42)) + response.headers['X-Parachutes'] = 'parachutes are cool' + return response + + This function accepts the very same arguments you can return from a + view function. This for example creates a response with a 404 error + code:: + + response = make_response(render_template('not_found.html'), 404) + + The other use case of this function is to force the return value of a + view function into a response which is helpful with view + decorators:: + + response = make_response(view_function()) + response.headers['X-Parachutes'] = 'parachutes are cool' + + Internally this function does the following things: + + - if no arguments are passed, it creates a new response argument + - if one argument is passed, :meth:`flask.Flask.make_response` + is invoked with it. + - if more than one argument is passed, the arguments are passed + to the :meth:`flask.Flask.make_response` function as tuple. + + .. versionadded:: 0.6 + """ + if not args: + return current_app.response_class() + if len(args) == 1: + args = args[0] + return current_app.make_response(args) # type: ignore + + +def url_for( + endpoint: str, + *, + _anchor: str | None = None, + _method: str | None = None, + _scheme: str | None = None, + _external: bool | None = None, + **values: t.Any, +) -> str: + """Generate a URL to the given endpoint with the given values. + + This requires an active request or application context, and calls + :meth:`current_app.url_for() `. See that method + for full documentation. + + :param endpoint: The endpoint name associated with the URL to + generate. If this starts with a ``.``, the current blueprint + name (if any) will be used. + :param _anchor: If given, append this as ``#anchor`` to the URL. + :param _method: If given, generate the URL associated with this + method for the endpoint. + :param _scheme: If given, the URL will have this scheme if it is + external. + :param _external: If given, prefer the URL to be internal (False) or + require it to be external (True). External URLs include the + scheme and domain. When not in an active request, URLs are + external by default. + :param values: Values to use for the variable parts of the URL rule. + Unknown keys are appended as query string arguments, like + ``?a=b&c=d``. + + .. versionchanged:: 2.2 + Calls ``current_app.url_for``, allowing an app to override the + behavior. + + .. versionchanged:: 0.10 + The ``_scheme`` parameter was added. + + .. versionchanged:: 0.9 + The ``_anchor`` and ``_method`` parameters were added. + + .. versionchanged:: 0.9 + Calls ``app.handle_url_build_error`` on build errors. + """ + return current_app.url_for( + endpoint, + _anchor=_anchor, + _method=_method, + _scheme=_scheme, + _external=_external, + **values, + ) + + +def redirect( + location: str, code: int = 302, Response: type[BaseResponse] | None = None +) -> BaseResponse: + """Create a redirect response object. + + If :data:`~flask.current_app` is available, it will use its + :meth:`~flask.Flask.redirect` method, otherwise it will use + :func:`werkzeug.utils.redirect`. + + :param location: The URL to redirect to. + :param code: The status code for the redirect. + :param Response: The response class to use. Not used when + ``current_app`` is active, which uses ``app.response_class``. + + .. versionadded:: 2.2 + Calls ``current_app.redirect`` if available instead of always + using Werkzeug's default ``redirect``. + """ + if current_app: + return current_app.redirect(location, code=code) + + return _wz_redirect(location, code=code, Response=Response) + + +def abort(code: int | BaseResponse, *args: t.Any, **kwargs: t.Any) -> t.NoReturn: + """Raise an :exc:`~werkzeug.exceptions.HTTPException` for the given + status code. + + If :data:`~flask.current_app` is available, it will call its + :attr:`~flask.Flask.aborter` object, otherwise it will use + :func:`werkzeug.exceptions.abort`. + + :param code: The status code for the exception, which must be + registered in ``app.aborter``. + :param args: Passed to the exception. + :param kwargs: Passed to the exception. + + .. versionadded:: 2.2 + Calls ``current_app.aborter`` if available instead of always + using Werkzeug's default ``abort``. + """ + if current_app: + current_app.aborter(code, *args, **kwargs) + + _wz_abort(code, *args, **kwargs) + + +def get_template_attribute(template_name: str, attribute: str) -> t.Any: + """Loads a macro (or variable) a template exports. This can be used to + invoke a macro from within Python code. If you for example have a + template named :file:`_cider.html` with the following contents: + + .. sourcecode:: html+jinja + + {% macro hello(name) %}Hello {{ name }}!{% endmacro %} + + You can access this from Python code like this:: + + hello = get_template_attribute('_cider.html', 'hello') + return hello('World') + + .. versionadded:: 0.2 + + :param template_name: the name of the template + :param attribute: the name of the variable of macro to access + """ + return getattr(current_app.jinja_env.get_template(template_name).module, attribute) + + +def flash(message: str, category: str = "message") -> None: + """Flashes a message to the next request. In order to remove the + flashed message from the session and to display it to the user, + the template has to call :func:`get_flashed_messages`. + + .. versionchanged:: 0.3 + `category` parameter added. + + :param message: the message to be flashed. + :param category: the category for the message. The following values + are recommended: ``'message'`` for any kind of message, + ``'error'`` for errors, ``'info'`` for information + messages and ``'warning'`` for warnings. However any + kind of string can be used as category. + """ + # Original implementation: + # + # session.setdefault('_flashes', []).append((category, message)) + # + # This assumed that changes made to mutable structures in the session are + # always in sync with the session object, which is not true for session + # implementations that use external storage for keeping their keys/values. + flashes = session.get("_flashes", []) + flashes.append((category, message)) + session["_flashes"] = flashes + app = current_app._get_current_object() # type: ignore + message_flashed.send( + app, + _async_wrapper=app.ensure_sync, + message=message, + category=category, + ) + + +def get_flashed_messages( + with_categories: bool = False, category_filter: t.Iterable[str] = () +) -> list[str] | list[tuple[str, str]]: + """Pulls all flashed messages from the session and returns them. + Further calls in the same request to the function will return + the same messages. By default just the messages are returned, + but when `with_categories` is set to ``True``, the return value will + be a list of tuples in the form ``(category, message)`` instead. + + Filter the flashed messages to one or more categories by providing those + categories in `category_filter`. This allows rendering categories in + separate html blocks. The `with_categories` and `category_filter` + arguments are distinct: + + * `with_categories` controls whether categories are returned with message + text (``True`` gives a tuple, where ``False`` gives just the message text). + * `category_filter` filters the messages down to only those matching the + provided categories. + + See :doc:`/patterns/flashing` for examples. + + .. versionchanged:: 0.3 + `with_categories` parameter added. + + .. versionchanged:: 0.9 + `category_filter` parameter added. + + :param with_categories: set to ``True`` to also receive categories. + :param category_filter: filter of categories to limit return values. Only + categories in the list will be returned. + """ + flashes = request_ctx.flashes + if flashes is None: + flashes = session.pop("_flashes") if "_flashes" in session else [] + request_ctx.flashes = flashes + if category_filter: + flashes = list(filter(lambda f: f[0] in category_filter, flashes)) + if not with_categories: + return [x[1] for x in flashes] + return flashes + + +def _prepare_send_file_kwargs(**kwargs: t.Any) -> dict[str, t.Any]: + if kwargs.get("max_age") is None: + kwargs["max_age"] = current_app.get_send_file_max_age + + kwargs.update( + environ=request.environ, + use_x_sendfile=current_app.config["USE_X_SENDFILE"], + response_class=current_app.response_class, + _root_path=current_app.root_path, # type: ignore + ) + return kwargs + + +def send_file( + path_or_file: os.PathLike | str | t.BinaryIO, + mimetype: str | None = None, + as_attachment: bool = False, + download_name: str | None = None, + conditional: bool = True, + etag: bool | str = True, + last_modified: datetime | int | float | None = None, + max_age: None | (int | t.Callable[[str | None], int | None]) = None, +) -> Response: + """Send the contents of a file to the client. + + The first argument can be a file path or a file-like object. Paths + are preferred in most cases because Werkzeug can manage the file and + get extra information from the path. Passing a file-like object + requires that the file is opened in binary mode, and is mostly + useful when building a file in memory with :class:`io.BytesIO`. + + Never pass file paths provided by a user. The path is assumed to be + trusted, so a user could craft a path to access a file you didn't + intend. Use :func:`send_from_directory` to safely serve + user-requested paths from within a directory. + + If the WSGI server sets a ``file_wrapper`` in ``environ``, it is + used, otherwise Werkzeug's built-in wrapper is used. Alternatively, + if the HTTP server supports ``X-Sendfile``, configuring Flask with + ``USE_X_SENDFILE = True`` will tell the server to send the given + path, which is much more efficient than reading it in Python. + + :param path_or_file: The path to the file to send, relative to the + current working directory if a relative path is given. + Alternatively, a file-like object opened in binary mode. Make + sure the file pointer is seeked to the start of the data. + :param mimetype: The MIME type to send for the file. If not + provided, it will try to detect it from the file name. + :param as_attachment: Indicate to a browser that it should offer to + save the file instead of displaying it. + :param download_name: The default name browsers will use when saving + the file. Defaults to the passed file name. + :param conditional: Enable conditional and range responses based on + request headers. Requires passing a file path and ``environ``. + :param etag: Calculate an ETag for the file, which requires passing + a file path. Can also be a string to use instead. + :param last_modified: The last modified time to send for the file, + in seconds. If not provided, it will try to detect it from the + file path. + :param max_age: How long the client should cache the file, in + seconds. If set, ``Cache-Control`` will be ``public``, otherwise + it will be ``no-cache`` to prefer conditional caching. + + .. versionchanged:: 2.0 + ``download_name`` replaces the ``attachment_filename`` + parameter. If ``as_attachment=False``, it is passed with + ``Content-Disposition: inline`` instead. + + .. versionchanged:: 2.0 + ``max_age`` replaces the ``cache_timeout`` parameter. + ``conditional`` is enabled and ``max_age`` is not set by + default. + + .. versionchanged:: 2.0 + ``etag`` replaces the ``add_etags`` parameter. It can be a + string to use instead of generating one. + + .. versionchanged:: 2.0 + Passing a file-like object that inherits from + :class:`~io.TextIOBase` will raise a :exc:`ValueError` rather + than sending an empty file. + + .. versionadded:: 2.0 + Moved the implementation to Werkzeug. This is now a wrapper to + pass some Flask-specific arguments. + + .. versionchanged:: 1.1 + ``filename`` may be a :class:`~os.PathLike` object. + + .. versionchanged:: 1.1 + Passing a :class:`~io.BytesIO` object supports range requests. + + .. versionchanged:: 1.0.3 + Filenames are encoded with ASCII instead of Latin-1 for broader + compatibility with WSGI servers. + + .. versionchanged:: 1.0 + UTF-8 filenames as specified in :rfc:`2231` are supported. + + .. versionchanged:: 0.12 + The filename is no longer automatically inferred from file + objects. If you want to use automatic MIME and etag support, + pass a filename via ``filename_or_fp`` or + ``attachment_filename``. + + .. versionchanged:: 0.12 + ``attachment_filename`` is preferred over ``filename`` for MIME + detection. + + .. versionchanged:: 0.9 + ``cache_timeout`` defaults to + :meth:`Flask.get_send_file_max_age`. + + .. versionchanged:: 0.7 + MIME guessing and etag support for file-like objects was + deprecated because it was unreliable. Pass a filename if you are + able to, otherwise attach an etag yourself. + + .. versionchanged:: 0.5 + The ``add_etags``, ``cache_timeout`` and ``conditional`` + parameters were added. The default behavior is to add etags. + + .. versionadded:: 0.2 + """ + return werkzeug.utils.send_file( # type: ignore[return-value] + **_prepare_send_file_kwargs( + path_or_file=path_or_file, + environ=request.environ, + mimetype=mimetype, + as_attachment=as_attachment, + download_name=download_name, + conditional=conditional, + etag=etag, + last_modified=last_modified, + max_age=max_age, + ) + ) + + +def send_from_directory( + directory: os.PathLike | str, + path: os.PathLike | str, + **kwargs: t.Any, +) -> Response: + """Send a file from within a directory using :func:`send_file`. + + .. code-block:: python + + @app.route("/uploads/") + def download_file(name): + return send_from_directory( + app.config['UPLOAD_FOLDER'], name, as_attachment=True + ) + + This is a secure way to serve files from a folder, such as static + files or uploads. Uses :func:`~werkzeug.security.safe_join` to + ensure the path coming from the client is not maliciously crafted to + point outside the specified directory. + + If the final path does not point to an existing regular file, + raises a 404 :exc:`~werkzeug.exceptions.NotFound` error. + + :param directory: The directory that ``path`` must be located under, + relative to the current application's root path. + :param path: The path to the file to send, relative to + ``directory``. + :param kwargs: Arguments to pass to :func:`send_file`. + + .. versionchanged:: 2.0 + ``path`` replaces the ``filename`` parameter. + + .. versionadded:: 2.0 + Moved the implementation to Werkzeug. This is now a wrapper to + pass some Flask-specific arguments. + + .. versionadded:: 0.5 + """ + return werkzeug.utils.send_from_directory( # type: ignore[return-value] + directory, path, **_prepare_send_file_kwargs(**kwargs) + ) + + +def get_root_path(import_name: str) -> str: + """Find the root path of a package, or the path that contains a + module. If it cannot be found, returns the current working + directory. + + Not to be confused with the value returned by :func:`find_package`. + + :meta private: + """ + # Module already imported and has a file attribute. Use that first. + mod = sys.modules.get(import_name) + + if mod is not None and hasattr(mod, "__file__") and mod.__file__ is not None: + return os.path.dirname(os.path.abspath(mod.__file__)) + + # Next attempt: check the loader. + loader = pkgutil.get_loader(import_name) + + # Loader does not exist or we're referring to an unloaded main + # module or a main module without path (interactive sessions), go + # with the current working directory. + if loader is None or import_name == "__main__": + return os.getcwd() + + if hasattr(loader, "get_filename"): + filepath = loader.get_filename(import_name) + else: + # Fall back to imports. + __import__(import_name) + mod = sys.modules[import_name] + filepath = getattr(mod, "__file__", None) + + # If we don't have a file path it might be because it is a + # namespace package. In this case pick the root path from the + # first module that is contained in the package. + if filepath is None: + raise RuntimeError( + "No root path can be found for the provided module" + f" {import_name!r}. This can happen because the module" + " came from an import hook that does not provide file" + " name information or because it's a namespace package." + " In this case the root path needs to be explicitly" + " provided." + ) + + # filepath is import_name.py for a module, or __init__.py for a package. + return os.path.dirname(os.path.abspath(filepath)) + + +class locked_cached_property(werkzeug.utils.cached_property): + """A :func:`property` that is only evaluated once. Like + :class:`werkzeug.utils.cached_property` except access uses a lock + for thread safety. + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. Use a lock inside the decorated function if + locking is needed. + + .. versionchanged:: 2.0 + Inherits from Werkzeug's ``cached_property`` (and ``property``). + """ + + def __init__( + self, + fget: t.Callable[[t.Any], t.Any], + name: str | None = None, + doc: str | None = None, + ) -> None: + import warnings + + warnings.warn( + "'locked_cached_property' is deprecated and will be removed in Flask 2.4." + " Use a lock inside the decorated function if locking is needed.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(fget, name=name, doc=doc) + self.lock = RLock() + + def __get__(self, obj: object, type: type = None) -> t.Any: # type: ignore + if obj is None: + return self + + with self.lock: + return super().__get__(obj, type=type) + + def __set__(self, obj: object, value: t.Any) -> None: + with self.lock: + super().__set__(obj, value) + + def __delete__(self, obj: object) -> None: + with self.lock: + super().__delete__(obj) + + +def is_ip(value: str) -> bool: + """Determine if the given string is an IP address. + + :param value: value to check + :type value: str + + :return: True if string is an IP address + :rtype: bool + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. + """ + warnings.warn( + "The 'is_ip' function is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + + for family in (socket.AF_INET, socket.AF_INET6): + try: + socket.inet_pton(family, value) + except OSError: + pass + else: + return True + + return False + + +@lru_cache(maxsize=None) +def _split_blueprint_path(name: str) -> list[str]: + out: list[str] = [name] + + if "." in name: + out.extend(_split_blueprint_path(name.rpartition(".")[0])) + + return out diff --git a/env/lib/python3.11/site-packages/flask/json/__init__.py b/env/lib/python3.11/site-packages/flask/json/__init__.py new file mode 100644 index 0000000..f15296f --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/json/__init__.py @@ -0,0 +1,170 @@ +from __future__ import annotations + +import json as _json +import typing as t + +from ..globals import current_app +from .provider import _default + +if t.TYPE_CHECKING: # pragma: no cover + from ..wrappers import Response + + +def dumps(obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.dumps() ` + method, otherwise it will use :func:`json.dumps`. + + :param obj: The data to serialize. + :param kwargs: Arguments passed to the ``dumps`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.dumps``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0.2 + :class:`decimal.Decimal` is supported by converting to a string. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. + + .. versionchanged:: 1.0.3 + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + if current_app: + return current_app.json.dumps(obj, **kwargs) + + kwargs.setdefault("default", _default) + return _json.dumps(obj, **kwargs) + + +def dump(obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None: + """Serialize data as JSON and write to a file. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.dump() ` + method, otherwise it will use :func:`json.dump`. + + :param obj: The data to serialize. + :param fp: A file opened for writing text. Should use the UTF-8 + encoding to be valid JSON. + :param kwargs: Arguments passed to the ``dump`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.dump``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0 + Writing to a binary file, and the ``encoding`` argument, will be + removed in Flask 2.1. + """ + if current_app: + current_app.json.dump(obj, fp, **kwargs) + else: + kwargs.setdefault("default", _default) + _json.dump(obj, fp, **kwargs) + + +def loads(s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.loads() ` + method, otherwise it will use :func:`json.loads`. + + :param s: Text or UTF-8 bytes. + :param kwargs: Arguments passed to the ``loads`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.loads``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. The data must be a + string or UTF-8 bytes. + + .. versionchanged:: 1.0.3 + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + if current_app: + return current_app.json.loads(s, **kwargs) + + return _json.loads(s, **kwargs) + + +def load(fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON read from a file. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.load() ` + method, otherwise it will use :func:`json.load`. + + :param fp: A file opened for reading text or UTF-8 bytes. + :param kwargs: Arguments passed to the ``load`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.load``, allowing an app to override + the behavior. + + .. versionchanged:: 2.2 + The ``app`` parameter will be removed in Flask 2.3. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. The file must be text + mode, or binary mode with UTF-8 bytes. + """ + if current_app: + return current_app.json.load(fp, **kwargs) + + return _json.load(fp, **kwargs) + + +def jsonify(*args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with the ``application/json`` + mimetype. A dict or list returned from a view will be converted to a + JSON response automatically without needing to call this. + + This requires an active request or application context, and calls + :meth:`app.json.response() `. + + In debug mode, the output is formatted with indentation to make it + easier to read. This may also be controlled by the provider. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + + .. versionchanged:: 2.2 + Calls ``current_app.json.response``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0.2 + :class:`decimal.Decimal` is supported by converting to a string. + + .. versionchanged:: 0.11 + Added support for serializing top-level arrays. This was a + security risk in ancient browsers. See :ref:`security-json`. + + .. versionadded:: 0.2 + """ + return current_app.json.response(*args, **kwargs) diff --git a/env/lib/python3.11/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..192d55fd5bbdd3db350df92f9b2b1ca0f91a8621 GIT binary patch literal 6888 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/flask/json/__pycache__/tag.cpython-311.pyc b/env/lib/python3.11/site-packages/flask/json/__pycache__/tag.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c9a77a3c721c61cb35aff2e2fb08d646a4c57df GIT binary patch literal 15611 zcmdU0TWlQHd7jw|xx2jV@*gwW_qVD5Kh@c|zR& zfhY*K1VtDZ6j2G}#X?{_AW}M*4~~cM4&}pzrtv107e=~yyqTq&@{vMhJi^k=`Dh_F z9%Jc9zNOGQ-pbO^d|RP?yq%?ENXN(HNVh1h`9z^(yo06NknSAs6or8BSwU%kO;F-* z2L$0A{PSnLiR_{w&%vVN59_LcRqvOOr<>nnSLl}RYuS2y#1B{(J|_selCSM0nzHKi)j z=f++hja{ofvDgbzRx8ZPSyR&0SzR^MqA8m>ttd@ux|G)pBd;2UWT<*h&gaU!NSl<3 zTJe}+%0)%itzOOfS=C5M!`ZxS7{i%slX%ah475gXMrusWmUQ*Brp@HkF`jw0XsY_8 zoK-VY3H2m%I%mX8%^6HZj*4%r2T74l`KUBeGNqg;736toLZxPtrM#3YN*b!_(rg~R z0g1C_EGrkOhI++Riwb5={g!5DHQlu8a(rX4R7#RdrpD18mN=n^PGi=bRXrx*87`=W z2~{_SeNCt`n$_1jr<#LAIaLBG>J_;#o2MDcrX(v03M_0u=a@sZtd`HKS)#v@dRbRg zT~$VMSu>N8=w(QXRva{?Y56kiRHGU+d&1zTWN1XaX)FpGC}&7>sx+6&=Ov|7m}SJw znQFn1WPGH2&HyPUrA+4Hj5>c*x-92Q>ZMF3HY?|J&~U6Y!D!;Fs5Q+DrlUwxIiP@r zpcN{ra}v5hPlJ-C3}!MQb}XlWlX8>utOn6KC7pMzrp-{aXu5_)BL+~|949fn$!3!) zqFQYXQ=XDQJsNUS*NO~#`ohUz0rC{7h=v`i+&mNTm< z>amHumYo?MmS*S8X{{Jz>xqF15@+RC4Xv0W9C8K5M)tC^dYn|?0@v_|ts2Q;R)v@- zoi_5CX{6KAv(n+g8W9GMCY?G&%4a1;N{$0HRMbf+JFRAC4jXEI(poK7$5cmG&5~Y} za-al>W>!7S*7T_4!YS$P($vy4tw(oy@!|}Y1Vcljxhha~BF5p%$xBRCp!hPeA~;NE zT*e1aUh)md$@}ObU07Rv@vh|ASzE27bG8a`qou1;;B8eu>|KtdKu=MxJo{ua_5m4y zq*!f{i$#s=J7e^YSdC76`h=nqGoX;Zs732b1nNgMa|IQ(LKiNa9l^Wl3$i{_nx%Hr zra7CYD)<5c(hZe;`+)3FQmlqa01ZmyHCZvT-2QNAnImy~6yI+NsxU6Xpaw3$jE)DD z0L*A`JgkJ&CMA3dHIz;z_F8DXS?Pkg3ynvVZY7R)6z>GyF}yqQZehxQN444F!Scw9 zvY|?xO-Z$bp>oAsaY`cDl(3QpTSi+GfpoAJ)OgHU?@WqjS6lzla?CJwX+av*ifT0o zzSVaE!)kY<#?>ayp4AZ5&N>Df4JZvNh}+#r+!7YV1tEV)fdJCvd zL2J+)Ncc$+6>BC#PmSt3&@vgQhKOAmMh1-_N%y}pG_4iXAqdBnp}D!ap;>K4)#aj` zpEq+^BaN9|&OsFosm04f`P{@1=hWk=r=A)zz|+TICTHX+RA35Wh$LqS=%i-ntC2K# zF=wXJ<%C7?l$|qz!HqV6Md4oG!KKi0d zRXL;Untmss_oH`R0BW~!&$W>1ZM{X?o10az4%)xNJ1*{AQtm){8e$>CSHXFBzq0BX@4QB3EX9}QaSE$Fvd+eT9b?mrpE0ZW(^w)tDgtY=qddm z5Yq<;U(N}9R?U|7E6445SsCY0bDP}XMd81ig!ul)n%jhXZZtr>gEaweqG=KrXEj}C zvvv$6=Hkqa*>E`z2~e2ZqpJn&vZ_32UQtYgvu?S=H8Y;|M?{Jv1bnL%LN1fTVI&}j z!mD`mXF*saR`fj!;@il7$0^H^w2I|1_uM%@(t6gf9`huyP>ck$cu*&$ER2}yOkLKs z65NfPnMwxq9*nOi3Ha7Bi00)MXSVXxAETN<%)2OTH3=O%ZbnuQ{_yBuA6+Z0_Z{2l zJ64IODv=Z;LNdg(gx*U%?;_9#a3{p%K;P%&?r)e&<;hl307bc=rqk6}I$h9|Ql8SS z>Gao2a^5OwPNx+ui|nZ52e3I+XkDf@jFP~TQ45I(dectIo(-cNaM5DC&(FNk@+ zvQp#?QN4zMk(r^I1(wc3!iY!Q{(Zoj>GK%ARwV*+)}*v4QM{Y+Ci53jTEJ-S)#mf^ z6nVzwJ4i5_@YFH#J}g&qZd!xU(~9|d=Aag26Pk!bChu})#GKPpDe*-+&ec7yQE-4#oZ;CTCS}0&tS6U zAbM}aUmo>I`)nqVKVtMT9WfJNBu$HYC=$FoKW*5wcIZ@AFQSS#!&+*CW;2!Z$Bf!3 ze+#dOLoGPHzuIKCx-5{H9{qq&Og2|zH7B$hB05%sd9_##6|o*TdSIjV0Qj|S_?L;Ul`}VDH)E^v8}Y3ma(#C0Az9&XwB8$?uW>{5Fl;CA8$WQj|N7ofpi+$>3LMq|9}AbS6mSUYo?m% z5QD~`O#taUrZviOn}C*CE1<+6-M%RNvc2=o6RY7H&)j@wy?yUS``)GCX4lS@82zn| zeE;S5`-k4^AG#a9oBdgAz5khw{%0!jQm4<;J-iq z_+wat8bwBEQl7b!vMhJF=FSb@*Qp|vHJ&{<==91LS5CuD99j#0|41c%s1iBE<~ynn zp_%?9z@4c66s1XF>BkA2An+*y%sSQSY?5`Z{MfRbq^|_NihqMxdeQmY3WUOuErCF* z(9yMcb~6@VJiQePhhtlU7qkb$&yt>Y1L*Dn%4-NX3N&yQ|ITAEsJK0VtUCQ0Rhpn@ zLrP3(#yhNrp@Sok@s?`j6&&!8(q)?LkxDFtzOg>yHqqY8AP-YwW5OMA6e~@89{pJY zgrwVl<65HK#)hkjc~si&1i&iCcdZ`!N%wkuU?Vrf!vZXDJtS? zkp*!LIsWHuWWD2Lj|krHOao?JdP8VJ-7cE@IV9c`ZwWbgRhOi%g78;G=nCcSY!&}e(V%!VLIx2u6)oT znWY#~r*QHi=Z)u5wOZdqbA$N)*NZ|WKEgkDl-u&%jumm`#Leg5?;3coYhdl`>s`r> zuB20iQJHqS>=2-~Xc@O=O4MVpK%*VzqrqKEoDrQ4@2Wqa`TLo_EBvg0to8WF29Sx2 zuwmSS*<3G}OeSmMNZu1?Sn_+hmOM)-0+;b`85dh1Hxr$3oI+xFa7*xlreOGtNUlyD zj0r8Bi>K+2iyL*^SlkGgI&q_YehU{h#ddjGEte+-#%ilZpwZ5kuwmm4L_osU8~xPz zryl=-Sm3clPyakxTEbTin{3nvh@XuW7r!O6^N8P$_4wdMe6SK3^ot*!9#cW4YUG8kji?gstcRRPxHr#2p7ziDR9BGjvAuj&Df7+;9`SJ0>?+P2d{3clRw zMvPnD?;_u52Oyo?y>j9D!tz2T@`O)>BMn9P6PVR65jq53qmjnhNFF)fjJ1;~6~l)~ znBAaBBrEC#$m^%PhJddO4VJ~f^ZXX3^c0dokm1Sm42_Y`dZz4}8 z+x7oPc=by_*K!ECyy|J188dopW)Bh6zoMyT2rwh@8A?4s{>Xy4yQA&5F569AmPx-r znXIdtl6 zsBbG7&ZbZ@3@gs2Kf;`K5_>KV!-@B{q+#%lOUQn_vb zH7rqHL%;=;25ZdhkA0#P#cJ_;o$@c7s}CIY;BcC5OV|+-yEehWk9}Ekt-vmV40%#b z@wOT1g;&nv$eo=8;kuSu$WjL9M$={?kJBUEOscqLWcSi^hJ>5}GHiMuL8FBkLB)lBvJp@5)hv1E-sP`3c z8bpVpe7?AjiC~A3mnZUSwRuX#otvrq`H~4Y9b0fJa_RmVaZ^74F=fwN&1>Pc^4$~b zy-#oSKD{14xe-5EiJbHc3voW1$_NtPsbG8O-ld_OKX2ppj{QZbpO9rlt3g;#opua< z{F%Jd(SwD*CGbB-WrNO?X$GAupStzj8_%tG9oXnPupU3S5kFXo9Q5N4+InJTI0C~G9uOZ-)PeW(%?>vqJ_E=_)&XMU>*OrvhBPAt-kr{gt zdF$Eh!Dq9!4{aT6MA6vKMobLo_>)lLLh#R2@f-niB0Rf1Vr7O2DQ>zxt?hs8(Zp(S zTD{^Qi191Q8ym>t)_*}a2C))tB)XU9E0JFRppU_w5p?NCfpI5^jEw^4&0i1_HgDo^ z_xd-Mzfpl$eJuYp;rAkElL|pr) zG#r6{qi!C?wZBK)=mw2ECFJd+dJO^RS{f{if9D|y#UpNK0R0D4YFKSjo7IRKRby(4 z+By{(Z&P}dFwTeDqe4_rdX-%WN(qn0l|H2txe4V7r3>#4rC-^Bcc-#j*@<_T(hN6x z54&)c7ofi!M~h-Q;Qp|1Ko;sD8S@C`DUics#VO)0&xusD;sYpjP&S#DBqOv7Aw4W2 zjztI{l8v@%xVb~r8+lqRWT>DjISMDSZ|4wDf|xZNmpXn_&NLLch)5HyM8S)8%oD|n zQML2vX%fMD+8nudxYg2uE=52}gn<>?rz!{*q}oTEZs`;@Qf{$z zgW0^{xf!6%Re3jr)EC3#MCJS%RScRqtlZ%vh{}m>9vr|ccCV{vqw63k^)IX*Sa034(YmL?K3hS%0u!c}MypXEmu3N0_uGgSE?UtDm#Sd|D`i!EKj9i? zL1_15U_&c%Doez*pD+?2mbkrz#4UtIQ8bj-6TKQ*2-Qsd)$l_2PYy2xjQ)i%NbfAe zWkK(9Ujr+Fg)nX=gKq`By?sku2)WxWuqd;I;9@^=on>2d<7ne5EQGv$QKz(U#dy0C5a?o!w9*Pp(N}D7-peB zJlGAI!{(Qi^d*XhoggJZ5t1h90P9Mh1s_vi_EQ_ks-0D9(MHyQY+Z*X1moy)6!l0U zOX?LIpRpYx0t=+GlhPz^R#fS*#llI%4KSIt#~D_yWQQ}KSLay>R)&QU$T=u1-)M|; zhItetDZ~chu?WB<9Y-W%;+&E$@DOQ=M(_+v)hKY6sx zQ1BjNgl**M?V6cAHgz~V>jYj?Hoj1=l;oIk%}5;#>oi}k(=c3`@OP!B6%| zk~&9+nG9P2?4}VpPF>j#nE=ERxmIkn96pc!2FtyJjXO*woA?zj(}ocn8?Jzw_;jjG zoaU%Xibwx*0^cLBLV&g&{4$=7g*Yz!rs+HQ{s4t!Pw8V+F@6YufTaN;-n*1r4PDok zHQda%cPvjW1@E=A<9ax{Z?mfximB}-adm8M+aR;dh7m;*8LUxbI(<#u8pm? zCO2A>75l?|2MLI>tEc-3GHDmFCq~c=MKNCTY)(jTFnvaDnKz~k#vw)V5{>ub^~OQ( zK~2l8Mpv$S_#k-d0SG$(4y&oTZFFtrX zd^`JYY(0K_BYwORInL#*jBy&T@#j!dx5l3^NK+Bt4S3Bj=o~B`$CR0V<^h|eU)k?Q z=vN*jGWPF;SS%~#9X1X@nfJw`_r+mc_#-f!tgxx+2K=%PV8`|008$?3jEWvWUlt~R zg6K;dIM5f@h39X5`He5HsyEU%(|7wGewP_SBc^Of6zgaMH>&0wy({|WA1J?Y4zc;{ zXGZk%k^*Mznkh3kt|M5oKM1JiT7*X_8!1qsg{RZg_@NWXKzn1I-75LWKt&HA1N)J{ z(?o_IRN`c~a69yFtP(%&#tK4 z^5J!|o1Bdp5gAu8n${ghvd~=uRs0*YgI;w0wgRmbSVf>;=-7{_j+hWlY)0Ilj?GAX zGt#xy5$$eTJh!zo9EO~FLATJ;zu7NsMfZk}YzYm(i(*rF$Cls)iCFl=mf!`w-pDN$ z$c6AN)O!Hns(_}K+|2^cD8_iQM1j(X6(&7iZNiQN0$CN!YSRQfxKE$Z$r`ZxDV@%A zsv+7L>QPF@YWEd-3uUy;srpP=Els89hb%h%SV51oM)Vs8F3gPV-Bj{Pmys=sccJb_ zPVw02=k(j?3M?)d--cC(T@%HvKvE2CA$~lxbzT(20~KMv`*Tm|tk|DTp}*q&G|Jgs z5j>wwVMoRLx#z8b`kMmA^?WvkgB9=Rp3qzIem1>dQM%Q%M?@^NAACr8AJqz86njKC z0)DVG^&#bcR4Y2sB6e;Gey}w6A?1ElE9!3%5xw9CykuLtTIHA#j` to an instance of the class. + + :param app: An application instance. This will be stored as a + :class:`weakref.proxy` on the :attr:`_app` attribute. + + .. versionadded:: 2.2 + """ + + def __init__(self, app: Flask) -> None: + self._app = weakref.proxy(app) + + def dumps(self, obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON. + + :param obj: The data to serialize. + :param kwargs: May be passed to the underlying JSON library. + """ + raise NotImplementedError + + def dump(self, obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None: + """Serialize data as JSON and write to a file. + + :param obj: The data to serialize. + :param fp: A file opened for writing text. Should use the UTF-8 + encoding to be valid JSON. + :param kwargs: May be passed to the underlying JSON library. + """ + fp.write(self.dumps(obj, **kwargs)) + + def loads(self, s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON. + + :param s: Text or UTF-8 bytes. + :param kwargs: May be passed to the underlying JSON library. + """ + raise NotImplementedError + + def load(self, fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON read from a file. + + :param fp: A file opened for reading text or UTF-8 bytes. + :param kwargs: May be passed to the underlying JSON library. + """ + return self.loads(fp.read(), **kwargs) + + def _prepare_response_obj( + self, args: tuple[t.Any, ...], kwargs: dict[str, t.Any] + ) -> t.Any: + if args and kwargs: + raise TypeError("app.json.response() takes either args or kwargs, not both") + + if not args and not kwargs: + return None + + if len(args) == 1: + return args[0] + + return args or kwargs + + def response(self, *args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with the ``application/json`` + mimetype. + + The :func:`~flask.json.jsonify` function calls this method for + the current application. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + """ + obj = self._prepare_response_obj(args, kwargs) + return self._app.response_class(self.dumps(obj), mimetype="application/json") + + +def _default(o: t.Any) -> t.Any: + if isinstance(o, date): + return http_date(o) + + if isinstance(o, (decimal.Decimal, uuid.UUID)): + return str(o) + + if dataclasses and dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + + if hasattr(o, "__html__"): + return str(o.__html__()) + + raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable") + + +class DefaultJSONProvider(JSONProvider): + """Provide JSON operations using Python's built-in :mod:`json` + library. Serializes the following additional data types: + + - :class:`datetime.datetime` and :class:`datetime.date` are + serialized to :rfc:`822` strings. This is the same as the HTTP + date format. + - :class:`uuid.UUID` is serialized to a string. + - :class:`dataclasses.dataclass` is passed to + :func:`dataclasses.asdict`. + - :class:`~markupsafe.Markup` (or any object with a ``__html__`` + method) will call the ``__html__`` method to get a string. + """ + + default: t.Callable[[t.Any], t.Any] = staticmethod( + _default + ) # type: ignore[assignment] + """Apply this function to any object that :meth:`json.dumps` does + not know how to serialize. It should return a valid JSON type or + raise a ``TypeError``. + """ + + ensure_ascii = True + """Replace non-ASCII characters with escape sequences. This may be + more compatible with some clients, but can be disabled for better + performance and size. + """ + + sort_keys = True + """Sort the keys in any serialized dicts. This may be useful for + some caching situations, but can be disabled for better performance. + When enabled, keys must all be strings, they are not converted + before sorting. + """ + + compact: bool | None = None + """If ``True``, or ``None`` out of debug mode, the :meth:`response` + output will not add indentation, newlines, or spaces. If ``False``, + or ``None`` in debug mode, it will use a non-compact representation. + """ + + mimetype = "application/json" + """The mimetype set in :meth:`response`.""" + + def dumps(self, obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON to a string. + + Keyword arguments are passed to :func:`json.dumps`. Sets some + parameter defaults from the :attr:`default`, + :attr:`ensure_ascii`, and :attr:`sort_keys` attributes. + + :param obj: The data to serialize. + :param kwargs: Passed to :func:`json.dumps`. + """ + kwargs.setdefault("default", self.default) + kwargs.setdefault("ensure_ascii", self.ensure_ascii) + kwargs.setdefault("sort_keys", self.sort_keys) + return json.dumps(obj, **kwargs) + + def loads(self, s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON from a string or bytes. + + :param s: Text or UTF-8 bytes. + :param kwargs: Passed to :func:`json.loads`. + """ + return json.loads(s, **kwargs) + + def response(self, *args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with it. The response mimetype + will be "application/json" and can be changed with + :attr:`mimetype`. + + If :attr:`compact` is ``False`` or debug mode is enabled, the + output will be formatted to be easier to read. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + """ + obj = self._prepare_response_obj(args, kwargs) + dump_args: dict[str, t.Any] = {} + + if (self.compact is None and self._app.debug) or self.compact is False: + dump_args.setdefault("indent", 2) + else: + dump_args.setdefault("separators", (",", ":")) + + return self._app.response_class( + f"{self.dumps(obj, **dump_args)}\n", mimetype=self.mimetype + ) diff --git a/env/lib/python3.11/site-packages/flask/json/tag.py b/env/lib/python3.11/site-packages/flask/json/tag.py new file mode 100644 index 0000000..91cc441 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/json/tag.py @@ -0,0 +1,314 @@ +""" +Tagged JSON +~~~~~~~~~~~ + +A compact representation for lossless serialization of non-standard JSON +types. :class:`~flask.sessions.SecureCookieSessionInterface` uses this +to serialize the session data, but it may be useful in other places. It +can be extended to support other types. + +.. autoclass:: TaggedJSONSerializer + :members: + +.. autoclass:: JSONTag + :members: + +Let's see an example that adds support for +:class:`~collections.OrderedDict`. Dicts don't have an order in JSON, so +to handle this we will dump the items as a list of ``[key, value]`` +pairs. Subclass :class:`JSONTag` and give it the new key ``' od'`` to +identify the type. The session serializer processes dicts first, so +insert the new tag at the front of the order since ``OrderedDict`` must +be processed before ``dict``. + +.. code-block:: python + + from flask.json.tag import JSONTag + + class TagOrderedDict(JSONTag): + __slots__ = ('serializer',) + key = ' od' + + def check(self, value): + return isinstance(value, OrderedDict) + + def to_json(self, value): + return [[k, self.serializer.tag(v)] for k, v in iteritems(value)] + + def to_python(self, value): + return OrderedDict(value) + + app.session_interface.serializer.register(TagOrderedDict, index=0) +""" +from __future__ import annotations + +import typing as t +from base64 import b64decode +from base64 import b64encode +from datetime import datetime +from uuid import UUID + +from markupsafe import Markup +from werkzeug.http import http_date +from werkzeug.http import parse_date + +from ..json import dumps +from ..json import loads + + +class JSONTag: + """Base class for defining type tags for :class:`TaggedJSONSerializer`.""" + + __slots__ = ("serializer",) + + #: The tag to mark the serialized object with. If ``None``, this tag is + #: only used as an intermediate step during tagging. + key: str | None = None + + def __init__(self, serializer: TaggedJSONSerializer) -> None: + """Create a tagger for the given serializer.""" + self.serializer = serializer + + def check(self, value: t.Any) -> bool: + """Check if the given value should be tagged by this tag.""" + raise NotImplementedError + + def to_json(self, value: t.Any) -> t.Any: + """Convert the Python object to an object that is a valid JSON type. + The tag will be added later.""" + raise NotImplementedError + + def to_python(self, value: t.Any) -> t.Any: + """Convert the JSON representation back to the correct type. The tag + will already be removed.""" + raise NotImplementedError + + def tag(self, value: t.Any) -> t.Any: + """Convert the value to a valid JSON type and add the tag structure + around it.""" + return {self.key: self.to_json(value)} + + +class TagDict(JSONTag): + """Tag for 1-item dicts whose only key matches a registered tag. + + Internally, the dict key is suffixed with `__`, and the suffix is removed + when deserializing. + """ + + __slots__ = () + key = " di" + + def check(self, value: t.Any) -> bool: + return ( + isinstance(value, dict) + and len(value) == 1 + and next(iter(value)) in self.serializer.tags + ) + + def to_json(self, value: t.Any) -> t.Any: + key = next(iter(value)) + return {f"{key}__": self.serializer.tag(value[key])} + + def to_python(self, value: t.Any) -> t.Any: + key = next(iter(value)) + return {key[:-2]: value[key]} + + +class PassDict(JSONTag): + __slots__ = () + + def check(self, value: t.Any) -> bool: + return isinstance(value, dict) + + def to_json(self, value: t.Any) -> t.Any: + # JSON objects may only have string keys, so don't bother tagging the + # key here. + return {k: self.serializer.tag(v) for k, v in value.items()} + + tag = to_json + + +class TagTuple(JSONTag): + __slots__ = () + key = " t" + + def check(self, value: t.Any) -> bool: + return isinstance(value, tuple) + + def to_json(self, value: t.Any) -> t.Any: + return [self.serializer.tag(item) for item in value] + + def to_python(self, value: t.Any) -> t.Any: + return tuple(value) + + +class PassList(JSONTag): + __slots__ = () + + def check(self, value: t.Any) -> bool: + return isinstance(value, list) + + def to_json(self, value: t.Any) -> t.Any: + return [self.serializer.tag(item) for item in value] + + tag = to_json + + +class TagBytes(JSONTag): + __slots__ = () + key = " b" + + def check(self, value: t.Any) -> bool: + return isinstance(value, bytes) + + def to_json(self, value: t.Any) -> t.Any: + return b64encode(value).decode("ascii") + + def to_python(self, value: t.Any) -> t.Any: + return b64decode(value) + + +class TagMarkup(JSONTag): + """Serialize anything matching the :class:`~markupsafe.Markup` API by + having a ``__html__`` method to the result of that method. Always + deserializes to an instance of :class:`~markupsafe.Markup`.""" + + __slots__ = () + key = " m" + + def check(self, value: t.Any) -> bool: + return callable(getattr(value, "__html__", None)) + + def to_json(self, value: t.Any) -> t.Any: + return str(value.__html__()) + + def to_python(self, value: t.Any) -> t.Any: + return Markup(value) + + +class TagUUID(JSONTag): + __slots__ = () + key = " u" + + def check(self, value: t.Any) -> bool: + return isinstance(value, UUID) + + def to_json(self, value: t.Any) -> t.Any: + return value.hex + + def to_python(self, value: t.Any) -> t.Any: + return UUID(value) + + +class TagDateTime(JSONTag): + __slots__ = () + key = " d" + + def check(self, value: t.Any) -> bool: + return isinstance(value, datetime) + + def to_json(self, value: t.Any) -> t.Any: + return http_date(value) + + def to_python(self, value: t.Any) -> t.Any: + return parse_date(value) + + +class TaggedJSONSerializer: + """Serializer that uses a tag system to compactly represent objects that + are not JSON types. Passed as the intermediate serializer to + :class:`itsdangerous.Serializer`. + + The following extra types are supported: + + * :class:`dict` + * :class:`tuple` + * :class:`bytes` + * :class:`~markupsafe.Markup` + * :class:`~uuid.UUID` + * :class:`~datetime.datetime` + """ + + __slots__ = ("tags", "order") + + #: Tag classes to bind when creating the serializer. Other tags can be + #: added later using :meth:`~register`. + default_tags = [ + TagDict, + PassDict, + TagTuple, + PassList, + TagBytes, + TagMarkup, + TagUUID, + TagDateTime, + ] + + def __init__(self) -> None: + self.tags: dict[str, JSONTag] = {} + self.order: list[JSONTag] = [] + + for cls in self.default_tags: + self.register(cls) + + def register( + self, + tag_class: type[JSONTag], + force: bool = False, + index: int | None = None, + ) -> None: + """Register a new tag with this serializer. + + :param tag_class: tag class to register. Will be instantiated with this + serializer instance. + :param force: overwrite an existing tag. If false (default), a + :exc:`KeyError` is raised. + :param index: index to insert the new tag in the tag order. Useful when + the new tag is a special case of an existing tag. If ``None`` + (default), the tag is appended to the end of the order. + + :raise KeyError: if the tag key is already registered and ``force`` is + not true. + """ + tag = tag_class(self) + key = tag.key + + if key is not None: + if not force and key in self.tags: + raise KeyError(f"Tag '{key}' is already registered.") + + self.tags[key] = tag + + if index is None: + self.order.append(tag) + else: + self.order.insert(index, tag) + + def tag(self, value: t.Any) -> dict[str, t.Any]: + """Convert a value to a tagged representation if necessary.""" + for tag in self.order: + if tag.check(value): + return tag.tag(value) + + return value + + def untag(self, value: dict[str, t.Any]) -> t.Any: + """Convert a tagged representation back to the original type.""" + if len(value) != 1: + return value + + key = next(iter(value)) + + if key not in self.tags: + return value + + return self.tags[key].to_python(value[key]) + + def dumps(self, value: t.Any) -> str: + """Tag the value and dump it to a compact JSON string.""" + return dumps(self.tag(value), separators=(",", ":")) + + def loads(self, value: str) -> t.Any: + """Load data from a JSON string and deserialized any tagged objects.""" + return loads(value, object_hook=self.untag) diff --git a/env/lib/python3.11/site-packages/flask/logging.py b/env/lib/python3.11/site-packages/flask/logging.py new file mode 100644 index 0000000..99f6be8 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/logging.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import logging +import sys +import typing as t + +from werkzeug.local import LocalProxy + +from .globals import request + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + + +@LocalProxy +def wsgi_errors_stream() -> t.TextIO: + """Find the most appropriate error stream for the application. If a request + is active, log to ``wsgi.errors``, otherwise use ``sys.stderr``. + + If you configure your own :class:`logging.StreamHandler`, you may want to + use this for the stream. If you are using file or dict configuration and + can't import this directly, you can refer to it as + ``ext://flask.logging.wsgi_errors_stream``. + """ + return request.environ["wsgi.errors"] if request else sys.stderr + + +def has_level_handler(logger: logging.Logger) -> bool: + """Check if there is a handler in the logging chain that will handle the + given logger's :meth:`effective level <~logging.Logger.getEffectiveLevel>`. + """ + level = logger.getEffectiveLevel() + current = logger + + while current: + if any(handler.level <= level for handler in current.handlers): + return True + + if not current.propagate: + break + + current = current.parent # type: ignore + + return False + + +#: Log messages to :func:`~flask.logging.wsgi_errors_stream` with the format +#: ``[%(asctime)s] %(levelname)s in %(module)s: %(message)s``. +default_handler = logging.StreamHandler(wsgi_errors_stream) # type: ignore +default_handler.setFormatter( + logging.Formatter("[%(asctime)s] %(levelname)s in %(module)s: %(message)s") +) + + +def create_logger(app: Flask) -> logging.Logger: + """Get the Flask app's logger and configure it if needed. + + The logger name will be the same as + :attr:`app.import_name `. + + When :attr:`~flask.Flask.debug` is enabled, set the logger level to + :data:`logging.DEBUG` if it is not set. + + If there is no handler for the logger's effective level, add a + :class:`~logging.StreamHandler` for + :func:`~flask.logging.wsgi_errors_stream` with a basic format. + """ + logger = logging.getLogger(app.name) + + if app.debug and not logger.level: + logger.setLevel(logging.DEBUG) + + if not has_level_handler(logger): + logger.addHandler(default_handler) + + return logger diff --git a/env/lib/python3.11/site-packages/flask/py.typed b/env/lib/python3.11/site-packages/flask/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.11/site-packages/flask/scaffold.py b/env/lib/python3.11/site-packages/flask/scaffold.py new file mode 100644 index 0000000..6af6906 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/scaffold.py @@ -0,0 +1,923 @@ +from __future__ import annotations + +import importlib.util +import os +import pathlib +import pkgutil +import sys +import typing as t +from collections import defaultdict +from datetime import timedelta +from functools import update_wrapper + +from jinja2 import FileSystemLoader +from werkzeug.exceptions import default_exceptions +from werkzeug.exceptions import HTTPException +from werkzeug.utils import cached_property + +from . import typing as ft +from .cli import AppGroup +from .globals import current_app +from .helpers import get_root_path +from .helpers import send_from_directory +from .templating import _default_template_ctx_processor + +if t.TYPE_CHECKING: # pragma: no cover + from .wrappers import Response + +# a singleton sentinel value for parameter defaults +_sentinel = object() + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +T_after_request = t.TypeVar("T_after_request", bound=ft.AfterRequestCallable) +T_before_request = t.TypeVar("T_before_request", bound=ft.BeforeRequestCallable) +T_error_handler = t.TypeVar("T_error_handler", bound=ft.ErrorHandlerCallable) +T_teardown = t.TypeVar("T_teardown", bound=ft.TeardownCallable) +T_template_context_processor = t.TypeVar( + "T_template_context_processor", bound=ft.TemplateContextProcessorCallable +) +T_url_defaults = t.TypeVar("T_url_defaults", bound=ft.URLDefaultCallable) +T_url_value_preprocessor = t.TypeVar( + "T_url_value_preprocessor", bound=ft.URLValuePreprocessorCallable +) +T_route = t.TypeVar("T_route", bound=ft.RouteCallable) + + +def setupmethod(f: F) -> F: + f_name = f.__name__ + + def wrapper_func(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + self._check_setup_finished(f_name) + return f(self, *args, **kwargs) + + return t.cast(F, update_wrapper(wrapper_func, f)) + + +class Scaffold: + """Common behavior shared between :class:`~flask.Flask` and + :class:`~flask.blueprints.Blueprint`. + + :param import_name: The import name of the module where this object + is defined. Usually :attr:`__name__` should be used. + :param static_folder: Path to a folder of static files to serve. + If this is set, a static route will be added. + :param static_url_path: URL prefix for the static route. + :param template_folder: Path to a folder containing template files. + for rendering. If this is set, a Jinja loader will be added. + :param root_path: The path that static, template, and resource files + are relative to. Typically not set, it is discovered based on + the ``import_name``. + + .. versionadded:: 2.0 + """ + + name: str + _static_folder: str | None = None + _static_url_path: str | None = None + + def __init__( + self, + import_name: str, + static_folder: str | os.PathLike | None = None, + static_url_path: str | None = None, + template_folder: str | os.PathLike | None = None, + root_path: str | None = None, + ): + #: The name of the package or module that this object belongs + #: to. Do not change this once it is set by the constructor. + self.import_name = import_name + + self.static_folder = static_folder # type: ignore + self.static_url_path = static_url_path + + #: The path to the templates folder, relative to + #: :attr:`root_path`, to add to the template loader. ``None`` if + #: templates should not be added. + self.template_folder = template_folder + + if root_path is None: + root_path = get_root_path(self.import_name) + + #: Absolute path to the package on the filesystem. Used to look + #: up resources contained in the package. + self.root_path = root_path + + #: The Click command group for registering CLI commands for this + #: object. The commands are available from the ``flask`` command + #: once the application has been discovered and blueprints have + #: been registered. + self.cli = AppGroup() + + #: A dictionary mapping endpoint names to view functions. + #: + #: To register a view function, use the :meth:`route` decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.view_functions: dict[str, t.Callable] = {} + + #: A data structure of registered error handlers, in the format + #: ``{scope: {code: {class: handler}}}``. The ``scope`` key is + #: the name of a blueprint the handlers are active for, or + #: ``None`` for all requests. The ``code`` key is the HTTP + #: status code for ``HTTPException``, or ``None`` for + #: other exceptions. The innermost dictionary maps exception + #: classes to handler functions. + #: + #: To register an error handler, use the :meth:`errorhandler` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.error_handler_spec: dict[ + ft.AppOrBlueprintKey, + dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]], + ] = defaultdict(lambda: defaultdict(dict)) + + #: A data structure of functions to call at the beginning of + #: each request, in the format ``{scope: [functions]}``. The + #: ``scope`` key is the name of a blueprint the functions are + #: active for, or ``None`` for all requests. + #: + #: To register a function, use the :meth:`before_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.before_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable] + ] = defaultdict(list) + + #: A data structure of functions to call at the end of each + #: request, in the format ``{scope: [functions]}``. The + #: ``scope`` key is the name of a blueprint the functions are + #: active for, or ``None`` for all requests. + #: + #: To register a function, use the :meth:`after_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.after_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.AfterRequestCallable] + ] = defaultdict(list) + + #: A data structure of functions to call at the end of each + #: request even if an exception is raised, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`teardown_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.teardown_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.TeardownCallable] + ] = defaultdict(list) + + #: A data structure of functions to call to pass extra context + #: values when rendering templates, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`context_processor` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.template_context_processors: dict[ + ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable] + ] = defaultdict(list, {None: [_default_template_ctx_processor]}) + + #: A data structure of functions to call to modify the keyword + #: arguments passed to the view function, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the + #: :meth:`url_value_preprocessor` decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.url_value_preprocessors: dict[ + ft.AppOrBlueprintKey, + list[ft.URLValuePreprocessorCallable], + ] = defaultdict(list) + + #: A data structure of functions to call to modify the keyword + #: arguments when generating URLs, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`url_defaults` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.url_default_functions: dict[ + ft.AppOrBlueprintKey, list[ft.URLDefaultCallable] + ] = defaultdict(list) + + def __repr__(self) -> str: + return f"<{type(self).__name__} {self.name!r}>" + + def _check_setup_finished(self, f_name: str) -> None: + raise NotImplementedError + + @property + def static_folder(self) -> str | None: + """The absolute path to the configured static folder. ``None`` + if no static folder is set. + """ + if self._static_folder is not None: + return os.path.join(self.root_path, self._static_folder) + else: + return None + + @static_folder.setter + def static_folder(self, value: str | os.PathLike | None) -> None: + if value is not None: + value = os.fspath(value).rstrip(r"\/") + + self._static_folder = value + + @property + def has_static_folder(self) -> bool: + """``True`` if :attr:`static_folder` is set. + + .. versionadded:: 0.5 + """ + return self.static_folder is not None + + @property + def static_url_path(self) -> str | None: + """The URL prefix that the static route will be accessible from. + + If it was not configured during init, it is derived from + :attr:`static_folder`. + """ + if self._static_url_path is not None: + return self._static_url_path + + if self.static_folder is not None: + basename = os.path.basename(self.static_folder) + return f"/{basename}".rstrip("/") + + return None + + @static_url_path.setter + def static_url_path(self, value: str | None) -> None: + if value is not None: + value = value.rstrip("/") + + self._static_url_path = value + + def get_send_file_max_age(self, filename: str | None) -> int | None: + """Used by :func:`send_file` to determine the ``max_age`` cache + value for a given file path if it wasn't passed. + + By default, this returns :data:`SEND_FILE_MAX_AGE_DEFAULT` from + the configuration of :data:`~flask.current_app`. This defaults + to ``None``, which tells the browser to use conditional requests + instead of a timed cache, which is usually preferable. + + .. versionchanged:: 2.0 + The default configuration is ``None`` instead of 12 hours. + + .. versionadded:: 0.9 + """ + value = current_app.config["SEND_FILE_MAX_AGE_DEFAULT"] + + if value is None: + return None + + if isinstance(value, timedelta): + return int(value.total_seconds()) + + return value + + def send_static_file(self, filename: str) -> Response: + """The view function used to serve files from + :attr:`static_folder`. A route is automatically registered for + this view at :attr:`static_url_path` if :attr:`static_folder` is + set. + + .. versionadded:: 0.5 + """ + if not self.has_static_folder: + raise RuntimeError("'static_folder' must be set to serve static_files.") + + # send_file only knows to call get_send_file_max_age on the app, + # call it here so it works for blueprints too. + max_age = self.get_send_file_max_age(filename) + return send_from_directory( + t.cast(str, self.static_folder), filename, max_age=max_age + ) + + @cached_property + def jinja_loader(self) -> FileSystemLoader | None: + """The Jinja loader for this object's templates. By default this + is a class :class:`jinja2.loaders.FileSystemLoader` to + :attr:`template_folder` if it is set. + + .. versionadded:: 0.5 + """ + if self.template_folder is not None: + return FileSystemLoader(os.path.join(self.root_path, self.template_folder)) + else: + return None + + def open_resource(self, resource: str, mode: str = "rb") -> t.IO[t.AnyStr]: + """Open a resource file relative to :attr:`root_path` for + reading. + + For example, if the file ``schema.sql`` is next to the file + ``app.py`` where the ``Flask`` app is defined, it can be opened + with: + + .. code-block:: python + + with app.open_resource("schema.sql") as f: + conn.executescript(f.read()) + + :param resource: Path to the resource relative to + :attr:`root_path`. + :param mode: Open the file in this mode. Only reading is + supported, valid values are "r" (or "rt") and "rb". + """ + if mode not in {"r", "rt", "rb"}: + raise ValueError("Resources can only be opened for reading.") + + return open(os.path.join(self.root_path, resource), mode) + + def _method_route( + self, + method: str, + rule: str, + options: dict, + ) -> t.Callable[[T_route], T_route]: + if "methods" in options: + raise TypeError("Use the 'route' decorator to use the 'methods' argument.") + + return self.route(rule, methods=[method], **options) + + @setupmethod + def get(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["GET"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("GET", rule, options) + + @setupmethod + def post(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["POST"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("POST", rule, options) + + @setupmethod + def put(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["PUT"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("PUT", rule, options) + + @setupmethod + def delete(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["DELETE"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("DELETE", rule, options) + + @setupmethod + def patch(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["PATCH"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("PATCH", rule, options) + + @setupmethod + def route(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Decorate a view function to register it with the given URL + rule and options. Calls :meth:`add_url_rule`, which has more + details about the implementation. + + .. code-block:: python + + @app.route("/") + def index(): + return "Hello, World!" + + See :ref:`url-route-registrations`. + + The endpoint name for the route defaults to the name of the view + function if the ``endpoint`` parameter isn't passed. + + The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` and + ``OPTIONS`` are added automatically. + + :param rule: The URL rule string. + :param options: Extra options passed to the + :class:`~werkzeug.routing.Rule` object. + """ + + def decorator(f: T_route) -> T_route: + endpoint = options.pop("endpoint", None) + self.add_url_rule(rule, endpoint, f, **options) + return f + + return decorator + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + """Register a rule for routing incoming requests and building + URLs. The :meth:`route` decorator is a shortcut to call this + with the ``view_func`` argument. These are equivalent: + + .. code-block:: python + + @app.route("/") + def index(): + ... + + .. code-block:: python + + def index(): + ... + + app.add_url_rule("/", view_func=index) + + See :ref:`url-route-registrations`. + + The endpoint name for the route defaults to the name of the view + function if the ``endpoint`` parameter isn't passed. An error + will be raised if a function has already been registered for the + endpoint. + + The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` is + always added automatically, and ``OPTIONS`` is added + automatically by default. + + ``view_func`` does not necessarily need to be passed, but if the + rule should participate in routing an endpoint name must be + associated with a view function at some point with the + :meth:`endpoint` decorator. + + .. code-block:: python + + app.add_url_rule("/", endpoint="index") + + @app.endpoint("index") + def index(): + ... + + If ``view_func`` has a ``required_methods`` attribute, those + methods are added to the passed and automatic methods. If it + has a ``provide_automatic_methods`` attribute, it is used as the + default if the parameter is not passed. + + :param rule: The URL rule string. + :param endpoint: The endpoint name to associate with the rule + and view function. Used when routing and building URLs. + Defaults to ``view_func.__name__``. + :param view_func: The view function to associate with the + endpoint name. + :param provide_automatic_options: Add the ``OPTIONS`` method and + respond to ``OPTIONS`` requests automatically. + :param options: Extra options passed to the + :class:`~werkzeug.routing.Rule` object. + """ + raise NotImplementedError + + @setupmethod + def endpoint(self, endpoint: str) -> t.Callable[[F], F]: + """Decorate a view function to register it for the given + endpoint. Used if a rule is added without a ``view_func`` with + :meth:`add_url_rule`. + + .. code-block:: python + + app.add_url_rule("/ex", endpoint="example") + + @app.endpoint("example") + def example(): + ... + + :param endpoint: The endpoint name to associate with the view + function. + """ + + def decorator(f: F) -> F: + self.view_functions[endpoint] = f + return f + + return decorator + + @setupmethod + def before_request(self, f: T_before_request) -> T_before_request: + """Register a function to run before each request. + + For example, this can be used to open a database connection, or + to load the logged in user from the session. + + .. code-block:: python + + @app.before_request + def load_user(): + if "user_id" in session: + g.user = db.session.get(session["user_id"]) + + The function will be called without any arguments. If it returns + a non-``None`` value, the value is handled as if it was the + return value from the view, and further request handling is + stopped. + + This is available on both app and blueprint objects. When used on an app, this + executes before every request. When used on a blueprint, this executes before + every request that the blueprint handles. To register with a blueprint and + execute before every request, use :meth:`.Blueprint.before_app_request`. + """ + self.before_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def after_request(self, f: T_after_request) -> T_after_request: + """Register a function to run after each request to this object. + + The function is called with the response object, and must return + a response object. This allows the functions to modify or + replace the response before it is sent. + + If a function raises an exception, any remaining + ``after_request`` functions will not be called. Therefore, this + should not be used for actions that must execute, such as to + close resources. Use :meth:`teardown_request` for that. + + This is available on both app and blueprint objects. When used on an app, this + executes after every request. When used on a blueprint, this executes after + every request that the blueprint handles. To register with a blueprint and + execute after every request, use :meth:`.Blueprint.after_app_request`. + """ + self.after_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_request(self, f: T_teardown) -> T_teardown: + """Register a function to be called when the request context is + popped. Typically this happens at the end of each request, but + contexts may be pushed manually as well during testing. + + .. code-block:: python + + with app.test_request_context(): + ... + + When the ``with`` block exits (or ``ctx.pop()`` is called), the + teardown functions are called just before the request context is + made inactive. + + When a teardown function was called because of an unhandled + exception it will be passed an error object. If an + :meth:`errorhandler` is registered, it will handle the exception + and the teardown will not receive it. + + Teardown functions must avoid raising exceptions. If they + execute code that might fail they must surround that code with a + ``try``/``except`` block and log any errors. + + The return values of teardown functions are ignored. + + This is available on both app and blueprint objects. When used on an app, this + executes after every request. When used on a blueprint, this executes after + every request that the blueprint handles. To register with a blueprint and + execute after every request, use :meth:`.Blueprint.teardown_app_request`. + """ + self.teardown_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def context_processor( + self, + f: T_template_context_processor, + ) -> T_template_context_processor: + """Registers a template context processor function. These functions run before + rendering a template. The keys of the returned dict are added as variables + available in the template. + + This is available on both app and blueprint objects. When used on an app, this + is called for every rendered template. When used on a blueprint, this is called + for templates rendered from the blueprint's views. To register with a blueprint + and affect every template, use :meth:`.Blueprint.app_context_processor`. + """ + self.template_context_processors[None].append(f) + return f + + @setupmethod + def url_value_preprocessor( + self, + f: T_url_value_preprocessor, + ) -> T_url_value_preprocessor: + """Register a URL value preprocessor function for all view + functions in the application. These functions will be called before the + :meth:`before_request` functions. + + The function can modify the values captured from the matched url before + they are passed to the view. For example, this can be used to pop a + common language code value and place it in ``g`` rather than pass it to + every view. + + The function is passed the endpoint name and values dict. The return + value is ignored. + + This is available on both app and blueprint objects. When used on an app, this + is called for every request. When used on a blueprint, this is called for + requests that the blueprint handles. To register with a blueprint and affect + every request, use :meth:`.Blueprint.app_url_value_preprocessor`. + """ + self.url_value_preprocessors[None].append(f) + return f + + @setupmethod + def url_defaults(self, f: T_url_defaults) -> T_url_defaults: + """Callback function for URL defaults for all view functions of the + application. It's called with the endpoint and values and should + update the values passed in place. + + This is available on both app and blueprint objects. When used on an app, this + is called for every request. When used on a blueprint, this is called for + requests that the blueprint handles. To register with a blueprint and affect + every request, use :meth:`.Blueprint.app_url_defaults`. + """ + self.url_default_functions[None].append(f) + return f + + @setupmethod + def errorhandler( + self, code_or_exception: type[Exception] | int + ) -> t.Callable[[T_error_handler], T_error_handler]: + """Register a function to handle errors by code or exception class. + + A decorator that is used to register a function given an + error code. Example:: + + @app.errorhandler(404) + def page_not_found(error): + return 'This page does not exist', 404 + + You can also register handlers for arbitrary exceptions:: + + @app.errorhandler(DatabaseError) + def special_exception_handler(error): + return 'Database connection failed', 500 + + This is available on both app and blueprint objects. When used on an app, this + can handle errors from every request. When used on a blueprint, this can handle + errors from requests that the blueprint handles. To register with a blueprint + and affect every request, use :meth:`.Blueprint.app_errorhandler`. + + .. versionadded:: 0.7 + Use :meth:`register_error_handler` instead of modifying + :attr:`error_handler_spec` directly, for application wide error + handlers. + + .. versionadded:: 0.7 + One can now additionally also register custom exception types + that do not necessarily have to be a subclass of the + :class:`~werkzeug.exceptions.HTTPException` class. + + :param code_or_exception: the code as integer for the handler, or + an arbitrary exception + """ + + def decorator(f: T_error_handler) -> T_error_handler: + self.register_error_handler(code_or_exception, f) + return f + + return decorator + + @setupmethod + def register_error_handler( + self, + code_or_exception: type[Exception] | int, + f: ft.ErrorHandlerCallable, + ) -> None: + """Alternative error attach function to the :meth:`errorhandler` + decorator that is more straightforward to use for non decorator + usage. + + .. versionadded:: 0.7 + """ + exc_class, code = self._get_exc_class_and_code(code_or_exception) + self.error_handler_spec[None][code][exc_class] = f + + @staticmethod + def _get_exc_class_and_code( + exc_class_or_code: type[Exception] | int, + ) -> tuple[type[Exception], int | None]: + """Get the exception class being handled. For HTTP status codes + or ``HTTPException`` subclasses, return both the exception and + status code. + + :param exc_class_or_code: Any exception class, or an HTTP status + code as an integer. + """ + exc_class: type[Exception] + + if isinstance(exc_class_or_code, int): + try: + exc_class = default_exceptions[exc_class_or_code] + except KeyError: + raise ValueError( + f"'{exc_class_or_code}' is not a recognized HTTP" + " error code. Use a subclass of HTTPException with" + " that code instead." + ) from None + else: + exc_class = exc_class_or_code + + if isinstance(exc_class, Exception): + raise TypeError( + f"{exc_class!r} is an instance, not a class. Handlers" + " can only be registered for Exception classes or HTTP" + " error codes." + ) + + if not issubclass(exc_class, Exception): + raise ValueError( + f"'{exc_class.__name__}' is not a subclass of Exception." + " Handlers can only be registered for Exception classes" + " or HTTP error codes." + ) + + if issubclass(exc_class, HTTPException): + return exc_class, exc_class.code + else: + return exc_class, None + + +def _endpoint_from_view_func(view_func: t.Callable) -> str: + """Internal helper that returns the default endpoint for a given + function. This always is the function name. + """ + assert view_func is not None, "expected view func if endpoint is not provided." + return view_func.__name__ + + +def _matching_loader_thinks_module_is_package(loader, mod_name): + """Attempt to figure out if the given name is a package or a module. + + :param: loader: The loader that handled the name. + :param mod_name: The name of the package or module. + """ + # Use loader.is_package if it's available. + if hasattr(loader, "is_package"): + return loader.is_package(mod_name) + + cls = type(loader) + + # NamespaceLoader doesn't implement is_package, but all names it + # loads must be packages. + if cls.__module__ == "_frozen_importlib" and cls.__name__ == "NamespaceLoader": + return True + + # Otherwise we need to fail with an error that explains what went + # wrong. + raise AttributeError( + f"'{cls.__name__}.is_package()' must be implemented for PEP 302" + f" import hooks." + ) + + +def _path_is_relative_to(path: pathlib.PurePath, base: str) -> bool: + # Path.is_relative_to doesn't exist until Python 3.9 + try: + path.relative_to(base) + return True + except ValueError: + return False + + +def _find_package_path(import_name): + """Find the path that contains the package or module.""" + root_mod_name, _, _ = import_name.partition(".") + + try: + root_spec = importlib.util.find_spec(root_mod_name) + + if root_spec is None: + raise ValueError("not found") + # ImportError: the machinery told us it does not exist + # ValueError: + # - the module name was invalid + # - the module name is __main__ + # - *we* raised `ValueError` due to `root_spec` being `None` + except (ImportError, ValueError): + pass # handled below + else: + # namespace package + if root_spec.origin in {"namespace", None}: + package_spec = importlib.util.find_spec(import_name) + if package_spec is not None and package_spec.submodule_search_locations: + # Pick the path in the namespace that contains the submodule. + package_path = pathlib.Path( + os.path.commonpath(package_spec.submodule_search_locations) + ) + search_locations = ( + location + for location in root_spec.submodule_search_locations + if _path_is_relative_to(package_path, location) + ) + else: + # Pick the first path. + search_locations = iter(root_spec.submodule_search_locations) + return os.path.dirname(next(search_locations)) + # a package (with __init__.py) + elif root_spec.submodule_search_locations: + return os.path.dirname(os.path.dirname(root_spec.origin)) + # just a normal module + else: + return os.path.dirname(root_spec.origin) + + # we were unable to find the `package_path` using PEP 451 loaders + loader = pkgutil.get_loader(root_mod_name) + + if loader is None or root_mod_name == "__main__": + # import name is not found, or interactive/main module + return os.getcwd() + + if hasattr(loader, "get_filename"): + filename = loader.get_filename(root_mod_name) + elif hasattr(loader, "archive"): + # zipimporter's loader.archive points to the .egg or .zip file. + filename = loader.archive + else: + # At least one loader is missing both get_filename and archive: + # Google App Engine's HardenedModulesHook, use __file__. + filename = importlib.import_module(root_mod_name).__file__ + + package_path = os.path.abspath(os.path.dirname(filename)) + + # If the imported name is a package, filename is currently pointing + # to the root of the package, need to get the current directory. + if _matching_loader_thinks_module_is_package(loader, root_mod_name): + package_path = os.path.dirname(package_path) + + return package_path + + +def find_package(import_name: str): + """Find the prefix that a package is installed under, and the path + that it would be imported from. + + The prefix is the directory containing the standard directory + hierarchy (lib, bin, etc.). If the package is not installed to the + system (:attr:`sys.prefix`) or a virtualenv (``site-packages``), + ``None`` is returned. + + The path is the entry in :attr:`sys.path` that contains the package + for import. If the package is not installed, it's assumed that the + package was imported from the current working directory. + """ + package_path = _find_package_path(import_name) + py_prefix = os.path.abspath(sys.prefix) + + # installed to the system + if _path_is_relative_to(pathlib.PurePath(package_path), py_prefix): + return py_prefix, package_path + + site_parent, site_folder = os.path.split(package_path) + + # installed to a virtualenv + if site_folder.lower() == "site-packages": + parent, folder = os.path.split(site_parent) + + # Windows (prefix/lib/site-packages) + if folder.lower() == "lib": + return parent, package_path + + # Unix (prefix/lib/pythonX.Y/site-packages) + if os.path.basename(parent).lower() == "lib": + return os.path.dirname(parent), package_path + + # something else (prefix/site-packages) + return site_parent, package_path + + # not installed + return None, package_path diff --git a/env/lib/python3.11/site-packages/flask/sessions.py b/env/lib/python3.11/site-packages/flask/sessions.py new file mode 100644 index 0000000..1334184 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/sessions.py @@ -0,0 +1,365 @@ +from __future__ import annotations + +import hashlib +import typing as t +from collections.abc import MutableMapping +from datetime import datetime +from datetime import timezone + +from itsdangerous import BadSignature +from itsdangerous import URLSafeTimedSerializer +from werkzeug.datastructures import CallbackDict + +from .json.tag import TaggedJSONSerializer + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .wrappers import Request, Response + + +class SessionMixin(MutableMapping): + """Expands a basic dictionary with session attributes.""" + + @property + def permanent(self) -> bool: + """This reflects the ``'_permanent'`` key in the dict.""" + return self.get("_permanent", False) + + @permanent.setter + def permanent(self, value: bool) -> None: + self["_permanent"] = bool(value) + + #: Some implementations can detect whether a session is newly + #: created, but that is not guaranteed. Use with caution. The mixin + # default is hard-coded ``False``. + new = False + + #: Some implementations can detect changes to the session and set + #: this when that happens. The mixin default is hard coded to + #: ``True``. + modified = True + + #: Some implementations can detect when session data is read or + #: written and set this when that happens. The mixin default is hard + #: coded to ``True``. + accessed = True + + +class SecureCookieSession(CallbackDict, SessionMixin): + """Base class for sessions based on signed cookies. + + This session backend will set the :attr:`modified` and + :attr:`accessed` attributes. It cannot reliably track whether a + session is new (vs. empty), so :attr:`new` remains hard coded to + ``False``. + """ + + #: When data is changed, this is set to ``True``. Only the session + #: dictionary itself is tracked; if the session contains mutable + #: data (for example a nested dict) then this must be set to + #: ``True`` manually when modifying that data. The session cookie + #: will only be written to the response if this is ``True``. + modified = False + + #: When data is read or written, this is set to ``True``. Used by + # :class:`.SecureCookieSessionInterface` to add a ``Vary: Cookie`` + #: header, which allows caching proxies to cache different pages for + #: different users. + accessed = False + + def __init__(self, initial: t.Any = None) -> None: + def on_update(self) -> None: + self.modified = True + self.accessed = True + + super().__init__(initial, on_update) + + def __getitem__(self, key: str) -> t.Any: + self.accessed = True + return super().__getitem__(key) + + def get(self, key: str, default: t.Any = None) -> t.Any: + self.accessed = True + return super().get(key, default) + + def setdefault(self, key: str, default: t.Any = None) -> t.Any: + self.accessed = True + return super().setdefault(key, default) + + +class NullSession(SecureCookieSession): + """Class used to generate nicer error messages if sessions are not + available. Will still allow read-only access to the empty session + but fail on setting. + """ + + def _fail(self, *args: t.Any, **kwargs: t.Any) -> t.NoReturn: + raise RuntimeError( + "The session is unavailable because no secret " + "key was set. Set the secret_key on the " + "application to something unique and secret." + ) + + __setitem__ = __delitem__ = clear = pop = popitem = update = setdefault = _fail # type: ignore # noqa: B950 + del _fail + + +class SessionInterface: + """The basic interface you have to implement in order to replace the + default session interface which uses werkzeug's securecookie + implementation. The only methods you have to implement are + :meth:`open_session` and :meth:`save_session`, the others have + useful defaults which you don't need to change. + + The session object returned by the :meth:`open_session` method has to + provide a dictionary like interface plus the properties and methods + from the :class:`SessionMixin`. We recommend just subclassing a dict + and adding that mixin:: + + class Session(dict, SessionMixin): + pass + + If :meth:`open_session` returns ``None`` Flask will call into + :meth:`make_null_session` to create a session that acts as replacement + if the session support cannot work because some requirement is not + fulfilled. The default :class:`NullSession` class that is created + will complain that the secret key was not set. + + To replace the session interface on an application all you have to do + is to assign :attr:`flask.Flask.session_interface`:: + + app = Flask(__name__) + app.session_interface = MySessionInterface() + + Multiple requests with the same session may be sent and handled + concurrently. When implementing a new session interface, consider + whether reads or writes to the backing store must be synchronized. + There is no guarantee on the order in which the session for each + request is opened or saved, it will occur in the order that requests + begin and end processing. + + .. versionadded:: 0.8 + """ + + #: :meth:`make_null_session` will look here for the class that should + #: be created when a null session is requested. Likewise the + #: :meth:`is_null_session` method will perform a typecheck against + #: this type. + null_session_class = NullSession + + #: A flag that indicates if the session interface is pickle based. + #: This can be used by Flask extensions to make a decision in regards + #: to how to deal with the session object. + #: + #: .. versionadded:: 0.10 + pickle_based = False + + def make_null_session(self, app: Flask) -> NullSession: + """Creates a null session which acts as a replacement object if the + real session support could not be loaded due to a configuration + error. This mainly aids the user experience because the job of the + null session is to still support lookup without complaining but + modifications are answered with a helpful error message of what + failed. + + This creates an instance of :attr:`null_session_class` by default. + """ + return self.null_session_class() + + def is_null_session(self, obj: object) -> bool: + """Checks if a given object is a null session. Null sessions are + not asked to be saved. + + This checks if the object is an instance of :attr:`null_session_class` + by default. + """ + return isinstance(obj, self.null_session_class) + + def get_cookie_name(self, app: Flask) -> str: + """The name of the session cookie. Uses``app.config["SESSION_COOKIE_NAME"]``.""" + return app.config["SESSION_COOKIE_NAME"] + + def get_cookie_domain(self, app: Flask) -> str | None: + """The value of the ``Domain`` parameter on the session cookie. If not set, + browsers will only send the cookie to the exact domain it was set from. + Otherwise, they will send it to any subdomain of the given value as well. + + Uses the :data:`SESSION_COOKIE_DOMAIN` config. + + .. versionchanged:: 2.3 + Not set by default, does not fall back to ``SERVER_NAME``. + """ + rv = app.config["SESSION_COOKIE_DOMAIN"] + return rv if rv else None + + def get_cookie_path(self, app: Flask) -> str: + """Returns the path for which the cookie should be valid. The + default implementation uses the value from the ``SESSION_COOKIE_PATH`` + config var if it's set, and falls back to ``APPLICATION_ROOT`` or + uses ``/`` if it's ``None``. + """ + return app.config["SESSION_COOKIE_PATH"] or app.config["APPLICATION_ROOT"] + + def get_cookie_httponly(self, app: Flask) -> bool: + """Returns True if the session cookie should be httponly. This + currently just returns the value of the ``SESSION_COOKIE_HTTPONLY`` + config var. + """ + return app.config["SESSION_COOKIE_HTTPONLY"] + + def get_cookie_secure(self, app: Flask) -> bool: + """Returns True if the cookie should be secure. This currently + just returns the value of the ``SESSION_COOKIE_SECURE`` setting. + """ + return app.config["SESSION_COOKIE_SECURE"] + + def get_cookie_samesite(self, app: Flask) -> str: + """Return ``'Strict'`` or ``'Lax'`` if the cookie should use the + ``SameSite`` attribute. This currently just returns the value of + the :data:`SESSION_COOKIE_SAMESITE` setting. + """ + return app.config["SESSION_COOKIE_SAMESITE"] + + def get_expiration_time(self, app: Flask, session: SessionMixin) -> datetime | None: + """A helper method that returns an expiration date for the session + or ``None`` if the session is linked to the browser session. The + default implementation returns now + the permanent session + lifetime configured on the application. + """ + if session.permanent: + return datetime.now(timezone.utc) + app.permanent_session_lifetime + return None + + def should_set_cookie(self, app: Flask, session: SessionMixin) -> bool: + """Used by session backends to determine if a ``Set-Cookie`` header + should be set for this session cookie for this response. If the session + has been modified, the cookie is set. If the session is permanent and + the ``SESSION_REFRESH_EACH_REQUEST`` config is true, the cookie is + always set. + + This check is usually skipped if the session was deleted. + + .. versionadded:: 0.11 + """ + + return session.modified or ( + session.permanent and app.config["SESSION_REFRESH_EACH_REQUEST"] + ) + + def open_session(self, app: Flask, request: Request) -> SessionMixin | None: + """This is called at the beginning of each request, after + pushing the request context, before matching the URL. + + This must return an object which implements a dictionary-like + interface as well as the :class:`SessionMixin` interface. + + This will return ``None`` to indicate that loading failed in + some way that is not immediately an error. The request + context will fall back to using :meth:`make_null_session` + in this case. + """ + raise NotImplementedError() + + def save_session( + self, app: Flask, session: SessionMixin, response: Response + ) -> None: + """This is called at the end of each request, after generating + a response, before removing the request context. It is skipped + if :meth:`is_null_session` returns ``True``. + """ + raise NotImplementedError() + + +session_json_serializer = TaggedJSONSerializer() + + +class SecureCookieSessionInterface(SessionInterface): + """The default session interface that stores sessions in signed cookies + through the :mod:`itsdangerous` module. + """ + + #: the salt that should be applied on top of the secret key for the + #: signing of cookie based sessions. + salt = "cookie-session" + #: the hash function to use for the signature. The default is sha1 + digest_method = staticmethod(hashlib.sha1) + #: the name of the itsdangerous supported key derivation. The default + #: is hmac. + key_derivation = "hmac" + #: A python serializer for the payload. The default is a compact + #: JSON derived serializer with support for some extra Python types + #: such as datetime objects or tuples. + serializer = session_json_serializer + session_class = SecureCookieSession + + def get_signing_serializer(self, app: Flask) -> URLSafeTimedSerializer | None: + if not app.secret_key: + return None + signer_kwargs = dict( + key_derivation=self.key_derivation, digest_method=self.digest_method + ) + return URLSafeTimedSerializer( + app.secret_key, + salt=self.salt, + serializer=self.serializer, + signer_kwargs=signer_kwargs, + ) + + def open_session(self, app: Flask, request: Request) -> SecureCookieSession | None: + s = self.get_signing_serializer(app) + if s is None: + return None + val = request.cookies.get(self.get_cookie_name(app)) + if not val: + return self.session_class() + max_age = int(app.permanent_session_lifetime.total_seconds()) + try: + data = s.loads(val, max_age=max_age) + return self.session_class(data) + except BadSignature: + return self.session_class() + + def save_session( + self, app: Flask, session: SessionMixin, response: Response + ) -> None: + name = self.get_cookie_name(app) + domain = self.get_cookie_domain(app) + path = self.get_cookie_path(app) + secure = self.get_cookie_secure(app) + samesite = self.get_cookie_samesite(app) + httponly = self.get_cookie_httponly(app) + + # If the session is modified to be empty, remove the cookie. + # If the session is empty, return without setting the cookie. + if not session: + if session.modified: + response.delete_cookie( + name, + domain=domain, + path=path, + secure=secure, + samesite=samesite, + httponly=httponly, + ) + + return + + # Add a "Vary: Cookie" header if the session was accessed at all. + if session.accessed: + response.vary.add("Cookie") + + if not self.should_set_cookie(app, session): + return + + expires = self.get_expiration_time(app, session) + val = self.get_signing_serializer(app).dumps(dict(session)) # type: ignore + response.set_cookie( + name, + val, # type: ignore + expires=expires, + httponly=httponly, + domain=domain, + path=path, + secure=secure, + samesite=samesite, + ) diff --git a/env/lib/python3.11/site-packages/flask/signals.py b/env/lib/python3.11/site-packages/flask/signals.py new file mode 100644 index 0000000..d79f21f --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/signals.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import typing as t +import warnings + +from blinker import Namespace + +# This namespace is only for signals provided by Flask itself. +_signals = Namespace() + +template_rendered = _signals.signal("template-rendered") +before_render_template = _signals.signal("before-render-template") +request_started = _signals.signal("request-started") +request_finished = _signals.signal("request-finished") +request_tearing_down = _signals.signal("request-tearing-down") +got_request_exception = _signals.signal("got-request-exception") +appcontext_tearing_down = _signals.signal("appcontext-tearing-down") +appcontext_pushed = _signals.signal("appcontext-pushed") +appcontext_popped = _signals.signal("appcontext-popped") +message_flashed = _signals.signal("message-flashed") + + +def __getattr__(name: str) -> t.Any: + if name == "signals_available": + warnings.warn( + "The 'signals_available' attribute is deprecated and will be removed in" + " Flask 2.4. Signals are always available.", + DeprecationWarning, + stacklevel=2, + ) + return True + + raise AttributeError(name) diff --git a/env/lib/python3.11/site-packages/flask/templating.py b/env/lib/python3.11/site-packages/flask/templating.py new file mode 100644 index 0000000..769108f --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/templating.py @@ -0,0 +1,220 @@ +from __future__ import annotations + +import typing as t + +from jinja2 import BaseLoader +from jinja2 import Environment as BaseEnvironment +from jinja2 import Template +from jinja2 import TemplateNotFound + +from .globals import _cv_app +from .globals import _cv_request +from .globals import current_app +from .globals import request +from .helpers import stream_with_context +from .signals import before_render_template +from .signals import template_rendered + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .scaffold import Scaffold + + +def _default_template_ctx_processor() -> dict[str, t.Any]: + """Default template context processor. Injects `request`, + `session` and `g`. + """ + appctx = _cv_app.get(None) + reqctx = _cv_request.get(None) + rv: dict[str, t.Any] = {} + if appctx is not None: + rv["g"] = appctx.g + if reqctx is not None: + rv["request"] = reqctx.request + rv["session"] = reqctx.session + return rv + + +class Environment(BaseEnvironment): + """Works like a regular Jinja2 environment but has some additional + knowledge of how Flask's blueprint works so that it can prepend the + name of the blueprint to referenced templates if necessary. + """ + + def __init__(self, app: Flask, **options: t.Any) -> None: + if "loader" not in options: + options["loader"] = app.create_global_jinja_loader() + BaseEnvironment.__init__(self, **options) + self.app = app + + +class DispatchingJinjaLoader(BaseLoader): + """A loader that looks for templates in the application and all + the blueprint folders. + """ + + def __init__(self, app: Flask) -> None: + self.app = app + + def get_source( # type: ignore + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + if self.app.config["EXPLAIN_TEMPLATE_LOADING"]: + return self._get_source_explained(environment, template) + return self._get_source_fast(environment, template) + + def _get_source_explained( + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + attempts = [] + rv: tuple[str, str | None, t.Callable[[], bool] | None] | None + trv: None | (tuple[str, str | None, t.Callable[[], bool] | None]) = None + + for srcobj, loader in self._iter_loaders(template): + try: + rv = loader.get_source(environment, template) + if trv is None: + trv = rv + except TemplateNotFound: + rv = None + attempts.append((loader, srcobj, rv)) + + from .debughelpers import explain_template_loading_attempts + + explain_template_loading_attempts(self.app, template, attempts) + + if trv is not None: + return trv + raise TemplateNotFound(template) + + def _get_source_fast( + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + for _srcobj, loader in self._iter_loaders(template): + try: + return loader.get_source(environment, template) + except TemplateNotFound: + continue + raise TemplateNotFound(template) + + def _iter_loaders( + self, template: str + ) -> t.Generator[tuple[Scaffold, BaseLoader], None, None]: + loader = self.app.jinja_loader + if loader is not None: + yield self.app, loader + + for blueprint in self.app.iter_blueprints(): + loader = blueprint.jinja_loader + if loader is not None: + yield blueprint, loader + + def list_templates(self) -> list[str]: + result = set() + loader = self.app.jinja_loader + if loader is not None: + result.update(loader.list_templates()) + + for blueprint in self.app.iter_blueprints(): + loader = blueprint.jinja_loader + if loader is not None: + for template in loader.list_templates(): + result.add(template) + + return list(result) + + +def _render(app: Flask, template: Template, context: dict[str, t.Any]) -> str: + app.update_template_context(context) + before_render_template.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + rv = template.render(context) + template_rendered.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + return rv + + +def render_template( + template_name_or_list: str | Template | list[str | Template], + **context: t.Any, +) -> str: + """Render a template by name with the given context. + + :param template_name_or_list: The name of the template to render. If + a list is given, the first name to exist will be rendered. + :param context: The variables to make available in the template. + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.get_or_select_template(template_name_or_list) + return _render(app, template, context) + + +def render_template_string(source: str, **context: t.Any) -> str: + """Render a template from the given source string with the given + context. + + :param source: The source code of the template to render. + :param context: The variables to make available in the template. + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.from_string(source) + return _render(app, template, context) + + +def _stream( + app: Flask, template: Template, context: dict[str, t.Any] +) -> t.Iterator[str]: + app.update_template_context(context) + before_render_template.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + + def generate() -> t.Iterator[str]: + yield from template.generate(context) + template_rendered.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + + rv = generate() + + # If a request context is active, keep it while generating. + if request: + rv = stream_with_context(rv) + + return rv + + +def stream_template( + template_name_or_list: str | Template | list[str | Template], + **context: t.Any, +) -> t.Iterator[str]: + """Render a template by name with the given context as a stream. + This returns an iterator of strings, which can be used as a + streaming response from a view. + + :param template_name_or_list: The name of the template to render. If + a list is given, the first name to exist will be rendered. + :param context: The variables to make available in the template. + + .. versionadded:: 2.2 + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.get_or_select_template(template_name_or_list) + return _stream(app, template, context) + + +def stream_template_string(source: str, **context: t.Any) -> t.Iterator[str]: + """Render a template from the given source string with the given + context as a stream. This returns an iterator of strings, which can + be used as a streaming response from a view. + + :param source: The source code of the template to render. + :param context: The variables to make available in the template. + + .. versionadded:: 2.2 + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.from_string(source) + return _stream(app, template, context) diff --git a/env/lib/python3.11/site-packages/flask/testing.py b/env/lib/python3.11/site-packages/flask/testing.py new file mode 100644 index 0000000..21f8aa0 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/testing.py @@ -0,0 +1,292 @@ +from __future__ import annotations + +import typing as t +from contextlib import contextmanager +from contextlib import ExitStack +from copy import copy +from types import TracebackType +from urllib.parse import urlsplit + +import werkzeug.test +from click.testing import CliRunner +from werkzeug.test import Client +from werkzeug.wrappers import Request as BaseRequest + +from .cli import ScriptInfo +from .sessions import SessionMixin + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.test import TestResponse + + from .app import Flask + + +class EnvironBuilder(werkzeug.test.EnvironBuilder): + """An :class:`~werkzeug.test.EnvironBuilder`, that takes defaults from the + application. + + :param app: The Flask application to configure the environment from. + :param path: URL path being requested. + :param base_url: Base URL where the app is being served, which + ``path`` is relative to. If not given, built from + :data:`PREFERRED_URL_SCHEME`, ``subdomain``, + :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`. + :param subdomain: Subdomain name to append to :data:`SERVER_NAME`. + :param url_scheme: Scheme to use instead of + :data:`PREFERRED_URL_SCHEME`. + :param json: If given, this is serialized as JSON and passed as + ``data``. Also defaults ``content_type`` to + ``application/json``. + :param args: other positional arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + :param kwargs: other keyword arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + """ + + def __init__( + self, + app: Flask, + path: str = "/", + base_url: str | None = None, + subdomain: str | None = None, + url_scheme: str | None = None, + *args: t.Any, + **kwargs: t.Any, + ) -> None: + assert not (base_url or subdomain or url_scheme) or ( + base_url is not None + ) != bool( + subdomain or url_scheme + ), 'Cannot pass "subdomain" or "url_scheme" with "base_url".' + + if base_url is None: + http_host = app.config.get("SERVER_NAME") or "localhost" + app_root = app.config["APPLICATION_ROOT"] + + if subdomain: + http_host = f"{subdomain}.{http_host}" + + if url_scheme is None: + url_scheme = app.config["PREFERRED_URL_SCHEME"] + + url = urlsplit(path) + base_url = ( + f"{url.scheme or url_scheme}://{url.netloc or http_host}" + f"/{app_root.lstrip('/')}" + ) + path = url.path + + if url.query: + sep = b"?" if isinstance(url.query, bytes) else "?" + path += sep + url.query + + self.app = app + super().__init__(path, base_url, *args, **kwargs) + + def json_dumps(self, obj: t.Any, **kwargs: t.Any) -> str: # type: ignore + """Serialize ``obj`` to a JSON-formatted string. + + The serialization will be configured according to the config associated + with this EnvironBuilder's ``app``. + """ + return self.app.json.dumps(obj, **kwargs) + + +class FlaskClient(Client): + """Works like a regular Werkzeug test client but has knowledge about + Flask's contexts to defer the cleanup of the request context until + the end of a ``with`` block. For general information about how to + use this class refer to :class:`werkzeug.test.Client`. + + .. versionchanged:: 0.12 + `app.test_client()` includes preset default environment, which can be + set after instantiation of the `app.test_client()` object in + `client.environ_base`. + + Basic usage is outlined in the :doc:`/testing` chapter. + """ + + application: Flask + + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + super().__init__(*args, **kwargs) + self.preserve_context = False + self._new_contexts: list[t.ContextManager[t.Any]] = [] + self._context_stack = ExitStack() + self.environ_base = { + "REMOTE_ADDR": "127.0.0.1", + "HTTP_USER_AGENT": f"werkzeug/{werkzeug.__version__}", + } + + @contextmanager + def session_transaction( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Generator[SessionMixin, None, None]: + """When used in combination with a ``with`` statement this opens a + session transaction. This can be used to modify the session that + the test client uses. Once the ``with`` block is left the session is + stored back. + + :: + + with client.session_transaction() as session: + session['value'] = 42 + + Internally this is implemented by going through a temporary test + request context and since session handling could depend on + request variables this function accepts the same arguments as + :meth:`~flask.Flask.test_request_context` which are directly + passed through. + """ + # new cookie interface for Werkzeug >= 2.3 + cookie_storage = self._cookies if hasattr(self, "_cookies") else self.cookie_jar + + if cookie_storage is None: + raise TypeError( + "Cookies are disabled. Create a client with 'use_cookies=True'." + ) + + app = self.application + ctx = app.test_request_context(*args, **kwargs) + + if hasattr(self, "_add_cookies_to_wsgi"): + self._add_cookies_to_wsgi(ctx.request.environ) + else: + self.cookie_jar.inject_wsgi(ctx.request.environ) # type: ignore[union-attr] + + with ctx: + sess = app.session_interface.open_session(app, ctx.request) + + if sess is None: + raise RuntimeError("Session backend did not open a session.") + + yield sess + resp = app.response_class() + + if app.session_interface.is_null_session(sess): + return + + with ctx: + app.session_interface.save_session(app, sess, resp) + + if hasattr(self, "_update_cookies_from_response"): + self._update_cookies_from_response( + ctx.request.host.partition(":")[0], resp.headers.getlist("Set-Cookie") + ) + else: + self.cookie_jar.extract_wsgi( # type: ignore[union-attr] + ctx.request.environ, resp.headers + ) + + def _copy_environ(self, other): + out = {**self.environ_base, **other} + + if self.preserve_context: + out["werkzeug.debug.preserve_context"] = self._new_contexts.append + + return out + + def _request_from_builder_args(self, args, kwargs): + kwargs["environ_base"] = self._copy_environ(kwargs.get("environ_base", {})) + builder = EnvironBuilder(self.application, *args, **kwargs) + + try: + return builder.get_request() + finally: + builder.close() + + def open( + self, + *args: t.Any, + buffered: bool = False, + follow_redirects: bool = False, + **kwargs: t.Any, + ) -> TestResponse: + if args and isinstance( + args[0], (werkzeug.test.EnvironBuilder, dict, BaseRequest) + ): + if isinstance(args[0], werkzeug.test.EnvironBuilder): + builder = copy(args[0]) + builder.environ_base = self._copy_environ(builder.environ_base or {}) + request = builder.get_request() + elif isinstance(args[0], dict): + request = EnvironBuilder.from_environ( + args[0], app=self.application, environ_base=self._copy_environ({}) + ).get_request() + else: + # isinstance(args[0], BaseRequest) + request = copy(args[0]) + request.environ = self._copy_environ(request.environ) + else: + # request is None + request = self._request_from_builder_args(args, kwargs) + + # Pop any previously preserved contexts. This prevents contexts + # from being preserved across redirects or multiple requests + # within a single block. + self._context_stack.close() + + response = super().open( + request, + buffered=buffered, + follow_redirects=follow_redirects, + ) + response.json_module = self.application.json # type: ignore[assignment] + + # Re-push contexts that were preserved during the request. + while self._new_contexts: + cm = self._new_contexts.pop() + self._context_stack.enter_context(cm) + + return response + + def __enter__(self) -> FlaskClient: + if self.preserve_context: + raise RuntimeError("Cannot nest client invocations") + self.preserve_context = True + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.preserve_context = False + self._context_stack.close() + + +class FlaskCliRunner(CliRunner): + """A :class:`~click.testing.CliRunner` for testing a Flask app's + CLI commands. Typically created using + :meth:`~flask.Flask.test_cli_runner`. See :ref:`testing-cli`. + """ + + def __init__(self, app: Flask, **kwargs: t.Any) -> None: + self.app = app + super().__init__(**kwargs) + + def invoke( # type: ignore + self, cli: t.Any = None, args: t.Any = None, **kwargs: t.Any + ) -> t.Any: + """Invokes a CLI command in an isolated environment. See + :meth:`CliRunner.invoke ` for + full method documentation. See :ref:`testing-cli` for examples. + + If the ``obj`` argument is not given, passes an instance of + :class:`~flask.cli.ScriptInfo` that knows how to load the Flask + app being tested. + + :param cli: Command object to invoke. Default is the app's + :attr:`~flask.app.Flask.cli` group. + :param args: List of strings to invoke the command with. + + :return: a :class:`~click.testing.Result` object. + """ + if cli is None: + cli = self.app.cli # type: ignore + + if "obj" not in kwargs: + kwargs["obj"] = ScriptInfo(create_app=lambda: self.app) + + return super().invoke(cli, args, **kwargs) diff --git a/env/lib/python3.11/site-packages/flask/typing.py b/env/lib/python3.11/site-packages/flask/typing.py new file mode 100644 index 0000000..50aef7f --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/typing.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import typing as t + +if t.TYPE_CHECKING: # pragma: no cover + from _typeshed.wsgi import WSGIApplication # noqa: F401 + from werkzeug.datastructures import Headers # noqa: F401 + from werkzeug.wrappers import Response # noqa: F401 + +# The possible types that are directly convertible or are a Response object. +ResponseValue = t.Union[ + "Response", + str, + bytes, + t.List[t.Any], + # Only dict is actually accepted, but Mapping allows for TypedDict. + t.Mapping[str, t.Any], + t.Iterator[str], + t.Iterator[bytes], +] + +# the possible types for an individual HTTP header +# This should be a Union, but mypy doesn't pass unless it's a TypeVar. +HeaderValue = t.Union[str, t.List[str], t.Tuple[str, ...]] + +# the possible types for HTTP headers +HeadersValue = t.Union[ + "Headers", + t.Mapping[str, HeaderValue], + t.Sequence[t.Tuple[str, HeaderValue]], +] + +# The possible types returned by a route function. +ResponseReturnValue = t.Union[ + ResponseValue, + t.Tuple[ResponseValue, HeadersValue], + t.Tuple[ResponseValue, int], + t.Tuple[ResponseValue, int, HeadersValue], + "WSGIApplication", +] + +# Allow any subclass of werkzeug.Response, such as the one from Flask, +# as a callback argument. Using werkzeug.Response directly makes a +# callback annotated with flask.Response fail type checking. +ResponseClass = t.TypeVar("ResponseClass", bound="Response") + +AppOrBlueprintKey = t.Optional[str] # The App key is None, whereas blueprints are named +AfterRequestCallable = t.Union[ + t.Callable[[ResponseClass], ResponseClass], + t.Callable[[ResponseClass], t.Awaitable[ResponseClass]], +] +BeforeFirstRequestCallable = t.Union[ + t.Callable[[], None], t.Callable[[], t.Awaitable[None]] +] +BeforeRequestCallable = t.Union[ + t.Callable[[], t.Optional[ResponseReturnValue]], + t.Callable[[], t.Awaitable[t.Optional[ResponseReturnValue]]], +] +ShellContextProcessorCallable = t.Callable[[], t.Dict[str, t.Any]] +TeardownCallable = t.Union[ + t.Callable[[t.Optional[BaseException]], None], + t.Callable[[t.Optional[BaseException]], t.Awaitable[None]], +] +TemplateContextProcessorCallable = t.Callable[[], t.Dict[str, t.Any]] +TemplateFilterCallable = t.Callable[..., t.Any] +TemplateGlobalCallable = t.Callable[..., t.Any] +TemplateTestCallable = t.Callable[..., bool] +URLDefaultCallable = t.Callable[[str, dict], None] +URLValuePreprocessorCallable = t.Callable[[t.Optional[str], t.Optional[dict]], None] + +# This should take Exception, but that either breaks typing the argument +# with a specific exception, or decorating multiple times with different +# exceptions (and using a union type on the argument). +# https://github.com/pallets/flask/issues/4095 +# https://github.com/pallets/flask/issues/4295 +# https://github.com/pallets/flask/issues/4297 +ErrorHandlerCallable = t.Callable[[t.Any], ResponseReturnValue] + +RouteCallable = t.Union[ + t.Callable[..., ResponseReturnValue], + t.Callable[..., t.Awaitable[ResponseReturnValue]], +] diff --git a/env/lib/python3.11/site-packages/flask/views.py b/env/lib/python3.11/site-packages/flask/views.py new file mode 100644 index 0000000..c7a2b62 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/views.py @@ -0,0 +1,190 @@ +from __future__ import annotations + +import typing as t + +from . import typing as ft +from .globals import current_app +from .globals import request + + +http_method_funcs = frozenset( + ["get", "post", "head", "options", "delete", "put", "trace", "patch"] +) + + +class View: + """Subclass this class and override :meth:`dispatch_request` to + create a generic class-based view. Call :meth:`as_view` to create a + view function that creates an instance of the class with the given + arguments and calls its ``dispatch_request`` method with any URL + variables. + + See :doc:`views` for a detailed guide. + + .. code-block:: python + + class Hello(View): + init_every_request = False + + def dispatch_request(self, name): + return f"Hello, {name}!" + + app.add_url_rule( + "/hello/", view_func=Hello.as_view("hello") + ) + + Set :attr:`methods` on the class to change what methods the view + accepts. + + Set :attr:`decorators` on the class to apply a list of decorators to + the generated view function. Decorators applied to the class itself + will not be applied to the generated view function! + + Set :attr:`init_every_request` to ``False`` for efficiency, unless + you need to store request-global data on ``self``. + """ + + #: The methods this view is registered for. Uses the same default + #: (``["GET", "HEAD", "OPTIONS"]``) as ``route`` and + #: ``add_url_rule`` by default. + methods: t.ClassVar[t.Collection[str] | None] = None + + #: Control whether the ``OPTIONS`` method is handled automatically. + #: Uses the same default (``True``) as ``route`` and + #: ``add_url_rule`` by default. + provide_automatic_options: t.ClassVar[bool | None] = None + + #: A list of decorators to apply, in order, to the generated view + #: function. Remember that ``@decorator`` syntax is applied bottom + #: to top, so the first decorator in the list would be the bottom + #: decorator. + #: + #: .. versionadded:: 0.8 + decorators: t.ClassVar[list[t.Callable]] = [] + + #: Create a new instance of this view class for every request by + #: default. If a view subclass sets this to ``False``, the same + #: instance is used for every request. + #: + #: A single instance is more efficient, especially if complex setup + #: is done during init. However, storing data on ``self`` is no + #: longer safe across requests, and :data:`~flask.g` should be used + #: instead. + #: + #: .. versionadded:: 2.2 + init_every_request: t.ClassVar[bool] = True + + def dispatch_request(self) -> ft.ResponseReturnValue: + """The actual view function behavior. Subclasses must override + this and return a valid response. Any variables from the URL + rule are passed as keyword arguments. + """ + raise NotImplementedError() + + @classmethod + def as_view( + cls, name: str, *class_args: t.Any, **class_kwargs: t.Any + ) -> ft.RouteCallable: + """Convert the class into a view function that can be registered + for a route. + + By default, the generated view will create a new instance of the + view class for every request and call its + :meth:`dispatch_request` method. If the view class sets + :attr:`init_every_request` to ``False``, the same instance will + be used for every request. + + Except for ``name``, all other arguments passed to this method + are forwarded to the view class ``__init__`` method. + + .. versionchanged:: 2.2 + Added the ``init_every_request`` class attribute. + """ + if cls.init_every_request: + + def view(**kwargs: t.Any) -> ft.ResponseReturnValue: + self = view.view_class( # type: ignore[attr-defined] + *class_args, **class_kwargs + ) + return current_app.ensure_sync(self.dispatch_request)(**kwargs) + + else: + self = cls(*class_args, **class_kwargs) + + def view(**kwargs: t.Any) -> ft.ResponseReturnValue: + return current_app.ensure_sync(self.dispatch_request)(**kwargs) + + if cls.decorators: + view.__name__ = name + view.__module__ = cls.__module__ + for decorator in cls.decorators: + view = decorator(view) + + # We attach the view class to the view function for two reasons: + # first of all it allows us to easily figure out what class-based + # view this thing came from, secondly it's also used for instantiating + # the view class so you can actually replace it with something else + # for testing purposes and debugging. + view.view_class = cls # type: ignore + view.__name__ = name + view.__doc__ = cls.__doc__ + view.__module__ = cls.__module__ + view.methods = cls.methods # type: ignore + view.provide_automatic_options = cls.provide_automatic_options # type: ignore + return view + + +class MethodView(View): + """Dispatches request methods to the corresponding instance methods. + For example, if you implement a ``get`` method, it will be used to + handle ``GET`` requests. + + This can be useful for defining a REST API. + + :attr:`methods` is automatically set based on the methods defined on + the class. + + See :doc:`views` for a detailed guide. + + .. code-block:: python + + class CounterAPI(MethodView): + def get(self): + return str(session.get("counter", 0)) + + def post(self): + session["counter"] = session.get("counter", 0) + 1 + return redirect(url_for("counter")) + + app.add_url_rule( + "/counter", view_func=CounterAPI.as_view("counter") + ) + """ + + def __init_subclass__(cls, **kwargs: t.Any) -> None: + super().__init_subclass__(**kwargs) + + if "methods" not in cls.__dict__: + methods = set() + + for base in cls.__bases__: + if getattr(base, "methods", None): + methods.update(base.methods) # type: ignore[attr-defined] + + for key in http_method_funcs: + if hasattr(cls, key): + methods.add(key.upper()) + + if methods: + cls.methods = methods + + def dispatch_request(self, **kwargs: t.Any) -> ft.ResponseReturnValue: + meth = getattr(self, request.method.lower(), None) + + # If the request method is HEAD and we don't have a handler for it + # retry with GET. + if meth is None and request.method == "HEAD": + meth = getattr(self, "get", None) + + assert meth is not None, f"Unimplemented method {request.method!r}" + return current_app.ensure_sync(meth)(**kwargs) diff --git a/env/lib/python3.11/site-packages/flask/wrappers.py b/env/lib/python3.11/site-packages/flask/wrappers.py new file mode 100644 index 0000000..ef7aa38 --- /dev/null +++ b/env/lib/python3.11/site-packages/flask/wrappers.py @@ -0,0 +1,173 @@ +from __future__ import annotations + +import typing as t + +from werkzeug.exceptions import BadRequest +from werkzeug.wrappers import Request as RequestBase +from werkzeug.wrappers import Response as ResponseBase + +from . import json +from .globals import current_app +from .helpers import _split_blueprint_path + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.routing import Rule + + +class Request(RequestBase): + """The request object used by default in Flask. Remembers the + matched endpoint and view arguments. + + It is what ends up as :class:`~flask.request`. If you want to replace + the request object used you can subclass this and set + :attr:`~flask.Flask.request_class` to your subclass. + + The request object is a :class:`~werkzeug.wrappers.Request` subclass and + provides all of the attributes Werkzeug defines plus a few Flask + specific ones. + """ + + json_module: t.Any = json + + #: The internal URL rule that matched the request. This can be + #: useful to inspect which methods are allowed for the URL from + #: a before/after handler (``request.url_rule.methods``) etc. + #: Though if the request's method was invalid for the URL rule, + #: the valid list is available in ``routing_exception.valid_methods`` + #: instead (an attribute of the Werkzeug exception + #: :exc:`~werkzeug.exceptions.MethodNotAllowed`) + #: because the request was never internally bound. + #: + #: .. versionadded:: 0.6 + url_rule: Rule | None = None + + #: A dict of view arguments that matched the request. If an exception + #: happened when matching, this will be ``None``. + view_args: dict[str, t.Any] | None = None + + #: If matching the URL failed, this is the exception that will be + #: raised / was raised as part of the request handling. This is + #: usually a :exc:`~werkzeug.exceptions.NotFound` exception or + #: something similar. + routing_exception: Exception | None = None + + @property + def max_content_length(self) -> int | None: # type: ignore + """Read-only view of the ``MAX_CONTENT_LENGTH`` config key.""" + if current_app: + return current_app.config["MAX_CONTENT_LENGTH"] + else: + return None + + @property + def endpoint(self) -> str | None: + """The endpoint that matched the request URL. + + This will be ``None`` if matching failed or has not been + performed yet. + + This in combination with :attr:`view_args` can be used to + reconstruct the same URL or a modified URL. + """ + if self.url_rule is not None: + return self.url_rule.endpoint + + return None + + @property + def blueprint(self) -> str | None: + """The registered name of the current blueprint. + + This will be ``None`` if the endpoint is not part of a + blueprint, or if URL matching failed or has not been performed + yet. + + This does not necessarily match the name the blueprint was + created with. It may have been nested, or registered with a + different name. + """ + endpoint = self.endpoint + + if endpoint is not None and "." in endpoint: + return endpoint.rpartition(".")[0] + + return None + + @property + def blueprints(self) -> list[str]: + """The registered names of the current blueprint upwards through + parent blueprints. + + This will be an empty list if there is no current blueprint, or + if URL matching failed. + + .. versionadded:: 2.0.1 + """ + name = self.blueprint + + if name is None: + return [] + + return _split_blueprint_path(name) + + def _load_form_data(self) -> None: + super()._load_form_data() + + # In debug mode we're replacing the files multidict with an ad-hoc + # subclass that raises a different error for key errors. + if ( + current_app + and current_app.debug + and self.mimetype != "multipart/form-data" + and not self.files + ): + from .debughelpers import attach_enctype_error_multidict + + attach_enctype_error_multidict(self) + + def on_json_loading_failed(self, e: ValueError | None) -> t.Any: + try: + return super().on_json_loading_failed(e) + except BadRequest as e: + if current_app and current_app.debug: + raise + + raise BadRequest() from e + + +class Response(ResponseBase): + """The response object that is used by default in Flask. Works like the + response object from Werkzeug but is set to have an HTML mimetype by + default. Quite often you don't have to create this object yourself because + :meth:`~flask.Flask.make_response` will take care of that for you. + + If you want to replace the response object used you can subclass this and + set :attr:`~flask.Flask.response_class` to your subclass. + + .. versionchanged:: 1.0 + JSON support is added to the response, like the request. This is useful + when testing to get the test client response data as JSON. + + .. versionchanged:: 1.0 + + Added :attr:`max_cookie_size`. + """ + + default_mimetype: str | None = "text/html" + + json_module = json + + autocorrect_location_header = False + + @property + def max_cookie_size(self) -> int: # type: ignore + """Read-only view of the :data:`MAX_COOKIE_SIZE` config key. + + See :attr:`~werkzeug.wrappers.Response.max_cookie_size` in + Werkzeug's docs. + """ + if current_app: + return current_app.config["MAX_COOKIE_SIZE"] + + # return Werkzeug's default when not in an app context + return super().max_cookie_size diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..7b190ca --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2011 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/METADATA b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/METADATA new file mode 100644 index 0000000..1d935ed --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/METADATA @@ -0,0 +1,97 @@ +Metadata-Version: 2.1 +Name: itsdangerous +Version: 2.1.2 +Summary: Safely pass data to untrusted environments and back. +Home-page: https://palletsprojects.com/p/itsdangerous/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://itsdangerous.palletsprojects.com/ +Project-URL: Changes, https://itsdangerous.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/itsdangerous/ +Project-URL: Issue Tracker, https://github.com/pallets/itsdangerous/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +ItsDangerous +============ + +... so better sign this + +Various helpers to pass data to untrusted environments and to get it +back safe and sound. Data is cryptographically signed to ensure that a +token has not been tampered with. + +It's possible to customize how data is serialized. Data is compressed as +needed. A timestamp can be added and verified automatically while +loading a token. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U itsdangerous + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +Here's how you could generate a token for transmitting a user's id and +name between web requests. + +.. code-block:: python + + from itsdangerous import URLSafeSerializer + auth_s = URLSafeSerializer("secret key", "auth") + token = auth_s.dumps({"id": 5, "name": "itsdangerous"}) + + print(token) + # eyJpZCI6NSwibmFtZSI6Iml0c2Rhbmdlcm91cyJ9.6YP6T0BaO67XP--9UzTrmurXSmg + + data = auth_s.loads(token) + print(data["name"]) + # itsdangerous + + +Donate +------ + +The Pallets organization develops and supports ItsDangerous and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://itsdangerous.palletsprojects.com/ +- Changes: https://itsdangerous.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/ItsDangerous/ +- Source Code: https://github.com/pallets/itsdangerous/ +- Issue Tracker: https://github.com/pallets/itsdangerous/issues/ +- Website: https://palletsprojects.com/p/itsdangerous/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/RECORD b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/RECORD new file mode 100644 index 0000000..d943693 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/RECORD @@ -0,0 +1,23 @@ +itsdangerous-2.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +itsdangerous-2.1.2.dist-info/LICENSE.rst,sha256=Y68JiRtr6K0aQlLtQ68PTvun_JSOIoNnvtfzxa4LCdc,1475 +itsdangerous-2.1.2.dist-info/METADATA,sha256=ThrHIJQ_6XlfbDMCAVe_hawT7IXiIxnTBIDrwxxtucQ,2928 +itsdangerous-2.1.2.dist-info/RECORD,, +itsdangerous-2.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +itsdangerous-2.1.2.dist-info/top_level.txt,sha256=gKN1OKLk81i7fbWWildJA88EQ9NhnGMSvZqhfz9ICjk,13 +itsdangerous/__init__.py,sha256=n4mkyjlIVn23pgsgCIw0MJKPdcHIetyeRpe5Fwsn8qg,876 +itsdangerous/__pycache__/__init__.cpython-311.pyc,, +itsdangerous/__pycache__/_json.cpython-311.pyc,, +itsdangerous/__pycache__/encoding.cpython-311.pyc,, +itsdangerous/__pycache__/exc.cpython-311.pyc,, +itsdangerous/__pycache__/serializer.cpython-311.pyc,, +itsdangerous/__pycache__/signer.cpython-311.pyc,, +itsdangerous/__pycache__/timed.cpython-311.pyc,, +itsdangerous/__pycache__/url_safe.cpython-311.pyc,, +itsdangerous/_json.py,sha256=wIhs_7-_XZolmyr-JvKNiy_LgAcfevYR0qhCVdlIhg8,450 +itsdangerous/encoding.py,sha256=pgh86snHC76dPLNCnPlrjR5SaYL_M8H-gWRiiLNbhCU,1419 +itsdangerous/exc.py,sha256=VFxmP2lMoSJFqxNMzWonqs35ROII4-fvCBfG0v1Tkbs,3206 +itsdangerous/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +itsdangerous/serializer.py,sha256=zgZ1-U705jHDpt62x_pmLJdryEKDNAbt5UkJtnkcCSw,11144 +itsdangerous/signer.py,sha256=QUH0iX0in-OTptMAXKU5zWMwmOCXn1fsDsubXiGdFN4,9367 +itsdangerous/timed.py,sha256=5CBWLds4Nm8-3bFVC8RxNzFjx6PSwjch8wuZ5cwcHFI,8174 +itsdangerous/url_safe.py,sha256=5bC4jSKOjWNRkWrFseifWVXUnHnPgwOLROjiOwb-eeo,2402 diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/WHEEL b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt new file mode 100644 index 0000000..e163955 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt @@ -0,0 +1 @@ +itsdangerous diff --git a/env/lib/python3.11/site-packages/itsdangerous/__init__.py b/env/lib/python3.11/site-packages/itsdangerous/__init__.py new file mode 100644 index 0000000..fdb2dfd --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/__init__.py @@ -0,0 +1,19 @@ +from .encoding import base64_decode as base64_decode +from .encoding import base64_encode as base64_encode +from .encoding import want_bytes as want_bytes +from .exc import BadData as BadData +from .exc import BadHeader as BadHeader +from .exc import BadPayload as BadPayload +from .exc import BadSignature as BadSignature +from .exc import BadTimeSignature as BadTimeSignature +from .exc import SignatureExpired as SignatureExpired +from .serializer import Serializer as Serializer +from .signer import HMACAlgorithm as HMACAlgorithm +from .signer import NoneAlgorithm as NoneAlgorithm +from .signer import Signer as Signer +from .timed import TimedSerializer as TimedSerializer +from .timed import TimestampSigner as TimestampSigner +from .url_safe import URLSafeSerializer as URLSafeSerializer +from .url_safe import URLSafeTimedSerializer as URLSafeTimedSerializer + +__version__ = "2.1.2" diff --git a/env/lib/python3.11/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1312402360b3fef0b174cea43c34e7aeb394ec14 GIT binary patch literal 1162 zcmZvaO>fgM7{{Gr>pD0fE+C;E*3dFIO^ETPNx+0CTzm;`V_IuYQrT&{?!>p? zBOnfZ2EIa0DC!A`6E~#YcH*%$rWxw|_2~Ef{rIsR`LpXf2*%fMF9M!N=%-5lj@$*D zeFyl20u)#rg%-9f#W~;{&S}mA=W$;17T*dBxS+WJT*O7qMc@)HX)XcV*w$sn&v8S9oIFxzzy8cT;t8Kgt+~C_`2X{0#fp_o@ za0_1x+C$Xc{$;`Cy4Knq5lJ8H`2iir0li|-=)!Q8Buf0zDxnglOOHwLlq3YO40uRM zKm{ZYB(KSe$0UHP3fYiNB9hF7YTAJOEeomPT_(>?W=v4E&KXj{2xq6dr+fJ7;K>1> z#DXQ$5T@OuIHFgLqUxb*>#BWVEZ3GyNI1K!YQB5(a!5WB(3WRa#QPR-vqddR?LdVeQDvD~YNyic+6hxT>V4LS5N~ zL|s5Ml+jd%Jr~@Ua9Gh&UR!w;-(OH6SseNP7jy;|I)Cp?=)KrG< tr=~VJcT;32Lxa@RCg*mF3~lQC|L*%KGL)g`si_~e&c}-S#0~h9e*khfQfmMJ literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc b/env/lib/python3.11/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cadcf823306da972350fb1fc2808cf79e076bde6 GIT binary patch literal 1400 zcmZ`(&1)M+6rb5IZDhHouA#V>E_GYjG}Ss0v`|c;6jEqGfrhjoT9&b9WUnmkZf8bO zl$zp$k0Im`aE>|zH^mfk=)KUtKrV)wfkL44(3^sC@~Lk|AGYK6Y39xEy?Hb5W8dh< z`S~IO`uW!{=x-RIzqBwVX97m60QL|?6t_?fo7Jk>7WxcPYZp;_-$LjB=9p>@#Wzvt z{G-KceWEo>VIqv~1K2~%+*Y$FuG!3?7IT~4)SMNV->{aaB6xw_OH;AoP-oZK2k~I4 zLbW2?;hwdk-Z{x;g@#897tYO5AL6~FO7W*zJ12Gd`OO>EyVt(vB+nTS2+ukx4VofL zgLXzcEf&a4A_F0Ll8d0bnMfw!7%QtnPI|43P~~wZJ3OsJNoQmO(sOhf*dCH+_L?)i zjrIW_%wz}*S3^s=vG%WAeY*%Tci|49t%8$pqs^?%A|c70sN3yEdA7wkNlB|Gle&ln zqN3CQ%%6oD%ODpB8S0e$TzYn2rkqt0Nq@X0-V34nfjK6Z;P9=<2WU47RRa>$Kx&qT#DoGI;1t(Da0|&>RJuG0=>~@&(np1H3ME$qJifIqy`xBIvH z#iQ5X8zRs=wSMsoIAzam%?Ch7w%*J7U=Zj5;uSiZH)0TS{h8p YF?ww<9Yb#pgYS#%xz@e-j}7DSUw(r{5dZ)H literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/itsdangerous/__pycache__/encoding.cpython-311.pyc b/env/lib/python3.11/site-packages/itsdangerous/__pycache__/encoding.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e2640443c35bd293440ebafa71551f8290dbc8d GIT binary patch literal 2987 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 KqhnOc%Krrd3P1q> literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc b/env/lib/python3.11/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e251705219cf5f1d91e956b8b6ab9d3a9ddebfe3 GIT binary patch literal 13670 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 _t.Any: + return _json.loads(payload) + + @staticmethod + def dumps(obj: _t.Any, **kwargs: _t.Any) -> str: + kwargs.setdefault("ensure_ascii", False) + kwargs.setdefault("separators", (",", ":")) + return _json.dumps(obj, **kwargs) diff --git a/env/lib/python3.11/site-packages/itsdangerous/encoding.py b/env/lib/python3.11/site-packages/itsdangerous/encoding.py new file mode 100644 index 0000000..edb04d1 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/encoding.py @@ -0,0 +1,54 @@ +import base64 +import string +import struct +import typing as _t + +from .exc import BadData + +_t_str_bytes = _t.Union[str, bytes] + + +def want_bytes( + s: _t_str_bytes, encoding: str = "utf-8", errors: str = "strict" +) -> bytes: + if isinstance(s, str): + s = s.encode(encoding, errors) + + return s + + +def base64_encode(string: _t_str_bytes) -> bytes: + """Base64 encode a string of bytes or text. The resulting bytes are + safe to use in URLs. + """ + string = want_bytes(string) + return base64.urlsafe_b64encode(string).rstrip(b"=") + + +def base64_decode(string: _t_str_bytes) -> bytes: + """Base64 decode a URL-safe string of bytes or text. The result is + bytes. + """ + string = want_bytes(string, encoding="ascii", errors="ignore") + string += b"=" * (-len(string) % 4) + + try: + return base64.urlsafe_b64decode(string) + except (TypeError, ValueError) as e: + raise BadData("Invalid base64-encoded data") from e + + +# The alphabet used by base64.urlsafe_* +_base64_alphabet = f"{string.ascii_letters}{string.digits}-_=".encode("ascii") + +_int64_struct = struct.Struct(">Q") +_int_to_bytes = _int64_struct.pack +_bytes_to_int = _t.cast("_t.Callable[[bytes], _t.Tuple[int]]", _int64_struct.unpack) + + +def int_to_bytes(num: int) -> bytes: + return _int_to_bytes(num).lstrip(b"\x00") + + +def bytes_to_int(bytestr: bytes) -> int: + return _bytes_to_int(bytestr.rjust(8, b"\x00"))[0] diff --git a/env/lib/python3.11/site-packages/itsdangerous/exc.py b/env/lib/python3.11/site-packages/itsdangerous/exc.py new file mode 100644 index 0000000..c38a6af --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/exc.py @@ -0,0 +1,107 @@ +import typing as _t +from datetime import datetime + +_t_opt_any = _t.Optional[_t.Any] +_t_opt_exc = _t.Optional[Exception] + + +class BadData(Exception): + """Raised if bad data of any sort was encountered. This is the base + for all exceptions that ItsDangerous defines. + + .. versionadded:: 0.15 + """ + + def __init__(self, message: str): + super().__init__(message) + self.message = message + + def __str__(self) -> str: + return self.message + + +class BadSignature(BadData): + """Raised if a signature does not match.""" + + def __init__(self, message: str, payload: _t_opt_any = None): + super().__init__(message) + + #: The payload that failed the signature test. In some + #: situations you might still want to inspect this, even if + #: you know it was tampered with. + #: + #: .. versionadded:: 0.14 + self.payload: _t_opt_any = payload + + +class BadTimeSignature(BadSignature): + """Raised if a time-based signature is invalid. This is a subclass + of :class:`BadSignature`. + """ + + def __init__( + self, + message: str, + payload: _t_opt_any = None, + date_signed: _t.Optional[datetime] = None, + ): + super().__init__(message, payload) + + #: If the signature expired this exposes the date of when the + #: signature was created. This can be helpful in order to + #: tell the user how long a link has been gone stale. + #: + #: .. versionchanged:: 2.0 + #: The datetime value is timezone-aware rather than naive. + #: + #: .. versionadded:: 0.14 + self.date_signed = date_signed + + +class SignatureExpired(BadTimeSignature): + """Raised if a signature timestamp is older than ``max_age``. This + is a subclass of :exc:`BadTimeSignature`. + """ + + +class BadHeader(BadSignature): + """Raised if a signed header is invalid in some form. This only + happens for serializers that have a header that goes with the + signature. + + .. versionadded:: 0.24 + """ + + def __init__( + self, + message: str, + payload: _t_opt_any = None, + header: _t_opt_any = None, + original_error: _t_opt_exc = None, + ): + super().__init__(message, payload) + + #: If the header is actually available but just malformed it + #: might be stored here. + self.header: _t_opt_any = header + + #: If available, the error that indicates why the payload was + #: not valid. This might be ``None``. + self.original_error: _t_opt_exc = original_error + + +class BadPayload(BadData): + """Raised if a payload is invalid. This could happen if the payload + is loaded despite an invalid signature, or if there is a mismatch + between the serializer and deserializer. The original exception + that occurred during loading is stored on as :attr:`original_error`. + + .. versionadded:: 0.15 + """ + + def __init__(self, message: str, original_error: _t_opt_exc = None): + super().__init__(message) + + #: If available, the error that indicates why the payload was + #: not valid. This might be ``None``. + self.original_error: _t_opt_exc = original_error diff --git a/env/lib/python3.11/site-packages/itsdangerous/py.typed b/env/lib/python3.11/site-packages/itsdangerous/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.11/site-packages/itsdangerous/serializer.py b/env/lib/python3.11/site-packages/itsdangerous/serializer.py new file mode 100644 index 0000000..9f4a84a --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/serializer.py @@ -0,0 +1,295 @@ +import json +import typing as _t + +from .encoding import want_bytes +from .exc import BadPayload +from .exc import BadSignature +from .signer import _make_keys_list +from .signer import Signer + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_kwargs = _t.Dict[str, _t.Any] +_t_opt_kwargs = _t.Optional[_t_kwargs] +_t_signer = _t.Type[Signer] +_t_fallbacks = _t.List[_t.Union[_t_kwargs, _t.Tuple[_t_signer, _t_kwargs], _t_signer]] +_t_load_unsafe = _t.Tuple[bool, _t.Any] +_t_secret_key = _t.Union[_t.Iterable[_t_str_bytes], _t_str_bytes] + + +def is_text_serializer(serializer: _t.Any) -> bool: + """Checks whether a serializer generates text or binary.""" + return isinstance(serializer.dumps({}), str) + + +class Serializer: + """A serializer wraps a :class:`~itsdangerous.signer.Signer` to + enable serializing and securely signing data other than bytes. It + can unsign to verify that the data hasn't been changed. + + The serializer provides :meth:`dumps` and :meth:`loads`, similar to + :mod:`json`, and by default uses :mod:`json` internally to serialize + the data to bytes. + + The secret key should be a random string of ``bytes`` and should not + be saved to code or version control. Different salts should be used + to distinguish signing in different contexts. See :doc:`/concepts` + for information about the security of the secret key and salt. + + :param secret_key: The secret key to sign and verify with. Can be a + list of keys, oldest to newest, to support key rotation. + :param salt: Extra key to combine with ``secret_key`` to distinguish + signatures in different contexts. + :param serializer: An object that provides ``dumps`` and ``loads`` + methods for serializing data to a string. Defaults to + :attr:`default_serializer`, which defaults to :mod:`json`. + :param serializer_kwargs: Keyword arguments to pass when calling + ``serializer.dumps``. + :param signer: A ``Signer`` class to instantiate when signing data. + Defaults to :attr:`default_signer`, which defaults to + :class:`~itsdangerous.signer.Signer`. + :param signer_kwargs: Keyword arguments to pass when instantiating + the ``Signer`` class. + :param fallback_signers: List of signer parameters to try when + unsigning with the default signer fails. Each item can be a dict + of ``signer_kwargs``, a ``Signer`` class, or a tuple of + ``(signer, signer_kwargs)``. Defaults to + :attr:`default_fallback_signers`. + + .. versionchanged:: 2.0 + Added support for key rotation by passing a list to + ``secret_key``. + + .. versionchanged:: 2.0 + Removed the default SHA-512 fallback signer from + ``default_fallback_signers``. + + .. versionchanged:: 1.1 + Added support for ``fallback_signers`` and configured a default + SHA-512 fallback. This fallback is for users who used the yanked + 1.0.0 release which defaulted to SHA-512. + + .. versionchanged:: 0.14 + The ``signer`` and ``signer_kwargs`` parameters were added to + the constructor. + """ + + #: The default serialization module to use to serialize data to a + #: string internally. The default is :mod:`json`, but can be changed + #: to any object that provides ``dumps`` and ``loads`` methods. + default_serializer: _t.Any = json + + #: The default ``Signer`` class to instantiate when signing data. + #: The default is :class:`itsdangerous.signer.Signer`. + default_signer: _t_signer = Signer + + #: The default fallback signers to try when unsigning fails. + default_fallback_signers: _t_fallbacks = [] + + def __init__( + self, + secret_key: _t_secret_key, + salt: _t_opt_str_bytes = b"itsdangerous", + serializer: _t.Any = None, + serializer_kwargs: _t_opt_kwargs = None, + signer: _t.Optional[_t_signer] = None, + signer_kwargs: _t_opt_kwargs = None, + fallback_signers: _t.Optional[_t_fallbacks] = None, + ): + #: The list of secret keys to try for verifying signatures, from + #: oldest to newest. The newest (last) key is used for signing. + #: + #: This allows a key rotation system to keep a list of allowed + #: keys and remove expired ones. + self.secret_keys: _t.List[bytes] = _make_keys_list(secret_key) + + if salt is not None: + salt = want_bytes(salt) + # if salt is None then the signer's default is used + + self.salt = salt + + if serializer is None: + serializer = self.default_serializer + + self.serializer: _t.Any = serializer + self.is_text_serializer: bool = is_text_serializer(serializer) + + if signer is None: + signer = self.default_signer + + self.signer: _t_signer = signer + self.signer_kwargs: _t_kwargs = signer_kwargs or {} + + if fallback_signers is None: + fallback_signers = list(self.default_fallback_signers or ()) + + self.fallback_signers: _t_fallbacks = fallback_signers + self.serializer_kwargs: _t_kwargs = serializer_kwargs or {} + + @property + def secret_key(self) -> bytes: + """The newest (last) entry in the :attr:`secret_keys` list. This + is for compatibility from before key rotation support was added. + """ + return self.secret_keys[-1] + + def load_payload( + self, payload: bytes, serializer: _t.Optional[_t.Any] = None + ) -> _t.Any: + """Loads the encoded object. This function raises + :class:`.BadPayload` if the payload is not valid. The + ``serializer`` parameter can be used to override the serializer + stored on the class. The encoded ``payload`` should always be + bytes. + """ + if serializer is None: + serializer = self.serializer + is_text = self.is_text_serializer + else: + is_text = is_text_serializer(serializer) + + try: + if is_text: + return serializer.loads(payload.decode("utf-8")) + + return serializer.loads(payload) + except Exception as e: + raise BadPayload( + "Could not load the payload because an exception" + " occurred on unserializing the data.", + original_error=e, + ) from e + + def dump_payload(self, obj: _t.Any) -> bytes: + """Dumps the encoded object. The return value is always bytes. + If the internal serializer returns text, the value will be + encoded as UTF-8. + """ + return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs)) + + def make_signer(self, salt: _t_opt_str_bytes = None) -> Signer: + """Creates a new instance of the signer to be used. The default + implementation uses the :class:`.Signer` base class. + """ + if salt is None: + salt = self.salt + + return self.signer(self.secret_keys, salt=salt, **self.signer_kwargs) + + def iter_unsigners(self, salt: _t_opt_str_bytes = None) -> _t.Iterator[Signer]: + """Iterates over all signers to be tried for unsigning. Starts + with the configured signer, then constructs each signer + specified in ``fallback_signers``. + """ + if salt is None: + salt = self.salt + + yield self.make_signer(salt) + + for fallback in self.fallback_signers: + if isinstance(fallback, dict): + kwargs = fallback + fallback = self.signer + elif isinstance(fallback, tuple): + fallback, kwargs = fallback + else: + kwargs = self.signer_kwargs + + for secret_key in self.secret_keys: + yield fallback(secret_key, salt=salt, **kwargs) + + def dumps(self, obj: _t.Any, salt: _t_opt_str_bytes = None) -> _t_str_bytes: + """Returns a signed string serialized with the internal + serializer. The return value can be either a byte or unicode + string depending on the format of the internal serializer. + """ + payload = want_bytes(self.dump_payload(obj)) + rv = self.make_signer(salt).sign(payload) + + if self.is_text_serializer: + return rv.decode("utf-8") + + return rv + + def dump(self, obj: _t.Any, f: _t.IO, salt: _t_opt_str_bytes = None) -> None: + """Like :meth:`dumps` but dumps into a file. The file handle has + to be compatible with what the internal serializer expects. + """ + f.write(self.dumps(obj, salt)) + + def loads( + self, s: _t_str_bytes, salt: _t_opt_str_bytes = None, **kwargs: _t.Any + ) -> _t.Any: + """Reverse of :meth:`dumps`. Raises :exc:`.BadSignature` if the + signature validation fails. + """ + s = want_bytes(s) + last_exception = None + + for signer in self.iter_unsigners(salt): + try: + return self.load_payload(signer.unsign(s)) + except BadSignature as err: + last_exception = err + + raise _t.cast(BadSignature, last_exception) + + def load(self, f: _t.IO, salt: _t_opt_str_bytes = None) -> _t.Any: + """Like :meth:`loads` but loads from a file.""" + return self.loads(f.read(), salt) + + def loads_unsafe( + self, s: _t_str_bytes, salt: _t_opt_str_bytes = None + ) -> _t_load_unsafe: + """Like :meth:`loads` but without verifying the signature. This + is potentially very dangerous to use depending on how your + serializer works. The return value is ``(signature_valid, + payload)`` instead of just the payload. The first item will be a + boolean that indicates if the signature is valid. This function + never fails. + + Use it for debugging only and if you know that your serializer + module is not exploitable (for example, do not use it with a + pickle serializer). + + .. versionadded:: 0.15 + """ + return self._loads_unsafe_impl(s, salt) + + def _loads_unsafe_impl( + self, + s: _t_str_bytes, + salt: _t_opt_str_bytes, + load_kwargs: _t_opt_kwargs = None, + load_payload_kwargs: _t_opt_kwargs = None, + ) -> _t_load_unsafe: + """Low level helper function to implement :meth:`loads_unsafe` + in serializer subclasses. + """ + if load_kwargs is None: + load_kwargs = {} + + try: + return True, self.loads(s, salt=salt, **load_kwargs) + except BadSignature as e: + if e.payload is None: + return False, None + + if load_payload_kwargs is None: + load_payload_kwargs = {} + + try: + return ( + False, + self.load_payload(e.payload, **load_payload_kwargs), + ) + except BadPayload: + return False, None + + def load_unsafe(self, f: _t.IO, salt: _t_opt_str_bytes = None) -> _t_load_unsafe: + """Like :meth:`loads_unsafe` but loads from a file. + + .. versionadded:: 0.15 + """ + return self.loads_unsafe(f.read(), salt=salt) diff --git a/env/lib/python3.11/site-packages/itsdangerous/signer.py b/env/lib/python3.11/site-packages/itsdangerous/signer.py new file mode 100644 index 0000000..aa12005 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/signer.py @@ -0,0 +1,257 @@ +import hashlib +import hmac +import typing as _t + +from .encoding import _base64_alphabet +from .encoding import base64_decode +from .encoding import base64_encode +from .encoding import want_bytes +from .exc import BadSignature + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_secret_key = _t.Union[_t.Iterable[_t_str_bytes], _t_str_bytes] + + +class SigningAlgorithm: + """Subclasses must implement :meth:`get_signature` to provide + signature generation functionality. + """ + + def get_signature(self, key: bytes, value: bytes) -> bytes: + """Returns the signature for the given key and value.""" + raise NotImplementedError() + + def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool: + """Verifies the given signature matches the expected + signature. + """ + return hmac.compare_digest(sig, self.get_signature(key, value)) + + +class NoneAlgorithm(SigningAlgorithm): + """Provides an algorithm that does not perform any signing and + returns an empty signature. + """ + + def get_signature(self, key: bytes, value: bytes) -> bytes: + return b"" + + +class HMACAlgorithm(SigningAlgorithm): + """Provides signature generation using HMACs.""" + + #: The digest method to use with the MAC algorithm. This defaults to + #: SHA1, but can be changed to any other function in the hashlib + #: module. + default_digest_method: _t.Any = staticmethod(hashlib.sha1) + + def __init__(self, digest_method: _t.Any = None): + if digest_method is None: + digest_method = self.default_digest_method + + self.digest_method: _t.Any = digest_method + + def get_signature(self, key: bytes, value: bytes) -> bytes: + mac = hmac.new(key, msg=value, digestmod=self.digest_method) + return mac.digest() + + +def _make_keys_list(secret_key: _t_secret_key) -> _t.List[bytes]: + if isinstance(secret_key, (str, bytes)): + return [want_bytes(secret_key)] + + return [want_bytes(s) for s in secret_key] + + +class Signer: + """A signer securely signs bytes, then unsigns them to verify that + the value hasn't been changed. + + The secret key should be a random string of ``bytes`` and should not + be saved to code or version control. Different salts should be used + to distinguish signing in different contexts. See :doc:`/concepts` + for information about the security of the secret key and salt. + + :param secret_key: The secret key to sign and verify with. Can be a + list of keys, oldest to newest, to support key rotation. + :param salt: Extra key to combine with ``secret_key`` to distinguish + signatures in different contexts. + :param sep: Separator between the signature and value. + :param key_derivation: How to derive the signing key from the secret + key and salt. Possible values are ``concat``, ``django-concat``, + or ``hmac``. Defaults to :attr:`default_key_derivation`, which + defaults to ``django-concat``. + :param digest_method: Hash function to use when generating the HMAC + signature. Defaults to :attr:`default_digest_method`, which + defaults to :func:`hashlib.sha1`. Note that the security of the + hash alone doesn't apply when used intermediately in HMAC. + :param algorithm: A :class:`SigningAlgorithm` instance to use + instead of building a default :class:`HMACAlgorithm` with the + ``digest_method``. + + .. versionchanged:: 2.0 + Added support for key rotation by passing a list to + ``secret_key``. + + .. versionchanged:: 0.18 + ``algorithm`` was added as an argument to the class constructor. + + .. versionchanged:: 0.14 + ``key_derivation`` and ``digest_method`` were added as arguments + to the class constructor. + """ + + #: The default digest method to use for the signer. The default is + #: :func:`hashlib.sha1`, but can be changed to any :mod:`hashlib` or + #: compatible object. Note that the security of the hash alone + #: doesn't apply when used intermediately in HMAC. + #: + #: .. versionadded:: 0.14 + default_digest_method: _t.Any = staticmethod(hashlib.sha1) + + #: The default scheme to use to derive the signing key from the + #: secret key and salt. The default is ``django-concat``. Possible + #: values are ``concat``, ``django-concat``, and ``hmac``. + #: + #: .. versionadded:: 0.14 + default_key_derivation: str = "django-concat" + + def __init__( + self, + secret_key: _t_secret_key, + salt: _t_opt_str_bytes = b"itsdangerous.Signer", + sep: _t_str_bytes = b".", + key_derivation: _t.Optional[str] = None, + digest_method: _t.Optional[_t.Any] = None, + algorithm: _t.Optional[SigningAlgorithm] = None, + ): + #: The list of secret keys to try for verifying signatures, from + #: oldest to newest. The newest (last) key is used for signing. + #: + #: This allows a key rotation system to keep a list of allowed + #: keys and remove expired ones. + self.secret_keys: _t.List[bytes] = _make_keys_list(secret_key) + self.sep: bytes = want_bytes(sep) + + if self.sep in _base64_alphabet: + raise ValueError( + "The given separator cannot be used because it may be" + " contained in the signature itself. ASCII letters," + " digits, and '-_=' must not be used." + ) + + if salt is not None: + salt = want_bytes(salt) + else: + salt = b"itsdangerous.Signer" + + self.salt = salt + + if key_derivation is None: + key_derivation = self.default_key_derivation + + self.key_derivation: str = key_derivation + + if digest_method is None: + digest_method = self.default_digest_method + + self.digest_method: _t.Any = digest_method + + if algorithm is None: + algorithm = HMACAlgorithm(self.digest_method) + + self.algorithm: SigningAlgorithm = algorithm + + @property + def secret_key(self) -> bytes: + """The newest (last) entry in the :attr:`secret_keys` list. This + is for compatibility from before key rotation support was added. + """ + return self.secret_keys[-1] + + def derive_key(self, secret_key: _t_opt_str_bytes = None) -> bytes: + """This method is called to derive the key. The default key + derivation choices can be overridden here. Key derivation is not + intended to be used as a security method to make a complex key + out of a short password. Instead you should use large random + secret keys. + + :param secret_key: A specific secret key to derive from. + Defaults to the last item in :attr:`secret_keys`. + + .. versionchanged:: 2.0 + Added the ``secret_key`` parameter. + """ + if secret_key is None: + secret_key = self.secret_keys[-1] + else: + secret_key = want_bytes(secret_key) + + if self.key_derivation == "concat": + return _t.cast(bytes, self.digest_method(self.salt + secret_key).digest()) + elif self.key_derivation == "django-concat": + return _t.cast( + bytes, self.digest_method(self.salt + b"signer" + secret_key).digest() + ) + elif self.key_derivation == "hmac": + mac = hmac.new(secret_key, digestmod=self.digest_method) + mac.update(self.salt) + return mac.digest() + elif self.key_derivation == "none": + return secret_key + else: + raise TypeError("Unknown key derivation method") + + def get_signature(self, value: _t_str_bytes) -> bytes: + """Returns the signature for the given value.""" + value = want_bytes(value) + key = self.derive_key() + sig = self.algorithm.get_signature(key, value) + return base64_encode(sig) + + def sign(self, value: _t_str_bytes) -> bytes: + """Signs the given string.""" + value = want_bytes(value) + return value + self.sep + self.get_signature(value) + + def verify_signature(self, value: _t_str_bytes, sig: _t_str_bytes) -> bool: + """Verifies the signature for the given value.""" + try: + sig = base64_decode(sig) + except Exception: + return False + + value = want_bytes(value) + + for secret_key in reversed(self.secret_keys): + key = self.derive_key(secret_key) + + if self.algorithm.verify_signature(key, value, sig): + return True + + return False + + def unsign(self, signed_value: _t_str_bytes) -> bytes: + """Unsigns the given string.""" + signed_value = want_bytes(signed_value) + + if self.sep not in signed_value: + raise BadSignature(f"No {self.sep!r} found in value") + + value, sig = signed_value.rsplit(self.sep, 1) + + if self.verify_signature(value, sig): + return value + + raise BadSignature(f"Signature {sig!r} does not match", payload=value) + + def validate(self, signed_value: _t_str_bytes) -> bool: + """Only validates the given signed value. Returns ``True`` if + the signature exists and is valid. + """ + try: + self.unsign(signed_value) + return True + except BadSignature: + return False diff --git a/env/lib/python3.11/site-packages/itsdangerous/timed.py b/env/lib/python3.11/site-packages/itsdangerous/timed.py new file mode 100644 index 0000000..cad8da3 --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/timed.py @@ -0,0 +1,234 @@ +import time +import typing +import typing as _t +from datetime import datetime +from datetime import timezone + +from .encoding import base64_decode +from .encoding import base64_encode +from .encoding import bytes_to_int +from .encoding import int_to_bytes +from .encoding import want_bytes +from .exc import BadSignature +from .exc import BadTimeSignature +from .exc import SignatureExpired +from .serializer import Serializer +from .signer import Signer + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_opt_int = _t.Optional[int] + +if _t.TYPE_CHECKING: + import typing_extensions as _te + + +class TimestampSigner(Signer): + """Works like the regular :class:`.Signer` but also records the time + of the signing and can be used to expire signatures. The + :meth:`unsign` method can raise :exc:`.SignatureExpired` if the + unsigning failed because the signature is expired. + """ + + def get_timestamp(self) -> int: + """Returns the current timestamp. The function must return an + integer. + """ + return int(time.time()) + + def timestamp_to_datetime(self, ts: int) -> datetime: + """Convert the timestamp from :meth:`get_timestamp` into an + aware :class`datetime.datetime` in UTC. + + .. versionchanged:: 2.0 + The timestamp is returned as a timezone-aware ``datetime`` + in UTC rather than a naive ``datetime`` assumed to be UTC. + """ + return datetime.fromtimestamp(ts, tz=timezone.utc) + + def sign(self, value: _t_str_bytes) -> bytes: + """Signs the given string and also attaches time information.""" + value = want_bytes(value) + timestamp = base64_encode(int_to_bytes(self.get_timestamp())) + sep = want_bytes(self.sep) + value = value + sep + timestamp + return value + sep + self.get_signature(value) + + # Ignore overlapping signatures check, return_timestamp is the only + # parameter that affects the return type. + + @typing.overload + def unsign( # type: ignore + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: "_te.Literal[False]" = False, + ) -> bytes: + ... + + @typing.overload + def unsign( + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: "_te.Literal[True]" = True, + ) -> _t.Tuple[bytes, datetime]: + ... + + def unsign( + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: bool = False, + ) -> _t.Union[_t.Tuple[bytes, datetime], bytes]: + """Works like the regular :meth:`.Signer.unsign` but can also + validate the time. See the base docstring of the class for + the general behavior. If ``return_timestamp`` is ``True`` the + timestamp of the signature will be returned as an aware + :class:`datetime.datetime` object in UTC. + + .. versionchanged:: 2.0 + The timestamp is returned as a timezone-aware ``datetime`` + in UTC rather than a naive ``datetime`` assumed to be UTC. + """ + try: + result = super().unsign(signed_value) + sig_error = None + except BadSignature as e: + sig_error = e + result = e.payload or b"" + + sep = want_bytes(self.sep) + + # If there is no timestamp in the result there is something + # seriously wrong. In case there was a signature error, we raise + # that one directly, otherwise we have a weird situation in + # which we shouldn't have come except someone uses a time-based + # serializer on non-timestamp data, so catch that. + if sep not in result: + if sig_error: + raise sig_error + + raise BadTimeSignature("timestamp missing", payload=result) + + value, ts_bytes = result.rsplit(sep, 1) + ts_int: _t_opt_int = None + ts_dt: _t.Optional[datetime] = None + + try: + ts_int = bytes_to_int(base64_decode(ts_bytes)) + except Exception: + pass + + # Signature is *not* okay. Raise a proper error now that we have + # split the value and the timestamp. + if sig_error is not None: + if ts_int is not None: + try: + ts_dt = self.timestamp_to_datetime(ts_int) + except (ValueError, OSError, OverflowError) as exc: + # Windows raises OSError + # 32-bit raises OverflowError + raise BadTimeSignature( + "Malformed timestamp", payload=value + ) from exc + + raise BadTimeSignature(str(sig_error), payload=value, date_signed=ts_dt) + + # Signature was okay but the timestamp is actually not there or + # malformed. Should not happen, but we handle it anyway. + if ts_int is None: + raise BadTimeSignature("Malformed timestamp", payload=value) + + # Check timestamp is not older than max_age + if max_age is not None: + age = self.get_timestamp() - ts_int + + if age > max_age: + raise SignatureExpired( + f"Signature age {age} > {max_age} seconds", + payload=value, + date_signed=self.timestamp_to_datetime(ts_int), + ) + + if age < 0: + raise SignatureExpired( + f"Signature age {age} < 0 seconds", + payload=value, + date_signed=self.timestamp_to_datetime(ts_int), + ) + + if return_timestamp: + return value, self.timestamp_to_datetime(ts_int) + + return value + + def validate(self, signed_value: _t_str_bytes, max_age: _t_opt_int = None) -> bool: + """Only validates the given signed value. Returns ``True`` if + the signature exists and is valid.""" + try: + self.unsign(signed_value, max_age=max_age) + return True + except BadSignature: + return False + + +class TimedSerializer(Serializer): + """Uses :class:`TimestampSigner` instead of the default + :class:`.Signer`. + """ + + default_signer: _t.Type[TimestampSigner] = TimestampSigner + + def iter_unsigners( + self, salt: _t_opt_str_bytes = None + ) -> _t.Iterator[TimestampSigner]: + return _t.cast("_t.Iterator[TimestampSigner]", super().iter_unsigners(salt)) + + # TODO: Signature is incompatible because parameters were added + # before salt. + + def loads( # type: ignore + self, + s: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: bool = False, + salt: _t_opt_str_bytes = None, + ) -> _t.Any: + """Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the + signature validation fails. If a ``max_age`` is provided it will + ensure the signature is not older than that time in seconds. In + case the signature is outdated, :exc:`.SignatureExpired` is + raised. All arguments are forwarded to the signer's + :meth:`~TimestampSigner.unsign` method. + """ + s = want_bytes(s) + last_exception = None + + for signer in self.iter_unsigners(salt): + try: + base64d, timestamp = signer.unsign( + s, max_age=max_age, return_timestamp=True + ) + payload = self.load_payload(base64d) + + if return_timestamp: + return payload, timestamp + + return payload + except SignatureExpired: + # The signature was unsigned successfully but was + # expired. Do not try the next signer. + raise + except BadSignature as err: + last_exception = err + + raise _t.cast(BadSignature, last_exception) + + def loads_unsafe( # type: ignore + self, + s: _t_str_bytes, + max_age: _t_opt_int = None, + salt: _t_opt_str_bytes = None, + ) -> _t.Tuple[bool, _t.Any]: + return self._loads_unsafe_impl(s, salt, load_kwargs={"max_age": max_age}) diff --git a/env/lib/python3.11/site-packages/itsdangerous/url_safe.py b/env/lib/python3.11/site-packages/itsdangerous/url_safe.py new file mode 100644 index 0000000..d5a9b0c --- /dev/null +++ b/env/lib/python3.11/site-packages/itsdangerous/url_safe.py @@ -0,0 +1,80 @@ +import typing as _t +import zlib + +from ._json import _CompactJSON +from .encoding import base64_decode +from .encoding import base64_encode +from .exc import BadPayload +from .serializer import Serializer +from .timed import TimedSerializer + + +class URLSafeSerializerMixin(Serializer): + """Mixed in with a regular serializer it will attempt to zlib + compress the string to make it shorter if necessary. It will also + base64 encode the string so that it can safely be placed in a URL. + """ + + default_serializer = _CompactJSON + + def load_payload( + self, + payload: bytes, + *args: _t.Any, + serializer: _t.Optional[_t.Any] = None, + **kwargs: _t.Any, + ) -> _t.Any: + decompress = False + + if payload.startswith(b"."): + payload = payload[1:] + decompress = True + + try: + json = base64_decode(payload) + except Exception as e: + raise BadPayload( + "Could not base64 decode the payload because of an exception", + original_error=e, + ) from e + + if decompress: + try: + json = zlib.decompress(json) + except Exception as e: + raise BadPayload( + "Could not zlib decompress the payload before decoding the payload", + original_error=e, + ) from e + + return super().load_payload(json, *args, **kwargs) + + def dump_payload(self, obj: _t.Any) -> bytes: + json = super().dump_payload(obj) + is_compressed = False + compressed = zlib.compress(json) + + if len(compressed) < (len(json) - 1): + json = compressed + is_compressed = True + + base64d = base64_encode(json) + + if is_compressed: + base64d = b"." + base64d + + return base64d + + +class URLSafeSerializer(URLSafeSerializerMixin, Serializer): + """Works like :class:`.Serializer` but dumps and loads into a URL + safe string consisting of the upper and lowercase character of the + alphabet as well as ``'_'``, ``'-'`` and ``'.'``. + """ + + +class URLSafeTimedSerializer(URLSafeSerializerMixin, TimedSerializer): + """Works like :class:`.TimedSerializer` but dumps and loads into a + URL safe string consisting of the upper and lowercase character of + the alphabet as well as ``'_'``, ``'-'`` and ``'.'``. + """ diff --git a/env/lib/python3.11/site-packages/jinja2/__init__.py b/env/lib/python3.11/site-packages/jinja2/__init__.py new file mode 100644 index 0000000..e323926 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/__init__.py @@ -0,0 +1,37 @@ +"""Jinja is a template engine written in pure Python. It provides a +non-XML syntax that supports inline expressions and an optional +sandboxed environment. +""" +from .bccache import BytecodeCache as BytecodeCache +from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache +from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache +from .environment import Environment as Environment +from .environment import Template as Template +from .exceptions import TemplateAssertionError as TemplateAssertionError +from .exceptions import TemplateError as TemplateError +from .exceptions import TemplateNotFound as TemplateNotFound +from .exceptions import TemplateRuntimeError as TemplateRuntimeError +from .exceptions import TemplatesNotFound as TemplatesNotFound +from .exceptions import TemplateSyntaxError as TemplateSyntaxError +from .exceptions import UndefinedError as UndefinedError +from .loaders import BaseLoader as BaseLoader +from .loaders import ChoiceLoader as ChoiceLoader +from .loaders import DictLoader as DictLoader +from .loaders import FileSystemLoader as FileSystemLoader +from .loaders import FunctionLoader as FunctionLoader +from .loaders import ModuleLoader as ModuleLoader +from .loaders import PackageLoader as PackageLoader +from .loaders import PrefixLoader as PrefixLoader +from .runtime import ChainableUndefined as ChainableUndefined +from .runtime import DebugUndefined as DebugUndefined +from .runtime import make_logging_undefined as make_logging_undefined +from .runtime import StrictUndefined as StrictUndefined +from .runtime import Undefined as Undefined +from .utils import clear_caches as clear_caches +from .utils import is_undefined as is_undefined +from .utils import pass_context as pass_context +from .utils import pass_environment as pass_environment +from .utils import pass_eval_context as pass_eval_context +from .utils import select_autoescape as select_autoescape + +__version__ = "3.1.2" diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48908ac2f699f84bde3255915edcba46a541952a GIT binary patch literal 2132 zcma)+%Wm676oyBZZOOV{EctHJcGAKKEW$~zKpLRFC2ixts9T_z4MCApi!sR|W=6J@ zRnbi!p?!m*o4!I{flETG0$p`yAiJ!3W*o|z#EVKtKR*6*=BhLNy<9FJ`26|TH|{Sv zg#M8a>1XOKy#6_Z(67iv7`YjD%FhH-cq$_~3!KGS#nZskcv|s{KNHO2S;e!!Ih<3R z^Yg(Ro>QC$F5rUVIp88LDlPz*a7l3yxQxq+OTZOeQCtSD;;Q0`UkmEEuDA-^zzxMU z;3jS=t^?2GdBqLj7H%nS0=IEn@jUPXUQpZuUc`%v+x}9pjF%NJ0I%Q`#f!kJcvbNd z@ETrIybQdK*A=h$8-alh#jC)ZcvJBj@D|=uybipLw-s*y-^2G58^HJRec(;}fxC5v zcD7&r_O%zjv<;6NwjoFm`L-Yi3D3Qd7+1^_f`o<_8d0AS<8&x`H0&5(2_s_k(sK#) zDuguL{o&-f!H1!+2Zrd`!r=WVqD*k;>dTSHAYz1bkA~1Abm3>vNWi1*7dRMQIv_4g zd+9M61|$@n!oN@hp=@W@?_P z!%A~2--j;w5e~{tox;A&$#ZJEL@uOs(4(Gn`&>Bm95HUK-5$u;s~q=3NA6|pluoGI z_ix82pW4oaeST|{P8qCWFz(Pe=-FOqcYQKm9W14CNV@&=Nv9py7sT@EIn>O#1&4C8 z6UeQe2?h(DOrD#3C^L)_XQ=~u_N+o=22&_^YF#ahohWjxzw?&QLgK#saX~(jZI6L0T~r1W?-|@hSwMx z70AFLs%SaOOLtC+eAls}l#-OPlnTfw=c|8@v#PXeQtDC~QkqicrL?59K}I=tQ$TD% zT8mPaq%2EW0U6Eoh39j&DvdQM>rytP7*aMtMn%iIBurj4%lZSo1`EBxW{(EMye;mu^tKfB-SHAk7GR&bQtTApeL~&3EGeKNYH1o9(S#0FGgD2mGgOwv`Em$ zu^x#&2#k5xX=oFvoG)Ue#a$!6f6kxANQ(qLi1kR28SC-?9Bo*bCDAty=kUJscct}H LQGVG2sHpz{%Z!OK literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87ec918b4f754c01051c1e7316a06b6da07e3055 GIT binary patch literal 2148 zcmX|?y>sKn8OAATl8fVUnJ!g2C$pzm-dN`*KylZ=NJr zgmg!Wl1M=WzW@*dNq`>`L2@Q_lETI5&T@S3QkAz6JeSH3aUug+ezZ}RNs^yZA+RBswL%^Qo|IA3aCw%NaSzN)jY+OKW)+Iu}FJ)hmR6suM=FeX3~)1*%o3W>7uGsGgvDKy_3b zNor)Mk)_5iCMq=w)TmIypvHuna5fXv45$gG87DJCW|mAiO_fZI%r==FGJ9mfX(h-C z$b!>Ok)1(!N;a&vN_K^8gKYF1sq*0gbYZMk)nI6cj1w zQ81w3l7a~ZQyO;|O_DT8(&SMpXDvvb~ z93JZ+_&gqGJg)NiK93(mmAG1BTs`Bb2aKOS5!MYyyWq+&-mFPKPz#4 zmvLR?l@za}dBx;ao$;#8t8Ii4Zx$GDo^bOy<7SzgsF?vbr`$r>8uOOIcq_?USj|at z2Ms$Ozd-UL&M(dp9PZW`cRk*>t6=FUPodz`bV(P3}3|LvNnXy#c}{AK=mf!U$nH zQ>L?+GK)Q%C30+*IGrWVXNekAdzL(!B`;>4%Vu6@)|<`-I-3oqw~EDX756q?yp11= zqAQ9%6UDJOE{o$cancqi9ihjCo)-G9&WEr~ ziQ1v4D@@cAqV6%#P(-69nkEy?zAzKQ+!LlM%n=jjSXgagb(yeyVGV>e6xKvoQ(?!1 zZ8KrJ!tM#XFI?>GTEcA!*STwz?}iGy8}8o?bp-cr=-mzdyGxbbUGCon(=eAAhq+xn z%&C2b;VR7GzltFNQXmcXWMUr-rH~d}XV*YI%=uL${YID@ry<6-p$)AZY6miVh*k40M7{^) zi3;eaa0*JHb|fuDB#v!}WAt@ef;hE9O_!bOIIFy&T5|`;(=;!^ND3UlM0ci!iFp!g z)((VK47Il0uH6T6yY@8Hx(5*51~8>S$?rh;QeX!kC-%oc-sc`}WDo21<#PSc0G>%- z1BWt!2sG@C8Z3riL%)(H~U890~14a@R(Q&!R-E5#9j zr>vX<15^PXSXr^cvXO%@@?p7_gsAPj(eaCVqi5U?e)jId7xSCZFYY~9f3&f(3bC=Y zy&c_LGb3;0yY<@-7C%~l6kXifUi!=8oVtT-^1F$*f8;-=z6clq literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c4a33d2f6c00c802ab6cd4073370e539c4f8c82 GIT binary patch literal 4654 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 DrIIh` literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54b8022a62dbfb294bd3fd2cb1456c5bac1a9f07 GIT binary patch literal 20981 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 arvJiqP85Orjl-p%KVm80u9MD|#{UJ77kT>t literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f5d906f09a4bd9c4751e669ce240ed713f0364e GIT binary patch literal 110715 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 WM!lcrn!?cnO6R-3TqhG_wf_$!)+?|8 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/constants.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/constants.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42ddd271d4cd3aa527bf2876144b782abcad798c GIT binary patch literal 1567 zcmX|>zm6P55XSewAT*K#gGf=Q4)Ds5Aw&cL0%PP8LW1Db+f%z+=l(P9KXbk(K|BE> z;T3oVVp3kfk~2sAYWH9@TlGy(b@kU@RrhcA?@t?kfBgB){OdcL%|G_?-|ylMyta^E zHuL7E&3tjWdH9z9j8N}<;0Yr&pPiq1bkPBA@agQOJD<$tF3vAqGPs7} ze4qRXy;SGNVTjx5PVzjG+eM#e?Jh*$nhPbRG8a69iP=PeZ3eDM=+cMO>GZ;~%qw~9 z)SF*@j7pB`F$_iCX`Q9;-ANSPv!e-c$6F%Xl1vJz5S3bpCACF&TT=#)Ha6_`K0vqW|Db`A zv}uoO#?tLcXSUvD-^(~CY4?>{XpG+NM+@Q()vr2xceE{2hC9%jfWmZyW0eZC<1LxI zKuUcWmRx72X^}cB6gBe%S-J&K&4bjFuU0f&+DOy&XuY@y^^DSZXhvVEFg;Q#dldpG zbv1Vwutbznab;I(XHkTeG(~!Y@Z=>x%D^G}lO-hiC~bH)mFN+(-DV~~syR9Wt1cD7 zy2=Ew?W6*2b9Ki@VltYOJTRdGdU-)xSxK{;ktNEyJ7OpWCc0em#DAo83vM0id6?QK zOTLkVE3+0?YEVq}Rovn$Yp8YqA~Ww2BQMfeXIj`{Kh+ei-Ew4tr3Ey?ps*n2sbv6N z_<~Yr+f6*)8)tw-#m<+yrFv8!r6{xxI!uE&xo z-BgwCA4ULK&5mA4*8D+FdN^PMxcW`J-}2 zIV)2Nr5dvl`5ZV;XQ1#Hl**0nR$rCGs~m0j9uVyhrS?J7 zFO}l0C62yu9M=(-(J9+^4=?_H@a@xQUp=|{`uocto?QL-^x2n}zi(dKef#F;?Xe`; za(}$s-rU@5m-3v7XCH67hIZAYu10q&dEIh;w##j&N}oP@{CJDD^6}!sbI<*=z1Do~ zKiS%SXs5kBT5jLG_c>R}i1I~!m$mGIZy#V@y?t?U@#^0DAAa=L=E3=?_Za^d0!2HP literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/debug.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/debug.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc150b8b1ed7a4c3a7d6d213de76b17019be2c0b GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43f269f6f322464e8419d2e28c5df4558619e8f2 GIT binary patch literal 1733 zcmaJ>OK;mo5MJv2u-=m2dD(GQ!Lfv-MbQFD3q__=)w1kZavy98g4M2V+7ziSsW@T~ zGzIztaxl;we8{cHrGKG+fd+aY_7tF}+*J7HQ-`#eSU^!~wESlF+nL$fS^l0##1K4x z{JDDBcqtfwTJ@LcgIMgc0TxByiY={fe*a7Xlmt98iMYkPvopP>FP-Le#|} zz%e1_;xOR25O;9|@PshIA;KLbykIoodQS=|92L?yCS-72$l?hhhZ8~`Cxrs$gh^O2 z<*gvoGaf`_2B+?V2AtXd;iO$oMwr7HVIF6ND>w%$^CRn3a*bRkF%l(lGJy*xA>js| z#8a4q-!%MZ@TAP)44yrS2n!Hp(F;$eLA&W`yS}l!<}UJTq0;x2_i-QSV*+fu)=LHy1AXhdX?;#+O1YNF{ZTumF}j1`8=}o-EXH_rXF3 zZni9{dbze)MAfvOv$?lHCclHTX#7r5quXdnxWrdIyxRL&O=J8^;pu@3wfc_9b6iuQwmC z%tbg6awDn^nd{7F5SG2)*sQHPXS>~oaoeG$FKm2s)w2}7u5Q<>_Zw~#yeH<~nJ;nk zUPFxe%zD=MOzM0xSY)&3)KOBHA5Mv-L{U;z&5#_UE{Zhnkm8WohUli%Vu^;6=hjH2 z&edmyb)Mf6+uPMT^wk4#)L%3Sb2Q};GG5)9)eXM2Rju*V`2w)Os?%@&sycX$&cJ}q zh04CxB^BL}o>Y#Gjw(Iv5E>a092jy(7j;4(%N?Rui2Asq$Ujzk17lxPKPun8UD2WE zSKuZcN_#*!kktd}P6d-)sjnD%xi>hE-0f<(uaM8_#}LZ7!1^yR4*eX**(hsWk~gSg zjf;&+*0|Vc#u^tJ6|HgkFV4J$#^jAZ@aq>t#BqyuV8QZa7($b?kdmF7vQXNdh9w2t zvE=NjISb|O0z}W+r4_Kh`03buwRrrqg+N<5MJsl38Hg_)9t*Gh$D)NmTRuh0b~5)o zZl?>+6ZU8Kz^j%0#6ke>ouYg8^cC7 zW@qOiygh&2o|?8non3lmSTnc4#V`~75V$aa`xiHkKX{pYDV>m)vwvl8f|+yXINv|- LkgL)=a1{RnArJZ~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/environment.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/environment.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d5af9a7064dcc59434bf3095da28b5d5118c9b6 GIT binary patch literal 80671 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 ZJp5Fg|IB$c=~ddg<|=fP>I#4VV#UBvGb@ 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/ext.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/ext.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..067c839264d9447a2a047d9a77b2bc5ce3f766f6 GIT binary patch literal 43292 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%0D;q}slsn-v&R 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/filters.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/filters.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb2a0c65d7cd7b7d938708bc84eb2cfbb763fac1 GIT binary patch literal 75992 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e12b7964d2f2e936af535e645d734dec1b6be93c GIT binary patch literal 19627 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

    FA~>c<8@Rj>zyQq2D~tT)8|{eVj3 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/loaders.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/loaders.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e25985a577df8f1733acabc72949e44c5018f27b GIT binary patch literal 33148 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/nativetypes.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/nativetypes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68e31b68d64661277c1a9f36468f867e412349f3 GIT binary patch literal 7985 zcmb_B{cjt`m9yMkir=65uxvG1OLA+bHf6<UEJ*M2TJ{N=yyD&lBsF&}Z97<75482Fv9`8;wO`$l-f8nu zxG9q8`w~AV6Py{yWet_exwN_{=ipnMm#MBIl9`pW8X)ehp37#iDtJoOfYvC`bIbGU zm#`TG3AKWv>e&2!KpG_2a+1n<)^S$W)4DvZrl~qlp~ZhfTg=jemRB_cK0W8u{CrL} zRMQQ!SWtD-O;uxoY8f2EE^a_j99thTH85J*jE0y9DS~>u?*h@m&noW&<%bRGD_oJ& zU5aap7`9>oS&?&6Df}hYpGrke5t^HM#btEae4&@i@HD@iqw20AjG-NO&=Z5Hd3|1v zS<;9RZ1O5{MdIXlg(%`?%h*j?#eEf4eVn`xRUbC0o$I;c@)9H3Xe35MX>k=w*Da58 zG-vNAGDM7qY7=7gws6|f#HaaTLPZWZW?Zk3DY8T^^RJL4F5#6m*npSVrb@D;$wqcj zm43Kv%oa4s0Bw?{X(2Bev#ONK>V{O9mNJF>d^V>l64S4wbb8t+K|vC#>I*qT%Id&M z&uTL{l@aZevW6}(4Z=1{g;XUeorO+xDXXjdusdVJm`XBLVH_<3ss~eov1DD+4GJuE z9I$n;jI2o)Rf!!BMOw-lvy9JE(+gVWsSC1hBwJ6?1vZjR{m3abR%H$Bn7Pjy0|u4z z*246sq|=Gp!qOpcC@=wOES&&!!h@(d8nWwkl^$q`FU zP(AeI{PNenqo^CG7tgNjw%XFx?j?`r3K==4KMROWvIpj*KL%ixlzNlav$^}X`o`$5 z7T;NHRBZtTF@?JM6Y^lg5&tf^kqTMU|m{9rF~FK@gPzZp()H2vKmDL zLt2&4Y-f|@VTW%iNaX_$4MRb|EGsl22k2heZ23+sc9<7{=wDb_x#}+;l%E0IKF0l(dAnk`|8u;@jx{cTOYkPv&P>I_iqf{(97YWN_Yr*c>AjH-nBC|9wke zZA_2igIq1_g$rOp3k#Z3H$-(?%}7jo7d% ziBZ|Na4W8Z*#VQnO;U`I5*$Tqq$5fFBt+ASIxT~_PfusTl4MuZl|3C6l-x#k7#ZO) zT_yLz-D?5*Ex=822If1TL4#!%oCcdu3Xtoh)c`8oCQfBrQC#40xkr24b`P51Cn?%n zhb;bXBh17_(G64dzjX`Dj0YWnij}823d!;pXf<_%1!J8o=TT%>x10k9OYFJH-I&^p z{_gy{=dEvmOrQyuDPT}XhoBRF=xT179%!4A8B1>)dF9)G-3*^bUf%_&LF2 z`t_;$oL+`^dEj6LVE0(1d#oHDuY|`-o^flh1$6SJIE_)L>9N%(gI3xuh_k)_FF-&S zxlOyp@h-aN8hYT|*DHb}iWHo!db~CIn`?~hv@>sVhQB#nkuy*u>!oS0obefT6@@8M z|8Z7DsVERty=L@=?h3J9~Vnx7?%#X{4 z40i(5n}kTmu*V?;c*^Jz1kVD{QJ=wy*>0@2vF)?joRT&Q*4QggJaX$Dw2bXVV7p3c zZW8Ue9{hE1Lw#2(NA_1D``5%T!UG#GHyzoYyRp7XY_J>~uEd5*f#EOwJ?qMi6P1Bv z**{Y8kDxp2uf}(*J%2CU_x2lay|JN|!^4&EaLF^wv}V$wAE+BlKb{8!^n;&+w^e>T zP$ZqLLo1b2AK=0W)((GcKOlhOb(%57B?{rs2SO*g>ZmkLiAJ3gou}Vq4(;>Cgb8HN z0UP~E08Ea7?rTR;6nmIan*5qe&Uf}E?jbfwcuA%oQr972$r zSK&sZn4Dqq6WTHzf#FS$9k5%G<2bI8oi^dbWiXt0^eNs7&0zXu-Nl{OrVI3Y*l+^D z4-lY#WK*+@JT8hNz&+LXf>c)Im&^wbCf4{^t8E>7&(jK0?c%M*KUj@}w)NE6)W zf$Hk3jIQS9#6vf^TfUD+KN+v={U@Y4^l65@+JW0I?x}Y7zXO3IV&Bjg@C6GzsoGc9sLKlCsf= zu8exVgI(OTZI@v^IhpX%(=Zu&2ElU(&;qdyH@h)%OE)67bS5Y3I(-4#@uFb5txHk6 z#+*X}1V4hGj+9M}sS2k`!l`?^k|kkBHQ2xQ>c;+ZaBn5Jcl9LxSt7%}4w2b@YHJZ% zn$fn(rv!y-jg}u7dAl+4hFJS==^;W7kKzX5cbOqe__n7q1)0u32I;7!qPY zzV*Ls(qOINy}dY6N?aCF8t-wxY_nijcrS#nbB$nf)7BveI~W1&*|t*To!aF5VkwuF zWDz7*1|YFQngKy)*Y6B1+R`wbd<+c5ODx7`$qic(F@Z2o!Nz4&sZ)B!&W5nao_V8x zJOzVn{;@PnV>XzMk^at9OoNFtOH|JTInyyXWh@X#`89P3qZvcJY?y+Q%@}61<-FGq z<$2h3GeQdmjJEM+mBxIL={<2dqs|-If@b<#I+>AKSyRBxsCKg*6TAX^DBe#@9wN3j z{|L!aWWCbkJP1jv8e=E@7XZNVhe$YnC-m6u&|^1@&2y#4$8Men08cqIUI~rk&0X{! zuEzT+@x-0@f!px|)kyc9$e!DgJ)4+hBB7eVcB1Aq54NZ*kpB>}?I_^ezP~V2%)(=2u zpCcRw8l)M2H6wC8+!}+ohZ%1|CbjdyG|&szOYzZ19OGJ6Hf@_{SFks`50cIYvi+Dp z*_NmM3B-f{%AY6K`JZiz+9B(T*XMd^m;k$iY__bRQQ5}7%>?k1D@V>j4z)$?q$Nmu z;srlLRh9*1$4S>2y^s0wW!-Hva>Ekm!p%)A8AOaXs4Fzz)z)-C-f&qcYCL zlhv(3%)m5Y!2TUJbZib@TYuv@MvZ5 zC{&dr&r~`|?EmwO|M}>|)8wtvX$MjesJL5VjR5j#^iMqu z`S;QP9B0Tk0xK%QsU&upZb(x@c8uZ*OdkFp(2^4N!tIV4g+fkeDPt?IEV8_|l}N_C zkaZ{U)c@^4*_FV$9I*R2swu^P5YZ5VA0j|OnVz%Ek;pj~{ILj;MR`m{X2|yNb%*2> z=GUI1*2U&ossk^uvqZlE5Ue!ERY|O5KUFeNaz0hkQ*u64va95LI`w+IL>$jO5-&NQ zDj6y{pH7^&(+ro0lky5v)mVqLwKo$i8)T;uQ z5-CGHvKvxhH>9vz=r%is9jTkLWQR%Yq&@DArMB#}lg_w`sf0)+oG|hDi~S{;5BjK% zJDQoy{QtRcuL4LZp7@)2050Bp=f1n1d+s^so_p^1s;etKxPI&R56Az@FM2$G$_L{T z2p;ZTs`7Z=_B`W>dro@d-nehbd(tcaeJ6eL-+wZI|Nf!ixw4aGUd9Owm7fcp4Bq!L8A|-WcmGWiyWHn-x57nHDoQ!xqKE|mv;>1JoiVrHk>+^Wt$Dg`R z)+Kyr>y0PeH`wkQZTAao_f59@X50Nj<33(>z5HYg@?K=TNwnf=vH27@yQI|pX&+*l zkU?LI5y@k}Pb`gxcLIXaE;AzFK5DyPZrsPKulrA~c(9V3_C8?lHG1wVja-oXD%<^P z+x;5beVgsR-MEiOUh~9j@mF^}bh6{YN@_3X1GiZ{OYQR<@WdOCTVrDFcm2Qw{Hg2Y zI)N~ZAdQN| z`VW@6a@Zu$Wq?K#n_RHX0$UE)iXzw+fvp5=RS|5fz*YmcCb8L-<~D(~0oGmw+b*yU zz}6PQ9un9(z&eXy4-0HPU|mJ9M+CM3u#H8q9Rk|~*ybYGqXOFk*w!N0PJwL$Y@Z+QieOI&>?mNpMX-YcI|kU3 ziG!}P91_@5fIVFVJ1nr{fSo9U9TC_wfIV9TJ1Vd*0rur0*dl>F2iVEP7FSt%1@=5( zUnzne6W9xY{ajJ~o{W=TKV^*Jc%N+y_s=uB180vI-yqge+r3H0t&|YMnh|W29`DWA zc1rKKFN?=OMV^*AoI)K2it2D&U~#|_iQ}$zIU%q?z)lyzo)Op?z>-C2J}a=ZfW24* z`;x$h06SL%`?A1>0UIfTJtwg9fW1@%J1H;?uv8K3d4Z(?8!hVFuL$e{U>6hnU3Gs! zV3z>9Tm<_$fn@-Dxd_%Luq%LFErRt6>=nR%z6cf**cf217Qs#l?5lwNPerf+fxQOU zFBHMz0{cb4zE%WF2y7g%*AqRix(^EM4Z!|J5$v?UCII`TBG?&${W4%*FY1S+z$O8E zvj}!pU~d8TH;Z5|3hWwS-zb6&3GADIy-U000B3N2r-v#V@MX*tU-2m*p#Hg$P zF2sMsP95U!JDytOAAq~~P0)pl;B_x0E`HYwo(6yFO04g@Y}`M8G44C=>G-Y8uXZ0l z5gi_hCsNVViQ$A6ODE#dQFoH%^RcxyUt(!EVOedcJ5R> zwp*iku?~MJ7H7;e`O;MP`9wekhimY|ammBG~V z=}l8>$2=P6u8vT_mw2h*8%`8_r_+VN=`^2)a5p4($>Bl}4U2y@eFNvt+gcPKo0oyP z_b8IR?MZkb8G0xcp7aa$`U{l@@o_4ZJT;WaJp6PlNlZ%)3bwLIfMcUWaUfMX3X}vM zpNqz#8u2JaG>-{_cJ;m&02cKP$Id1C`hYfl=SJeAL%a|7^}RG28`2@=eSPtffxbS~ zD6FPxjSk*1*oeOrn{CYenF;L48o$yq5^(@=%*(7Lo7r8<*F2DZ{TQhzB60Y{<@1Tm zce|tK66x5$5D;HRr*uDR9ZN^gU}z0tFmwD4CKISV$673%){>`2(}~I`uH^8UgqBRl zh6fT|Q57rYjD}>jk#mv=hyX@YRAq*HNg+0x9yu2SuEvIjF0%+1V;I5lC`K?d9ypU6 zigyhJ%sP5JA>7O8_zd-Z8&do}&kKKaHE`N-SUllFN%bLDcyKW)p$$j{@E6fs;a?SMPQbcHRp&k2nOUX*@KRUU$t;=73W zz8U$eUdNX~=a+U^+SF*EJg#`ouP~Y7lHAIQa;rA8E=uK!|4Lvdz!U!%?NDyTv+m;M z@sLx>^?K5#7RBS4wzY!w6{+79-xdFN(MRu_{RBL&=2@Sht<6#}FJm_TBwM5^G$lp?8?r_v)DDRCJJ&9N1YDx$EPm8dm_Y?q$cBY2zo z3j|}HnZ~uVp0bM75{&PgX<9gbU?$w~_1-snzw^+I(d^2{r?=gxd*|Wlhkv-{!&N`_ zeQxR-S+Km(~Z;Gw;sFxST4LSA6}OYue;OGG&%a_j%z!n z>)v`S8}8xns-9f9ColH|Uwm`twVm&7c{g?Ap1GVqH1BjEzR(Rr7aeq7z4}zH@?#Y!XvjnwxS=G`3lxI-NLoeh6Hl%#VdKEs-A8h6n5tUZA*QcTJi+T<0I!^w1CU#8L4Lm1-f z?IC_}7{Qolw#>7*Z9I?27*5j|(HnX(j_R_7lmTtZILT>5a z{L;PS`zDT!AG^D>BfoSj?`IY+84pZUkK;$MdcfcmkTz78dZTlgklQ@Vw{lI};~6hK z&RId{??8)Dn>eT^xShbj$ob3fd9`EsCdD)qDMMq#E+jIw_PX-T2}V=g&P=3X;_B_l z@>`MRxyZ_VWMwwAQi@#g18W`Jrim;=`26#i8}qomrY0&NG4s0Obs`tm34j2?&vy8= zrxC9Z92iQ(Fei+jj{~(kd{SraS%B<(F0uVWLQ7}r?R8i0zQnkj5rC41!V}fEL#?+$ zt+~*Wd}v8Fv_yZm_*Q7~)bU(sc|No}Yy2t_#g^*`mm-S=FXpmi=Q+q@Lztz~n)W0j z7s`*u&Yw>XpDy^jhc9c-;FWfgflQhfJKDo{4EEzM_4g4t322A}G&Ec3IpTfNJL?Yx zm(F?+%(S-4!^|T)ez54ny+2qcPj@S-XM;u*iKl`_Z*bLQ>{@c#KmF7@&rDb5n}F1K z=MKtz!4*@>uXjxEy;1kUg6Tu~MH`s?ikti7-<*MJBh~^FFZkYqe;|EHJBa7f*z|LN zko1hLwd2QF#7=(VF1!FAW|Dgl8XI0Y@#i?w1?S@H%^ZYmF+3tfm~00Lb2OQPoScH- z(J8Di3k%*QMNa$z2=A~-d!shm+66=uQWSoAbeM#Ezow07(rZA*epE(_A#fmLEf|+R z(*Hg^Yb}l_UtzR;2!My>m0%`<>u0JW`Ks1gPoSdaPW{qZpSP~#6TiQq=2H&>ke=$A zpN2fOty5d`t?P1;&U~aZ8|s{?su??^$P5xQFUoej?k&Z@wdPGM*NG5zGLQ(KEmKjj z1XUjQ+vmVUC@#!pJb1F=KJm)PgvQHHRwkag^$Rl;txiK?&ANhJ`vln`jB z9;z@>sNrR@u_H)TC6ell4kc6RRHu{ywU241k`Vs1%TaR3(n|WbY-L5EP4xt7nAS!I zAi70kDJX1NDK7aW{Q5rnx8-f$7?HX&One}@j@CMLN9TN zDN=t6eu0`=C=*3hB$XsSs9j{@D{u~p`Au3vVnTZIl0%t znsOA7y54&WBf-hyY4@3suXwebV^Vfa*$$ZJESX8UoD=qo@?IOmly1gIt+KNMb|uRd zkMnCw2K*H$oWA3dKfpAYX?i>loR0s&O8zUJc;LZe#)En-eetqkZ@m0hJl}CCh)_~< z))Dr`EH@Zr^o*t0f-0^FD`uXn{;PqsIWO`Xs)w9vHLqu)8SQFH!1%W9YS8sn@QQB^ zwNNnbapql=dOK8oo%S}4htj6G4O*Psu70^?LuWt!N{POsAOICqW~HGjGR6UD1hvFT z5QZ2SG75*8`e-`#A_($EYouqw<~z`iOoa*2$VnEwse&g{KRW#4@W@4B{FKr)3O=7= zTA_mKTgB=oo9d{!2liOc^dE({o3{0Ntw}L^ zd^de#->+rf$>iI1WLG_@eshbS$}f5<+xXO-re$}UTc`HDnYot9H$(O1U2wpw!XK{u ze*6b7=5`#)?>JAkty_Iz!7R(@w1 z7hXGtNEJIJ7~gj%+%UOsYSnb*_iBE<=0^JFiClC?KDr|pel#C`G%LR|RSOvTsA{^y zzti|T@$c`*ZSTo%@5yaCkl%D5yZA7EbM;5^^;FrR(1@%)QPOdF;?ls-D5RUf$nel* zhf;;i(MtT?djr8?kJm*=G3*|`>W94JyW)ElYLHh07^>b2-c%W$*W%uH!K1CIzyP)n zB@Srk@Ei0!>v`LYLEXO6W7nsz@@Rgq=Q+>B){CA?{^vXwy%UebMGA_Y1m>JLgGmQ# z5NAfP-U74)YmthMKvs@&ZqX-mS&!iC3&kp?JGByVStfLuhQOml`}^B5op!28yQ9B9 zD(YDBI8P!mT_bBxl<6rQ6eTV!X_!eR(`^vN^wl6v^+U;X&~r&C@Fc60ddaZ9sa7vJ zJ94J%XZ!b?NnzrIvKRHj!X#7DyGf-nDs!rQrN8gzOshUX!S{emF;hyNkrgQLE*REm zA|ywBGwufUSfL;l}wY=sJ- zy5(-?#_yMBJ0Ft=Xtox#%$DOd?$&nQY`n2pJyrVaT4ok4eYgBZ;6^+b-I9-P$u8QG zZM1%WcBdIiZ*Lv)GXjjh$$c0ebuB-`HCtyCCPhKxJB^!tf3Nbf;6L&{7A!qP{taRo zLu4BF#TOSNoQRJB^t3tWnKL8iynuZeIKR=BT?yd3R?K(yFM?@PlJU4^H!W}_s1LBk z6OTB)3e5XeK>zBv8g!Ze^Z*U=rl3XJxaMes0O8s z1jRk;9OPxpZ^lY|G ze-9a^zJWj=3iY0ai*Gl#-D+;TQGT;A*StO7yq&8vP^BQi!bkUb`c9-}YSp`eTx4}V z0xS+zx6ZUIfflPSD#2v;o#y4!%ilebYhJ6*a?zQk%cjct^Rw9?;{CMDQ@?m>-@B`F zb#3{&HVgu!(X?o?l0QG2tv2#gGeiX|&_~g(wBCz~5VF|Q_+NavHK9P>;8n~R13oVp zAsw}nJxQPdyK6A1p@*0w`#%;voxG4h-yw5g6M7%2uhgg^=Oivs{^EBgE~tK0w472& zfA7d}LKk3EFT-2|Q$f5Bvjpgz(6U!hY${q)SbB5n*#nH4sgS4UkZu6z^N5pTsJ3C4S78d}DW^5<@(VLYvLTHtQYi>%s8{N4K|g8AvjcM;=# z{HY7gx9O_SF^YX|UK%4_pHjgC+jBJ%fils_r|w5byzIw#_x)l36Y*xfTgIeYIGtJ} zsbsGZ%syg^$JF$qq+&KXfmrw%cv19}$_4^6F->}6!o~A{&7p%RtU~O(eXMRB^mqM_RhhTg^2iNN9 zmRw|AK0KHhjD*gDo z_c4OEJ!$YV#&yMW+SM~0D%w%>qb-&Z8c(L*LzwnvWY(z9fGX;=m~xqAOGC^d8^s#gbU|d%Vo-36V6xJ6EhF97)2E=oNx#C;c0F1;(L=o@et|*@MVJ#vP7P_QA{RH2nUPLhF`Dxfw zyI?Xt`RwagC$5eMW@;do1S&SoG&H}x^R1n4?!LAgi~W(tslfHBY-A;|eA!Iv(#gQJ z&`h}Y>xbVsJQcXTaQ&@?>vIb?tNcYYqex_XY2vKkX9Lm5vJ9FQT|gf)<6Ag$6-2FUi~28R=^b`Vpi! zPDxdDPMby}eM&)=iJ0i1UKAKVgJ8__XOTu1J_L*Kp?PZS^~bUi$i=?u4&chQM}Zl2 z9XHzL-^_~k$$i%j-v>de1VNDYEKtxukkZue@1bD##R~T1z6Yg#LhH==4qurVfvn66 zI98Gd-j~+xlOFeGRv0~QQ<19K45W%Zp6Y_F3G-GRe1LaW-|F&{ytTTOMY4J|!d|r{ zpJ_C^*7o+#@J;G@1f}{HlaO<~FIzjlFCSifpAIaS4&)4m^*N&h3qhfDj(#K_vX1xi z2;BYXoGBbLoNIm?^=jp?L^iME9;fcHbRW*wSB~$!pZ|Mh#%3(m2ShhksOcR^!_IR^ zRxc89?NJn1qy=N${+IE>u~b^t*Ozz+_8C>ubL!!LXC&GzjCt-QYtp%%d3)=Dv+H#The5Cz1_upK7d-L8~oA>56 z@6T`EpX=<&clO+h^khRlipjK-PvVqx(QCN*8agTNoyJ}9HSQV2uE*CxuY1m#-|urV z7tSud>R7ja-L1Yh2OgBk&# zI{2g4!RulP9m!kUfNLz&TD;rT|0+HV4#!Q-DSr3OC*t^p7dvmi_9)Qf!_}|O?$ITcH{Tm z12^{FTn-)GsvY@NJJdTB#~w;2edcZd%-aET+Q8Y7~RsA}- zhoy`vp{Y+*kN<_GJIvBSp^9n#k+&YPXZz#8Ppa^oTYMsqu;E0$;lz08PJPp4`pvc1 z*5>P1XCqtidn2U&GYoB+2cdo)IepFhH6KwbjeFy=(8sR9aKtcC!?Bj?<0|R6cie}S zP5*1*H@v4kZ}@zk*I`5DL_8SM1WMEI*Ilb5f^N!=f$KvKq$|UV2K?Ro0Z7j`Pz?u( z^4JNIQ~i=!^?F%pkt$toGy)eboP~BiDO;eq(m{iA@k+nkDcKf=JXjd=yHm!p2lioWBbgmVGKO2?T81km3SrIi<=iC0@NXC49Pcd*#4GfF1QIxc0{RllPT{ONit zwzChkQ*-9&T7E*F_N63Otx=OUy(WRrR}&y+5Q|cvmG7JMlKSg8%T-ns_isxYt`Z@Q zzcXhVMR8>zsk}E+rg#pGrjOdU82n8HpLw7E%=erm^|$ zLvJ0LO6M9^GHF>qvv}FB9{Tp7>2z*!XMS;Kc5x?+ zE~kQ1@o!aKubRS-E6K@YcN<$K_fM^U^T@R$llYlY?J=2p{TPim`6HxTqd6uxQF4fd z;4{N8st`@4M$1_3+XU+RFLsr71A&?zAAekF@dNBPUHQe^&lqD6!OzfXv%aQ^#ozH> zFMl`iZtR`JbQKz8)`NF98|B}9f{mWVOUL~)q3ZD<47#f(s>Z8kB6VNC_{K%lE2AZs`Ux3bZ9T&MIqAH7aPU`s~9S$FprY! zP-~+8pYGhutuQGU#!5D*a z1cktN!#v{*^1se^zrny|J;}i;^*fE5)E{Gt8ngY(`f6Z0 z>0uD{EMGa+Gu}OMU~=zN!{ihB@RDp`1%7jZ6*H@LjUAfwUMmN#9iIy2YnNvOyYQO} z?1HK6*b^8-a36e-_nt< zS*tz?c`BD~vQGAr-7B4>nH4t`AP1%rD(I>%kM+;N*vu`E6LI!jn6w$1Z@GmPOZ_QSzo6 zmHFjc5dTZxf9eO%et0Oq>sa=w6WLuS^4p%tE`KK9^6ac1(eGANqPmCj70YIW#d`>5 zo5Co;77(Ri<2054@XsAAuHZWa)6mJ_-_3yh`w+CtfY|PuN|ibgJm8(`zP=wi9o$XF z)&CM9r1_?apC5Z-HsA|xor1~;|J*^SHMn?kVAg|wa|SY|u?e!m+&ne_95*jxHoez` zSC*-#Vd$yvLJQEGEVG0LZc4)Y?mVH^*iQe~0@Aue>l-&dFAMhQ6g(yIZ!h$v6 zW&&;5KpWKfV^8o$QC7zN0tGKqCTy8b&Wc>OfW4HgVQ?ozESka!OL8zdU?>owtsJ_H znrQ!!<#Q2<-{m_7OG}k`dp5A$Rc6L@l-Z9LyzV`Wz-sKd>}uI8>VoyFeVK{tZ+0O50?tM^i;+8R(IXk&i{!ij@Sn#hkwNSHSOi zNn_)ewI8A&z3)}rXCeq3G1l?4-^2&*#{50LW3Y;iNnMSF0G#S*tS%PoAx};7SkDY7 z)tbr1iOy`G3BNfBaifrf>3s2qj{9v5U2YgJLzpQmlpPyQpC3(UzS*tNUg^PQPmZ}$ z&1OIuy?7>xl`<}$qM?UjZh&bH3omGK!=Mk1j9;}m8Y&*qVzE>DC2qepphVqGh;FE8 zc4-uw7h)HxffP0{WO0uUI=s8-_aTE=eMx?L86ihEbo{f>5Js1ObR41ENKaj3!##+C8G!H zPAuhmega!vtPS-ihEj>X{-|z_V1CC6AtOml;`B#PLD}>oGE~dk{7#K;eR&%OMBo^? zzyy+s%^V=6>C0l|(538{(Oy_L$F6n_qg$1Z(M(fnV+WqBPQe5UtKzVgO80lF1+0tM zvL3aslath_#?{WF+l0gxf>IwWO5w{w1h)-T!5rVJqjw=Ih3jN1?$6yx+12sza!7%G9BZX#A>#6DSVoZc<$Bv90dG*Ll zB{r3e9eVXpG0|2eW7WjYY@ivxxj-}HterfOuUwQ3@HZD&L}vNe*s)jfH>S%~EJo>Z zMN!~B<7)2FR5aS`yCN_~9%!`1%Q1%F`QYGSW-IVXb+n8aZ8QN)H*p$^QSf&`12#c8 z9bLPy0x7-6X_bAR9PG38Dc@>Y2JGkFj(MitQoZY9Vg7^(F*wFPW!KyLbS3~&zWZ+V z2F|yirw?T!u=lF!UPTj`-CsrD#RKzG!nkekF8WSUI(y&ScN013U+`#bKpV+?2oDRq zQKpNsBY;GSwt6NBAA(7F;)EnE#ju0BWQ~L-MY0_;P?a>T7M=%6pVg;swi~|fb z?37R?rVOmy6iqKJ5lry|K&8jg+SsLz5*0#5rb1412uZT`&k;#YlX>0=LkGRpoO9(1 zjOC&mf^9DJy2W@5o+Eml!i^ohW_^B=3al}k2VXs?2u0IGS2nN^zq!D| znVQJN;N-It!`Z-M{N@6Si;0P11r?Gp)6a)w7PpZoJ6n#=<%-*Cz6jZ5so( zqPDEr;E9k8NrUkUejl#{fvAFd12g0vPCS{f9Z9}OQwoJ`7n884g-Zi$3LvyH^U1Z$unCP2*L!tb9U`)c3|w*MkM zg%Bn#6astsat3AB{sn`Q_%aVAdH__p&2$+ImPQpj|1YRwPA(J#{(De`nU+SCJ%E&+ zODxsAeczxZmElh2ig+2iy1Y=;BfNp??3P|iS!6;K#{e@Igzky?U-O*=Y`RDBWFKWSftA_7%DdIeIKJFM(@eND-^$cVw+YR_?$;)z z1StDXKNnohs`j0L_CW(*3o>ZbtQz~<1@u2>aFKtvg92F1P)n()qi^B`f zjvdj>U5|8akwJ+?&~n{usZgejYZVdxn03PPo1h!H{_un!KgACE( zIo#OMVb&KQ(Pa?!)T{$iRM$*AJJ~bwbJ;*Eesh7=nQ-+)&*b)rUW)@OLL57-WnQI` z?(~EXd+@bSOOuf5v2H+d%v~#o6j32w2pJz)FztUs#Wfm-%*%eyIgOTLzyFj; zGWZ(1wHG&Yck9-oxzw&Hu^983`mx@z-dFKA)~n`CW>C5>w*ykDFYWUtWHdN;44NLo(twN&%{M<&GJ zZ?XAywbk z&g~*l%s>%20;^uxWGKv~vZsY-)>L#YO0t$ZNmEUd8aNjo|xp!blk^Q8l{{fWMMWVM>rP_+0!KMG+PKHm^sL7^F__407tyN;@CKY) z3~CmXj}@`9Mj&m{EWG{94=8%Bh#GUz|?e*gJhGzieZ6(Z+oJrhL`rY=FPHz-BuUv=3h9>lnO# zyx?_j1%gt8*V23%s~Xf{%R*Ckx5e546}VO4_=a@s}`YWiV?5zsuHKg(rJ!&IAr;1BdTcH*x0GRV7qBgWY zx>RG7npJgSqO4m?;xjAMe~w$brctcm6|YHwLX?C3$VE+-=HtALAoZ7)a5cg`CdA-F zHo|(`I2!@WF`Y`(2}Who7-r;gNBO&C?0}9R#B)@ZKpWM z#b!e)J+RtHU^Jm$H6g_>8_O>3c!%#yK<|7S6KPRl-oL_+go7{Dz&|CF!H?O%hjHU< z;5FI6n!D8=G}$&+lY_Z$2Rh(A-HX~^;@)A69g3yM$EVVnYSQ&C z6aFb$rkJCQEC+8yxq-RB|54vrYLMg3TnOhQx>&cih4KFI6kU~dlO#F zF>!ANNX(#=X;Tj$`xwxUOU>E;C+}QT_G7+dkYk2tabppInLv9s&@P4rvw1<1#v27R(W-Ix+LoG-3!4i$>Tj6-<$yE13F9 ziXptm%T9*iaVeCjurc3N7I}t$%nHk&6zE7L=t#A!q=XCQdy>QKiOlL^`Tw2si zaoU{wtgm6|>)P;vFF5tc^wVkA5E!kVpGc?5D3YG7*nf#J zVPE;4zPX3}TksARyb0&lJsEnLS{yd%7;6~ zy;$O?STobmIJs%^#I@&cFKD~9pzTH|w_sC#!KRyAe|yL6Ej_ok^n7?Jx8=$FmM3!! zPvsk)%7&l%*`3HjZbeyR1$XKfGyUoAY;bdvs5==SS6*d)E1X z)EwEf#{Z)=LEK9#zgIK2LWJX7E#!zOF+aU>QK|pNZyEeK+wLXYSX2sIAOah*fem-7 zm)aO&_?a0~29Gs$V@Jo1zIs&bAZG*BLDUq1jgH|-(J=!i5nO>HRxCqlVl@{(X^9$% za)VgKgCJ3r@$xxI6p5EPDnX(ughWxnkF}g9(@;edmn%566(S+u3ulAx>Q=!Me`$lMOW(VbY&FBJm_SF1Wombkd+`m zC__++eAJuWZ4!_Q@TaN2g)}}F0XdMZJy3#xz`Mlt_4#o7`~)P|usPqbIUC;m`N_qK z?ya7WwpQ+`_kXlIvZvbrqv{~;)nN}6thsBfSMePKFROV*s%ee(nE)1QyPU%B%wOpc zXV#7(&OyOz9?QvMegtv}{Wg|CE(s|s4Oz~NG4&%*kU>FoJ{nVMHb?_vtON1daAiRQ zQ7UkhPKP?7ery4UJ(Kc?B1=L#n@`4Ge?2%tPxWL!)w++(H)Fr#AYK`{Y2B6)8EchMo8KbI4_brA z(X?8OfpvEfj}C_1l*l-AoF4w-a6(1)ymvP_DjvLoGe80-U;sl$zPyL$MflP0!45zC z8{|KzXe6@}_`=4KYvhozv6>BUvEplphqZuUrh(h(%h~AD*~rt`(9<#{%xjG*Go8re zqBJYTfd305ET}=PuD-w5LU*UB(-KZ_hTTF%m=?;f!bsa2Jnkj0&HwXC))_y(oa{5xFbsehivo zd93$DNwG?GVyzU#){8jc(32uB3JYIxXQ2GF^lHsW+)aa8_>RF^e&t>On+a^m2DaR- zc65i)FSCIlO!?6p_%~;u`hgh?=uI#G@GRH-2Jz)b#B6aW)9jr7htz8-H%i)&FJ`3} z;4H*qyLW6DS?;nSXIw}5Dvk1efSb~incZ4Jw;K;TH8%;HEtL3B=CG9uj1EscfJbKW zN?c9Fq?H~dI-C9{5w^q=9DrGg(+oU=ko#V99eo1Hj&|!cg&@=;P`)&wPTeqXF;y{& zQtAsFc2^|2Zy{5P7wvxvt0+T?R2nJ37ML!IK=1ndw{Gqio74XO6@w!qEAT*z8kltI zv|1JgFea4ekaM8KLIt_5GL*QaQ*ARnE(1{8GJ?__!{z|9(9jCe1R)mXx{ah@E=KD% zvFhj%#1pr_{i0ZDXQcK^9UakKyP}s+HmD~^8avb^1Dg0Y5M-LuU4~ow=l5F&MZDlR z=*MJSsqUn*21ojO&UvrGw-JO^Z1!|AeW@C|&j420uFu045Mp_d%m=RHeSk%Q%ne=9 z7gK!^Rqd=>(HWCB9sKJ1A?VfuWc8$ejA&!FAE#}Lz9V6qGD7BzOxIw+MK&Q5 zPfEx%U=l$EWuCG+$o?zaW;Sh`t*8m^!8FeBF80oi&IaX0nFkx}DyOzwi_DhGi;$;j zgC4okQ&~4#Wqqf<{=|=DUwfWA2#o|4Ks6+*=AiDTZvGJJTAI2Wd@hc%27ha5AIY?KTf@NEI01@?{VK4}zPDHInAD z*teKhYca_jMDEej&e6gE2by|PUq(gkqh%(rIvZH6OKmy>I~yqD)=>nuQG%xr_sYvT z166ot<-lI*%6Z-UHiFXFYw;5HbtS`+66PAl=@C`Jml)iRCt=qf!#u`P&EURTazzji z*-bihrA-Z#JQ2u&JY}gi9>g3H*2p|%e!y)U+(ZJa1fH!(p^Xd5;xtxy8k2@=a6 zW$ySgjB3@CLTg0RUV?^*V%*EO#;zC2GX1*nsP8z$3XU$Ri5EVZo4^VPZ^BP0_sJ55 zE*OdvS#m5Kpb{Hu?;x1Xb15aab+YecsFiKNb~)S!nIkriSYPwHwM(zNwB2twT%M16 z;jhN~S_tC|xTUW7{ndy#=#U>-fGzmDw+DgE?@S97>(h8we7QZ0=w4?Q(Gi1Ec6wzx zdC#wX6JHm+mqgL;@HwNs4M=9WY&|l^v*jDXbT@OEgJuKb8t!HqcV`=S--t~<_4diP zPEJFM+mT<;fmg0y84IxZV6!SOMbZ}*`_-=u3OMa$YMjNuiLIX0L(H>CjdUl{XwQh+ zV?5^?cjpmCcIP9zv!UIRx1*6sJB2Pkfg2}x2=5!JsevlRmy-^s{P39qk$z&4I&-tP z=LF!{s*oefuitKeb{ByyC%k&SP&q zrsyLmX7v(yeViPf9EE4#>LrkdbZ4H@-5qsv>$ZhJ{yt0fF#};bgnU|@2S@#bEXYYb z1~_%tllm5J?1a?0kAVvBqWv#3mSVsce2j~4kJ$(;p1_72_;L47_Ggbj`{P6TeP5C& z?jRIUQY`+_g12O#C^5_Gpu}Z(!Ry`_f-gdeg}Vq^3rC5{7N#ecQ(^@DHJ5^{I6C(c zR@{deK)`wt&PTO$P!uHh<|Vv|8kK>@^~A1M4_TAk5_-bVQP&~krzlQ-MozqYzALt;gYzq56PK; zGCAc=@uI;<4+=Xtws0<{xo(apjKQ8CZ~Do$kB;@ zJFYDdvRsY>sw!kCnX9-C7M@Iw#s1g^nSH>y*qsnmH&FEekt+*<7*gr_jABF(+D!gCl5&6BaDruIbW8;P{7K#N|fin0dmh&pg zX&>uO-w-AJ5Woq|mWQxdNwz9{;bQfTgEcLsYl6_UmJQF0s8F0=+fn%dLqO@6Abe?lG_JKp``WyLniZ ze!2!0dy?3B29bg&lIp_gPJTd@is^B70~x>jj@LJ&j`x-FZQd+P`|NWo0wGV3Tb1j< zz8Lfw@_j%}Yf=fBGFX#2r21--CUY3V6`Zkcp$PpcpI^EiiQbAtrx)fTYx9w{H}-vS z=yvC0w>lsDFqG>&nD0E8jU3E|4nEi*_?V><{CA1)E^btKge8pJ%79%d!F3jP46p2i zU?!j}L%IA>VXQ_O<`yRUAA$}m5Ip2{4uC^mj)3OLx@!xjyw`)1i}MvrIRcE>>YL(F zRhQ)|Jr3sHDrk-a%ld*dUuX{YvK$Z-+c9=Rmaty}_p9~!uKch%p)Iq!H2wqYod>w- zig~=J7CvUEzqH5L@((^V;^-Q;FkQlQ%r-RaLiDtW{z%5W+{2_a(hI%|=37KRY7;hV z^%gPl{_hf%$k-K0n}YRIjn^05Zt1+$(s|>{xt8tumhIWd_H1ao4bSJ%_gbnd!T8UG z?0ebd41R+pJTE1*(0wNGL^kk*TI(|eE7P`!+}%Uu-5zpqcMpk#wKx0J)A^??5lcms z*seg;kwtJIx1p%K_X^7NphVuGm9=ju*S9u`+0k56K*&A?=o&2O!obp16+%$*$HnUC zWHTaD3DxZ^V(q|bu;FJ z%}2&;q-&dhf=omurJ0STl+UGyXr0lc<{15uBj81(Qana+Y}+HZtCrlVS~7JeSJjrU z;yE(nbo|Ro);ruz}dH*?z_Km3NAS0&BhqL`Xr8Yo9i4ATfEZeDnPM|lE05X zbvd8Bp5f&%?+qJJ-MrUvA|&UT_ss}b0%G19cqL$&_oB3>5G$qi&v6o@E#6;aX|b}* z8MVXj6b}CfXnVAW&<~mA^v{A_2Wo?aO&4vddH#e0#!&NAZOzK>^i$*A^us%ODM$O{ zsCtV~F#E4r&Yi1DhMb#ajqGx6-Og;?&KsL1m%qLCt+i8M&egBU*RR1V*RRwKTdn>% z5KyBlszTX|7nvFS+g!%h4cw`t9)uARGfpn07b*!=F}3IL0&aQxnFI&8N~{-&X(0q^ zZM~l>_GG;a)sDJoPa(=rSo&JrKw>6k-DbA^ja46X;2~GFHD9%LY~P*gI(r3f27bE= z&$+std4$zF^VK`YdhV82y>^xS^%`X_Zkzyfz54dTu3HPcZd}SOd^o@G;avEUeE5;9 z{C*CbPn0hde(mS&8PtFM=o?3|47uUCzvr?_THmXkF!=3jasjB6|Y<9|eNA|54-my*|$$_$v2C{eKXS>}~b`L2D5A zr8%sBkEVBXSPASzi~Dv0lAwzL@qy{!uIxUcbmxH%xXsQ9->Yrib`jh8eVODmH(cLR zh+S?WsM)IHm3Ce&QQd-as*9(DpRF;Tz{Q23n2U(Fy&CNh&z;G zl!@{dzfcZWLU3u6E;L~8`iKVaUvPVF*k{XxQz%0e z_(D*GfOA_RtafIq6gAFtaP=z7u$C;9h;Ah~J=(~NOm<|{FxAOr zQx+^LVu($V7vF5hnMxYdjkxpK{0^37Xvp{@DQ)@*1iD*la2`R2}Sl{(ANIOEBS zCAjdae3+I#H1?@p@STPEmi5_ch%6M<^r;@v@~yU0-U701ta)0Ii32a|(Q%+GKwFcSM=Li@27!hqeFegLWa$u+}c#zOFn{ZJjt``q-gAz_U}0 z`I@EK0Dp6Vr8Bj4u*KV&ueEK2r_b=2x&>p0W&7;94-6p&LFy?{rxob?=R)9QmKA~ign6PZ)M@6j*J!;CftRR z!soQ3HkSJ62@r?5%Et%c-L#+EUR3)1%7ZPO+VVq15~)c&m7wL4>3hY1h~Tjen1GN251Zk>U{j8O9EkKQ0o8Bgp)^?sIL#TOkhyRPMycqyg{54#H?dMGpeB0fS>gR>2ZcZ zjR%Sxmz&?&Kp=?I77*BmD4x_1HDD6q0RmNFmS_Nf=7kc=HUDmo0JT6dF5?;ljPtr| zoO$5k1^?`+v^s*9*lZhI4>Yz)d1rvbIvFn<1O5Gmx&VVObq1b`ls5<&uR|lJlLIyv zlNehVV#1qrMOimxsmOHHvA|ppyf6aiQOO~gx(j2X`_S%xT=)i^Z$Vy(^nhj2j`K$0 zDI8{q`nrElFU0C~XkoXDb(t%g2_TEC(B%x;S7We(=&}s&?YL4-Twze}sc)t$9mAOp zzi{*^zLx9Wuj8Ma5XXHdAv0PFPL^KET3^Xt#un$U1u|=fLsDFuLnkp)>&N6UZSONIWBw^ zeK3O!#Mg_svGA2gRM@Cn%^o^HH`Uig?lTob^U%aGQ;q##42^Q}qs9zm3N#>@8oc<_(b^iz2dWk zU!3j*cPX$ghm$60aVkrdz^g=C_y}a*sGbm=s`L)U&G&4aj8dGki7~0z#K>A5IZP(z z0OF*sBc9@69-h2_^(!|c<8r|f2-1rN1j4r44I6GXY?y%$j*8p0D{j?t)vC5LU)u@e z!!x(L9=p{=n~bi5`L2VX_&qv!U_cZ!{ zx?7Fo z#w@~OntB+^;PeRuIR}A_iNcd&q70Zsa0QB}F#7@IY+eRRKL}AVtvM3B6XmKbZGTas zLOPNe{yaoQcE(eb01q>eOs?ngO){&Ux=ikeyCvL&$0Szz6r+=%y=Va&2{Iq&B0+2? zKmP7fr}F}r0d%a(6ANZ!O#2WY&9QX)q z10PSuGPr_C1XrL2J_|8`{LRZ8_|te*nya?VnM>~7vh5Rh!4F7ukNyOAZ>(^QH zK5b(!Y>Q03IbxgNd2H4!)^|Mi85$-W`V2D#)6UN0(Y=eAc{$fv+`h+3LQNw8C)Bxi z0;Nfyx8R3genof)&x zA+P<$OV={*uF5yVFbGe-+5N$x-+Ae`NAsP#By;T#=i49t{_5|q{xI-yMQ+ET{EkDp$l-kCa5i*Uk&=0|Orl@5_#tT!OV#uW zJ4aYdm*jPU00!jcQ*WcbbCbz7kjY{zA?lP}`lb@EW&@$%5!lEww2@Iheh8O}7I3b6 z)c`E%019bdCN1s9t1m)J@3Z@=3bc@3I`rLDg|fXP!vnE&=F94TV%YEsu6A2NBVd^V z;*dvednN$ET z&{>{)q91>N-KBAyc8mB$*XK8u5R z^s76*y<_@Ju5|;Kj+!^-n>PaF`c;%j-;DZgq$8bXGm7uG$!ZZ-dB&Ofqs+W$p-(?4 z+Me6@SN&iuo^wt6^9UpR^O618(0&_9m`7r=v@aG(U^l7dC95G_bYTqbsxcU2Nr`E5 z(*<*5i2YnL8VmPez%#TBcs_E=y9J!UX>p3rBsrojx^JagDZ@* z9UCuc9Bj_mZnX@|7~wl7kxA+|E=8k$WX=fBFB83YsS5q@871 z+B6$+YpJf3iT0-Kl`>0vbA_8<4x{u~5sc%Xw7Hr>+1^?k-W7Z!=fyfexs)llR-d$2 z`N?+~ypGs~is8gX7(Wb+;#hS&i>qVuytr&sqE<&IlWcvHgYWl{N->paS#rJQcFVe3 zE$ePPk!#tOZ`qa&Z5uC}TreA`gi5Dr(X}&B@>j2rVA40Uc6w-i?`<& zZ=bBV)6#as_dzh<(sg6>W-{0Ec)sQF$+El6R2tPSpJ|OwZJXM5cj5BM;AC(%g2aCI z)7l5u^uRc-wrRXNwG`$5t!{7kHqS?!{0z5M?rHFU^jKt1jsHh**3zIana@MSEYf9> zGmD7LxkmmPJBqalJ1}P>_>RHfWz|S= ztg6k(p&WN3_4b3(8TX4+V_)(@W+eh}hPFDKx-8mydkttM*Q@<f`E{!I}rOWtjmXX2jQe_lRP&Ag}kD3b@*HK23r+osMSaX4SOb9KS z?CLt($*4|eli*X;F(Et}BvkNs55ryE@iROcYapo&jAFSd9_{Yk*H!R?xtxn<44@RK zis#-NQXGc}SIXho=jItlTI}57gYkyCwh2z?<0zHOOTA6%vh!16)ZgT#{ylqVC%!G_ zrLa@$^6kj-Tao3{?YYRhd}LiVauf>e%G(?F-rBhL!zXeZkLEWX&4!LzGS_>h5Al_W zMVOQa;7_g-a~RxV*_>X)X2kdohhdDt<*hH+E231dQSRs*YI;C;#d5;n;q0GzOT6 zQtDn6gjqR|2G4Tchgs_#NoSgR6Q`jdlbOkqfx9&7ol6r_>V7l^aOYUegwg&~hJ-~- z8TShnFL64vT2hir ziuiz^GbqC}np%r=EGfdh?noa>#&RQ%XIBG`AD3?G2M`ra>mwy97V7sK&0;nA&y-hR zC3{${4qiuuN4*)Nr$%ssq+v2#)J`YRJrH1q(@B^$!xl-UW_yF=*oDSwpIHvW#93Ah z#g%yhe06R6b?V??^w zUKxFb(O0OnN+_MI-88#f`%T`uy7TYw9fJtFlS*!9ciJt}R-rp<8^(@}9eedyiGF1& zrTg`PhftVDrtuI^`nim)L4q(8HxDoqC)tp&)LE#sPM03AKclIYqi?h?&fsSAOT)$n z1`??hbdx^z-Tn6f(HJZ)J$mgYd{bj&bT>O) zjb46Sx|c}{?n5YXB0D^%mdn@;6~YH0D{I5CA?fYyNVr?c&wMAx3_zNeE;iZ-?fKlu zDBZ8~3_XPyjDYiI+11K6`SQr9mP!o4D+Qdj0|>uGc-D-?Ds)Auv8Ez*Jt=X!2DL<@ z&l*bRuoKFw@>Q9^jx}-7PAE82p#&(Y5CAI;)vd5{ybwzci6e1Cik0HPQ0_dB;1wl< zU;qlQAKfROUWI<>N))p_)P z*|>7#jnN$(K+mYNeWU$zH4z3tOmA|Yo%$lO)!YYjJc*Z?1@`Xm>g!7mC)0g>n~9i8 zId!L|dDiEx-uj8(AF2G*gMiD7GM%N3=?mO7(dOab{Z_VWgOTO=Ugi7c3mUrXL@YQNRg zeq&*-X)`t&<|142kuBNK7S*NqGfnuIg%Y*0OFEX)mNHHFUA8!bM_4eYbWBzAzHDHh z^JF9n%3CSTY_%!r@$_Mjyqq&oHDFc_q%zlKIrU~<{laKWf-eM7Otj#ZC}yNe9t$)TN<<1iY73gRO(qtH z3BwLJux&iO2VDB6xsR$1k)weww)yUG9;B)j_XiJ+4L4R5I(= z6`y+?$*P~Aa=Fqo^&+bBDkKCz@boC(F>{Am5#c3_DqH zc6VQ_s~QhTO!0vq6(9I-?!2}$8(s!aW8+n}(K(Mtv5#4$Qls-dqpoxBMExPLfx$jj zrr6Tb&NInGp|7%GeUPprE9h+*f!%W+9+l&~rm4E?3nrK3E0)a$jffK46{uRW5RMUy zXSwdxRy45!#pkYc-lG%%{+a3?Su1_Oc>4sJ9j@9I41MqJnH z%#&)@>afirgq}5L;Sf zsU*cdoILx|XcCfwwEYOoNgaY9WeiIYbZn%!Kt7QNuOzG4qFKm|%;ZBTyL54?ZV`H}6Ympz3jV7i9ieVYzTbMQCAE zJ2^ZsG%DvKh+qW{cTa++VJq$)lHx!bT_u=rV5&PK>{^y%p(G_VvLxidwp6F-Dp_r3 ziuMEZG>i})88Od%v}u#1Q@VwJ#1>{SRH}td!CiLEGEgnd4?brL(^nu?F-H>_p(eZo zCP~ptm+WJfjKL^N#_7iD`K1u$$=ytX!B*4_5);~{SZN~ z_K$e$($V~wRbX(HRZtwPy+P^4KxY)ICe}EYlS!L~KxGmbZ9H1l zP?Sgu$siC?e+H|TNRAo+(*_@u3sS0v71sfhGpcsdOeUtCN@C#{XM7t}A19>@r$;2U z7)InNqe$?vg6!$l7{@^K1IX~UCmH?vG(@o;nj@Wj==z{!VkjQfH@oV}AE>5yR-!Ex z$2_)QS3!-YVy6@K3CP}n?RqY|sLjCHhuAx>w14ew*jh)AZ=9z~%t~rIzbQ!!x z?A?tR7Vc7ET*aw?!6Hx1a;TiDjRT&Gw!SK?R>;f*OCvKq=#)n02O6ji`!Oez;Gt=; zo-f+pSS51P9~7IxUN)vq;IL>FV>mXDhzkXX;A-m3$SCjvvns3sm`+@=4>40`Y;LNy zHcE>uLfqlpyo0>O4wzFi(G+G29_gUi2?K!;bKp#D__R`m_L~w9xUy6tP1_SYc9p1G zyPo>4=k?OGw^@mR{XtWt((NaBuwVxeiKvBBy~_2kw10+{>BWA9Inl&2XxodZiU)Vm zx1SKe;B8{awjvBEBZe@j_0%jPhSW?vJ9%KD57rU*%}IzGg&0id{}se&5uz3^(S(^F z&xsqt{%RyyIQkJ<7i#!4Ak3FWG@Kc1XD_5>4HlzBChF`-;iN^p6`T^2D#w=w8!hV4 zE?YYNLV4x2p;gt_G6$tnF*wg>c^>^s^W@ zeNgObIYj+CtShaHpf{>)$Tn`xRc^~yZp#L?3C49~6j6L0QPnx&Wyl5z$o3taPKZ;S zA;541Yks6ss5~cXH=g1sQg$H-pItbrk-H2E)hC{Na)006C-(0>e6aUGp-v^$XU&)e zA25jft2L@`3gstIrDtQB#_74>$H8KSa@d_E;>ine9!BFf-uYqe1K>y;b}?}TnENz} zjM^hCG}rpz5E}Cf)zV53rmV~Zm(zXxI92dt*;u1LH;u+=T9mjvFw5W`gP$_^n8ANzP{sPmnanM`;}N)W2&9~CCr7u*c|yuRl@O>NMiH&RQ@lIG z;0}{I!@GaQyBB%KU5~P{NOlp36|UHgiiM?^E{Z*$n8}IpnV5Nr9hI2Gh>3$(0?0zU zELO|9s;tJz8jWbDMMEg+2a%?P;TM)!m|9^AWp)(;Dq~ZSwh+cv!*p^$KNgeIu4`ic zEVL5{F*=mkt^GObf?rSS_hAKw!?L_ycoX#oFqDlT2X z2f-UJeK0!x%1!KR%eL*zFW!}H-j%P#K_4Oc!0Y=&?wUN|#)(~4va{uZ9Y_$tSoQcz z6Bi~2rZ!#QG5yjzqtmA)#o>JGwrtb3d}KRfF)0L}$Q_&)HB78yG4%i`A6Ad*Zb`Os z$xQXCZ1t+yx(X>b!v`&Q1v5kN34_^%UhiHQ$dnEzTRsuUr*?R##=8k(c~LN){)BHo zwLmKxy(?xt#la_h_o)Tw3V9<_Xa@X4gIC^sG~bRM$J2+0<)1rf8uoc{0%qxO^2-YH ziNHU#$2t}Cd!c444#u~B!nasGGT>qJ&U(kY@e@Tc%e>8CJcZ;9Wq3a0laYV#tC|El^E_B`yxeSAD{_pIV?*<=%zZ22m7@H-5smpIV^C zN>-*g7~l5^-+pR=7F952aWEMmav`P(S{P(yii1g%6K_AYK()mgOJUeYuH37<4G;>7 z0+thRKea%M%e*{wv?ySE;w@WVhog^5_onobqc6$5I@cIQc>%JI=EYu~hFm%v zKk$h_KDEPlhlvrz!Q?|M1u(`0Ev;vHivuQ$x1U;|wIMH#M<@=)ktW`LYJr- z0b}AVbJyWZtGql$r*t^JodeFJobuh9a_8O99Yp0<^E{7_ zj<0%uzePu%7l${6;_t60&|ju+Pv8Cdj^g@$Hat5x-??}(Lsi`mEBjGlI4|H#j^Y0n^~(~S-9vl8<|U}FpXQQ)?>lCE)BdIuyG>2u_-7? zMr_f2QYk9W%&fuRWq2YzTM5N>Rm%c{O@sf7-;Q9jQf>7sn{V)LxAW3 z%i?Qvx6GD?piY;CrIlI^{XoMMeS&2wHF{%H@E(o^T7qSnHhR~Q*X%P5Om|?}r;!>S zd)L4_0?Q~jdVf>!TZe`z`UJ~wH+r|omWBWk2$rK{bXVjFAK25t>jcYZbt5^#JgR|7 z11v3#?yT`)MFTCt@)5=8)f!tGIG$kRM0!~kETPp9bUB+(Ih#grmDs0-urs1Jqf@Ij yM8^CRIo{UzeCq;!jm9PR8^K2!oLs##J(+F%^9GSOm^e|ccD+`ce4N~_F8B`~i9cQd literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..688d30a647f6a565c9abd8493f328ad29a778784 GIT binary patch literal 2863 zcmb7G-D@1z6~A|OcC*Lw10f^nkx-L{*8lPgK^yUHsG^KTv8z}bv2(>G&kkyeyXll zbV{I~_S1EvVo<`h+R(u%A`MtE{7gMt$-=H7uGeB&xb9}$tZN>fsTyu>U9aRc@(OW> z*NL0w#={gLkKs*PW!Tkjkm88_9wlU9i8Ij%y}EaYOBPCxD;5goh(LvQ5VET9UB*`$ zk}KuGB(npT)rIR-S6K*WFW*=&y?`}*+u=+Jn6pFXg-k7pCY-#*S=Ck{vKEXl+kVpy zdC4@daK~;c-ebXB0dfNoqTtX5hPLm=i^>rVFIZ$=P!+OnhoD2O0?0NUQEzxY@LsZG zrK=w37Aqi{;ft)rnPUgY)D?Yx2e!tH6l^hDU}cHDEF@TI*Bd^6k@-S2STm5q_fa(J z7R-dKCFE@|C{a9F=5D-MnXTB`C3~4On*lggE;*ow+Vc`akd^S8vG&PU0LEsDgSjqK zt6=jAfX}%ZtFJ;Kfi>dWvtKrSu1eR2MST*5~gx< z!LlbsPzOCC9XCcfemI3eN+Lt@uqgvaL$(JE7cf@#)`4u25M>>-Hhl=A$NiZ%wXh#m zgw*<6!d}F~xtiWTt!<@y{iEMD8RYs9_&o0Of=H!zeuW5PXz-PgEqQ<}cou^TVhC^& ztidH(4xzyyZbQ%M1$FFblR>*><6a0KgtfbwjZtdv`=R=FW=b8w37uYyL(Qd};34p(LH zL)rIkl^d(!k_gU~W@pR5oqxMwJGbpc*iiF=n*CC_FQL>}jWYewIEXtAubKt2MxGkv z*vYrQwKI0MGj?|E+Gn}pyWf55%>8e^?fqH2BObXsr_XgxpWDfu@8r&J>*x325OI+7 z8k&P`@7F+n3qI$hLZM1&uIZ+smO%A^3e)!;R3PK9I=PvFQR?W`5_p9+h;X%gaG5ACo%kly*w5&VhC^s&8rQX~r*rCRNtdZSQXE*dtW@*UVaSidyLTSa<1M;Lw1L!l2uqLQO4n z^>ZL2<{X*V>J0(c+AW_K({d8$*0LPmR?4yzA__Uq*5XK#r(t+!@-T=7 zbi+mU0g(MQ(lyA~ncp{m*Sg#4j81PYY>!@i^b;V-^Zv`pcSC=gA;Vw0=l*H#-B)*V zGo9Q_mt?XNU2P~o@!8~a_kZ)R$=QES&h8ebHn0Ej`lE&IZ(Q7(-g@J~%+}2N;ZEUF zr*LWa)Ysp=xXY$H>^t2dGWF6IM4uY}5=ocn$Hw=cnxt@|bNu-(q4|kJvO89|r*~5@ zx4*xS+7>o)3QNp~moryVM$`6_6*+|mu$;;fB*Q?W)a76`hB3+?pzLtpw=78FGqA2OMSh%s9TyBF=oGaI z1c2@Rx*AObScAkkmM-iTPTYUBo5J4A3lEw}?|a|>C>{5nWJm6v?51J0Oa2d%)B@C{ zn2&}m%M}h-YlN%#FC{T7u{0Wr!&FF#krU+?ZvK4Ey86?(tFK*~eFvSiNlIV; z5g4ke2?*9N{hF*AdJ^p;aKdQx@|0W|76yW<`a&Pntoc;1EmSX$< E11A5&i~s-t literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/parser.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/parser.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9495a55d60f0459333706a1b6673e64f58eef60 GIT binary patch literal 59532 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 KFF0huF$e%dj0Tec literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b68967d8167e056e6f33a33c9159c04e0665a822 GIT binary patch literal 50732 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 KWdn*?|NjT5I{sk* literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83a0ebd74deaef9963659f9dda0b0bcd886f22d1 GIT binary patch literal 18865 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/tests.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/tests.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d50cabb609f7f642fb615313351d5929d6b079dc GIT binary patch literal 9254 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 IKapDeFWH)g6aWAK literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/utils.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7081141e958a9651a8b808b2a734e693d0929fa GIT binary patch literal 37129 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


    yQ+<#Ma)EX8Ee``bC{JghcT=`% z(~Ku`$w*#kUys)meE#>2ynAHk+?`X?r>5}7c!>{PAGk8r?|WyxjG1LjS$odAI`3Ug zTtXAtkZI3s$+XWNo2$*$t(`hFb*NCi;=|P+te&&ys@LYL*Mc!XI$!n7**hn|y}Byj z^S|q#iR4_X@~%}`*D81xyaA+gw1dNY@9lTr&g{qq+VX+6tgG#@w?6M(1!d9q-0!+M z&VO&u`80bjz~|cCXUc{jH6e{v{Mdgs(6f;GgUiC z(wLZ#Yby|azXCZk>*$Bjvm<^bXC<)-0-DprgjqI2spw7WXryyM< zFNYvf(-tQJ!1cgrCW%9_kF@kDS}W_BwV<4u&{3;dpL~er=JL`dB|y|^G{Kaa<4T{* z!O^y{jY+Nu5^ddW3@S-jlIC_nyd5er zhENmd)`rlMTaRb;kI4CBijkOP!lvFRSCMnmra6P5`U@odn?&}09UkaERSCWoGvRyN z_0^K(XnP#Mz`U2t1={lg;@I6QAJ;%_{Qb_^&Zz$5{?7iW7IIVux+G!R1BVcrv&%vkmpI zO{qY7ui|>K^xC`J$m3)0F!*Ma9&3uio|58f*_fNks@sj z>QC5$Ar0AJ(FOJ=6pp5DGXeG~iy9|QCPeC=jKYCT7wTby@bN2(iC~cE2fNH_+16Dl zQc)S~dQr;x?!nPS654vv6qL-QWF$7s zlABpvvZta1gM;a69WX&X=wl*Bn^7V}&5iPuH0>`0H_`2JSMZ~Tj~n3i(llQAZe`BZ zn0GaT)8ao)K8)t02m@F@!vhJxui?%w6Ay1OqBo^5foRZ}nJr})Ga~>>tTDS%CcTCw zU^fVpr5t04k8%v8E&<%D{+}or%6kdm$uLa$0AlX5!&8*#k+|rQ#EnR?0s>+3s6;!_ zD>t#na9#a9R=^-<)L}!O#j{!b|1a>It|@hf-iN}Fk3*EoB8 z_B6b1u$r@P=Nr1<_dQ?d*HEl4uE5HBm4#frHFT- zIg0}xKC&~UQvVNRWx!EMY^?qpIHp#S#U!-Bu%5vRYA{`2YMv?h52=MRGV&Js3uval zu%dbP`eKDt<$*MkIc^VYK~YpJ!;u=m8gUsOYa`~2CLqeV$~iI!l7tr#B+W_1Dz!^YD8jkl=(8BUV=9;`jzv9g1%qs$5J<3IyroJ&rjwwYGOSR2FCV_&;MB=aehZG3aBYVy z&`cy=jAA2)K`>q{2W(~NJc2FTp8)M2o_lGJ~V zR&WCF3i*ftluwW<#iT0@fHQl@1%mb8Mg$x1({B=BNvhHU_Y~2me2+-8E1G=F++2-DcjulxPakQt!JTdD* zFiON>==73kfrVaTUez?GXtFZ%7p36;K;R^n5a5JHhcY{o4YX%n?a!I4Hn3`2WkV%~ z$T~@|#&noQUwBLZw=Uk1WM*OQ9kol48p!Pj#g9|*r0{{Cu#uAT1cz^FeD@VhAKcKtd|D04C$akAMq;p3 z9f86aG*3aBplKH+Q*{<)Oe9yMSD=WAGb*63sba}XL@cg}0cplK6C%sMkUXSM%*;F$ z1?eYO@R4hpVt$IIl6`oI{xQ;5Kyc9mRkJZ}R;m^e&}E+G89PMCOA{68O%=V29i>)a zVAPog2IhMn`UPRtpCK(KCZAAQL*%m34V4u*h3fj*mP|5V-9B{y=etb5o!K(|&AIl6 zfsRGN?QdJOIjbS|Zv61X2Pa76-I1^B$g8^dLsk-=JAn!oa@t)@O~OA0rbX7{B(?xTV%Cxt7+9*fCT2 zj4}J4obIoJdE*0&vs$!Ostv~HkG|5VUNB^xzzoMht<$J5|J8Wij#9|f71KI-XCndzcE|4Wx-eV-idclWNLH1mb|Ye>uV{r zuA4eIeKLb>z152W{k81fUr+_UB!@jd-(lnDc}dwEI@Q19fY<&fUg1(^M(mmm(Cmilh}Ca43jtM7`WUjt3;iDWpZxiWEl$n ze}s7d58)Y2&n8+;rz0$-)kbI?p&3a6O=#vMtw1a9#iu{7g{gNE^_y5{4$o%}so!1knNNgkS=tb-V{F+dJl_UpO$jh*6yI@~*|R$)?6OkJa=i|+ zPhTGItn`uOA7J8a=>~lz4&8K2_E;NIM!LWc<(xlA>ogHBg{-u|-AItln_35f5eG1u>X8&RBSi(Nmv9!seb*qQE)qLC^ zI?_vv8K&mL`}4Pv+&sorC%A%iyU}fI_Dh=dVT``*B>1gDc63{yoBuM^GvZ9^tYif6 z?h;iuN-bX*7oEKDbfD~Q>!@UE2QBBQaNVZ^Q5b!wJSnwBj2};$&i2A<)q|OB*CnR+DUx9yd^9 zXuU*ByV{w9chb}8tc$BkE*Y8(a}F-4yxB|^91cq4m$gaOCtV5*LAEwNl%gXwhCPjC z#T0D62<9nrtXOFC zg~?)AXITVkBy#ML6EPfwLaQN=K!YU%O(H!9b`*1Iz9edbbgGIk3oI|gp-m1Qh-E^E zQt)O15+4uH}$kffC~)#$GNQ*u-|U2S~L z-Ae&Pp|R66s3gMJgRsLWQO!{}?Lw$qSma4KvbO`%Ig4~Ns!dorYQ;()H3)p6E2 zR%G6~i>kmgU;S}C^OQS1UdMW#3LfePvLspmAjNLwPP4~R&lAH#9gSPL(tqvg2lM(NF<~HBo4(kzWA&d>I4j|A>2ZZ9l z)cX7iQk8c=ao*|x6g`>NyBp?Sy?;L6+)dy>IabFhIXcl{*9aW2L7}RUErrGLVeC&H zp+7d*8Tw<`c;~n zQl@nfQ8|7olKDV79Q$FPvca0b$ux|7ntGcvM5l=y#hKbTw+O1FDV&^$g{&s;f>J{i zHnn_N4lb8Y=Vhj0MB0rL>LB7`WZyXZN;`@P^8r6QUpt%?a%kF5AzR}SsE3g1+D({u zL-`Ei<>Ba+G0i&C@)qrYMkT?var9GEZ$h?4Vl@58RsG;woaG4aG&ZbB+>Y|o9raus z4@hjsL=0f>^eRF^&Q6-dcL8WqjrToqCcI%Jkg%jCt2cQlNTwFr8Tdh9+7N_yI)<5# zVr6CWZx-k$?Hwu|1_@jA2u>$W4I1q(8HwV|NO><*^^6nRJ4=c7F3Dy+L}w}1@9kVq zHD2E%uSadycX11Bl8n%`6#4hk@p`31U0vKN_>gust=?<=96)p<+cE=m>5MpamLehVMhc6h7hb*AKR32m|1Tx~=c|RRLy#>N7xj4&z~H zX-BcM4Y>%69bHQ+Oa@LQFQFI{LNh2DNI~N=i6d%b;HK%=R7TVm!LFRIpxvRx*ZJ=}Q@UL9qnR0?@`&$fCDOL_k9}KHT&jYZKjN5P)JS zEXN6ocmsBE`Kiuihsp)=d{38Dubxe%Ky*OQh{)(<%AjWYYxOTG9L6wDMzG;Ta(j@2 zBtIMuCFrNz%Q!@Vcw*X6qmwq{Nt#bmQ2AYAgwD*~@hy!l!CkBcOV%G-L8YIN7{D;h z2$Eq2BoUl^m$^#Wv1xN)@RnZIbuNzVuxZ8{8)<75%a* zPdb0tIlq-GQXjQ#f7rG?2cD~KC!*-b5}I8Gn4(`Nob0e&ww$pb6)ganSYj5Q??@zW zowVJ-2G@%TMVQw8vPgADva&9uanDL!K6TlNTS$#M+#$i4{nWX`Scr8KV1EOZgz9B4 z`AHu|?SQXXty30!Acl@#0jE}_lSe&->wiz;;=5WNgZf3%9nZnoQnCp345^ty3|8X4|&pyj$~LEPF(EBeY>=wwdC# z=DgeTUXs$oq@%WRW_uy9Vycq$8yd+LyR?i{37MJJySfU^#dbtHwSO%+)P4?$&E(ri z4s9s0a|&d6Xh`0_pEtOANh8%QNZ3cM`b}yTE-1f$O%xhiwDEP|96Y&I=kstI&gUD> zXQjHwh~=m@0JGHBb1kpu;WoaWZ+tx~!9d;RX!ud<{SCi;_CAk*ls^Z<(!oJ~Y0K(NV*W@v83CbP_p-8H_xRXQjl$W7w(36!1K zgy}ML1BWcI^PEUpq^$xF%=!PJq489LDh`y!k^xoHCeL$t>u`b;0*Q?w`xC9gI4MP| zr_zUku!kS4w2$A`@!NX(&J3$O6{9lsEwCS)lP4`O))2rG+9Y&F5o$)@!M=N#eI<-R zfaS*v__4lt0gnE-g7cZENY2D!@koW~xs4NksA11w|;sy8Orc; zXL$@QFxZj^AOVjSj_}SH8e;XZz(%v)VJ1XWn-YHD8*dugpmBsCoMX~5Fx=?V4(j2E z0;ucDCFDSzg7QIr{0|zzKS4w+*AV#98^O^8&gP0nl5e(^P;F4p-*$;$kB_E>uj&k) zrHG|SYN;Ei1+YY-!z}?i{<$_P0SEQaC*KmNgjQ#41V?ZbCVh47#p=ilry4F{%`_!H z{-HAlYHBY*mA@{cqT@@47@@m?GdNT!+3{3duX%TNIdJj`#)Z0-X#Y1sywra{&Y!};KG1sdv#4z}Ezoq2YV#?fmezHI z;e%AbAOo7Zi;AI1;Wm@_Hg3*hi5Ci>K%uxDD+!#lB601q9Y9I9RIRpoSoT z_*Nc!F)++b8#Np~%g^NJn2(Rnj0Rb18fEmc3Y^SO%Q{*X$@q#zG79=lsTdszh1Eoo zui-{uejLT_1CI=vKPc0q)4!0h&I8E>LF6+4iEtQo3$ZrQ1{991BN`pYDj!rC=8be? zKxs=T3bz1k!>(Yw4TsXvmwEK_`*3&|%`m-}$zlV8jZn0kNkRC?p+Wa{2V0$~iJM%} z8^R6_pH5bIkIYN%k~=1hfw~8uK45R!+jbclLI2wJ8IdTEWIMb~1Y*5)rUGOcJED3K zTFSTImW@gT$!5E=OP-i$+lO#1#YCwFcnLb0-eW3Ne={8nPw!=rG{sxrN~xarPKy7_ z-neJuSZp7MrAF=977Pd~Fi(cb3p?Ts@;jZhV&;cT1{lOJ8%RVbNRtU|z!@Oq7Od1d z!eHJXOK50`*llJR`K|@qY6*kv7#C3~V(^|EghR|-GGN}L$M?&S`lm*YZ($eJZ1Y8G zl%;QivagxhPo>vlC_+P+cHS{AsnJ{y4|cFP<4sN6z`#)0Aqv=U@}1#d31w>VteQob z86~j}VG8lITWZ;qrH!9-fYAiiu;Tg|kx^1vAZ<$s(?$0y;^Ugt*)@l9HHY&xhqJ!J zh5BX~3VG-}F=^U0g}FO9X=u;@P4B?k{yuyYvILJ{G!0O7ctcjQosk8XU zO(}#QgO0D(s{7E0C0o7@5Gc~>*P6nf{*c;1dq&vqeW8l3Lt3lij#=%iBy47TytlMH zUaF?K>Nq*_t+6QNF0`$yHG?;acqR=g4g52BHyVbF;L3gU(UQI)3SfdE{<&7uwxW&W z-?DJ1(5jNI)F7cf{}I807R;C$aneBDbQ+t8ov;dCR-0KuLPF*z7neW;TmL3i6GcoT zg?XidSjx#RE4rs4xHqG_re5;KGvKIAJR#)<`*c|!ai4udT64gwmSkK+TN(Hmo|Hhl z3zdK_{Q<%k1}vsQ%`^r+N0fOW6eTJk?bU!r4}VG!+kkYs#?eJs%s?mYNan5gPyA?L zUi#ScgVXm<=W4go5GdKks4MWkE??P(tJ*-dV9R3qawgw#-49>Ug)t048w^HSMGvwt zd_xdbSi0r8oAQ$LU8>zZR=Y{mkp32J4G!0$K+YCP-w%U_Z+v1u41SY??JYc79hcy& zq>uZp%~aoIX|d&pC+5(%|0>^kgGDc5*R%%vUf5TJr`)M3+o+=YhEY}H(s`aIn-EmS z6EThlpCNK!=f(+3X@?>)J7}`^b}FP+?k+ly;mEv*nqJc{)8TnEM_-M^07Nz&8f&oN zQ(KRWga4pH&S^DZW?bZFDBcDS(P|5IveIR;IR>P14*C{-M9*xmaxjHpV@-LP^NE91-QURRF9%~ z2zQuLe=o8z1p|)nq(8t>{S?)KXfeyh_wSET7&%#bBas@8$mABJuB_CxDCt|NnE|$~ zIuEIn9%S;lBu69dHskh8hrgI!XTe1fC3ZdeHQdT@5vLTCcyBA0%`nu-xO9j{A{B(C zrL@3Z;=x@k#%+$#^3j(8(-cCC z@l~*~;B+oWv6#e%+e#~QY<(O}LAG%l+ySG6+J*rnEynf)DY9T`PZ`1YFmVU8UFiHs zgLz5@@pV#|ajLZX(ngO4D0ZU}9KipR6L4tCwAe<#AVd+&CuL3G!(?VoXk38!N+j{s zxUFRKu5mn!m*EFS!3doyTdW>5;4;Wgyi8(=_$pP6)sJ`^%My_f!Wtu!F%JKXFl{4} z1HYqawviNUn%KXI69p>k5CJpdjkRKW;2LkSYayX zKM<&CsDb?iRbgM;_C)gt97;_8E$b9XOh12_tm{ais#%)QG}@iMN35q0W)uF%EwyUHj#r164E&cCIX z{sDU_QFZ!Tw26-WI8KtePMf0_IyOwpsF&*kA>;w0^1Vdh&5o4Tc(15LdDNFE`~vxC%E4!EZnJ|pnC6`q z9}Oh+2vXZo2{W|wIdHfzzE8wXZ)4}U72S~F@PqI9SrHC)l#)tER1|$UBM8U)2k8KC zXxLFHBws7~&wc%ChXx0Z92z)&^wcZGYW`xgqL3|xGbqmCP^Q=DnBW2M2PD{58OQ3O za>C?PQDFfP;yAXc`S%D&kq`rbe|Fh(ax6vp&LZGFO6!F3L^zaEiK$TA$myV9=@1TF z=3lSgNrALW#6Eqiwvex%!j6!`Fz!70XiKSRJ9?UZ{7qFTXqbZVz1fjbh!KjOqpzI8 z5rYH$XAc!CUORN=!0EGx)M-jbn?-6P6?~6;KPTrGaEg^$bv30&Qfs{eQ4ltY|0zX# z28=FYJ5O9p$;6F}8)sY$!w~Brc8|or1occ3xa!+ z{h2&9SwZ_1gq2zAuOPH!t-pfMl(qf}!m6zGR}h-B*57g=U0K2MTM(+V`ftH5z4I~# zi`ZT;eUf-V@=x}^b95?B`l&hB~pM~;sjlm4lb|IeU50;n2 zO80q0=$l%d=6VrpGdP(fyHQp=ee&wh&ofWCv#COa8Yr9$5m`~52OY)j!COB|f7<$w z*XDP=!k){Wx`4PH`i&in0z7jA>{jlqmBhxG>e+g5=VD`KE4!6DmDoa^+A`g@XltY; ztl+44=j6$`EBVqtY# zVe|Gy?+sCe8YZ~~kAKllo`t&l*<+dH?CC`Zi**Vf?{xFb!1S8M3KrlJ{FT$kW|GsV z7u_ttBOps3)5@&9o5R#X7MPI$Oouy#By zG&SE{1v{Fi4T}y+;uM-%7Awf-f-&u)n|vO@S@F&V^n7z>V0I16{pPl1aRfE=TD=ra zrJ5X76n4M7Xzw7{!6~>s)Aj7J(9p;fcQ?$Reb7GtM!s!FzF{YiId=S?cQD_ABanv@ zuS3txir~)I#H|F0rOp==_GKv|CVEAzAeTB{P}rBHh*k9>_=Tm;7Zmp8G7*fC`2PV0 Ce&(P6 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc b/env/lib/python3.11/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f59ef27cf584223e60c9b25ece343d5e4da3c410 GIT binary patch literal 5731 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.11/site-packages/jinja2/_identifier.py b/env/lib/python3.11/site-packages/jinja2/_identifier.py new file mode 100644 index 0000000..928c150 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/_identifier.py @@ -0,0 +1,6 @@ +import re + +# generated by scripts/generate_identifier_pattern.py +pattern = re.compile( + r"[\w·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఄా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳷-᳹᷀-᷹᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𐴤-𐽆𐴧-𐽐𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑄴𑅅𑅆𑅳𑆀-𑆂𑆳-𑇀𑇉-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌻𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑑞𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑠬-𑠺𑨁-𑨊𑨳-𑨹𑨻-𑨾𑩇𑩑-𑩛𑪊-𑪙𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𑴱-𑴶𑴺𑴼𑴽𑴿-𑵅𑵇𑶊-𑶎𑶐𑶑𑶓-𑶗𑻳-𑻶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯]+" # noqa: B950 +) diff --git a/env/lib/python3.11/site-packages/jinja2/async_utils.py b/env/lib/python3.11/site-packages/jinja2/async_utils.py new file mode 100644 index 0000000..1a4f389 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/async_utils.py @@ -0,0 +1,84 @@ +import inspect +import typing as t +from functools import WRAPPER_ASSIGNMENTS +from functools import wraps + +from .utils import _PassArg +from .utils import pass_eval_context + +V = t.TypeVar("V") + + +def async_variant(normal_func): # type: ignore + def decorator(async_func): # type: ignore + pass_arg = _PassArg.from_obj(normal_func) + need_eval_context = pass_arg is None + + if pass_arg is _PassArg.environment: + + def is_async(args: t.Any) -> bool: + return t.cast(bool, args[0].is_async) + + else: + + def is_async(args: t.Any) -> bool: + return t.cast(bool, args[0].environment.is_async) + + # Take the doc and annotations from the sync function, but the + # name from the async function. Pallets-Sphinx-Themes + # build_function_directive expects __wrapped__ to point to the + # sync function. + async_func_attrs = ("__module__", "__name__", "__qualname__") + normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs)) + + @wraps(normal_func, assigned=normal_func_attrs) + @wraps(async_func, assigned=async_func_attrs, updated=()) + def wrapper(*args, **kwargs): # type: ignore + b = is_async(args) + + if need_eval_context: + args = args[1:] + + if b: + return async_func(*args, **kwargs) + + return normal_func(*args, **kwargs) + + if need_eval_context: + wrapper = pass_eval_context(wrapper) + + wrapper.jinja_async_variant = True + return wrapper + + return decorator + + +_common_primitives = {int, float, bool, str, list, dict, tuple, type(None)} + + +async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V": + # Avoid a costly call to isawaitable + if type(value) in _common_primitives: + return t.cast("V", value) + + if inspect.isawaitable(value): + return await t.cast("t.Awaitable[V]", value) + + return t.cast("V", value) + + +async def auto_aiter( + iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> "t.AsyncIterator[V]": + if hasattr(iterable, "__aiter__"): + async for item in t.cast("t.AsyncIterable[V]", iterable): + yield item + else: + for item in t.cast("t.Iterable[V]", iterable): + yield item + + +async def auto_to_list( + value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> t.List["V"]: + return [x async for x in auto_aiter(value)] diff --git a/env/lib/python3.11/site-packages/jinja2/bccache.py b/env/lib/python3.11/site-packages/jinja2/bccache.py new file mode 100644 index 0000000..d0ddf56 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/bccache.py @@ -0,0 +1,406 @@ +"""The optional bytecode cache system. This is useful if you have very +complex template situations and the compilation of all those templates +slows down your application too much. + +Situations where this is useful are often forking web applications that +are initialized on the first request. +""" +import errno +import fnmatch +import marshal +import os +import pickle +import stat +import sys +import tempfile +import typing as t +from hashlib import sha1 +from io import BytesIO +from types import CodeType + +if t.TYPE_CHECKING: + import typing_extensions as te + from .environment import Environment + + class _MemcachedClient(te.Protocol): + def get(self, key: str) -> bytes: + ... + + def set(self, key: str, value: bytes, timeout: t.Optional[int] = None) -> None: + ... + + +bc_version = 5 +# Magic bytes to identify Jinja bytecode cache files. Contains the +# Python major and minor version to avoid loading incompatible bytecode +# if a project upgrades its Python version. +bc_magic = ( + b"j2" + + pickle.dumps(bc_version, 2) + + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1], 2) +) + + +class Bucket: + """Buckets are used to store the bytecode for one template. It's created + and initialized by the bytecode cache and passed to the loading functions. + + The buckets get an internal checksum from the cache assigned and use this + to automatically reject outdated cache material. Individual bytecode + cache subclasses don't have to care about cache invalidation. + """ + + def __init__(self, environment: "Environment", key: str, checksum: str) -> None: + self.environment = environment + self.key = key + self.checksum = checksum + self.reset() + + def reset(self) -> None: + """Resets the bucket (unloads the bytecode).""" + self.code: t.Optional[CodeType] = None + + def load_bytecode(self, f: t.BinaryIO) -> None: + """Loads bytecode from a file or file like object.""" + # make sure the magic header is correct + magic = f.read(len(bc_magic)) + if magic != bc_magic: + self.reset() + return + # the source code of the file changed, we need to reload + checksum = pickle.load(f) + if self.checksum != checksum: + self.reset() + return + # if marshal_load fails then we need to reload + try: + self.code = marshal.load(f) + except (EOFError, ValueError, TypeError): + self.reset() + return + + def write_bytecode(self, f: t.IO[bytes]) -> None: + """Dump the bytecode into the file or file like object passed.""" + if self.code is None: + raise TypeError("can't write empty bucket") + f.write(bc_magic) + pickle.dump(self.checksum, f, 2) + marshal.dump(self.code, f) + + def bytecode_from_string(self, string: bytes) -> None: + """Load bytecode from bytes.""" + self.load_bytecode(BytesIO(string)) + + def bytecode_to_string(self) -> bytes: + """Return the bytecode as bytes.""" + out = BytesIO() + self.write_bytecode(out) + return out.getvalue() + + +class BytecodeCache: + """To implement your own bytecode cache you have to subclass this class + and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of + these methods are passed a :class:`~jinja2.bccache.Bucket`. + + A very basic bytecode cache that saves the bytecode on the file system:: + + from os import path + + class MyCache(BytecodeCache): + + def __init__(self, directory): + self.directory = directory + + def load_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + if path.exists(filename): + with open(filename, 'rb') as f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + with open(filename, 'wb') as f: + bucket.write_bytecode(f) + + A more advanced version of a filesystem based bytecode cache is part of + Jinja. + """ + + def load_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to load bytecode into a + bucket. If they are not able to find code in the cache for the + bucket, it must not do anything. + """ + raise NotImplementedError() + + def dump_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to write the bytecode + from a bucket back to the cache. If it unable to do so it must not + fail silently but raise an exception. + """ + raise NotImplementedError() + + def clear(self) -> None: + """Clears the cache. This method is not used by Jinja but should be + implemented to allow applications to clear the bytecode cache used + by a particular environment. + """ + + def get_cache_key( + self, name: str, filename: t.Optional[t.Union[str]] = None + ) -> str: + """Returns the unique hash key for this template name.""" + hash = sha1(name.encode("utf-8")) + + if filename is not None: + hash.update(f"|{filename}".encode()) + + return hash.hexdigest() + + def get_source_checksum(self, source: str) -> str: + """Returns a checksum for the source.""" + return sha1(source.encode("utf-8")).hexdigest() + + def get_bucket( + self, + environment: "Environment", + name: str, + filename: t.Optional[str], + source: str, + ) -> Bucket: + """Return a cache bucket for the given template. All arguments are + mandatory but filename may be `None`. + """ + key = self.get_cache_key(name, filename) + checksum = self.get_source_checksum(source) + bucket = Bucket(environment, key, checksum) + self.load_bytecode(bucket) + return bucket + + def set_bucket(self, bucket: Bucket) -> None: + """Put the bucket into the cache.""" + self.dump_bytecode(bucket) + + +class FileSystemBytecodeCache(BytecodeCache): + """A bytecode cache that stores bytecode on the filesystem. It accepts + two arguments: The directory where the cache items are stored and a + pattern string that is used to build the filename. + + If no directory is specified a default cache directory is selected. On + Windows the user's temp directory is used, on UNIX systems a directory + is created for the user in the system temp directory. + + The pattern can be used to have multiple separate caches operate on the + same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + is replaced with the cache key. + + >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') + + This bytecode cache supports clearing of the cache using the clear method. + """ + + def __init__( + self, directory: t.Optional[str] = None, pattern: str = "__jinja2_%s.cache" + ) -> None: + if directory is None: + directory = self._get_default_cache_dir() + self.directory = directory + self.pattern = pattern + + def _get_default_cache_dir(self) -> str: + def _unsafe_dir() -> "te.NoReturn": + raise RuntimeError( + "Cannot determine safe temp directory. You " + "need to explicitly provide one." + ) + + tmpdir = tempfile.gettempdir() + + # On windows the temporary directory is used specific unless + # explicitly forced otherwise. We can just use that. + if os.name == "nt": + return tmpdir + if not hasattr(os, "getuid"): + _unsafe_dir() + + dirname = f"_jinja2-cache-{os.getuid()}" + actual_dir = os.path.join(tmpdir, dirname) + + try: + os.mkdir(actual_dir, stat.S_IRWXU) + except OSError as e: + if e.errno != errno.EEXIST: + raise + try: + os.chmod(actual_dir, stat.S_IRWXU) + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + except OSError as e: + if e.errno != errno.EEXIST: + raise + + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + + return actual_dir + + def _get_cache_filename(self, bucket: Bucket) -> str: + return os.path.join(self.directory, self.pattern % (bucket.key,)) + + def load_bytecode(self, bucket: Bucket) -> None: + filename = self._get_cache_filename(bucket) + + # Don't test for existence before opening the file, since the + # file could disappear after the test before the open. + try: + f = open(filename, "rb") + except (FileNotFoundError, IsADirectoryError, PermissionError): + # PermissionError can occur on Windows when an operation is + # in progress, such as calling clear(). + return + + with f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket: Bucket) -> None: + # Write to a temporary file, then rename to the real name after + # writing. This avoids another process reading the file before + # it is fully written. + name = self._get_cache_filename(bucket) + f = tempfile.NamedTemporaryFile( + mode="wb", + dir=os.path.dirname(name), + prefix=os.path.basename(name), + suffix=".tmp", + delete=False, + ) + + def remove_silent() -> None: + try: + os.remove(f.name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + pass + + try: + with f: + bucket.write_bytecode(f) + except BaseException: + remove_silent() + raise + + try: + os.replace(f.name, name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + remove_silent() + except BaseException: + remove_silent() + raise + + def clear(self) -> None: + # imported lazily here because google app-engine doesn't support + # write access on the file system and the function does not exist + # normally. + from os import remove + + files = fnmatch.filter(os.listdir(self.directory), self.pattern % ("*",)) + for filename in files: + try: + remove(os.path.join(self.directory, filename)) + except OSError: + pass + + +class MemcachedBytecodeCache(BytecodeCache): + """This class implements a bytecode cache that uses a memcache cache for + storing the information. It does not enforce a specific memcache library + (tummy's memcache or cmemcache) but will accept any class that provides + the minimal interface required. + + Libraries compatible with this class: + + - `cachelib `_ + - `python-memcached `_ + + (Unfortunately the django cache interface is not compatible because it + does not support storing binary data, only text. You can however pass + the underlying cache client to the bytecode cache which is available + as `django.core.cache.cache._client`.) + + The minimal interface for the client passed to the constructor is this: + + .. class:: MinimalClientInterface + + .. method:: set(key, value[, timeout]) + + Stores the bytecode in the cache. `value` is a string and + `timeout` the timeout of the key. If timeout is not provided + a default timeout or no timeout should be assumed, if it's + provided it's an integer with the number of seconds the cache + item should exist. + + .. method:: get(key) + + Returns the value for the cache key. If the item does not + exist in the cache the return value must be `None`. + + The other arguments to the constructor are the prefix for all keys that + is added before the actual cache key and the timeout for the bytecode in + the cache system. We recommend a high (or no) timeout. + + This bytecode cache does not support clearing of used items in the cache. + The clear method is a no-operation function. + + .. versionadded:: 2.7 + Added support for ignoring memcache errors through the + `ignore_memcache_errors` parameter. + """ + + def __init__( + self, + client: "_MemcachedClient", + prefix: str = "jinja2/bytecode/", + timeout: t.Optional[int] = None, + ignore_memcache_errors: bool = True, + ): + self.client = client + self.prefix = prefix + self.timeout = timeout + self.ignore_memcache_errors = ignore_memcache_errors + + def load_bytecode(self, bucket: Bucket) -> None: + try: + code = self.client.get(self.prefix + bucket.key) + except Exception: + if not self.ignore_memcache_errors: + raise + else: + bucket.bytecode_from_string(code) + + def dump_bytecode(self, bucket: Bucket) -> None: + key = self.prefix + bucket.key + value = bucket.bytecode_to_string() + + try: + if self.timeout is not None: + self.client.set(key, value, self.timeout) + else: + self.client.set(key, value) + except Exception: + if not self.ignore_memcache_errors: + raise diff --git a/env/lib/python3.11/site-packages/jinja2/compiler.py b/env/lib/python3.11/site-packages/jinja2/compiler.py new file mode 100644 index 0000000..3458095 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/compiler.py @@ -0,0 +1,1957 @@ +"""Compiles nodes from the parser into Python code.""" +import typing as t +from contextlib import contextmanager +from functools import update_wrapper +from io import StringIO +from itertools import chain +from keyword import iskeyword as is_python_keyword + +from markupsafe import escape +from markupsafe import Markup + +from . import nodes +from .exceptions import TemplateAssertionError +from .idtracking import Symbols +from .idtracking import VAR_LOAD_ALIAS +from .idtracking import VAR_LOAD_PARAMETER +from .idtracking import VAR_LOAD_RESOLVE +from .idtracking import VAR_LOAD_UNDEFINED +from .nodes import EvalContext +from .optimizer import Optimizer +from .utils import _PassArg +from .utils import concat +from .visitor import NodeVisitor + +if t.TYPE_CHECKING: + import typing_extensions as te + from .environment import Environment + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + +operators = { + "eq": "==", + "ne": "!=", + "gt": ">", + "gteq": ">=", + "lt": "<", + "lteq": "<=", + "in": "in", + "notin": "not in", +} + + +def optimizeconst(f: F) -> F: + def new_func( + self: "CodeGenerator", node: nodes.Expr, frame: "Frame", **kwargs: t.Any + ) -> t.Any: + # Only optimize if the frame is not volatile + if self.optimizer is not None and not frame.eval_ctx.volatile: + new_node = self.optimizer.visit(node, frame.eval_ctx) + + if new_node != node: + return self.visit(new_node, frame) + + return f(self, node, frame, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def _make_binop(op: str) -> t.Callable[["CodeGenerator", nodes.BinExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.BinExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed + and op in self.environment.intercepted_binops # type: ignore + ): + self.write(f"environment.call_binop(context, {op!r}, ") + self.visit(node.left, frame) + self.write(", ") + self.visit(node.right, frame) + else: + self.write("(") + self.visit(node.left, frame) + self.write(f" {op} ") + self.visit(node.right, frame) + + self.write(")") + + return visitor + + +def _make_unop( + op: str, +) -> t.Callable[["CodeGenerator", nodes.UnaryExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.UnaryExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed + and op in self.environment.intercepted_unops # type: ignore + ): + self.write(f"environment.call_unop(context, {op!r}, ") + self.visit(node.node, frame) + else: + self.write("(" + op) + self.visit(node.node, frame) + + self.write(")") + + return visitor + + +def generate( + node: nodes.Template, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, +) -> t.Optional[str]: + """Generate the python source for a node tree.""" + if not isinstance(node, nodes.Template): + raise TypeError("Can't compile non template nodes") + + generator = environment.code_generator_class( + environment, name, filename, stream, defer_init, optimized + ) + generator.visit(node) + + if stream is None: + return generator.stream.getvalue() # type: ignore + + return None + + +def has_safe_repr(value: t.Any) -> bool: + """Does the node have a safe representation?""" + if value is None or value is NotImplemented or value is Ellipsis: + return True + + if type(value) in {bool, int, float, complex, range, str, Markup}: + return True + + if type(value) in {tuple, list, set, frozenset}: + return all(has_safe_repr(v) for v in value) + + if type(value) is dict: + return all(has_safe_repr(k) and has_safe_repr(v) for k, v in value.items()) + + return False + + +def find_undeclared( + nodes: t.Iterable[nodes.Node], names: t.Iterable[str] +) -> t.Set[str]: + """Check if the names passed are accessed undeclared. The return value + is a set of all the undeclared names from the sequence of names found. + """ + visitor = UndeclaredNameVisitor(names) + try: + for node in nodes: + visitor.visit(node) + except VisitorExit: + pass + return visitor.undeclared + + +class MacroRef: + def __init__(self, node: t.Union[nodes.Macro, nodes.CallBlock]) -> None: + self.node = node + self.accesses_caller = False + self.accesses_kwargs = False + self.accesses_varargs = False + + +class Frame: + """Holds compile time information for us.""" + + def __init__( + self, + eval_ctx: EvalContext, + parent: t.Optional["Frame"] = None, + level: t.Optional[int] = None, + ) -> None: + self.eval_ctx = eval_ctx + + # the parent of this frame + self.parent = parent + + if parent is None: + self.symbols = Symbols(level=level) + + # in some dynamic inheritance situations the compiler needs to add + # write tests around output statements. + self.require_output_check = False + + # inside some tags we are using a buffer rather than yield statements. + # this for example affects {% filter %} or {% macro %}. If a frame + # is buffered this variable points to the name of the list used as + # buffer. + self.buffer: t.Optional[str] = None + + # the name of the block we're in, otherwise None. + self.block: t.Optional[str] = None + + else: + self.symbols = Symbols(parent.symbols, level=level) + self.require_output_check = parent.require_output_check + self.buffer = parent.buffer + self.block = parent.block + + # a toplevel frame is the root + soft frames such as if conditions. + self.toplevel = False + + # the root frame is basically just the outermost frame, so no if + # conditions. This information is used to optimize inheritance + # situations. + self.rootlevel = False + + # variables set inside of loops and blocks should not affect outer frames, + # but they still needs to be kept track of as part of the active context. + self.loop_frame = False + self.block_frame = False + + # track whether the frame is being used in an if-statement or conditional + # expression as it determines which errors should be raised during runtime + # or compile time. + self.soft_frame = False + + def copy(self) -> "Frame": + """Create a copy of the current one.""" + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.symbols = self.symbols.copy() + return rv + + def inner(self, isolated: bool = False) -> "Frame": + """Return an inner frame.""" + if isolated: + return Frame(self.eval_ctx, level=self.symbols.level + 1) + return Frame(self.eval_ctx, self) + + def soft(self) -> "Frame": + """Return a soft frame. A soft frame may not be modified as + standalone thing as it shares the resources with the frame it + was created of, but it's not a rootlevel frame any longer. + + This is only used to implement if-statements and conditional + expressions. + """ + rv = self.copy() + rv.rootlevel = False + rv.soft_frame = True + return rv + + __copy__ = copy + + +class VisitorExit(RuntimeError): + """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" + + +class DependencyFinderVisitor(NodeVisitor): + """A visitor that collects filter and test calls.""" + + def __init__(self) -> None: + self.filters: t.Set[str] = set() + self.tests: t.Set[str] = set() + + def visit_Filter(self, node: nodes.Filter) -> None: + self.generic_visit(node) + self.filters.add(node.name) + + def visit_Test(self, node: nodes.Test) -> None: + self.generic_visit(node) + self.tests.add(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting at blocks.""" + + +class UndeclaredNameVisitor(NodeVisitor): + """A visitor that checks if a name is accessed without being + declared. This is different from the frame visitor as it will + not stop at closure frames. + """ + + def __init__(self, names: t.Iterable[str]) -> None: + self.names = set(names) + self.undeclared: t.Set[str] = set() + + def visit_Name(self, node: nodes.Name) -> None: + if node.ctx == "load" and node.name in self.names: + self.undeclared.add(node.name) + if self.undeclared == self.names: + raise VisitorExit() + else: + self.names.discard(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting a blocks.""" + + +class CompilerExit(Exception): + """Raised if the compiler encountered a situation where it just + doesn't make sense to further process the code. Any block that + raises such an exception is not further processed. + """ + + +class CodeGenerator(NodeVisitor): + def __init__( + self, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, + ) -> None: + if stream is None: + stream = StringIO() + self.environment = environment + self.name = name + self.filename = filename + self.stream = stream + self.created_block_context = False + self.defer_init = defer_init + self.optimizer: t.Optional[Optimizer] = None + + if optimized: + self.optimizer = Optimizer(environment) + + # aliases for imports + self.import_aliases: t.Dict[str, str] = {} + + # a registry for all blocks. Because blocks are moved out + # into the global python scope they are registered here + self.blocks: t.Dict[str, nodes.Block] = {} + + # the number of extends statements so far + self.extends_so_far = 0 + + # some templates have a rootlevel extends. In this case we + # can safely assume that we're a child template and do some + # more optimizations. + self.has_known_extends = False + + # the current line number + self.code_lineno = 1 + + # registry of all filters and tests (global, not block local) + self.tests: t.Dict[str, str] = {} + self.filters: t.Dict[str, str] = {} + + # the debug information + self.debug_info: t.List[t.Tuple[int, int]] = [] + self._write_debug_info: t.Optional[int] = None + + # the number of new lines before the next write() + self._new_lines = 0 + + # the line number of the last written statement + self._last_line = 0 + + # true if nothing was written so far. + self._first_write = True + + # used by the `temporary_identifier` method to get new + # unique, temporary identifier + self._last_identifier = 0 + + # the current indentation + self._indentation = 0 + + # Tracks toplevel assignments + self._assign_stack: t.List[t.Set[str]] = [] + + # Tracks parameter definition blocks + self._param_def_block: t.List[t.Set[str]] = [] + + # Tracks the current context. + self._context_reference_stack = ["context"] + + @property + def optimized(self) -> bool: + return self.optimizer is not None + + # -- Various compilation helpers + + def fail(self, msg: str, lineno: int) -> "te.NoReturn": + """Fail with a :exc:`TemplateAssertionError`.""" + raise TemplateAssertionError(msg, lineno, self.name, self.filename) + + def temporary_identifier(self) -> str: + """Get a new unique identifier.""" + self._last_identifier += 1 + return f"t_{self._last_identifier}" + + def buffer(self, frame: Frame) -> None: + """Enable buffering for the frame from that point onwards.""" + frame.buffer = self.temporary_identifier() + self.writeline(f"{frame.buffer} = []") + + def return_buffer_contents( + self, frame: Frame, force_unescaped: bool = False + ) -> None: + """Return the buffer contents of the frame.""" + if not force_unescaped: + if frame.eval_ctx.volatile: + self.writeline("if context.eval_ctx.autoescape:") + self.indent() + self.writeline(f"return Markup(concat({frame.buffer}))") + self.outdent() + self.writeline("else:") + self.indent() + self.writeline(f"return concat({frame.buffer})") + self.outdent() + return + elif frame.eval_ctx.autoescape: + self.writeline(f"return Markup(concat({frame.buffer}))") + return + self.writeline(f"return concat({frame.buffer})") + + def indent(self) -> None: + """Indent by one.""" + self._indentation += 1 + + def outdent(self, step: int = 1) -> None: + """Outdent by step.""" + self._indentation -= step + + def start_write(self, frame: Frame, node: t.Optional[nodes.Node] = None) -> None: + """Yield or write into the frame buffer.""" + if frame.buffer is None: + self.writeline("yield ", node) + else: + self.writeline(f"{frame.buffer}.append(", node) + + def end_write(self, frame: Frame) -> None: + """End the writing process started by `start_write`.""" + if frame.buffer is not None: + self.write(")") + + def simple_write( + self, s: str, frame: Frame, node: t.Optional[nodes.Node] = None + ) -> None: + """Simple shortcut for start_write + write + end_write.""" + self.start_write(frame, node) + self.write(s) + self.end_write(frame) + + def blockvisit(self, nodes: t.Iterable[nodes.Node], frame: Frame) -> None: + """Visit a list of nodes as block in a frame. If the current frame + is no buffer a dummy ``if 0: yield None`` is written automatically. + """ + try: + self.writeline("pass") + for node in nodes: + self.visit(node, frame) + except CompilerExit: + pass + + def write(self, x: str) -> None: + """Write a string into the output stream.""" + if self._new_lines: + if not self._first_write: + self.stream.write("\n" * self._new_lines) + self.code_lineno += self._new_lines + if self._write_debug_info is not None: + self.debug_info.append((self._write_debug_info, self.code_lineno)) + self._write_debug_info = None + self._first_write = False + self.stream.write(" " * self._indentation) + self._new_lines = 0 + self.stream.write(x) + + def writeline( + self, x: str, node: t.Optional[nodes.Node] = None, extra: int = 0 + ) -> None: + """Combination of newline and write.""" + self.newline(node, extra) + self.write(x) + + def newline(self, node: t.Optional[nodes.Node] = None, extra: int = 0) -> None: + """Add one or more newlines before the next write.""" + self._new_lines = max(self._new_lines, 1 + extra) + if node is not None and node.lineno != self._last_line: + self._write_debug_info = node.lineno + self._last_line = node.lineno + + def signature( + self, + node: t.Union[nodes.Call, nodes.Filter, nodes.Test], + frame: Frame, + extra_kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + ) -> None: + """Writes a function call to the stream for the current node. + A leading comma is added automatically. The extra keyword + arguments may not include python keywords otherwise a syntax + error could occur. The extra keyword arguments should be given + as python dict. + """ + # if any of the given keyword arguments is a python keyword + # we have to make sure that no invalid call is created. + kwarg_workaround = any( + is_python_keyword(t.cast(str, k)) + for k in chain((x.key for x in node.kwargs), extra_kwargs or ()) + ) + + for arg in node.args: + self.write(", ") + self.visit(arg, frame) + + if not kwarg_workaround: + for kwarg in node.kwargs: + self.write(", ") + self.visit(kwarg, frame) + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f", {key}={value}") + if node.dyn_args: + self.write(", *") + self.visit(node.dyn_args, frame) + + if kwarg_workaround: + if node.dyn_kwargs is not None: + self.write(", **dict({") + else: + self.write(", **{") + for kwarg in node.kwargs: + self.write(f"{kwarg.key!r}: ") + self.visit(kwarg.value, frame) + self.write(", ") + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f"{key!r}: {value}, ") + if node.dyn_kwargs is not None: + self.write("}, **") + self.visit(node.dyn_kwargs, frame) + self.write(")") + else: + self.write("}") + + elif node.dyn_kwargs is not None: + self.write(", **") + self.visit(node.dyn_kwargs, frame) + + def pull_dependencies(self, nodes: t.Iterable[nodes.Node]) -> None: + """Find all filter and test names used in the template and + assign them to variables in the compiled namespace. Checking + that the names are registered with the environment is done when + compiling the Filter and Test nodes. If the node is in an If or + CondExpr node, the check is done at runtime instead. + + .. versionchanged:: 3.0 + Filters and tests in If and CondExpr nodes are checked at + runtime instead of compile time. + """ + visitor = DependencyFinderVisitor() + + for node in nodes: + visitor.visit(node) + + for id_map, names, dependency in (self.filters, visitor.filters, "filters"), ( + self.tests, + visitor.tests, + "tests", + ): + for name in sorted(names): + if name not in id_map: + id_map[name] = self.temporary_identifier() + + # add check during runtime that dependencies used inside of executed + # blocks are defined, as this step may be skipped during compile time + self.writeline("try:") + self.indent() + self.writeline(f"{id_map[name]} = environment.{dependency}[{name!r}]") + self.outdent() + self.writeline("except KeyError:") + self.indent() + self.writeline("@internalcode") + self.writeline(f"def {id_map[name]}(*unused):") + self.indent() + self.writeline( + f'raise TemplateRuntimeError("No {dependency[:-1]}' + f' named {name!r} found.")' + ) + self.outdent() + self.outdent() + + def enter_frame(self, frame: Frame) -> None: + undefs = [] + for target, (action, param) in frame.symbols.loads.items(): + if action == VAR_LOAD_PARAMETER: + pass + elif action == VAR_LOAD_RESOLVE: + self.writeline(f"{target} = {self.get_resolve_func()}({param!r})") + elif action == VAR_LOAD_ALIAS: + self.writeline(f"{target} = {param}") + elif action == VAR_LOAD_UNDEFINED: + undefs.append(target) + else: + raise NotImplementedError("unknown load instruction") + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def leave_frame(self, frame: Frame, with_python_scope: bool = False) -> None: + if not with_python_scope: + undefs = [] + for target in frame.symbols.loads: + undefs.append(target) + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def choose_async(self, async_value: str = "async ", sync_value: str = "") -> str: + return async_value if self.environment.is_async else sync_value + + def func(self, name: str) -> str: + return f"{self.choose_async()}def {name}" + + def macro_body( + self, node: t.Union[nodes.Macro, nodes.CallBlock], frame: Frame + ) -> t.Tuple[Frame, MacroRef]: + """Dump the function def of a macro or call block.""" + frame = frame.inner() + frame.symbols.analyze_node(node) + macro_ref = MacroRef(node) + + explicit_caller = None + skip_special_params = set() + args = [] + + for idx, arg in enumerate(node.args): + if arg.name == "caller": + explicit_caller = idx + if arg.name in ("kwargs", "varargs"): + skip_special_params.add(arg.name) + args.append(frame.symbols.ref(arg.name)) + + undeclared = find_undeclared(node.body, ("caller", "kwargs", "varargs")) + + if "caller" in undeclared: + # In older Jinja versions there was a bug that allowed caller + # to retain the special behavior even if it was mentioned in + # the argument list. However thankfully this was only really + # working if it was the last argument. So we are explicitly + # checking this now and error out if it is anywhere else in + # the argument list. + if explicit_caller is not None: + try: + node.defaults[explicit_caller - len(node.args)] + except IndexError: + self.fail( + "When defining macros or call blocks the " + 'special "caller" argument must be omitted ' + "or be given a default.", + node.lineno, + ) + else: + args.append(frame.symbols.declare_parameter("caller")) + macro_ref.accesses_caller = True + if "kwargs" in undeclared and "kwargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("kwargs")) + macro_ref.accesses_kwargs = True + if "varargs" in undeclared and "varargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("varargs")) + macro_ref.accesses_varargs = True + + # macros are delayed, they never require output checks + frame.require_output_check = False + frame.symbols.analyze_node(node) + self.writeline(f"{self.func('macro')}({', '.join(args)}):", node) + self.indent() + + self.buffer(frame) + self.enter_frame(frame) + + self.push_parameter_definitions(frame) + for idx, arg in enumerate(node.args): + ref = frame.symbols.ref(arg.name) + self.writeline(f"if {ref} is missing:") + self.indent() + try: + default = node.defaults[idx - len(node.args)] + except IndexError: + self.writeline( + f'{ref} = undefined("parameter {arg.name!r} was not provided",' + f" name={arg.name!r})" + ) + else: + self.writeline(f"{ref} = ") + self.visit(default, frame) + self.mark_parameter_stored(ref) + self.outdent() + self.pop_parameter_definitions() + + self.blockvisit(node.body, frame) + self.return_buffer_contents(frame, force_unescaped=True) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + return frame, macro_ref + + def macro_def(self, macro_ref: MacroRef, frame: Frame) -> None: + """Dump the macro definition for the def created by macro_body.""" + arg_tuple = ", ".join(repr(x.name) for x in macro_ref.node.args) + name = getattr(macro_ref.node, "name", None) + if len(macro_ref.node.args) == 1: + arg_tuple += "," + self.write( + f"Macro(environment, macro, {name!r}, ({arg_tuple})," + f" {macro_ref.accesses_kwargs!r}, {macro_ref.accesses_varargs!r}," + f" {macro_ref.accesses_caller!r}, context.eval_ctx.autoescape)" + ) + + def position(self, node: nodes.Node) -> str: + """Return a human readable position for the node.""" + rv = f"line {node.lineno}" + if self.name is not None: + rv = f"{rv} in {self.name!r}" + return rv + + def dump_local_context(self, frame: Frame) -> str: + items_kv = ", ".join( + f"{name!r}: {target}" + for name, target in frame.symbols.dump_stores().items() + ) + return f"{{{items_kv}}}" + + def write_commons(self) -> None: + """Writes a common preamble that is used by root and block functions. + Primarily this sets up common local helpers and enforces a generator + through a dead branch. + """ + self.writeline("resolve = context.resolve_or_missing") + self.writeline("undefined = environment.undefined") + self.writeline("concat = environment.concat") + # always use the standard Undefined class for the implicit else of + # conditional expressions + self.writeline("cond_expr_undefined = Undefined") + self.writeline("if 0: yield None") + + def push_parameter_definitions(self, frame: Frame) -> None: + """Pushes all parameter targets from the given frame into a local + stack that permits tracking of yet to be assigned parameters. In + particular this enables the optimization from `visit_Name` to skip + undefined expressions for parameters in macros as macros can reference + otherwise unbound parameters. + """ + self._param_def_block.append(frame.symbols.dump_param_targets()) + + def pop_parameter_definitions(self) -> None: + """Pops the current parameter definitions set.""" + self._param_def_block.pop() + + def mark_parameter_stored(self, target: str) -> None: + """Marks a parameter in the current parameter definitions as stored. + This will skip the enforced undefined checks. + """ + if self._param_def_block: + self._param_def_block[-1].discard(target) + + def push_context_reference(self, target: str) -> None: + self._context_reference_stack.append(target) + + def pop_context_reference(self) -> None: + self._context_reference_stack.pop() + + def get_context_ref(self) -> str: + return self._context_reference_stack[-1] + + def get_resolve_func(self) -> str: + target = self._context_reference_stack[-1] + if target == "context": + return "resolve" + return f"{target}.resolve" + + def derive_context(self, frame: Frame) -> str: + return f"{self.get_context_ref()}.derived({self.dump_local_context(frame)})" + + def parameter_is_undeclared(self, target: str) -> bool: + """Checks if a given target is an undeclared parameter.""" + if not self._param_def_block: + return False + return target in self._param_def_block[-1] + + def push_assign_tracking(self) -> None: + """Pushes a new layer for assignment tracking.""" + self._assign_stack.append(set()) + + def pop_assign_tracking(self, frame: Frame) -> None: + """Pops the topmost level for assignment tracking and updates the + context variables if necessary. + """ + vars = self._assign_stack.pop() + if ( + not frame.block_frame + and not frame.loop_frame + and not frame.toplevel + or not vars + ): + return + public_names = [x for x in vars if x[:1] != "_"] + if len(vars) == 1: + name = next(iter(vars)) + ref = frame.symbols.ref(name) + if frame.loop_frame: + self.writeline(f"_loop_vars[{name!r}] = {ref}") + return + if frame.block_frame: + self.writeline(f"_block_vars[{name!r}] = {ref}") + return + self.writeline(f"context.vars[{name!r}] = {ref}") + else: + if frame.loop_frame: + self.writeline("_loop_vars.update({") + elif frame.block_frame: + self.writeline("_block_vars.update({") + else: + self.writeline("context.vars.update({") + for idx, name in enumerate(vars): + if idx: + self.write(", ") + ref = frame.symbols.ref(name) + self.write(f"{name!r}: {ref}") + self.write("})") + if not frame.block_frame and not frame.loop_frame and public_names: + if len(public_names) == 1: + self.writeline(f"context.exported_vars.add({public_names[0]!r})") + else: + names_str = ", ".join(map(repr, public_names)) + self.writeline(f"context.exported_vars.update(({names_str}))") + + # -- Statement Visitors + + def visit_Template( + self, node: nodes.Template, frame: t.Optional[Frame] = None + ) -> None: + assert frame is None, "no root frame allowed" + eval_ctx = EvalContext(self.environment, self.name) + + from .runtime import exported, async_exported + + if self.environment.is_async: + exported_names = sorted(exported + async_exported) + else: + exported_names = sorted(exported) + + self.writeline("from jinja2.runtime import " + ", ".join(exported_names)) + + # if we want a deferred initialization we cannot move the + # environment into a local name + envenv = "" if self.defer_init else ", environment=environment" + + # do we have an extends tag at all? If not, we can save some + # overhead by just not processing any inheritance code. + have_extends = node.find(nodes.Extends) is not None + + # find all blocks + for block in node.find_all(nodes.Block): + if block.name in self.blocks: + self.fail(f"block {block.name!r} defined twice", block.lineno) + self.blocks[block.name] = block + + # find all imports and import them + for import_ in node.find_all(nodes.ImportedName): + if import_.importname not in self.import_aliases: + imp = import_.importname + self.import_aliases[imp] = alias = self.temporary_identifier() + if "." in imp: + module, obj = imp.rsplit(".", 1) + self.writeline(f"from {module} import {obj} as {alias}") + else: + self.writeline(f"import {imp} as {alias}") + + # add the load name + self.writeline(f"name = {self.name!r}") + + # generate the root render function. + self.writeline( + f"{self.func('root')}(context, missing=missing{envenv}):", extra=1 + ) + self.indent() + self.write_commons() + + # process the root + frame = Frame(eval_ctx) + if "self" in find_undeclared(node.body, ("self",)): + ref = frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + frame.symbols.analyze_node(node) + frame.toplevel = frame.rootlevel = True + frame.require_output_check = have_extends and not self.has_known_extends + if have_extends: + self.writeline("parent_template = None") + self.enter_frame(frame) + self.pull_dependencies(node.body) + self.blockvisit(node.body, frame) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + # make sure that the parent root is called. + if have_extends: + if not self.has_known_extends: + self.indent() + self.writeline("if parent_template is not None:") + self.indent() + if not self.environment.is_async: + self.writeline("yield from parent_template.root_render_func(context)") + else: + self.writeline( + "async for event in parent_template.root_render_func(context):" + ) + self.indent() + self.writeline("yield event") + self.outdent() + self.outdent(1 + (not self.has_known_extends)) + + # at this point we now have the blocks collected and can visit them too. + for name, block in self.blocks.items(): + self.writeline( + f"{self.func('block_' + name)}(context, missing=missing{envenv}):", + block, + 1, + ) + self.indent() + self.write_commons() + # It's important that we do not make this frame a child of the + # toplevel template. This would cause a variety of + # interesting issues with identifier tracking. + block_frame = Frame(eval_ctx) + block_frame.block_frame = True + undeclared = find_undeclared(block.body, ("self", "super")) + if "self" in undeclared: + ref = block_frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + if "super" in undeclared: + ref = block_frame.symbols.declare_parameter("super") + self.writeline(f"{ref} = context.super({name!r}, block_{name})") + block_frame.symbols.analyze_node(block) + block_frame.block = name + self.writeline("_block_vars = {}") + self.enter_frame(block_frame) + self.pull_dependencies(block.body) + self.blockvisit(block.body, block_frame) + self.leave_frame(block_frame, with_python_scope=True) + self.outdent() + + blocks_kv_str = ", ".join(f"{x!r}: block_{x}" for x in self.blocks) + self.writeline(f"blocks = {{{blocks_kv_str}}}", extra=1) + debug_kv_str = "&".join(f"{k}={v}" for k, v in self.debug_info) + self.writeline(f"debug_info = {debug_kv_str!r}") + + def visit_Block(self, node: nodes.Block, frame: Frame) -> None: + """Call a block and register it for the template.""" + level = 0 + if frame.toplevel: + # if we know that we are a child template, there is no need to + # check if we are one + if self.has_known_extends: + return + if self.extends_so_far > 0: + self.writeline("if parent_template is None:") + self.indent() + level += 1 + + if node.scoped: + context = self.derive_context(frame) + else: + context = self.get_context_ref() + + if node.required: + self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node) + self.indent() + self.writeline( + f'raise TemplateRuntimeError("Required block {node.name!r} not found")', + node, + ) + self.outdent() + + if not self.environment.is_async and frame.buffer is None: + self.writeline( + f"yield from context.blocks[{node.name!r}][0]({context})", node + ) + else: + self.writeline( + f"{self.choose_async()}for event in" + f" context.blocks[{node.name!r}][0]({context}):", + node, + ) + self.indent() + self.simple_write("event", frame) + self.outdent() + + self.outdent(level) + + def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None: + """Calls the extender.""" + if not frame.toplevel: + self.fail("cannot use extend from a non top-level scope", node.lineno) + + # if the number of extends statements in general is zero so + # far, we don't have to add a check if something extended + # the template before this one. + if self.extends_so_far > 0: + + # if we have a known extends we just add a template runtime + # error into the generated code. We could catch that at compile + # time too, but i welcome it not to confuse users by throwing the + # same error at different times just "because we can". + if not self.has_known_extends: + self.writeline("if parent_template is not None:") + self.indent() + self.writeline('raise TemplateRuntimeError("extended multiple times")') + + # if we have a known extends already we don't need that code here + # as we know that the template execution will end here. + if self.has_known_extends: + raise CompilerExit() + else: + self.outdent() + + self.writeline("parent_template = environment.get_template(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + self.writeline("for name, parent_block in parent_template.blocks.items():") + self.indent() + self.writeline("context.blocks.setdefault(name, []).append(parent_block)") + self.outdent() + + # if this extends statement was in the root level we can take + # advantage of that information and simplify the generated code + # in the top level from this point onwards + if frame.rootlevel: + self.has_known_extends = True + + # and now we have one more + self.extends_so_far += 1 + + def visit_Include(self, node: nodes.Include, frame: Frame) -> None: + """Handles includes.""" + if node.ignore_missing: + self.writeline("try:") + self.indent() + + func_name = "get_or_select_template" + if isinstance(node.template, nodes.Const): + if isinstance(node.template.value, str): + func_name = "get_template" + elif isinstance(node.template.value, (tuple, list)): + func_name = "select_template" + elif isinstance(node.template, (nodes.Tuple, nodes.List)): + func_name = "select_template" + + self.writeline(f"template = environment.{func_name}(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + if node.ignore_missing: + self.outdent() + self.writeline("except TemplateNotFound:") + self.indent() + self.writeline("pass") + self.outdent() + self.writeline("else:") + self.indent() + + skip_event_yield = False + if node.with_context: + self.writeline( + f"{self.choose_async()}for event in template.root_render_func(" + "template.new_context(context.get_all(), True," + f" {self.dump_local_context(frame)})):" + ) + elif self.environment.is_async: + self.writeline( + "for event in (await template._get_default_module_async())" + "._body_stream:" + ) + else: + self.writeline("yield from template._get_default_module()._body_stream") + skip_event_yield = True + + if not skip_event_yield: + self.indent() + self.simple_write("event", frame) + self.outdent() + + if node.ignore_missing: + self.outdent() + + def _import_common( + self, node: t.Union[nodes.Import, nodes.FromImport], frame: Frame + ) -> None: + self.write(f"{self.choose_async('await ')}environment.get_template(") + self.visit(node.template, frame) + self.write(f", {self.name!r}).") + + if node.with_context: + f_name = f"make_module{self.choose_async('_async')}" + self.write( + f"{f_name}(context.get_all(), True, {self.dump_local_context(frame)})" + ) + else: + self.write(f"_get_default_module{self.choose_async('_async')}(context)") + + def visit_Import(self, node: nodes.Import, frame: Frame) -> None: + """Visit regular imports.""" + self.writeline(f"{frame.symbols.ref(node.target)} = ", node) + if frame.toplevel: + self.write(f"context.vars[{node.target!r}] = ") + + self._import_common(node, frame) + + if frame.toplevel and not node.target.startswith("_"): + self.writeline(f"context.exported_vars.discard({node.target!r})") + + def visit_FromImport(self, node: nodes.FromImport, frame: Frame) -> None: + """Visit named imports.""" + self.newline(node) + self.write("included_template = ") + self._import_common(node, frame) + var_names = [] + discarded_names = [] + for name in node.names: + if isinstance(name, tuple): + name, alias = name + else: + alias = name + self.writeline( + f"{frame.symbols.ref(alias)} =" + f" getattr(included_template, {name!r}, missing)" + ) + self.writeline(f"if {frame.symbols.ref(alias)} is missing:") + self.indent() + message = ( + "the template {included_template.__name__!r}" + f" (imported on {self.position(node)})" + f" does not export the requested name {name!r}" + ) + self.writeline( + f"{frame.symbols.ref(alias)} = undefined(f{message!r}, name={name!r})" + ) + self.outdent() + if frame.toplevel: + var_names.append(alias) + if not alias.startswith("_"): + discarded_names.append(alias) + + if var_names: + if len(var_names) == 1: + name = var_names[0] + self.writeline(f"context.vars[{name!r}] = {frame.symbols.ref(name)}") + else: + names_kv = ", ".join( + f"{name!r}: {frame.symbols.ref(name)}" for name in var_names + ) + self.writeline(f"context.vars.update({{{names_kv}}})") + if discarded_names: + if len(discarded_names) == 1: + self.writeline(f"context.exported_vars.discard({discarded_names[0]!r})") + else: + names_str = ", ".join(map(repr, discarded_names)) + self.writeline( + f"context.exported_vars.difference_update(({names_str}))" + ) + + def visit_For(self, node: nodes.For, frame: Frame) -> None: + loop_frame = frame.inner() + loop_frame.loop_frame = True + test_frame = frame.inner() + else_frame = frame.inner() + + # try to figure out if we have an extended loop. An extended loop + # is necessary if the loop is in recursive mode if the special loop + # variable is accessed in the body if the body is a scoped block. + extended_loop = ( + node.recursive + or "loop" + in find_undeclared(node.iter_child_nodes(only=("body",)), ("loop",)) + or any(block.scoped for block in node.find_all(nodes.Block)) + ) + + loop_ref = None + if extended_loop: + loop_ref = loop_frame.symbols.declare_parameter("loop") + + loop_frame.symbols.analyze_node(node, for_branch="body") + if node.else_: + else_frame.symbols.analyze_node(node, for_branch="else") + + if node.test: + loop_filter_func = self.temporary_identifier() + test_frame.symbols.analyze_node(node, for_branch="test") + self.writeline(f"{self.func(loop_filter_func)}(fiter):", node.test) + self.indent() + self.enter_frame(test_frame) + self.writeline(self.choose_async("async for ", "for ")) + self.visit(node.target, loop_frame) + self.write(" in ") + self.write(self.choose_async("auto_aiter(fiter)", "fiter")) + self.write(":") + self.indent() + self.writeline("if ", node.test) + self.visit(node.test, test_frame) + self.write(":") + self.indent() + self.writeline("yield ") + self.visit(node.target, loop_frame) + self.outdent(3) + self.leave_frame(test_frame, with_python_scope=True) + + # if we don't have an recursive loop we have to find the shadowed + # variables at that point. Because loops can be nested but the loop + # variable is a special one we have to enforce aliasing for it. + if node.recursive: + self.writeline( + f"{self.func('loop')}(reciter, loop_render_func, depth=0):", node + ) + self.indent() + self.buffer(loop_frame) + + # Use the same buffer for the else frame + else_frame.buffer = loop_frame.buffer + + # make sure the loop variable is a special one and raise a template + # assertion error if a loop tries to write to loop + if extended_loop: + self.writeline(f"{loop_ref} = missing") + + for name in node.find_all(nodes.Name): + if name.ctx == "store" and name.name == "loop": + self.fail( + "Can't assign to special loop variable in for-loop target", + name.lineno, + ) + + if node.else_: + iteration_indicator = self.temporary_identifier() + self.writeline(f"{iteration_indicator} = 1") + + self.writeline(self.choose_async("async for ", "for "), node) + self.visit(node.target, loop_frame) + if extended_loop: + self.write(f", {loop_ref} in {self.choose_async('Async')}LoopContext(") + else: + self.write(" in ") + + if node.test: + self.write(f"{loop_filter_func}(") + if node.recursive: + self.write("reciter") + else: + if self.environment.is_async and not extended_loop: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async and not extended_loop: + self.write(")") + if node.test: + self.write(")") + + if node.recursive: + self.write(", undefined, loop_render_func, depth):") + else: + self.write(", undefined):" if extended_loop else ":") + + self.indent() + self.enter_frame(loop_frame) + + self.writeline("_loop_vars = {}") + self.blockvisit(node.body, loop_frame) + if node.else_: + self.writeline(f"{iteration_indicator} = 0") + self.outdent() + self.leave_frame( + loop_frame, with_python_scope=node.recursive and not node.else_ + ) + + if node.else_: + self.writeline(f"if {iteration_indicator}:") + self.indent() + self.enter_frame(else_frame) + self.blockvisit(node.else_, else_frame) + self.leave_frame(else_frame) + self.outdent() + + # if the node was recursive we have to return the buffer contents + # and start the iteration code + if node.recursive: + self.return_buffer_contents(loop_frame) + self.outdent() + self.start_write(frame, node) + self.write(f"{self.choose_async('await ')}loop(") + if self.environment.is_async: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async: + self.write(")") + self.write(", loop)") + self.end_write(frame) + + # at the end of the iteration, clear any assignments made in the + # loop from the top level + if self._assign_stack: + self._assign_stack[-1].difference_update(loop_frame.symbols.stores) + + def visit_If(self, node: nodes.If, frame: Frame) -> None: + if_frame = frame.soft() + self.writeline("if ", node) + self.visit(node.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(node.body, if_frame) + self.outdent() + for elif_ in node.elif_: + self.writeline("elif ", elif_) + self.visit(elif_.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(elif_.body, if_frame) + self.outdent() + if node.else_: + self.writeline("else:") + self.indent() + self.blockvisit(node.else_, if_frame) + self.outdent() + + def visit_Macro(self, node: nodes.Macro, frame: Frame) -> None: + macro_frame, macro_ref = self.macro_body(node, frame) + self.newline() + if frame.toplevel: + if not node.name.startswith("_"): + self.write(f"context.exported_vars.add({node.name!r})") + self.writeline(f"context.vars[{node.name!r}] = ") + self.write(f"{frame.symbols.ref(node.name)} = ") + self.macro_def(macro_ref, macro_frame) + + def visit_CallBlock(self, node: nodes.CallBlock, frame: Frame) -> None: + call_frame, macro_ref = self.macro_body(node, frame) + self.writeline("caller = ") + self.macro_def(macro_ref, call_frame) + self.start_write(frame, node) + self.visit_Call(node.call, frame, forward_caller=True) + self.end_write(frame) + + def visit_FilterBlock(self, node: nodes.FilterBlock, frame: Frame) -> None: + filter_frame = frame.inner() + filter_frame.symbols.analyze_node(node) + self.enter_frame(filter_frame) + self.buffer(filter_frame) + self.blockvisit(node.body, filter_frame) + self.start_write(frame, node) + self.visit_Filter(node.filter, filter_frame) + self.end_write(frame) + self.leave_frame(filter_frame) + + def visit_With(self, node: nodes.With, frame: Frame) -> None: + with_frame = frame.inner() + with_frame.symbols.analyze_node(node) + self.enter_frame(with_frame) + for target, expr in zip(node.targets, node.values): + self.newline() + self.visit(target, with_frame) + self.write(" = ") + self.visit(expr, frame) + self.blockvisit(node.body, with_frame) + self.leave_frame(with_frame) + + def visit_ExprStmt(self, node: nodes.ExprStmt, frame: Frame) -> None: + self.newline(node) + self.visit(node.node, frame) + + class _FinalizeInfo(t.NamedTuple): + const: t.Optional[t.Callable[..., str]] + src: t.Optional[str] + + @staticmethod + def _default_finalize(value: t.Any) -> t.Any: + """The default finalize function if the environment isn't + configured with one. Or, if the environment has one, this is + called on that function's output for constants. + """ + return str(value) + + _finalize: t.Optional[_FinalizeInfo] = None + + def _make_finalize(self) -> _FinalizeInfo: + """Build the finalize function to be used on constants and at + runtime. Cached so it's only created once for all output nodes. + + Returns a ``namedtuple`` with the following attributes: + + ``const`` + A function to finalize constant data at compile time. + + ``src`` + Source code to output around nodes to be evaluated at + runtime. + """ + if self._finalize is not None: + return self._finalize + + finalize: t.Optional[t.Callable[..., t.Any]] + finalize = default = self._default_finalize + src = None + + if self.environment.finalize: + src = "environment.finalize(" + env_finalize = self.environment.finalize + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(env_finalize) # type: ignore + ) + finalize = None + + if pass_arg is None: + + def finalize(value: t.Any) -> t.Any: + return default(env_finalize(value)) + + else: + src = f"{src}{pass_arg}, " + + if pass_arg == "environment": + + def finalize(value: t.Any) -> t.Any: + return default(env_finalize(self.environment, value)) + + self._finalize = self._FinalizeInfo(finalize, src) + return self._finalize + + def _output_const_repr(self, group: t.Iterable[t.Any]) -> str: + """Given a group of constant values converted from ``Output`` + child nodes, produce a string to write to the template module + source. + """ + return repr(concat(group)) + + def _output_child_to_const( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> str: + """Try to optimize a child of an ``Output`` node by trying to + convert it to constant, finalized data at compile time. + + If :exc:`Impossible` is raised, the node is not constant and + will be evaluated at runtime. Any other exception will also be + evaluated at runtime for easier debugging. + """ + const = node.as_const(frame.eval_ctx) + + if frame.eval_ctx.autoescape: + const = escape(const) + + # Template data doesn't go through finalize. + if isinstance(node, nodes.TemplateData): + return str(const) + + return finalize.const(const) # type: ignore + + def _output_child_pre( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code before visiting a child of an + ``Output`` node. + """ + if frame.eval_ctx.volatile: + self.write("(escape if context.eval_ctx.autoescape else str)(") + elif frame.eval_ctx.autoescape: + self.write("escape(") + else: + self.write("str(") + + if finalize.src is not None: + self.write(finalize.src) + + def _output_child_post( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code after visiting a child of an + ``Output`` node. + """ + self.write(")") + + if finalize.src is not None: + self.write(")") + + def visit_Output(self, node: nodes.Output, frame: Frame) -> None: + # If an extends is active, don't render outside a block. + if frame.require_output_check: + # A top-level extends is known to exist at compile time. + if self.has_known_extends: + return + + self.writeline("if parent_template is None:") + self.indent() + + finalize = self._make_finalize() + body: t.List[t.Union[t.List[t.Any], nodes.Expr]] = [] + + # Evaluate constants at compile time if possible. Each item in + # body will be either a list of static data or a node to be + # evaluated at runtime. + for child in node.nodes: + try: + if not ( + # If the finalize function requires runtime context, + # constants can't be evaluated at compile time. + finalize.const + # Unless it's basic template data that won't be + # finalized anyway. + or isinstance(child, nodes.TemplateData) + ): + raise nodes.Impossible() + + const = self._output_child_to_const(child, frame, finalize) + except (nodes.Impossible, Exception): + # The node was not constant and needs to be evaluated at + # runtime. Or another error was raised, which is easier + # to debug at runtime. + body.append(child) + continue + + if body and isinstance(body[-1], list): + body[-1].append(const) + else: + body.append([const]) + + if frame.buffer is not None: + if len(body) == 1: + self.writeline(f"{frame.buffer}.append(") + else: + self.writeline(f"{frame.buffer}.extend((") + + self.indent() + + for item in body: + if isinstance(item, list): + # A group of constant data to join and output. + val = self._output_const_repr(item) + + if frame.buffer is None: + self.writeline("yield " + val) + else: + self.writeline(val + ",") + else: + if frame.buffer is None: + self.writeline("yield ", item) + else: + self.newline(item) + + # A node to be evaluated at runtime. + self._output_child_pre(item, frame, finalize) + self.visit(item, frame) + self._output_child_post(item, frame, finalize) + + if frame.buffer is not None: + self.write(",") + + if frame.buffer is not None: + self.outdent() + self.writeline(")" if len(body) == 1 else "))") + + if frame.require_output_check: + self.outdent() + + def visit_Assign(self, node: nodes.Assign, frame: Frame) -> None: + self.push_assign_tracking() + self.newline(node) + self.visit(node.target, frame) + self.write(" = ") + self.visit(node.node, frame) + self.pop_assign_tracking(frame) + + def visit_AssignBlock(self, node: nodes.AssignBlock, frame: Frame) -> None: + self.push_assign_tracking() + block_frame = frame.inner() + # This is a special case. Since a set block always captures we + # will disable output checks. This way one can use set blocks + # toplevel even in extended templates. + block_frame.require_output_check = False + block_frame.symbols.analyze_node(node) + self.enter_frame(block_frame) + self.buffer(block_frame) + self.blockvisit(node.body, block_frame) + self.newline(node) + self.visit(node.target, frame) + self.write(" = (Markup if context.eval_ctx.autoescape else identity)(") + if node.filter is not None: + self.visit_Filter(node.filter, block_frame) + else: + self.write(f"concat({block_frame.buffer})") + self.write(")") + self.pop_assign_tracking(frame) + self.leave_frame(block_frame) + + # -- Expression Visitors + + def visit_Name(self, node: nodes.Name, frame: Frame) -> None: + if node.ctx == "store" and ( + frame.toplevel or frame.loop_frame or frame.block_frame + ): + if self._assign_stack: + self._assign_stack[-1].add(node.name) + ref = frame.symbols.ref(node.name) + + # If we are looking up a variable we might have to deal with the + # case where it's undefined. We can skip that case if the load + # instruction indicates a parameter which are always defined. + if node.ctx == "load": + load = frame.symbols.find_load(ref) + if not ( + load is not None + and load[0] == VAR_LOAD_PARAMETER + and not self.parameter_is_undeclared(ref) + ): + self.write( + f"(undefined(name={node.name!r}) if {ref} is missing else {ref})" + ) + return + + self.write(ref) + + def visit_NSRef(self, node: nodes.NSRef, frame: Frame) -> None: + # NSRefs can only be used to store values; since they use the normal + # `foo.bar` notation they will be parsed as a normal attribute access + # when used anywhere but in a `set` context + ref = frame.symbols.ref(node.name) + self.writeline(f"if not isinstance({ref}, Namespace):") + self.indent() + self.writeline( + "raise TemplateRuntimeError" + '("cannot assign attribute on non-namespace object")' + ) + self.outdent() + self.writeline(f"{ref}[{node.attr!r}]") + + def visit_Const(self, node: nodes.Const, frame: Frame) -> None: + val = node.as_const(frame.eval_ctx) + if isinstance(val, float): + self.write(str(val)) + else: + self.write(repr(val)) + + def visit_TemplateData(self, node: nodes.TemplateData, frame: Frame) -> None: + try: + self.write(repr(node.as_const(frame.eval_ctx))) + except nodes.Impossible: + self.write( + f"(Markup if context.eval_ctx.autoescape else identity)({node.data!r})" + ) + + def visit_Tuple(self, node: nodes.Tuple, frame: Frame) -> None: + self.write("(") + idx = -1 + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write(",)" if idx == 0 else ")") + + def visit_List(self, node: nodes.List, frame: Frame) -> None: + self.write("[") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write("]") + + def visit_Dict(self, node: nodes.Dict, frame: Frame) -> None: + self.write("{") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item.key, frame) + self.write(": ") + self.visit(item.value, frame) + self.write("}") + + visit_Add = _make_binop("+") + visit_Sub = _make_binop("-") + visit_Mul = _make_binop("*") + visit_Div = _make_binop("/") + visit_FloorDiv = _make_binop("//") + visit_Pow = _make_binop("**") + visit_Mod = _make_binop("%") + visit_And = _make_binop("and") + visit_Or = _make_binop("or") + visit_Pos = _make_unop("+") + visit_Neg = _make_unop("-") + visit_Not = _make_unop("not ") + + @optimizeconst + def visit_Concat(self, node: nodes.Concat, frame: Frame) -> None: + if frame.eval_ctx.volatile: + func_name = "(markup_join if context.eval_ctx.volatile else str_join)" + elif frame.eval_ctx.autoescape: + func_name = "markup_join" + else: + func_name = "str_join" + self.write(f"{func_name}((") + for arg in node.nodes: + self.visit(arg, frame) + self.write(", ") + self.write("))") + + @optimizeconst + def visit_Compare(self, node: nodes.Compare, frame: Frame) -> None: + self.write("(") + self.visit(node.expr, frame) + for op in node.ops: + self.visit(op, frame) + self.write(")") + + def visit_Operand(self, node: nodes.Operand, frame: Frame) -> None: + self.write(f" {operators[node.op]} ") + self.visit(node.expr, frame) + + @optimizeconst + def visit_Getattr(self, node: nodes.Getattr, frame: Frame) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getattr(") + self.visit(node.node, frame) + self.write(f", {node.attr!r})") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Getitem(self, node: nodes.Getitem, frame: Frame) -> None: + # slices bypass the environment getitem method. + if isinstance(node.arg, nodes.Slice): + self.visit(node.node, frame) + self.write("[") + self.visit(node.arg, frame) + self.write("]") + else: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getitem(") + self.visit(node.node, frame) + self.write(", ") + self.visit(node.arg, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + def visit_Slice(self, node: nodes.Slice, frame: Frame) -> None: + if node.start is not None: + self.visit(node.start, frame) + self.write(":") + if node.stop is not None: + self.visit(node.stop, frame) + if node.step is not None: + self.write(":") + self.visit(node.step, frame) + + @contextmanager + def _filter_test_common( + self, node: t.Union[nodes.Filter, nodes.Test], frame: Frame, is_filter: bool + ) -> t.Iterator[None]: + if self.environment.is_async: + self.write("(await auto_await(") + + if is_filter: + self.write(f"{self.filters[node.name]}(") + func = self.environment.filters.get(node.name) + else: + self.write(f"{self.tests[node.name]}(") + func = self.environment.tests.get(node.name) + + # When inside an If or CondExpr frame, allow the filter to be + # undefined at compile time and only raise an error if it's + # actually called at runtime. See pull_dependencies. + if func is None and not frame.soft_frame: + type_name = "filter" if is_filter else "test" + self.fail(f"No {type_name} named {node.name!r}.", node.lineno) + + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(func) # type: ignore + ) + + if pass_arg is not None: + self.write(f"{pass_arg}, ") + + # Back to the visitor function to handle visiting the target of + # the filter or test. + yield + + self.signature(node, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Filter(self, node: nodes.Filter, frame: Frame) -> None: + with self._filter_test_common(node, frame, True): + # if the filter node is None we are inside a filter block + # and want to write to the current buffer + if node.node is not None: + self.visit(node.node, frame) + elif frame.eval_ctx.volatile: + self.write( + f"(Markup(concat({frame.buffer}))" + f" if context.eval_ctx.autoescape else concat({frame.buffer}))" + ) + elif frame.eval_ctx.autoescape: + self.write(f"Markup(concat({frame.buffer}))") + else: + self.write(f"concat({frame.buffer})") + + @optimizeconst + def visit_Test(self, node: nodes.Test, frame: Frame) -> None: + with self._filter_test_common(node, frame, False): + self.visit(node.node, frame) + + @optimizeconst + def visit_CondExpr(self, node: nodes.CondExpr, frame: Frame) -> None: + frame = frame.soft() + + def write_expr2() -> None: + if node.expr2 is not None: + self.visit(node.expr2, frame) + return + + self.write( + f'cond_expr_undefined("the inline if-expression on' + f" {self.position(node)} evaluated to false and no else" + f' section was defined.")' + ) + + self.write("(") + self.visit(node.expr1, frame) + self.write(" if ") + self.visit(node.test, frame) + self.write(" else ") + write_expr2() + self.write(")") + + @optimizeconst + def visit_Call( + self, node: nodes.Call, frame: Frame, forward_caller: bool = False + ) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + if self.environment.sandboxed: + self.write("environment.call(context, ") + else: + self.write("context.call(") + self.visit(node.node, frame) + extra_kwargs = {"caller": "caller"} if forward_caller else None + loop_kwargs = {"_loop_vars": "_loop_vars"} if frame.loop_frame else {} + block_kwargs = {"_block_vars": "_block_vars"} if frame.block_frame else {} + if extra_kwargs: + extra_kwargs.update(loop_kwargs, **block_kwargs) + elif loop_kwargs or block_kwargs: + extra_kwargs = dict(loop_kwargs, **block_kwargs) + self.signature(node, frame, extra_kwargs) + self.write(")") + if self.environment.is_async: + self.write("))") + + def visit_Keyword(self, node: nodes.Keyword, frame: Frame) -> None: + self.write(node.key + "=") + self.visit(node.value, frame) + + # -- Unused nodes for extensions + + def visit_MarkSafe(self, node: nodes.MarkSafe, frame: Frame) -> None: + self.write("Markup(") + self.visit(node.expr, frame) + self.write(")") + + def visit_MarkSafeIfAutoescape( + self, node: nodes.MarkSafeIfAutoescape, frame: Frame + ) -> None: + self.write("(Markup if context.eval_ctx.autoescape else identity)(") + self.visit(node.expr, frame) + self.write(")") + + def visit_EnvironmentAttribute( + self, node: nodes.EnvironmentAttribute, frame: Frame + ) -> None: + self.write("environment." + node.name) + + def visit_ExtensionAttribute( + self, node: nodes.ExtensionAttribute, frame: Frame + ) -> None: + self.write(f"environment.extensions[{node.identifier!r}].{node.name}") + + def visit_ImportedName(self, node: nodes.ImportedName, frame: Frame) -> None: + self.write(self.import_aliases[node.importname]) + + def visit_InternalName(self, node: nodes.InternalName, frame: Frame) -> None: + self.write(node.name) + + def visit_ContextReference( + self, node: nodes.ContextReference, frame: Frame + ) -> None: + self.write("context") + + def visit_DerivedContextReference( + self, node: nodes.DerivedContextReference, frame: Frame + ) -> None: + self.write(self.derive_context(frame)) + + def visit_Continue(self, node: nodes.Continue, frame: Frame) -> None: + self.writeline("continue", node) + + def visit_Break(self, node: nodes.Break, frame: Frame) -> None: + self.writeline("break", node) + + def visit_Scope(self, node: nodes.Scope, frame: Frame) -> None: + scope_frame = frame.inner() + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + + def visit_OverlayScope(self, node: nodes.OverlayScope, frame: Frame) -> None: + ctx = self.temporary_identifier() + self.writeline(f"{ctx} = {self.derive_context(frame)}") + self.writeline(f"{ctx}.vars = ") + self.visit(node.context, frame) + self.push_context_reference(ctx) + + scope_frame = frame.inner(isolated=True) + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + self.pop_context_reference() + + def visit_EvalContextModifier( + self, node: nodes.EvalContextModifier, frame: Frame + ) -> None: + for keyword in node.options: + self.writeline(f"context.eval_ctx.{keyword.key} = ") + self.visit(keyword.value, frame) + try: + val = keyword.value.as_const(frame.eval_ctx) + except nodes.Impossible: + frame.eval_ctx.volatile = True + else: + setattr(frame.eval_ctx, keyword.key, val) + + def visit_ScopedEvalContextModifier( + self, node: nodes.ScopedEvalContextModifier, frame: Frame + ) -> None: + old_ctx_name = self.temporary_identifier() + saved_ctx = frame.eval_ctx.save() + self.writeline(f"{old_ctx_name} = context.eval_ctx.save()") + self.visit_EvalContextModifier(node, frame) + for child in node.body: + self.visit(child, frame) + frame.eval_ctx.revert(saved_ctx) + self.writeline(f"context.eval_ctx.revert({old_ctx_name})") diff --git a/env/lib/python3.11/site-packages/jinja2/constants.py b/env/lib/python3.11/site-packages/jinja2/constants.py new file mode 100644 index 0000000..41a1c23 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/constants.py @@ -0,0 +1,20 @@ +#: list of lorem ipsum words used by the lipsum() helper function +LOREM_IPSUM_WORDS = """\ +a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at +auctor augue bibendum blandit class commodo condimentum congue consectetuer +consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus +diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend +elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames +faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac +hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum +justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem +luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie +mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non +nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque +penatibus per pharetra phasellus placerat platea porta porttitor posuere +potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus +ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit +sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor +tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices +ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus +viverra volutpat vulputate""" diff --git a/env/lib/python3.11/site-packages/jinja2/debug.py b/env/lib/python3.11/site-packages/jinja2/debug.py new file mode 100644 index 0000000..7ed7e92 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/debug.py @@ -0,0 +1,191 @@ +import sys +import typing as t +from types import CodeType +from types import TracebackType + +from .exceptions import TemplateSyntaxError +from .utils import internal_code +from .utils import missing + +if t.TYPE_CHECKING: + from .runtime import Context + + +def rewrite_traceback_stack(source: t.Optional[str] = None) -> BaseException: + """Rewrite the current exception to replace any tracebacks from + within compiled template code with tracebacks that look like they + came from the template source. + + This must be called within an ``except`` block. + + :param source: For ``TemplateSyntaxError``, the original source if + known. + :return: The original exception with the rewritten traceback. + """ + _, exc_value, tb = sys.exc_info() + exc_value = t.cast(BaseException, exc_value) + tb = t.cast(TracebackType, tb) + + if isinstance(exc_value, TemplateSyntaxError) and not exc_value.translated: + exc_value.translated = True + exc_value.source = source + # Remove the old traceback, otherwise the frames from the + # compiler still show up. + exc_value.with_traceback(None) + # Outside of runtime, so the frame isn't executing template + # code, but it still needs to point at the template. + tb = fake_traceback( + exc_value, None, exc_value.filename or "", exc_value.lineno + ) + else: + # Skip the frame for the render function. + tb = tb.tb_next + + stack = [] + + # Build the stack of traceback object, replacing any in template + # code with the source file and line information. + while tb is not None: + # Skip frames decorated with @internalcode. These are internal + # calls that aren't useful in template debugging output. + if tb.tb_frame.f_code in internal_code: + tb = tb.tb_next + continue + + template = tb.tb_frame.f_globals.get("__jinja_template__") + + if template is not None: + lineno = template.get_corresponding_lineno(tb.tb_lineno) + fake_tb = fake_traceback(exc_value, tb, template.filename, lineno) + stack.append(fake_tb) + else: + stack.append(tb) + + tb = tb.tb_next + + tb_next = None + + # Assign tb_next in reverse to avoid circular references. + for tb in reversed(stack): + tb.tb_next = tb_next + tb_next = tb + + return exc_value.with_traceback(tb_next) + + +def fake_traceback( # type: ignore + exc_value: BaseException, tb: t.Optional[TracebackType], filename: str, lineno: int +) -> TracebackType: + """Produce a new traceback object that looks like it came from the + template source instead of the compiled code. The filename, line + number, and location name will point to the template, and the local + variables will be the current template context. + + :param exc_value: The original exception to be re-raised to create + the new traceback. + :param tb: The original traceback to get the local variables and + code info from. + :param filename: The template filename. + :param lineno: The line number in the template source. + """ + if tb is not None: + # Replace the real locals with the context that would be + # available at that point in the template. + locals = get_template_locals(tb.tb_frame.f_locals) + locals.pop("__jinja_exception__", None) + else: + locals = {} + + globals = { + "__name__": filename, + "__file__": filename, + "__jinja_exception__": exc_value, + } + # Raise an exception at the correct line number. + code: CodeType = compile( + "\n" * (lineno - 1) + "raise __jinja_exception__", filename, "exec" + ) + + # Build a new code object that points to the template file and + # replaces the location with a block name. + location = "template" + + if tb is not None: + function = tb.tb_frame.f_code.co_name + + if function == "root": + location = "top-level template code" + elif function.startswith("block_"): + location = f"block {function[6:]!r}" + + if sys.version_info >= (3, 8): + code = code.replace(co_name=location) + else: + code = CodeType( + code.co_argcount, + code.co_kwonlyargcount, + code.co_nlocals, + code.co_stacksize, + code.co_flags, + code.co_code, + code.co_consts, + code.co_names, + code.co_varnames, + code.co_filename, + location, + code.co_firstlineno, + code.co_lnotab, + code.co_freevars, + code.co_cellvars, + ) + + # Execute the new code, which is guaranteed to raise, and return + # the new traceback without this frame. + try: + exec(code, globals, locals) + except BaseException: + return sys.exc_info()[2].tb_next # type: ignore + + +def get_template_locals(real_locals: t.Mapping[str, t.Any]) -> t.Dict[str, t.Any]: + """Based on the runtime locals, get the context that would be + available at that point in the template. + """ + # Start with the current template context. + ctx: "t.Optional[Context]" = real_locals.get("context") + + if ctx is not None: + data: t.Dict[str, t.Any] = ctx.get_all().copy() + else: + data = {} + + # Might be in a derived context that only sets local variables + # rather than pushing a context. Local variables follow the scheme + # l_depth_name. Find the highest-depth local that has a value for + # each name. + local_overrides: t.Dict[str, t.Tuple[int, t.Any]] = {} + + for name, value in real_locals.items(): + if not name.startswith("l_") or value is missing: + # Not a template variable, or no longer relevant. + continue + + try: + _, depth_str, name = name.split("_", 2) + depth = int(depth_str) + except ValueError: + continue + + cur_depth = local_overrides.get(name, (-1,))[0] + + if cur_depth < depth: + local_overrides[name] = (depth, value) + + # Modify the context with any derived context. + for name, (_, value) in local_overrides.items(): + if value is missing: + data.pop(name, None) + else: + data[name] = value + + return data diff --git a/env/lib/python3.11/site-packages/jinja2/defaults.py b/env/lib/python3.11/site-packages/jinja2/defaults.py new file mode 100644 index 0000000..638cad3 --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/defaults.py @@ -0,0 +1,48 @@ +import typing as t + +from .filters import FILTERS as DEFAULT_FILTERS # noqa: F401 +from .tests import TESTS as DEFAULT_TESTS # noqa: F401 +from .utils import Cycler +from .utils import generate_lorem_ipsum +from .utils import Joiner +from .utils import Namespace + +if t.TYPE_CHECKING: + import typing_extensions as te + +# defaults for the parser / lexer +BLOCK_START_STRING = "{%" +BLOCK_END_STRING = "%}" +VARIABLE_START_STRING = "{{" +VARIABLE_END_STRING = "}}" +COMMENT_START_STRING = "{#" +COMMENT_END_STRING = "#}" +LINE_STATEMENT_PREFIX: t.Optional[str] = None +LINE_COMMENT_PREFIX: t.Optional[str] = None +TRIM_BLOCKS = False +LSTRIP_BLOCKS = False +NEWLINE_SEQUENCE: "te.Literal['\\n', '\\r\\n', '\\r']" = "\n" +KEEP_TRAILING_NEWLINE = False + +# default filters, tests and namespace + +DEFAULT_NAMESPACE = { + "range": range, + "dict": dict, + "lipsum": generate_lorem_ipsum, + "cycler": Cycler, + "joiner": Joiner, + "namespace": Namespace, +} + +# default policies +DEFAULT_POLICIES: t.Dict[str, t.Any] = { + "compiler.ascii_str": True, + "urlize.rel": "noopener", + "urlize.target": None, + "urlize.extra_schemes": None, + "truncate.leeway": 5, + "json.dumps_function": None, + "json.dumps_kwargs": {"sort_keys": True}, + "ext.i18n.trimmed": False, +} diff --git a/env/lib/python3.11/site-packages/jinja2/environment.py b/env/lib/python3.11/site-packages/jinja2/environment.py new file mode 100644 index 0000000..ea04e8b --- /dev/null +++ b/env/lib/python3.11/site-packages/jinja2/environment.py @@ -0,0 +1,1667 @@ +"""Classes for managing templates and their runtime and compile time +options. +""" +import os +import typing +import typing as t +import weakref +from collections import ChainMap +from functools import lru_cache +from functools import partial +from functools import reduce +from types import CodeType + +from markupsafe import Markup + +from . import nodes +from .compiler import CodeGenerator +from .compiler import generate +from .defaults import BLOCK_END_STRING +from .defaults import BLOCK_START_STRING +from .defaults import COMMENT_END_STRING +from .defaults import COMMENT_START_STRING +from .defaults import DEFAULT_FILTERS +from .defaults import DEFAULT_NAMESPACE +from .defaults import DEFAULT_POLICIES +from .defaults import DEFAULT_TESTS +from .defaults import KEEP_TRAILING_NEWLINE +from .defaults import LINE_COMMENT_PREFIX +from .defaults import LINE_STATEMENT_PREFIX +from .defaults import LSTRIP_BLOCKS +from .defaults import NEWLINE_SEQUENCE +from .defaults import TRIM_BLOCKS +from .defaults import VARIABLE_END_STRING +from .defaults import VARIABLE_START_STRING +from .exceptions import TemplateNotFound +from .exceptions import TemplateRuntimeError +from .exceptions import TemplatesNotFound +from .exceptions import TemplateSyntaxError +from .exceptions import UndefinedError +from .lexer import get_lexer +from .lexer import Lexer +from .lexer import TokenStream +from .nodes import EvalContext +from .parser import Parser +from .runtime import Context +from .runtime import new_context +from .runtime import Undefined +from .utils import _PassArg +from .utils import concat +from .utils import consume +from .utils import import_string +from .utils import internalcode +from .utils import LRUCache +from .utils import missing + +if t.TYPE_CHECKING: + import typing_extensions as te + from .bccache import BytecodeCache + from .ext import Extension + from .loaders import BaseLoader + +_env_bound = t.TypeVar("_env_bound", bound="Environment") + + +# for direct template usage we have up to ten living environments +@lru_cache(maxsize=10) +def get_spontaneous_environment(cls: t.Type[_env_bound], *args: t.Any) -> _env_bound: + """Return a new spontaneous environment. A spontaneous environment + is used for templates created directly rather than through an + existing environment. + + :param cls: Environment class to create. + :param args: Positional arguments passed to environment. + """ + env = cls(*args) + env.shared = True + return env + + +def create_cache( + size: int, +) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: + """Return the cache class for the given size.""" + if size == 0: + return None + + if size < 0: + return {} + + return LRUCache(size) # type: ignore + + +def copy_cache( + cache: t.Optional[t.MutableMapping], +) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: + """Create an empty copy of the given cache.""" + if cache is None: + return None + + if type(cache) is dict: + return {} + + return LRUCache(cache.capacity) # type: ignore + + +def load_extensions( + environment: "Environment", + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]], +) -> t.Dict[str, "Extension"]: + """Load the extensions from the list and bind it to the environment. + Returns a dict of instantiated extensions. + """ + result = {} + + for extension in extensions: + if isinstance(extension, str): + extension = t.cast(t.Type["Extension"], import_string(extension)) + + result[extension.identifier] = extension(environment) + + return result + + +def _environment_config_check(environment: "Environment") -> "Environment": + """Perform a sanity check on the environment.""" + assert issubclass( + environment.undefined, Undefined + ), "'undefined' must be a subclass of 'jinja2.Undefined'." + assert ( + environment.block_start_string + != environment.variable_start_string + != environment.comment_start_string + ), "block, variable and comment start strings must be different." + assert environment.newline_sequence in { + "\r", + "\r\n", + "\n", + }, "'newline_sequence' must be one of '\\n', '\\r\\n', or '\\r'." + return environment + + +class Environment: + r"""The core component of Jinja is the `Environment`. It contains + important shared variables like configuration, filters, tests, + globals and others. Instances of this class may be modified if + they are not shared and if no template was loaded so far. + Modifications on environments after the first template was loaded + will lead to surprising effects and undefined behavior. + + Here are the possible initialization parameters: + + `block_start_string` + The string marking the beginning of a block. Defaults to ``'{%'``. + + `block_end_string` + The string marking the end of a block. Defaults to ``'%}'``. + + `variable_start_string` + The string marking the beginning of a print statement. + Defaults to ``'{{'``. + + `variable_end_string` + The string marking the end of a print statement. Defaults to + ``'}}'``. + + `comment_start_string` + The string marking the beginning of a comment. Defaults to ``'{#'``. + + `comment_end_string` + The string marking the end of a comment. Defaults to ``'#}'``. + + `line_statement_prefix` + If given and a string, this will be used as prefix for line based + statements. See also :ref:`line-statements`. + + `line_comment_prefix` + If given and a string, this will be used as prefix for line based + comments. See also :ref:`line-statements`. + + .. versionadded:: 2.2 + + `trim_blocks` + If this is set to ``True`` the first newline after a block is + removed (block, not variable tag!). Defaults to `False`. + + `lstrip_blocks` + If this is set to ``True`` leading spaces and tabs are stripped + from the start of a line to a block. Defaults to `False`. + + `newline_sequence` + The sequence that starts a newline. Must be one of ``'\r'``, + ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a + useful default for Linux and OS X systems as well as web + applications. + + `keep_trailing_newline` + Preserve the trailing newline when rendering templates. + The default is ``False``, which causes a single newline, + if present, to be stripped from the end of the template. + + .. versionadded:: 2.7 + + `extensions` + List of Jinja extensions to use. This can either be import paths + as strings or extension classes. For more information have a + look at :ref:`the extensions documentation `. + + `optimized` + should the optimizer be enabled? Default is ``True``. + + `undefined` + :class:`Undefined` or a subclass of it that is used to represent + undefined values in the template. + + `finalize` + A callable that can be used to process the result of a variable + expression before it is output. For example one can convert + ``None`` implicitly into an empty string here. + + `autoescape` + If set to ``True`` the XML/HTML autoescaping feature is enabled by + default. For more details about autoescaping see + :class:`~markupsafe.Markup`. As of Jinja 2.4 this can also + be a callable that is passed the template name and has to + return ``True`` or ``False`` depending on autoescape should be + enabled by default. + + .. versionchanged:: 2.4 + `autoescape` can now be a function + + `loader` + The template loader for this environment. + + `cache_size` + The size of the cache. Per default this is ``400`` which means + that if more than 400 templates are loaded the loader will clean + out the least recently used template. If the cache size is set to + ``0`` templates are recompiled all the time, if the cache size is + ``-1`` the cache will not be cleaned. + + .. versionchanged:: 2.8 + The cache size was increased to 400 from a low 50. + + `auto_reload` + Some loaders load templates from locations where the template + sources may change (ie: file system or database). If + ``auto_reload`` is set to ``True`` (default) every time a template is + requested the loader checks if the source changed and if yes, it + will reload the template. For higher performance it's possible to + disable that. + + `bytecode_cache` + If set to a bytecode cache object, this object will provide a + cache for the internal Jinja bytecode so that templates don't + have to be parsed if they were not changed. + + See :ref:`bytecode-cache` for more information. + + `enable_async` + If set to true this enables async template execution which + allows using async functions and generators. + """ + + #: if this environment is sandboxed. Modifying this variable won't make + #: the environment sandboxed though. For a real sandboxed environment + #: have a look at jinja2.sandbox. This flag alone controls the code + #: generation by the compiler. + sandboxed = False + + #: True if the environment is just an overlay + overlayed = False + + #: the environment this environment is linked to if it is an overlay + linked_to: t.Optional["Environment"] = None + + #: shared environments have this set to `True`. A shared environment + #: must not be modified + shared = False + + #: the class that is used for code generation. See + #: :class:`~jinja2.compiler.CodeGenerator` for more information. + code_generator_class: t.Type["CodeGenerator"] = CodeGenerator + + concat = "".join + + #: the context class that is used for templates. See + #: :class:`~jinja2.runtime.Context` for more information. + context_class: t.Type[Context] = Context + + template_class: t.Type["Template"] + + def __init__( + self, + block_start_string: str = BLOCK_START_STRING, + block_end_string: str = BLOCK_END_STRING, + variable_start_string: str = VARIABLE_START_STRING, + variable_end_string: str = VARIABLE_END_STRING, + comment_start_string: str = COMMENT_START_STRING, + comment_end_string: str = COMMENT_END_STRING, + line_statement_prefix: t.Optional[str] = LINE_STATEMENT_PREFIX, + line_comment_prefix: t.Optional[str] = LINE_COMMENT_PREFIX, + trim_blocks: bool = TRIM_BLOCKS, + lstrip_blocks: bool = LSTRIP_BLOCKS, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = NEWLINE_SEQUENCE, + keep_trailing_newline: bool = KEEP_TRAILING_NEWLINE, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = (), + optimized: bool = True, + undefined: t.Type[Undefined] = Undefined, + finalize: t.Optional[t.Callable[..., t.Any]] = None, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = False, + loader: t.Optional["BaseLoader"] = None, + cache_size: int = 400, + auto_reload: bool = True, + bytecode_cache: t.Optional["BytecodeCache"] = None, + enable_async: bool = False, + ): + # !!Important notice!! + # The constructor accepts quite a few arguments that should be + # passed by keyword rather than position. However it's important to + # not change the order of arguments because it's used at least + # internally in those cases: + # - spontaneous environments (i18n extension and Template) + # - unittests + # If parameter changes are required only add parameters at the end + # and don't change the arguments (or the defaults!) of the arguments + # existing already. + + # lexer / parser information + self.block_start_string = block_start_string + self.block_end_string = block_end_string + self.variable_start_string = variable_start_string + self.variable_end_string = variable_end_string + self.comment_start_string = comment_start_string + self.comment_end_string = comment_end_string + self.line_statement_prefix = line_statement_prefix + self.line_comment_prefix = line_comment_prefix + self.trim_blocks = trim_blocks + self.lstrip_blocks = lstrip_blocks + self.newline_sequence = newline_sequence + self.keep_trailing_newline = keep_trailing_newline + + # runtime information + self.undefined: t.Type[Undefined] = undefined + self.optimized = optimized + self.finalize = finalize + self.autoescape = autoescape + + # defaults + self.filters = DEFAULT_FILTERS.copy() + self.tests = DEFAULT_TESTS.copy() + self.globals = DEFAULT_NAMESPACE.copy() + + # set the loader provided + self.loader = loader + self.cache = create_cache(cache_size) + self.bytecode_cache = bytecode_cache + self.auto_reload = auto_reload + + # configurable policies + self.policies = DEFAULT_POLICIES.copy() + + # load extensions + self.extensions = load_extensions(self, extensions) + + self.is_async = enable_async + _environment_config_check(self) + + def add_extension(self, extension: t.Union[str, t.Type["Extension"]]) -> None: + """Adds an extension after the environment was created. + + .. versionadded:: 2.5 + """ + self.extensions.update(load_extensions(self, [extension])) + + def extend(self, **attributes: t.Any) -> None: + """Add the items to the instance of the environment if they do not exist + yet. This is used by :ref:`extensions ` to register + callbacks and configuration values without breaking inheritance. + """ + for key, value in attributes.items(): + if not hasattr(self, key): + setattr(self, key, value) + + def overlay( + self, + block_start_string: str = missing, + block_end_string: str = missing, + variable_start_string: str = missing, + variable_end_string: str = missing, + comment_start_string: str = missing, + comment_end_string: str = missing, + line_statement_prefix: t.Optional[str] = missing, + line_comment_prefix: t.Optional[str] = missing, + trim_blocks: bool = missing, + lstrip_blocks: bool = missing, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = missing, + keep_trailing_newline: bool = missing, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = missing, + optimized: bool = missing, + undefined: t.Type[Undefined] = missing, + finalize: t.Optional[t.Callable[..., t.Any]] = missing, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = missing, + loader: t.Optional["BaseLoader"] = missing, + cache_size: int = missing, + auto_reload: bool = missing, + bytecode_cache: t.Optional["BytecodeCache"] = missing, + enable_async: bool = False, + ) -> "Environment": + """Create a new overlay environment that shares all the data with the + current environment except for cache and the overridden attributes. + Extensions cannot be removed for an overlayed environment. An overlayed + environment automatically gets all the extensions of the environment it + is linked to plus optional extra extensions. + + Creating overlays should happen after the initial environment was set + up completely. Not all attributes are truly linked, some are just + copied over so modifications on the original environment may not shine + through. + + .. versionchanged:: 3.1.2 + Added the ``newline_sequence``,, ``keep_trailing_newline``, + and ``enable_async`` parameters to match ``__init__``. + """ + args = dict(locals()) + del args["self"], args["cache_size"], args["extensions"], args["enable_async"] + + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.overlayed = True + rv.linked_to = self + + for key, value in args.items(): + if value is not missing: + setattr(rv, key, value) + + if cache_size is not missing: + rv.cache = create_cache(cache_size) + else: + rv.cache = copy_cache(self.cache) + + rv.extensions = {} + for key, value in self.extensions.items(): + rv.extensions[key] = value.bind(rv) + if extensions is not missing: + rv.extensions.update(load_extensions(rv, extensions)) + + if enable_async is not missing: + rv.is_async = enable_async + + return _environment_config_check(rv) + + @property + def lexer(self) -> Lexer: + """The lexer for this environment.""" + return get_lexer(self) + + def iter_extensions(self) -> t.Iterator["Extension"]: + """Iterates over the extensions by priority.""" + return iter(sorted(self.extensions.values(), key=lambda x: x.priority)) + + def getitem( + self, obj: t.Any, argument: t.Union[str, t.Any] + ) -> t.Union[t.Any, Undefined]: + """Get an item or attribute of an object but prefer the item.""" + try: + return obj[argument] + except (AttributeError, TypeError, LookupError): + if isinstance(argument, str): + try: + attr = str(argument) + except Exception: + pass + else: + try: + return getattr(obj, attr) + except AttributeError: + pass + return self.undefined(obj=obj, name=argument) + + def getattr(self, obj: t.Any, attribute: str) -> t.Any: + """Get an item or attribute of an object but prefer the attribute. + Unlike :meth:`getitem` the attribute *must* be a string. + """ + try: + return getattr(obj, attribute) + except AttributeError: + pass + try: + return obj[attribute] + except (TypeError, LookupError, AttributeError): + return self.undefined(obj=obj, name=attribute) + + def _filter_test_common( + self, + name: t.Union[str, Undefined], + value: t.Any, + args: t.Optional[t.Sequence[t.Any]], + kwargs: t.Optional[t.Mapping[str, t.Any]], + context: t.Optional[Context], + eval_ctx: t.Optional[EvalContext], + is_filter: bool, + ) -> t.Any: + if is_filter: + env_map = self.filters + type_name = "filter" + else: + env_map = self.tests + type_name = "test" + + func = env_map.get(name) # type: ignore + + if func is None: + msg = f"No {type_name} named {name!r}." + + if isinstance(name, Undefined): + try: + name._fail_with_undefined_error() + except Exception as e: + msg = f"{msg} ({e}; did you forget to quote the callable name?)" + + raise TemplateRuntimeError(msg) + + args = [value, *(args if args is not None else ())] + kwargs = kwargs if kwargs is not None else {} + pass_arg = _PassArg.from_obj(func) + + if pass_arg is _PassArg.context: + if context is None: + raise TemplateRuntimeError( + f"Attempted to invoke a context {type_name} without context." + ) + + args.insert(0, context) + elif pass_arg is _PassArg.eval_context: + if eval_ctx is None: + if context is not None: + eval_ctx = context.eval_ctx + else: + eval_ctx = EvalContext(self) + + args.insert(0, eval_ctx) + elif pass_arg is _PassArg.environment: + args.insert(0, self) + + return func(*args, **kwargs) + + def call_filter( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a filter on a value the same way the compiler does. + + This might return a coroutine if the filter is running from an + environment in async mode and the filter supports async + execution. It's your responsibility to await this if needed. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, True + ) + + def call_test( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a test on a value the same way the compiler does. + + This might return a coroutine if the test is running from an + environment in async mode and the test supports async execution. + It's your responsibility to await this if needed. + + .. versionchanged:: 3.0 + Tests support ``@pass_context``, etc. decorators. Added + the ``context`` and ``eval_ctx`` parameters. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, False + ) + + @internalcode + def parse( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> nodes.Template: + """Parse the sourcecode and return the abstract syntax tree. This + tree of nodes is used by the compiler to convert the template into + executable source- or bytecode. This is useful for debugging or to + extract information from templates. + + If you are :ref:`developing Jinja extensions ` + this gives you a good overview of the node tree generated. + """ + try: + return self._parse(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def _parse( + self, source: str, name: t.Optional[str], filename: t.Optional[str] + ) -> nodes.Template: + """Internal parsing function used by `parse` and `compile`.""" + return Parser(self, source, name, filename).parse() + + def lex( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> t.Iterator[t.Tuple[int, str, str]]: + """Lex the given sourcecode and return a generator that yields + tokens as tuples in the form ``(lineno, token_type, value)``. + This can be useful for :ref:`extension development ` + and debugging templates. + + This does not perform preprocessing. If you want the preprocessing + of the extensions to be applied you have to filter source through + the :meth:`preprocess` method. + """ + source = str(source) + try: + return self.lexer.tokeniter(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def preprocess( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> str: + """Preprocesses the source with all extensions. This is automatically + called for all parsing and compiling methods but *not* for :meth:`lex` + because there you usually only want the actual source tokenized. + """ + return reduce( + lambda s, e: e.preprocess(s, name, filename), + self.iter_extensions(), + str(source), + ) + + def _tokenize( + self, + source: str, + name: t.Optional[str], + filename: t.Optional[str] = None, + state: t.Optional[str] = None, + ) -> TokenStream: + """Called by the parser to do the preprocessing and filtering + for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + """ + source = self.preprocess(source, name, filename) + stream = self.lexer.tokenize(source, name, filename, state) + + for ext in self.iter_extensions(): + stream = ext.filter_stream(stream) # type: ignore + + if not isinstance(stream, TokenStream): + stream = TokenStream(stream, name, filename) # type: ignore + + return stream + + def _generate( + self, + source: nodes.Template, + name: t.Optional[str], + filename: t.Optional[str], + defer_init: bool = False, + ) -> str: + """Internal hook that can be overridden to hook a different generate + method in. + + .. versionadded:: 2.5 + """ + return generate( # type: ignore + source, + self, + name, + filename, + defer_init=defer_init, + optimized=self.optimized, + ) + + def _compile(self, source: str, filename: str) -> CodeType: + """Internal hook that can be overridden to hook a different compile + method in. + + .. versionadded:: 2.5 + """ + return compile(source, filename, "exec") # type: ignore + + @typing.overload + def compile( # type: ignore + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[False]" = False, + defer_init: bool = False, + ) -> CodeType: + ... + + @typing.overload + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[True]" = ..., + defer_init: bool = False, + ) -> str: + ... + + @internalcode + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: bool = False, + defer_init: bool = False, + ) -> t.Union[str, CodeType]: + """Compile a node or template source code. The `name` parameter is + the load name of the template after it was joined using + :meth:`join_path` if necessary, not the filename on the file system. + the `filename` parameter is the estimated filename of the template on + the file system. If the template came from a database or memory this + can be omitted. + + The return value of this method is a python code object. If the `raw` + parameter is `True` the return value will be a string with python + code equivalent to the bytecode returned otherwise. This method is + mainly used internally. + + `defer_init` is use internally to aid the module code generator. This + causes the generated code to be able to import without the global + environment variable to be set. + + .. versionadded:: 2.4 + `defer_init` parameter added. + """ + source_hint = None + try: + if isinstance(source, str): + source_hint = source + source = self._parse(source, name, filename) + source = self._generate(source, name, filename, defer_init=defer_init) + if raw: + return source + if filename is None: + filename = "

Kh*X&_a0Y>O{OY3d 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 literal 0 HcmV?d00001 diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..eae6eff --- /dev/null +++ b/__init__.py @@ -0,0 +1,12 @@ +from flask import Flask +from flask import render_template + +app = Flask(__name__) + +@app.route('/') +def hello_world(): + return render_template('hello.html') + +if __name__ == "__main__": + app.run(debug=True) + diff --git a/env/bin/Activate.ps1 b/env/bin/Activate.ps1 new file mode 100644 index 0000000..b49d77b --- /dev/null +++ b/env/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/env/bin/activate b/env/bin/activate new file mode 100644 index 0000000..422fb48 --- /dev/null +++ b/env/bin/activate @@ -0,0 +1,69 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/stax/www/pokeranalytics_services/env" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(env) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(env) " + export VIRTUAL_ENV_PROMPT +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null +fi diff --git a/env/bin/activate.csh b/env/bin/activate.csh new file mode 100644 index 0000000..ba922a7 --- /dev/null +++ b/env/bin/activate.csh @@ -0,0 +1,26 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/stax/www/pokeranalytics_services/env" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = "(env) $prompt" + setenv VIRTUAL_ENV_PROMPT "(env) " +endif + +alias pydoc python -m pydoc + +rehash diff --git a/env/bin/activate.fish b/env/bin/activate.fish new file mode 100644 index 0000000..88dd708 --- /dev/null +++ b/env/bin/activate.fish @@ -0,0 +1,66 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/); you cannot run it directly. + +function deactivate -d "Exit virtual environment and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/stax/www/pokeranalytics_services/env" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# Unset PYTHONHOME if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # Save the current fish_prompt function as the function _old_fish_prompt. + functions -c fish_prompt _old_fish_prompt + + # With the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command. + set -l old_status $status + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) "(env) " (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT "(env) " +end diff --git a/env/bin/flask b/env/bin/flask new file mode 100755 index 0000000..0c95298 --- /dev/null +++ b/env/bin/flask @@ -0,0 +1,8 @@ +#!/home/stax/www/pokeranalytics_services/env/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from flask.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/pip b/env/bin/pip new file mode 100755 index 0000000..1fe7c6a --- /dev/null +++ b/env/bin/pip @@ -0,0 +1,8 @@ +#!/home/stax/www/pokeranalytics_services/env/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/pip3 b/env/bin/pip3 new file mode 100755 index 0000000..1fe7c6a --- /dev/null +++ b/env/bin/pip3 @@ -0,0 +1,8 @@ +#!/home/stax/www/pokeranalytics_services/env/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/pip3.10 b/env/bin/pip3.10 new file mode 100755 index 0000000..1fe7c6a --- /dev/null +++ b/env/bin/pip3.10 @@ -0,0 +1,8 @@ +#!/home/stax/www/pokeranalytics_services/env/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/pip3.11 b/env/bin/pip3.11 new file mode 100755 index 0000000..1fe7c6a --- /dev/null +++ b/env/bin/pip3.11 @@ -0,0 +1,8 @@ +#!/home/stax/www/pokeranalytics_services/env/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/python b/env/bin/python new file mode 120000 index 0000000..e29ba0e --- /dev/null +++ b/env/bin/python @@ -0,0 +1 @@ +/usr/alwaysdata/python/3.11.0/bin/python \ No newline at end of file diff --git a/env/bin/python3 b/env/bin/python3 new file mode 120000 index 0000000..d8654aa --- /dev/null +++ b/env/bin/python3 @@ -0,0 +1 @@ +python \ No newline at end of file diff --git a/env/bin/python3.11 b/env/bin/python3.11 new file mode 120000 index 0000000..d8654aa --- /dev/null +++ b/env/bin/python3.11 @@ -0,0 +1 @@ +python \ No newline at end of file diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/INSTALLER b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/METADATA b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/METADATA new file mode 100644 index 0000000..9398073 --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/METADATA @@ -0,0 +1,118 @@ +Metadata-Version: 2.1 +Name: Flask +Version: 2.3.1 +Summary: A simple framework for building complex web applications. +Author-email: Armin Ronacher +Maintainer-email: Pallets +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://flask.palletsprojects.com/ +Project-URL: Changes, https://flask.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/flask/ +Project-URL: Issue Tracker, https://github.com/pallets/flask/issues/ +Project-URL: Chat, https://discord.gg/pallets +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Framework :: Flask +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Requires-Python: >=3.8 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: Werkzeug (>=2.3.0) +Requires-Dist: Jinja2 (>=3.1.2) +Requires-Dist: itsdangerous (>=2.1.2) +Requires-Dist: click (>=8.1.3) +Requires-Dist: blinker (>=1.6.2) +Requires-Dist: importlib-metadata (>=3.6.0) ; python_version < "3.10" +Provides-Extra: async +Requires-Dist: asgiref (>=3.2) ; extra == 'async' +Provides-Extra: dotenv +Requires-Dist: python-dotenv ; extra == 'dotenv' + +Flask +===== + +Flask is a lightweight `WSGI`_ web application framework. It is designed +to make getting started quick and easy, with the ability to scale up to +complex applications. It began as a simple wrapper around `Werkzeug`_ +and `Jinja`_ and has become one of the most popular Python web +application frameworks. + +Flask offers suggestions, but doesn't enforce any dependencies or +project layout. It is up to the developer to choose the tools and +libraries they want to use. There are many extensions provided by the +community that make adding new functionality easy. + +.. _WSGI: https://wsgi.readthedocs.io/ +.. _Werkzeug: https://werkzeug.palletsprojects.com/ +.. _Jinja: https://jinja.palletsprojects.com/ + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U Flask + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + # save this as app.py + from flask import Flask + + app = Flask(__name__) + + @app.route("/") + def hello(): + return "Hello, World!" + +.. code-block:: text + + $ flask run + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + + +Contributing +------------ + +For guidance on setting up a development environment and how to make a +contribution to Flask, see the `contributing guidelines`_. + +.. _contributing guidelines: https://github.com/pallets/flask/blob/main/CONTRIBUTING.rst + + +Donate +------ + +The Pallets organization develops and supports Flask and the libraries +it uses. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://flask.palletsprojects.com/ +- Changes: https://flask.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/Flask/ +- Source Code: https://github.com/pallets/flask/ +- Issue Tracker: https://github.com/pallets/flask/issues/ +- Chat: https://discord.gg/pallets diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/RECORD b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/RECORD new file mode 100644 index 0000000..832b957 --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/RECORD @@ -0,0 +1,54 @@ +../../../bin/flask,sha256=_9ZyfXyrOwER6iRcszcSlMFiNOsStx-cWmxfIXHci7Y,245 +Flask-2.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask-2.3.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +Flask-2.3.1.dist-info/METADATA,sha256=6SgO6qJhxIcyHMiHlUXdUcc3mCc9VCusEeVGtvZdsKo,3716 +Flask-2.3.1.dist-info/RECORD,, +Flask-2.3.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Flask-2.3.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92 +Flask-2.3.1.dist-info/entry_points.txt,sha256=s3MqQpduU25y4dq3ftBYD6bMVdVnbMpZP-sUNw0zw0k,41 +Flask-2.3.1.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 +flask/__init__.py,sha256=r0YfpEhN9L7ssl53B5gYMoehkfwpQijAo76S-2Y_pNY,3731 +flask/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 +flask/__pycache__/__init__.cpython-311.pyc,, +flask/__pycache__/__main__.cpython-311.pyc,, +flask/__pycache__/app.cpython-311.pyc,, +flask/__pycache__/blueprints.cpython-311.pyc,, +flask/__pycache__/cli.cpython-311.pyc,, +flask/__pycache__/config.cpython-311.pyc,, +flask/__pycache__/ctx.cpython-311.pyc,, +flask/__pycache__/debughelpers.cpython-311.pyc,, +flask/__pycache__/globals.cpython-311.pyc,, +flask/__pycache__/helpers.cpython-311.pyc,, +flask/__pycache__/logging.cpython-311.pyc,, +flask/__pycache__/scaffold.cpython-311.pyc,, +flask/__pycache__/sessions.cpython-311.pyc,, +flask/__pycache__/signals.cpython-311.pyc,, +flask/__pycache__/templating.cpython-311.pyc,, +flask/__pycache__/testing.cpython-311.pyc,, +flask/__pycache__/typing.cpython-311.pyc,, +flask/__pycache__/views.cpython-311.pyc,, +flask/__pycache__/wrappers.cpython-311.pyc,, +flask/app.py,sha256=AqutakSjAnUbvI7YeMU5jP74AcnHlxoEdsbXzA9-nFo,87594 +flask/blueprints.py,sha256=ZpVrwa8UY-YnVDsX_1K10XQjDwCUp7Qn2hmKln5icEQ,24332 +flask/cli.py,sha256=wRxX61jRDKQM4iZsYaVwcgGbpN2_2DmntLMWjVeiAx4,33720 +flask/config.py,sha256=yqdiN7TLOs2EChJ0uhTz3SICA3-QBG6l5wHTIUnANpc,12800 +flask/ctx.py,sha256=x2kGzUXtPzVyi2YSKrU_PV1AvtxTmh2iRdriJRTSPGM,14841 +flask/debughelpers.py,sha256=BR0xkd-sAyFuFW07D6NfrqNwSZxk1IrkG5n8zem-3sw,5547 +flask/globals.py,sha256=KUzVvSPh8v28kUasVDi_aQKB9hI2jZSYQHqaDU2P414,2945 +flask/helpers.py,sha256=QDxFmBW9GGXQDLuXrcxQRL0Ldo-_q11zEt3ZVgfINlI,24957 +flask/json/__init__.py,sha256=pdtpoK2b0b1u7Sxbx3feM7VWhsI20l1yGAvbYWxaxvc,5572 +flask/json/__pycache__/__init__.cpython-311.pyc,, +flask/json/__pycache__/provider.cpython-311.pyc,, +flask/json/__pycache__/tag.cpython-311.pyc,, +flask/json/provider.py,sha256=Os0frb8oGfyWKL-TDxb0Uy-MY6gDhPdJkRaUl5xAOXI,7637 +flask/json/tag.py,sha256=ihb7QWrNEr0YC3KD4TolZbftgSPCuLk7FAvK49huYC0,8871 +flask/logging.py,sha256=lArx2Bq9oTtUJ-DnZL9t88xU2zytzp4UWSM9Bd72NDQ,2327 +flask/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +flask/scaffold.py,sha256=0tYQN98sC93YkIEw9g8BiIwceFZ27tNqBtBtFhFy5tY,35231 +flask/sessions.py,sha256=kS0Xi5sIj_LTTF-D4Xbysxzir2TwIDeChsiyVccZrsc,14089 +flask/signals.py,sha256=s1H4yKjf3c5dgVr41V6sJpE9dLJvmTJMYuK0rkqx3sw,1146 +flask/templating.py,sha256=XdP2hMFnZ5FCZOG7HUaLjC2VC-b4uHSWlDjwv_1p3qc,7503 +flask/testing.py,sha256=r2SsHGBeAdAfVFQgPNHw0JnEI88ew_wSoEUIt54JtH4,10244 +flask/typing.py,sha256=4Lj-YTxUoYvPYofC9GKu-1o0Ht8lyjp9z3I336J13_o,3005 +flask/views.py,sha256=V5hOGZLx0Bn99QGcM6mh5x_uM-MypVT0-RysEFU84jc,6789 +flask/wrappers.py,sha256=PhMp3teK3SnEmIdog59cO_DHiZ9Btn0qI1EifrTdwP8,5709 diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/REQUESTED b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/WHEEL b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/WHEEL new file mode 100644 index 0000000..1f37c02 --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.40.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/entry_points.txt b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/entry_points.txt new file mode 100644 index 0000000..137232d --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +flask = flask.cli:main diff --git a/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/top_level.txt b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/top_level.txt new file mode 100644 index 0000000..7e10602 --- /dev/null +++ b/env/lib/python3.11/site-packages/Flask-2.3.1.dist-info/top_level.txt @@ -0,0 +1 @@ +flask diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/INSTALLER b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/LICENSE.rst b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/METADATA b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/METADATA new file mode 100644 index 0000000..f54bb5c --- /dev/null +++ b/env/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/METADATA @@ -0,0 +1,113 @@ +Metadata-Version: 2.1 +Name: Jinja2 +Version: 3.1.2 +Summary: A very fast and expressive template engine. +Home-page: https://palletsprojects.com/p/jinja/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://jinja.palletsprojects.com/ +Project-URL: Changes, https://jinja.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/jinja/ +Project-URL: Issue Tracker, https://github.com/pallets/jinja/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: MarkupSafe (>=2.0) +Provides-Extra: i18n +Requires-Dist: Babel (>=2.7) ; extra == 'i18n' + +Jinja +===== + +Jinja is a fast, expressive, extensible templating engine. Special +placeholders in the template allow writing code similar to Python +syntax. Then the template is passed data to render the final document. + +It includes: + +- Template inheritance and inclusion. +- Define and import macros within templates. +- HTML templates can use autoescaping to prevent XSS from untrusted + user input. +- A sandboxed environment can safely render untrusted templates. +- AsyncIO support for generating templates and calling async + functions. +- I18N support with Babel. +- Templates are compiled to optimized Python code just-in-time and + cached, or can be compiled ahead-of-time. +- Exceptions point to the correct line in templates to make debugging + easier. +- Extensible filters, tests, functions, and even syntax. + +Jinja's philosophy is that while application logic belongs in Python if +possible, it shouldn't make the template designer's job difficult by +restricting functionality too much. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U Jinja2 + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +In A Nutshell +------------- + +.. code-block:: jinja + + {% extends "base.html" %} + {% block title %}Members{% endblock %} + {% block content %} +