From 5fed665a3c580896ab7097868dd3a4579625a1c8 Mon Sep 17 00:00:00 2001 From: annous246 Date: Wed, 2 Jul 2025 19:41:06 +0100 Subject: [PATCH] first push --- app/__init__.py | 19 + app/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 634 bytes app/__pycache__/config.cpython-37.pyc | Bin 0 -> 492 bytes app/__pycache__/models.cpython-37.pyc | Bin 0 -> 590 bytes app/__pycache__/routes.cpython-37.pyc | Bin 0 -> 1576 bytes app/config.py | 6 + app/models.py | 8 + app/routes.py | 47 + app/static/css/styles.css | 96 + app/templates/adder.html | 72 + app/templates/edit.html | 112 + app/templates/home.html | 25 + instance/app.db | Bin 0 -> 20480 bytes migrations/README | 1 + migrations/__pycache__/env.cpython-37.pyc | Bin 0 -> 2632 bytes migrations/alembic.ini | 50 + migrations/env.py | 113 + migrations/script.py.mako | 24 + .../289e42693ec2_initial_migration.py | 33 + ...e42693ec2_initial_migration.cpython-37.pyc | Bin 0 -> 879 bytes requirements.txt | 3 + run.py | 8 + .../site/python3.7/greenlet/greenlet.h | 164 + .../Flask-2.2.5.dist-info/INSTALLER | 1 + .../Flask-2.2.5.dist-info/LICENSE.rst | 28 + .../Flask-2.2.5.dist-info/METADATA | 123 + .../Flask-2.2.5.dist-info/RECORD | 53 + .../site-packages/Flask-2.2.5.dist-info/WHEEL | 5 + .../Flask-2.2.5.dist-info/entry_points.txt | 2 + .../Flask-2.2.5.dist-info/top_level.txt | 1 + .../Flask_Migrate-4.1.0.dist-info/INSTALLER | 1 + .../Flask_Migrate-4.1.0.dist-info/LICENSE | 20 + .../Flask_Migrate-4.1.0.dist-info/METADATA | 91 + .../Flask_Migrate-4.1.0.dist-info/RECORD | 31 + .../Flask_Migrate-4.1.0.dist-info/REQUESTED | 0 .../Flask_Migrate-4.1.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../Mako-1.2.4.dist-info/INSTALLER | 1 + .../Mako-1.2.4.dist-info/LICENSE | 19 + .../Mako-1.2.4.dist-info/METADATA | 87 + .../site-packages/Mako-1.2.4.dist-info/RECORD | 74 + .../site-packages/Mako-1.2.4.dist-info/WHEEL | 5 + .../Mako-1.2.4.dist-info/entry_points.txt | 18 + .../Mako-1.2.4.dist-info/top_level.txt | 1 + .../MarkupSafe-2.1.5.dist-info/INSTALLER | 1 + .../MarkupSafe-2.1.5.dist-info/LICENSE.rst | 28 + .../MarkupSafe-2.1.5.dist-info/METADATA | 93 + .../MarkupSafe-2.1.5.dist-info/RECORD | 14 + .../MarkupSafe-2.1.5.dist-info/WHEEL | 5 + .../MarkupSafe-2.1.5.dist-info/top_level.txt | 1 + .../SQLAlchemy-2.0.41.dist-info/INSTALLER | 1 + .../SQLAlchemy-2.0.41.dist-info/LICENSE | 19 + .../SQLAlchemy-2.0.41.dist-info/METADATA | 242 + .../SQLAlchemy-2.0.41.dist-info/RECORD | 531 + .../SQLAlchemy-2.0.41.dist-info/WHEEL | 5 + .../SQLAlchemy-2.0.41.dist-info/top_level.txt | 1 + .../Werkzeug-2.2.3.dist-info/INSTALLER | 1 + .../Werkzeug-2.2.3.dist-info/LICENSE.rst | 28 + .../Werkzeug-2.2.3.dist-info/METADATA | 126 + .../Werkzeug-2.2.3.dist-info/RECORD | 98 + .../Werkzeug-2.2.3.dist-info/WHEEL | 5 + .../Werkzeug-2.2.3.dist-info/top_level.txt | 1 + .../__pycache__/easy_install.cpython-37.pyc | Bin 0 -> 311 bytes .../typing_extensions.cpython-37.pyc | Bin 0 -> 94065 bytes .../alembic-1.12.1.dist-info/INSTALLER | 1 + .../alembic-1.12.1.dist-info/LICENSE | 19 + .../alembic-1.12.1.dist-info/METADATA | 141 + .../alembic-1.12.1.dist-info/RECORD | 148 + .../alembic-1.12.1.dist-info/WHEEL | 5 + .../alembic-1.12.1.dist-info/entry_points.txt | 2 + .../alembic-1.12.1.dist-info/top_level.txt | 1 + venv/Lib/site-packages/alembic/__init__.py | 6 + venv/Lib/site-packages/alembic/__main__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 274 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 264 bytes .../__pycache__/command.cpython-37.pyc | Bin 0 -> 17682 bytes .../alembic/__pycache__/config.cpython-37.pyc | Bin 0 -> 17219 bytes .../__pycache__/context.cpython-37.pyc | Bin 0 -> 293 bytes .../__pycache__/environment.cpython-37.pyc | Bin 0 -> 209 bytes .../__pycache__/migration.cpython-37.pyc | Bin 0 -> 205 bytes .../alembic/__pycache__/op.cpython-37.pyc | Bin 0 -> 276 bytes .../alembic/autogenerate/__init__.py | 10 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 597 bytes .../__pycache__/api.cpython-37.pyc | Bin 0 -> 16504 bytes .../__pycache__/compare.cpython-37.pyc | Bin 0 -> 29256 bytes .../__pycache__/render.cpython-37.pyc | Bin 0 -> 26661 bytes .../__pycache__/rewriter.cpython-37.pyc | Bin 0 -> 6662 bytes .../site-packages/alembic/autogenerate/api.py | 647 ++ .../alembic/autogenerate/compare.py | 1394 +++ .../alembic/autogenerate/render.py | 1082 +++ .../alembic/autogenerate/rewriter.py | 227 + venv/Lib/site-packages/alembic/command.py | 744 ++ venv/Lib/site-packages/alembic/config.py | 634 ++ venv/Lib/site-packages/alembic/context.py | 5 + venv/Lib/site-packages/alembic/context.pyi | 847 ++ .../Lib/site-packages/alembic/ddl/__init__.py | 6 + .../ddl/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 363 bytes .../ddl/__pycache__/base.cpython-37.pyc | Bin 0 -> 11128 bytes .../ddl/__pycache__/impl.cpython-37.pyc | Bin 0 -> 20613 bytes .../ddl/__pycache__/mssql.cpython-37.pyc | Bin 0 -> 10613 bytes .../ddl/__pycache__/mysql.cpython-37.pyc | Bin 0 -> 9941 bytes .../ddl/__pycache__/oracle.cpython-37.pyc | Bin 0 -> 5455 bytes .../ddl/__pycache__/postgresql.cpython-37.pyc | Bin 0 -> 20423 bytes .../ddl/__pycache__/sqlite.cpython-37.pyc | Bin 0 -> 5682 bytes venv/Lib/site-packages/alembic/ddl/base.py | 332 + venv/Lib/site-packages/alembic/ddl/impl.py | 747 ++ venv/Lib/site-packages/alembic/ddl/mssql.py | 416 + venv/Lib/site-packages/alembic/ddl/mysql.py | 471 + venv/Lib/site-packages/alembic/ddl/oracle.py | 197 + .../site-packages/alembic/ddl/postgresql.py | 774 ++ venv/Lib/site-packages/alembic/ddl/sqlite.py | 223 + venv/Lib/site-packages/alembic/environment.py | 1 + venv/Lib/site-packages/alembic/migration.py | 1 + venv/Lib/site-packages/alembic/op.py | 5 + venv/Lib/site-packages/alembic/op.pyi | 1283 +++ .../alembic/operations/__init__.py | 15 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 470 bytes .../__pycache__/base.cpython-37.pyc | Bin 0 -> 70349 bytes .../__pycache__/batch.cpython-37.pyc | Bin 0 -> 19093 bytes .../operations/__pycache__/ops.cpython-37.pyc | Bin 0 -> 83624 bytes .../__pycache__/schemaobj.cpython-37.pyc | Bin 0 -> 8315 bytes .../__pycache__/toimpl.cpython-37.pyc | Bin 0 -> 5495 bytes .../site-packages/alembic/operations/base.py | 1837 ++++ .../site-packages/alembic/operations/batch.py | 718 ++ .../site-packages/alembic/operations/ops.py | 2764 ++++++ .../alembic/operations/schemaobj.py | 287 + .../alembic/operations/toimpl.py | 223 + venv/Lib/site-packages/alembic/py.typed | 0 .../site-packages/alembic/runtime/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 178 bytes .../__pycache__/environment.cpython-37.pyc | Bin 0 -> 39754 bytes .../__pycache__/migration.cpython-37.pyc | Bin 0 -> 39053 bytes .../alembic/runtime/environment.py | 1043 ++ .../alembic/runtime/migration.py | 1380 +++ .../site-packages/alembic/script/__init__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 279 bytes .../script/__pycache__/base.cpython-37.pyc | Bin 0 -> 26731 bytes .../__pycache__/revision.cpython-37.pyc | Bin 0 -> 41636 bytes .../__pycache__/write_hooks.cpython-37.pyc | Bin 0 -> 4711 bytes venv/Lib/site-packages/alembic/script/base.py | 1053 ++ .../site-packages/alembic/script/revision.py | 1708 ++++ .../alembic/script/write_hooks.py | 176 + .../alembic/templates/async/README | 1 + .../async/__pycache__/env.cpython-37.pyc | Bin 0 -> 2114 bytes .../alembic/templates/async/alembic.ini.mako | 114 + .../alembic/templates/async/env.py | 89 + .../alembic/templates/async/script.py.mako | 26 + .../alembic/templates/generic/README | 1 + .../generic/__pycache__/env.cpython-37.pyc | Bin 0 -> 1683 bytes .../templates/generic/alembic.ini.mako | 116 + .../alembic/templates/generic/env.py | 78 + .../alembic/templates/generic/script.py.mako | 26 + .../alembic/templates/multidb/README | 12 + .../multidb/__pycache__/env.cpython-37.pyc | Bin 0 -> 2729 bytes .../templates/multidb/alembic.ini.mako | 121 + .../alembic/templates/multidb/env.py | 140 + .../alembic/templates/multidb/script.py.mako | 47 + .../site-packages/alembic/testing/__init__.py | 29 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1268 bytes .../__pycache__/assertions.cpython-37.pyc | Bin 0 -> 5365 bytes .../testing/__pycache__/env.cpython-37.pyc | Bin 0 -> 9539 bytes .../__pycache__/fixtures.cpython-37.pyc | Bin 0 -> 9348 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 8333 bytes .../__pycache__/schemacompare.cpython-37.pyc | Bin 0 -> 5232 bytes .../testing/__pycache__/util.cpython-37.pyc | Bin 0 -> 3938 bytes .../__pycache__/warnings.cpython-37.pyc | Bin 0 -> 810 bytes .../alembic/testing/assertions.py | 167 + venv/Lib/site-packages/alembic/testing/env.py | 518 + .../site-packages/alembic/testing/fixtures.py | 306 + .../alembic/testing/plugin/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 185 bytes .../__pycache__/bootstrap.cpython-37.pyc | Bin 0 -> 241 bytes .../alembic/testing/plugin/bootstrap.py | 4 + .../alembic/testing/requirements.py | 198 + .../alembic/testing/schemacompare.py | 160 + .../alembic/testing/suite/__init__.py | 7 + .../suite/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 393 bytes .../_autogen_fixtures.cpython-37.pyc | Bin 0 -> 7903 bytes .../test_autogen_comments.cpython-37.pyc | Bin 0 -> 4438 bytes .../test_autogen_computed.cpython-37.pyc | Bin 0 -> 5556 bytes .../test_autogen_diffs.cpython-37.pyc | Bin 0 -> 7586 bytes .../test_autogen_fks.cpython-37.pyc | Bin 0 -> 20264 bytes .../test_autogen_identity.cpython-37.pyc | Bin 0 -> 5330 bytes .../test_environment.cpython-37.pyc | Bin 0 -> 8852 bytes .../suite/__pycache__/test_op.cpython-37.pyc | Bin 0 -> 2268 bytes .../testing/suite/_autogen_fixtures.py | 335 + .../testing/suite/test_autogen_comments.py | 242 + .../testing/suite/test_autogen_computed.py | 203 + .../testing/suite/test_autogen_diffs.py | 273 + .../alembic/testing/suite/test_autogen_fks.py | 1190 +++ .../testing/suite/test_autogen_identity.py | 226 + .../alembic/testing/suite/test_environment.py | 364 + .../alembic/testing/suite/test_op.py | 42 + .../Lib/site-packages/alembic/testing/util.py | 126 + .../site-packages/alembic/testing/warnings.py | 40 + .../site-packages/alembic/util/__init__.py | 35 + .../util/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1369 bytes .../util/__pycache__/compat.cpython-37.pyc | Bin 0 -> 2185 bytes .../util/__pycache__/editor.cpython-37.pyc | Bin 0 -> 2477 bytes .../util/__pycache__/exc.cpython-37.pyc | Bin 0 -> 482 bytes .../__pycache__/langhelpers.cpython-37.pyc | Bin 0 -> 8976 bytes .../util/__pycache__/messaging.cpython-37.pyc | Bin 0 -> 3023 bytes .../util/__pycache__/pyfiles.cpython-37.pyc | Bin 0 -> 3046 bytes .../__pycache__/sqla_compat.cpython-37.pyc | Bin 0 -> 17140 bytes venv/Lib/site-packages/alembic/util/compat.py | 73 + venv/Lib/site-packages/alembic/util/editor.py | 81 + venv/Lib/site-packages/alembic/util/exc.py | 6 + .../site-packages/alembic/util/langhelpers.py | 290 + .../site-packages/alembic/util/messaging.py | 112 + .../Lib/site-packages/alembic/util/pyfiles.py | 110 + .../site-packages/alembic/util/sqla_compat.py | 639 ++ .../click-8.1.8.dist-info/INSTALLER | 1 + .../click-8.1.8.dist-info/LICENSE.txt | 28 + .../click-8.1.8.dist-info/METADATA | 74 + .../click-8.1.8.dist-info/RECORD | 38 + .../site-packages/click-8.1.8.dist-info/WHEEL | 4 + venv/Lib/site-packages/click/__init__.py | 75 + .../click/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2643 bytes .../click/__pycache__/_compat.cpython-37.pyc | Bin 0 -> 15689 bytes .../__pycache__/_termui_impl.cpython-37.pyc | Bin 0 -> 16063 bytes .../__pycache__/_textwrap.cpython-37.pyc | Bin 0 -> 1496 bytes .../__pycache__/_winconsole.cpython-37.pyc | Bin 0 -> 7715 bytes .../click/__pycache__/core.cpython-37.pyc | Bin 0 -> 90469 bytes .../__pycache__/decorators.cpython-37.pyc | Bin 0 -> 17693 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 10231 bytes .../__pycache__/formatting.cpython-37.pyc | Bin 0 -> 9296 bytes .../click/__pycache__/globals.cpython-37.pyc | Bin 0 -> 2391 bytes .../click/__pycache__/parser.cpython-37.pyc | Bin 0 -> 13470 bytes .../shell_completion.cpython-37.pyc | Bin 0 -> 17060 bytes .../click/__pycache__/termui.cpython-37.pyc | Bin 0 -> 25652 bytes .../click/__pycache__/testing.cpython-37.pyc | Bin 0 -> 14788 bytes .../click/__pycache__/types.cpython-37.pyc | Bin 0 -> 33897 bytes .../click/__pycache__/utils.cpython-37.pyc | Bin 0 -> 18624 bytes venv/Lib/site-packages/click/_compat.py | 623 ++ venv/Lib/site-packages/click/_termui_impl.py | 788 ++ venv/Lib/site-packages/click/_textwrap.py | 49 + venv/Lib/site-packages/click/_winconsole.py | 279 + venv/Lib/site-packages/click/core.py | 3047 ++++++ venv/Lib/site-packages/click/decorators.py | 562 ++ venv/Lib/site-packages/click/exceptions.py | 296 + venv/Lib/site-packages/click/formatting.py | 301 + venv/Lib/site-packages/click/globals.py | 67 + venv/Lib/site-packages/click/parser.py | 531 + venv/Lib/site-packages/click/py.typed | 0 .../site-packages/click/shell_completion.py | 603 ++ venv/Lib/site-packages/click/termui.py | 784 ++ venv/Lib/site-packages/click/testing.py | 483 + venv/Lib/site-packages/click/types.py | 1093 +++ venv/Lib/site-packages/click/utils.py | 624 ++ .../colorama-0.4.6.dist-info/INSTALLER | 1 + .../colorama-0.4.6.dist-info/METADATA | 441 + .../colorama-0.4.6.dist-info/RECORD | 31 + .../colorama-0.4.6.dist-info/WHEEL | 5 + .../licenses/LICENSE.txt | 27 + venv/Lib/site-packages/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 458 bytes .../colorama/__pycache__/ansi.cpython-37.pyc | Bin 0 -> 3321 bytes .../__pycache__/ansitowin32.cpython-37.pyc | Bin 0 -> 8214 bytes .../__pycache__/initialise.cpython-37.pyc | Bin 0 -> 2217 bytes .../colorama/__pycache__/win32.cpython-37.pyc | Bin 0 -> 4351 bytes .../__pycache__/winterm.cpython-37.pyc | Bin 0 -> 5174 bytes venv/Lib/site-packages/colorama/ansi.py | 102 + .../Lib/site-packages/colorama/ansitowin32.py | 277 + venv/Lib/site-packages/colorama/initialise.py | 121 + .../site-packages/colorama/tests/__init__.py | 1 + .../tests/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 178 bytes .../__pycache__/ansi_test.cpython-37.pyc | Bin 0 -> 2520 bytes .../ansitowin32_test.cpython-37.pyc | Bin 0 -> 11528 bytes .../initialise_test.cpython-37.pyc | Bin 0 -> 6944 bytes .../__pycache__/isatty_test.cpython-37.pyc | Bin 0 -> 2539 bytes .../tests/__pycache__/utils.cpython-37.pyc | Bin 0 -> 1593 bytes .../__pycache__/winterm_test.cpython-37.pyc | Bin 0 -> 3336 bytes .../site-packages/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../colorama/tests/initialise_test.py | 189 + .../colorama/tests/isatty_test.py | 57 + .../Lib/site-packages/colorama/tests/utils.py | 49 + .../colorama/tests/winterm_test.py | 131 + venv/Lib/site-packages/colorama/win32.py | 180 + venv/Lib/site-packages/colorama/winterm.py | 195 + venv/Lib/site-packages/easy_install.py | 5 + venv/Lib/site-packages/flask/__init__.py | 71 + venv/Lib/site-packages/flask/__main__.py | 3 + .../flask/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2374 bytes .../flask/__pycache__/__main__.cpython-37.pyc | Bin 0 -> 206 bytes .../flask/__pycache__/app.cpython-37.pyc | Bin 0 -> 75932 bytes .../__pycache__/blueprints.cpython-37.pyc | Bin 0 -> 25295 bytes .../flask/__pycache__/cli.cpython-37.pyc | Bin 0 -> 26421 bytes .../flask/__pycache__/config.cpython-37.pyc | Bin 0 -> 12335 bytes .../flask/__pycache__/ctx.cpython-37.pyc | Bin 0 -> 14233 bytes .../__pycache__/debughelpers.cpython-37.pyc | Bin 0 -> 5862 bytes .../flask/__pycache__/globals.cpython-37.pyc | Bin 0 -> 3256 bytes .../flask/__pycache__/helpers.cpython-37.pyc | Bin 0 -> 23638 bytes .../flask/__pycache__/logging.cpython-37.pyc | Bin 0 -> 2434 bytes .../flask/__pycache__/scaffold.cpython-37.pyc | Bin 0 -> 27297 bytes .../flask/__pycache__/sessions.cpython-37.pyc | Bin 0 -> 13618 bytes .../flask/__pycache__/signals.cpython-37.pyc | Bin 0 -> 2368 bytes .../__pycache__/templating.cpython-37.pyc | Bin 0 -> 6981 bytes .../flask/__pycache__/testing.cpython-37.pyc | Bin 0 -> 9309 bytes .../flask/__pycache__/typing.cpython-37.pyc | Bin 0 -> 1639 bytes .../flask/__pycache__/views.cpython-37.pyc | Bin 0 -> 5341 bytes .../flask/__pycache__/wrappers.cpython-37.pyc | Bin 0 -> 5049 bytes venv/Lib/site-packages/flask/app.py | 2552 +++++ venv/Lib/site-packages/flask/blueprints.py | 712 ++ venv/Lib/site-packages/flask/cli.py | 1054 ++ venv/Lib/site-packages/flask/config.py | 338 + venv/Lib/site-packages/flask/ctx.py | 438 + venv/Lib/site-packages/flask/debughelpers.py | 158 + venv/Lib/site-packages/flask/globals.py | 107 + venv/Lib/site-packages/flask/helpers.py | 705 ++ venv/Lib/site-packages/flask/json/__init__.py | 342 + .../json/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 11444 bytes .../json/__pycache__/provider.cpython-37.pyc | Bin 0 -> 9191 bytes .../flask/json/__pycache__/tag.cpython-37.pyc | Bin 0 -> 11808 bytes venv/Lib/site-packages/flask/json/provider.py | 310 + venv/Lib/site-packages/flask/json/tag.py | 312 + venv/Lib/site-packages/flask/logging.py | 74 + venv/Lib/site-packages/flask/py.typed | 0 venv/Lib/site-packages/flask/scaffold.py | 936 ++ venv/Lib/site-packages/flask/sessions.py | 421 + venv/Lib/site-packages/flask/signals.py | 56 + venv/Lib/site-packages/flask/templating.py | 212 + venv/Lib/site-packages/flask/testing.py | 301 + venv/Lib/site-packages/flask/typing.py | 80 + venv/Lib/site-packages/flask/views.py | 188 + venv/Lib/site-packages/flask/wrappers.py | 171 + .../site-packages/flask_migrate/__init__.py | 266 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 9123 bytes .../__pycache__/cli.cpython-37.pyc | Bin 0 -> 6775 bytes venv/Lib/site-packages/flask_migrate/cli.py | 261 + .../templates/aioflask-multidb/README | 1 + .../__pycache__/env.cpython-37.pyc | Bin 0 -> 4646 bytes .../aioflask-multidb/alembic.ini.mako | 50 + .../templates/aioflask-multidb/env.py | 202 + .../templates/aioflask-multidb/script.py.mako | 53 + .../flask_migrate/templates/aioflask/README | 1 + .../aioflask/__pycache__/env.cpython-37.pyc | Bin 0 -> 2931 bytes .../templates/aioflask/alembic.ini.mako | 50 + .../flask_migrate/templates/aioflask/env.py | 118 + .../templates/aioflask/script.py.mako | 24 + .../templates/flask-multidb/README | 1 + .../__pycache__/env.cpython-37.pyc | Bin 0 -> 4271 bytes .../templates/flask-multidb/alembic.ini.mako | 50 + .../templates/flask-multidb/env.py | 191 + .../templates/flask-multidb/script.py.mako | 53 + .../flask_migrate/templates/flask/README | 1 + .../flask/__pycache__/env.cpython-37.pyc | Bin 0 -> 2715 bytes .../templates/flask/alembic.ini.mako | 50 + .../flask_migrate/templates/flask/env.py | 113 + .../templates/flask/script.py.mako | 24 + .../INSTALLER | 1 + .../LICENSE.rst | 28 + .../flask_sqlalchemy-3.0.5.dist-info/METADATA | 104 + .../flask_sqlalchemy-3.0.5.dist-info/RECORD | 27 + .../REQUESTED | 0 .../flask_sqlalchemy-3.0.5.dist-info/WHEEL | 4 + .../flask_sqlalchemy/__init__.py | 46 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1374 bytes .../__pycache__/cli.cpython-37.pyc | Bin 0 -> 880 bytes .../__pycache__/extension.cpython-37.pyc | Bin 0 -> 31679 bytes .../__pycache__/model.cpython-37.pyc | Bin 0 -> 6682 bytes .../__pycache__/pagination.cpython-37.pyc | Bin 0 -> 10430 bytes .../__pycache__/query.cpython-37.pyc | Bin 0 -> 4024 bytes .../__pycache__/record_queries.cpython-37.pyc | Bin 0 -> 4561 bytes .../__pycache__/session.cpython-37.pyc | Bin 0 -> 3258 bytes .../__pycache__/table.cpython-37.pyc | Bin 0 -> 1265 bytes .../track_modifications.cpython-37.pyc | Bin 0 -> 2235 bytes .../Lib/site-packages/flask_sqlalchemy/cli.py | 16 + .../flask_sqlalchemy/extension.py | 1008 ++ .../site-packages/flask_sqlalchemy/model.py | 214 + .../flask_sqlalchemy/pagination.py | 364 + .../site-packages/flask_sqlalchemy/py.typed | 0 .../site-packages/flask_sqlalchemy/query.py | 105 + .../flask_sqlalchemy/record_queries.py | 141 + .../site-packages/flask_sqlalchemy/session.py | 102 + .../site-packages/flask_sqlalchemy/table.py | 39 + .../flask_sqlalchemy/track_modifications.py | 88 + .../greenlet-3.1.1.dist-info/AUTHORS | 51 + .../greenlet-3.1.1.dist-info/INSTALLER | 1 + .../greenlet-3.1.1.dist-info/LICENSE | 30 + .../greenlet-3.1.1.dist-info/LICENSE.PSF | 47 + .../greenlet-3.1.1.dist-info/METADATA | 103 + .../greenlet-3.1.1.dist-info/RECORD | 122 + .../greenlet-3.1.1.dist-info/WHEEL | 5 + .../greenlet-3.1.1.dist-info/top_level.txt | 1 + venv/Lib/site-packages/greenlet/CObjects.cpp | 157 + .../Lib/site-packages/greenlet/PyGreenlet.cpp | 738 ++ .../Lib/site-packages/greenlet/PyGreenlet.hpp | 35 + .../greenlet/PyGreenletUnswitchable.cpp | 147 + venv/Lib/site-packages/greenlet/PyModule.cpp | 292 + .../greenlet/TBrokenGreenlet.cpp | 45 + .../greenlet/TExceptionState.cpp | 62 + venv/Lib/site-packages/greenlet/TGreenlet.cpp | 718 ++ venv/Lib/site-packages/greenlet/TGreenlet.hpp | 813 ++ .../greenlet/TGreenletGlobals.cpp | 94 + .../site-packages/greenlet/TMainGreenlet.cpp | 153 + .../site-packages/greenlet/TPythonState.cpp | 393 + .../site-packages/greenlet/TStackState.cpp | 265 + .../site-packages/greenlet/TThreadState.hpp | 497 + .../greenlet/TThreadStateCreator.hpp | 102 + .../greenlet/TThreadStateDestroy.cpp | 258 + .../site-packages/greenlet/TUserGreenlet.cpp | 662 ++ venv/Lib/site-packages/greenlet/__init__.py | 71 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1004 bytes .../greenlet/_greenlet.cp37-win_amd64.pyd | Bin 0 -> 219648 bytes venv/Lib/site-packages/greenlet/greenlet.cpp | 320 + venv/Lib/site-packages/greenlet/greenlet.h | 164 + .../greenlet/greenlet_allocator.hpp | 63 + .../greenlet/greenlet_compiler_compat.hpp | 98 + .../greenlet/greenlet_cpython_add_pending.hpp | 172 + .../greenlet/greenlet_cpython_compat.hpp | 142 + .../greenlet/greenlet_exceptions.hpp | 171 + .../greenlet/greenlet_internal.hpp | 107 + .../site-packages/greenlet/greenlet_refs.hpp | 1118 +++ .../greenlet/greenlet_slp_switch.hpp | 99 + .../greenlet/greenlet_thread_support.hpp | 31 + .../greenlet/platform/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 180 bytes .../platform/setup_switch_x64_masm.cmd | 2 + .../greenlet/platform/switch_aarch64_gcc.h | 124 + .../greenlet/platform/switch_alpha_unix.h | 30 + .../greenlet/platform/switch_amd64_unix.h | 87 + .../greenlet/platform/switch_arm32_gcc.h | 79 + .../greenlet/platform/switch_arm32_ios.h | 67 + .../greenlet/platform/switch_arm64_masm.asm | 53 + .../greenlet/platform/switch_arm64_masm.obj | Bin 0 -> 746 bytes .../greenlet/platform/switch_arm64_msvc.h | 17 + .../greenlet/platform/switch_csky_gcc.h | 48 + .../platform/switch_loongarch64_linux.h | 31 + .../greenlet/platform/switch_m68k_gcc.h | 38 + .../greenlet/platform/switch_mips_unix.h | 64 + .../greenlet/platform/switch_ppc64_aix.h | 103 + .../greenlet/platform/switch_ppc64_linux.h | 105 + .../greenlet/platform/switch_ppc_aix.h | 87 + .../greenlet/platform/switch_ppc_linux.h | 84 + .../greenlet/platform/switch_ppc_macosx.h | 82 + .../greenlet/platform/switch_ppc_unix.h | 82 + .../greenlet/platform/switch_riscv_unix.h | 36 + .../greenlet/platform/switch_s390_unix.h | 87 + .../greenlet/platform/switch_sh_gcc.h | 36 + .../greenlet/platform/switch_sparc_sun_gcc.h | 92 + .../greenlet/platform/switch_x32_unix.h | 63 + .../greenlet/platform/switch_x64_masm.asm | 111 + .../greenlet/platform/switch_x64_masm.obj | Bin 0 -> 1078 bytes .../greenlet/platform/switch_x64_msvc.h | 60 + .../greenlet/platform/switch_x86_msvc.h | 326 + .../greenlet/platform/switch_x86_unix.h | 105 + .../greenlet/slp_platformselect.h | 75 + .../site-packages/greenlet/tests/__init__.py | 240 + .../tests/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 5673 bytes .../fail_clearing_run_switches.cpython-37.pyc | Bin 0 -> 1520 bytes .../fail_cpp_exception.cpython-37.pyc | Bin 0 -> 1155 bytes ...initialstub_already_started.cpython-37.pyc | Bin 0 -> 2027 bytes .../fail_slp_switch.cpython-37.pyc | Bin 0 -> 752 bytes ...fail_switch_three_greenlets.cpython-37.pyc | Bin 0 -> 1124 bytes ...ail_switch_three_greenlets2.cpython-37.pyc | Bin 0 -> 1499 bytes .../fail_switch_two_greenlets.cpython-37.pyc | Bin 0 -> 1143 bytes .../__pycache__/leakcheck.cpython-37.pyc | Bin 0 -> 7220 bytes .../test_contextvars.cpython-37.pyc | Bin 0 -> 7789 bytes .../tests/__pycache__/test_cpp.cpython-37.pyc | Bin 0 -> 2722 bytes .../test_extension_interface.cpython-37.pyc | Bin 0 -> 4544 bytes .../tests/__pycache__/test_gc.cpython-37.pyc | Bin 0 -> 3083 bytes .../__pycache__/test_generator.cpython-37.pyc | Bin 0 -> 2190 bytes .../test_generator_nested.cpython-37.pyc | Bin 0 -> 5222 bytes .../__pycache__/test_greenlet.cpython-37.pyc | Bin 0 -> 46742 bytes .../test_greenlet_trash.cpython-37.pyc | Bin 0 -> 4881 bytes .../__pycache__/test_leaks.cpython-37.pyc | Bin 0 -> 11383 bytes .../test_stack_saved.cpython-37.pyc | Bin 0 -> 850 bytes .../__pycache__/test_throw.cpython-37.pyc | Bin 0 -> 3982 bytes .../__pycache__/test_tracing.cpython-37.pyc | Bin 0 -> 9652 bytes .../__pycache__/test_version.cpython-37.pyc | Bin 0 -> 1517 bytes .../__pycache__/test_weakref.cpython-37.pyc | Bin 0 -> 1809 bytes .../greenlet/tests/_test_extension.c | 231 + .../tests/_test_extension.cp37-win_amd64.pyd | Bin 0 -> 14336 bytes .../_test_extension_cpp.cp37-win_amd64.pyd | Bin 0 -> 15872 bytes .../greenlet/tests/_test_extension_cpp.cpp | 226 + .../tests/fail_clearing_run_switches.py | 47 + .../greenlet/tests/fail_cpp_exception.py | 33 + .../tests/fail_initialstub_already_started.py | 78 + .../greenlet/tests/fail_slp_switch.py | 29 + .../tests/fail_switch_three_greenlets.py | 44 + .../tests/fail_switch_three_greenlets2.py | 55 + .../tests/fail_switch_two_greenlets.py | 41 + .../site-packages/greenlet/tests/leakcheck.py | 319 + .../greenlet/tests/test_contextvars.py | 310 + .../site-packages/greenlet/tests/test_cpp.py | 73 + .../tests/test_extension_interface.py | 115 + .../site-packages/greenlet/tests/test_gc.py | 86 + .../greenlet/tests/test_generator.py | 59 + .../greenlet/tests/test_generator_nested.py | 168 + .../greenlet/tests/test_greenlet.py | 1324 +++ .../greenlet/tests/test_greenlet_trash.py | 187 + .../greenlet/tests/test_leaks.py | 443 + .../greenlet/tests/test_stack_saved.py | 19 + .../greenlet/tests/test_throw.py | 128 + .../greenlet/tests/test_tracing.py | 291 + .../greenlet/tests/test_version.py | 41 + .../greenlet/tests/test_weakref.py | 35 + .../INSTALLER | 1 + .../LICENSE | 202 + .../METADATA | 134 + .../importlib_metadata-6.7.0.dist-info/RECORD | 25 + .../importlib_metadata-6.7.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../importlib_metadata/__init__.py | 1015 ++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 36603 bytes .../__pycache__/_adapters.cpython-37.pyc | Bin 0 -> 2958 bytes .../__pycache__/_collections.cpython-37.pyc | Bin 0 -> 1542 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 2147 bytes .../__pycache__/_functools.cpython-37.pyc | Bin 0 -> 3125 bytes .../__pycache__/_itertools.cpython-37.pyc | Bin 0 -> 2025 bytes .../__pycache__/_meta.cpython-37.pyc | Bin 0 -> 2867 bytes .../__pycache__/_py39compat.cpython-37.pyc | Bin 0 -> 1174 bytes .../__pycache__/_text.cpython-37.pyc | Bin 0 -> 3080 bytes .../importlib_metadata/_adapters.py | 90 + .../importlib_metadata/_collections.py | 30 + .../importlib_metadata/_compat.py | 74 + .../importlib_metadata/_functools.py | 104 + .../importlib_metadata/_itertools.py | 73 + .../site-packages/importlib_metadata/_meta.py | 63 + .../importlib_metadata/_py39compat.py | 35 + .../site-packages/importlib_metadata/_text.py | 99 + .../site-packages/importlib_metadata/py.typed | 0 .../INSTALLER | 1 + .../LICENSE | 202 + .../METADATA | 104 + .../RECORD | 79 + .../WHEEL | 5 + .../top_level.txt | 1 + .../importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 657 bytes .../__pycache__/_adapters.cpython-37.pyc | Bin 0 -> 7407 bytes .../__pycache__/_common.cpython-37.pyc | Bin 0 -> 5464 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 3472 bytes .../__pycache__/_itertools.cpython-37.pyc | Bin 0 -> 1370 bytes .../__pycache__/_legacy.cpython-37.pyc | Bin 0 -> 4124 bytes .../__pycache__/abc.cpython-37.pyc | Bin 0 -> 6770 bytes .../__pycache__/readers.cpython-37.pyc | Bin 0 -> 6526 bytes .../__pycache__/simple.cpython-37.pyc | Bin 0 -> 4433 bytes .../importlib_resources/_adapters.py | 168 + .../importlib_resources/_common.py | 207 + .../importlib_resources/_compat.py | 109 + .../importlib_resources/_itertools.py | 38 + .../importlib_resources/_legacy.py | 120 + .../site-packages/importlib_resources/abc.py | 170 + .../importlib_resources/py.typed | 0 .../importlib_resources/readers.py | 144 + .../importlib_resources/simple.py | 106 + .../importlib_resources/tests/__init__.py | 0 .../tests/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 188 bytes .../tests/__pycache__/_compat.cpython-37.pyc | Bin 0 -> 997 bytes .../tests/__pycache__/_path.cpython-37.pyc | Bin 0 -> 1647 bytes .../test_compatibilty_files.cpython-37.pyc | Bin 0 -> 5444 bytes .../__pycache__/test_contents.cpython-37.pyc | Bin 0 -> 1784 bytes .../__pycache__/test_custom.cpython-37.pyc | Bin 0 -> 2179 bytes .../__pycache__/test_files.cpython-37.pyc | Bin 0 -> 4716 bytes .../__pycache__/test_open.cpython-37.pyc | Bin 0 -> 3988 bytes .../__pycache__/test_path.cpython-37.pyc | Bin 0 -> 3032 bytes .../__pycache__/test_read.cpython-37.pyc | Bin 0 -> 3707 bytes .../__pycache__/test_reader.cpython-37.pyc | Bin 0 -> 6155 bytes .../__pycache__/test_resource.cpython-37.pyc | Bin 0 -> 11339 bytes .../__pycache__/update-zips.cpython-37.pyc | Bin 0 -> 1778 bytes .../tests/__pycache__/util.cpython-37.pyc | Bin 0 -> 6534 bytes .../importlib_resources/tests/_compat.py | 32 + .../importlib_resources/tests/_path.py | 56 + .../tests/data01/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 195 bytes .../tests/data01/binary.file | Bin 0 -> 4 bytes .../tests/data01/subdirectory/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 208 bytes .../tests/data01/subdirectory/binary.file | Bin 0 -> 4 bytes .../tests/data01/utf-16.file | Bin 0 -> 44 bytes .../tests/data01/utf-8.file | 1 + .../tests/data02/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 195 bytes .../tests/data02/one/__init__.py | 0 .../one/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 199 bytes .../tests/data02/one/resource1.txt | 1 + .../subdirectory/subsubdir/resource.txt | 1 + .../tests/data02/two/__init__.py | 0 .../two/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 199 bytes .../tests/data02/two/resource2.txt | 1 + .../tests/namespacedata01/binary.file | Bin 0 -> 4 bytes .../tests/namespacedata01/utf-16.file | Bin 0 -> 44 bytes .../tests/namespacedata01/utf-8.file | 1 + .../tests/test_compatibilty_files.py | 104 + .../tests/test_contents.py | 43 + .../importlib_resources/tests/test_custom.py | 45 + .../importlib_resources/tests/test_files.py | 112 + .../importlib_resources/tests/test_open.py | 85 + .../importlib_resources/tests/test_path.py | 69 + .../importlib_resources/tests/test_read.py | 82 + .../importlib_resources/tests/test_reader.py | 144 + .../tests/test_resource.py | 252 + .../importlib_resources/tests/update-zips.py | 53 + .../importlib_resources/tests/util.py | 179 + .../tests/zipdata01/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 198 bytes .../tests/zipdata01/ziptestdata.zip | Bin 0 -> 876 bytes .../tests/zipdata02/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 198 bytes .../tests/zipdata02/ziptestdata.zip | Bin 0 -> 698 bytes .../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-37.pyc | Bin 0 -> 866 bytes .../__pycache__/_json.cpython-37.pyc | Bin 0 -> 906 bytes .../__pycache__/encoding.cpython-37.pyc | Bin 0 -> 1849 bytes .../__pycache__/exc.cpython-37.pyc | Bin 0 -> 3375 bytes .../__pycache__/serializer.cpython-37.pyc | Bin 0 -> 9595 bytes .../__pycache__/signer.cpython-37.pyc | Bin 0 -> 8414 bytes .../__pycache__/timed.cpython-37.pyc | Bin 0 -> 6373 bytes .../__pycache__/url_safe.cpython-37.pyc | Bin 0 -> 2688 bytes venv/Lib/site-packages/itsdangerous/_json.py | 16 + .../site-packages/itsdangerous/encoding.py | 54 + venv/Lib/site-packages/itsdangerous/exc.py | 107 + venv/Lib/site-packages/itsdangerous/py.typed | 0 .../site-packages/itsdangerous/serializer.py | 295 + venv/Lib/site-packages/itsdangerous/signer.py | 257 + venv/Lib/site-packages/itsdangerous/timed.py | 234 + .../site-packages/itsdangerous/url_safe.py | 80 + .../jinja2-3.1.6.dist-info/INSTALLER | 1 + .../jinja2-3.1.6.dist-info/METADATA | 84 + .../jinja2-3.1.6.dist-info/RECORD | 57 + .../jinja2-3.1.6.dist-info/WHEEL | 4 + .../jinja2-3.1.6.dist-info/entry_points.txt | 3 + .../licenses/LICENSE.txt | 28 + venv/Lib/site-packages/jinja2/__init__.py | 38 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1596 bytes .../__pycache__/_identifier.cpython-37.pyc | Bin 0 -> 2069 bytes .../__pycache__/async_utils.cpython-37.pyc | Bin 0 -> 3360 bytes .../jinja2/__pycache__/bccache.cpython-37.pyc | Bin 0 -> 13742 bytes .../__pycache__/compiler.cpython-37.pyc | Bin 0 -> 55094 bytes .../__pycache__/constants.cpython-37.pyc | Bin 0 -> 1532 bytes .../jinja2/__pycache__/debug.cpython-37.pyc | Bin 0 -> 3962 bytes .../__pycache__/defaults.cpython-37.pyc | Bin 0 -> 1330 bytes .../__pycache__/environment.cpython-37.pyc | Bin 0 -> 52798 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 5569 bytes .../jinja2/__pycache__/ext.cpython-37.pyc | Bin 0 -> 25518 bytes .../jinja2/__pycache__/filters.cpython-37.pyc | Bin 0 -> 51163 bytes .../__pycache__/idtracking.cpython-37.pyc | Bin 0 -> 11141 bytes .../jinja2/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 20009 bytes .../jinja2/__pycache__/loaders.cpython-37.pyc | Bin 0 -> 21095 bytes .../jinja2/__pycache__/meta.cpython-37.pyc | Bin 0 -> 3784 bytes .../__pycache__/nativetypes.cpython-37.pyc | Bin 0 -> 4951 bytes .../jinja2/__pycache__/nodes.cpython-37.pyc | Bin 0 -> 41409 bytes .../__pycache__/optimizer.cpython-37.pyc | Bin 0 -> 1897 bytes .../jinja2/__pycache__/parser.cpython-37.pyc | Bin 0 -> 27958 bytes .../jinja2/__pycache__/runtime.cpython-37.pyc | Bin 0 -> 32238 bytes .../jinja2/__pycache__/sandbox.cpython-37.pyc | Bin 0 -> 12105 bytes .../jinja2/__pycache__/tests.cpython-37.pyc | Bin 0 -> 6524 bytes .../jinja2/__pycache__/utils.cpython-37.pyc | Bin 0 -> 24625 bytes .../jinja2/__pycache__/visitor.cpython-37.pyc | Bin 0 -> 3885 bytes venv/Lib/site-packages/jinja2/_identifier.py | 6 + venv/Lib/site-packages/jinja2/async_utils.py | 99 + venv/Lib/site-packages/jinja2/bccache.py | 408 + venv/Lib/site-packages/jinja2/compiler.py | 1998 ++++ venv/Lib/site-packages/jinja2/constants.py | 20 + venv/Lib/site-packages/jinja2/debug.py | 191 + venv/Lib/site-packages/jinja2/defaults.py | 48 + venv/Lib/site-packages/jinja2/environment.py | 1672 ++++ venv/Lib/site-packages/jinja2/exceptions.py | 166 + venv/Lib/site-packages/jinja2/ext.py | 870 ++ venv/Lib/site-packages/jinja2/filters.py | 1873 ++++ venv/Lib/site-packages/jinja2/idtracking.py | 318 + venv/Lib/site-packages/jinja2/lexer.py | 868 ++ venv/Lib/site-packages/jinja2/loaders.py | 693 ++ venv/Lib/site-packages/jinja2/meta.py | 112 + venv/Lib/site-packages/jinja2/nativetypes.py | 130 + venv/Lib/site-packages/jinja2/nodes.py | 1206 +++ venv/Lib/site-packages/jinja2/optimizer.py | 48 + venv/Lib/site-packages/jinja2/parser.py | 1049 ++ venv/Lib/site-packages/jinja2/py.typed | 0 venv/Lib/site-packages/jinja2/runtime.py | 1062 ++ venv/Lib/site-packages/jinja2/sandbox.py | 436 + venv/Lib/site-packages/jinja2/tests.py | 256 + venv/Lib/site-packages/jinja2/utils.py | 766 ++ venv/Lib/site-packages/jinja2/visitor.py | 92 + venv/Lib/site-packages/mako/__init__.py | 8 + .../mako/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 188 bytes .../mako/__pycache__/_ast_util.cpython-37.pyc | Bin 0 -> 21791 bytes .../mako/__pycache__/ast.cpython-37.pyc | Bin 0 -> 4806 bytes .../mako/__pycache__/cache.cpython-37.pyc | Bin 0 -> 6934 bytes .../mako/__pycache__/cmd.cpython-37.pyc | Bin 0 -> 2343 bytes .../mako/__pycache__/codegen.cpython-37.pyc | Bin 0 -> 32813 bytes .../mako/__pycache__/compat.cpython-37.pyc | Bin 0 -> 1937 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 11579 bytes .../mako/__pycache__/filters.cpython-37.pyc | Bin 0 -> 5001 bytes .../mako/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 10136 bytes .../mako/__pycache__/lookup.cpython-37.pyc | Bin 0 -> 10264 bytes .../mako/__pycache__/parsetree.cpython-37.pyc | Bin 0 -> 19528 bytes .../mako/__pycache__/pygen.cpython-37.pyc | Bin 0 -> 6676 bytes .../mako/__pycache__/pyparser.cpython-37.pyc | Bin 0 -> 6671 bytes .../mako/__pycache__/runtime.cpython-37.pyc | Bin 0 -> 27574 bytes .../mako/__pycache__/template.cpython-37.pyc | Bin 0 -> 19789 bytes .../mako/__pycache__/util.cpython-37.pyc | Bin 0 -> 11186 bytes venv/Lib/site-packages/mako/_ast_util.py | 713 ++ venv/Lib/site-packages/mako/ast.py | 202 + venv/Lib/site-packages/mako/cache.py | 239 + venv/Lib/site-packages/mako/cmd.py | 100 + venv/Lib/site-packages/mako/codegen.py | 1309 +++ venv/Lib/site-packages/mako/compat.py | 76 + venv/Lib/site-packages/mako/exceptions.py | 417 + venv/Lib/site-packages/mako/ext/__init__.py | 0 .../ext/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 171 bytes .../__pycache__/autohandler.cpython-37.pyc | Bin 0 -> 1483 bytes .../__pycache__/babelplugin.cpython-37.pyc | Bin 0 -> 2096 bytes .../__pycache__/beaker_cache.cpython-37.pyc | Bin 0 -> 2553 bytes .../ext/__pycache__/extract.cpython-37.pyc | Bin 0 -> 2868 bytes .../__pycache__/linguaplugin.cpython-37.pyc | Bin 0 -> 1638 bytes .../__pycache__/preprocessors.cpython-37.pyc | Bin 0 -> 600 bytes .../__pycache__/pygmentplugin.cpython-37.pyc | Bin 0 -> 4547 bytes .../ext/__pycache__/turbogears.cpython-37.pyc | Bin 0 -> 1621 bytes .../Lib/site-packages/mako/ext/autohandler.py | 70 + .../Lib/site-packages/mako/ext/babelplugin.py | 57 + .../site-packages/mako/ext/beaker_cache.py | 82 + venv/Lib/site-packages/mako/ext/extract.py | 129 + .../site-packages/mako/ext/linguaplugin.py | 57 + .../site-packages/mako/ext/preprocessors.py | 20 + .../site-packages/mako/ext/pygmentplugin.py | 150 + venv/Lib/site-packages/mako/ext/turbogears.py | 61 + venv/Lib/site-packages/mako/filters.py | 163 + venv/Lib/site-packages/mako/lexer.py | 469 + venv/Lib/site-packages/mako/lookup.py | 362 + venv/Lib/site-packages/mako/parsetree.py | 656 ++ venv/Lib/site-packages/mako/pygen.py | 309 + venv/Lib/site-packages/mako/pyparser.py | 220 + venv/Lib/site-packages/mako/runtime.py | 968 ++ venv/Lib/site-packages/mako/template.py | 716 ++ .../site-packages/mako/testing/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 175 bytes .../__pycache__/_config.cpython-37.pyc | Bin 0 -> 4323 bytes .../__pycache__/assertions.cpython-37.pyc | Bin 0 -> 4915 bytes .../testing/__pycache__/config.cpython-37.pyc | Bin 0 -> 678 bytes .../__pycache__/exclusions.cpython-37.pyc | Bin 0 -> 1624 bytes .../__pycache__/fixtures.cpython-37.pyc | Bin 0 -> 3481 bytes .../__pycache__/helpers.cpython-37.pyc | Bin 0 -> 2078 bytes .../Lib/site-packages/mako/testing/_config.py | 128 + .../site-packages/mako/testing/assertions.py | 167 + venv/Lib/site-packages/mako/testing/config.py | 17 + .../site-packages/mako/testing/exclusions.py | 80 + .../site-packages/mako/testing/fixtures.py | 119 + .../Lib/site-packages/mako/testing/helpers.py | 67 + venv/Lib/site-packages/mako/util.py | 388 + venv/Lib/site-packages/markupsafe/__init__.py | 332 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 11399 bytes .../__pycache__/_native.cpython-37.pyc | Bin 0 -> 1986 bytes venv/Lib/site-packages/markupsafe/_native.py | 63 + venv/Lib/site-packages/markupsafe/_speedups.c | 320 + .../markupsafe/_speedups.cp37-win_amd64.pyd | Bin 0 -> 15872 bytes .../site-packages/markupsafe/_speedups.pyi | 9 + venv/Lib/site-packages/markupsafe/py.typed | 0 .../pip-24.0.dist-info/AUTHORS.txt | 760 ++ .../pip-24.0.dist-info/INSTALLER | 1 + .../pip-24.0.dist-info/LICENSE.txt | 20 + .../site-packages/pip-24.0.dist-info/METADATA | 88 + .../site-packages/pip-24.0.dist-info/RECORD | 1024 ++ .../site-packages/pip-24.0.dist-info/WHEEL | 5 + .../pip-24.0.dist-info/entry_points.txt | 4 + .../pip-24.0.dist-info/top_level.txt | 1 + venv/Lib/site-packages/pip/__init__.py | 13 + venv/Lib/site-packages/pip/__main__.py | 24 + venv/Lib/site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 612 bytes .../pip/__pycache__/__main__.cpython-37.pyc | Bin 0 -> 446 bytes .../__pycache__/__pip-runner__.cpython-37.pyc | Bin 0 -> 1611 bytes .../site-packages/pip/_internal/__init__.py | 18 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 676 bytes .../__pycache__/build_env.cpython-37.pyc | Bin 0 -> 9545 bytes .../__pycache__/cache.cpython-37.pyc | Bin 0 -> 8977 bytes .../__pycache__/configuration.cpython-37.pyc | Bin 0 -> 11573 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 25992 bytes .../_internal/__pycache__/main.cpython-37.pyc | Bin 0 -> 600 bytes .../__pycache__/pyproject.cpython-37.pyc | Bin 0 -> 3604 bytes .../self_outdated_check.cpython-37.pyc | Bin 0 -> 6782 bytes .../__pycache__/wheel_builder.cpython-37.pyc | Bin 0 -> 8505 bytes .../site-packages/pip/_internal/build_env.py | 311 + venv/Lib/site-packages/pip/_internal/cache.py | 290 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 259 bytes .../__pycache__/autocompletion.cpython-37.pyc | Bin 0 -> 5334 bytes .../__pycache__/base_command.cpython-37.pyc | Bin 0 -> 6390 bytes .../cli/__pycache__/cmdoptions.cpython-37.pyc | Bin 0 -> 23522 bytes .../command_context.cpython-37.pyc | Bin 0 -> 1263 bytes .../cli/__pycache__/main.cpython-37.pyc | Bin 0 -> 1475 bytes .../__pycache__/main_parser.cpython-37.pyc | Bin 0 -> 2976 bytes .../cli/__pycache__/parser.cpython-37.pyc | Bin 0 -> 9817 bytes .../__pycache__/progress_bars.cpython-37.pyc | Bin 0 -> 1860 bytes .../__pycache__/req_command.cpython-37.pyc | Bin 0 -> 12922 bytes .../cli/__pycache__/spinners.cpython-37.pyc | Bin 0 -> 4891 bytes .../__pycache__/status_codes.cpython-37.pyc | Bin 0 -> 338 bytes .../pip/_internal/cli/autocompletion.py | 172 + .../pip/_internal/cli/base_command.py | 236 + .../pip/_internal/cli/cmdoptions.py | 1074 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 79 + .../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 | 505 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3102 bytes .../commands/__pycache__/cache.cpython-37.pyc | Bin 0 -> 6423 bytes .../commands/__pycache__/check.cpython-37.pyc | Bin 0 -> 1617 bytes .../__pycache__/completion.cpython-37.pyc | Bin 0 -> 4279 bytes .../__pycache__/configuration.cpython-37.pyc | Bin 0 -> 8827 bytes .../commands/__pycache__/debug.cpython-37.pyc | Bin 0 -> 6727 bytes .../__pycache__/download.cpython-37.pyc | Bin 0 -> 4229 bytes .../__pycache__/freeze.cpython-37.pyc | Bin 0 -> 2941 bytes .../commands/__pycache__/hash.cpython-37.pyc | Bin 0 -> 2084 bytes .../commands/__pycache__/help.cpython-37.pyc | Bin 0 -> 1280 bytes .../commands/__pycache__/index.cpython-37.pyc | Bin 0 -> 4439 bytes .../__pycache__/inspect.cpython-37.pyc | Bin 0 -> 2930 bytes .../__pycache__/install.cpython-37.pyc | Bin 0 -> 17437 bytes .../commands/__pycache__/list.cpython-37.pyc | Bin 0 -> 10156 bytes .../__pycache__/search.cpython-37.pyc | Bin 0 -> 5244 bytes .../commands/__pycache__/show.cpython-37.pyc | Bin 0 -> 6369 bytes .../__pycache__/uninstall.cpython-37.pyc | Bin 0 -> 3294 bytes .../commands/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 4966 bytes .../pip/_internal/commands/cache.py | 225 + .../pip/_internal/commands/check.py | 54 + .../pip/_internal/commands/completion.py | 130 + .../pip/_internal/commands/configuration.py | 280 + .../pip/_internal/commands/debug.py | 201 + .../pip/_internal/commands/download.py | 147 + .../pip/_internal/commands/freeze.py | 108 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 774 ++ .../pip/_internal/commands/list.py | 368 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 189 + .../pip/_internal/commands/uninstall.py | 113 + .../pip/_internal/commands/wheel.py | 183 + .../pip/_internal/configuration.py | 383 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 776 bytes .../__pycache__/base.cpython-37.pyc | Bin 0 -> 2473 bytes .../__pycache__/installed.cpython-37.pyc | Bin 0 -> 1465 bytes .../__pycache__/sdist.cpython-37.pyc | Bin 0 -> 5264 bytes .../__pycache__/wheel.cpython-37.pyc | Bin 0 -> 1828 bytes .../pip/_internal/distributions/base.py | 51 + .../pip/_internal/distributions/installed.py | 29 + .../pip/_internal/distributions/sdist.py | 156 + .../pip/_internal/distributions/wheel.py | 40 + .../site-packages/pip/_internal/exceptions.py | 728 ++ .../pip/_internal/index/__init__.py | 2 + .../index/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 213 bytes .../__pycache__/collector.cpython-37.pyc | Bin 0 -> 15224 bytes .../__pycache__/package_finder.cpython-37.pyc | Bin 0 -> 29068 bytes .../index/__pycache__/sources.cpython-37.pyc | Bin 0 -> 8984 bytes .../pip/_internal/index/collector.py | 507 + .../pip/_internal/index/package_finder.py | 1027 ++ .../pip/_internal/index/sources.py | 285 + .../pip/_internal/locations/__init__.py | 467 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 10957 bytes .../__pycache__/_distutils.cpython-37.pyc | Bin 0 -> 4545 bytes .../__pycache__/_sysconfig.cpython-37.pyc | Bin 0 -> 5966 bytes .../locations/__pycache__/base.cpython-37.pyc | Bin 0 -> 2378 bytes .../pip/_internal/locations/_distutils.py | 172 + .../pip/_internal/locations/_sysconfig.py | 213 + .../pip/_internal/locations/base.py | 81 + venv/Lib/site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 128 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 4763 bytes .../metadata/__pycache__/_json.cpython-37.pyc | Bin 0 -> 2259 bytes .../metadata/__pycache__/base.cpython-37.pyc | Bin 0 -> 27531 bytes .../__pycache__/pkg_resources.cpython-37.pyc | Bin 0 -> 10512 bytes .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 702 ++ .../_internal/metadata/importlib/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 334 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 2729 bytes .../__pycache__/_dists.cpython-37.pyc | Bin 0 -> 8882 bytes .../__pycache__/_envs.cpython-37.pyc | Bin 0 -> 7577 bytes .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 227 + .../pip/_internal/metadata/importlib/_envs.py | 189 + .../pip/_internal/metadata/pkg_resources.py | 278 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 247 bytes .../__pycache__/candidate.cpython-37.pyc | Bin 0 -> 1422 bytes .../__pycache__/direct_url.cpython-37.pyc | Bin 0 -> 7547 bytes .../__pycache__/format_control.cpython-37.pyc | Bin 0 -> 2672 bytes .../models/__pycache__/index.cpython-37.pyc | Bin 0 -> 1209 bytes .../installation_report.cpython-37.pyc | Bin 0 -> 1732 bytes .../models/__pycache__/link.cpython-37.pyc | Bin 0 -> 17964 bytes .../models/__pycache__/scheme.cpython-37.pyc | Bin 0 -> 1009 bytes .../__pycache__/search_scope.cpython-37.pyc | Bin 0 -> 3501 bytes .../selection_prefs.cpython-37.pyc | Bin 0 -> 1661 bytes .../__pycache__/target_python.cpython-37.pyc | Bin 0 -> 3737 bytes .../models/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 4406 bytes .../pip/_internal/models/candidate.py | 30 + .../pip/_internal/models/direct_url.py | 235 + .../pip/_internal/models/format_control.py | 78 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 56 + .../pip/_internal/models/link.py | 579 ++ .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 132 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 122 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 235 bytes .../network/__pycache__/auth.cpython-37.pyc | Bin 0 -> 14367 bytes .../network/__pycache__/cache.cpython-37.pyc | Bin 0 -> 4385 bytes .../__pycache__/download.cpython-37.pyc | Bin 0 -> 5611 bytes .../__pycache__/lazy_wheel.cpython-37.pyc | Bin 0 -> 8238 bytes .../__pycache__/session.cpython-37.pyc | Bin 0 -> 12474 bytes .../network/__pycache__/utils.cpython-37.pyc | Bin 0 -> 1416 bytes .../network/__pycache__/xmlrpc.cpython-37.pyc | Bin 0 -> 2057 bytes .../pip/_internal/network/auth.py | 561 ++ .../pip/_internal/network/cache.py | 106 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 520 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 62 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 183 bytes .../__pycache__/check.cpython-37.pyc | Bin 0 -> 5146 bytes .../__pycache__/freeze.cpython-37.pyc | Bin 0 -> 6061 bytes .../__pycache__/prepare.cpython-37.pyc | Bin 0 -> 15214 bytes .../_internal/operations/build/__init__.py | 0 .../build/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 189 bytes .../__pycache__/build_tracker.cpython-37.pyc | Bin 0 -> 4824 bytes .../build/__pycache__/metadata.cpython-37.pyc | Bin 0 -> 1358 bytes .../metadata_editable.cpython-37.pyc | Bin 0 -> 1390 bytes .../metadata_legacy.cpython-37.pyc | Bin 0 -> 2248 bytes .../build/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 1176 bytes .../__pycache__/wheel_editable.cpython-37.pyc | Bin 0 -> 1372 bytes .../__pycache__/wheel_legacy.cpython-37.pyc | Bin 0 -> 2643 bytes .../operations/build/build_tracker.py | 139 + .../_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 | 187 + .../pip/_internal/operations/freeze.py | 255 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 247 bytes .../editable_legacy.cpython-37.pyc | Bin 0 -> 1364 bytes .../install/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 20684 bytes .../operations/install/editable_legacy.py | 46 + .../pip/_internal/operations/install/wheel.py | 734 ++ .../pip/_internal/operations/prepare.py | 730 ++ .../site-packages/pip/_internal/pyproject.py | 179 + .../pip/_internal/req/__init__.py | 92 + .../req/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2478 bytes .../__pycache__/constructors.cpython-37.pyc | Bin 0 -> 13880 bytes .../req/__pycache__/req_file.cpython-37.pyc | Bin 0 -> 13722 bytes .../__pycache__/req_install.cpython-37.pyc | Bin 0 -> 24255 bytes .../req/__pycache__/req_set.cpython-37.pyc | Bin 0 -> 5198 bytes .../__pycache__/req_uninstall.cpython-37.pyc | Bin 0 -> 18930 bytes .../pip/_internal/req/constructors.py | 576 ++ .../pip/_internal/req/req_file.py | 554 ++ .../pip/_internal/req/req_install.py | 923 ++ .../pip/_internal/req/req_set.py | 119 + .../pip/_internal/req/req_uninstall.py | 649 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 183 bytes .../__pycache__/base.cpython-37.pyc | Bin 0 -> 1022 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 190 bytes .../__pycache__/resolver.cpython-37.pyc | Bin 0 -> 14726 bytes .../_internal/resolution/legacy/resolver.py | 598 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 194 bytes .../__pycache__/base.cpython-37.pyc | Bin 0 -> 6594 bytes .../__pycache__/candidates.cpython-37.pyc | Bin 0 -> 20641 bytes .../__pycache__/factory.cpython-37.pyc | Bin 0 -> 21029 bytes .../found_candidates.cpython-37.pyc | Bin 0 -> 4839 bytes .../__pycache__/provider.cpython-37.pyc | Bin 0 -> 7754 bytes .../__pycache__/reporter.cpython-37.pyc | Bin 0 -> 3804 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 8369 bytes .../__pycache__/resolver.cpython-37.pyc | Bin 0 -> 8661 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 597 ++ .../resolution/resolvelib/factory.py | 812 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 255 + .../resolution/resolvelib/reporter.py | 80 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 317 + .../pip/_internal/self_outdated_check.py | 248 + .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 178 bytes .../__pycache__/_jaraco_text.cpython-37.pyc | Bin 0 -> 3798 bytes .../utils/__pycache__/_log.cpython-37.pyc | Bin 0 -> 1481 bytes .../utils/__pycache__/appdirs.cpython-37.pyc | Bin 0 -> 1600 bytes .../utils/__pycache__/compat.cpython-37.pyc | Bin 0 -> 1481 bytes .../compatibility_tags.cpython-37.pyc | Bin 0 -> 3985 bytes .../utils/__pycache__/datetime.cpython-37.pyc | Bin 0 -> 493 bytes .../__pycache__/deprecation.cpython-37.pyc | Bin 0 -> 3169 bytes .../direct_url_helpers.cpython-37.pyc | Bin 0 -> 2057 bytes .../utils/__pycache__/egg_link.cpython-37.pyc | Bin 0 -> 2369 bytes .../utils/__pycache__/encoding.cpython-37.pyc | Bin 0 -> 1297 bytes .../__pycache__/entrypoints.cpython-37.pyc | Bin 0 -> 2653 bytes .../__pycache__/filesystem.cpython-37.pyc | Bin 0 -> 4394 bytes .../__pycache__/filetypes.cpython-37.pyc | Bin 0 -> 924 bytes .../utils/__pycache__/glibc.cpython-37.pyc | Bin 0 -> 1683 bytes .../utils/__pycache__/hashes.cpython-37.pyc | Bin 0 -> 5400 bytes .../utils/__pycache__/logging.cpython-37.pyc | Bin 0 -> 9514 bytes .../utils/__pycache__/misc.cpython-37.pyc | Bin 0 -> 23110 bytes .../utils/__pycache__/models.cpython-37.pyc | Bin 0 -> 2024 bytes .../__pycache__/packaging.cpython-37.pyc | Bin 0 -> 2054 bytes .../setuptools_build.cpython-37.pyc | Bin 0 -> 3764 bytes .../__pycache__/subprocess.cpython-37.pyc | Bin 0 -> 5613 bytes .../utils/__pycache__/temp_dir.cpython-37.pyc | Bin 0 -> 8211 bytes .../__pycache__/unpacking.cpython-37.pyc | Bin 0 -> 6543 bytes .../utils/__pycache__/urls.cpython-37.pyc | Bin 0 -> 1570 bytes .../__pycache__/virtualenv.cpython-37.pyc | Bin 0 -> 3214 bytes .../utils/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 4403 bytes .../pip/_internal/utils/_jaraco_text.py | 109 + .../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 | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/egg_link.py | 80 + .../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 | 151 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 783 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 146 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 296 + .../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 | 134 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 501 bytes .../vcs/__pycache__/bazaar.cpython-37.pyc | Bin 0 -> 3451 bytes .../vcs/__pycache__/git.cpython-37.pyc | Bin 0 -> 12378 bytes .../vcs/__pycache__/mercurial.cpython-37.pyc | Bin 0 -> 5036 bytes .../vcs/__pycache__/subversion.cpython-37.pyc | Bin 0 -> 8451 bytes .../__pycache__/versioncontrol.cpython-37.pyc | Bin 0 -> 21029 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 | 354 + .../Lib/site-packages/pip/_vendor/__init__.py | 121 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3124 bytes .../_vendor/__pycache__/six.cpython-37.pyc | Bin 0 -> 27449 bytes .../typing_extensions.cpython-37.pyc | Bin 0 -> 94111 bytes .../pip/_vendor/cachecontrol/__init__.py | 28 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 765 bytes .../__pycache__/_cmd.cpython-37.pyc | Bin 0 -> 1772 bytes .../__pycache__/adapter.cpython-37.pyc | Bin 0 -> 4192 bytes .../__pycache__/cache.cpython-37.pyc | Bin 0 -> 3175 bytes .../__pycache__/controller.cpython-37.pyc | Bin 0 -> 9917 bytes .../__pycache__/filewrapper.cpython-37.pyc | Bin 0 -> 3113 bytes .../__pycache__/heuristics.cpython-37.pyc | Bin 0 -> 5308 bytes .../__pycache__/serialize.cpython-37.pyc | Bin 0 -> 4019 bytes .../__pycache__/wrapper.cpython-37.pyc | Bin 0 -> 1361 bytes .../pip/_vendor/cachecontrol/_cmd.py | 70 + .../pip/_vendor/cachecontrol/adapter.py | 161 + .../pip/_vendor/cachecontrol/cache.py | 74 + .../_vendor/cachecontrol/caches/__init__.py | 8 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 412 bytes .../__pycache__/file_cache.cpython-37.pyc | Bin 0 -> 5202 bytes .../__pycache__/redis_cache.cpython-37.pyc | Bin 0 -> 1943 bytes .../_vendor/cachecontrol/caches/file_cache.py | 181 + .../cachecontrol/caches/redis_cache.py | 48 + .../pip/_vendor/cachecontrol/controller.py | 494 + .../pip/_vendor/cachecontrol/filewrapper.py | 119 + .../pip/_vendor/cachecontrol/heuristics.py | 154 + .../pip/_vendor/cachecontrol/py.typed | 0 .../pip/_vendor/cachecontrol/serialize.py | 206 + .../pip/_vendor/cachecontrol/wrapper.py | 43 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 291 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 439 bytes .../certifi/__pycache__/core.cpython-37.pyc | Bin 0 -> 1997 bytes .../pip/_vendor/certifi/cacert.pem | 4635 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 108 + .../pip/_vendor/certifi/py.typed | 0 .../pip/_vendor/chardet/__init__.py | 115 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3154 bytes .../__pycache__/big5freq.cpython-37.pyc | Bin 0 -> 27165 bytes .../__pycache__/big5prober.cpython-37.pyc | Bin 0 -> 1135 bytes .../chardistribution.cpython-37.pyc | Bin 0 -> 7543 bytes .../charsetgroupprober.cpython-37.pyc | Bin 0 -> 2432 bytes .../__pycache__/charsetprober.cpython-37.pyc | Bin 0 -> 3801 bytes .../codingstatemachine.cpython-37.pyc | Bin 0 -> 3047 bytes .../codingstatemachinedict.cpython-37.pyc | Bin 0 -> 674 bytes .../__pycache__/cp949prober.cpython-37.pyc | Bin 0 -> 1142 bytes .../chardet/__pycache__/enums.cpython-37.pyc | Bin 0 -> 2681 bytes .../__pycache__/escprober.cpython-37.pyc | Bin 0 -> 2785 bytes .../chardet/__pycache__/escsm.cpython-37.pyc | Bin 0 -> 7194 bytes .../__pycache__/eucjpprober.cpython-37.pyc | Bin 0 -> 2599 bytes .../__pycache__/euckrfreq.cpython-37.pyc | Bin 0 -> 12049 bytes .../__pycache__/euckrprober.cpython-37.pyc | Bin 0 -> 1143 bytes .../__pycache__/euctwfreq.cpython-37.pyc | Bin 0 -> 27169 bytes .../__pycache__/euctwprober.cpython-37.pyc | Bin 0 -> 1143 bytes .../__pycache__/gb2312freq.cpython-37.pyc | Bin 0 -> 19093 bytes .../__pycache__/gb2312prober.cpython-37.pyc | Bin 0 -> 1151 bytes .../__pycache__/hebrewprober.cpython-37.pyc | Bin 0 -> 3392 bytes .../__pycache__/jisfreq.cpython-37.pyc | Bin 0 -> 22121 bytes .../__pycache__/johabfreq.cpython-37.pyc | Bin 0 -> 37310 bytes .../__pycache__/johabprober.cpython-37.pyc | Bin 0 -> 1142 bytes .../chardet/__pycache__/jpcntx.cpython-37.pyc | Bin 0 -> 38364 bytes .../langbulgarianmodel.cpython-37.pyc | Bin 0 -> 21522 bytes .../__pycache__/langgreekmodel.cpython-37.pyc | Bin 0 -> 20210 bytes .../langhebrewmodel.cpython-37.pyc | Bin 0 -> 20276 bytes .../langhungarianmodel.cpython-37.pyc | Bin 0 -> 21467 bytes .../langrussianmodel.cpython-37.pyc | Bin 0 -> 26030 bytes .../__pycache__/langthaimodel.cpython-37.pyc | Bin 0 -> 20452 bytes .../langturkishmodel.cpython-37.pyc | Bin 0 -> 20292 bytes .../__pycache__/latin1prober.cpython-37.pyc | Bin 0 -> 3060 bytes .../__pycache__/macromanprober.cpython-37.pyc | Bin 0 -> 3201 bytes .../mbcharsetprober.cpython-37.pyc | Bin 0 -> 2316 bytes .../mbcsgroupprober.cpython-37.pyc | Bin 0 -> 1237 bytes .../chardet/__pycache__/mbcssm.cpython-37.pyc | Bin 0 -> 17546 bytes .../__pycache__/resultdict.cpython-37.pyc | Bin 0 -> 554 bytes .../sbcharsetprober.cpython-37.pyc | Bin 0 -> 3646 bytes .../sbcsgroupprober.cpython-37.pyc | Bin 0 -> 1710 bytes .../__pycache__/sjisprober.cpython-37.pyc | Bin 0 -> 2625 bytes .../universaldetector.cpython-37.pyc | Bin 0 -> 7168 bytes .../__pycache__/utf1632prober.cpython-37.pyc | Bin 0 -> 6155 bytes .../__pycache__/utf8prober.cpython-37.pyc | Bin 0 -> 2089 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 427 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 261 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 147 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 182 bytes .../cli/__pycache__/chardetect.cpython-37.pyc | Bin 0 -> 2969 bytes .../pip/_vendor/chardet/cli/chardetect.py | 112 + .../pip/_vendor/chardet/codingstatemachine.py | 90 + .../_vendor/chardet/codingstatemachinedict.py | 19 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 85 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 261 + .../pip/_vendor/chardet/eucjpprober.py | 102 + .../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 | 316 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 238 + .../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 | 147 + .../pip/_vendor/chardet/macromanprober.py | 162 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 57 + .../pip/_vendor/chardet/mbcssm.py | 661 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 187 bytes .../__pycache__/languages.cpython-37.pyc | Bin 0 -> 7962 bytes .../pip/_vendor/chardet/metadata/languages.py | 352 + .../pip/_vendor/chardet/py.typed | 0 .../pip/_vendor/chardet/resultdict.py | 16 + .../pip/_vendor/chardet/sbcharsetprober.py | 162 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 105 + .../pip/_vendor/chardet/universaldetector.py | 362 + .../pip/_vendor/chardet/utf1632prober.py | 225 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 465 bytes .../colorama/__pycache__/ansi.cpython-37.pyc | Bin 0 -> 3328 bytes .../__pycache__/ansitowin32.cpython-37.pyc | Bin 0 -> 8221 bytes .../__pycache__/initialise.cpython-37.pyc | Bin 0 -> 2224 bytes .../colorama/__pycache__/win32.cpython-37.pyc | Bin 0 -> 4358 bytes .../__pycache__/winterm.cpython-37.pyc | Bin 0 -> 5181 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 277 + .../pip/_vendor/colorama/initialise.py | 121 + .../pip/_vendor/colorama/tests/__init__.py | 1 + .../tests/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 185 bytes .../__pycache__/ansi_test.cpython-37.pyc | Bin 0 -> 2527 bytes .../ansitowin32_test.cpython-37.pyc | Bin 0 -> 11535 bytes .../initialise_test.cpython-37.pyc | Bin 0 -> 6951 bytes .../__pycache__/isatty_test.cpython-37.pyc | Bin 0 -> 2546 bytes .../tests/__pycache__/utils.cpython-37.pyc | Bin 0 -> 1600 bytes .../__pycache__/winterm_test.cpython-37.pyc | Bin 0 -> 3343 bytes .../pip/_vendor/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../_vendor/colorama/tests/initialise_test.py | 189 + .../pip/_vendor/colorama/tests/isatty_test.py | 57 + .../pip/_vendor/colorama/tests/utils.py | 49 + .../_vendor/colorama/tests/winterm_test.py | 131 + .../pip/_vendor/colorama/win32.py | 180 + .../pip/_vendor/colorama/winterm.py | 195 + .../pip/_vendor/distlib/__init__.py | 33 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1034 bytes .../distlib/__pycache__/compat.cpython-37.pyc | Bin 0 -> 31603 bytes .../__pycache__/database.cpython-37.pyc | Bin 0 -> 43114 bytes .../distlib/__pycache__/index.cpython-37.pyc | Bin 0 -> 17093 bytes .../__pycache__/locators.cpython-37.pyc | Bin 0 -> 38514 bytes .../__pycache__/manifest.cpython-37.pyc | Bin 0 -> 10273 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 5290 bytes .../__pycache__/metadata.cpython-37.pyc | Bin 0 -> 27828 bytes .../__pycache__/resources.cpython-37.pyc | Bin 0 -> 10860 bytes .../__pycache__/scripts.cpython-37.pyc | Bin 0 -> 11362 bytes .../distlib/__pycache__/util.cpython-37.pyc | Bin 0 -> 51781 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 20598 bytes .../distlib/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 26872 bytes .../pip/_vendor/distlib/compat.py | 1138 +++ .../pip/_vendor/distlib/database.py | 1359 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1303 +++ .../pip/_vendor/distlib/manifest.py | 384 + .../pip/_vendor/distlib/markers.py | 167 + .../pip/_vendor/distlib/metadata.py | 1068 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 452 + .../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 | 2025 ++++ .../pip/_vendor/distlib/version.py | 751 ++ .../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 | 1099 +++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 986 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 250 bytes .../distro/__pycache__/distro.cpython-37.pyc | Bin 0 -> 42079 bytes .../pip/_vendor/distro/distro.py | 1399 +++ .../site-packages/pip/_vendor/distro/py.typed | 0 .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 902 bytes .../idna/__pycache__/codec.cpython-37.pyc | Bin 0 -> 3261 bytes .../idna/__pycache__/compat.cpython-37.pyc | Bin 0 -> 741 bytes .../idna/__pycache__/core.cpython-37.pyc | Bin 0 -> 9912 bytes .../idna/__pycache__/idnadata.cpython-37.pyc | Bin 0 -> 23304 bytes .../idna/__pycache__/intranges.cpython-37.pyc | Bin 0 -> 1972 bytes .../__pycache__/package_data.cpython-37.pyc | Bin 0 -> 198 bytes .../idna/__pycache__/uts46data.cpython-37.pyc | Bin 0 -> 187437 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 + .../site-packages/pip/_vendor/idna/py.typed | 0 .../pip/_vendor/idna/uts46data.py | 8600 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1397 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 1853 bytes .../msgpack/__pycache__/ext.cpython-37.pyc | Bin 0 -> 6208 bytes .../__pycache__/fallback.cpython-37.pyc | Bin 0 -> 25627 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-37.pyc | Bin 0 -> 601 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 457 bytes .../__pycache__/_manylinux.cpython-37.pyc | Bin 0 -> 7214 bytes .../__pycache__/_musllinux.cpython-37.pyc | Bin 0 -> 4557 bytes .../__pycache__/_structures.cpython-37.pyc | Bin 0 -> 2805 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 9428 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 3937 bytes .../__pycache__/specifiers.cpython-37.pyc | Bin 0 -> 21556 bytes .../packaging/__pycache__/tags.cpython-37.pyc | Bin 0 -> 12135 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 3578 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 13086 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/py.typed | 0 .../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/pkg_resources/__init__.py | 3361 +++++++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 101013 bytes .../pip/_vendor/platformdirs/__init__.py | 566 ++ .../pip/_vendor/platformdirs/__main__.py | 53 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 15898 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 1366 bytes .../__pycache__/android.cpython-37.pyc | Bin 0 -> 7310 bytes .../__pycache__/api.cpython-37.pyc | Bin 0 -> 7681 bytes .../__pycache__/macos.cpython-37.pyc | Bin 0 -> 4472 bytes .../__pycache__/unix.cpython-37.pyc | Bin 0 -> 9085 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 277 bytes .../__pycache__/windows.cpython-37.pyc | Bin 0 -> 8803 bytes .../pip/_vendor/platformdirs/android.py | 210 + .../pip/_vendor/platformdirs/api.py | 223 + .../pip/_vendor/platformdirs/macos.py | 91 + .../pip/_vendor/platformdirs/py.typed | 0 .../pip/_vendor/platformdirs/unix.py | 223 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 255 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2909 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 575 bytes .../__pycache__/cmdline.cpython-37.pyc | Bin 0 -> 15255 bytes .../__pycache__/console.cpython-37.pyc | Bin 0 -> 1886 bytes .../__pycache__/filter.cpython-37.pyc | Bin 0 -> 2606 bytes .../__pycache__/formatter.cpython-37.pyc | Bin 0 -> 3921 bytes .../pygments/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 26225 bytes .../__pycache__/modeline.cpython-37.pyc | Bin 0 -> 1163 bytes .../__pycache__/plugin.cpython-37.pyc | Bin 0 -> 2553 bytes .../__pycache__/regexopt.cpython-37.pyc | Bin 0 -> 2863 bytes .../__pycache__/scanner.cpython-37.pyc | Bin 0 -> 3514 bytes .../__pycache__/sphinxext.cpython-37.pyc | Bin 0 -> 7100 bytes .../pygments/__pycache__/style.cpython-37.pyc | Bin 0 -> 4451 bytes .../pygments/__pycache__/token.cpython-37.pyc | Bin 0 -> 4322 bytes .../__pycache__/unistring.cpython-37.pyc | Bin 0 -> 31252 bytes .../pygments/__pycache__/util.cpython-37.pyc | Bin 0 -> 10134 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-37.pyc | Bin 0 -> 23546 bytes .../pip/_vendor/pygments/formatter.py | 124 + .../_vendor/pygments/formatters/__init__.py | 158 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 4902 bytes .../__pycache__/_mapping.cpython-37.pyc | Bin 0 -> 4011 bytes .../__pycache__/bbcode.cpython-37.pyc | Bin 0 -> 3044 bytes .../__pycache__/groff.cpython-37.pyc | Bin 0 -> 4346 bytes .../__pycache__/html.cpython-37.pyc | Bin 0 -> 29115 bytes .../formatters/__pycache__/img.cpython-37.pyc | Bin 0 -> 17529 bytes .../formatters/__pycache__/irc.cpython-37.pyc | Bin 0 -> 3884 bytes .../__pycache__/latex.cpython-37.pyc | Bin 0 -> 13701 bytes .../__pycache__/other.cpython-37.pyc | Bin 0 -> 4744 bytes .../__pycache__/pangomarkup.cpython-37.pyc | Bin 0 -> 2067 bytes .../formatters/__pycache__/rtf.cpython-37.pyc | Bin 0 -> 4101 bytes .../formatters/__pycache__/svg.cpython-37.pyc | Bin 0 -> 6301 bytes .../__pycache__/terminal.cpython-37.pyc | Bin 0 -> 3865 bytes .../__pycache__/terminal256.cpython-37.pyc | Bin 0 -> 9181 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 | 154 + .../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 | 943 ++ .../pip/_vendor/pygments/lexers/__init__.py | 362 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 9917 bytes .../__pycache__/_mapping.cpython-37.pyc | Bin 0 -> 64508 bytes .../lexers/__pycache__/python.cpython-37.pyc | Bin 0 -> 31205 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 559 ++ .../pip/_vendor/pygments/lexers/python.py | 1198 +++ .../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 | 217 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 103 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3356 bytes .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 330 + .../pip/_vendor/pyparsing/__init__.py | 322 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 7689 bytes .../__pycache__/actions.cpython-37.pyc | Bin 0 -> 7576 bytes .../__pycache__/common.cpython-37.pyc | Bin 0 -> 9958 bytes .../pyparsing/__pycache__/core.cpython-37.pyc | Bin 0 -> 190345 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 9747 bytes .../__pycache__/helpers.cpython-37.pyc | Bin 0 -> 35274 bytes .../__pycache__/results.cpython-37.pyc | Bin 0 -> 25401 bytes .../__pycache__/testing.cpython-37.pyc | Bin 0 -> 11923 bytes .../__pycache__/unicode.cpython-37.pyc | Bin 0 -> 11348 bytes .../pyparsing/__pycache__/util.cpython-37.pyc | Bin 0 -> 9953 bytes .../pip/_vendor/pyparsing/actions.py | 217 + .../pip/_vendor/pyparsing/common.py | 432 + .../pip/_vendor/pyparsing/core.py | 6115 ++++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 656 ++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 16688 bytes .../pip/_vendor/pyparsing/exceptions.py | 299 + .../pip/_vendor/pyparsing/helpers.py | 1100 +++ .../pip/_vendor/pyparsing/py.typed | 0 .../pip/_vendor/pyparsing/results.py | 796 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 361 + .../pip/_vendor/pyparsing/util.py | 284 + .../pip/_vendor/pyproject_hooks/__init__.py | 23 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 593 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 322 bytes .../__pycache__/_impl.cpython-37.pyc | Bin 0 -> 11482 bytes .../pip/_vendor/pyproject_hooks/_compat.py | 8 + .../pip/_vendor/pyproject_hooks/_impl.py | 330 + .../pyproject_hooks/_in_process/__init__.py | 18 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 813 bytes .../__pycache__/_in_process.cpython-37.pyc | Bin 0 -> 9844 bytes .../_in_process/_in_process.py | 353 + .../pip/_vendor/requests/__init__.py | 182 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3977 bytes .../__pycache__/__version__.cpython-37.pyc | Bin 0 -> 537 bytes .../_internal_utils.cpython-37.pyc | Bin 0 -> 1616 bytes .../__pycache__/adapters.cpython-37.pyc | Bin 0 -> 16166 bytes .../requests/__pycache__/api.cpython-37.pyc | Bin 0 -> 6746 bytes .../requests/__pycache__/auth.cpython-37.pyc | Bin 0 -> 8352 bytes .../requests/__pycache__/certs.cpython-37.pyc | Bin 0 -> 786 bytes .../__pycache__/compat.cpython-37.pyc | Bin 0 -> 1358 bytes .../__pycache__/cookies.cpython-37.pyc | Bin 0 -> 18754 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 6374 bytes .../requests/__pycache__/help.cpython-37.pyc | Bin 0 -> 2814 bytes .../requests/__pycache__/hooks.cpython-37.pyc | Bin 0 -> 967 bytes .../__pycache__/models.cpython-37.pyc | Bin 0 -> 24531 bytes .../__pycache__/packages.cpython-37.pyc | Bin 0 -> 497 bytes .../__pycache__/sessions.cpython-37.pyc | Bin 0 -> 19600 bytes .../__pycache__/status_codes.cpython-37.pyc | Bin 0 -> 4214 bytes .../__pycache__/structures.cpython-37.pyc | Bin 0 -> 4389 bytes .../requests/__pycache__/utils.cpython-37.pyc | Bin 0 -> 24095 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 50 + .../pip/_vendor/requests/adapters.py | 538 ++ .../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 | 833 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1094 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 625 bytes .../__pycache__/providers.cpython-37.pyc | Bin 0 -> 6665 bytes .../__pycache__/reporters.cpython-37.pyc | Bin 0 -> 2600 bytes .../__pycache__/resolvers.cpython-37.pyc | Bin 0 -> 17638 bytes .../__pycache__/structs.cpython-37.pyc | Bin 0 -> 7342 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 188 bytes .../collections_abc.cpython-37.pyc | Bin 0 -> 364 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/py.typed | 0 .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 547 ++ .../pip/_vendor/resolvelib/structs.py | 170 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 274 + .../rich/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 5943 bytes .../rich/__pycache__/__main__.cpython-37.pyc | Bin 0 -> 7062 bytes .../__pycache__/_cell_widths.cpython-37.pyc | Bin 0 -> 9967 bytes .../__pycache__/_emoji_codes.cpython-37.pyc | Bin 0 -> 132630 bytes .../__pycache__/_emoji_replace.cpython-37.pyc | Bin 0 -> 1161 bytes .../__pycache__/_export_format.cpython-37.pyc | Bin 0 -> 2284 bytes .../__pycache__/_extension.cpython-37.pyc | Bin 0 -> 478 bytes .../rich/__pycache__/_fileno.cpython-37.pyc | Bin 0 -> 753 bytes .../rich/__pycache__/_inspect.cpython-37.pyc | Bin 0 -> 8600 bytes .../__pycache__/_log_render.cpython-37.pyc | Bin 0 -> 2515 bytes .../rich/__pycache__/_loop.cpython-37.pyc | Bin 0 -> 1279 bytes .../__pycache__/_null_file.cpython-37.pyc | Bin 0 -> 3315 bytes .../rich/__pycache__/_palettes.cpython-37.pyc | Bin 0 -> 6194 bytes .../rich/__pycache__/_pick.cpython-37.pyc | Bin 0 -> 637 bytes .../rich/__pycache__/_ratio.cpython-37.pyc | Bin 0 -> 5085 bytes .../rich/__pycache__/_spinners.cpython-37.pyc | Bin 0 -> 12335 bytes .../rich/__pycache__/_stack.cpython-37.pyc | Bin 0 -> 818 bytes .../rich/__pycache__/_timer.cpython-37.pyc | Bin 0 -> 673 bytes .../__pycache__/_win32_console.cpython-37.pyc | Bin 0 -> 19190 bytes .../rich/__pycache__/_windows.cpython-37.pyc | Bin 0 -> 1750 bytes .../_windows_renderer.cpython-37.pyc | Bin 0 -> 2050 bytes .../rich/__pycache__/_wrap.cpython-37.pyc | Bin 0 -> 1522 bytes .../rich/__pycache__/abc.cpython-37.pyc | Bin 0 -> 1279 bytes .../rich/__pycache__/align.cpython-37.pyc | Bin 0 -> 7875 bytes .../rich/__pycache__/ansi.cpython-37.pyc | Bin 0 -> 5551 bytes .../rich/__pycache__/bar.cpython-37.pyc | Bin 0 -> 2873 bytes .../rich/__pycache__/box.cpython-37.pyc | Bin 0 -> 8391 bytes .../rich/__pycache__/cells.cpython-37.pyc | Bin 0 -> 4174 bytes .../rich/__pycache__/color.cpython-37.pyc | Bin 0 -> 15341 bytes .../__pycache__/color_triplet.cpython-37.pyc | Bin 0 -> 1430 bytes .../rich/__pycache__/columns.cpython-37.pyc | Bin 0 -> 6072 bytes .../rich/__pycache__/console.cpython-37.pyc | Bin 0 -> 81237 bytes .../rich/__pycache__/constrain.cpython-37.pyc | Bin 0 -> 1626 bytes .../__pycache__/containers.cpython-37.pyc | Bin 0 -> 6405 bytes .../rich/__pycache__/control.cpython-37.pyc | Bin 0 -> 8022 bytes .../__pycache__/default_styles.cpython-37.pyc | Bin 0 -> 5315 bytes .../rich/__pycache__/diagnose.cpython-37.pyc | Bin 0 -> 1192 bytes .../rich/__pycache__/emoji.cpython-37.pyc | Bin 0 -> 3151 bytes .../rich/__pycache__/errors.cpython-37.pyc | Bin 0 -> 1756 bytes .../__pycache__/file_proxy.cpython-37.pyc | Bin 0 -> 2322 bytes .../rich/__pycache__/filesize.cpython-37.pyc | Bin 0 -> 2578 bytes .../__pycache__/highlighter.cpython-37.pyc | Bin 0 -> 8036 bytes .../rich/__pycache__/json.cpython-37.pyc | Bin 0 -> 4636 bytes .../rich/__pycache__/jupyter.cpython-37.pyc | Bin 0 -> 4041 bytes .../rich/__pycache__/layout.cpython-37.pyc | Bin 0 -> 14563 bytes .../rich/__pycache__/live.cpython-37.pyc | Bin 0 -> 10954 bytes .../__pycache__/live_render.cpython-37.pyc | Bin 0 -> 3339 bytes .../rich/__pycache__/logging.cpython-37.pyc | Bin 0 -> 9766 bytes .../rich/__pycache__/markup.cpython-37.pyc | Bin 0 -> 5873 bytes .../rich/__pycache__/measure.cpython-37.pyc | Bin 0 -> 4949 bytes .../rich/__pycache__/padding.cpython-37.pyc | Bin 0 -> 4337 bytes .../rich/__pycache__/pager.cpython-37.pyc | Bin 0 -> 1421 bytes .../rich/__pycache__/palette.cpython-37.pyc | Bin 0 -> 3665 bytes .../rich/__pycache__/panel.cpython-37.pyc | Bin 0 -> 7252 bytes .../rich/__pycache__/pretty.cpython-37.pyc | Bin 0 -> 27185 bytes .../rich/__pycache__/progress.cpython-37.pyc | Bin 0 -> 52932 bytes .../__pycache__/progress_bar.cpython-37.pyc | Bin 0 -> 6724 bytes .../rich/__pycache__/prompt.cpython-37.pyc | Bin 0 -> 11207 bytes .../rich/__pycache__/protocol.cpython-37.pyc | Bin 0 -> 1320 bytes .../rich/__pycache__/region.cpython-37.pyc | Bin 0 -> 508 bytes .../rich/__pycache__/repr.cpython-37.pyc | Bin 0 -> 4026 bytes .../rich/__pycache__/rule.cpython-37.pyc | Bin 0 -> 3844 bytes .../rich/__pycache__/scope.cpython-37.pyc | Bin 0 -> 2927 bytes .../rich/__pycache__/screen.cpython-37.pyc | Bin 0 -> 1787 bytes .../rich/__pycache__/segment.cpython-37.pyc | Bin 0 -> 20365 bytes .../rich/__pycache__/spinner.cpython-37.pyc | Bin 0 -> 4251 bytes .../rich/__pycache__/status.cpython-37.pyc | Bin 0 -> 4476 bytes .../rich/__pycache__/style.cpython-37.pyc | Bin 0 -> 21199 bytes .../rich/__pycache__/styled.cpython-37.pyc | Bin 0 -> 1651 bytes .../rich/__pycache__/syntax.cpython-37.pyc | Bin 0 -> 25224 bytes .../rich/__pycache__/table.cpython-37.pyc | Bin 0 -> 29297 bytes .../__pycache__/terminal_theme.cpython-37.pyc | Bin 0 -> 3133 bytes .../rich/__pycache__/text.cpython-37.pyc | Bin 0 -> 40386 bytes .../rich/__pycache__/theme.cpython-37.pyc | Bin 0 -> 4701 bytes .../rich/__pycache__/themes.cpython-37.pyc | Bin 0 -> 280 bytes .../rich/__pycache__/traceback.cpython-37.pyc | Bin 0 -> 21333 bytes .../rich/__pycache__/tree.cpython-37.pyc | Bin 0 -> 7185 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 | 76 + .../pip/_vendor/rich/_extension.py | 10 + .../site-packages/pip/_vendor/rich/_fileno.py | 24 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 69 + .../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 + .../Lib/site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 240 + .../Lib/site-packages/pip/_vendor/rich/bar.py | 94 + .../Lib/site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 622 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2633 +++++ .../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 | 190 + .../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 | 57 + .../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 | 443 + .../site-packages/pip/_vendor/rich/live.py | 375 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 289 + .../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 | 308 + .../site-packages/pip/_vendor/rich/pretty.py | 994 ++ .../pip/_vendor/rich/progress.py | 1702 ++++ .../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/py.typed | 0 .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 130 + .../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 | 137 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 796 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 948 ++ .../site-packages/pip/_vendor/rich/table.py | 1002 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1307 +++ .../site-packages/pip/_vendor/rich/theme.py | 115 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 756 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + venv/Lib/site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 608 ++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 17155 bytes .../__pycache__/_asyncio.cpython-37.pyc | Bin 0 -> 2820 bytes .../__pycache__/_utils.cpython-37.pyc | Bin 0 -> 1491 bytes .../tenacity/__pycache__/after.cpython-37.pyc | Bin 0 -> 1232 bytes .../__pycache__/before.cpython-37.pyc | Bin 0 -> 1129 bytes .../__pycache__/before_sleep.cpython-37.pyc | Bin 0 -> 1548 bytes .../tenacity/__pycache__/nap.cpython-37.pyc | Bin 0 -> 1163 bytes .../tenacity/__pycache__/retry.cpython-37.pyc | Bin 0 -> 10637 bytes .../tenacity/__pycache__/stop.cpython-37.pyc | Bin 0 -> 4500 bytes .../__pycache__/tornadoweb.cpython-37.pyc | Bin 0 -> 1719 bytes .../tenacity/__pycache__/wait.cpython-37.pyc | Bin 0 -> 9260 bytes .../pip/_vendor/tenacity/_asyncio.py | 94 + .../pip/_vendor/tenacity/_utils.py | 76 + .../pip/_vendor/tenacity/after.py | 51 + .../pip/_vendor/tenacity/before.py | 46 + .../pip/_vendor/tenacity/before_sleep.py | 71 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/py.typed | 0 .../pip/_vendor/tenacity/retry.py | 272 + .../pip/_vendor/tenacity/stop.py | 103 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 228 + .../pip/_vendor/tomli/__init__.py | 11 + .../tomli/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 342 bytes .../tomli/__pycache__/_parser.cpython-37.pyc | Bin 0 -> 16711 bytes .../tomli/__pycache__/_re.cpython-37.pyc | Bin 0 -> 2765 bytes .../tomli/__pycache__/_types.cpython-37.pyc | Bin 0 -> 312 bytes .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../site-packages/pip/_vendor/tomli/py.typed | 1 + .../pip/_vendor/truststore/__init__.py | 13 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 539 bytes .../__pycache__/_api.cpython-37.pyc | Bin 0 -> 9801 bytes .../__pycache__/_macos.cpython-37.pyc | Bin 0 -> 8390 bytes .../__pycache__/_openssl.cpython-37.pyc | Bin 0 -> 1447 bytes .../__pycache__/_ssl_constants.cpython-37.pyc | Bin 0 -> 769 bytes .../__pycache__/_windows.cpython-37.pyc | Bin 0 -> 10130 bytes .../pip/_vendor/truststore/_api.py | 302 + .../pip/_vendor/truststore/_macos.py | 501 + .../pip/_vendor/truststore/_openssl.py | 66 + .../pip/_vendor/truststore/_ssl_constants.py | 31 + .../pip/_vendor/truststore/_windows.py | 554 ++ .../pip/_vendor/truststore/py.typed | 0 .../pip/_vendor/typing_extensions.py | 3072 ++++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2486 bytes .../__pycache__/_collections.cpython-37.pyc | Bin 0 -> 10697 bytes .../__pycache__/_version.cpython-37.pyc | Bin 0 -> 201 bytes .../__pycache__/connection.cpython-37.pyc | Bin 0 -> 13834 bytes .../__pycache__/connectionpool.cpython-37.pyc | Bin 0 -> 25726 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 12039 bytes .../urllib3/__pycache__/fields.cpython-37.pyc | Bin 0 -> 8129 bytes .../__pycache__/filepost.cpython-37.pyc | Bin 0 -> 2747 bytes .../__pycache__/poolmanager.cpython-37.pyc | Bin 0 -> 14883 bytes .../__pycache__/request.cpython-37.pyc | Bin 0 -> 6298 bytes .../__pycache__/response.cpython-37.pyc | Bin 0 -> 22091 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 572 ++ .../pip/_vendor/urllib3/connectionpool.py | 1132 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 186 bytes .../_appengine_environ.cpython-37.pyc | Bin 0 -> 1395 bytes .../__pycache__/appengine.cpython-37.pyc | Bin 0 -> 8168 bytes .../__pycache__/ntlmpool.cpython-37.pyc | Bin 0 -> 3581 bytes .../__pycache__/pyopenssl.cpython-37.pyc | Bin 0 -> 15693 bytes .../securetransport.cpython-37.pyc | Bin 0 -> 21484 bytes .../contrib/__pycache__/socks.cpython-37.pyc | Bin 0 -> 5556 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 203 bytes .../__pycache__/bindings.cpython-37.pyc | Bin 0 -> 10637 bytes .../__pycache__/low_level.cpython-37.pyc | Bin 0 -> 9008 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 | 518 + .../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-37.pyc | Bin 0 -> 187 bytes .../packages/__pycache__/six.cpython-37.pyc | Bin 0 -> 27502 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 197 bytes .../__pycache__/makefile.cpython-37.pyc | Bin 0 -> 1287 bytes .../weakref_finalize.cpython-37.pyc | Bin 0 -> 4830 bytes .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../pip/_vendor/urllib3/packages/six.py | 1076 +++ .../pip/_vendor/urllib3/poolmanager.py | 537 + .../pip/_vendor/urllib3/request.py | 191 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1096 bytes .../__pycache__/connection.cpython-37.pyc | Bin 0 -> 3402 bytes .../util/__pycache__/proxy.cpython-37.pyc | Bin 0 -> 1304 bytes .../util/__pycache__/queue.cpython-37.pyc | Bin 0 -> 1027 bytes .../util/__pycache__/request.cpython-37.pyc | Bin 0 -> 3339 bytes .../util/__pycache__/response.cpython-37.pyc | Bin 0 -> 2314 bytes .../util/__pycache__/retry.cpython-37.pyc | Bin 0 -> 16872 bytes .../util/__pycache__/ssl_.cpython-37.pyc | Bin 0 -> 11279 bytes .../ssl_match_hostname.cpython-37.pyc | Bin 0 -> 3234 bytes .../__pycache__/ssltransport.cpython-37.pyc | Bin 0 -> 7292 bytes .../util/__pycache__/timeout.cpython-37.pyc | Bin 0 -> 9090 bytes .../util/__pycache__/url.cpython-37.pyc | Bin 0 -> 10677 bytes .../util/__pycache__/wait.cpython-37.pyc | Bin 0 -> 3117 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 | 271 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + venv/Lib/site-packages/pip/_vendor/vendor.txt | 24 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 9662 bytes .../__pycache__/labels.cpython-37.pyc | Bin 0 -> 4076 bytes .../__pycache__/mklabels.cpython-37.pyc | Bin 0 -> 1898 bytes .../__pycache__/tests.cpython-37.pyc | Bin 0 -> 5039 bytes .../__pycache__/x_user_defined.cpython-37.pyc | Bin 0 -> 2651 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 + venv/Lib/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3125 ++++++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 95328 bytes .../__pycache__/py31compat.cpython-37.pyc | Bin 0 -> 658 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 187 bytes .../__pycache__/appdirs.cpython-37.pyc | Bin 0 -> 18581 bytes .../__pycache__/pyparsing.cpython-37.pyc | Bin 0 -> 200938 bytes .../_vendor/__pycache__/six.cpython-37.pyc | Bin 0 -> 24388 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-37.pyc | Bin 0 -> 723 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 561 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 1013 bytes .../__pycache__/_structures.cpython-37.pyc | Bin 0 -> 2865 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 8873 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 3878 bytes .../__pycache__/specifiers.cpython-37.pyc | Bin 0 -> 19791 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 492 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 10558 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 + .../pkg_resources/_vendor/pyparsing.py | 5696 +++++++++++ .../pkg_resources/_vendor/six.py | 868 ++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2402 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../DESCRIPTION.rst | 36 + .../setuptools-39.0.1.dist-info/INSTALLER | 1 + .../setuptools-39.0.1.dist-info/LICENSE.txt | 19 + .../setuptools-39.0.1.dist-info/METADATA | 71 + .../setuptools-39.0.1.dist-info/RECORD | 188 + .../setuptools-39.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 65 + .../setuptools-39.0.1.dist-info/metadata.json | 1 + .../setuptools-39.0.1.dist-info/top_level.txt | 3 + .../setuptools-39.0.1.dist-info/zip-safe | 1 + venv/Lib/site-packages/setuptools/__init__.py | 180 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 6279 bytes .../__pycache__/archive_util.cpython-37.pyc | Bin 0 -> 5123 bytes .../__pycache__/build_meta.cpython-37.pyc | Bin 0 -> 5903 bytes .../__pycache__/config.cpython-37.pyc | Bin 0 -> 14340 bytes .../__pycache__/dep_util.cpython-37.pyc | Bin 0 -> 849 bytes .../__pycache__/depends.cpython-37.pyc | Bin 0 -> 5258 bytes .../__pycache__/dist.cpython-37.pyc | Bin 0 -> 36741 bytes .../__pycache__/extension.cpython-37.pyc | Bin 0 -> 1969 bytes .../__pycache__/glibc.cpython-37.pyc | Bin 0 -> 1534 bytes .../__pycache__/glob.cpython-37.pyc | Bin 0 -> 3835 bytes .../__pycache__/launch.cpython-37.pyc | Bin 0 -> 848 bytes .../__pycache__/lib2to3_ex.cpython-37.pyc | Bin 0 -> 2427 bytes .../__pycache__/monkey.cpython-37.pyc | Bin 0 -> 5105 bytes .../__pycache__/msvc.cpython-37.pyc | Bin 0 -> 34437 bytes .../__pycache__/namespaces.cpython-37.pyc | Bin 0 -> 3606 bytes .../__pycache__/package_index.cpython-37.pyc | Bin 0 -> 32121 bytes .../__pycache__/pep425tags.cpython-37.pyc | Bin 0 -> 7174 bytes .../__pycache__/py27compat.cpython-37.pyc | Bin 0 -> 805 bytes .../__pycache__/py31compat.cpython-37.pyc | Bin 0 -> 1539 bytes .../__pycache__/py33compat.cpython-37.pyc | Bin 0 -> 1397 bytes .../__pycache__/py36compat.cpython-37.pyc | Bin 0 -> 2186 bytes .../__pycache__/sandbox.cpython-37.pyc | Bin 0 -> 15530 bytes .../__pycache__/site-patch.cpython-37.pyc | Bin 0 -> 1496 bytes .../__pycache__/ssl_support.cpython-37.pyc | Bin 0 -> 6785 bytes .../__pycache__/unicode_utils.cpython-37.pyc | Bin 0 -> 1163 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 322 bytes .../__pycache__/wheel.cpython-37.pyc | Bin 0 -> 5791 bytes .../windows_support.cpython-37.pyc | Bin 0 -> 1005 bytes .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 184 bytes .../__pycache__/pyparsing.cpython-37.pyc | Bin 0 -> 200935 bytes .../_vendor/__pycache__/six.cpython-37.pyc | Bin 0 -> 24385 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-37.pyc | Bin 0 -> 720 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 558 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 1010 bytes .../__pycache__/_structures.cpython-37.pyc | Bin 0 -> 2862 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 8867 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 3869 bytes .../__pycache__/specifiers.cpython-37.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 489 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 10555 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 + .../setuptools/_vendor/pyparsing.py | 5696 +++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 ++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 172 + venv/Lib/site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes venv/Lib/site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 730 bytes .../command/__pycache__/alias.cpython-37.pyc | Bin 0 -> 2398 bytes .../__pycache__/bdist_egg.cpython-37.pyc | Bin 0 -> 14192 bytes .../__pycache__/bdist_rpm.cpython-37.pyc | Bin 0 -> 1777 bytes .../__pycache__/bdist_wininst.cpython-37.pyc | Bin 0 -> 968 bytes .../__pycache__/build_clib.cpython-37.pyc | Bin 0 -> 2447 bytes .../__pycache__/build_ext.cpython-37.pyc | Bin 0 -> 10017 bytes .../__pycache__/build_py.cpython-37.pyc | Bin 0 -> 8577 bytes .../__pycache__/develop.cpython-37.pyc | Bin 0 -> 6401 bytes .../__pycache__/dist_info.cpython-37.pyc | Bin 0 -> 1373 bytes .../__pycache__/easy_install.cpython-37.pyc | Bin 0 -> 64555 bytes .../__pycache__/egg_info.cpython-37.pyc | Bin 0 -> 21049 bytes .../__pycache__/install.cpython-37.pyc | Bin 0 -> 4005 bytes .../install_egg_info.cpython-37.pyc | Bin 0 -> 2406 bytes .../__pycache__/install_lib.cpython-37.pyc | Bin 0 -> 4082 bytes .../install_scripts.cpython-37.pyc | Bin 0 -> 2285 bytes .../__pycache__/py36compat.cpython-37.pyc | Bin 0 -> 4618 bytes .../__pycache__/register.cpython-37.pyc | Bin 0 -> 594 bytes .../command/__pycache__/rotate.cpython-37.pyc | Bin 0 -> 2524 bytes .../__pycache__/saveopts.cpython-37.pyc | Bin 0 -> 919 bytes .../command/__pycache__/sdist.cpython-37.pyc | Bin 0 -> 6215 bytes .../command/__pycache__/setopt.cpython-37.pyc | Bin 0 -> 4517 bytes .../command/__pycache__/test.cpython-37.pyc | Bin 0 -> 8092 bytes .../command/__pycache__/upload.cpython-37.pyc | Bin 0 -> 1386 bytes .../__pycache__/upload_docs.cpython-37.pyc | Bin 0 -> 6128 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 + .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 331 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 216 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2334 +++++ .../setuptools/command/egg_info.py | 696 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 62 + .../setuptools/command/install_lib.py | 121 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 200 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 268 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + venv/Lib/site-packages/setuptools/config.py | 556 ++ venv/Lib/site-packages/setuptools/dep_util.py | 23 + venv/Lib/site-packages/setuptools/depends.py | 186 + venv/Lib/site-packages/setuptools/dist.py | 1070 ++ .../Lib/site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2412 bytes venv/Lib/site-packages/setuptools/glibc.py | 86 + venv/Lib/site-packages/setuptools/glob.py | 176 + venv/Lib/site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes venv/Lib/site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + venv/Lib/site-packages/setuptools/monkey.py | 197 + venv/Lib/site-packages/setuptools/msvc.py | 1302 +++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 +++ .../site-packages/setuptools/pep425tags.py | 316 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 41 + .../site-packages/setuptools/py33compat.py | 54 + .../site-packages/setuptools/py36compat.py | 82 + venv/Lib/site-packages/setuptools/sandbox.py | 491 + .../setuptools/script (dev).tmpl | 5 + venv/Lib/site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + venv/Lib/site-packages/setuptools/version.py | 6 + venv/Lib/site-packages/setuptools/wheel.py | 163 + .../setuptools/windows_support.py | 29 + venv/Lib/site-packages/sqlalchemy/__init__.py | 283 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 8952 bytes .../__pycache__/events.cpython-37.pyc | Bin 0 -> 534 bytes .../sqlalchemy/__pycache__/exc.cpython-37.pyc | Bin 0 -> 25317 bytes .../__pycache__/inspection.cpython-37.pyc | Bin 0 -> 5765 bytes .../sqlalchemy/__pycache__/log.cpython-37.pyc | Bin 0 -> 8300 bytes .../__pycache__/schema.cpython-37.pyc | Bin 0 -> 2293 bytes .../__pycache__/types.cpython-37.pyc | Bin 0 -> 2203 bytes .../sqlalchemy/connectors/__init__.py | 18 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 554 bytes .../__pycache__/aioodbc.cpython-37.pyc | Bin 0 -> 5152 bytes .../__pycache__/asyncio.cpython-37.pyc | Bin 0 -> 7693 bytes .../__pycache__/pyodbc.cpython-37.pyc | Bin 0 -> 6556 bytes .../sqlalchemy/connectors/aioodbc.py | 174 + .../sqlalchemy/connectors/asyncio.py | 213 + .../sqlalchemy/connectors/pyodbc.py | 247 + .../sqlalchemy/cyextension/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 185 bytes .../collections.cp37-win_amd64.pyd | Bin 0 -> 179712 bytes .../sqlalchemy/cyextension/collections.pyx | 409 + .../immutabledict.cp37-win_amd64.pyd | Bin 0 -> 75776 bytes .../sqlalchemy/cyextension/immutabledict.pxd | 8 + .../sqlalchemy/cyextension/immutabledict.pyx | 133 + .../cyextension/processors.cp37-win_amd64.pyd | Bin 0 -> 61440 bytes .../sqlalchemy/cyextension/processors.pyx | 68 + .../resultproxy.cp37-win_amd64.pyd | Bin 0 -> 64000 bytes .../sqlalchemy/cyextension/resultproxy.pyx | 102 + .../cyextension/util.cp37-win_amd64.pyd | Bin 0 -> 76800 bytes .../sqlalchemy/cyextension/util.pyx | 91 + .../sqlalchemy/dialects/__init__.py | 61 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1363 bytes .../__pycache__/_typing.cpython-37.pyc | Bin 0 -> 854 bytes .../sqlalchemy/dialects/_typing.py | 30 + .../sqlalchemy/dialects/mssql/__init__.py | 88 + .../mssql/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1564 bytes .../mssql/__pycache__/aioodbc.cpython-37.pyc | Bin 0 -> 2244 bytes .../mssql/__pycache__/base.cpython-37.pyc | Bin 0 -> 111618 bytes .../information_schema.cpython-37.pyc | Bin 0 -> 5731 bytes .../mssql/__pycache__/json.cpython-37.pyc | Bin 0 -> 4709 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 4463 bytes .../mssql/__pycache__/pymssql.cpython-37.pyc | Bin 0 -> 4466 bytes .../mssql/__pycache__/pyodbc.cpython-37.pyc | Bin 0 -> 26056 bytes .../sqlalchemy/dialects/mssql/aioodbc.py | 63 + .../sqlalchemy/dialects/mssql/base.py | 4055 ++++++++ .../dialects/mssql/information_schema.py | 254 + .../sqlalchemy/dialects/mssql/json.py | 129 + .../sqlalchemy/dialects/mssql/provision.py | 162 + .../sqlalchemy/dialects/mssql/pymssql.py | 126 + .../sqlalchemy/dialects/mssql/pyodbc.py | 760 ++ .../sqlalchemy/dialects/mysql/__init__.py | 104 + .../mysql/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1883 bytes .../mysql/__pycache__/aiomysql.cpython-37.pyc | Bin 0 -> 11685 bytes .../mysql/__pycache__/asyncmy.cpython-37.pyc | Bin 0 -> 11460 bytes .../mysql/__pycache__/base.cpython-37.pyc | Bin 0 -> 104112 bytes .../mysql/__pycache__/cymysql.cpython-37.pyc | Bin 0 -> 2557 bytes .../mysql/__pycache__/dml.cpython-37.pyc | Bin 0 -> 7422 bytes .../__pycache__/enumerated.cpython-37.pyc | Bin 0 -> 7907 bytes .../__pycache__/expression.cpython-37.pyc | Bin 0 -> 3948 bytes .../mysql/__pycache__/json.cpython-37.pyc | Bin 0 -> 2929 bytes .../mysql/__pycache__/mariadb.cpython-37.pyc | Bin 0 -> 1957 bytes .../mariadbconnector.cpython-37.pyc | Bin 0 -> 8346 bytes .../__pycache__/mysqlconnector.cpython-37.pyc | Bin 0 -> 8874 bytes .../mysql/__pycache__/mysqldb.cpython-37.pyc | Bin 0 -> 8682 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 2628 bytes .../mysql/__pycache__/pymysql.cpython-37.pyc | Bin 0 -> 4085 bytes .../mysql/__pycache__/pyodbc.cpython-37.pyc | Bin 0 -> 4241 bytes .../__pycache__/reflection.cpython-37.pyc | Bin 0 -> 15564 bytes .../__pycache__/reserved_words.cpython-37.pyc | Bin 0 -> 5359 bytes .../mysql/__pycache__/types.cpython-37.pyc | Bin 0 -> 27300 bytes .../sqlalchemy/dialects/mysql/aiomysql.py | 335 + .../sqlalchemy/dialects/mysql/asyncmy.py | 339 + .../sqlalchemy/dialects/mysql/base.py | 3581 +++++++ .../sqlalchemy/dialects/mysql/cymysql.py | 84 + .../sqlalchemy/dialects/mysql/dml.py | 225 + .../sqlalchemy/dialects/mysql/enumerated.py | 243 + .../sqlalchemy/dialects/mysql/expression.py | 143 + .../sqlalchemy/dialects/mysql/json.py | 81 + .../sqlalchemy/dialects/mysql/mariadb.py | 67 + .../dialects/mysql/mariadbconnector.py | 277 + .../dialects/mysql/mysqlconnector.py | 253 + .../sqlalchemy/dialects/mysql/mysqldb.py | 305 + .../sqlalchemy/dialects/mysql/provision.py | 114 + .../sqlalchemy/dialects/mysql/pymysql.py | 136 + .../sqlalchemy/dialects/mysql/pyodbc.py | 139 + .../sqlalchemy/dialects/mysql/reflection.py | 677 ++ .../dialects/mysql/reserved_words.py | 571 ++ .../sqlalchemy/dialects/mysql/types.py | 773 ++ .../sqlalchemy/dialects/oracle/__init__.py | 77 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1429 bytes .../oracle/__pycache__/base.cpython-37.pyc | Bin 0 -> 102281 bytes .../__pycache__/cx_oracle.cpython-37.pyc | Bin 0 -> 46820 bytes .../__pycache__/dictionary.cpython-37.pyc | Bin 0 -> 11136 bytes .../__pycache__/oracledb.cpython-37.pyc | Bin 0 -> 35546 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 6507 bytes .../oracle/__pycache__/types.cpython-37.pyc | Bin 0 -> 10741 bytes .../oracle/__pycache__/vector.cpython-37.pyc | Bin 0 -> 7508 bytes .../sqlalchemy/dialects/oracle/base.py | 3747 +++++++ .../sqlalchemy/dialects/oracle/cx_oracle.py | 1552 +++ .../sqlalchemy/dialects/oracle/dictionary.py | 507 + .../sqlalchemy/dialects/oracle/oracledb.py | 947 ++ .../sqlalchemy/dialects/oracle/provision.py | 220 + .../sqlalchemy/dialects/oracle/types.py | 316 + .../sqlalchemy/dialects/oracle/vector.py | 266 + .../dialects/postgresql/__init__.py | 167 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3234 bytes .../_psycopg_common.cpython-37.pyc | Bin 0 -> 5619 bytes .../__pycache__/array.cpython-37.pyc | Bin 0 -> 15681 bytes .../__pycache__/asyncpg.cpython-37.pyc | Bin 0 -> 41292 bytes .../__pycache__/base.cpython-37.pyc | Bin 0 -> 140154 bytes .../postgresql/__pycache__/dml.cpython-37.pyc | Bin 0 -> 10385 bytes .../postgresql/__pycache__/ext.cpython-37.pyc | Bin 0 -> 16962 bytes .../__pycache__/hstore.cpython-37.pyc | Bin 0 -> 12266 bytes .../__pycache__/json.cpython-37.pyc | Bin 0 -> 13004 bytes .../__pycache__/named_types.cpython-37.pyc | Bin 0 -> 18449 bytes .../__pycache__/operators.cpython-37.pyc | Bin 0 -> 1193 bytes .../__pycache__/pg8000.cpython-37.pyc | Bin 0 -> 21668 bytes .../__pycache__/pg_catalog.cpython-37.pyc | Bin 0 -> 7216 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 4705 bytes .../__pycache__/psycopg.cpython-37.pyc | Bin 0 -> 26704 bytes .../__pycache__/psycopg2.cpython-37.pyc | Bin 0 -> 30814 bytes .../__pycache__/psycopg2cffi.cpython-37.pyc | Bin 0 -> 1830 bytes .../__pycache__/ranges.cpython-37.pyc | Bin 0 -> 24808 bytes .../__pycache__/types.cpython-37.pyc | Bin 0 -> 9734 bytes .../dialects/postgresql/_psycopg_common.py | 186 + .../sqlalchemy/dialects/postgresql/array.py | 509 + .../sqlalchemy/dialects/postgresql/asyncpg.py | 1287 +++ .../sqlalchemy/dialects/postgresql/base.py | 5175 ++++++++++ .../sqlalchemy/dialects/postgresql/dml.py | 339 + .../sqlalchemy/dialects/postgresql/ext.py | 536 + .../sqlalchemy/dialects/postgresql/hstore.py | 406 + .../sqlalchemy/dialects/postgresql/json.py | 367 + .../dialects/postgresql/named_types.py | 538 ++ .../dialects/postgresql/operators.py | 129 + .../sqlalchemy/dialects/postgresql/pg8000.py | 666 ++ .../dialects/postgresql/pg_catalog.py | 312 + .../dialects/postgresql/provision.py | 175 + .../sqlalchemy/dialects/postgresql/psycopg.py | 783 ++ .../dialects/postgresql/psycopg2.py | 892 ++ .../dialects/postgresql/psycopg2cffi.py | 61 + .../sqlalchemy/dialects/postgresql/ranges.py | 1031 ++ .../sqlalchemy/dialects/postgresql/types.py | 313 + .../sqlalchemy/dialects/sqlite/__init__.py | 57 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 974 bytes .../__pycache__/aiosqlite.cpython-37.pyc | Bin 0 -> 12513 bytes .../sqlite/__pycache__/base.cpython-37.pyc | Bin 0 -> 83033 bytes .../sqlite/__pycache__/dml.cpython-37.pyc | Bin 0 -> 8750 bytes .../sqlite/__pycache__/json.cpython-37.pyc | Bin 0 -> 3260 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 4675 bytes .../__pycache__/pysqlcipher.cpython-37.pyc | Bin 0 -> 5450 bytes .../__pycache__/pysqlite.cpython-37.pyc | Bin 0 -> 25613 bytes .../sqlalchemy/dialects/sqlite/aiosqlite.py | 398 + .../sqlalchemy/dialects/sqlite/base.py | 2945 ++++++ .../sqlalchemy/dialects/sqlite/dml.py | 263 + .../sqlalchemy/dialects/sqlite/json.py | 92 + .../sqlalchemy/dialects/sqlite/provision.py | 196 + .../sqlalchemy/dialects/sqlite/pysqlcipher.py | 157 + .../sqlalchemy/dialects/sqlite/pysqlite.py | 705 ++ .../dialects/type_migration_guidelines.txt | 145 + .../sqlalchemy/engine/__init__.py | 62 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2212 bytes .../__pycache__/_py_processors.cpython-37.pyc | Bin 0 -> 3381 bytes .../engine/__pycache__/_py_row.cpython-37.pyc | Bin 0 -> 4153 bytes .../__pycache__/_py_util.cpython-37.pyc | Bin 0 -> 1576 bytes .../engine/__pycache__/base.cpython-37.pyc | Bin 0 -> 96567 bytes .../characteristics.cpython-37.pyc | Bin 0 -> 5798 bytes .../engine/__pycache__/create.cpython-37.pyc | Bin 0 -> 29185 bytes .../engine/__pycache__/cursor.cpython-37.pyc | Bin 0 -> 61514 bytes .../engine/__pycache__/default.cpython-37.pyc | Bin 0 -> 59066 bytes .../engine/__pycache__/events.cpython-37.pyc | Bin 0 -> 37188 bytes .../__pycache__/interfaces.cpython-37.pyc | Bin 0 -> 91861 bytes .../engine/__pycache__/mock.cpython-37.pyc | Bin 0 -> 4741 bytes .../__pycache__/processors.cpython-37.pyc | Bin 0 -> 1142 bytes .../__pycache__/reflection.cpython-37.pyc | Bin 0 -> 61256 bytes .../engine/__pycache__/result.cpython-37.pyc | Bin 0 -> 76258 bytes .../engine/__pycache__/row.cpython-37.pyc | Bin 0 -> 14711 bytes .../__pycache__/strategies.cpython-37.pyc | Bin 0 -> 514 bytes .../engine/__pycache__/url.cpython-37.pyc | Bin 0 -> 26706 bytes .../engine/__pycache__/util.cpython-37.pyc | Bin 0 -> 4941 bytes .../sqlalchemy/engine/_py_processors.py | 136 + .../sqlalchemy/engine/_py_row.py | 128 + .../sqlalchemy/engine/_py_util.py | 74 + .../site-packages/sqlalchemy/engine/base.py | 3370 +++++++ .../sqlalchemy/engine/characteristics.py | 155 + .../site-packages/sqlalchemy/engine/create.py | 878 ++ .../site-packages/sqlalchemy/engine/cursor.py | 2181 +++++ .../sqlalchemy/engine/default.py | 2380 +++++ .../site-packages/sqlalchemy/engine/events.py | 965 ++ .../sqlalchemy/engine/interfaces.py | 3413 +++++++ .../site-packages/sqlalchemy/engine/mock.py | 134 + .../sqlalchemy/engine/processors.py | 61 + .../sqlalchemy/engine/reflection.py | 2102 ++++ .../site-packages/sqlalchemy/engine/result.py | 2387 +++++ .../site-packages/sqlalchemy/engine/row.py | 400 + .../sqlalchemy/engine/strategies.py | 19 + .../site-packages/sqlalchemy/engine/url.py | 924 ++ .../site-packages/sqlalchemy/engine/util.py | 167 + .../sqlalchemy/event/__init__.py | 25 + .../event/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 806 bytes .../event/__pycache__/api.cpython-37.pyc | Bin 0 -> 8301 bytes .../event/__pycache__/attr.cpython-37.pyc | Bin 0 -> 23852 bytes .../event/__pycache__/base.cpython-37.pyc | Bin 0 -> 15075 bytes .../event/__pycache__/legacy.cpython-37.pyc | Bin 0 -> 6687 bytes .../event/__pycache__/registry.cpython-37.pyc | Bin 0 -> 7982 bytes .../Lib/site-packages/sqlalchemy/event/api.py | 222 + .../site-packages/sqlalchemy/event/attr.py | 655 ++ .../site-packages/sqlalchemy/event/base.py | 472 + .../site-packages/sqlalchemy/event/legacy.py | 246 + .../sqlalchemy/event/registry.py | 390 + venv/Lib/site-packages/sqlalchemy/events.py | 17 + venv/Lib/site-packages/sqlalchemy/exc.py | 832 ++ .../site-packages/sqlalchemy/ext/__init__.py | 11 + .../ext/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 272 bytes .../associationproxy.cpython-37.pyc | Bin 0 -> 63668 bytes .../ext/__pycache__/automap.cpython-37.pyc | Bin 0 -> 50589 bytes .../ext/__pycache__/baked.cpython-37.pyc | Bin 0 -> 16926 bytes .../ext/__pycache__/compiler.cpython-37.pyc | Bin 0 -> 20026 bytes .../horizontal_shard.cpython-37.pyc | Bin 0 -> 13987 bytes .../ext/__pycache__/hybrid.cpython-37.pyc | Bin 0 -> 54726 bytes .../ext/__pycache__/indexable.cpython-37.pyc | Bin 0 -> 10723 bytes .../instrumentation.cpython-37.pyc | Bin 0 -> 14684 bytes .../ext/__pycache__/mutable.cpython-37.pyc | Bin 0 -> 39098 bytes .../__pycache__/orderinglist.cpython-37.pyc | Bin 0 -> 14734 bytes .../ext/__pycache__/serializer.cpython-37.pyc | Bin 0 -> 5445 bytes .../sqlalchemy/ext/associationproxy.py | 2013 ++++ .../sqlalchemy/ext/asyncio/__init__.py | 25 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 940 bytes .../asyncio/__pycache__/base.cpython-37.pyc | Bin 0 -> 8072 bytes .../asyncio/__pycache__/engine.cpython-37.pyc | Bin 0 -> 45139 bytes .../asyncio/__pycache__/exc.cpython-37.pyc | Bin 0 -> 906 bytes .../asyncio/__pycache__/result.cpython-37.pyc | Bin 0 -> 31933 bytes .../__pycache__/scoping.cpython-37.pyc | Bin 0 -> 48367 bytes .../__pycache__/session.cpython-37.pyc | Bin 0 -> 59216 bytes .../sqlalchemy/ext/asyncio/base.py | 281 + .../sqlalchemy/ext/asyncio/engine.py | 1469 +++ .../sqlalchemy/ext/asyncio/exc.py | 21 + .../sqlalchemy/ext/asyncio/result.py | 962 ++ .../sqlalchemy/ext/asyncio/scoping.py | 1613 ++++ .../sqlalchemy/ext/asyncio/session.py | 1961 ++++ .../site-packages/sqlalchemy/ext/automap.py | 1701 ++++ .../Lib/site-packages/sqlalchemy/ext/baked.py | 570 ++ .../site-packages/sqlalchemy/ext/compiler.py | 600 ++ .../sqlalchemy/ext/declarative/__init__.py | 65 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1623 bytes .../__pycache__/extensions.cpython-37.pyc | Bin 0 -> 17025 bytes .../sqlalchemy/ext/declarative/extensions.py | 564 ++ .../sqlalchemy/ext/horizontal_shard.py | 478 + .../site-packages/sqlalchemy/ext/hybrid.py | 1533 +++ .../site-packages/sqlalchemy/ext/indexable.py | 345 + .../sqlalchemy/ext/instrumentation.py | 450 + .../site-packages/sqlalchemy/ext/mutable.py | 1095 +++ .../sqlalchemy/ext/mypy/__init__.py | 6 + .../mypy/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 182 bytes .../ext/mypy/__pycache__/apply.cpython-37.pyc | Bin 0 -> 6143 bytes .../__pycache__/decl_class.cpython-37.pyc | Bin 0 -> 8210 bytes .../ext/mypy/__pycache__/infer.cpython-37.pyc | Bin 0 -> 9127 bytes .../ext/mypy/__pycache__/names.cpython-37.pyc | Bin 0 -> 6921 bytes .../mypy/__pycache__/plugin.cpython-37.pyc | Bin 0 -> 7738 bytes .../ext/mypy/__pycache__/util.cpython-37.pyc | Bin 0 -> 9576 bytes .../sqlalchemy/ext/mypy/apply.py | 324 + .../sqlalchemy/ext/mypy/decl_class.py | 515 + .../sqlalchemy/ext/mypy/infer.py | 590 ++ .../sqlalchemy/ext/mypy/names.py | 335 + .../sqlalchemy/ext/mypy/plugin.py | 303 + .../site-packages/sqlalchemy/ext/mypy/util.py | 357 + .../sqlalchemy/ext/orderinglist.py | 427 + .../sqlalchemy/ext/serializer.py | 185 + .../sqlalchemy/future/__init__.py | 16 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 439 bytes .../future/__pycache__/engine.cpython-37.pyc | Bin 0 -> 373 bytes .../site-packages/sqlalchemy/future/engine.py | 15 + .../site-packages/sqlalchemy/inspection.py | 174 + venv/Lib/site-packages/sqlalchemy/log.py | 288 + .../site-packages/sqlalchemy/orm/__init__.py | 170 + .../orm/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 6012 bytes .../_orm_constructors.cpython-37.pyc | Bin 0 -> 96508 bytes .../orm/__pycache__/_typing.cpython-37.pyc | Bin 0 -> 5506 bytes .../orm/__pycache__/attributes.cpython-37.pyc | Bin 0 -> 67917 bytes .../orm/__pycache__/base.cpython-37.pyc | Bin 0 -> 24755 bytes .../bulk_persistence.cpython-37.pyc | Bin 0 -> 41458 bytes .../__pycache__/clsregistry.cpython-37.pyc | Bin 0 -> 16089 bytes .../__pycache__/collections.cpython-37.pyc | Bin 0 -> 47462 bytes .../orm/__pycache__/context.cpython-37.pyc | Bin 0 -> 63241 bytes .../orm/__pycache__/decl_api.cpython-37.pyc | Bin 0 -> 56523 bytes .../orm/__pycache__/decl_base.cpython-37.pyc | Bin 0 -> 44246 bytes .../orm/__pycache__/dependency.cpython-37.pyc | Bin 0 -> 23658 bytes .../descriptor_props.cpython-37.pyc | Bin 0 -> 33191 bytes .../orm/__pycache__/dynamic.cpython-37.pyc | Bin 0 -> 9219 bytes .../orm/__pycache__/evaluator.cpython-37.pyc | Bin 0 -> 12591 bytes .../orm/__pycache__/events.cpython-37.pyc | Bin 0 -> 126864 bytes .../orm/__pycache__/exc.cpython-37.pyc | Bin 0 -> 8190 bytes .../orm/__pycache__/identity.cpython-37.pyc | Bin 0 -> 9354 bytes .../instrumentation.cpython-37.pyc | Bin 0 -> 22302 bytes .../orm/__pycache__/interfaces.cpython-37.pyc | Bin 0 -> 45381 bytes .../orm/__pycache__/loading.cpython-37.pyc | Bin 0 -> 29241 bytes .../mapped_collection.cpython-37.pyc | Bin 0 -> 17981 bytes .../orm/__pycache__/mapper.cpython-37.pyc | Bin 0 -> 118132 bytes .../__pycache__/path_registry.cpython-37.pyc | Bin 0 -> 21749 bytes .../__pycache__/persistence.cpython-37.pyc | Bin 0 -> 27451 bytes .../orm/__pycache__/properties.cpython-37.pyc | Bin 0 -> 21813 bytes .../orm/__pycache__/query.cpython-37.pyc | Bin 0 -> 105126 bytes .../__pycache__/relationships.cpython-37.pyc | Bin 0 -> 85121 bytes .../orm/__pycache__/scoping.cpython-37.pyc | Bin 0 -> 75017 bytes .../orm/__pycache__/session.cpython-37.pyc | Bin 0 -> 154833 bytes .../orm/__pycache__/state.cpython-37.pyc | Bin 0 -> 32754 bytes .../__pycache__/state_changes.cpython-37.pyc | Bin 0 -> 4816 bytes .../orm/__pycache__/strategies.cpython-37.pyc | Bin 0 -> 60493 bytes .../strategy_options.cpython-37.pyc | Bin 0 -> 64306 bytes .../orm/__pycache__/sync.cpython-37.pyc | Bin 0 -> 3890 bytes .../orm/__pycache__/unitofwork.cpython-37.pyc | Bin 0 -> 21454 bytes .../orm/__pycache__/util.cpython-37.pyc | Bin 0 -> 60345 bytes .../orm/__pycache__/writeonly.cpython-37.pyc | Bin 0 -> 19155 bytes .../sqlalchemy/orm/_orm_constructors.py | 2590 +++++ .../site-packages/sqlalchemy/orm/_typing.py | 179 + .../sqlalchemy/orm/attributes.py | 2835 ++++++ venv/Lib/site-packages/sqlalchemy/orm/base.py | 973 ++ .../sqlalchemy/orm/bulk_persistence.py | 2123 ++++ .../sqlalchemy/orm/clsregistry.py | 571 ++ .../sqlalchemy/orm/collections.py | 1627 ++++ .../site-packages/sqlalchemy/orm/context.py | 3334 +++++++ .../site-packages/sqlalchemy/orm/decl_api.py | 1917 ++++ .../site-packages/sqlalchemy/orm/decl_base.py | 2186 +++++ .../sqlalchemy/orm/dependency.py | 1304 +++ .../sqlalchemy/orm/descriptor_props.py | 1077 +++ .../site-packages/sqlalchemy/orm/dynamic.py | 300 + .../site-packages/sqlalchemy/orm/evaluator.py | 379 + .../site-packages/sqlalchemy/orm/events.py | 3271 +++++++ venv/Lib/site-packages/sqlalchemy/orm/exc.py | 237 + .../site-packages/sqlalchemy/orm/identity.py | 302 + .../sqlalchemy/orm/instrumentation.py | 754 ++ .../sqlalchemy/orm/interfaces.py | 1490 +++ .../site-packages/sqlalchemy/orm/loading.py | 1682 ++++ .../sqlalchemy/orm/mapped_collection.py | 557 ++ .../site-packages/sqlalchemy/orm/mapper.py | 4431 +++++++++ .../sqlalchemy/orm/path_registry.py | 811 ++ .../sqlalchemy/orm/persistence.py | 1782 ++++ .../sqlalchemy/orm/properties.py | 884 ++ .../Lib/site-packages/sqlalchemy/orm/query.py | 3453 +++++++ .../sqlalchemy/orm/relationships.py | 3509 +++++++ .../site-packages/sqlalchemy/orm/scoping.py | 2162 +++++ .../site-packages/sqlalchemy/orm/session.py | 5294 ++++++++++ .../Lib/site-packages/sqlalchemy/orm/state.py | 1143 +++ .../sqlalchemy/orm/state_changes.py | 198 + .../sqlalchemy/orm/strategies.py | 3470 +++++++ .../sqlalchemy/orm/strategy_options.py | 2549 +++++ venv/Lib/site-packages/sqlalchemy/orm/sync.py | 164 + .../sqlalchemy/orm/unitofwork.py | 796 ++ venv/Lib/site-packages/sqlalchemy/orm/util.py | 2403 +++++ .../site-packages/sqlalchemy/orm/writeonly.py | 678 ++ .../site-packages/sqlalchemy/pool/__init__.py | 44 + .../pool/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1467 bytes .../pool/__pycache__/base.cpython-37.pyc | Bin 0 -> 40733 bytes .../pool/__pycache__/events.cpython-37.pyc | Bin 0 -> 13100 bytes .../pool/__pycache__/impl.cpython-37.pyc | Bin 0 -> 18605 bytes .../Lib/site-packages/sqlalchemy/pool/base.py | 1516 +++ .../site-packages/sqlalchemy/pool/events.py | 372 + .../Lib/site-packages/sqlalchemy/pool/impl.py | 581 ++ venv/Lib/site-packages/sqlalchemy/py.typed | 0 venv/Lib/site-packages/sqlalchemy/schema.py | 71 + .../site-packages/sqlalchemy/sql/__init__.py | 145 + .../sql/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 4246 bytes .../_dml_constructors.cpython-37.pyc | Bin 0 -> 3873 bytes .../_elements_constructors.cpython-37.pyc | Bin 0 -> 63222 bytes .../sql/__pycache__/_orm_types.cpython-37.pyc | Bin 0 -> 581 bytes .../sql/__pycache__/_py_util.cpython-37.pyc | Bin 0 -> 2425 bytes .../_selectable_constructors.cpython-37.pyc | Bin 0 -> 19945 bytes .../sql/__pycache__/_typing.cpython-37.pyc | Bin 0 -> 11631 bytes .../sql/__pycache__/annotation.cpython-37.pyc | Bin 0 -> 15300 bytes .../sql/__pycache__/base.cpython-37.pyc | Bin 0 -> 75810 bytes .../sql/__pycache__/cache_key.cpython-37.pyc | Bin 0 -> 26463 bytes .../sql/__pycache__/coercions.cpython-37.pyc | Bin 0 -> 34891 bytes .../sql/__pycache__/compiler.cpython-37.pyc | Bin 0 -> 177436 bytes .../sql/__pycache__/crud.cpython-37.pyc | Bin 0 -> 25793 bytes .../sql/__pycache__/ddl.cpython-37.pyc | Bin 0 -> 46560 bytes .../default_comparator.cpython-37.pyc | Bin 0 -> 9664 bytes .../sql/__pycache__/dml.cpython-37.pyc | Bin 0 -> 60241 bytes .../sql/__pycache__/elements.cpython-37.pyc | Bin 0 -> 159949 bytes .../sql/__pycache__/events.cpython-37.pyc | Bin 0 -> 18864 bytes .../sql/__pycache__/expression.cpython-37.pyc | Bin 0 -> 4970 bytes .../sql/__pycache__/functions.cpython-37.pyc | Bin 0 -> 64139 bytes .../sql/__pycache__/lambdas.cpython-37.pyc | Bin 0 -> 38286 bytes .../sql/__pycache__/naming.cpython-37.pyc | Bin 0 -> 5198 bytes .../sql/__pycache__/operators.cpython-37.pyc | Bin 0 -> 77531 bytes .../sql/__pycache__/roles.cpython-37.pyc | Bin 0 -> 11346 bytes .../sql/__pycache__/schema.cpython-37.pyc | Bin 0 -> 193985 bytes .../sql/__pycache__/selectable.cpython-37.pyc | Bin 0 -> 212064 bytes .../sql/__pycache__/sqltypes.cpython-37.pyc | Bin 0 -> 123288 bytes .../sql/__pycache__/traversals.cpython-37.pyc | Bin 0 -> 32503 bytes .../sql/__pycache__/type_api.cpython-37.pyc | Bin 0 -> 73039 bytes .../sql/__pycache__/util.cpython-37.pyc | Bin 0 -> 36350 bytes .../sql/__pycache__/visitors.cpython-37.pyc | Bin 0 -> 29088 bytes .../sqlalchemy/sql/_dml_constructors.py | 132 + .../sqlalchemy/sql/_elements_constructors.py | 1872 ++++ .../sqlalchemy/sql/_orm_types.py | 20 + .../site-packages/sqlalchemy/sql/_py_util.py | 75 + .../sql/_selectable_constructors.py | 715 ++ .../site-packages/sqlalchemy/sql/_typing.py | 468 + .../sqlalchemy/sql/annotation.py | 585 ++ venv/Lib/site-packages/sqlalchemy/sql/base.py | 2197 +++++ .../site-packages/sqlalchemy/sql/cache_key.py | 1057 ++ .../site-packages/sqlalchemy/sql/coercions.py | 1403 +++ .../site-packages/sqlalchemy/sql/compiler.py | 7946 +++++++++++++++ venv/Lib/site-packages/sqlalchemy/sql/crud.py | 1678 ++++ venv/Lib/site-packages/sqlalchemy/sql/ddl.py | 1442 +++ .../sqlalchemy/sql/default_comparator.py | 552 ++ venv/Lib/site-packages/sqlalchemy/sql/dml.py | 1837 ++++ .../site-packages/sqlalchemy/sql/elements.py | 5544 +++++++++++ .../site-packages/sqlalchemy/sql/events.py | 458 + .../sqlalchemy/sql/expression.py | 162 + .../site-packages/sqlalchemy/sql/functions.py | 2106 ++++ .../site-packages/sqlalchemy/sql/lambdas.py | 1440 +++ .../site-packages/sqlalchemy/sql/naming.py | 212 + .../site-packages/sqlalchemy/sql/operators.py | 2623 +++++ .../Lib/site-packages/sqlalchemy/sql/roles.py | 323 + .../site-packages/sqlalchemy/sql/schema.py | 6218 ++++++++++++ .../sqlalchemy/sql/selectable.py | 7193 ++++++++++++++ .../site-packages/sqlalchemy/sql/sqltypes.py | 3921 ++++++++ .../sqlalchemy/sql/traversals.py | 1024 ++ .../site-packages/sqlalchemy/sql/type_api.py | 2362 +++++ venv/Lib/site-packages/sqlalchemy/sql/util.py | 1487 +++ .../site-packages/sqlalchemy/sql/visitors.py | 1167 +++ .../sqlalchemy/testing/__init__.py | 96 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3170 bytes .../__pycache__/assertions.cpython-37.pyc | Bin 0 -> 28644 bytes .../__pycache__/assertsql.cpython-37.pyc | Bin 0 -> 13077 bytes .../__pycache__/asyncio.cpython-37.pyc | Bin 0 -> 3185 bytes .../testing/__pycache__/config.cpython-37.pyc | Bin 0 -> 13680 bytes .../__pycache__/engines.cpython-37.pyc | Bin 0 -> 13726 bytes .../__pycache__/entities.cpython-37.pyc | Bin 0 -> 2809 bytes .../__pycache__/exclusions.cpython-37.pyc | Bin 0 -> 14059 bytes .../__pycache__/pickleable.cpython-37.pyc | Bin 0 -> 5635 bytes .../__pycache__/profiling.cpython-37.pyc | Bin 0 -> 8081 bytes .../__pycache__/provision.cpython-37.pyc | Bin 0 -> 13434 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 73977 bytes .../testing/__pycache__/schema.cpython-37.pyc | Bin 0 -> 6489 bytes .../testing/__pycache__/util.cpython-37.pyc | Bin 0 -> 14742 bytes .../__pycache__/warnings.cpython-37.pyc | Bin 0 -> 1628 bytes .../sqlalchemy/testing/assertions.py | 989 ++ .../sqlalchemy/testing/assertsql.py | 516 + .../sqlalchemy/testing/asyncio.py | 135 + .../sqlalchemy/testing/config.py | 423 + .../sqlalchemy/testing/engines.py | 474 + .../sqlalchemy/testing/entities.py | 117 + .../sqlalchemy/testing/exclusions.py | 435 + .../sqlalchemy/testing/fixtures/__init__.py | 28 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 869 bytes .../fixtures/__pycache__/base.cpython-37.pyc | Bin 0 -> 7464 bytes .../fixtures/__pycache__/mypy.cpython-37.pyc | Bin 0 -> 7961 bytes .../fixtures/__pycache__/orm.cpython-37.pyc | Bin 0 -> 7650 bytes .../fixtures/__pycache__/sql.cpython-37.pyc | Bin 0 -> 12965 bytes .../sqlalchemy/testing/fixtures/base.py | 366 + .../sqlalchemy/testing/fixtures/mypy.py | 332 + .../sqlalchemy/testing/fixtures/orm.py | 227 + .../sqlalchemy/testing/fixtures/sql.py | 503 + .../sqlalchemy/testing/pickleable.py | 155 + .../sqlalchemy/testing/plugin/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 188 bytes .../__pycache__/bootstrap.cpython-37.pyc | Bin 0 -> 1546 bytes .../__pycache__/plugin_base.cpython-37.pyc | Bin 0 -> 18540 bytes .../__pycache__/pytestplugin.cpython-37.pyc | Bin 0 -> 20536 bytes .../sqlalchemy/testing/plugin/bootstrap.py | 51 + .../sqlalchemy/testing/plugin/plugin_base.py | 779 ++ .../sqlalchemy/testing/plugin/pytestplugin.py | 867 ++ .../sqlalchemy/testing/profiling.py | 324 + .../sqlalchemy/testing/provision.py | 502 + .../sqlalchemy/testing/requirements.py | 1893 ++++ .../sqlalchemy/testing/schema.py | 224 + .../sqlalchemy/testing/suite/__init__.py | 19 + .../suite/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 512 bytes .../suite/__pycache__/test_cte.cpython-37.pyc | Bin 0 -> 4637 bytes .../suite/__pycache__/test_ddl.cpython-37.pyc | Bin 0 -> 11476 bytes .../test_deprecations.cpython-37.pyc | Bin 0 -> 4844 bytes .../__pycache__/test_dialect.cpython-37.pyc | Bin 0 -> 19703 bytes .../__pycache__/test_insert.cpython-37.pyc | Bin 0 -> 13931 bytes .../test_reflection.cpython-37.pyc | Bin 0 -> 79494 bytes .../__pycache__/test_results.cpython-37.pyc | Bin 0 -> 13170 bytes .../__pycache__/test_rowcount.cpython-37.pyc | Bin 0 -> 5928 bytes .../__pycache__/test_select.cpython-37.pyc | Bin 0 -> 64542 bytes .../__pycache__/test_sequence.cpython-37.pyc | Bin 0 -> 8865 bytes .../__pycache__/test_types.cpython-37.pyc | Bin 0 -> 59264 bytes .../test_unicode_ddl.cpython-37.pyc | Bin 0 -> 3997 bytes .../test_update_delete.cpython-37.pyc | Bin 0 -> 3586 bytes .../sqlalchemy/testing/suite/test_cte.py | 211 + .../sqlalchemy/testing/suite/test_ddl.py | 389 + .../testing/suite/test_deprecations.py | 153 + .../sqlalchemy/testing/suite/test_dialect.py | 740 ++ .../sqlalchemy/testing/suite/test_insert.py | 630 ++ .../testing/suite/test_reflection.py | 3275 +++++++ .../sqlalchemy/testing/suite/test_results.py | 504 + .../sqlalchemy/testing/suite/test_rowcount.py | 258 + .../sqlalchemy/testing/suite/test_select.py | 2008 ++++ .../sqlalchemy/testing/suite/test_sequence.py | 317 + .../sqlalchemy/testing/suite/test_types.py | 2145 ++++ .../testing/suite/test_unicode_ddl.py | 189 + .../testing/suite/test_update_delete.py | 139 + .../site-packages/sqlalchemy/testing/util.py | 538 ++ .../sqlalchemy/testing/warnings.py | 52 + venv/Lib/site-packages/sqlalchemy/types.py | 76 + .../site-packages/sqlalchemy/util/__init__.py | 160 + .../util/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 5494 bytes .../__pycache__/_collections.cpython-37.pyc | Bin 0 -> 24325 bytes .../_concurrency_py3k.cpython-37.pyc | Bin 0 -> 8051 bytes .../util/__pycache__/_has_cy.cpython-37.pyc | Bin 0 -> 862 bytes .../_py_collections.cpython-37.pyc | Bin 0 -> 21503 bytes .../util/__pycache__/compat.cpython-37.pyc | Bin 0 -> 8362 bytes .../__pycache__/concurrency.cpython-37.pyc | Bin 0 -> 3084 bytes .../__pycache__/deprecations.cpython-37.pyc | Bin 0 -> 9486 bytes .../__pycache__/langhelpers.cpython-37.pyc | Bin 0 -> 61207 bytes .../util/__pycache__/preloaded.cpython-37.pyc | Bin 0 -> 5086 bytes .../util/__pycache__/queue.cpython-37.pyc | Bin 0 -> 10474 bytes .../__pycache__/tool_support.cpython-37.pyc | Bin 0 -> 5418 bytes .../__pycache__/topological.cpython-37.pyc | Bin 0 -> 2844 bytes .../util/__pycache__/typing.cpython-37.pyc | Bin 0 -> 19019 bytes .../sqlalchemy/util/_collections.py | 717 ++ .../sqlalchemy/util/_concurrency_py3k.py | 288 + .../site-packages/sqlalchemy/util/_has_cy.py | 40 + .../sqlalchemy/util/_py_collections.py | 541 ++ .../site-packages/sqlalchemy/util/compat.py | 303 + .../sqlalchemy/util/concurrency.py | 108 + .../sqlalchemy/util/deprecations.py | 401 + .../sqlalchemy/util/langhelpers.py | 2303 +++++ .../sqlalchemy/util/preloaded.py | 150 + .../site-packages/sqlalchemy/util/queue.py | 322 + .../sqlalchemy/util/tool_support.py | 201 + .../sqlalchemy/util/topological.py | 120 + .../site-packages/sqlalchemy/util/typing.py | 733 ++ .../INSTALLER | 1 + .../typing_extensions-4.7.1.dist-info/LICENSE | 279 + .../METADATA | 69 + .../typing_extensions-4.7.1.dist-info/RECORD | 7 + .../typing_extensions-4.7.1.dist-info/WHEEL | 4 + venv/Lib/site-packages/typing_extensions.py | 3072 ++++++ venv/Lib/site-packages/werkzeug/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 346 bytes .../__pycache__/_internal.cpython-37.pyc | Bin 0 -> 16948 bytes .../__pycache__/_reloader.cpython-37.pyc | Bin 0 -> 12217 bytes .../__pycache__/datastructures.cpython-37.pyc | Bin 0 -> 107103 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 28600 bytes .../__pycache__/formparser.cpython-37.pyc | Bin 0 -> 13026 bytes .../werkzeug/__pycache__/http.cpython-37.pyc | Bin 0 -> 36681 bytes .../werkzeug/__pycache__/local.cpython-37.pyc | Bin 0 -> 20496 bytes .../__pycache__/security.cpython-37.pyc | Bin 0 -> 4813 bytes .../__pycache__/serving.cpython-37.pyc | Bin 0 -> 28580 bytes .../werkzeug/__pycache__/test.cpython-37.pyc | Bin 0 -> 39069 bytes .../__pycache__/testapp.cpython-37.pyc | Bin 0 -> 9522 bytes .../werkzeug/__pycache__/urls.cpython-37.pyc | Bin 0 -> 32426 bytes .../__pycache__/user_agent.cpython-37.pyc | Bin 0 -> 1809 bytes .../werkzeug/__pycache__/utils.cpython-37.pyc | Bin 0 -> 21754 bytes .../werkzeug/__pycache__/wsgi.cpython-37.pyc | Bin 0 -> 32045 bytes venv/Lib/site-packages/werkzeug/_internal.py | 553 ++ venv/Lib/site-packages/werkzeug/_reloader.py | 446 + .../site-packages/werkzeug/datastructures.py | 3040 ++++++ .../site-packages/werkzeug/datastructures.pyi | 921 ++ .../site-packages/werkzeug/debug/__init__.py | 533 + .../debug/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 13976 bytes .../debug/__pycache__/console.cpython-37.pyc | Bin 0 -> 8121 bytes .../debug/__pycache__/repr.cpython-37.pyc | Bin 0 -> 8814 bytes .../debug/__pycache__/tbtools.cpython-37.pyc | Bin 0 -> 11341 bytes .../site-packages/werkzeug/debug/console.py | 222 + venv/Lib/site-packages/werkzeug/debug/repr.py | 285 + .../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 | 435 + venv/Lib/site-packages/werkzeug/exceptions.py | 884 ++ venv/Lib/site-packages/werkzeug/formparser.py | 465 + venv/Lib/site-packages/werkzeug/http.py | 1327 +++ venv/Lib/site-packages/werkzeug/local.py | 648 ++ .../werkzeug/middleware/__init__.py | 22 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 691 bytes .../__pycache__/dispatcher.cpython-37.pyc | Bin 0 -> 2732 bytes .../__pycache__/http_proxy.cpython-37.pyc | Bin 0 -> 6797 bytes .../__pycache__/lint.cpython-37.pyc | Bin 0 -> 12677 bytes .../__pycache__/profiler.cpython-37.pyc | Bin 0 -> 4901 bytes .../__pycache__/proxy_fix.cpython-37.pyc | Bin 0 -> 6135 bytes .../__pycache__/shared_data.cpython-37.pyc | Bin 0 -> 9061 bytes .../werkzeug/middleware/dispatcher.py | 78 + .../werkzeug/middleware/http_proxy.py | 230 + .../site-packages/werkzeug/middleware/lint.py | 420 + .../werkzeug/middleware/profiler.py | 139 + .../werkzeug/middleware/proxy_fix.py | 187 + .../werkzeug/middleware/shared_data.py | 280 + venv/Lib/site-packages/werkzeug/py.typed | 0 .../werkzeug/routing/__init__.py | 133 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 4621 bytes .../__pycache__/converters.cpython-37.pyc | Bin 0 -> 8559 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 5396 bytes .../routing/__pycache__/map.cpython-37.pyc | Bin 0 -> 30542 bytes .../__pycache__/matcher.cpython-37.pyc | Bin 0 -> 4613 bytes .../routing/__pycache__/rules.cpython-37.pyc | Bin 0 -> 27296 bytes .../werkzeug/routing/converters.py | 257 + .../werkzeug/routing/exceptions.py | 146 + .../Lib/site-packages/werkzeug/routing/map.py | 944 ++ .../site-packages/werkzeug/routing/matcher.py | 192 + .../site-packages/werkzeug/routing/rules.py | 904 ++ .../site-packages/werkzeug/sansio/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 179 bytes .../sansio/__pycache__/http.cpython-37.pyc | Bin 0 -> 3751 bytes .../__pycache__/multipart.cpython-37.pyc | Bin 0 -> 6846 bytes .../sansio/__pycache__/request.cpython-37.pyc | Bin 0 -> 17037 bytes .../__pycache__/response.cpython-37.pyc | Bin 0 -> 22897 bytes .../sansio/__pycache__/utils.cpython-37.pyc | Bin 0 -> 4468 bytes .../Lib/site-packages/werkzeug/sansio/http.py | 136 + .../werkzeug/sansio/multipart.py | 287 + .../site-packages/werkzeug/sansio/request.py | 547 ++ .../site-packages/werkzeug/sansio/response.py | 704 ++ .../site-packages/werkzeug/sansio/utils.py | 165 + venv/Lib/site-packages/werkzeug/security.py | 140 + venv/Lib/site-packages/werkzeug/serving.py | 1069 ++ venv/Lib/site-packages/werkzeug/test.py | 1338 +++ venv/Lib/site-packages/werkzeug/testapp.py | 241 + venv/Lib/site-packages/werkzeug/urls.py | 1067 ++ venv/Lib/site-packages/werkzeug/user_agent.py | 47 + venv/Lib/site-packages/werkzeug/utils.py | 706 ++ .../werkzeug/wrappers/__init__.py | 3 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 298 bytes .../__pycache__/request.cpython-37.pyc | Bin 0 -> 20250 bytes .../__pycache__/response.cpython-37.pyc | Bin 0 -> 29245 bytes .../werkzeug/wrappers/request.py | 634 ++ .../werkzeug/wrappers/response.py | 885 ++ venv/Lib/site-packages/werkzeug/wsgi.py | 1058 ++ .../zipp-3.15.0.dist-info/INSTALLER | 1 + .../zipp-3.15.0.dist-info/LICENSE | 19 + .../zipp-3.15.0.dist-info/METADATA | 106 + .../zipp-3.15.0.dist-info/RECORD | 10 + .../site-packages/zipp-3.15.0.dist-info/WHEEL | 5 + .../zipp-3.15.0.dist-info/top_level.txt | 1 + venv/Lib/site-packages/zipp/__init__.py | 402 + .../zipp/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 12934 bytes .../__pycache__/py310compat.cpython-37.pyc | Bin 0 -> 422 bytes venv/Lib/site-packages/zipp/py310compat.py | 12 + venv/Lib/tcl8.6/init.tcl | 819 ++ venv/Scripts/Activate.ps1 | 51 + venv/Scripts/_asyncio.pyd | Bin 0 -> 71320 bytes venv/Scripts/_bz2.pyd | Bin 0 -> 89240 bytes venv/Scripts/_contextvars.pyd | Bin 0 -> 22680 bytes venv/Scripts/_ctypes.pyd | Bin 0 -> 132760 bytes venv/Scripts/_ctypes_test.pyd | Bin 0 -> 32408 bytes venv/Scripts/_decimal.pyd | Bin 0 -> 267416 bytes venv/Scripts/_distutils_findvs.pyd | Bin 0 -> 24728 bytes venv/Scripts/_elementtree.pyd | Bin 0 -> 209560 bytes venv/Scripts/_hashlib.pyd | Bin 0 -> 39064 bytes venv/Scripts/_lzma.pyd | Bin 0 -> 257176 bytes venv/Scripts/_msi.pyd | Bin 0 -> 39576 bytes venv/Scripts/_multiprocessing.pyd | Bin 0 -> 29336 bytes venv/Scripts/_overlapped.pyd | Bin 0 -> 44184 bytes venv/Scripts/_queue.pyd | Bin 0 -> 27800 bytes venv/Scripts/_socket.pyd | Bin 0 -> 75928 bytes venv/Scripts/_sqlite3.pyd | Bin 0 -> 85144 bytes venv/Scripts/_ssl.pyd | Bin 0 -> 123544 bytes venv/Scripts/_testbuffer.pyd | Bin 0 -> 52888 bytes venv/Scripts/_testcapi.pyd | Bin 0 -> 97432 bytes venv/Scripts/_testconsole.pyd | Bin 0 -> 24216 bytes venv/Scripts/_testimportmultiple.pyd | Bin 0 -> 22680 bytes venv/Scripts/_testmultiphase.pyd | Bin 0 -> 31384 bytes venv/Scripts/_tkinter.pyd | Bin 0 -> 67224 bytes venv/Scripts/activate | 76 + venv/Scripts/activate.bat | 45 + venv/Scripts/alembic.exe | Bin 0 -> 108417 bytes venv/Scripts/deactivate.bat | 21 + venv/Scripts/easy_install-3.7.exe | Bin 0 -> 102805 bytes venv/Scripts/easy_install.exe | Bin 0 -> 102805 bytes venv/Scripts/flask.exe | Bin 0 -> 102783 bytes venv/Scripts/libcrypto-1_1-x64.dll | Bin 0 -> 2477224 bytes venv/Scripts/libssl-1_1-x64.dll | Bin 0 -> 526504 bytes venv/Scripts/mako-render.exe | Bin 0 -> 108417 bytes venv/Scripts/pip.exe | Bin 0 -> 108428 bytes venv/Scripts/pip3.10.exe | Bin 0 -> 108428 bytes venv/Scripts/pip3.7.exe | Bin 0 -> 108428 bytes venv/Scripts/pip3.exe | Bin 0 -> 108428 bytes venv/Scripts/pyexpat.pyd | Bin 0 -> 200344 bytes venv/Scripts/python.exe | Bin 0 -> 99992 bytes venv/Scripts/python3.dll | Bin 0 -> 59032 bytes venv/Scripts/python37.dll | Bin 0 -> 3771032 bytes venv/Scripts/pythonw.exe | Bin 0 -> 98456 bytes venv/Scripts/select.pyd | Bin 0 -> 26776 bytes venv/Scripts/sqlite3.dll | Bin 0 -> 1190552 bytes venv/Scripts/tcl86t.dll | Bin 0 -> 1731744 bytes venv/Scripts/tk86t.dll | Bin 0 -> 1480352 bytes venv/Scripts/unicodedata.pyd | Bin 0 -> 1073304 bytes venv/Scripts/vcruntime140.dll | Bin 0 -> 89752 bytes venv/Scripts/winsound.pyd | Bin 0 -> 28824 bytes venv/pip-selfcheck.json | 1 + venv/pyvenv.cfg | 3 + 2646 files changed, 589783 insertions(+) create mode 100644 app/__init__.py create mode 100644 app/__pycache__/__init__.cpython-37.pyc create mode 100644 app/__pycache__/config.cpython-37.pyc create mode 100644 app/__pycache__/models.cpython-37.pyc create mode 100644 app/__pycache__/routes.cpython-37.pyc create mode 100644 app/config.py create mode 100644 app/models.py create mode 100644 app/routes.py create mode 100644 app/static/css/styles.css create mode 100644 app/templates/adder.html create mode 100644 app/templates/edit.html create mode 100644 app/templates/home.html create mode 100644 instance/app.db create mode 100644 migrations/README create mode 100644 migrations/__pycache__/env.cpython-37.pyc create mode 100644 migrations/alembic.ini create mode 100644 migrations/env.py create mode 100644 migrations/script.py.mako create mode 100644 migrations/versions/289e42693ec2_initial_migration.py create mode 100644 migrations/versions/__pycache__/289e42693ec2_initial_migration.cpython-37.pyc create mode 100644 requirements.txt create mode 100644 run.py create mode 100644 venv/Include/site/python3.7/greenlet/greenlet.h create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/Flask-2.2.5.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/Mako-1.2.4.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/METADATA create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/RECORD create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/METADATA create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/RECORD create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc create mode 100644 venv/Lib/site-packages/__pycache__/typing_extensions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/alembic-1.12.1.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/alembic/__init__.py create mode 100644 venv/Lib/site-packages/alembic/__main__.py create mode 100644 venv/Lib/site-packages/alembic/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/command.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/context.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/environment.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/migration.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/__pycache__/op.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__init__.py create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__pycache__/api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__pycache__/compare.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__pycache__/render.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/__pycache__/rewriter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/autogenerate/api.py create mode 100644 venv/Lib/site-packages/alembic/autogenerate/compare.py create mode 100644 venv/Lib/site-packages/alembic/autogenerate/render.py create mode 100644 venv/Lib/site-packages/alembic/autogenerate/rewriter.py create mode 100644 venv/Lib/site-packages/alembic/command.py create mode 100644 venv/Lib/site-packages/alembic/config.py create mode 100644 venv/Lib/site-packages/alembic/context.py create mode 100644 venv/Lib/site-packages/alembic/context.pyi create mode 100644 venv/Lib/site-packages/alembic/ddl/__init__.py create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/impl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/mssql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/mysql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/oracle.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/postgresql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/__pycache__/sqlite.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/ddl/base.py create mode 100644 venv/Lib/site-packages/alembic/ddl/impl.py create mode 100644 venv/Lib/site-packages/alembic/ddl/mssql.py create mode 100644 venv/Lib/site-packages/alembic/ddl/mysql.py create mode 100644 venv/Lib/site-packages/alembic/ddl/oracle.py create mode 100644 venv/Lib/site-packages/alembic/ddl/postgresql.py create mode 100644 venv/Lib/site-packages/alembic/ddl/sqlite.py create mode 100644 venv/Lib/site-packages/alembic/environment.py create mode 100644 venv/Lib/site-packages/alembic/migration.py create mode 100644 venv/Lib/site-packages/alembic/op.py create mode 100644 venv/Lib/site-packages/alembic/op.pyi create mode 100644 venv/Lib/site-packages/alembic/operations/__init__.py create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/batch.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/ops.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/schemaobj.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/__pycache__/toimpl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/operations/base.py create mode 100644 venv/Lib/site-packages/alembic/operations/batch.py create mode 100644 venv/Lib/site-packages/alembic/operations/ops.py create mode 100644 venv/Lib/site-packages/alembic/operations/schemaobj.py create mode 100644 venv/Lib/site-packages/alembic/operations/toimpl.py create mode 100644 venv/Lib/site-packages/alembic/py.typed create mode 100644 venv/Lib/site-packages/alembic/runtime/__init__.py create mode 100644 venv/Lib/site-packages/alembic/runtime/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/runtime/__pycache__/environment.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/runtime/__pycache__/migration.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/runtime/environment.py create mode 100644 venv/Lib/site-packages/alembic/runtime/migration.py create mode 100644 venv/Lib/site-packages/alembic/script/__init__.py create mode 100644 venv/Lib/site-packages/alembic/script/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/script/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/script/__pycache__/revision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/script/__pycache__/write_hooks.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/script/base.py create mode 100644 venv/Lib/site-packages/alembic/script/revision.py create mode 100644 venv/Lib/site-packages/alembic/script/write_hooks.py create mode 100644 venv/Lib/site-packages/alembic/templates/async/README create mode 100644 venv/Lib/site-packages/alembic/templates/async/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/templates/async/alembic.ini.mako create mode 100644 venv/Lib/site-packages/alembic/templates/async/env.py create mode 100644 venv/Lib/site-packages/alembic/templates/async/script.py.mako create mode 100644 venv/Lib/site-packages/alembic/templates/generic/README create mode 100644 venv/Lib/site-packages/alembic/templates/generic/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/templates/generic/alembic.ini.mako create mode 100644 venv/Lib/site-packages/alembic/templates/generic/env.py create mode 100644 venv/Lib/site-packages/alembic/templates/generic/script.py.mako create mode 100644 venv/Lib/site-packages/alembic/templates/multidb/README create mode 100644 venv/Lib/site-packages/alembic/templates/multidb/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/templates/multidb/alembic.ini.mako create mode 100644 venv/Lib/site-packages/alembic/templates/multidb/env.py create mode 100644 venv/Lib/site-packages/alembic/templates/multidb/script.py.mako create mode 100644 venv/Lib/site-packages/alembic/testing/__init__.py create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/assertions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/fixtures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/schemacompare.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/__pycache__/warnings.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/assertions.py create mode 100644 venv/Lib/site-packages/alembic/testing/env.py create mode 100644 venv/Lib/site-packages/alembic/testing/fixtures.py create mode 100644 venv/Lib/site-packages/alembic/testing/plugin/__init__.py create mode 100644 venv/Lib/site-packages/alembic/testing/plugin/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/plugin/__pycache__/bootstrap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/plugin/bootstrap.py create mode 100644 venv/Lib/site-packages/alembic/testing/requirements.py create mode 100644 venv/Lib/site-packages/alembic/testing/schemacompare.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__init__.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/_autogen_fixtures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_comments.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_computed.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_diffs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_fks.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_identity.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_environment.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_op.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/testing/suite/_autogen_fixtures.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_autogen_comments.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_autogen_computed.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_autogen_diffs.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_autogen_fks.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_autogen_identity.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_environment.py create mode 100644 venv/Lib/site-packages/alembic/testing/suite/test_op.py create mode 100644 venv/Lib/site-packages/alembic/testing/util.py create mode 100644 venv/Lib/site-packages/alembic/testing/warnings.py create mode 100644 venv/Lib/site-packages/alembic/util/__init__.py create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/editor.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/exc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/langhelpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/messaging.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/pyfiles.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/__pycache__/sqla_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/alembic/util/compat.py create mode 100644 venv/Lib/site-packages/alembic/util/editor.py create mode 100644 venv/Lib/site-packages/alembic/util/exc.py create mode 100644 venv/Lib/site-packages/alembic/util/langhelpers.py create mode 100644 venv/Lib/site-packages/alembic/util/messaging.py create mode 100644 venv/Lib/site-packages/alembic/util/pyfiles.py create mode 100644 venv/Lib/site-packages/alembic/util/sqla_compat.py create mode 100644 venv/Lib/site-packages/click-8.1.8.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/click-8.1.8.dist-info/LICENSE.txt create mode 100644 venv/Lib/site-packages/click-8.1.8.dist-info/METADATA create mode 100644 venv/Lib/site-packages/click-8.1.8.dist-info/RECORD create mode 100644 venv/Lib/site-packages/click-8.1.8.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/click/__init__.py create mode 100644 venv/Lib/site-packages/click/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_termui_impl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_textwrap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_winconsole.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/core.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/decorators.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/formatting.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/globals.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/parser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/termui.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/testing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/click/_compat.py create mode 100644 venv/Lib/site-packages/click/_termui_impl.py create mode 100644 venv/Lib/site-packages/click/_textwrap.py create mode 100644 venv/Lib/site-packages/click/_winconsole.py create mode 100644 venv/Lib/site-packages/click/core.py create mode 100644 venv/Lib/site-packages/click/decorators.py create mode 100644 venv/Lib/site-packages/click/exceptions.py create mode 100644 venv/Lib/site-packages/click/formatting.py create mode 100644 venv/Lib/site-packages/click/globals.py create mode 100644 venv/Lib/site-packages/click/parser.py create mode 100644 venv/Lib/site-packages/click/py.typed create mode 100644 venv/Lib/site-packages/click/shell_completion.py create mode 100644 venv/Lib/site-packages/click/termui.py create mode 100644 venv/Lib/site-packages/click/testing.py create mode 100644 venv/Lib/site-packages/click/types.py create mode 100644 venv/Lib/site-packages/click/utils.py create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt create mode 100644 venv/Lib/site-packages/colorama/__init__.py create mode 100644 venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/ansi.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/ansitowin32.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/win32.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/ansi.py create mode 100644 venv/Lib/site-packages/colorama/ansitowin32.py create mode 100644 venv/Lib/site-packages/colorama/initialise.py create mode 100644 venv/Lib/site-packages/colorama/tests/__init__.py create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/ansi_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/isatty_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/winterm_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/ansi_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/ansitowin32_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/initialise_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/isatty_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/utils.py create mode 100644 venv/Lib/site-packages/colorama/tests/winterm_test.py create mode 100644 venv/Lib/site-packages/colorama/win32.py create mode 100644 venv/Lib/site-packages/colorama/winterm.py create mode 100644 venv/Lib/site-packages/easy_install.py create mode 100644 venv/Lib/site-packages/flask/__init__.py create mode 100644 venv/Lib/site-packages/flask/__main__.py create mode 100644 venv/Lib/site-packages/flask/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/app.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/blueprints.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/cli.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/ctx.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/globals.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/helpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/logging.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/scaffold.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/sessions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/signals.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/templating.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/testing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/typing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/views.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/app.py create mode 100644 venv/Lib/site-packages/flask/blueprints.py create mode 100644 venv/Lib/site-packages/flask/cli.py create mode 100644 venv/Lib/site-packages/flask/config.py create mode 100644 venv/Lib/site-packages/flask/ctx.py create mode 100644 venv/Lib/site-packages/flask/debughelpers.py create mode 100644 venv/Lib/site-packages/flask/globals.py create mode 100644 venv/Lib/site-packages/flask/helpers.py create mode 100644 venv/Lib/site-packages/flask/json/__init__.py create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/provider.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/tag.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask/json/provider.py create mode 100644 venv/Lib/site-packages/flask/json/tag.py create mode 100644 venv/Lib/site-packages/flask/logging.py create mode 100644 venv/Lib/site-packages/flask/py.typed create mode 100644 venv/Lib/site-packages/flask/scaffold.py create mode 100644 venv/Lib/site-packages/flask/sessions.py create mode 100644 venv/Lib/site-packages/flask/signals.py create mode 100644 venv/Lib/site-packages/flask/templating.py create mode 100644 venv/Lib/site-packages/flask/testing.py create mode 100644 venv/Lib/site-packages/flask/typing.py create mode 100644 venv/Lib/site-packages/flask/views.py create mode 100644 venv/Lib/site-packages/flask/wrappers.py create mode 100644 venv/Lib/site-packages/flask_migrate/__init__.py create mode 100644 venv/Lib/site-packages/flask_migrate/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/__pycache__/cli.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/cli.py create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask-multidb/README create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask-multidb/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask-multidb/alembic.ini.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask-multidb/env.py create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask-multidb/script.py.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask/README create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask/alembic.ini.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask/env.py create mode 100644 venv/Lib/site-packages/flask_migrate/templates/aioflask/script.py.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask-multidb/README create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask-multidb/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask-multidb/alembic.ini.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask-multidb/env.py create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask-multidb/script.py.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask/README create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask/__pycache__/env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask/alembic.ini.mako create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask/env.py create mode 100644 venv/Lib/site-packages/flask_migrate/templates/flask/script.py.mako create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/METADATA create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/RECORD create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/flask_sqlalchemy-3.0.5.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__init__.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/cli.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/extension.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/model.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/pagination.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/query.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/record_queries.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/session.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/table.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/__pycache__/track_modifications.cpython-37.pyc create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/cli.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/extension.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/model.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/pagination.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/py.typed create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/query.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/record_queries.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/session.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/table.py create mode 100644 venv/Lib/site-packages/flask_sqlalchemy/track_modifications.py create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/AUTHORS create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/LICENSE.PSF create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/greenlet-3.1.1.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/greenlet/CObjects.cpp create mode 100644 venv/Lib/site-packages/greenlet/PyGreenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/PyGreenlet.hpp create mode 100644 venv/Lib/site-packages/greenlet/PyGreenletUnswitchable.cpp create mode 100644 venv/Lib/site-packages/greenlet/PyModule.cpp create mode 100644 venv/Lib/site-packages/greenlet/TBrokenGreenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/TExceptionState.cpp create mode 100644 venv/Lib/site-packages/greenlet/TGreenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/TGreenlet.hpp create mode 100644 venv/Lib/site-packages/greenlet/TGreenletGlobals.cpp create mode 100644 venv/Lib/site-packages/greenlet/TMainGreenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/TPythonState.cpp create mode 100644 venv/Lib/site-packages/greenlet/TStackState.cpp create mode 100644 venv/Lib/site-packages/greenlet/TThreadState.hpp create mode 100644 venv/Lib/site-packages/greenlet/TThreadStateCreator.hpp create mode 100644 venv/Lib/site-packages/greenlet/TThreadStateDestroy.cpp create mode 100644 venv/Lib/site-packages/greenlet/TUserGreenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/__init__.py create mode 100644 venv/Lib/site-packages/greenlet/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/_greenlet.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/greenlet/greenlet.cpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet.h create mode 100644 venv/Lib/site-packages/greenlet/greenlet_allocator.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_compiler_compat.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_cpython_add_pending.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_cpython_compat.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_exceptions.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_internal.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_refs.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_slp_switch.hpp create mode 100644 venv/Lib/site-packages/greenlet/greenlet_thread_support.hpp create mode 100644 venv/Lib/site-packages/greenlet/platform/__init__.py create mode 100644 venv/Lib/site-packages/greenlet/platform/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/platform/setup_switch_x64_masm.cmd create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_aarch64_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_alpha_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_amd64_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_arm32_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_arm32_ios.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_arm64_masm.asm create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_arm64_masm.obj create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_arm64_msvc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_csky_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_loongarch64_linux.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_m68k_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_mips_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc64_aix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc64_linux.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc_aix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc_linux.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc_macosx.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_ppc_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_riscv_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_s390_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_sh_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_sparc_sun_gcc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x32_unix.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x64_masm.asm create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x64_masm.obj create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x64_msvc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x86_msvc.h create mode 100644 venv/Lib/site-packages/greenlet/platform/switch_x86_unix.h create mode 100644 venv/Lib/site-packages/greenlet/slp_platformselect.h create mode 100644 venv/Lib/site-packages/greenlet/tests/__init__.py create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_clearing_run_switches.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_cpp_exception.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_initialstub_already_started.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_slp_switch.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_switch_three_greenlets.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_switch_three_greenlets2.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/fail_switch_two_greenlets.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/leakcheck.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_contextvars.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_cpp.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_extension_interface.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_gc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_generator.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_generator_nested.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_greenlet.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_greenlet_trash.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_leaks.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_stack_saved.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_throw.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_tracing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/__pycache__/test_weakref.cpython-37.pyc create mode 100644 venv/Lib/site-packages/greenlet/tests/_test_extension.c create mode 100644 venv/Lib/site-packages/greenlet/tests/_test_extension.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/greenlet/tests/_test_extension_cpp.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/greenlet/tests/_test_extension_cpp.cpp create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_clearing_run_switches.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_cpp_exception.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_initialstub_already_started.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_slp_switch.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_switch_three_greenlets.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_switch_three_greenlets2.py create mode 100644 venv/Lib/site-packages/greenlet/tests/fail_switch_two_greenlets.py create mode 100644 venv/Lib/site-packages/greenlet/tests/leakcheck.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_contextvars.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_cpp.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_extension_interface.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_gc.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_generator.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_generator_nested.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_greenlet.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_greenlet_trash.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_leaks.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_stack_saved.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_throw.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_tracing.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_version.py create mode 100644 venv/Lib/site-packages/greenlet/tests/test_weakref.py create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/importlib_metadata-6.7.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/importlib_metadata/__init__.py create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_py39compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_metadata/_adapters.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_collections.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_compat.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_functools.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_itertools.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_meta.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_py39compat.py create mode 100644 venv/Lib/site-packages/importlib_metadata/_text.py create mode 100644 venv/Lib/site-packages/importlib_metadata/py.typed create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/importlib_resources-5.12.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/importlib_resources/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/_adapters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/_common.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/_itertools.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/_legacy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/abc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/readers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/__pycache__/simple.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/_adapters.py create mode 100644 venv/Lib/site-packages/importlib_resources/_common.py create mode 100644 venv/Lib/site-packages/importlib_resources/_compat.py create mode 100644 venv/Lib/site-packages/importlib_resources/_itertools.py create mode 100644 venv/Lib/site-packages/importlib_resources/_legacy.py create mode 100644 venv/Lib/site-packages/importlib_resources/abc.py create mode 100644 venv/Lib/site-packages/importlib_resources/py.typed create mode 100644 venv/Lib/site-packages/importlib_resources/readers.py create mode 100644 venv/Lib/site-packages/importlib_resources/simple.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/_path.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_compatibilty_files.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_contents.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_custom.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_files.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_open.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_path.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_read.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_reader.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/test_resource.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/update-zips.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/_compat.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/_path.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/binary.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/subdirectory/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/subdirectory/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/subdirectory/binary.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/utf-16.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data01/utf-8.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/one/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/one/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/one/resource1.txt create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/two/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/two/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/data02/two/resource2.txt create mode 100644 venv/Lib/site-packages/importlib_resources/tests/namespacedata01/binary.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/namespacedata01/utf-16.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/namespacedata01/utf-8.file create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_compatibilty_files.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_contents.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_custom.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_files.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_open.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_path.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_read.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_reader.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/test_resource.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/update-zips.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/util.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata01/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata01/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata01/ziptestdata.zip create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata02/__init__.py create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata02/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/importlib_resources/tests/zipdata02/ziptestdata.zip create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/itsdangerous/__init__.py create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/_json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/encoding.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/exc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/serializer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/signer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/timed.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/url_safe.cpython-37.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/_json.py create mode 100644 venv/Lib/site-packages/itsdangerous/encoding.py create mode 100644 venv/Lib/site-packages/itsdangerous/exc.py create mode 100644 venv/Lib/site-packages/itsdangerous/py.typed create mode 100644 venv/Lib/site-packages/itsdangerous/serializer.py create mode 100644 venv/Lib/site-packages/itsdangerous/signer.py create mode 100644 venv/Lib/site-packages/itsdangerous/timed.py create mode 100644 venv/Lib/site-packages/itsdangerous/url_safe.py create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/METADATA create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/RECORD create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/jinja2-3.1.6.dist-info/licenses/LICENSE.txt create mode 100644 venv/Lib/site-packages/jinja2/__init__.py create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/_identifier.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/async_utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/bccache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/compiler.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/constants.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/debug.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/defaults.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/environment.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/ext.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/filters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/idtracking.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/lexer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/loaders.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/meta.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/nativetypes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/nodes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/optimizer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/parser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/runtime.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/sandbox.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/tests.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/visitor.cpython-37.pyc create mode 100644 venv/Lib/site-packages/jinja2/_identifier.py create mode 100644 venv/Lib/site-packages/jinja2/async_utils.py create mode 100644 venv/Lib/site-packages/jinja2/bccache.py create mode 100644 venv/Lib/site-packages/jinja2/compiler.py create mode 100644 venv/Lib/site-packages/jinja2/constants.py create mode 100644 venv/Lib/site-packages/jinja2/debug.py create mode 100644 venv/Lib/site-packages/jinja2/defaults.py create mode 100644 venv/Lib/site-packages/jinja2/environment.py create mode 100644 venv/Lib/site-packages/jinja2/exceptions.py create mode 100644 venv/Lib/site-packages/jinja2/ext.py create mode 100644 venv/Lib/site-packages/jinja2/filters.py create mode 100644 venv/Lib/site-packages/jinja2/idtracking.py create mode 100644 venv/Lib/site-packages/jinja2/lexer.py create mode 100644 venv/Lib/site-packages/jinja2/loaders.py create mode 100644 venv/Lib/site-packages/jinja2/meta.py create mode 100644 venv/Lib/site-packages/jinja2/nativetypes.py create mode 100644 venv/Lib/site-packages/jinja2/nodes.py create mode 100644 venv/Lib/site-packages/jinja2/optimizer.py create mode 100644 venv/Lib/site-packages/jinja2/parser.py create mode 100644 venv/Lib/site-packages/jinja2/py.typed create mode 100644 venv/Lib/site-packages/jinja2/runtime.py create mode 100644 venv/Lib/site-packages/jinja2/sandbox.py create mode 100644 venv/Lib/site-packages/jinja2/tests.py create mode 100644 venv/Lib/site-packages/jinja2/utils.py create mode 100644 venv/Lib/site-packages/jinja2/visitor.py create mode 100644 venv/Lib/site-packages/mako/__init__.py create mode 100644 venv/Lib/site-packages/mako/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/_ast_util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/ast.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/cmd.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/codegen.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/filters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/lexer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/lookup.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/parsetree.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/pygen.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/pyparser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/runtime.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/template.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/_ast_util.py create mode 100644 venv/Lib/site-packages/mako/ast.py create mode 100644 venv/Lib/site-packages/mako/cache.py create mode 100644 venv/Lib/site-packages/mako/cmd.py create mode 100644 venv/Lib/site-packages/mako/codegen.py create mode 100644 venv/Lib/site-packages/mako/compat.py create mode 100644 venv/Lib/site-packages/mako/exceptions.py create mode 100644 venv/Lib/site-packages/mako/ext/__init__.py create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/autohandler.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/babelplugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/beaker_cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/extract.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/linguaplugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/preprocessors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/pygmentplugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/__pycache__/turbogears.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/ext/autohandler.py create mode 100644 venv/Lib/site-packages/mako/ext/babelplugin.py create mode 100644 venv/Lib/site-packages/mako/ext/beaker_cache.py create mode 100644 venv/Lib/site-packages/mako/ext/extract.py create mode 100644 venv/Lib/site-packages/mako/ext/linguaplugin.py create mode 100644 venv/Lib/site-packages/mako/ext/preprocessors.py create mode 100644 venv/Lib/site-packages/mako/ext/pygmentplugin.py create mode 100644 venv/Lib/site-packages/mako/ext/turbogears.py create mode 100644 venv/Lib/site-packages/mako/filters.py create mode 100644 venv/Lib/site-packages/mako/lexer.py create mode 100644 venv/Lib/site-packages/mako/lookup.py create mode 100644 venv/Lib/site-packages/mako/parsetree.py create mode 100644 venv/Lib/site-packages/mako/pygen.py create mode 100644 venv/Lib/site-packages/mako/pyparser.py create mode 100644 venv/Lib/site-packages/mako/runtime.py create mode 100644 venv/Lib/site-packages/mako/template.py create mode 100644 venv/Lib/site-packages/mako/testing/__init__.py create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/_config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/assertions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/exclusions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/fixtures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/__pycache__/helpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/mako/testing/_config.py create mode 100644 venv/Lib/site-packages/mako/testing/assertions.py create mode 100644 venv/Lib/site-packages/mako/testing/config.py create mode 100644 venv/Lib/site-packages/mako/testing/exclusions.py create mode 100644 venv/Lib/site-packages/mako/testing/fixtures.py create mode 100644 venv/Lib/site-packages/mako/testing/helpers.py create mode 100644 venv/Lib/site-packages/mako/util.py create mode 100644 venv/Lib/site-packages/markupsafe/__init__.py create mode 100644 venv/Lib/site-packages/markupsafe/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/markupsafe/__pycache__/_native.cpython-37.pyc create mode 100644 venv/Lib/site-packages/markupsafe/_native.py create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.c create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.pyi create mode 100644 venv/Lib/site-packages/markupsafe/py.typed create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/AUTHORS.txt create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/LICENSE.txt create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/pip-24.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/pip/__init__.py create mode 100644 venv/Lib/site-packages/pip/__main__.py create mode 100644 venv/Lib/site-packages/pip/__pip-runner__.py create mode 100644 venv/Lib/site-packages/pip/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/main.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/build_env.py create mode 100644 venv/Lib/site-packages/pip/_internal/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/base_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/command_context.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main_parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/req_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/spinners.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/completion.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/debug.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/hash.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/help.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/inspect.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/install.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/list.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/search.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/show.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/installed.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/sdist.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/collector.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/package_finder.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/sources.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_distutils.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/_json.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/candidate.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/direct_url.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/format_control.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/installation_report.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/link.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/scheme.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/search_scope.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/target_python.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/auth.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/session.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/utils.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/prepare.py create mode 100644 venv/Lib/site-packages/pip/_internal/pyproject.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/constructors.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_file.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_install.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_set.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/self_outdated_check.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/_log.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/appdirs.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compat.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/datetime.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/deprecation.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/egg_link.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/encoding.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filesystem.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filetypes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/glibc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/hashes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/logging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/misc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/models.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/packaging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/subprocess.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/unpacking.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/urls.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/git.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/subversion.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 venv/Lib/site-packages/pip/_internal/wheel_builder.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachinedict.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/enums.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/macromanprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/resultdict.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/ansi_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/initialise_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/isatty_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/winterm_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/win32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/database.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/index.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/locators.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/resources.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/distro.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/codec.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/intranges.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/package_data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/token.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__version__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/adapters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/auth.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/certs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/cookies.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/help.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/hooks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/models.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/packages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/sessions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_extension.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_fileno.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_loop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_pick.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_stack.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_timer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/align.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/box.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/cells.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/columns.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/constrain.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/containers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/control.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/emoji.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/errors.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/filesize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/json.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/layout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/logging.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/markup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/measure.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/padding.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/palette.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/panel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pretty.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/prompt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/protocol.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/region.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/repr.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/rule.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/scope.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/screen.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/segment.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/spinner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/status.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/styled.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/syntax.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/table.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/text.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/themes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/traceback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/tree.py create mode 100644 venv/Lib/site-packages/pip/_vendor/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/after.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_re.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_types.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/_api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/_macos.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/_windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/truststore/py.typed create mode 100644 venv/Lib/site-packages/pip/_vendor/typing_extensions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/vendor.txt create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 venv/Lib/site-packages/pip/py.typed create mode 100644 venv/Lib/site-packages/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/__pycache__/py31compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/six.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/py31compat.py create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/LICENSE.txt create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/metadata.json create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/setuptools-39.0.1.dist-info/zip-safe create mode 100644 venv/Lib/site-packages/setuptools/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/archive_util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/build_meta.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dep_util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/depends.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dist.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/extension.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/glibc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/glob.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/launch.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/monkey.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/msvc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/namespaces.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/package_index.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/pep425tags.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py27compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py31compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py33compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py36compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/sandbox.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/site-patch.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/ssl_support.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/unicode_utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/windows_support.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/six.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/six.py create mode 100644 venv/Lib/site-packages/setuptools/archive_util.py create mode 100644 venv/Lib/site-packages/setuptools/build_meta.py create mode 100644 venv/Lib/site-packages/setuptools/cli-32.exe create mode 100644 venv/Lib/site-packages/setuptools/cli-64.exe create mode 100644 venv/Lib/site-packages/setuptools/cli.exe create mode 100644 venv/Lib/site-packages/setuptools/command/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/alias.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_clib.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_ext.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_py.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/develop.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/dist_info.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/easy_install.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/egg_info.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_lib.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_scripts.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/py36compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/register.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/rotate.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/saveopts.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/sdist.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/setopt.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload_docs.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/alias.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_wininst.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_clib.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_ext.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_py.py create mode 100644 venv/Lib/site-packages/setuptools/command/develop.py create mode 100644 venv/Lib/site-packages/setuptools/command/dist_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/easy_install.py create mode 100644 venv/Lib/site-packages/setuptools/command/egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_lib.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv/Lib/site-packages/setuptools/command/py36compat.py create mode 100644 venv/Lib/site-packages/setuptools/command/register.py create mode 100644 venv/Lib/site-packages/setuptools/command/rotate.py create mode 100644 venv/Lib/site-packages/setuptools/command/saveopts.py create mode 100644 venv/Lib/site-packages/setuptools/command/sdist.py create mode 100644 venv/Lib/site-packages/setuptools/command/setopt.py create mode 100644 venv/Lib/site-packages/setuptools/command/test.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload_docs.py create mode 100644 venv/Lib/site-packages/setuptools/config.py create mode 100644 venv/Lib/site-packages/setuptools/dep_util.py create mode 100644 venv/Lib/site-packages/setuptools/depends.py create mode 100644 venv/Lib/site-packages/setuptools/dist.py create mode 100644 venv/Lib/site-packages/setuptools/extension.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/setuptools/glibc.py create mode 100644 venv/Lib/site-packages/setuptools/glob.py create mode 100644 venv/Lib/site-packages/setuptools/gui-32.exe create mode 100644 venv/Lib/site-packages/setuptools/gui-64.exe create mode 100644 venv/Lib/site-packages/setuptools/gui.exe create mode 100644 venv/Lib/site-packages/setuptools/launch.py create mode 100644 venv/Lib/site-packages/setuptools/lib2to3_ex.py create mode 100644 venv/Lib/site-packages/setuptools/monkey.py create mode 100644 venv/Lib/site-packages/setuptools/msvc.py create mode 100644 venv/Lib/site-packages/setuptools/namespaces.py create mode 100644 venv/Lib/site-packages/setuptools/package_index.py create mode 100644 venv/Lib/site-packages/setuptools/pep425tags.py create mode 100644 venv/Lib/site-packages/setuptools/py27compat.py create mode 100644 venv/Lib/site-packages/setuptools/py31compat.py create mode 100644 venv/Lib/site-packages/setuptools/py33compat.py create mode 100644 venv/Lib/site-packages/setuptools/py36compat.py create mode 100644 venv/Lib/site-packages/setuptools/sandbox.py create mode 100644 venv/Lib/site-packages/setuptools/script (dev).tmpl create mode 100644 venv/Lib/site-packages/setuptools/script.tmpl create mode 100644 venv/Lib/site-packages/setuptools/site-patch.py create mode 100644 venv/Lib/site-packages/setuptools/ssl_support.py create mode 100644 venv/Lib/site-packages/setuptools/unicode_utils.py create mode 100644 venv/Lib/site-packages/setuptools/version.py create mode 100644 venv/Lib/site-packages/setuptools/wheel.py create mode 100644 venv/Lib/site-packages/setuptools/windows_support.py create mode 100644 venv/Lib/site-packages/sqlalchemy/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/events.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/exc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/inspection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/log.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/schema.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/__pycache__/types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/__pycache__/aioodbc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/__pycache__/asyncio.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/__pycache__/pyodbc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/aioodbc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/asyncio.py create mode 100644 venv/Lib/site-packages/sqlalchemy/connectors/pyodbc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/collections.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/collections.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pxd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/processors.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/processors.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/util.cp37-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/util.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/__pycache__/_typing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/_typing.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/aioodbc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/information_schema.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/pymssql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/__pycache__/pyodbc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/aioodbc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/information_schema.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/json.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/pymssql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mssql/pyodbc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/aiomysql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/asyncmy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/cymysql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/dml.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/enumerated.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/expression.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/mariadb.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/mariadbconnector.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/mysqlconnector.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/mysqldb.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/pymysql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/pyodbc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/reflection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/reserved_words.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/__pycache__/types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/aiomysql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/asyncmy.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/cymysql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/dml.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/enumerated.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/expression.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/json.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/mariadb.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/mysqldb.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/pymysql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/pyodbc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/reflection.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/reserved_words.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/mysql/types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/cx_oracle.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/dictionary.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/oracledb.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/__pycache__/vector.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/cx_oracle.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/dictionary.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/oracledb.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/oracle/vector.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/_psycopg_common.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/array.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/asyncpg.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/dml.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/ext.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/hstore.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/named_types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/operators.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/pg8000.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/pg_catalog.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/psycopg.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/psycopg2.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/psycopg2cffi.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/ranges.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/__pycache__/types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/_psycopg_common.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/array.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/dml.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/ext.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/hstore.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/json.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/named_types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/operators.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/pg8000.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/pg_catalog.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/psycopg.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/psycopg2cffi.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/ranges.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/postgresql/types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/aiosqlite.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/dml.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/json.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/pysqlcipher.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/__pycache__/pysqlite.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/dml.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/json.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/pysqlcipher.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py create mode 100644 venv/Lib/site-packages/sqlalchemy/dialects/type_migration_guidelines.txt create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/_py_processors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/_py_row.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/_py_util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/characteristics.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/create.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/cursor.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/default.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/events.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/interfaces.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/mock.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/processors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/reflection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/result.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/row.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/strategies.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/url.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/_py_processors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/_py_row.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/_py_util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/characteristics.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/create.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/cursor.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/default.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/events.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/interfaces.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/mock.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/processors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/reflection.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/result.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/row.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/strategies.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/url.py create mode 100644 venv/Lib/site-packages/sqlalchemy/engine/util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/attr.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/legacy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/__pycache__/registry.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/event/api.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/attr.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/legacy.py create mode 100644 venv/Lib/site-packages/sqlalchemy/event/registry.py create mode 100644 venv/Lib/site-packages/sqlalchemy/events.py create mode 100644 venv/Lib/site-packages/sqlalchemy/exc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/associationproxy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/automap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/baked.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/compiler.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/horizontal_shard.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/hybrid.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/indexable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/instrumentation.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/mutable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/orderinglist.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/__pycache__/serializer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/associationproxy.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/engine.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/exc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/result.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/scoping.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/__pycache__/session.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/engine.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/exc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/result.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/scoping.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/asyncio/session.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/automap.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/baked.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/compiler.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/declarative/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/declarative/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/declarative/__pycache__/extensions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/declarative/extensions.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/horizontal_shard.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/hybrid.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/indexable.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/instrumentation.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mutable.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/apply.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/decl_class.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/infer.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/names.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/plugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/apply.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/decl_class.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/infer.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/names.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/plugin.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/mypy/util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/orderinglist.py create mode 100644 venv/Lib/site-packages/sqlalchemy/ext/serializer.py create mode 100644 venv/Lib/site-packages/sqlalchemy/future/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/future/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/future/__pycache__/engine.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/future/engine.py create mode 100644 venv/Lib/site-packages/sqlalchemy/inspection.py create mode 100644 venv/Lib/site-packages/sqlalchemy/log.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/_orm_constructors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/_typing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/attributes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/bulk_persistence.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/clsregistry.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/collections.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/context.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/decl_api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/decl_base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/dependency.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/descriptor_props.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/dynamic.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/evaluator.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/events.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/exc.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/identity.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/instrumentation.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/interfaces.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/loading.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/mapped_collection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/mapper.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/path_registry.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/persistence.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/properties.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/query.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/relationships.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/scoping.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/session.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/state.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/state_changes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/strategies.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/strategy_options.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/sync.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/unitofwork.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/__pycache__/writeonly.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/_orm_constructors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/_typing.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/attributes.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/bulk_persistence.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/clsregistry.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/collections.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/context.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/decl_api.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/decl_base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/dependency.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/descriptor_props.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/dynamic.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/evaluator.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/events.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/exc.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/identity.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/instrumentation.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/interfaces.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/loading.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/mapped_collection.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/mapper.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/path_registry.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/persistence.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/properties.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/query.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/relationships.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/scoping.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/session.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/state.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/state_changes.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/strategies.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/strategy_options.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/sync.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/unitofwork.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/orm/writeonly.py create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/__pycache__/events.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/__pycache__/impl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/events.py create mode 100644 venv/Lib/site-packages/sqlalchemy/pool/impl.py create mode 100644 venv/Lib/site-packages/sqlalchemy/py.typed create mode 100644 venv/Lib/site-packages/sqlalchemy/schema.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_dml_constructors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_elements_constructors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_orm_types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_py_util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_selectable_constructors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/_typing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/annotation.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/cache_key.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/coercions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/compiler.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/crud.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/ddl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/default_comparator.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/dml.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/elements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/events.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/expression.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/functions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/lambdas.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/naming.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/operators.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/roles.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/schema.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/selectable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/sqltypes.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/traversals.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/type_api.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/__pycache__/visitors.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_dml_constructors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_elements_constructors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_orm_types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_py_util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_selectable_constructors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/_typing.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/annotation.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/cache_key.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/coercions.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/compiler.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/crud.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/ddl.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/default_comparator.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/dml.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/elements.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/events.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/expression.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/functions.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/lambdas.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/naming.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/operators.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/roles.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/schema.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/selectable.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/sqltypes.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/traversals.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/type_api.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/sql/visitors.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/assertions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/assertsql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/asyncio.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/config.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/engines.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/entities.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/exclusions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/pickleable.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/profiling.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/provision.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/schema.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/util.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/__pycache__/warnings.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/assertions.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/assertsql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/asyncio.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/config.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/engines.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/entities.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/exclusions.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__pycache__/base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__pycache__/mypy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__pycache__/orm.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/__pycache__/sql.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/mypy.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/orm.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/fixtures/sql.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/pickleable.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/__pycache__/bootstrap.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/__pycache__/plugin_base.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/__pycache__/pytestplugin.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/bootstrap.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/plugin_base.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/plugin/pytestplugin.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/profiling.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/provision.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/requirements.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/schema.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_cte.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_ddl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_deprecations.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_dialect.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_insert.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_reflection.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_results.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_rowcount.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_select.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_sequence.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_types.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_unicode_ddl.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/__pycache__/test_update_delete.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_cte.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_ddl.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_deprecations.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_dialect.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_insert.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_reflection.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_results.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_rowcount.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_select.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_sequence.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_unicode_ddl.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/suite/test_update_delete.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/util.py create mode 100644 venv/Lib/site-packages/sqlalchemy/testing/warnings.py create mode 100644 venv/Lib/site-packages/sqlalchemy/types.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__init__.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/_collections.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/_concurrency_py3k.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/_has_cy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/_py_collections.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/concurrency.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/deprecations.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/langhelpers.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/preloaded.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/queue.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/tool_support.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/topological.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/__pycache__/typing.cpython-37.pyc create mode 100644 venv/Lib/site-packages/sqlalchemy/util/_collections.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/_concurrency_py3k.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/_has_cy.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/_py_collections.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/compat.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/concurrency.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/deprecations.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/langhelpers.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/preloaded.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/queue.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/tool_support.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/topological.py create mode 100644 venv/Lib/site-packages/sqlalchemy/util/typing.py create mode 100644 venv/Lib/site-packages/typing_extensions-4.7.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/typing_extensions-4.7.1.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/typing_extensions-4.7.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/typing_extensions-4.7.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/typing_extensions-4.7.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/typing_extensions.py create mode 100644 venv/Lib/site-packages/werkzeug/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/_internal.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/_reloader.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/datastructures.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/formparser.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/http.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/local.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/security.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/serving.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/test.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/testapp.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/urls.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/user_agent.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/wsgi.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/_internal.py create mode 100644 venv/Lib/site-packages/werkzeug/_reloader.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures.pyi create mode 100644 venv/Lib/site-packages/werkzeug/debug/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/console.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/repr.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/console.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/repr.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/ICON_LICENSE.md create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/console.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/less.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/more.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/style.css create mode 100644 venv/Lib/site-packages/werkzeug/debug/tbtools.py create mode 100644 venv/Lib/site-packages/werkzeug/exceptions.py create mode 100644 venv/Lib/site-packages/werkzeug/formparser.py create mode 100644 venv/Lib/site-packages/werkzeug/http.py create mode 100644 venv/Lib/site-packages/werkzeug/local.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/dispatcher.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/http_proxy.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/lint.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/profiler.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/shared_data.py create mode 100644 venv/Lib/site-packages/werkzeug/py.typed create mode 100644 venv/Lib/site-packages/werkzeug/routing/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/converters.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/map.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/matcher.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/rules.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/converters.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/exceptions.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/map.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/matcher.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/rules.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/http.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/multipart.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/request.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/utils.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/http.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/multipart.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/request.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/response.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/utils.py create mode 100644 venv/Lib/site-packages/werkzeug/security.py create mode 100644 venv/Lib/site-packages/werkzeug/serving.py create mode 100644 venv/Lib/site-packages/werkzeug/test.py create mode 100644 venv/Lib/site-packages/werkzeug/testapp.py create mode 100644 venv/Lib/site-packages/werkzeug/urls.py create mode 100644 venv/Lib/site-packages/werkzeug/user_agent.py create mode 100644 venv/Lib/site-packages/werkzeug/utils.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/request.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/response.py create mode 100644 venv/Lib/site-packages/werkzeug/wsgi.py create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/zipp-3.15.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/zipp/__init__.py create mode 100644 venv/Lib/site-packages/zipp/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/Lib/site-packages/zipp/__pycache__/py310compat.cpython-37.pyc create mode 100644 venv/Lib/site-packages/zipp/py310compat.py create mode 100644 venv/Lib/tcl8.6/init.tcl create mode 100644 venv/Scripts/Activate.ps1 create mode 100644 venv/Scripts/_asyncio.pyd create mode 100644 venv/Scripts/_bz2.pyd create mode 100644 venv/Scripts/_contextvars.pyd create mode 100644 venv/Scripts/_ctypes.pyd create mode 100644 venv/Scripts/_ctypes_test.pyd create mode 100644 venv/Scripts/_decimal.pyd create mode 100644 venv/Scripts/_distutils_findvs.pyd create mode 100644 venv/Scripts/_elementtree.pyd create mode 100644 venv/Scripts/_hashlib.pyd create mode 100644 venv/Scripts/_lzma.pyd create mode 100644 venv/Scripts/_msi.pyd create mode 100644 venv/Scripts/_multiprocessing.pyd create mode 100644 venv/Scripts/_overlapped.pyd create mode 100644 venv/Scripts/_queue.pyd create mode 100644 venv/Scripts/_socket.pyd create mode 100644 venv/Scripts/_sqlite3.pyd create mode 100644 venv/Scripts/_ssl.pyd create mode 100644 venv/Scripts/_testbuffer.pyd create mode 100644 venv/Scripts/_testcapi.pyd create mode 100644 venv/Scripts/_testconsole.pyd create mode 100644 venv/Scripts/_testimportmultiple.pyd create mode 100644 venv/Scripts/_testmultiphase.pyd create mode 100644 venv/Scripts/_tkinter.pyd create mode 100644 venv/Scripts/activate create mode 100644 venv/Scripts/activate.bat create mode 100644 venv/Scripts/alembic.exe create mode 100644 venv/Scripts/deactivate.bat create mode 100644 venv/Scripts/easy_install-3.7.exe create mode 100644 venv/Scripts/easy_install.exe create mode 100644 venv/Scripts/flask.exe create mode 100644 venv/Scripts/libcrypto-1_1-x64.dll create mode 100644 venv/Scripts/libssl-1_1-x64.dll create mode 100644 venv/Scripts/mako-render.exe create mode 100644 venv/Scripts/pip.exe create mode 100644 venv/Scripts/pip3.10.exe create mode 100644 venv/Scripts/pip3.7.exe create mode 100644 venv/Scripts/pip3.exe create mode 100644 venv/Scripts/pyexpat.pyd create mode 100644 venv/Scripts/python.exe create mode 100644 venv/Scripts/python3.dll create mode 100644 venv/Scripts/python37.dll create mode 100644 venv/Scripts/pythonw.exe create mode 100644 venv/Scripts/select.pyd create mode 100644 venv/Scripts/sqlite3.dll create mode 100644 venv/Scripts/tcl86t.dll create mode 100644 venv/Scripts/tk86t.dll create mode 100644 venv/Scripts/unicodedata.pyd create mode 100644 venv/Scripts/vcruntime140.dll create mode 100644 venv/Scripts/winsound.pyd create mode 100644 venv/pip-selfcheck.json create mode 100644 venv/pyvenv.cfg diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..5d7f5bb --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,19 @@ +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_migrate import Migrate +from app.config import Config + +db = SQLAlchemy() +migrate = Migrate() + +def create_app(): + app = Flask(__name__) + app.config.from_object(Config) + + db.init_app(app) + migrate.init_app(app, db) + + from app.routes import bp + app.register_blueprint(bp) + + return app \ No newline at end of file diff --git a/app/__pycache__/__init__.cpython-37.pyc b/app/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27ac0cc577f1f81b3c2e5002fbaef9d84f55bf1f GIT binary patch literal 634 zcmYjP!D`$v5S3)h_Ih{Q&@af4&DgQ2GY4_)EPtg;M~dRo8CnZHWiaP*4cI0=Fj+9C7rH-jab_vVGvfdl2XNJ{pKe zF(SwB8AzibInlFQU<_oR4ip&!0YSl;fyq%3Tld-A;4Nb!Wm{+^P`O5Dr56g)ppliexmG^>-yZfVyh01Umm~8H@LDKPUcejo8?h|Gp40curZV| zgH9IP5t`5iOTia3W##}XXW4w@zJs4p9C$44_okS(ZvtS66vw=?t2vz$sL5Xe_#@c0RTs5_Csx&dV;00a@iK?b@-L?qHHBGQX! z2t?3PCh`qDY7IjClU;2AA{0R;GDIppMc$%Bco+O5A{w!+FM)qfB1W7<4VlECW1PoS z&mGz$p3pV5qjhmz>#q)%-aPwkJ5JW63mRlcbIO>JtSDWjtmqozN4mh$<$ z<@-7EP;F%nxQwxDO(@1Zf$_v6b0@Tu7*FSxvt>k&@i=uCcHp^O8qrx0-oTIb`-aj` z@3dwg?@g-l(>055Z#Zv(@B<0D%Zl@H6|G1!Wd&L6Jv1HC~1y^<*ZrDlJ-8ls|!e^vs?cH z6G+PZrELQy{tK=$BO&m>dpol;^JaF>d%X@rdkMyO|M2`v!PWwF&Jb=N2^et03Z8P# zE*S`rj|`;dGw~o(3BiaZ;Vag$gnI!uV{*3^qH~6D$4Hu`99Sx}oCSywIEW{aMw|Fo z3*>K(cL9V?GL0dE)+0;X5aWQh5575Vzv76U+D?nyF4bHwUrGCOB7D@8)B8sIxNMBc zZ;T#u%#hJ35d(zVMFReV&Db+Oht z##cR3I@o50Nr%d4s#3nA6m~a;{H{{>O>QUD6Ikn!ijPk=>z&fqt{>DD F{{a#BixU6< literal 0 HcmV?d00001 diff --git a/app/__pycache__/routes.cpython-37.pyc b/app/__pycache__/routes.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18e52d4899cbc0423ce2b421e1351e80c9b28175 GIT binary patch literal 1576 zcmZ{kO^+Kj7{_go=QS_8O<#agXao{cE}NG-)FoZE#R-_!MTcW=zS1wB8q1Gf*@;LhKe7aN2w zeO|8AQcoAw?P#?Cr6*QZ%d)V_#ajKkQpUPOE0}6^WL><{<>a{51L5S)MrkMD(8;Qp zF5dFt5v@rd$3hP5V=?zIST^HZamn5=8vx&+<_m#Y1fz9&T32fC)K=wyyKsd|nt{|Y z{>O#5xju72QIcDzmpdbCPz9a0NptGLdn;i}gAk7622b(9O0eJth|45SYDTOnNpJ>177l-;7J6k2fyJ2U~f&Mo0+3hm$c^;yyxIgCF-dGX!{^}&77qzTxNZmHjX=zjivY1nM~-=L z{K@@?nR|3{L{k6TQmX>a`nH&>#X2P^4N5}yFIw}gqt{06Itpb}E*&vAS- z*hQr2&TAsb@8>T>gE3wDJj2&uud4C%O(V#|pG+pS{bb_A;nIcvweZh^$JL*+-{D4T eK1m|pB~Nj^RjHm4zJ~7D1HLOV(UbSvz2qM_c38~- literal 0 HcmV?d00001 diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..5bac072 --- /dev/null +++ b/app/config.py @@ -0,0 +1,6 @@ +import os + +class Config: + SECRET_KEY = os.environ.get("SECRET_KEY") or "you-will-never-guess" + SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL") or "sqlite:///app.db" + SQLALCHEMY_TRACK_MODIFICATIONS = False \ No newline at end of file diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..17b21a2 --- /dev/null +++ b/app/models.py @@ -0,0 +1,8 @@ +from app import db + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(64), unique=True, nullable=False) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/routes.py b/app/routes.py new file mode 100644 index 0000000..5fae0e5 --- /dev/null +++ b/app/routes.py @@ -0,0 +1,47 @@ +from flask import Blueprint, render_template,request,redirect,url_for +from app.models import User,db + +bp = Blueprint('main', __name__) + +@bp.route("/") +def home(): + users = User.query.all() + return render_template("home.html", users=users) +@bp.route("/add_user",methods=['GET', 'POST']) +def add(): + if request.method =='POST': + username=request.form.get('username') + oldUser = User.query.filter_by(username=username).first() + if oldUser is None: + newUser=User(username=username) + db.session.add(newUser) + db.session.commit() + return redirect('/') + return render_template("adder.html") + +@bp.route('/delete_user/') +def delete(id): + user = User.query.get(id) + if user: + db.session.delete(user) + db.session.commit() + return redirect("/") + +@bp.route('/edit_user/',methods=['GET', 'POST']) +def edit(id): + message="" + user=User.query.get(id) + if request.method=="POST": + newUsername=request.form.get('username') + oldUser=User.query.filter_by(username=newUsername).first() + if(oldUser is None): + user.username=newUsername + db.session.commit() + return redirect('/') + else: + message="Username Already taken" + + + + return render_template("edit.html",user=user,message=message) + diff --git a/app/static/css/styles.css b/app/static/css/styles.css new file mode 100644 index 0000000..515e598 --- /dev/null +++ b/app/static/css/styles.css @@ -0,0 +1,96 @@ +body { + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + background-color: #f9f9ff; + margin: 2em; + display: flex; + flex-direction: column; + align-items: center; +} + +h1 { + font-weight: 700; + font-size: 2.5em; + color: #2c3e50; + margin-bottom: 1em; + text-align: center; + width: 100%; +} + +a.add-user { + display: inline-block; + margin-top: 2em; + font-weight: 600; + font-size: 1.2em; + color: #4a4af0; + text-decoration: none; + padding: 0.75em 2em; + border-radius: 1em; + background-color: #e8e8ff; + transition: background-color 0.3s ease; + text-align: center; +} + +a.add-user:hover { + background-color: #c8c8ff; +} +.userContainer { + padding: 1em 2em; + margin: 1.5em 0; + background-color: #f5f5ff; + border-radius: 1em; + display: flex; + align-items: center; + gap: 2em; + flex-wrap: wrap; +} + +.userContainer li { + font-size: 2em; + list-style-type: none; + flex: 1; +} + +.userContainer a { + font-size: 1.2em; + text-decoration: none; + padding: 1em; + border-radius: 1em; + margin: 0; + display: inline-block; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.userContainer a.delete { + color: #4a4af0; + background-color: white; +} + +.userContainer a.delete:hover { + background-color: #e0e0ff; +} + +.userContainer a.edit { + color: white; + background-color: #4a4af0; +} + +.userContainer a.edit:hover { + background-color: #3838c8; +} + +a.add-user { + display: inline-block; + margin-top: 2em; + font-weight: 600; + font-size: 1.2em; + color: #4a4af0; + text-decoration: none; + padding: 0.75em 1.5em; + border-radius: 1em; + background-color: #e8e8ff; + transition: background-color 0.3s ease; +} + +a.add-user:hover { + background-color: #c8c8ff; +} diff --git a/app/templates/adder.html b/app/templates/adder.html new file mode 100644 index 0000000..4b7f614 --- /dev/null +++ b/app/templates/adder.html @@ -0,0 +1,72 @@ + + + + + Add New User + + + +

Add new User

+
+ + +
+ + diff --git a/app/templates/edit.html b/app/templates/edit.html new file mode 100644 index 0000000..97e1db7 --- /dev/null +++ b/app/templates/edit.html @@ -0,0 +1,112 @@ + + + + + + Edit Username + + + +
+

Edit Username

+
+

From

+

{{ user.username }}

+

To

+ + +
+ + {% if message %} +
{{ message }}
+ {% endif %} +
+ + diff --git a/app/templates/home.html b/app/templates/home.html new file mode 100644 index 0000000..0ab0f0d --- /dev/null +++ b/app/templates/home.html @@ -0,0 +1,25 @@ + + + + Users List + + + +

Users

+ + Add New User + + diff --git a/instance/app.db b/instance/app.db new file mode 100644 index 0000000000000000000000000000000000000000..f4dc8da7b04d7442affa5dc5803e01350808e29a GIT binary patch literal 20480 zcmeI(&u-H&90zba$<`%OYha7Q(U*xvMM!I>X%j*sln5$HMza)crzmTUl+r)Yrig2K zE8c)tfFt7y;)FP2S1W2G^#MA4BfGU7+w$+zTz*n>)@r7i;BQ9bL6Y$rxkV@?k2xoV z?8&+%>*CU6!&r3WH(hG4YwnQ;cfSPB^tl@0Wy?&vyb(nHGe6|PX~cte zvw5Fern)^$275IW-+KE4i@gyA$b6ssE zl-x}f)%CJ?I34_tpjKUtpne*hMWH97=eZr?cW*m^G4G7X%;x0SG_<0uX=z1Rwwb2tWV=H$HmfA@AKyC!?As2HKD1eFMJs8F>+(9%j3Xa(K!p$N&E^~@$t9XrfS zw(KfYH7dlC&3_abWk)V;UJ_$gyU!s2~R}h_?Ti& z7ERt*(m{)dJotGYc!zJ`y~(@$ z0^To)aB*=-FwKVtQ*l?y zN}A5cTFZQQrdRW@X8DuIHl(=W>4jRf74Y8HLNLz zTI$g*jcJF@{apYe1OecG?wI-j-$dQ;P*A*!58F#1zrI48|)qgKA4rs z8Ag)4Os-dZdj+6&J(*No^job2*TYe+5@ZBYWhRA6^hnsLO_1bqu1CpurgXxRFCTp7 z_*u!5vcgK4+;zacfi2Z+I67NNAdzL6m}<6L2)An_q)3=b9*d&rC&}%DL_NxW)5#HJ2VQKg*S_qI?sF)M?Ug(SUY*fbLDKor2D4Vbkc2Wt?NM72pQ~$k}@5 z+j@6I=QiJiCFPArv3zGv=9C9p4vt6OyawW}BVVK7?~%E$W56{0-J8>2y`NF|b+~A* zpc*b(E2uVVr~O$f^5z^Fd4(MLbARkF0(7OD zLxMGw{~tX#sj&#H>uhhdS-EZ6Y^JNBC;<~K?n#^VhgY|u_K1~3bBW2cRQ#2P8-D;{#oU2q!rux8yMKv4>X@b1mt9n5Vwpfb& z-1Z&Q;<>ce?+azZ8u8Bq>b0q?GNDv@vMD{=^Of~PU3@zzy)D|Nhqs;wpbJ`mtEe(o zs1N)9BhJ-mc>_YXd!A{Xg+|&E-CJ{QQ`)j=I;Z)Pq6jPF!!31pu?^iu)R`);g4t!1 ze8W-+26(|9F>onY?_OK&vGqf~YZ*^lt8`g)>4ipp3Qlzy16hlsHabu2g=tMD% zZHm2*Z@o(J8+2AgzgAy*_--0|1yhgee}ZWB7gB5QV%)8HQ~MW_mTZEb0~q_6 zi>tg20nTpM^vs5`P3By2vCfi_9bU16?K3X#on~eOI9U~l)OLY$W;+Ks+v6>Knib+h gi%^wdh-ury9fSdzmmfFdc89j(IE*jFZ^3ZyUnPyJF8}}l literal 0 HcmV?d00001 diff --git a/migrations/alembic.ini b/migrations/alembic.ini new file mode 100644 index 0000000..ec9d45c --- /dev/null +++ b/migrations/alembic.ini @@ -0,0 +1,50 @@ +# A generic, single database configuration. + +[alembic] +# template used to generate migration files +# file_template = %%(rev)s_%%(slug)s + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic,flask_migrate + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[logger_flask_migrate] +level = INFO +handlers = +qualname = flask_migrate + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/migrations/env.py b/migrations/env.py new file mode 100644 index 0000000..4c97092 --- /dev/null +++ b/migrations/env.py @@ -0,0 +1,113 @@ +import logging +from logging.config import fileConfig + +from flask import current_app + +from alembic import context + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +fileConfig(config.config_file_name) +logger = logging.getLogger('alembic.env') + + +def get_engine(): + try: + # this works with Flask-SQLAlchemy<3 and Alchemical + return current_app.extensions['migrate'].db.get_engine() + except (TypeError, AttributeError): + # this works with Flask-SQLAlchemy>=3 + return current_app.extensions['migrate'].db.engine + + +def get_engine_url(): + try: + return get_engine().url.render_as_string(hide_password=False).replace( + '%', '%%') + except AttributeError: + return str(get_engine().url).replace('%', '%%') + + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +config.set_main_option('sqlalchemy.url', get_engine_url()) +target_db = current_app.extensions['migrate'].db + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def get_metadata(): + if hasattr(target_db, 'metadatas'): + return target_db.metadatas[None] + return target_db.metadata + + +def run_migrations_offline(): + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, target_metadata=get_metadata(), literal_binds=True + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online(): + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + + # this callback is used to prevent an auto-migration from being generated + # when there are no changes to the schema + # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html + def process_revision_directives(context, revision, directives): + if getattr(config.cmd_opts, 'autogenerate', False): + script = directives[0] + if script.upgrade_ops.is_empty(): + directives[:] = [] + logger.info('No changes in schema detected.') + + conf_args = current_app.extensions['migrate'].configure_args + if conf_args.get("process_revision_directives") is None: + conf_args["process_revision_directives"] = process_revision_directives + + connectable = get_engine() + + with connectable.connect() as connection: + context.configure( + connection=connection, + target_metadata=get_metadata(), + **conf_args + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/migrations/script.py.mako b/migrations/script.py.mako new file mode 100644 index 0000000..2c01563 --- /dev/null +++ b/migrations/script.py.mako @@ -0,0 +1,24 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/289e42693ec2_initial_migration.py b/migrations/versions/289e42693ec2_initial_migration.py new file mode 100644 index 0000000..7a679b8 --- /dev/null +++ b/migrations/versions/289e42693ec2_initial_migration.py @@ -0,0 +1,33 @@ +"""Initial migration + +Revision ID: 289e42693ec2 +Revises: +Create Date: 2025-06-30 22:43:33.438674 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '289e42693ec2' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('user', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('username', sa.String(length=64), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('user') + # ### end Alembic commands ### diff --git a/migrations/versions/__pycache__/289e42693ec2_initial_migration.cpython-37.pyc b/migrations/versions/__pycache__/289e42693ec2_initial_migration.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b004ed9c0c6cd6064428feec91693c573c38d10a GIT binary patch literal 879 zcmZuvOHbQC5Z+xsW1ylG^;qSa0|+H)3K6PMgOE@wR26Ztth$SLn;6#Xu)Cp3&%N>= zl4JkUUVGv%R6TTT^QzRbW;`#=s z5))kMj&Nd^xv|Hb*ar@PL*_C62Z~!PU?Kb?=A5EV>-(2unVX!7c9D-2HF+tc=o7!r zHE8YQ!(qF-yT|+8!CsGN-6q2IupNyQr-ru=K|sz<_x0A!V5_&&?skX$-mur(?)P>F zZ~9Sm3p1h)wxpb%#H&xMWmV*!TA+-8^$`ez7MNi}E*wS-S-4BY9Om9QwZ{VqyRhH} zHf_8MpOGcxF9PN*@zMhn5NsEoSa+tmvLt6mFhVG2LeO);ZCJS_E%@yLw1bc@xEz~F zCsY-?d;Ih0flS8gAO*u`pp<`adnS2#gUnUP%(aAOB!%=kd z6vH%c&X+zUZcpbnm`&lBjK6@6x_(E*#~b)14zbz*-#^GZ;HZ&*21gV&ykkcYXz?uAoFjZG!Bq*dR?=nWd=>sNltUp54{dSAvRc z!i%}8Mzx{3dwzDUDwjT*=ZeZ~lEMkO&^BUx$|cijDeI-`KK~sn+%HNt6Z~xe^>uXy O7q8;bb#eVU;mTiU_~JkS literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a948e70 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +Flask +Flask-SQLAlchemy +Flask-Migrate \ No newline at end of file diff --git a/run.py b/run.py new file mode 100644 index 0000000..5668dd8 --- /dev/null +++ b/run.py @@ -0,0 +1,8 @@ +from app import create_app, db +from flask_migrate import Migrate + +app = create_app() +migrate = Migrate(app, db) + +if __name__ == "__main__": + app.run(debug=True) diff --git a/venv/Include/site/python3.7/greenlet/greenlet.h b/venv/Include/site/python3.7/greenlet/greenlet.h new file mode 100644 index 0000000..d02a16e --- /dev/null +++ b/venv/Include/site/python3.7/greenlet/greenlet.h @@ -0,0 +1,164 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */ + +/* Greenlet object interface */ + +#ifndef Py_GREENLETOBJECT_H +#define Py_GREENLETOBJECT_H + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is deprecated and undocumented. It does not change. */ +#define GREENLET_VERSION "1.0.0" + +#ifndef GREENLET_MODULE +#define implementation_ptr_t void* +#endif + +typedef struct _greenlet { + PyObject_HEAD + PyObject* weakreflist; + PyObject* dict; + implementation_ptr_t pimpl; +} PyGreenlet; + +#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type)) + + +/* C API functions */ + +/* Total number of symbols that are exported */ +#define PyGreenlet_API_pointers 12 + +#define PyGreenlet_Type_NUM 0 +#define PyExc_GreenletError_NUM 1 +#define PyExc_GreenletExit_NUM 2 + +#define PyGreenlet_New_NUM 3 +#define PyGreenlet_GetCurrent_NUM 4 +#define PyGreenlet_Throw_NUM 5 +#define PyGreenlet_Switch_NUM 6 +#define PyGreenlet_SetParent_NUM 7 + +#define PyGreenlet_MAIN_NUM 8 +#define PyGreenlet_STARTED_NUM 9 +#define PyGreenlet_ACTIVE_NUM 10 +#define PyGreenlet_GET_PARENT_NUM 11 + +#ifndef GREENLET_MODULE +/* This section is used by modules that uses the greenlet C API */ +static void** _PyGreenlet_API = NULL; + +# define PyGreenlet_Type \ + (*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM]) + +# define PyExc_GreenletError \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM]) + +# define PyExc_GreenletExit \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM]) + +/* + * PyGreenlet_New(PyObject *args) + * + * greenlet.greenlet(run, parent=None) + */ +# define PyGreenlet_New \ + (*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \ + _PyGreenlet_API[PyGreenlet_New_NUM]) + +/* + * PyGreenlet_GetCurrent(void) + * + * greenlet.getcurrent() + */ +# define PyGreenlet_GetCurrent \ + (*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM]) + +/* + * PyGreenlet_Throw( + * PyGreenlet *greenlet, + * PyObject *typ, + * PyObject *val, + * PyObject *tb) + * + * g.throw(...) + */ +# define PyGreenlet_Throw \ + (*(PyObject * (*)(PyGreenlet * self, \ + PyObject * typ, \ + PyObject * val, \ + PyObject * tb)) \ + _PyGreenlet_API[PyGreenlet_Throw_NUM]) + +/* + * PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args) + * + * g.switch(*args, **kwargs) + */ +# define PyGreenlet_Switch \ + (*(PyObject * \ + (*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \ + _PyGreenlet_API[PyGreenlet_Switch_NUM]) + +/* + * PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent) + * + * g.parent = new_parent + */ +# define PyGreenlet_SetParent \ + (*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \ + _PyGreenlet_API[PyGreenlet_SetParent_NUM]) + +/* + * PyGreenlet_GetParent(PyObject* greenlet) + * + * return greenlet.parent; + * + * This could return NULL even if there is no exception active. + * If it does not return NULL, you are responsible for decrementing the + * reference count. + */ +# define PyGreenlet_GetParent \ + (*(PyGreenlet* (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_GET_PARENT_NUM]) + +/* + * deprecated, undocumented alias. + */ +# define PyGreenlet_GET_PARENT PyGreenlet_GetParent + +# define PyGreenlet_MAIN \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_MAIN_NUM]) + +# define PyGreenlet_STARTED \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_STARTED_NUM]) + +# define PyGreenlet_ACTIVE \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_ACTIVE_NUM]) + + + + +/* Macro that imports greenlet and initializes C API */ +/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we + keep the older definition to be sure older code that might have a copy of + the header still works. */ +# define PyGreenlet_Import() \ + { \ + _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \ + } + +#endif /* GREENLET_MODULE */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GREENLETOBJECT_H */ diff --git a/venv/Lib/site-packages/Flask-2.2.5.dist-info/INSTALLER b/venv/Lib/site-packages/Flask-2.2.5.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/Flask-2.2.5.dist-info/LICENSE.rst b/venv/Lib/site-packages/Flask-2.2.5.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.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/venv/Lib/site-packages/Flask-2.2.5.dist-info/METADATA b/venv/Lib/site-packages/Flask-2.2.5.dist-info/METADATA new file mode 100644 index 0000000..2526be4 --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.dist-info/METADATA @@ -0,0 +1,123 @@ +Metadata-Version: 2.1 +Name: Flask +Version: 2.2.5 +Summary: A simple framework for building complex web applications. +Home-page: https://palletsprojects.com/p/flask +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://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: Twitter, https://twitter.com/PalletsTeam +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.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: Werkzeug (>=2.2.2) +Requires-Dist: Jinja2 (>=3.0) +Requires-Dist: itsdangerous (>=2.0) +Requires-Dist: click (>=8.0) +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/ +- Website: https://palletsprojects.com/p/flask/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets diff --git a/venv/Lib/site-packages/Flask-2.2.5.dist-info/RECORD b/venv/Lib/site-packages/Flask-2.2.5.dist-info/RECORD new file mode 100644 index 0000000..12aee96 --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.dist-info/RECORD @@ -0,0 +1,53 @@ +flask/__init__.py,sha256=GJgAILDWhW_DQljuoJ4pk9zBUy70zPPu-VZ6kLyiVI4,2890 +flask/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 +flask/app.py,sha256=ue4tEeDnr3m-eSEwz7OJ1_wafSYl3fl6eo-NLFgNNJQ,99141 +flask/blueprints.py,sha256=fenhKP_Sh5eU6qtWeHacg1GVeun4pQzK2vq8sNDd1hY,27266 +flask/cli.py,sha256=pLmnWObe_G4_ZAFQdh7kgwqPMxRXm4oUhaUSBpJMeq4,33532 +flask/config.py,sha256=Ubo_juzSYsAKqD2vD3vm6mjsPo3EOJDdSEzYq8lKTJI,12585 +flask/ctx.py,sha256=bGEQQuF2_cHqZ3ZNMeMeEG8HOLJkDlL88u2BBxCrRao,14829 +flask/debughelpers.py,sha256=_RvAL3TW5lqMJeCVWtTU6rSDJC7jnRaBL6OEkVmooyU,5511 +flask/globals.py,sha256=EX0XdX73BTWdVF0UHDSNet2ER3kI6sKveo3_o5IOs98,3187 +flask/helpers.py,sha256=XTHRgLlyxeEzR988q63-4OY8RswTscR-5exFxK10CLU,25280 +flask/logging.py,sha256=WYng0bLTRS_CJrocGcCLJpibHf1lygHE_pg-KoUIQ4w,2293 +flask/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +flask/scaffold.py,sha256=EKx-Tr5BXLzeKKvq3ZAi_2oUQVZuC4OJSJTocyDXsSo,35958 +flask/sessions.py,sha256=adWCRnJYETJcjjhlcvUgZR5S0DMqKQctS0nzkY9g9Us,15927 +flask/signals.py,sha256=H7QwDciK-dtBxinjKpexpglP0E6k0MJILiFWTItfmqU,2136 +flask/templating.py,sha256=1P4OzvSnA2fsJTYgQT3G4owVKsuOz8XddCiR6jMHGJ0,7419 +flask/testing.py,sha256=JtHRQY7mIH39SM4S51svAr8e7Xk87dqMb30Z6Dyv9TA,10706 +flask/typing.py,sha256=KgxegTF9v9WvuongeF8LooIvpZPauzGrq9ZXf3gBlYc,2969 +flask/views.py,sha256=LulttWL4owVFlgwrJi8GCNM4inC3xbs2IBlY31bdCS4,6765 +flask/wrappers.py,sha256=el3tn1LgSUV0eNGgYMjKICT5I7qGJgbpIhvci4nrwQ8,5702 +flask/json/__init__.py,sha256=TOwldHT3_kFaXHlORKi9yCWt7dbPNB0ovdHHQWlSRzY,11175 +flask/json/provider.py,sha256=jXCNypf11PN4ngQjEt6LnSdCWQ1yHIAkNLHlXQlCB-A,10674 +flask/json/tag.py,sha256=fys3HBLssWHuMAIJuTcf2K0bCtosePBKXIWASZEEjnU,8857 +Flask-2.2.5.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +Flask-2.2.5.dist-info/METADATA,sha256=rZTjr5v4M7HB-zC-w2Y0ZU96OYSGBb-Hm15jlLJhs3g,3889 +Flask-2.2.5.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92 +Flask-2.2.5.dist-info/entry_points.txt,sha256=s3MqQpduU25y4dq3ftBYD6bMVdVnbMpZP-sUNw0zw0k,41 +Flask-2.2.5.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 +Flask-2.2.5.dist-info/RECORD,, +../../Scripts/flask.exe,sha256=qGij7Kv23Lo2VCcabqGpWK2dXueIiluNyQgVpPoqVx0,102783 +Flask-2.2.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +flask/json/__pycache__/provider.cpython-37.pyc,, +flask/json/__pycache__/tag.cpython-37.pyc,, +flask/json/__pycache__/__init__.cpython-37.pyc,, +flask/__pycache__/app.cpython-37.pyc,, +flask/__pycache__/blueprints.cpython-37.pyc,, +flask/__pycache__/cli.cpython-37.pyc,, +flask/__pycache__/config.cpython-37.pyc,, +flask/__pycache__/ctx.cpython-37.pyc,, +flask/__pycache__/debughelpers.cpython-37.pyc,, +flask/__pycache__/globals.cpython-37.pyc,, +flask/__pycache__/helpers.cpython-37.pyc,, +flask/__pycache__/logging.cpython-37.pyc,, +flask/__pycache__/scaffold.cpython-37.pyc,, +flask/__pycache__/sessions.cpython-37.pyc,, +flask/__pycache__/signals.cpython-37.pyc,, +flask/__pycache__/templating.cpython-37.pyc,, +flask/__pycache__/testing.cpython-37.pyc,, +flask/__pycache__/typing.cpython-37.pyc,, +flask/__pycache__/views.cpython-37.pyc,, +flask/__pycache__/wrappers.cpython-37.pyc,, +flask/__pycache__/__init__.cpython-37.pyc,, +flask/__pycache__/__main__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/Flask-2.2.5.dist-info/WHEEL b/venv/Lib/site-packages/Flask-2.2.5.dist-info/WHEEL new file mode 100644 index 0000000..1f37c02 --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.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/venv/Lib/site-packages/Flask-2.2.5.dist-info/entry_points.txt b/venv/Lib/site-packages/Flask-2.2.5.dist-info/entry_points.txt new file mode 100644 index 0000000..137232d --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +flask = flask.cli:main diff --git a/venv/Lib/site-packages/Flask-2.2.5.dist-info/top_level.txt b/venv/Lib/site-packages/Flask-2.2.5.dist-info/top_level.txt new file mode 100644 index 0000000..7e10602 --- /dev/null +++ b/venv/Lib/site-packages/Flask-2.2.5.dist-info/top_level.txt @@ -0,0 +1 @@ +flask diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/INSTALLER b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/LICENSE b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/LICENSE new file mode 100644 index 0000000..2448fd2 --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Miguel Grinberg + +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/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/METADATA b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/METADATA new file mode 100644 index 0000000..e859def --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/METADATA @@ -0,0 +1,91 @@ +Metadata-Version: 2.2 +Name: Flask-Migrate +Version: 4.1.0 +Summary: SQLAlchemy database migrations for Flask applications using Alembic. +Author-email: Miguel Grinberg +License: MIT +Project-URL: Homepage, https://github.com/miguelgrinberg/flask-migrate +Project-URL: Bug Tracker, https://github.com/miguelgrinberg/flask-migrate/issues +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.6 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: Flask>=0.9 +Requires-Dist: Flask-SQLAlchemy>=1.0 +Requires-Dist: alembic>=1.9.0 +Provides-Extra: dev +Requires-Dist: tox; extra == "dev" +Requires-Dist: flake8; extra == "dev" +Requires-Dist: pytest; extra == "dev" +Provides-Extra: docs +Requires-Dist: sphinx; extra == "docs" + +Flask-Migrate +============= + +[![Build status](https://github.com/miguelgrinberg/flask-migrate/workflows/build/badge.svg)](https://github.com/miguelgrinberg/flask-migrate/actions) + +Flask-Migrate is an extension that handles SQLAlchemy database migrations for Flask applications using Alembic. The database operations are provided as command-line arguments under the `flask db` command. + +Installation +------------ + +Install Flask-Migrate with `pip`: + + pip install Flask-Migrate + +Example +------- + +This is an example application that handles database migrations through Flask-Migrate: + +```python +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_migrate import Migrate + +app = Flask(__name__) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' + +db = SQLAlchemy(app) +migrate = Migrate(app, db) + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(128)) +``` + +With the above application you can create the database or enable migrations if the database already exists with the following command: + + $ flask db init + +Note that the `FLASK_APP` environment variable must be set according to the Flask documentation for this command to work. This will add a `migrations` folder to your application. The contents of this folder need to be added to version control along with your other source files. + +You can then generate an initial migration: + + $ flask db migrate + +The migration script needs to be reviewed and edited, as Alembic currently does not detect every change you make to your models. In particular, Alembic is currently unable to detect indexes. Once finalized, the migration script also needs to be added to version control. + +Then you can apply the migration to the database: + + $ flask db upgrade + +Then each time the database models change repeat the `migrate` and `upgrade` commands. + +To sync the database in another system just refresh the `migrations` folder from source control and run the `upgrade` command. + +To see all the commands that are available run this command: + + $ flask db --help + +Resources +--------- + +- [Documentation](http://flask-migrate.readthedocs.io/en/latest/) +- [pypi](https://pypi.python.org/pypi/Flask-Migrate) +- [Change Log](https://github.com/miguelgrinberg/Flask-Migrate/blob/master/CHANGES.md) diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/RECORD b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/RECORD new file mode 100644 index 0000000..fcdb4d8 --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/RECORD @@ -0,0 +1,31 @@ +Flask_Migrate-4.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask_Migrate-4.1.0.dist-info/LICENSE,sha256=kfkXGlJQvKy3Y__6tAJ8ynIp1HQfeROXhL8jZU1d-DI,1082 +Flask_Migrate-4.1.0.dist-info/METADATA,sha256=jifIy8PzfDzjuCEeKLDKRJA8O56KOgLfj3s2lmzZA-8,3289 +Flask_Migrate-4.1.0.dist-info/RECORD,, +Flask_Migrate-4.1.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Flask_Migrate-4.1.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 +Flask_Migrate-4.1.0.dist-info/top_level.txt,sha256=jLoPgiMG6oR4ugNteXn3IHskVVIyIXVStZOVq-AWLdU,14 +flask_migrate/__init__.py,sha256=JMySGA55Y8Gxy3HviWu7qq5rPUNQBWc2NID2OicpDyw,10082 +flask_migrate/__pycache__/__init__.cpython-37.pyc,, +flask_migrate/__pycache__/cli.cpython-37.pyc,, +flask_migrate/cli.py,sha256=IxrxBSC82S5sPfWac8Qg83_FVsRvqTYtCG7HRyMW8RU,11097 +flask_migrate/templates/aioflask-multidb/README,sha256=Ek4cJqTaxneVjtkue--BXMlfpfp3MmJRjqoZvnSizww,43 +flask_migrate/templates/aioflask-multidb/__pycache__/env.cpython-37.pyc,, +flask_migrate/templates/aioflask-multidb/alembic.ini.mako,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857 +flask_migrate/templates/aioflask-multidb/env.py,sha256=UcjeqkAbyUjTkuQFmCFPG7QOvqhco8-uGp8QEbto0T8,6573 +flask_migrate/templates/aioflask-multidb/script.py.mako,sha256=198VPxVEN3NZ3vHcRuCxSoI4XnOYirGWt01qkbPKoJw,1246 +flask_migrate/templates/aioflask/README,sha256=KKqWGl4YC2RqdOdq-y6quTDW0b7D_UZNHuM8glM1L-c,44 +flask_migrate/templates/aioflask/__pycache__/env.cpython-37.pyc,, +flask_migrate/templates/aioflask/alembic.ini.mako,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857 +flask_migrate/templates/aioflask/env.py,sha256=m6ZtBhdpwuq89vVeLTWmNT-1NfJZqarC_hsquCdR9bw,3478 +flask_migrate/templates/aioflask/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494 +flask_migrate/templates/flask-multidb/README,sha256=AfiP5foaV2odZxXxuUuSIS6YhkIpR7CsOo2mpuxwHdc,40 +flask_migrate/templates/flask-multidb/__pycache__/env.cpython-37.pyc,, +flask_migrate/templates/flask-multidb/alembic.ini.mako,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857 +flask_migrate/templates/flask-multidb/env.py,sha256=F44iqsAxLTVBN_zD8CMUkdE7Aub4niHMmo5wl9mY4Uw,6190 +flask_migrate/templates/flask-multidb/script.py.mako,sha256=198VPxVEN3NZ3vHcRuCxSoI4XnOYirGWt01qkbPKoJw,1246 +flask_migrate/templates/flask/README,sha256=JL0NrjOrscPcKgRmQh1R3hlv1_rohDot0TvpmdM27Jk,41 +flask_migrate/templates/flask/__pycache__/env.cpython-37.pyc,, +flask_migrate/templates/flask/alembic.ini.mako,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857 +flask_migrate/templates/flask/env.py,sha256=ibK1hsdOsOBzXNU2yQoAIza7f_EFzaVSWwON_NSpNzQ,3344 +flask_migrate/templates/flask/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494 diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/REQUESTED b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/WHEEL b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/WHEEL new file mode 100644 index 0000000..505164b --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (75.8.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/top_level.txt b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/top_level.txt new file mode 100644 index 0000000..0652762 --- /dev/null +++ b/venv/Lib/site-packages/Flask_Migrate-4.1.0.dist-info/top_level.txt @@ -0,0 +1 @@ +flask_migrate diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/INSTALLER b/venv/Lib/site-packages/Mako-1.2.4.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/LICENSE b/venv/Lib/site-packages/Mako-1.2.4.dist-info/LICENSE new file mode 100644 index 0000000..be84a38 --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright 2006-2022 the Mako authors and contributors . + +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/venv/Lib/site-packages/Mako-1.2.4.dist-info/METADATA b/venv/Lib/site-packages/Mako-1.2.4.dist-info/METADATA new file mode 100644 index 0000000..33a7580 --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/METADATA @@ -0,0 +1,87 @@ +Metadata-Version: 2.1 +Name: Mako +Version: 1.2.4 +Summary: A super-fast templating language that borrows the best ideas from the existing templating languages. +Home-page: https://www.makotemplates.org/ +Author: Mike Bayer +Author-email: mike@zzzcomputing.com +License: MIT +Project-URL: Documentation, https://docs.makotemplates.org +Project-URL: Issue Tracker, https://github.com/sqlalchemy/mako +Classifier: Development Status :: 5 - Production/Stable +Classifier: License :: OSI Approved :: MIT License +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE +Requires-Dist: MarkupSafe (>=0.9.2) +Requires-Dist: importlib-metadata ; python_version < "3.8" +Provides-Extra: babel +Requires-Dist: Babel ; extra == 'babel' +Provides-Extra: lingua +Requires-Dist: lingua ; extra == 'lingua' +Provides-Extra: testing +Requires-Dist: pytest ; extra == 'testing' + +========================= +Mako Templates for Python +========================= + +Mako is a template library written in Python. It provides a familiar, non-XML +syntax which compiles into Python modules for maximum performance. Mako's +syntax and API borrows from the best ideas of many others, including Django +templates, Cheetah, Myghty, and Genshi. Conceptually, Mako is an embedded +Python (i.e. Python Server Page) language, which refines the familiar ideas +of componentized layout and inheritance to produce one of the most +straightforward and flexible models available, while also maintaining close +ties to Python calling and scoping semantics. + +Nutshell +======== + +:: + + <%inherit file="base.html"/> + <% + rows = [[v for v in range(0,10)] for row in range(0,10)] + %> + + % for row in rows: + ${makerow(row)} + % endfor +
+ + <%def name="makerow(row)"> + + % for name in row: + ${name}\ + % endfor + + + +Philosophy +=========== + +Python is a great scripting language. Don't reinvent the wheel...your templates can handle it ! + +Documentation +============== + +See documentation for Mako at https://docs.makotemplates.org/en/latest/ + +License +======== + +Mako is licensed under an MIT-style license (see LICENSE). +Other incorporated projects may be licensed under different licenses. +All licenses allow for non-commercial and commercial use. diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/RECORD b/venv/Lib/site-packages/Mako-1.2.4.dist-info/RECORD new file mode 100644 index 0000000..41845af --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/RECORD @@ -0,0 +1,74 @@ +../../Scripts/mako-render.exe,sha256=hvjiILflMgFkhHX-uZ2KIdyfl7G5uUMZiErfi9nrvRE,108417 +Mako-1.2.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Mako-1.2.4.dist-info/LICENSE,sha256=dg8is-nqSlDrmSAb2N0RiGnygQjPtkzM5tGzBc-a6fo,1098 +Mako-1.2.4.dist-info/METADATA,sha256=MlPkZcQ5bASEMtzkRaH8aRSQE6gmLH3KTnASUawz6eA,2909 +Mako-1.2.4.dist-info/RECORD,, +Mako-1.2.4.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 +Mako-1.2.4.dist-info/entry_points.txt,sha256=LsKkUsOsJQYbJ2M72hZCm968wi5K8Ywb5uFxCuN8Obk,512 +Mako-1.2.4.dist-info/top_level.txt,sha256=LItdH8cDPetpUu8rUyBG3DObS6h9Gcpr9j_WLj2S-R0,5 +mako/__init__.py,sha256=R1cQoVGhYA-fl43kNSPKm6kzdJOs28e8sq8WYMHctMQ,242 +mako/__pycache__/__init__.cpython-37.pyc,, +mako/__pycache__/_ast_util.cpython-37.pyc,, +mako/__pycache__/ast.cpython-37.pyc,, +mako/__pycache__/cache.cpython-37.pyc,, +mako/__pycache__/cmd.cpython-37.pyc,, +mako/__pycache__/codegen.cpython-37.pyc,, +mako/__pycache__/compat.cpython-37.pyc,, +mako/__pycache__/exceptions.cpython-37.pyc,, +mako/__pycache__/filters.cpython-37.pyc,, +mako/__pycache__/lexer.cpython-37.pyc,, +mako/__pycache__/lookup.cpython-37.pyc,, +mako/__pycache__/parsetree.cpython-37.pyc,, +mako/__pycache__/pygen.cpython-37.pyc,, +mako/__pycache__/pyparser.cpython-37.pyc,, +mako/__pycache__/runtime.cpython-37.pyc,, +mako/__pycache__/template.cpython-37.pyc,, +mako/__pycache__/util.cpython-37.pyc,, +mako/_ast_util.py,sha256=BcwJLuE4E-aiFXi_fanO378Cn3Ou03bJxc6Incjse4Y,20247 +mako/ast.py,sha256=h07xBpz2l19RSwpejrhkhgB4r5efpwGmsYOy_L8xvUc,6642 +mako/cache.py,sha256=jkspun9tLgu0IVKSmo_fkL_DAbSTl2P5a5zkMBkjZvk,7680 +mako/cmd.py,sha256=vQg9ip89KMsuZEGamCRAPg7UyDNlpMmnG3XHDNLHS5o,2814 +mako/codegen.py,sha256=h1z8DGLkB92nbUz2OZGVmUKqPr9kVNbnNL8KnLizYAk,47309 +mako/compat.py,sha256=Sa3Rzrjl44xo25nXUHbhfIrEoMgceq5-Ohl0FO6cCHk,1913 +mako/exceptions.py,sha256=xQZKYdb-4d8rcrNFsFzjGSEuNG4upFqGNPErtSCDqfI,12530 +mako/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +mako/ext/__pycache__/__init__.cpython-37.pyc,, +mako/ext/__pycache__/autohandler.cpython-37.pyc,, +mako/ext/__pycache__/babelplugin.cpython-37.pyc,, +mako/ext/__pycache__/beaker_cache.cpython-37.pyc,, +mako/ext/__pycache__/extract.cpython-37.pyc,, +mako/ext/__pycache__/linguaplugin.cpython-37.pyc,, +mako/ext/__pycache__/preprocessors.cpython-37.pyc,, +mako/ext/__pycache__/pygmentplugin.cpython-37.pyc,, +mako/ext/__pycache__/turbogears.cpython-37.pyc,, +mako/ext/autohandler.py,sha256=-hNv4VHbQplLGDt5e4mFsBC-QpfWMjKokOe0axDP308,1885 +mako/ext/babelplugin.py,sha256=s6ZIAh1hUhsJIiF3j4soVHrFN_1cRJ_e3sEbz7ein7k,2091 +mako/ext/beaker_cache.py,sha256=D6gh_ke7QOKiSJtq9v67RvmqCRMDJx-IwTcd-NDjKvk,2578 +mako/ext/extract.py,sha256=EhXglj2eW5u80T3xWWB7jMgL8oNDfAQaD5E5IRiL9N0,4659 +mako/ext/linguaplugin.py,sha256=iLip2gZ0ya5pooHrxwZrP8VFQfJidXmgPZ5h1j30Kow,1935 +mako/ext/preprocessors.py,sha256=pEUbmfSO2zb4DuCt_-_oYnWypWiXs4MnJHxjTMiks5A,576 +mako/ext/pygmentplugin.py,sha256=GuOd93TjetzpTfW5oUEtuPS7jKDHgJIH3Faiaq76S0c,4753 +mako/ext/turbogears.py,sha256=mxFDF59NFK6cm__3qwGjZ1VAW0qdjJWNj23l6dcwqEg,2141 +mako/filters.py,sha256=rlHJ2L5RFr5Gf-MyOJKZI7TSJpM5oBXH58niJWCp2-4,4658 +mako/lexer.py,sha256=GOHNLeSlTIEa_yV8W5Qr27SjaPlJcO0Kij7Z2rpUkCA,15982 +mako/lookup.py,sha256=_2VPSA2CgCiT0Vd9GnSIjyY5wlpXiB2C5luXJP7gym8,12429 +mako/parsetree.py,sha256=pXbZP0orsT3iBIgWa9yD1TEfvytsCaXu2Ttws8RTMGM,19007 +mako/pygen.py,sha256=K-l_hsvXfWdMTunfHyVxvA5EG4Uzr4Qaw6IUc3hw8zI,10416 +mako/pyparser.py,sha256=diSXgo-ZwdZxbRsNZ1DmARQKVnlOFc6Qgx9Dc3wZB_U,7032 +mako/runtime.py,sha256=MwO5T1rGy0yLeJiFh2hh5cO_kfd5_9fJq_vfBzLFe_0,27806 +mako/template.py,sha256=gEhMPjKZ1Q_sYWWg6PLnRX-KBeTF0kBnyRZimlmgQks,23858 +mako/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +mako/testing/__pycache__/__init__.cpython-37.pyc,, +mako/testing/__pycache__/_config.cpython-37.pyc,, +mako/testing/__pycache__/assertions.cpython-37.pyc,, +mako/testing/__pycache__/config.cpython-37.pyc,, +mako/testing/__pycache__/exclusions.cpython-37.pyc,, +mako/testing/__pycache__/fixtures.cpython-37.pyc,, +mako/testing/__pycache__/helpers.cpython-37.pyc,, +mako/testing/_config.py,sha256=k-qpnsnbXUoN-ykMN5BRpg84i1x0p6UsAddKQnrIytU,3566 +mako/testing/assertions.py,sha256=XnYDPSnDFiEX9eO95OZ5LndZrUpJ6_xGofe6qDzJxqU,5162 +mako/testing/config.py,sha256=wmYVZfzGvOK3mJUZpzmgO8-iIgvaCH41Woi4yDpxq6E,323 +mako/testing/exclusions.py,sha256=_t6ADKdatk3f18tOfHV_ZY6u_ZwQsKphZ2MXJVSAOcI,1553 +mako/testing/fixtures.py,sha256=nEp7wTusf7E0n3Q-BHJW2s_t1vx0KB9poadQ1BmIJzE,3044 +mako/testing/helpers.py,sha256=kTaIg8OL1uvcuLptbRA_aJtGndIDDaxAzacYbv_Km1Q,1521 +mako/util.py,sha256=XmYQmq6WfMAt-BPM7zhT9lybEqHVIWCM9wF1ukzqpew,10638 diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/WHEEL b/venv/Lib/site-packages/Mako-1.2.4.dist-info/WHEEL new file mode 100644 index 0000000..57e3d84 --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.38.4) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/entry_points.txt b/venv/Lib/site-packages/Mako-1.2.4.dist-info/entry_points.txt new file mode 100644 index 0000000..30f31b2 --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/entry_points.txt @@ -0,0 +1,18 @@ +[babel.extractors] +mako = mako.ext.babelplugin:extract [babel] + +[console_scripts] +mako-render = mako.cmd:cmdline + +[lingua.extractors] +mako = mako.ext.linguaplugin:LinguaMakoExtractor [lingua] + +[pygments.lexers] +css+mako = mako.ext.pygmentplugin:MakoCssLexer +html+mako = mako.ext.pygmentplugin:MakoHtmlLexer +js+mako = mako.ext.pygmentplugin:MakoJavascriptLexer +mako = mako.ext.pygmentplugin:MakoLexer +xml+mako = mako.ext.pygmentplugin:MakoXmlLexer + +[python.templating.engines] +mako = mako.ext.turbogears:TGPlugin diff --git a/venv/Lib/site-packages/Mako-1.2.4.dist-info/top_level.txt b/venv/Lib/site-packages/Mako-1.2.4.dist-info/top_level.txt new file mode 100644 index 0000000..2951cdd --- /dev/null +++ b/venv/Lib/site-packages/Mako-1.2.4.dist-info/top_level.txt @@ -0,0 +1 @@ +mako diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.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/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/METADATA b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/METADATA new file mode 100644 index 0000000..dfe37d5 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/METADATA @@ -0,0 +1,93 @@ +Metadata-Version: 2.1 +Name: MarkupSafe +Version: 2.1.5 +Summary: Safely add untrusted strings to HTML/XML markup. +Home-page: https://palletsprojects.com/p/markupsafe/ +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: 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/ +- Chat: https://discord.gg/pallets diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/RECORD b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/RECORD new file mode 100644 index 0000000..85d635b --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/RECORD @@ -0,0 +1,14 @@ +markupsafe/__init__.py,sha256=m1ysNeqf55zbEoJtaovca40ivrkEFolPlw5bGoC5Gi4,11290 +markupsafe/_native.py,sha256=_Q7UsXCOvgdonCgqG3l5asANI6eo50EKnDM-mlwEC5M,1776 +markupsafe/_speedups.c,sha256=n3jzzaJwXcoN8nTFyA53f3vSqsWK2vujI-v6QYifjhQ,7403 +markupsafe/_speedups.cp37-win_amd64.pyd,sha256=k3EXotF4ZpaL3vGiqsU1KBjvNWTXbO3VEEaPcLEhlN0,15872 +markupsafe/_speedups.pyi,sha256=f5QtwIOP0eLrxh2v5p6SmaYmlcHIGIfmz0DovaqL0OU,238 +markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +MarkupSafe-2.1.5.dist-info/LICENSE.rst,sha256=RjHsDbX9kKVH4zaBcmTGeYIUM4FG-KyUtKV_lu6MnsQ,1503 +MarkupSafe-2.1.5.dist-info/METADATA,sha256=icNlaniV7YIQZ1BScCVqNaRtm7MAgfw8d3OBmoSVyAY,3096 +MarkupSafe-2.1.5.dist-info/WHEEL,sha256=slqBGdqRnxanDn00BSYHhryEsWH_8CUurgRUvoMtK_Y,101 +MarkupSafe-2.1.5.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +MarkupSafe-2.1.5.dist-info/RECORD,, +MarkupSafe-2.1.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +markupsafe/__pycache__/_native.cpython-37.pyc,, +markupsafe/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL new file mode 100644 index 0000000..ae1cd59 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: false +Tag: cp37-cp37m-win_amd64 + diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/INSTALLER b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/LICENSE b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/LICENSE new file mode 100644 index 0000000..dfe1a4d --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright 2005-2025 SQLAlchemy authors and contributors . + +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/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/METADATA b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/METADATA new file mode 100644 index 0000000..5e97833 --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/METADATA @@ -0,0 +1,242 @@ +Metadata-Version: 2.1 +Name: SQLAlchemy +Version: 2.0.41 +Summary: Database Abstraction Library +Home-page: https://www.sqlalchemy.org +Author: Mike Bayer +Author-email: mike_mp@zzzcomputing.com +License: MIT +Project-URL: Documentation, https://docs.sqlalchemy.org +Project-URL: Issue Tracker, https://github.com/sqlalchemy/sqlalchemy/ +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Database :: Front-Ends +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE +Requires-Dist: typing-extensions >=4.6.0 +Requires-Dist: greenlet >=1 ; python_version < "3.14" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32")))))) +Requires-Dist: importlib-metadata ; python_version < "3.8" +Provides-Extra: aiomysql +Requires-Dist: greenlet >=1 ; extra == 'aiomysql' +Requires-Dist: aiomysql >=0.2.0 ; extra == 'aiomysql' +Provides-Extra: aioodbc +Requires-Dist: greenlet >=1 ; extra == 'aioodbc' +Requires-Dist: aioodbc ; extra == 'aioodbc' +Provides-Extra: aiosqlite +Requires-Dist: greenlet >=1 ; extra == 'aiosqlite' +Requires-Dist: aiosqlite ; extra == 'aiosqlite' +Requires-Dist: typing-extensions !=3.10.0.1 ; extra == 'aiosqlite' +Provides-Extra: asyncio +Requires-Dist: greenlet >=1 ; extra == 'asyncio' +Provides-Extra: asyncmy +Requires-Dist: greenlet >=1 ; extra == 'asyncmy' +Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy' +Provides-Extra: mariadb_connector +Requires-Dist: mariadb !=1.1.10,!=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector' +Provides-Extra: mssql +Requires-Dist: pyodbc ; extra == 'mssql' +Provides-Extra: mssql_pymssql +Requires-Dist: pymssql ; extra == 'mssql_pymssql' +Provides-Extra: mssql_pyodbc +Requires-Dist: pyodbc ; extra == 'mssql_pyodbc' +Provides-Extra: mypy +Requires-Dist: mypy >=0.910 ; extra == 'mypy' +Provides-Extra: mysql +Requires-Dist: mysqlclient >=1.4.0 ; extra == 'mysql' +Provides-Extra: mysql_connector +Requires-Dist: mysql-connector-python ; extra == 'mysql_connector' +Provides-Extra: oracle +Requires-Dist: cx-oracle >=8 ; extra == 'oracle' +Provides-Extra: oracle_oracledb +Requires-Dist: oracledb >=1.0.1 ; extra == 'oracle_oracledb' +Provides-Extra: postgresql +Requires-Dist: psycopg2 >=2.7 ; extra == 'postgresql' +Provides-Extra: postgresql_asyncpg +Requires-Dist: greenlet >=1 ; extra == 'postgresql_asyncpg' +Requires-Dist: asyncpg ; extra == 'postgresql_asyncpg' +Provides-Extra: postgresql_pg8000 +Requires-Dist: pg8000 >=1.29.1 ; extra == 'postgresql_pg8000' +Provides-Extra: postgresql_psycopg +Requires-Dist: psycopg >=3.0.7 ; extra == 'postgresql_psycopg' +Provides-Extra: postgresql_psycopg2binary +Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary' +Provides-Extra: postgresql_psycopg2cffi +Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi' +Provides-Extra: postgresql_psycopgbinary +Requires-Dist: psycopg[binary] >=3.0.7 ; extra == 'postgresql_psycopgbinary' +Provides-Extra: pymysql +Requires-Dist: pymysql ; extra == 'pymysql' +Provides-Extra: sqlcipher +Requires-Dist: sqlcipher3-binary ; extra == 'sqlcipher' + +SQLAlchemy +========== + +|PyPI| |Python| |Downloads| + +.. |PyPI| image:: https://img.shields.io/pypi/v/sqlalchemy + :target: https://pypi.org/project/sqlalchemy + :alt: PyPI + +.. |Python| image:: https://img.shields.io/pypi/pyversions/sqlalchemy + :target: https://pypi.org/project/sqlalchemy + :alt: PyPI - Python Version + +.. |Downloads| image:: https://static.pepy.tech/badge/sqlalchemy/month + :target: https://pepy.tech/project/sqlalchemy + :alt: PyPI - Downloads + + +The Python SQL Toolkit and Object Relational Mapper + +Introduction +------------- + +SQLAlchemy is the Python SQL toolkit and Object Relational Mapper +that gives application developers the full power and +flexibility of SQL. SQLAlchemy provides a full suite +of well known enterprise-level persistence patterns, +designed for efficient and high-performing database +access, adapted into a simple and Pythonic domain +language. + +Major SQLAlchemy features include: + +* An industrial strength ORM, built + from the core on the identity map, unit of work, + and data mapper patterns. These patterns + allow transparent persistence of objects + using a declarative configuration system. + Domain models + can be constructed and manipulated naturally, + and changes are synchronized with the + current transaction automatically. +* A relationally-oriented query system, exposing + the full range of SQL's capabilities + explicitly, including joins, subqueries, + correlation, and most everything else, + in terms of the object model. + Writing queries with the ORM uses the same + techniques of relational composition you use + when writing SQL. While you can drop into + literal SQL at any time, it's virtually never + needed. +* A comprehensive and flexible system + of eager loading for related collections and objects. + Collections are cached within a session, + and can be loaded on individual access, all + at once using joins, or by query per collection + across the full result set. +* A Core SQL construction system and DBAPI + interaction layer. The SQLAlchemy Core is + separate from the ORM and is a full database + abstraction layer in its own right, and includes + an extensible Python-based SQL expression + language, schema metadata, connection pooling, + type coercion, and custom types. +* All primary and foreign key constraints are + assumed to be composite and natural. Surrogate + integer primary keys are of course still the + norm, but SQLAlchemy never assumes or hardcodes + to this model. +* Database introspection and generation. Database + schemas can be "reflected" in one step into + Python structures representing database metadata; + those same structures can then generate + CREATE statements right back out - all within + the Core, independent of the ORM. + +SQLAlchemy's philosophy: + +* SQL databases behave less and less like object + collections the more size and performance start to + matter; object collections behave less and less like + tables and rows the more abstraction starts to matter. + SQLAlchemy aims to accommodate both of these + principles. +* An ORM doesn't need to hide the "R". A relational + database provides rich, set-based functionality + that should be fully exposed. SQLAlchemy's + ORM provides an open-ended set of patterns + that allow a developer to construct a custom + mediation layer between a domain model and + a relational schema, turning the so-called + "object relational impedance" issue into + a distant memory. +* The developer, in all cases, makes all decisions + regarding the design, structure, and naming conventions + of both the object model as well as the relational + schema. SQLAlchemy only provides the means + to automate the execution of these decisions. +* With SQLAlchemy, there's no such thing as + "the ORM generated a bad query" - you + retain full control over the structure of + queries, including how joins are organized, + how subqueries and correlation is used, what + columns are requested. Everything SQLAlchemy + does is ultimately the result of a developer-initiated + decision. +* Don't use an ORM if the problem doesn't need one. + SQLAlchemy consists of a Core and separate ORM + component. The Core offers a full SQL expression + language that allows Pythonic construction + of SQL constructs that render directly to SQL + strings for a target database, returning + result sets that are essentially enhanced DBAPI + cursors. +* Transactions should be the norm. With SQLAlchemy's + ORM, nothing goes to permanent storage until + commit() is called. SQLAlchemy encourages applications + to create a consistent means of delineating + the start and end of a series of operations. +* Never render a literal value in a SQL statement. + Bound parameters are used to the greatest degree + possible, allowing query optimizers to cache + query plans effectively and making SQL injection + attacks a non-issue. + +Documentation +------------- + +Latest documentation is at: + +https://www.sqlalchemy.org/docs/ + +Installation / Requirements +--------------------------- + +Full documentation for installation is at +`Installation `_. + +Getting Help / Development / Bug reporting +------------------------------------------ + +Please refer to the `SQLAlchemy Community Guide `_. + +Code of Conduct +--------------- + +Above all, SQLAlchemy places great emphasis on polite, thoughtful, and +constructive communication between users and developers. +Please see our current Code of Conduct at +`Code of Conduct `_. + +License +------- + +SQLAlchemy is distributed under the `MIT license +`_. + diff --git a/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/RECORD b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/RECORD new file mode 100644 index 0000000..3053314 --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/RECORD @@ -0,0 +1,531 @@ +SQLAlchemy-2.0.41.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +SQLAlchemy-2.0.41.dist-info/LICENSE,sha256=EaDEEc4Kj89UgMeGJS1_hW8v_-Ozo7Z1Vsc0AX892Ko,1119 +SQLAlchemy-2.0.41.dist-info/METADATA,sha256=-k8Key3C1yxoTXjNYrZlorD4jBcYFVyUJ-BT140Qs_8,9848 +SQLAlchemy-2.0.41.dist-info/RECORD,, +SQLAlchemy-2.0.41.dist-info/WHEEL,sha256=slqBGdqRnxanDn00BSYHhryEsWH_8CUurgRUvoMtK_Y,101 +SQLAlchemy-2.0.41.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11 +sqlalchemy/__init__.py,sha256=mlkGBLStUEQPy0ey8O9AKjH7xjqkiuYs0-mHk05pJy0,12942 +sqlalchemy/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/__pycache__/events.cpython-37.pyc,, +sqlalchemy/__pycache__/exc.cpython-37.pyc,, +sqlalchemy/__pycache__/inspection.cpython-37.pyc,, +sqlalchemy/__pycache__/log.cpython-37.pyc,, +sqlalchemy/__pycache__/schema.cpython-37.pyc,, +sqlalchemy/__pycache__/types.cpython-37.pyc,, +sqlalchemy/connectors/__init__.py,sha256=28v5l6FpQmo62VSX0ry0ZykOLoH2BPGyAStaXaarfVo,494 +sqlalchemy/connectors/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/connectors/__pycache__/aioodbc.cpython-37.pyc,, +sqlalchemy/connectors/__pycache__/asyncio.cpython-37.pyc,, +sqlalchemy/connectors/__pycache__/pyodbc.cpython-37.pyc,, +sqlalchemy/connectors/aioodbc.py,sha256=I28-DgGDz1FIUgRJsEpZxdd05jMmZUdE3YBpoMYbyBA,5462 +sqlalchemy/connectors/asyncio.py,sha256=E0Y7T4bwfkxMZQQfODyRBgWhb8kLMkRSo6ON6vrfJPo,6351 +sqlalchemy/connectors/pyodbc.py,sha256=Qv0fWBPIHuirljSjyq8JQp59sAHx6OrP_lO87vQoss4,8714 +sqlalchemy/cyextension/__init__.py,sha256=zfsKIVdRE5w2P4Qe9p_xcTCfyStODRDV9_iIBs-SdCM,250 +sqlalchemy/cyextension/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/cyextension/collections.cp37-win_amd64.pyd,sha256=XflzRXpXViOjroVNSI1lENhq_P2VxbKRITp5LWJlXwM,179712 +sqlalchemy/cyextension/collections.pyx,sha256=GXPkr9cHRLW3Vcu-ik3dVBZMR-zf0Q5_K4J-_8yV-gk,12980 +sqlalchemy/cyextension/immutabledict.cp37-win_amd64.pyd,sha256=M8ySdc4o209HZkszMYRJld-yLR1p3MNG21FyynQUmVQ,75776 +sqlalchemy/cyextension/immutabledict.pxd,sha256=5iGndSbJCgCkNmRbJ_z14RANs2dSSnAzyiRPUTBk58Y,299 +sqlalchemy/cyextension/immutabledict.pyx,sha256=IhB2pR49CrORXQ3LXMFpuCIRc6I08QNvIylE1cPQA5o,3668 +sqlalchemy/cyextension/processors.cp37-win_amd64.pyd,sha256=1NHfucoRC8t_IKRYgmAho1xCBkOeaXeAOEvgjNLWink,61440 +sqlalchemy/cyextension/processors.pyx,sha256=V9gzqXiNHWsa5DBgYl-3KzclFHY8kXGF_TD1xHFE7eM,1860 +sqlalchemy/cyextension/resultproxy.cp37-win_amd64.pyd,sha256=zm_WlD26SEXUSQO2rfjVFkox0LlxGKDPw5U5AiCLGfY,64000 +sqlalchemy/cyextension/resultproxy.pyx,sha256=h_RrKasbLtKK3LqUh6UiWtkumBlKtcN5eeB_1bZROMA,2827 +sqlalchemy/cyextension/util.cp37-win_amd64.pyd,sha256=e2ytDB2cpAqyI8VSFCSBcP4KD1Y67Qt9FhpOJZVieFQ,76800 +sqlalchemy/cyextension/util.pyx,sha256=50QYpSAKgLSUfhFEQgSN2e1qHWCMh_b6ZNlErDUS7ec,2621 +sqlalchemy/dialects/__init__.py,sha256=6dkwhXOEYaEwFHlZWpa6Oh4Oht1XKUOLSGmj1QXdRP8,1831 +sqlalchemy/dialects/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/__pycache__/_typing.cpython-37.pyc,, +sqlalchemy/dialects/_typing.py,sha256=dU8B2aZcBxM9zq7tfi4ZI-o13doagfgL-Is2XDrKXes,1001 +sqlalchemy/dialects/mssql/__init__.py,sha256=5zGb8Oxnm5_Fa39MRj22hCG4HH22lzbJOCaCyeYHu7M,1968 +sqlalchemy/dialects/mssql/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/aioodbc.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/base.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/information_schema.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/json.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/pymssql.cpython-37.pyc,, +sqlalchemy/dialects/mssql/__pycache__/pyodbc.cpython-37.pyc,, +sqlalchemy/dialects/mssql/aioodbc.py,sha256=n8l0wTVfFShm0SMEfjys371tGTzyUJn4oIivtvBpFNc,2084 +sqlalchemy/dialects/mssql/base.py,sha256=ZWLYRoYqkDbJbAMjLdPeXACKG4Y-VoO5oASj1mFmr5s,136725 +sqlalchemy/dialects/mssql/information_schema.py,sha256=EYOuxhCII5kWBeEEuVH-1UWZhwJ7EgO9OFXL37zh-o0,8338 +sqlalchemy/dialects/mssql/json.py,sha256=FNUpbyEH-X6sax97fpEnDZTkd5pkXj64Bk0SCGsaDfo,4885 +sqlalchemy/dialects/mssql/provision.py,sha256=udeC0uRg9sz4hwUhM7vCJYBxOzE1DkxayYD6SGqz6Zc,5755 +sqlalchemy/dialects/mssql/pymssql.py,sha256=XgC9NbmKHsCV729BnQboHdg1T901zQzcs8kjOiyxylQ,4223 +sqlalchemy/dialects/mssql/pyodbc.py,sha256=n4MdPmr40CeWqDb53QufVHaPJpxWB7bwrgmhMjW-AQc,27933 +sqlalchemy/dialects/mysql/__init__.py,sha256=sFKzurRfOGPJ3nMUTitceeHGg6fqTtzoijwzIGicqYg,2310 +sqlalchemy/dialects/mysql/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/aiomysql.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/asyncmy.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/base.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/cymysql.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/dml.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/enumerated.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/expression.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/json.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/mariadb.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/mariadbconnector.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/mysqlconnector.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/mysqldb.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/pymysql.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/pyodbc.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/reflection.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/reserved_words.cpython-37.pyc,, +sqlalchemy/dialects/mysql/__pycache__/types.cpython-37.pyc,, +sqlalchemy/dialects/mysql/aiomysql.py,sha256=EdDaSRQ1Tjkc4mW04rbTJjVa5AdPUTOv0PlQqSLsmmg,10348 +sqlalchemy/dialects/mysql/asyncmy.py,sha256=mawnMfeYixG0fkLREhNmsMwC_RtoWrVOfEa_efIsqk4,10420 +sqlalchemy/dialects/mysql/base.py,sha256=Y2RvbWzeotfh4OpErvq5XBN76P_MvtEWFVqr-7Gtnnk,128357 +sqlalchemy/dialects/mysql/cymysql.py,sha256=hq1eBnluo4V_2TXUIbmyzKWU8LBAzuqGElnZpMUoC7A,2384 +sqlalchemy/dialects/mysql/dml.py,sha256=5Twbxc25IRehCJjCmLoDmSUoBChoz-UQ_jM0dV-CrFk,7993 +sqlalchemy/dialects/mysql/enumerated.py,sha256=i8JV1FvCFfEfwPBBraDUkpV9NsMKEY_mII3J9GZmXp8,8690 +sqlalchemy/dialects/mysql/expression.py,sha256=dOiqor_NYeEXW0K31dsNaXWGySrVIhnc7zSBCcV1Cr8,4264 +sqlalchemy/dialects/mysql/json.py,sha256=E1oYKCYuK0UfA3lj60tf49f7JLwdgJjruMKu3mlUiuE,2350 +sqlalchemy/dialects/mysql/mariadb.py,sha256=PW0_ZelBPyOlpzwQ4Te2hFdWwx6-44O8tGgztwToe_Q,1715 +sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=mArMXLTwy-6q0grXK6wKSbnbUFjM9PzS56nQOuXJAvY,8900 +sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=mnO9fAR2bv16DRX508Wez7T5XbbVpr_JdlsVZNMRoTo,8439 +sqlalchemy/dialects/mysql/mysqldb.py,sha256=7A7CNxcY5MA-9JIgspaW4i2K48c-_UQiqc7xtlq-kgY,9831 +sqlalchemy/dialects/mysql/provision.py,sha256=daMaDfKa131baX4AA2I7oOJKNZaRJFhF55KgCAFAiqQ,3832 +sqlalchemy/dialects/mysql/pymysql.py,sha256=FgNr2hkQFFA32mx4iUZZ2dcAx8Yx3NirMrEqe3D8rmU,4218 +sqlalchemy/dialects/mysql/pyodbc.py,sha256=Kvw-CK6FXdvkM7vR018F6VpKJr6sl3BlFjNSiFNtAI8,4437 +sqlalchemy/dialects/mysql/reflection.py,sha256=y_kBy1UDduTBWwESl_sfDPWLstgTuRP_1HRKjtzYi8s,23519 +sqlalchemy/dialects/mysql/reserved_words.py,sha256=tgAoz0SMyEf2O5QbXdx8QUNgVjdnCTv3bU5ogyFyxHs,9829 +sqlalchemy/dialects/mysql/types.py,sha256=U8B6tMqLVdUh64mm7o9joQXN8fueGt7Vs0TnBARSvkY,25028 +sqlalchemy/dialects/oracle/__init__.py,sha256=ZPTSdSlRSku4YPfSB9c5umBGnJGUE5SOfXii7yxEcVg,1859 +sqlalchemy/dialects/oracle/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/base.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/cx_oracle.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/dictionary.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/oracledb.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/types.cpython-37.pyc,, +sqlalchemy/dialects/oracle/__pycache__/vector.cpython-37.pyc,, +sqlalchemy/dialects/oracle/base.py,sha256=buwYk9CakXfVAtWmcueN2RxRo1MWe-9fgwX-_kP5qvA,140804 +sqlalchemy/dialects/oracle/cx_oracle.py,sha256=RRyBBdNLHsp3jT38UnCFndTjHmzBgjLp0kXdTkhykc4,58164 +sqlalchemy/dialects/oracle/dictionary.py,sha256=cpMXbspWRmWClLac87lvBO7KMglz_tsF4NMQYHt_brc,20026 +sqlalchemy/dialects/oracle/oracledb.py,sha256=htpTfSqkxrA1PeNXir2TIaIjND8E8IavsmJMLPXFmH0,34718 +sqlalchemy/dialects/oracle/provision.py,sha256=ePX5ae92TOkcB0rKsb6jACGNtSgqd7RplYA1fpEkqUQ,8533 +sqlalchemy/dialects/oracle/types.py,sha256=xuslK0g_5_LjZ-vlV6kNcUD-a3WfYtJle3cGGzGmud4,9374 +sqlalchemy/dialects/oracle/vector.py,sha256=AtGAlI_AYvri5TFoHsKuZyZWBep1TVBsgD62pTzKThQ,8127 +sqlalchemy/dialects/postgresql/__init__.py,sha256=b8c1eYvTvP3J8FFb6e9Deaw5raHeAfGqj1WQLOOaQ4E,4059 +sqlalchemy/dialects/postgresql/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/_psycopg_common.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/array.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/asyncpg.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/base.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/dml.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/ext.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/hstore.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/json.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/named_types.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/operators.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/pg8000.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/pg_catalog.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/psycopg.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/psycopg2.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/psycopg2cffi.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/ranges.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/__pycache__/types.cpython-37.pyc,, +sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=Y7DYPQC1ETUHZ9NBn52mpnoai2nQmcRawN89cOHQiaQ,5860 +sqlalchemy/dialects/postgresql/array.py,sha256=wrIkXmf0_XVd_CiweQSoJkegP018niFuUzQSAQsyuyI,17495 +sqlalchemy/dialects/postgresql/asyncpg.py,sha256=ijwHuqbhm8LsPIjPXe1ux09ZelB_j5XEUc2xCIemUdU,42574 +sqlalchemy/dialects/postgresql/base.py,sha256=ceLRq-l60TiOWXsyUPQmeH4FUYsXmByq4qmnEbPaP5o,189193 +sqlalchemy/dialects/postgresql/dml.py,sha256=NwSlxWQH2IG_DVGvFha9z2TVVRiDEez5sf2yqjBrOK8,12465 +sqlalchemy/dialects/postgresql/ext.py,sha256=1PNXGkIvPYPuVVujpKro73s8DiauXtjiGdV6Ngu4k4U,17883 +sqlalchemy/dialects/postgresql/hstore.py,sha256=-dYcZeW4N6grdHIt31cjDkNuXk-rFUATXH1z7cImklY,12340 +sqlalchemy/dialects/postgresql/json.py,sha256=kRDNFHCQmCrhmX_5Ug4ULtZmfZIXH9NWvTSnlu86Ah8,13209 +sqlalchemy/dialects/postgresql/named_types.py,sha256=IHCjrPFqtXngwcSeHvoqe2xNxxw8afmwrin-uq4yrmk,18818 +sqlalchemy/dialects/postgresql/operators.py,sha256=U2bri8df1IumpuB3PGrDE9k2N__yX2EJtPmKf1F7-bU,2937 +sqlalchemy/dialects/postgresql/pg8000.py,sha256=TZOJKfVmPQrBUyDkTbgSenm7e5dyZdwRff58OGQRRAM,19304 +sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=piAIGRBByBC0a2LKrnvcs4kqGfroYhKaEj0Mi823hdc,9944 +sqlalchemy/dialects/postgresql/provision.py,sha256=mVbELvHcXOQDAyXa3KLQxANyMy8ET0Bkhg8A_KN9_Fs,5945 +sqlalchemy/dialects/postgresql/psycopg.py,sha256=wUODBYhaKgauqQm9tUWR8A9gSvsqpO0bNlVXRIedvAc,24109 +sqlalchemy/dialects/postgresql/psycopg2.py,sha256=8owflXJl8HAVc1-qJNvR7X1SlPII4Sc3A-e-TS5B7s4,32924 +sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=-r1exhBFvKWnzxqa9km5cXAwlsEppJiF_2t2V-bM_6U,1817 +sqlalchemy/dialects/postgresql/ranges.py,sha256=ywBw2Iq-LBc8muVdtR8NTfPfAtnu7IBb99lHCNVhOIo,34009 +sqlalchemy/dialects/postgresql/types.py,sha256=jXYuEf7DNtv7nl1OzlVEI5nJgDA423_kl6SbDdXnhbU,7942 +sqlalchemy/dialects/sqlite/__init__.py,sha256=ScDazYTucj7D5CntecmIw36pcLG4Q6jP1HCxc_uOaCU,1239 +sqlalchemy/dialects/sqlite/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/aiosqlite.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/base.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/dml.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/json.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/pysqlcipher.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/__pycache__/pysqlite.cpython-37.pyc,, +sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=jyfU_O2GjVq0tJq2ycucmjxGUO-t1SdLEP2TlPz4K5k,12656 +sqlalchemy/dialects/sqlite/base.py,sha256=P2inS000YCN8HigPkceIE7jgo8wog_J9AeE20o4bPM8,105514 +sqlalchemy/dialects/sqlite/dml.py,sha256=8HDXVO-BYD4MnLM3e4X5RWUeZOWr8JqveoRidrSAUN8,9401 +sqlalchemy/dialects/sqlite/json.py,sha256=kue76-HGin7nqtDye6l512qixbCweMON72qINT531jE,2869 +sqlalchemy/dialects/sqlite/provision.py,sha256=poguIVUc5uMMvUdXKQvaTYZCgzPZRbcndU06tXyQ7uM,5792 +sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=RIGIUq6NeB7wnj_5_STxv7KPoSpey01_782d1VEk1Yg,5528 +sqlalchemy/dialects/sqlite/pysqlite.py,sha256=m0Q97Q6K8V2kt1T0RxOPx_fdRF2g7d5MV8RX9DNpNLk,25984 +sqlalchemy/dialects/type_migration_guidelines.txt,sha256=gyh3JCauAIFi_9XEfqm3vYv_jb2Eqcz2HjpmC9ZEPMM,8384 +sqlalchemy/engine/__init__.py,sha256=QCVJfSmacMwrT3uKOjGEggw2nP6eoaYeCPPhh_vAZeI,2880 +sqlalchemy/engine/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/_py_processors.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/_py_row.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/_py_util.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/base.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/characteristics.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/create.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/cursor.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/default.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/events.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/interfaces.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/mock.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/processors.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/reflection.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/result.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/row.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/strategies.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/url.cpython-37.pyc,, +sqlalchemy/engine/__pycache__/util.cpython-37.pyc,, +sqlalchemy/engine/_py_processors.py,sha256=DXgQhVD_KvSRTEG5fn44voI6X3_qUc7CuVLKTS8SPLY,3880 +sqlalchemy/engine/_py_row.py,sha256=ylRDk1zEsS7XgRuVo4I2kNArKebr_1N3wGcbDLbH-xE,3915 +sqlalchemy/engine/_py_util.py,sha256=gkXD7uZ2gwK1Qckr0pXSyegWvW8nAzfJKybWMxEJkmA,2558 +sqlalchemy/engine/base.py,sha256=rTKKIZl5wRQyXELq8YEylht_v9uPp3IwJ2nZr4JHxmU,126181 +sqlalchemy/engine/characteristics.py,sha256=mVV980KnAyV_2_CL_Wd-UjV9KAENY4b4Nl7puq5VVzg,4920 +sqlalchemy/engine/create.py,sha256=bMfIIOKkpnWKOseiLuM7GDxDaIaL1Tptap_DuSnCW5Q,34095 +sqlalchemy/engine/cursor.py,sha256=hGN1PfLvyvko1W0qFDEAHEY3rkXQR-6s94ewW-Kh0pk,78670 +sqlalchemy/engine/default.py,sha256=V2SlqSDemj4yVPO248m4uTvhqi9HZxhRfqjMQpgQiDM,87686 +sqlalchemy/engine/events.py,sha256=fix6y0u2stLXiUruOzswbH79hV72Dn7R8UyCQmVlMEY,38365 +sqlalchemy/engine/interfaces.py,sha256=9CFmu4mVbqzccyWhzbbZsfWz0Uz5ArXaZwpflMBl1gg,116869 +sqlalchemy/engine/mock.py,sha256=_Pixj3kZMA2mThtgnlxU-DLtCrPel7fNF1Y-wJZvTNI,4290 +sqlalchemy/engine/processors.py,sha256=RWNjfb3YfAeNJbEsvM3NPvFGgc51fWsStzv5F-vJXqA,2440 +sqlalchemy/engine/reflection.py,sha256=ABp0-ErZYNvNWDS9IhAIdN8lZ-Ejr_Na2ZzXZxoyrnc,77667 +sqlalchemy/engine/result.py,sha256=X7_ZO5sWkq6Dwg931_4kNjhIDKYNy07Y9NCGYSniWqE,80193 +sqlalchemy/engine/row.py,sha256=lOOvrGphIFJGBXRFkIiD_5cWvdyTSsOlyDFjTH5Isgc,12431 +sqlalchemy/engine/strategies.py,sha256=yiyjnbLH0n4GoDY01jKYZN46kJPzKGtdcLMoAqJb5N0,461 +sqlalchemy/engine/url.py,sha256=Q8kDWI4Y-e9NFZwzodCiTDaV9wKTO3uv-ADsakG_yWw,31991 +sqlalchemy/engine/util.py,sha256=RKYAvUBtIvN7bFKmWv67we6QWNmNFsKyY9-QFoCo6TI,5849 +sqlalchemy/event/__init__.py,sha256=lBGB1sQY9xMqfkokpSgB5DJeWvvNEjwUGVefosnlEBw,1022 +sqlalchemy/event/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/event/__pycache__/api.cpython-37.pyc,, +sqlalchemy/event/__pycache__/attr.cpython-37.pyc,, +sqlalchemy/event/__pycache__/base.cpython-37.pyc,, +sqlalchemy/event/__pycache__/legacy.cpython-37.pyc,, +sqlalchemy/event/__pycache__/registry.cpython-37.pyc,, +sqlalchemy/event/api.py,sha256=yVUDVUtwmcCVFOK-b1Wwe486VpynykFnRzdFOxRZips,8333 +sqlalchemy/event/attr.py,sha256=OJNDkrfnMN_zVG5nndCbMLQdjHcAWUkyh63BSCsUQO4,21406 +sqlalchemy/event/base.py,sha256=-ASiV5Put9nTtWertuYN-zlcggXy9cTHisHquxsw1xM,15726 +sqlalchemy/event/legacy.py,sha256=66l-Nd4atuCAtfegOv8l65qEL81ZV8mc0nY_OWnCRtU,8473 +sqlalchemy/event/registry.py,sha256=ex3hwR-Q0hw9BInvjdQztvC68PjH1kjKPZALhe09Re4,11534 +sqlalchemy/events.py,sha256=dljlE94Q8_sLFDniTWiL3w6kt17yPsl4cPV383rHvGc,542 +sqlalchemy/exc.py,sha256=WJ-pOBKlfS37uBz4dWa_MYHMAi0NpoSTTqqpK1_iC-s,24810 +sqlalchemy/ext/__init__.py,sha256=oZ15qCNcsI6TNS7GOr1BTg0ke5XvuKBBbwxDpbUBZfI,333 +sqlalchemy/ext/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/associationproxy.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/automap.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/baked.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/compiler.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/horizontal_shard.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/hybrid.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/indexable.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/instrumentation.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/mutable.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/orderinglist.cpython-37.pyc,, +sqlalchemy/ext/__pycache__/serializer.cpython-37.pyc,, +sqlalchemy/ext/associationproxy.py,sha256=MvB7oDhuXpUynFt77pL5oP_WMKZfY2W_QFNscBg085Y,68075 +sqlalchemy/ext/asyncio/__init__.py,sha256=q8_gBx_2IJTDh8pGhNw2RWRwSdabwqQAK7Ydi8K6fds,1342 +sqlalchemy/ext/asyncio/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/base.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/engine.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/exc.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/result.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/scoping.cpython-37.pyc,, +sqlalchemy/ext/asyncio/__pycache__/session.cpython-37.pyc,, +sqlalchemy/ext/asyncio/base.py,sha256=bWTnXrH7EWD9i2o7Ry1oT3ucdLBQYvC2UTvOSfIQ2Jo,9313 +sqlalchemy/ext/asyncio/engine.py,sha256=ZsipaCv3jaEnrx4YlX9dk2PhbYRAykpjkR01k-wyaj0,49789 +sqlalchemy/ext/asyncio/exc.py,sha256=wCc5msrUy8ultaTaQoiI9neVnaeqzgyzkGjo6Lv4BSA,660 +sqlalchemy/ext/asyncio/result.py,sha256=AZSgj5XSUs4efinJ7kC5CS-E7ZAW9apvLt1WWu7xsbo,31516 +sqlalchemy/ext/asyncio/scoping.py,sha256=5rMnD5C3sLK_dkFjBVGagRwqXem_bOVxgA19EYVCTIU,54183 +sqlalchemy/ext/asyncio/session.py,sha256=_gSnYN-kGQAEfgty-fHSE0OsaJWWD1WBF0KiehyfK2g,65704 +sqlalchemy/ext/automap.py,sha256=J-erzP37JGlRSXYRN82Q0gVd24QUwBtcy-tK5Jjc5DA,63376 +sqlalchemy/ext/baked.py,sha256=bS0SwosDjo9uj3268QlhkMvMbBrlEnejLPv0SiA8k2U,18323 +sqlalchemy/ext/compiler.py,sha256=J2ggO_IQtsOKVBaURRgHHILUQuagb4cMqYFXAhzfMBs,21489 +sqlalchemy/ext/declarative/__init__.py,sha256=itYJRCCslk1dx9cVsdypGxrS7i4Uj0FL9ZFiVox-SGM,1883 +sqlalchemy/ext/declarative/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/ext/declarative/__pycache__/extensions.cpython-37.pyc,, +sqlalchemy/ext/declarative/extensions.py,sha256=m4SYzAaybQECU58j8NU-l2weCNFyDv_KLh8RVf_FApI,20095 +sqlalchemy/ext/horizontal_shard.py,sha256=oqyQXWknES7bcVO-evE7fLaLb5asZKDGXureoIkFol8,17169 +sqlalchemy/ext/hybrid.py,sha256=ZNEnWXr2XcsTWj-Jb4DwIjzUvLaDKIblcnV8NJSsO0I,54064 +sqlalchemy/ext/indexable.py,sha256=VFmB1yvHJ4kI3zl-hPvRpMKyjIXndtuGUOfaredO6ik,11410 +sqlalchemy/ext/instrumentation.py,sha256=HR8Ebk_pW3yzVDEIwtEvs3vESh-wsZgQik2whVTGB-M,16157 +sqlalchemy/ext/mutable.py,sha256=8jV9eWaLUvy2YqGZzP571-2j56rAmyvblHHt3Jev5YM,38655 +sqlalchemy/ext/mypy/__init__.py,sha256=_SefzxOkJ9pt8-V-OdC_l-FC2hKUY-zRopCT61jD6lk,247 +sqlalchemy/ext/mypy/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/apply.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/decl_class.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/infer.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/names.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/plugin.cpython-37.pyc,, +sqlalchemy/ext/mypy/__pycache__/util.cpython-37.pyc,, +sqlalchemy/ext/mypy/apply.py,sha256=aLB8sIdkYT2y-VUcLzZG_TQFTiLS-OCvQvatxXsm58w,10915 +sqlalchemy/ext/mypy/decl_class.py,sha256=bGAl5Pliq0dgfTnn-9TEzQJPLJbluLxqWpPa94Fdsig,17899 +sqlalchemy/ext/mypy/infer.py,sha256=wvvjmBBvT0pNDzQZk-DwBSzsYMKK3cyPmaVtSp0sCzM,19957 +sqlalchemy/ext/mypy/names.py,sha256=2K1etoLj3o7ntHeZYf5oIDX6cO4Vp56qs4WMBDixF7s,10814 +sqlalchemy/ext/mypy/plugin.py,sha256=JjimTZbP5I7EbfSUGJm3htTRFgi8JZD2306GrU3bM3M,10053 +sqlalchemy/ext/mypy/util.py,sha256=qlvEHUFWQIex-mQcBhvjdCK5-tgRCwaP1Pbt8ENv21k,10317 +sqlalchemy/ext/orderinglist.py,sha256=3IIFjEqTT6VkZ6ny_taytbbmTgHKaoPgGZpfZ8lWPW4,14858 +sqlalchemy/ext/serializer.py,sha256=Jaj99JFxeMmYEL1sDG2_qskT8_1beQY3BoXKU0VhyGY,6354 +sqlalchemy/future/__init__.py,sha256=bRMk4Ib05mCxDBZfJnhTZk241rRKgBO1C5REMKnyD4M,528 +sqlalchemy/future/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/future/__pycache__/engine.cpython-37.pyc,, +sqlalchemy/future/engine.py,sha256=ABOf5TMdGBV1Nr8BwFttsg15umImWZ4lMUnSKnQCc3o,510 +sqlalchemy/inspection.py,sha256=ikV5Kx2RB1tv7_fmsdmbgAvg1SMV3AmcmvfEyJELtFg,5237 +sqlalchemy/log.py,sha256=jy7isZDjgejMYW-LFO-F-wdse2LgPMi8UQMUOoPFApg,8895 +sqlalchemy/orm/__init__.py,sha256=T0wrInkfQEJc83lG3RGlGKAJ7WCSFh8ej7hVOG912XU,8633 +sqlalchemy/orm/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/_orm_constructors.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/_typing.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/attributes.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/base.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/bulk_persistence.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/clsregistry.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/collections.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/context.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/decl_api.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/decl_base.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/dependency.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/descriptor_props.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/dynamic.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/evaluator.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/events.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/exc.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/identity.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/instrumentation.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/interfaces.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/loading.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/mapped_collection.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/mapper.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/path_registry.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/persistence.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/properties.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/query.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/relationships.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/scoping.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/session.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/state.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/state_changes.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/strategies.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/strategy_options.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/sync.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/unitofwork.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/util.cpython-37.pyc,, +sqlalchemy/orm/__pycache__/writeonly.cpython-37.pyc,, +sqlalchemy/orm/_orm_constructors.py,sha256=PWGKa1m7ygq8v9RE5t_J8KBYp5zwmdQISy69Vac2uFA,106216 +sqlalchemy/orm/_typing.py,sha256=m9CPK7mmf7W541gmXyAolA8p69mppDWjUagI9mQYS0s,5152 +sqlalchemy/orm/attributes.py,sha256=eaLtbMlvk5dFLScHyCaVKlLK_D32D-Xd9DzjJTSrceY,95369 +sqlalchemy/orm/base.py,sha256=zXrk9x7bkVvA6eJj_GAJjRRfxKS1JJRsoRvSB4iwQLs,28474 +sqlalchemy/orm/bulk_persistence.py,sha256=U2Z1SIkU-Deto4OMV3psQZY3eKOAdLgc0-utQlYwavI,74786 +sqlalchemy/orm/clsregistry.py,sha256=4GG7hpqALDdSWeXk6Pt-nIouakARhxKj660Xu6laIaE,18523 +sqlalchemy/orm/collections.py,sha256=ydulkaeKgTZG_o8PRWTRpzMrQD6O2ZGqIKj5cGj3FX4,53879 +sqlalchemy/orm/context.py,sha256=iphHqd6oUEvDizN-gXZjcsgDB_C1_Jk1LguAhow2wls,118414 +sqlalchemy/orm/decl_api.py,sha256=y7nL89F5UVMpMendtYNbZz6joej3GPUS03ugNMrTLmE,66847 +sqlalchemy/orm/decl_base.py,sha256=yBEm3C1N8kDxcByfiMaSLTUjJxWhgcsBimZedDizmE0,85433 +sqlalchemy/orm/dependency.py,sha256=KEj5YjAV1w4w6LOkCdv8uPoCMPSK-mQJd8vNhwfqjuY,48925 +sqlalchemy/orm/descriptor_props.py,sha256=7B-Ced89zBJi2gI1jFp2aPBBazB2-xWsdHSQKYwbKq4,38308 +sqlalchemy/orm/dynamic.py,sha256=bY6ka1kKWB9s8_OFgCPrmPR5K-UTOFai5XBAxcRwd18,10116 +sqlalchemy/orm/evaluator.py,sha256=zOP-8qaqI9PZ7v93BESv5SK91EwDg4NOe2G9z--4lo8,12732 +sqlalchemy/orm/events.py,sha256=U5JpN0QrmqJS7J3510gB_AKxfR0cccXATYj4u6vbq_M,131052 +sqlalchemy/orm/exc.py,sha256=GiNtriH9uWZi0uQ27KmuGM_83AXZ3fAuhgY7KUwLyuE,7873 +sqlalchemy/orm/identity.py,sha256=PeO9wsd7omERGC2GmiUgcCHmpotCJUbZ3O2g23JGnME,9551 +sqlalchemy/orm/instrumentation.py,sha256=wcTXkRTty_DjF0em2D5DZhqgdxZC1VhcnASiZ1ZE36w,25075 +sqlalchemy/orm/interfaces.py,sha256=U2781Q6C7dcXRB05Fy1K2KtLLcdC2eCkOfbogs3F3N4,50287 +sqlalchemy/orm/loading.py,sha256=Ny4Uo-6BJBKU7pE7icmTM8hF2DNP2MPSvR4nYxxCxrw,59959 +sqlalchemy/orm/mapped_collection.py,sha256=wV5K1m0L3UnC-EHI9BviUL5Vpb-kYL66S-UUK3PfnQc,20239 +sqlalchemy/orm/mapper.py,sha256=zKyxi3GMZmR6vc6GdSQfYVqgkhBA3gGnfAw31Jn3Hto,176128 +sqlalchemy/orm/path_registry.py,sha256=LZ1l3tQAAjb_6OeM1bmhWHZzUzOuRPfRxDJTwoqiPsU,26727 +sqlalchemy/orm/persistence.py,sha256=ce8d3BCQEPxJqXfoz4ul8w2hayzROxsFHen0ISk0lOI,63483 +sqlalchemy/orm/properties.py,sha256=oTcrey56S0zq2ZJUo-4HBsUkmXw4jxGKttNHH-GY8Eg,30385 +sqlalchemy/orm/query.py,sha256=7VB21pssrMAIeU1dKK7RrZs4OfVySB8CvUTcGqzFTxM,122177 +sqlalchemy/orm/relationships.py,sha256=1cTw-RdKm--SL-WoQvataTJv-OVD9QWrTptDtkds-Ww,132333 +sqlalchemy/orm/scoping.py,sha256=1vCxaZLnnSZbc3qg4yJW1dYiBwwlR1Ey9__4idvV5jY,80762 +sqlalchemy/orm/session.py,sha256=bsz0Kl7qH2ZE7Ud0acM-dko2UqukrEuyHEHFIqPBSqc,201172 +sqlalchemy/orm/state.py,sha256=Gip6hxecWRUHmIkExuvV0PO16kgEKBJDHBL4obz8uHU,38813 +sqlalchemy/orm/state_changes.py,sha256=uyOAglDQS2eFeyHJVO-hWBnSaNHJQ9Voz7dmbCtCBoQ,7013 +sqlalchemy/orm/strategies.py,sha256=MVLYXBcCXlsjyfLUcbF28g1JKgfG8j2FftjSb6XFOjQ,123276 +sqlalchemy/orm/strategy_options.py,sha256=s7LdjDLfbamI74hqCM185Vqh4_2F4e5pol-B9meN9mo,87571 +sqlalchemy/orm/sync.py,sha256=rGQsKGPor2saMCBUnudZsZGU0TKbGQdIqYiRgs8FhjI,5943 +sqlalchemy/orm/unitofwork.py,sha256=_5rRqoPerq_KcMcf7srsEld9XuRD-fOVodYs81w-e9I,27829 +sqlalchemy/orm/util.py,sha256=wMzIyZzDnDDxe8hgcduh_EoSbAHG2XK4-PLSRitIbKg,83308 +sqlalchemy/orm/writeonly.py,sha256=rztFcabTQFKAfrtdd3sawTGEGjyPBlg9NxJGZcU6MtY,22983 +sqlalchemy/pool/__init__.py,sha256=VqloraQaP2yt2MMfc0hJO51sM7KuHEHyApuDvh2FREI,1848 +sqlalchemy/pool/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/pool/__pycache__/base.cpython-37.pyc,, +sqlalchemy/pool/__pycache__/events.cpython-37.pyc,, +sqlalchemy/pool/__pycache__/impl.cpython-37.pyc,, +sqlalchemy/pool/base.py,sha256=DAQF9d1L01X73dGZlS2Osjk12C9p14Skw-ReaG6BT0I,53848 +sqlalchemy/pool/events.py,sha256=xlmNZCCEKmtPR3d3cT3oQ-DqbuphNr7ahPk5OV2ZTYQ,13521 +sqlalchemy/pool/impl.py,sha256=YRadtSaTRtdexMJfoZIy8hThHj1q5IKeJ5JLZBaS-jc,19525 +sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +sqlalchemy/schema.py,sha256=iPmSU1tudFs6dC11fatstMQPmk1It5QFvcO-xUAp9kw,3324 +sqlalchemy/sql/__init__.py,sha256=8-2pW4PssFcOM50bW8u3bmsVEjEA6zSbOI_viThuLhs,5965 +sqlalchemy/sql/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_dml_constructors.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_elements_constructors.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_orm_types.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_py_util.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_selectable_constructors.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/_typing.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/annotation.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/base.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/cache_key.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/coercions.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/compiler.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/crud.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/ddl.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/default_comparator.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/dml.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/elements.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/events.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/expression.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/functions.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/lambdas.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/naming.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/operators.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/roles.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/schema.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/selectable.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/sqltypes.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/traversals.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/type_api.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/util.cpython-37.pyc,, +sqlalchemy/sql/__pycache__/visitors.cpython-37.pyc,, +sqlalchemy/sql/_dml_constructors.py,sha256=0yFc_rMvnSuj7bIBH54IyYfWM2QEKmJBgKryUIRKy-M,3927 +sqlalchemy/sql/_elements_constructors.py,sha256=usT81rfJnE4YWyQ3-l6vL13TSCTwU7WjWWpSIcVO6vQ,64968 +sqlalchemy/sql/_orm_types.py,sha256=LRQgGBiB-Pejqjnu57QKej6bjLBfFsv8NJKaIDEArWc,645 +sqlalchemy/sql/_py_util.py,sha256=WUT5MIpoD6XByDQ9M_ArPycWUdZO4PVg3qKTOfTkSKs,2248 +sqlalchemy/sql/_selectable_constructors.py,sha256=renGwNcVdXtr1NLjFP5fiyLJyTpQmjvxLhwLKuM2Hts,21166 +sqlalchemy/sql/_typing.py,sha256=KEPKrRS6ci-qTku78GZ7_qMcbeBt-BM4hsmB1u_G-WQ,13495 +sqlalchemy/sql/annotation.py,sha256=1lFoOA6iKiY_YxqYBsJ2rjYc30Gm_D0FEKumMpmNGu8,18830 +sqlalchemy/sql/base.py,sha256=LxLLlASqMsRenFc0NDe6Vj055GJp4uf_B31nbjp_EVU,76338 +sqlalchemy/sql/cache_key.py,sha256=DzMm_m9T0XZ34bBJg9YlLgcTm5aC9gC57li1_VxKHDg,34710 +sqlalchemy/sql/coercions.py,sha256=da7m0oXD0yx4oc89NunhhRy_ug55P7_MFj4M8T-SK6I,42069 +sqlalchemy/sql/compiler.py,sha256=BzItiz5LUkOdG9Vs4NUhueDyVJ08OrSNzk-KPbX47vo,288311 +sqlalchemy/sql/crud.py,sha256=nOWEWkEPDeDtZ9eW_yKniIMhRkv2pLyOArq-lE1WX-M,58526 +sqlalchemy/sql/ddl.py,sha256=Up7IhXppABA7-YWLI5IoPde3rDmU3Cufs59jQ5G_jz4,49391 +sqlalchemy/sql/default_comparator.py,sha256=fV8WRXlUuDfqKHckcRkA1x8nRJx5Xt_5KlWBpLCVgwo,17259 +sqlalchemy/sql/dml.py,sha256=YRUvuNuvjZD0rHRebW9ITe92_k0FrpBvzhLNmyxiA1g,68069 +sqlalchemy/sql/elements.py,sha256=yNTKl194fjTSP9DRm6jXVhcPGdw4GbX_j5dyYNvsMgs,183430 +sqlalchemy/sql/events.py,sha256=V_PFYjVRlOCcTZdgGaKkQRStaF7aLfiLUJD954qjG0I,18770 +sqlalchemy/sql/expression.py,sha256=5iKfdbH78Kqw4r67VKyTLLMycJMZVfAXV_HW0glE1fc,7748 +sqlalchemy/sql/functions.py,sha256=M0vcB93SgL-7vlcHU2YkB_S30tUXLKmVhT75zryWiI8,66947 +sqlalchemy/sql/lambdas.py,sha256=4Nk0uD-LhgHgiSTEUGiXoSaY4dTZJDKcSaWv6ciHf3c,50544 +sqlalchemy/sql/naming.py,sha256=ujwzVnEMAI3XBpNZUJjkvYIuxP2Je3MpK1a4oN8WpJ8,7070 +sqlalchemy/sql/operators.py,sha256=hlDdhKXY1mkWPBjEumPF4DDl4PC9dkSg8YqgdGPWFPY,79415 +sqlalchemy/sql/roles.py,sha256=GEDH55xG83_EuEioW5XcKwfdyloX58cu0VnrAHHsrok,7985 +sqlalchemy/sql/schema.py,sha256=xKZPqrNRoSs2va1UqIL4gfLQCbUhqoTMIvFVtSjaVNg,236616 +sqlalchemy/sql/selectable.py,sha256=hdNulF4P_gjeCWgdCQ26JjdqRyBzVnUSU0uwpkZ-LDQ,248672 +sqlalchemy/sql/sqltypes.py,sha256=8NUfIbgGPXHyyltklaWQsYeiu8pALL7K_lys8TMY5Fc,135722 +sqlalchemy/sql/traversals.py,sha256=15BjlLsxWm7-S_ZCOtnAybo2x938EH7ThDbNUE3pLcE,34688 +sqlalchemy/sql/type_api.py,sha256=p63dFjSbacFdQn8QcE9b2NxGQBOBpezJ4s5gdrO9arg,87277 +sqlalchemy/sql/util.py,sha256=GHEZEz76TBn7c-dUm6qiykDWkcIT724u0X7SkgRhW-k,49615 +sqlalchemy/sql/visitors.py,sha256=9RyCpmzkkzDCxBoEpMjZHGJGxxNidWrqW4sjLm_L_fI,37486 +sqlalchemy/testing/__init__.py,sha256=U0gCwvaiU7zPRdExE9IqoT0JrS2MQCA215c3EeyN14A,3256 +sqlalchemy/testing/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/assertions.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/assertsql.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/asyncio.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/config.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/engines.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/entities.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/exclusions.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/pickleable.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/profiling.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/provision.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/requirements.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/schema.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/util.cpython-37.pyc,, +sqlalchemy/testing/__pycache__/warnings.cpython-37.pyc,, +sqlalchemy/testing/assertions.py,sha256=3pg7WFQlyoEEAXBOZk4prY1T55jrNb3c_inikJilyEM,32444 +sqlalchemy/testing/assertsql.py,sha256=eYp5X6p4IhPK_xcDNtm5rVBv-4km9UYiNxMLdvuPJlQ,17333 +sqlalchemy/testing/asyncio.py,sha256=_gUdSw0onXWOe7lIdNGZ2vvlsK-zu_KznQ3extBr8v4,3965 +sqlalchemy/testing/config.py,sha256=smPmR2_MM9rzvjOs_ZVuEI28cb8l7NSP_ADehr6RFgA,12481 +sqlalchemy/testing/engines.py,sha256=lLSIGDhEG2YH0VM8l_J-5INSS7Q0m055qIclzwxi9oo,13888 +sqlalchemy/testing/entities.py,sha256=JfrkjtAS_JWKGL-yyYtOkiyEru4yrFBT_4gYma-Clqo,3471 +sqlalchemy/testing/exclusions.py,sha256=TjWrXtSNtrCQxmkF2nWm3ueBWBzg46KBpCC_bRp3hQA,12895 +sqlalchemy/testing/fixtures/__init__.py,sha256=AKttorBSiaYwg3m_cR2TJzRFgN1YJMiTcth_GfHn1K8,1226 +sqlalchemy/testing/fixtures/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/testing/fixtures/__pycache__/base.cpython-37.pyc,, +sqlalchemy/testing/fixtures/__pycache__/mypy.cpython-37.pyc,, +sqlalchemy/testing/fixtures/__pycache__/orm.cpython-37.pyc,, +sqlalchemy/testing/fixtures/__pycache__/sql.cpython-37.pyc,, +sqlalchemy/testing/fixtures/base.py,sha256=TvyZt7p9-re_6eLPO2HGkGsCNYIAsHgrGR5LGRFS1sw,12622 +sqlalchemy/testing/fixtures/mypy.py,sha256=2HauwkIOIvFWmO6jgq44OJJ_17f21DJWvBzzraM8aJk,13087 +sqlalchemy/testing/fixtures/orm.py,sha256=gYURL-1kdNZsDP2tq48Xbm5LsZA4TSR4rStZFy59UUY,6322 +sqlalchemy/testing/fixtures/sql.py,sha256=QkSV5BPYoSmHjo904bhgJzgmyJGmgV3RfJu8xrLyW-g,16403 +sqlalchemy/testing/pickleable.py,sha256=sE5abXG6sjAbQ67thkhd45PisuJwalESSWSI4Zjsn64,2988 +sqlalchemy/testing/plugin/__init__.py,sha256=cG2c4xiyW6CL9hwdBXRKC1v0_SEckcZZW5rfalPPWCY,253 +sqlalchemy/testing/plugin/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/testing/plugin/__pycache__/bootstrap.cpython-37.pyc,, +sqlalchemy/testing/plugin/__pycache__/plugin_base.cpython-37.pyc,, +sqlalchemy/testing/plugin/__pycache__/pytestplugin.cpython-37.pyc,, +sqlalchemy/testing/plugin/bootstrap.py,sha256=kzZvNqgAES8Q2Y0ScQ1CYKBZT2JGaoTpbXUL0qn_XJg,1736 +sqlalchemy/testing/plugin/plugin_base.py,sha256=79OfIX8aeS7PJgry8wuvMMHtBvkCC5miNkHULN1RWjA,22357 +sqlalchemy/testing/plugin/pytestplugin.py,sha256=WkDE508u_rTaCMH9t27gNsNFwYKBEQYyuS0fMfiTwk8,28491 +sqlalchemy/testing/profiling.py,sha256=DVcy2RvIXvf1f6L1OX7IkZHZdxURqlZG91wiML0Y6hk,10472 +sqlalchemy/testing/provision.py,sha256=-SG3P4bp-t28Ms6qzfAL03rPqlXhjwxbqPqtoe4uOmU,15204 +sqlalchemy/testing/requirements.py,sha256=hNWs_JOvlbXJTabol7n6qFYQnO5YSCC260Iv_cWuKZ8,56884 +sqlalchemy/testing/schema.py,sha256=UCYSoN-xYbXMDtK1nhNdcL0IGY-pQy6BBIdD7RUYKYY,6737 +sqlalchemy/testing/suite/__init__.py,sha256=w-m10jFbq5pEg9a1UxRO46mPtfe5SBeuyGV-yHIbuls,741 +sqlalchemy/testing/suite/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_cte.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_ddl.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_deprecations.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_dialect.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_insert.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_reflection.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_results.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_rowcount.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_select.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_sequence.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_types.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_unicode_ddl.cpython-37.pyc,, +sqlalchemy/testing/suite/__pycache__/test_update_delete.cpython-37.pyc,, +sqlalchemy/testing/suite/test_cte.py,sha256=foAV0X6LQ2Q-7I6VkfSpJiv2Pq82wMRI1jAMnhViRno,6662 +sqlalchemy/testing/suite/test_ddl.py,sha256=rkHgQvdt4SH6w5CR6DzQFtj2C_QiN1DJ9FRokcnXD7k,12420 +sqlalchemy/testing/suite/test_deprecations.py,sha256=DhzweNn4y8M6ZHnQEsO17z0ntZHpAQP9VPkz_KKX8JQ,5490 +sqlalchemy/testing/suite/test_dialect.py,sha256=tbyrFBPi9vjfhUkDrTHg5n1WNiTGZCsV5KXir0WWOOY,23648 +sqlalchemy/testing/suite/test_insert.py,sha256=9rgFol6F3vR-gbLDR_B7dsPM6OJvB6bO_6veoiR2cjA,19454 +sqlalchemy/testing/suite/test_reflection.py,sha256=zFf8G6e28BsILZk_Bt0bHBkAVOHbMB6xb7ufLreg9JQ,114580 +sqlalchemy/testing/suite/test_results.py,sha256=9X2WhQTkslm0lQsMaPziPkNi-dWBo-Ohs5K7QrhQKp8,17546 +sqlalchemy/testing/suite/test_rowcount.py,sha256=0cjWNS4CsfZmBJukn88KtIi6C-KVIyd64shwwkg9Oc4,8158 +sqlalchemy/testing/suite/test_select.py,sha256=_LSuUhkIM9PxsWHmmjpAKHdGPiuUAoA_aYjpkxBqbG0,64049 +sqlalchemy/testing/suite/test_sequence.py,sha256=Ksp7o88PTLxgWwJHJFqHe8O006dixljRjzwHRwO_jXs,10240 +sqlalchemy/testing/suite/test_types.py,sha256=zXTJP0rMAlYIHrUwESfvS_23TTo-BzL8VHFTXBAS1pw,70158 +sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=Zlvu4l574cRTfMYXoEec-ALgIQucYpGLQXvgityo4Rc,6330 +sqlalchemy/testing/suite/test_update_delete.py,sha256=8SnJlTOJhA8AQ_UwVqAumRIjvpMml1mFSt00vMpSnu8,4133 +sqlalchemy/testing/util.py,sha256=zPMDNeMh1tcXgWCLK8A5qH5ZGkLPA8Vqxy_rIOHMPI0,15109 +sqlalchemy/testing/warnings.py,sha256=mC8iK0YXuuYo6fpmfYopF6VJoa12o7_gsgbEKunPYQ4,1598 +sqlalchemy/types.py,sha256=TaiynMoDCeLbr-ZEkEcNSS7bqhmz5xEmUaDzLkaAe8o,3244 +sqlalchemy/util/__init__.py,sha256=DfcWdJ-qjP_K0zyk6rfnuxMhg9zylODiV6b6HPmR90I,8474 +sqlalchemy/util/__pycache__/__init__.cpython-37.pyc,, +sqlalchemy/util/__pycache__/_collections.cpython-37.pyc,, +sqlalchemy/util/__pycache__/_concurrency_py3k.cpython-37.pyc,, +sqlalchemy/util/__pycache__/_has_cy.cpython-37.pyc,, +sqlalchemy/util/__pycache__/_py_collections.cpython-37.pyc,, +sqlalchemy/util/__pycache__/compat.cpython-37.pyc,, +sqlalchemy/util/__pycache__/concurrency.cpython-37.pyc,, +sqlalchemy/util/__pycache__/deprecations.cpython-37.pyc,, +sqlalchemy/util/__pycache__/langhelpers.cpython-37.pyc,, +sqlalchemy/util/__pycache__/preloaded.cpython-37.pyc,, +sqlalchemy/util/__pycache__/queue.cpython-37.pyc,, +sqlalchemy/util/__pycache__/tool_support.cpython-37.pyc,, +sqlalchemy/util/__pycache__/topological.cpython-37.pyc,, +sqlalchemy/util/__pycache__/typing.cpython-37.pyc,, +sqlalchemy/util/_collections.py,sha256=MTetNkdk3299jkROxC6eEINaRu4gH6dcvG3mXG8hris,20868 +sqlalchemy/util/_concurrency_py3k.py,sha256=NZfK7tXncTiceFJ4Jm2diV1z3ZauDBWUZlqf2qfXmcA,9458 +sqlalchemy/util/_has_cy.py,sha256=-azchXDDoNCPGLFKQCTa16D6zC3EOztvNzf2jnQtwD8,1287 +sqlalchemy/util/_py_collections.py,sha256=zCCcVqzspCm_k5QrGC7ysoLYuFDeiiuspioHE0NTxjs,17255 +sqlalchemy/util/compat.py,sha256=WyFRFaRqX9s2JB_0yNfe5Wc1NUtalc08FFzS7KVBBiQ,9151 +sqlalchemy/util/concurrency.py,sha256=bcYwD5hjzi9lsHH0wR1gTkVRFT621z-82W99jEuMzx0,3412 +sqlalchemy/util/deprecations.py,sha256=fsbt7RWhTOGmgKo2zZoFYSaag3m9HN9r1H4vELFfcv4,12413 +sqlalchemy/util/langhelpers.py,sha256=0uKRWtelP_VQArS5a6Lei9iWXSLRaFO_VJg_Wmfffik,70674 +sqlalchemy/util/preloaded.py,sha256=v03avtAWRviCHUVg90Mu_mLJCmeXydNotORPpJkjWsc,6054 +sqlalchemy/util/queue.py,sha256=Ne8VFlS1b4ArZi1siBB8HeqUDHu7vqvacbhMVT4VeI8,10507 +sqlalchemy/util/tool_support.py,sha256=8I8lTYOQ-EEPYOdw0ghvuiSfKXhaqWDUrC795NBQOCw,6336 +sqlalchemy/util/topological.py,sha256=lZH3zvwzIQAJYlQCijX7sGbbvoKQssaBjbdOa-320v4,3571 +sqlalchemy/util/typing.py,sha256=H8jx79EbveEjY392zHizwglMfn1DUy_P11LJp4PJ5v4,23199 diff --git a/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/WHEEL b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/WHEEL new file mode 100644 index 0000000..ae1cd59 --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: false +Tag: cp37-cp37m-win_amd64 + diff --git a/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/top_level.txt b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/top_level.txt new file mode 100644 index 0000000..39fb2be --- /dev/null +++ b/venv/Lib/site-packages/SQLAlchemy-2.0.41.dist-info/top_level.txt @@ -0,0 +1 @@ +sqlalchemy diff --git a/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/INSTALLER b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/LICENSE.rst b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/LICENSE.rst new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.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/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/METADATA b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/METADATA new file mode 100644 index 0000000..647bfc8 --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/METADATA @@ -0,0 +1,126 @@ +Metadata-Version: 2.1 +Name: Werkzeug +Version: 2.2.3 +Summary: The comprehensive WSGI web application library. +Home-page: https://palletsprojects.com/p/werkzeug/ +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://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: 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 :: 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.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: MarkupSafe (>=2.1.1) +Provides-Extra: watchdog +Requires-Dist: watchdog ; 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/ +- Website: https://palletsprojects.com/p/werkzeug/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets diff --git a/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/RECORD b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/RECORD new file mode 100644 index 0000000..001c962 --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/RECORD @@ -0,0 +1,98 @@ +werkzeug/__init__.py,sha256=Hr0lQweC21HXPVBemSpBJUIzrbq2mn8h70J1h30QcqY,188 +werkzeug/_internal.py,sha256=4lwshe63pFlCo0h2IMcmvhbugA50QXQvfLD5VoY5c4Q,16271 +werkzeug/_reloader.py,sha256=hiP0z4bi6p_8UIJOtq7K0BV2dqCik5yztWLsDXeI_WE,14285 +werkzeug/datastructures.py,sha256=v2WYfs1rb1OuQgXyLripHQFwgodrfTNCd5P5f8n3ueA,97081 +werkzeug/datastructures.pyi,sha256=HRzDLc7A6qnwluhNqn6AT76CsLZIkAbVVqxn0AbfV-s,34506 +werkzeug/exceptions.py,sha256=8-KOXguQkOLoBUdN-7x_WyHT92TcAmjTWNwG4t8QYIg,26527 +werkzeug/formparser.py,sha256=DBRbbAnzspYUBzgfxPaZC7MjGAK_m5QTvdWoyvrhw4o,16516 +werkzeug/http.py,sha256=NqJjYCt8tKn2XOEKPApq4L3q8zb8YFq3GFOe5gsonI4,42776 +werkzeug/local.py,sha256=v-HEqr4bLpLHl4upCj97MOfUyCjW10Tp6mcNaFRFyew,22288 +werkzeug/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/security.py,sha256=7TVI0L62emBHAh-1RHB_KlwGYcE08pPCyU674Ho4aNE,4653 +werkzeug/serving.py,sha256=XCiHFbMCFCgecKycgajhF4rFsGoemeN0xW1eTQqNt-g,37558 +werkzeug/test.py,sha256=uMahfM81RqEN3d3Sp4SkN36Pi8oZpV6dTgFY0cW1_2c,48126 +werkzeug/testapp.py,sha256=RJhT_2JweNiMKe304N3bF1zaIeMpRx-CIMERdeydfTY,9404 +werkzeug/urls.py,sha256=Q9Si-eVh7yxk3rwkzrwGRm146FXVXgg9lBP3k0HUfVM,36600 +werkzeug/user_agent.py,sha256=WclZhpvgLurMF45hsioSbS75H1Zb4iMQGKN3_yZ2oKo,1420 +werkzeug/utils.py,sha256=BDX5_7OCMVgl-ib84bCEdBG5MVvrxaSlfdg7Cxh4ND0,25174 +werkzeug/wsgi.py,sha256=-VKI2iwCgLb-VToIZeBpdutkTETxy9HkIwgcFC5orkU,36060 +werkzeug/debug/__init__.py,sha256=wfJ2OmljsO5C0e0sXJpTUiG6bwGU6uHtFDDDMfJfQJk,18877 +werkzeug/debug/console.py,sha256=dechqiCtHfs0AQZWZofUC1S97tCuvwDgT0gdha5KwWM,6208 +werkzeug/debug/repr.py,sha256=vF3TLnYBohYr8V6Gz13PTJspQs42uv3gUJSzSbmHJBo,9472 +werkzeug/debug/tbtools.py,sha256=6iohJovtBSFRAcgX7_aRY4r3e19PLj3FavYB3RM4CmA,13263 +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/middleware/__init__.py,sha256=qfqgdT5npwG9ses3-FXQJf3aB95JYP1zchetH_T3PUw,500 +werkzeug/middleware/dispatcher.py,sha256=Fh_w-KyWnTSYF-Lfv5dimQ7THSS7afPAZMmvc4zF1gg,2580 +werkzeug/middleware/http_proxy.py,sha256=HE8VyhS7CR-E1O6_9b68huv8FLgGGR1DLYqkS3Xcp3Q,7558 +werkzeug/middleware/lint.py,sha256=1w_UVKkAwq5wjjtCcDCDZwhAhWzPSZ0aDyUmbjAEeXw,13952 +werkzeug/middleware/profiler.py,sha256=7pWYDYPC774S0-HYLkG3Uge58PGUMX7tWp_Cor3etvo,4883 +werkzeug/middleware/proxy_fix.py,sha256=l7LC_LDu0Yd4SvUxS5SFigAJMzcIOGm6LNKl9IXJBSU,6974 +werkzeug/middleware/shared_data.py,sha256=fXjrEkuqxUVLG1DLrOdQLc96QQdjftCBZ1oM5oK89h4,9528 +werkzeug/routing/__init__.py,sha256=HpvahY7WwkLdV4Cq3Bsc3GrqNon4u6t8-vhbb9E5o00,4819 +werkzeug/routing/converters.py,sha256=05bkekg64vLC6mqqK4ddBh589WH9yBsjtW8IJhdUBvw,6968 +werkzeug/routing/exceptions.py,sha256=RklUDL9ajOv2fTcRNj4pb18Bs4Y-GKk4rIeTSfsqkks,4737 +werkzeug/routing/map.py,sha256=XN4ZjzEF1SfMxtdov89SDE-1_U78KVnnobTfnHzqbmE,36757 +werkzeug/routing/matcher.py,sha256=6VvQYCCOjyj1JKUZKuAiVA_U1nXtvvJ70pSbBUdL_1k,7509 +werkzeug/routing/rules.py,sha256=3YsPpI9ZGcNmFiV2Go2Td1DvZ9ZdaMMnvGP1o17aMfc,31836 +werkzeug/sansio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/sansio/http.py,sha256=k3nREBfU-r8fXCfSTKQenys25q9bzUOvdY-OVGrqztA,5107 +werkzeug/sansio/multipart.py,sha256=vMZ85cvLD55clUTcTin2DtBv2GQRGh0_fExklnXKHoI,10055 +werkzeug/sansio/request.py,sha256=SiGcx2cz-l81TlCCrKrT2fePqC64hN8fSg5Ig6J6vRs,20175 +werkzeug/sansio/response.py,sha256=UTl-teQDDjovrZMkjj3ZQsHw-JtiFak5JfKEk1_vBYU,26026 +werkzeug/sansio/utils.py,sha256=EjbqdHdT-JZWgjUQaaWSgBUIRprXUkrsMQQqJlJHpVU,4847 +werkzeug/wrappers/__init__.py,sha256=kGyK7rOud3qCxll_jFyW15YarJhj1xtdf3ocx9ZheB8,120 +werkzeug/wrappers/request.py,sha256=XmpTThXytTdznbPJnIsfdoIAvdi-THzTJQ9DsvARhn4,24026 +werkzeug/wrappers/response.py,sha256=ii1IaN2eUfoB-tBqbn_46fCB_SVVL8Fu4qd6cu0AlEY,34963 +Werkzeug-2.2.3.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Werkzeug-2.2.3.dist-info/METADATA,sha256=TIyameVEp5p52N9E1mTWWabY6g1sB0Dm25vznZQeXPQ,4416 +Werkzeug-2.2.3.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 +Werkzeug-2.2.3.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 +Werkzeug-2.2.3.dist-info/RECORD,, +Werkzeug-2.2.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +werkzeug/debug/__pycache__/console.cpython-37.pyc,, +werkzeug/debug/__pycache__/repr.cpython-37.pyc,, +werkzeug/debug/__pycache__/tbtools.cpython-37.pyc,, +werkzeug/debug/__pycache__/__init__.cpython-37.pyc,, +werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc,, +werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc,, +werkzeug/middleware/__pycache__/lint.cpython-37.pyc,, +werkzeug/middleware/__pycache__/profiler.cpython-37.pyc,, +werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc,, +werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc,, +werkzeug/middleware/__pycache__/__init__.cpython-37.pyc,, +werkzeug/routing/__pycache__/converters.cpython-37.pyc,, +werkzeug/routing/__pycache__/exceptions.cpython-37.pyc,, +werkzeug/routing/__pycache__/map.cpython-37.pyc,, +werkzeug/routing/__pycache__/matcher.cpython-37.pyc,, +werkzeug/routing/__pycache__/rules.cpython-37.pyc,, +werkzeug/routing/__pycache__/__init__.cpython-37.pyc,, +werkzeug/sansio/__pycache__/http.cpython-37.pyc,, +werkzeug/sansio/__pycache__/multipart.cpython-37.pyc,, +werkzeug/sansio/__pycache__/request.cpython-37.pyc,, +werkzeug/sansio/__pycache__/response.cpython-37.pyc,, +werkzeug/sansio/__pycache__/utils.cpython-37.pyc,, +werkzeug/sansio/__pycache__/__init__.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/request.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/response.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc,, +werkzeug/__pycache__/datastructures.cpython-37.pyc,, +werkzeug/__pycache__/exceptions.cpython-37.pyc,, +werkzeug/__pycache__/formparser.cpython-37.pyc,, +werkzeug/__pycache__/http.cpython-37.pyc,, +werkzeug/__pycache__/local.cpython-37.pyc,, +werkzeug/__pycache__/security.cpython-37.pyc,, +werkzeug/__pycache__/serving.cpython-37.pyc,, +werkzeug/__pycache__/test.cpython-37.pyc,, +werkzeug/__pycache__/testapp.cpython-37.pyc,, +werkzeug/__pycache__/urls.cpython-37.pyc,, +werkzeug/__pycache__/user_agent.cpython-37.pyc,, +werkzeug/__pycache__/utils.cpython-37.pyc,, +werkzeug/__pycache__/wsgi.cpython-37.pyc,, +werkzeug/__pycache__/_internal.cpython-37.pyc,, +werkzeug/__pycache__/_reloader.cpython-37.pyc,, +werkzeug/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/WHEEL b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/WHEEL new file mode 100644 index 0000000..57e3d84 --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.38.4) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/top_level.txt b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/top_level.txt new file mode 100644 index 0000000..6fe8da8 --- /dev/null +++ b/venv/Lib/site-packages/Werkzeug-2.2.3.dist-info/top_level.txt @@ -0,0 +1 @@ +werkzeug diff --git a/venv/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc b/venv/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7030f0e9468e760281d79dc15111f67d2dc63deb GIT binary patch literal 311 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 KdUn2->;D5ys$f3= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/INSTALLER b/venv/Lib/site-packages/alembic-1.12.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/LICENSE b/venv/Lib/site-packages/alembic-1.12.1.dist-info/LICENSE new file mode 100644 index 0000000..74b9ce3 --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright 2009-2023 Michael Bayer. + +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. \ No newline at end of file diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/METADATA b/venv/Lib/site-packages/alembic-1.12.1.dist-info/METADATA new file mode 100644 index 0000000..0d01974 --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/METADATA @@ -0,0 +1,141 @@ +Metadata-Version: 2.1 +Name: alembic +Version: 1.12.1 +Summary: A database migration tool for SQLAlchemy. +Home-page: https://alembic.sqlalchemy.org +Author: Mike Bayer +Author-email: mike_mp@zzzcomputing.com +License: MIT +Project-URL: Documentation, https://alembic.sqlalchemy.org/en/latest/ +Project-URL: Changelog, https://alembic.sqlalchemy.org/en/latest/changelog.html +Project-URL: Source, https://github.com/sqlalchemy/alembic/ +Project-URL: Issue Tracker, https://github.com/sqlalchemy/alembic/issues/ +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Environment :: Console +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Database :: Front-Ends +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE +Requires-Dist: SQLAlchemy >=1.3.0 +Requires-Dist: Mako +Requires-Dist: typing-extensions >=4 +Requires-Dist: importlib-metadata ; python_version < "3.9" +Requires-Dist: importlib-resources ; python_version < "3.9" +Provides-Extra: tz +Requires-Dist: python-dateutil ; extra == 'tz' + +Alembic is a database migrations tool written by the author +of `SQLAlchemy `_. A migrations tool +offers the following functionality: + +* Can emit ALTER statements to a database in order to change + the structure of tables and other constructs +* Provides a system whereby "migration scripts" may be constructed; + each script indicates a particular series of steps that can "upgrade" a + target database to a new version, and optionally a series of steps that can + "downgrade" similarly, doing the same steps in reverse. +* Allows the scripts to execute in some sequential manner. + +The goals of Alembic are: + +* Very open ended and transparent configuration and operation. A new + Alembic environment is generated from a set of templates which is selected + among a set of options when setup first occurs. The templates then deposit a + series of scripts that define fully how database connectivity is established + and how migration scripts are invoked; the migration scripts themselves are + generated from a template within that series of scripts. The scripts can + then be further customized to define exactly how databases will be + interacted with and what structure new migration files should take. +* Full support for transactional DDL. The default scripts ensure that all + migrations occur within a transaction - for those databases which support + this (Postgresql, Microsoft SQL Server), migrations can be tested with no + need to manually undo changes upon failure. +* Minimalist script construction. Basic operations like renaming + tables/columns, adding/removing columns, changing column attributes can be + performed through one line commands like alter_column(), rename_table(), + add_constraint(). There is no need to recreate full SQLAlchemy Table + structures for simple operations like these - the functions themselves + generate minimalist schema structures behind the scenes to achieve the given + DDL sequence. +* "auto generation" of migrations. While real world migrations are far more + complex than what can be automatically determined, Alembic can still + eliminate the initial grunt work in generating new migration directives + from an altered schema. The ``--autogenerate`` feature will inspect the + current status of a database using SQLAlchemy's schema inspection + capabilities, compare it to the current state of the database model as + specified in Python, and generate a series of "candidate" migrations, + rendering them into a new migration script as Python directives. The + developer then edits the new file, adding additional directives and data + migrations as needed, to produce a finished migration. Table and column + level changes can be detected, with constraints and indexes to follow as + well. +* Full support for migrations generated as SQL scripts. Those of us who + work in corporate environments know that direct access to DDL commands on a + production database is a rare privilege, and DBAs want textual SQL scripts. + Alembic's usage model and commands are oriented towards being able to run a + series of migrations into a textual output file as easily as it runs them + directly to a database. Care must be taken in this mode to not invoke other + operations that rely upon in-memory SELECTs of rows - Alembic tries to + provide helper constructs like bulk_insert() to help with data-oriented + operations that are compatible with script-based DDL. +* Non-linear, dependency-graph versioning. Scripts are given UUID + identifiers similarly to a DVCS, and the linkage of one script to the next + is achieved via human-editable markers within the scripts themselves. + The structure of a set of migration files is considered as a + directed-acyclic graph, meaning any migration file can be dependent + on any other arbitrary set of migration files, or none at + all. Through this open-ended system, migration files can be organized + into branches, multiple roots, and mergepoints, without restriction. + Commands are provided to produce new branches, roots, and merges of + branches automatically. +* Provide a library of ALTER constructs that can be used by any SQLAlchemy + application. The DDL constructs build upon SQLAlchemy's own DDLElement base + and can be used standalone by any application or script. +* At long last, bring SQLite and its inability to ALTER things into the fold, + but in such a way that SQLite's very special workflow needs are accommodated + in an explicit way that makes the most of a bad situation, through the + concept of a "batch" migration, where multiple changes to a table can + be batched together to form a series of instructions for a single, subsequent + "move-and-copy" workflow. You can even use "move-and-copy" workflow for + other databases, if you want to recreate a table in the background + on a busy system. + +Documentation and status of Alembic is at https://alembic.sqlalchemy.org/ + +The SQLAlchemy Project +====================== + +Alembic is part of the `SQLAlchemy Project `_ and +adheres to the same standards and conventions as the core project. + +Development / Bug reporting / Pull requests +___________________________________________ + +Please refer to the +`SQLAlchemy Community Guide `_ for +guidelines on coding and participating in this project. + +Code of Conduct +_______________ + +Above all, SQLAlchemy places great emphasis on polite, thoughtful, and +constructive communication between users and developers. +Please see our current Code of Conduct at +`Code of Conduct `_. + +License +======= + +Alembic is distributed under the `MIT license +`_. diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/RECORD b/venv/Lib/site-packages/alembic-1.12.1.dist-info/RECORD new file mode 100644 index 0000000..1ca92af --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/RECORD @@ -0,0 +1,148 @@ +../../Scripts/alembic.exe,sha256=2S_vn6fxm7klAP1BCNip1TfE0NH8d61p4N_hb77tHTo,108417 +alembic-1.12.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +alembic-1.12.1.dist-info/LICENSE,sha256=soUmiob0QW6vTQWyrjiAwVb3xZqPk1pAK8BW6vszrwg,1058 +alembic-1.12.1.dist-info/METADATA,sha256=D9-LeKL0unLPg2JKmlFMB5NAxt9N9y-8oVEGOUHbQnU,7306 +alembic-1.12.1.dist-info/RECORD,, +alembic-1.12.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92 +alembic-1.12.1.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48 +alembic-1.12.1.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8 +alembic/__init__.py,sha256=gczqgDgBRw3aV70aNeH6WGu0WdASQf_YiChV12qCRRI,75 +alembic/__main__.py,sha256=373m7-TBh72JqrSMYviGrxCHZo-cnweM8AGF8A22PmY,78 +alembic/__pycache__/__init__.cpython-37.pyc,, +alembic/__pycache__/__main__.cpython-37.pyc,, +alembic/__pycache__/command.cpython-37.pyc,, +alembic/__pycache__/config.cpython-37.pyc,, +alembic/__pycache__/context.cpython-37.pyc,, +alembic/__pycache__/environment.cpython-37.pyc,, +alembic/__pycache__/migration.cpython-37.pyc,, +alembic/__pycache__/op.cpython-37.pyc,, +alembic/autogenerate/__init__.py,sha256=4IHgWH89pForRq-yCDZhGjjVtsfGX5ECWNPuUs8nGUk,351 +alembic/autogenerate/__pycache__/__init__.cpython-37.pyc,, +alembic/autogenerate/__pycache__/api.cpython-37.pyc,, +alembic/autogenerate/__pycache__/compare.cpython-37.pyc,, +alembic/autogenerate/__pycache__/render.cpython-37.pyc,, +alembic/autogenerate/__pycache__/rewriter.cpython-37.pyc,, +alembic/autogenerate/api.py,sha256=MNn0Xtmj44aMFjfiR0LMkbxOynHyiyaRBnrj5EkImm4,21967 +alembic/autogenerate/compare.py,sha256=gSCjxrkQAl0rJD6o9Ln8wNxGVNU6FrWzKZYVkH5Tmac,47042 +alembic/autogenerate/render.py,sha256=Fik2aPZEIxOlTCrBd0UiPxnX5SFG__CvfXqMWoJr6lw,34475 +alembic/autogenerate/rewriter.py,sha256=Osba8GFVeqiX1ypGJW7Axt0ui2EROlaFtVZdMFbhzZ0,7384 +alembic/command.py,sha256=ze4pYvKpB-FtF8rduY6F6n3XHqeA-15iXaaEDeNHVzI,21588 +alembic/config.py,sha256=68e1nmYU5Nfh0bNRqRWUygSilDl1p0G_U1zZ8ifgmD8,21931 +alembic/context.py,sha256=hK1AJOQXJ29Bhn276GYcosxeG7pC5aZRT5E8c4bMJ4Q,195 +alembic/context.pyi,sha256=FLsT0be_vO_ozlC05EJkWR5olDPoTVq-7tgtoM5wSAw,31463 +alembic/ddl/__init__.py,sha256=xXr1W6PePe0gCLwR42ude0E6iru9miUFc1fCeQN4YP8,137 +alembic/ddl/__pycache__/__init__.cpython-37.pyc,, +alembic/ddl/__pycache__/base.cpython-37.pyc,, +alembic/ddl/__pycache__/impl.cpython-37.pyc,, +alembic/ddl/__pycache__/mssql.cpython-37.pyc,, +alembic/ddl/__pycache__/mysql.cpython-37.pyc,, +alembic/ddl/__pycache__/oracle.cpython-37.pyc,, +alembic/ddl/__pycache__/postgresql.cpython-37.pyc,, +alembic/ddl/__pycache__/sqlite.cpython-37.pyc,, +alembic/ddl/base.py,sha256=cCY3NldMRggrKd9bZ0mFRBE9GNDaAy0UJcM3ey4Utgw,9638 +alembic/ddl/impl.py,sha256=Z3GpNM2KwBpfl1UCam1YsYbSd0mQzRigOKQhUCLIPgE,25564 +alembic/ddl/mssql.py,sha256=0k26xnUSZNj3qCHEMzRFbaWgUzKcV07I3_-Ns47VhO0,14105 +alembic/ddl/mysql.py,sha256=ff8OE0zQ8YYjAgltBbtjQkDR-g9z65DNeFjEMm4sX6c,16675 +alembic/ddl/oracle.py,sha256=E0VaZaUM_5mwqNiJVA3zOAK-cuHVVIv_-NmUbH1JuGQ,6097 +alembic/ddl/postgresql.py,sha256=aO8pcVN5ycw1wG2m1RRt8dQUD1KgRa6T4rSzg9FPCkU,26457 +alembic/ddl/sqlite.py,sha256=9q7NAxyeFwn9kWwQSc9RLeMFSos8waM7x9lnXdByh44,7613 +alembic/environment.py,sha256=MM5lPayGT04H3aeng1H7GQ8HEAs3VGX5yy6mDLCPLT4,43 +alembic/migration.py,sha256=MV6Fju6rZtn2fTREKzXrCZM6aIBGII4OMZFix0X-GLs,41 +alembic/op.py,sha256=flHtcsVqOD-ZgZKK2pv-CJ5Cwh-KJ7puMUNXzishxLw,167 +alembic/op.pyi,sha256=ldQBwAfzm_-ZsC3nizMuGoD34hjMKb4V_-Q1rR8q8LI,48591 +alembic/operations/__init__.py,sha256=e0KQSZAgLpTWvyvreB7DWg7RJV_MWSOPVDgCqsd2FzY,318 +alembic/operations/__pycache__/__init__.cpython-37.pyc,, +alembic/operations/__pycache__/base.cpython-37.pyc,, +alembic/operations/__pycache__/batch.cpython-37.pyc,, +alembic/operations/__pycache__/ops.cpython-37.pyc,, +alembic/operations/__pycache__/schemaobj.cpython-37.pyc,, +alembic/operations/__pycache__/toimpl.cpython-37.pyc,, +alembic/operations/base.py,sha256=2so4KisDNuOLw0CRiZqorIHrhuenpVoFbn3B0sNvDic,72471 +alembic/operations/batch.py,sha256=uMvGJDlcTs0GSHasg4Gsdv1YcXeLOK_1lkRl3jk1ezY,26954 +alembic/operations/ops.py,sha256=aP9Uz36k98O_Y-njKIAifyvyhi0g2zU6_igKMos91_s,93539 +alembic/operations/schemaobj.py,sha256=-tWad8pgWUNWucbpTnPuFK_EEl913C0RADJhlBnrjhc,9393 +alembic/operations/toimpl.py,sha256=K8nUmojtL94tyLSWdDD-e94IbghZ19k55iBIMvzMm5E,6993 +alembic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +alembic/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +alembic/runtime/__pycache__/__init__.cpython-37.pyc,, +alembic/runtime/__pycache__/environment.cpython-37.pyc,, +alembic/runtime/__pycache__/migration.cpython-37.pyc,, +alembic/runtime/environment.py,sha256=qaerrw5jB7zYliNnCvIziaju4-tvQ451MuGW8PHnfvw,41019 +alembic/runtime/migration.py,sha256=5UtTI_T0JtYzt6ZpeUhannMZOvXWiEymKFOpeCefaPY,49407 +alembic/script/__init__.py,sha256=lSj06O391Iy5avWAiq8SPs6N8RBgxkSPjP8wpXcNDGg,100 +alembic/script/__pycache__/__init__.cpython-37.pyc,, +alembic/script/__pycache__/base.cpython-37.pyc,, +alembic/script/__pycache__/revision.cpython-37.pyc,, +alembic/script/__pycache__/write_hooks.cpython-37.pyc,, +alembic/script/base.py,sha256=90SpT8wyTMTUuS0Svsy5YIoqJSrR-6CtYSzStmRvFT0,37174 +alembic/script/revision.py,sha256=DE0nwvDOzdFo843brvnhs1DfP0jRC5EVQHrNihC7PUQ,61471 +alembic/script/write_hooks.py,sha256=Nqj4zz3sm97kAPOpK1m-i2znJchiybO_TWT50oljlJw,4917 +alembic/templates/async/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58 +alembic/templates/async/__pycache__/env.cpython-37.pyc,, +alembic/templates/async/alembic.ini.mako,sha256=k3IyGDG15Rp1JDweC0TiDauaKYNvj3clrGfhw6oV6MI,3505 +alembic/templates/async/env.py,sha256=zbOCf3Y7w2lg92hxSwmG1MM_7y56i_oRH4AKp0pQBYo,2389 +alembic/templates/async/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635 +alembic/templates/generic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38 +alembic/templates/generic/__pycache__/env.cpython-37.pyc,, +alembic/templates/generic/alembic.ini.mako,sha256=gZWFmH2A9sP0i7cxEDhJFkjGtTKUXaVna8QAbIaRqxk,3614 +alembic/templates/generic/env.py,sha256=TLRWOVW3Xpt_Tpf8JFzlnoPn_qoUu8UV77Y4o9XD6yI,2103 +alembic/templates/generic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635 +alembic/templates/multidb/README,sha256=dWLDhnBgphA4Nzb7sNlMfCS3_06YqVbHhz-9O5JNqyI,606 +alembic/templates/multidb/__pycache__/env.cpython-37.pyc,, +alembic/templates/multidb/alembic.ini.mako,sha256=j_Y0yuZVoHy7sTPgSPd8DmbT2ItvAdWs7trYZSOmFnw,3708 +alembic/templates/multidb/env.py,sha256=6zNjnW8mXGUk7erTsAvrfhvqoczJ-gagjVq1Ypg2YIQ,4230 +alembic/templates/multidb/script.py.mako,sha256=N06nMtNSwHkgl0EBXDyMt8njp9tlOesR583gfq21nbY,1090 +alembic/testing/__init__.py,sha256=kOxOh5nwmui9d-_CCq9WA4Udwy7ITjm453w74CTLZDo,1159 +alembic/testing/__pycache__/__init__.cpython-37.pyc,, +alembic/testing/__pycache__/assertions.cpython-37.pyc,, +alembic/testing/__pycache__/env.cpython-37.pyc,, +alembic/testing/__pycache__/fixtures.cpython-37.pyc,, +alembic/testing/__pycache__/requirements.cpython-37.pyc,, +alembic/testing/__pycache__/schemacompare.cpython-37.pyc,, +alembic/testing/__pycache__/util.cpython-37.pyc,, +alembic/testing/__pycache__/warnings.cpython-37.pyc,, +alembic/testing/assertions.py,sha256=1CbJk8c8-WO9eJ0XJ0jJvMsNRLUrXV41NOeIJUAlOBk,5015 +alembic/testing/env.py,sha256=zJacVb_z6uLs2U1TtkmnFH9P3_F-3IfYbVv4UEPOvfo,10754 +alembic/testing/fixtures.py,sha256=NyP4wE_dFN9ZzSGiBagRu1cdzkka03nwJYJYHYrrkSY,9112 +alembic/testing/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +alembic/testing/plugin/__pycache__/__init__.cpython-37.pyc,, +alembic/testing/plugin/__pycache__/bootstrap.cpython-37.pyc,, +alembic/testing/plugin/bootstrap.py,sha256=9C6wtjGrIVztZ928w27hsQE0KcjDLIUtUN3dvZKsMVk,50 +alembic/testing/requirements.py,sha256=WByOiJxn2crazIXPq6-0cfqV95cfd9vP_ZQ1Cf2l8hY,4841 +alembic/testing/schemacompare.py,sha256=7_4_0Y4UvuMiZ66pz1RC_P8Z1kYOP-R4Y5qUcNmcMKA,4535 +alembic/testing/suite/__init__.py,sha256=MvE7-hwbaVN1q3NM-ztGxORU9dnIelUCINKqNxewn7Y,288 +alembic/testing/suite/__pycache__/__init__.cpython-37.pyc,, +alembic/testing/suite/__pycache__/_autogen_fixtures.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_autogen_comments.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_autogen_computed.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_autogen_diffs.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_autogen_fks.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_autogen_identity.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_environment.cpython-37.pyc,, +alembic/testing/suite/__pycache__/test_op.cpython-37.pyc,, +alembic/testing/suite/_autogen_fixtures.py,sha256=cDq1pmzHe15S6dZPGNC6sqFaCQ3hLT_oPV2IDigUGQ0,9880 +alembic/testing/suite/test_autogen_comments.py,sha256=aEGqKUDw4kHjnDk298aoGcQvXJWmZXcIX_2FxH4cJK8,6283 +alembic/testing/suite/test_autogen_computed.py,sha256=qJeBpc8urnwTFvbwWrSTIbHVkRUuCXP-dKaNbUK2U2U,6077 +alembic/testing/suite/test_autogen_diffs.py,sha256=T4SR1n_kmcOKYhR4W1-dA0e5sddJ69DSVL2HW96kAkE,8394 +alembic/testing/suite/test_autogen_fks.py,sha256=AqFmb26Buex167HYa9dZWOk8x-JlB1OK3bwcvvjDFaU,32927 +alembic/testing/suite/test_autogen_identity.py,sha256=kcuqngG7qXAKPJDX4U8sRzPKHEJECHuZ0DtuaS6tVkk,5824 +alembic/testing/suite/test_environment.py,sha256=w9F0xnLEbALeR8k6_-Tz6JHvy91IqiTSypNasVzXfZQ,11877 +alembic/testing/suite/test_op.py,sha256=2XQCdm_NmnPxHGuGj7hmxMzIhKxXNotUsKdACXzE1mM,1343 +alembic/testing/util.py,sha256=CQrcQDA8fs_7ME85z5ydb-Bt70soIIID-qNY1vbR2dg,3350 +alembic/testing/warnings.py,sha256=RxA7x_8GseANgw07Us8JN_1iGbANxaw6_VitX2ZGQH4,1078 +alembic/util/__init__.py,sha256=cPF_jjFx7YRBByHHDqW3wxCIHsqnGfncEr_i238aduY,1202 +alembic/util/__pycache__/__init__.cpython-37.pyc,, +alembic/util/__pycache__/compat.cpython-37.pyc,, +alembic/util/__pycache__/editor.cpython-37.pyc,, +alembic/util/__pycache__/exc.cpython-37.pyc,, +alembic/util/__pycache__/langhelpers.cpython-37.pyc,, +alembic/util/__pycache__/messaging.cpython-37.pyc,, +alembic/util/__pycache__/pyfiles.cpython-37.pyc,, +alembic/util/__pycache__/sqla_compat.cpython-37.pyc,, +alembic/util/compat.py,sha256=WN8jPPFB9ri_uuEM1HEaN1ak3RJc_H3x8NqvtFkoXuM,2279 +alembic/util/editor.py,sha256=JIz6_BdgV8_oKtnheR6DZoB7qnrHrlRgWjx09AsTsUw,2546 +alembic/util/exc.py,sha256=KQTru4zcgAmN4IxLMwLFS56XToUewaXB7oOLcPNjPwg,98 +alembic/util/langhelpers.py,sha256=ZFGyGygHRbztOeajpajppyhd-Gp4PB5slMuvCFVrnmg,8591 +alembic/util/messaging.py,sha256=B6T-loMhIOY3OTbG47Ywp1Df9LZn18PgjwpwLrD1VNg,3042 +alembic/util/pyfiles.py,sha256=95J01FChN0j2uP3p72mjaOQvh5wC6XbdGtTDK8oEzsQ,3373 +alembic/util/sqla_compat.py,sha256=94MHlkj43y-QQySz5dCUiJUNOPr3BF9TQ_BrP6ey-8w,18906 diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/WHEEL b/venv/Lib/site-packages/alembic-1.12.1.dist-info/WHEEL new file mode 100644 index 0000000..7e68873 --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.41.2) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/entry_points.txt b/venv/Lib/site-packages/alembic-1.12.1.dist-info/entry_points.txt new file mode 100644 index 0000000..5945268 --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +alembic = alembic.config:main diff --git a/venv/Lib/site-packages/alembic-1.12.1.dist-info/top_level.txt b/venv/Lib/site-packages/alembic-1.12.1.dist-info/top_level.txt new file mode 100644 index 0000000..b5bd98d --- /dev/null +++ b/venv/Lib/site-packages/alembic-1.12.1.dist-info/top_level.txt @@ -0,0 +1 @@ +alembic diff --git a/venv/Lib/site-packages/alembic/__init__.py b/venv/Lib/site-packages/alembic/__init__.py new file mode 100644 index 0000000..c5870fb --- /dev/null +++ b/venv/Lib/site-packages/alembic/__init__.py @@ -0,0 +1,6 @@ +import sys + +from . import context +from . import op + +__version__ = "1.12.1" diff --git a/venv/Lib/site-packages/alembic/__main__.py b/venv/Lib/site-packages/alembic/__main__.py new file mode 100644 index 0000000..af1b8e8 --- /dev/null +++ b/venv/Lib/site-packages/alembic/__main__.py @@ -0,0 +1,4 @@ +from .config import main + +if __name__ == "__main__": + main(prog="alembic") diff --git a/venv/Lib/site-packages/alembic/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..461a714b20253d780ca56030d8dff96c72d984dd GIT binary patch literal 274 zcmXwzzfQw25QqII4H2~Oz(@uHiNu0Xg;+r>-6Bg?Y8$ZP#8J+TC~w3od1dM=FmWC@ z>Aw3;_Z#kMvpFYN+f02te=(FtY`8*bqNyV-(M)qk2i7v0JVWO#M_;v>raMyR zCrp#q6GfIZo+&>D^BGW?pT6?Cs++1VSCPXJBAGeH<_r-pq+HAl){jztletKTgx{UI z7YD$TaAx$27urA{{3IZB@8+_(ZSKUI>!25l85i+l_X2D%*Hfo@41nmI8TMA)NNGnK Yq^zc6EFK2056*1UpO7O8wx(DDFLQg&*C*uUFrG*6@9TI z?d+SPv8B0o()ip6QL+&EQd)2aqsnNAq1(1qo~huEri%<$iq%U8LVS|gpzudOJGJJg z1Tk?7K1_jYNc|WFo<`Zh&FW$G$d6X0o=@N>{%Q_9nGtRWsd_Xd{(tuV{K(z#o|`8Z P^vS}e{F-W{Icw-IpX5hu literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/__pycache__/command.cpython-37.pyc b/venv/Lib/site-packages/alembic/__pycache__/command.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..698e7232050aa185b3da71691bdb80e5c5b76c14 GIT binary patch literal 17682 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/__pycache__/environment.cpython-37.pyc b/venv/Lib/site-packages/alembic/__pycache__/environment.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e27cf9c890ed6aef335fe1694ebbc18685d771a8 GIT binary patch literal 209 zcmZ?b<>g`k0y~!E3~eC&7{q}ACLqHBh>LlEL<&O+V-7U>eoRVg zadt_5K}>N;VtT5Ak%5tEOj=H2adu1@(1;kH%%qs&%#u{yg2d!(pn~F<#GKUJq|9V} ZBn$KkDsOSvg`k0y~!E3{4>Y7{q}ACLqHBh>LlEL<&O+V-707WA=SO5S3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/__pycache__/op.cpython-37.pyc b/venv/Lib/site-packages/alembic/__pycache__/op.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..243cb36b319b6517122abb3fa0b9064819d7d266 GIT binary patch literal 276 zcmX|5Jxc>Y5Z%38RD!|UF6|XY3D}4PvG${|I~I<;-7y}wceCtl4pZlkXeIuoYpwhX zR?aEOgPAuE-aOvzbUG1?WolkNn7;xR>)%6NH3q`Kbw@BNPqVwS&SqO;q@RubcjG<*?L_ z`U8iC`BQ{3zx=JAdvm4M974)LiybNpR7doRqF%vlak02m&m2~(4%$xLRi&aT!kO2m cW&3)mTf22rvzU1Gx`WOv@nVcIdNm&OMo19bZyQ;G2H4cZKjdH9)suh0 zlOL?R2h+O8195ttP=CN#nMr!Wy1|H3659XarDNG(bc*{Z$I779Jd+Ghg)JmsVhMD z@Ci1;V&c744&EJF$85h|fn(*8s|EOgVz(7{+W6r?o2MJrF6{3d2<7|<-i&Zy9w!Ie zgg3(Yi#3Ut)JxY(4`rLR|6nq2<=*P;qD@GCNhzU1ZirM#kRi`&u~ zl-_7sfn7P>Q0w>tPG=XhOFFN)UC|Aw4Sf)=)Z)p`8eXn&f~C9$`6|jOUpu`31$f6W cWlSjH7&~u1w)wTh8?E8SKZqTp4CDX(5As{1mjD0& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/autogenerate/__pycache__/api.cpython-37.pyc b/venv/Lib/site-packages/alembic/autogenerate/__pycache__/api.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f044aa8e33ffb2e482573e12fa66cd8a323d25c GIT binary patch literal 16504 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/autogenerate/__pycache__/render.cpython-37.pyc b/venv/Lib/site-packages/alembic/autogenerate/__pycache__/render.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16331caad7c246da38e6b1cbb08bc8cd4b5599cc GIT binary patch literal 26661 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 xYo==jKn(yr1#X>xo1{{bB+P#XXM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/autogenerate/__pycache__/rewriter.cpython-37.pyc b/venv/Lib/site-packages/alembic/autogenerate/__pycache__/rewriter.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49dc2968ccca2bf96dd4d1dfed6f9922ced791f8 GIT binary patch literal 6662 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 RcG1`$y>m1k>!b0~zX0z23LgLf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/autogenerate/api.py b/venv/Lib/site-packages/alembic/autogenerate/api.py new file mode 100644 index 0000000..7282487 --- /dev/null +++ b/venv/Lib/site-packages/alembic/autogenerate/api.py @@ -0,0 +1,647 @@ +from __future__ import annotations + +import contextlib +from typing import Any +from typing import Dict +from typing import Iterator +from typing import List +from typing import Optional +from typing import Sequence +from typing import Set +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import inspect + +from . import compare +from . import render +from .. import util +from ..operations import ops + +"""Provide the 'autogenerate' feature which can produce migration operations +automatically.""" + +if TYPE_CHECKING: + from sqlalchemy.engine import Connection + from sqlalchemy.engine import Dialect + from sqlalchemy.engine import Inspector + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import SchemaItem + + from ..config import Config + from ..operations.ops import DowngradeOps + from ..operations.ops import MigrationScript + from ..operations.ops import UpgradeOps + from ..runtime.environment import NameFilterParentNames + from ..runtime.environment import NameFilterType + from ..runtime.environment import ProcessRevisionDirectiveFn + from ..runtime.environment import RenderItemFn + from ..runtime.migration import MigrationContext + from ..script.base import Script + from ..script.base import ScriptDirectory + from ..script.revision import _GetRevArg + + +def compare_metadata(context: MigrationContext, metadata: MetaData) -> Any: + """Compare a database schema to that given in a + :class:`~sqlalchemy.schema.MetaData` instance. + + The database connection is presented in the context + of a :class:`.MigrationContext` object, which + provides database connectivity as well as optional + comparison functions to use for datatypes and + server defaults - see the "autogenerate" arguments + at :meth:`.EnvironmentContext.configure` + for details on these. + + The return format is a list of "diff" directives, + each representing individual differences:: + + from alembic.migration import MigrationContext + from alembic.autogenerate import compare_metadata + from sqlalchemy import ( + create_engine, + MetaData, + Column, + Integer, + String, + Table, + text, + ) + import pprint + + engine = create_engine("sqlite://") + + with engine.begin() as conn: + conn.execute( + text( + ''' + create table foo ( + id integer not null primary key, + old_data varchar, + x integer + ) + ''' + ) + ) + conn.execute(text("create table bar (data varchar)")) + + metadata = MetaData() + Table( + "foo", + metadata, + Column("id", Integer, primary_key=True), + Column("data", Integer), + Column("x", Integer, nullable=False), + ) + Table("bat", metadata, Column("info", String)) + + mc = MigrationContext.configure(engine.connect()) + + diff = compare_metadata(mc, metadata) + pprint.pprint(diff, indent=2, width=20) + + Output:: + + [ + ( + "add_table", + Table( + "bat", + MetaData(), + Column("info", String(), table=), + schema=None, + ), + ), + ( + "remove_table", + Table( + "bar", + MetaData(), + Column("data", VARCHAR(), table=), + schema=None, + ), + ), + ( + "add_column", + None, + "foo", + Column("data", Integer(), table=), + ), + [ + ( + "modify_nullable", + None, + "foo", + "x", + { + "existing_comment": None, + "existing_server_default": False, + "existing_type": INTEGER(), + }, + True, + False, + ) + ], + ( + "remove_column", + None, + "foo", + Column("old_data", VARCHAR(), table=), + ), + ] + + :param context: a :class:`.MigrationContext` + instance. + :param metadata: a :class:`~sqlalchemy.schema.MetaData` + instance. + + .. seealso:: + + :func:`.produce_migrations` - produces a :class:`.MigrationScript` + structure based on metadata comparison. + + """ + + migration_script = produce_migrations(context, metadata) + return migration_script.upgrade_ops.as_diffs() + + +def produce_migrations( + context: MigrationContext, metadata: MetaData +) -> MigrationScript: + """Produce a :class:`.MigrationScript` structure based on schema + comparison. + + This function does essentially what :func:`.compare_metadata` does, + but then runs the resulting list of diffs to produce the full + :class:`.MigrationScript` object. For an example of what this looks like, + see the example in :ref:`customizing_revision`. + + .. seealso:: + + :func:`.compare_metadata` - returns more fundamental "diff" + data from comparing a schema. + + """ + + autogen_context = AutogenContext(context, metadata=metadata) + + migration_script = ops.MigrationScript( + rev_id=None, + upgrade_ops=ops.UpgradeOps([]), + downgrade_ops=ops.DowngradeOps([]), + ) + + compare._populate_migration_script(autogen_context, migration_script) + + return migration_script + + +def render_python_code( + up_or_down_op: Union[UpgradeOps, DowngradeOps], + sqlalchemy_module_prefix: str = "sa.", + alembic_module_prefix: str = "op.", + render_as_batch: bool = False, + imports: Sequence[str] = (), + render_item: Optional[RenderItemFn] = None, + migration_context: Optional[MigrationContext] = None, + user_module_prefix: Optional[str] = None, +) -> str: + """Render Python code given an :class:`.UpgradeOps` or + :class:`.DowngradeOps` object. + + This is a convenience function that can be used to test the + autogenerate output of a user-defined :class:`.MigrationScript` structure. + + :param up_or_down_op: :class:`.UpgradeOps` or :class:`.DowngradeOps` object + :param sqlalchemy_module_prefix: module prefix for SQLAlchemy objects + :param alembic_module_prefix: module prefix for Alembic constructs + :param render_as_batch: use "batch operations" style for rendering + :param imports: sequence of import symbols to add + :param render_item: callable to render items + :param migration_context: optional :class:`.MigrationContext` + :param user_module_prefix: optional string prefix for user-defined types + + .. versionadded:: 1.11.0 + + """ + opts = { + "sqlalchemy_module_prefix": sqlalchemy_module_prefix, + "alembic_module_prefix": alembic_module_prefix, + "render_item": render_item, + "render_as_batch": render_as_batch, + "user_module_prefix": user_module_prefix, + } + + if migration_context is None: + from ..runtime.migration import MigrationContext + from sqlalchemy.engine.default import DefaultDialect + + migration_context = MigrationContext.configure( + dialect=DefaultDialect() + ) + + autogen_context = AutogenContext(migration_context, opts=opts) + autogen_context.imports = set(imports) + return render._indent( + render._render_cmd_body(up_or_down_op, autogen_context) + ) + + +def _render_migration_diffs( + context: MigrationContext, template_args: Dict[Any, Any] +) -> None: + """legacy, used by test_autogen_composition at the moment""" + + autogen_context = AutogenContext(context) + + upgrade_ops = ops.UpgradeOps([]) + compare._produce_net_changes(autogen_context, upgrade_ops) + + migration_script = ops.MigrationScript( + rev_id=None, + upgrade_ops=upgrade_ops, + downgrade_ops=upgrade_ops.reverse(), + ) + + render._render_python_into_templatevars( + autogen_context, migration_script, template_args + ) + + +class AutogenContext: + """Maintains configuration and state that's specific to an + autogenerate operation.""" + + metadata: Optional[MetaData] = None + """The :class:`~sqlalchemy.schema.MetaData` object + representing the destination. + + This object is the one that is passed within ``env.py`` + to the :paramref:`.EnvironmentContext.configure.target_metadata` + parameter. It represents the structure of :class:`.Table` and other + objects as stated in the current database model, and represents the + destination structure for the database being examined. + + While the :class:`~sqlalchemy.schema.MetaData` object is primarily + known as a collection of :class:`~sqlalchemy.schema.Table` objects, + it also has an :attr:`~sqlalchemy.schema.MetaData.info` dictionary + that may be used by end-user schemes to store additional schema-level + objects that are to be compared in custom autogeneration schemes. + + """ + + connection: Optional[Connection] = None + """The :class:`~sqlalchemy.engine.base.Connection` object currently + connected to the database backend being compared. + + This is obtained from the :attr:`.MigrationContext.bind` and is + ultimately set up in the ``env.py`` script. + + """ + + dialect: Optional[Dialect] = None + """The :class:`~sqlalchemy.engine.Dialect` object currently in use. + + This is normally obtained from the + :attr:`~sqlalchemy.engine.base.Connection.dialect` attribute. + + """ + + imports: Set[str] = None # type: ignore[assignment] + """A ``set()`` which contains string Python import directives. + + The directives are to be rendered into the ``${imports}`` section + of a script template. The set is normally empty and can be modified + within hooks such as the + :paramref:`.EnvironmentContext.configure.render_item` hook. + + .. seealso:: + + :ref:`autogen_render_types` + + """ + + migration_context: MigrationContext = None # type: ignore[assignment] + """The :class:`.MigrationContext` established by the ``env.py`` script.""" + + def __init__( + self, + migration_context: MigrationContext, + metadata: Optional[MetaData] = None, + opts: Optional[dict] = None, + autogenerate: bool = True, + ) -> None: + if ( + autogenerate + and migration_context is not None + and migration_context.as_sql + ): + raise util.CommandError( + "autogenerate can't use as_sql=True as it prevents querying " + "the database for schema information" + ) + + if opts is None: + opts = migration_context.opts + + self.metadata = metadata = ( + opts.get("target_metadata", None) if metadata is None else metadata + ) + + if ( + autogenerate + and metadata is None + and migration_context is not None + and migration_context.script is not None + ): + raise util.CommandError( + "Can't proceed with --autogenerate option; environment " + "script %s does not provide " + "a MetaData object or sequence of objects to the context." + % (migration_context.script.env_py_location) + ) + + include_object = opts.get("include_object", None) + include_name = opts.get("include_name", None) + + object_filters = [] + name_filters = [] + if include_object: + object_filters.append(include_object) + if include_name: + name_filters.append(include_name) + + self._object_filters = object_filters + self._name_filters = name_filters + + self.migration_context = migration_context + if self.migration_context is not None: + self.connection = self.migration_context.bind + self.dialect = self.migration_context.dialect + + self.imports = set() + self.opts: Dict[str, Any] = opts + self._has_batch: bool = False + + @util.memoized_property + def inspector(self) -> Inspector: + if self.connection is None: + raise TypeError( + "can't return inspector as this " + "AutogenContext has no database connection" + ) + return inspect(self.connection) + + @contextlib.contextmanager + def _within_batch(self) -> Iterator[None]: + self._has_batch = True + yield + self._has_batch = False + + def run_name_filters( + self, + name: Optional[str], + type_: NameFilterType, + parent_names: NameFilterParentNames, + ) -> bool: + """Run the context's name filters and return True if the targets + should be part of the autogenerate operation. + + This method should be run for every kind of name encountered within the + reflection side of an autogenerate operation, giving the environment + the chance to filter what names should be reflected as database + objects. The filters here are produced directly via the + :paramref:`.EnvironmentContext.configure.include_name` parameter. + + """ + if "schema_name" in parent_names: + if type_ == "table": + table_name = name + else: + table_name = parent_names.get("table_name", None) + if table_name: + schema_name = parent_names["schema_name"] + if schema_name: + parent_names["schema_qualified_table_name"] = "%s.%s" % ( + schema_name, + table_name, + ) + else: + parent_names["schema_qualified_table_name"] = table_name + + for fn in self._name_filters: + if not fn(name, type_, parent_names): + return False + else: + return True + + def run_object_filters( + self, + object_: SchemaItem, + name: Optional[str], + type_: NameFilterType, + reflected: bool, + compare_to: Optional[SchemaItem], + ) -> bool: + """Run the context's object filters and return True if the targets + should be part of the autogenerate operation. + + This method should be run for every kind of object encountered within + an autogenerate operation, giving the environment the chance + to filter what objects should be included in the comparison. + The filters here are produced directly via the + :paramref:`.EnvironmentContext.configure.include_object` parameter. + + """ + for fn in self._object_filters: + if not fn(object_, name, type_, reflected, compare_to): + return False + else: + return True + + run_filters = run_object_filters + + @util.memoized_property + def sorted_tables(self): + """Return an aggregate of the :attr:`.MetaData.sorted_tables` + collection(s). + + For a sequence of :class:`.MetaData` objects, this + concatenates the :attr:`.MetaData.sorted_tables` collection + for each individual :class:`.MetaData` in the order of the + sequence. It does **not** collate the sorted tables collections. + + """ + result = [] + for m in util.to_list(self.metadata): + result.extend(m.sorted_tables) + return result + + @util.memoized_property + def table_key_to_table(self): + """Return an aggregate of the :attr:`.MetaData.tables` dictionaries. + + The :attr:`.MetaData.tables` collection is a dictionary of table key + to :class:`.Table`; this method aggregates the dictionary across + multiple :class:`.MetaData` objects into one dictionary. + + Duplicate table keys are **not** supported; if two :class:`.MetaData` + objects contain the same table key, an exception is raised. + + """ + result = {} + for m in util.to_list(self.metadata): + intersect = set(result).intersection(set(m.tables)) + if intersect: + raise ValueError( + "Duplicate table keys across multiple " + "MetaData objects: %s" + % (", ".join('"%s"' % key for key in sorted(intersect))) + ) + + result.update(m.tables) + return result + + +class RevisionContext: + """Maintains configuration and state that's specific to a revision + file generation operation.""" + + generated_revisions: List[MigrationScript] + process_revision_directives: Optional[ProcessRevisionDirectiveFn] + + def __init__( + self, + config: Config, + script_directory: ScriptDirectory, + command_args: Dict[str, Any], + process_revision_directives: Optional[ + ProcessRevisionDirectiveFn + ] = None, + ) -> None: + self.config = config + self.script_directory = script_directory + self.command_args = command_args + self.process_revision_directives = process_revision_directives + self.template_args = { + "config": config # Let templates use config for + # e.g. multiple databases + } + self.generated_revisions = [self._default_revision()] + + def _to_script( + self, migration_script: MigrationScript + ) -> Optional[Script]: + template_args: Dict[str, Any] = self.template_args.copy() + + if getattr(migration_script, "_needs_render", False): + autogen_context = self._last_autogen_context + + # clear out existing imports if we are doing multiple + # renders + autogen_context.imports = set() + if migration_script.imports: + autogen_context.imports.update(migration_script.imports) + render._render_python_into_templatevars( + autogen_context, migration_script, template_args + ) + + assert migration_script.rev_id is not None + return self.script_directory.generate_revision( + migration_script.rev_id, + migration_script.message, + refresh=True, + head=migration_script.head, + splice=migration_script.splice, + branch_labels=migration_script.branch_label, + version_path=migration_script.version_path, + depends_on=migration_script.depends_on, + **template_args, + ) + + def run_autogenerate( + self, rev: _GetRevArg, migration_context: MigrationContext + ) -> None: + self._run_environment(rev, migration_context, True) + + def run_no_autogenerate( + self, rev: _GetRevArg, migration_context: MigrationContext + ) -> None: + self._run_environment(rev, migration_context, False) + + def _run_environment( + self, + rev: _GetRevArg, + migration_context: MigrationContext, + autogenerate: bool, + ) -> None: + if autogenerate: + if self.command_args["sql"]: + raise util.CommandError( + "Using --sql with --autogenerate does not make any sense" + ) + if set(self.script_directory.get_revisions(rev)) != set( + self.script_directory.get_revisions("heads") + ): + raise util.CommandError("Target database is not up to date.") + + upgrade_token = migration_context.opts["upgrade_token"] + downgrade_token = migration_context.opts["downgrade_token"] + + migration_script = self.generated_revisions[-1] + if not getattr(migration_script, "_needs_render", False): + migration_script.upgrade_ops_list[-1].upgrade_token = upgrade_token + migration_script.downgrade_ops_list[ + -1 + ].downgrade_token = downgrade_token + migration_script._needs_render = True + else: + migration_script._upgrade_ops.append( + ops.UpgradeOps([], upgrade_token=upgrade_token) + ) + migration_script._downgrade_ops.append( + ops.DowngradeOps([], downgrade_token=downgrade_token) + ) + + autogen_context = AutogenContext( + migration_context, autogenerate=autogenerate + ) + self._last_autogen_context: AutogenContext = autogen_context + + if autogenerate: + compare._populate_migration_script( + autogen_context, migration_script + ) + + if self.process_revision_directives: + self.process_revision_directives( + migration_context, rev, self.generated_revisions + ) + + hook = migration_context.opts["process_revision_directives"] + if hook: + hook(migration_context, rev, self.generated_revisions) + + for migration_script in self.generated_revisions: + migration_script._needs_render = True + + def _default_revision(self) -> MigrationScript: + command_args: Dict[str, Any] = self.command_args + op = ops.MigrationScript( + rev_id=command_args["rev_id"] or util.rev_id(), + message=command_args["message"], + upgrade_ops=ops.UpgradeOps([]), + downgrade_ops=ops.DowngradeOps([]), + head=command_args["head"], + splice=command_args["splice"], + branch_label=command_args["branch_label"], + version_path=command_args["version_path"], + depends_on=command_args["depends_on"], + ) + return op + + def generate_scripts(self) -> Iterator[Optional[Script]]: + for generated_revision in self.generated_revisions: + yield self._to_script(generated_revision) diff --git a/venv/Lib/site-packages/alembic/autogenerate/compare.py b/venv/Lib/site-packages/alembic/autogenerate/compare.py new file mode 100644 index 0000000..a24a75d --- /dev/null +++ b/venv/Lib/site-packages/alembic/autogenerate/compare.py @@ -0,0 +1,1394 @@ +from __future__ import annotations + +import contextlib +import logging +import re +from typing import Any +from typing import cast +from typing import Dict +from typing import Iterator +from typing import List +from typing import Mapping +from typing import Optional +from typing import Set +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import event +from sqlalchemy import inspect +from sqlalchemy import schema as sa_schema +from sqlalchemy import text +from sqlalchemy import types as sqltypes +from sqlalchemy.sql import expression +from sqlalchemy.util import OrderedSet + +from alembic.ddl.base import _fk_spec +from .. import util +from ..operations import ops +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.engine.reflection import Inspector + from sqlalchemy.sql.elements import quoted_name + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import ForeignKeyConstraint + from sqlalchemy.sql.schema import Index + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.schema import UniqueConstraint + + from alembic.autogenerate.api import AutogenContext + from alembic.ddl.impl import DefaultImpl + from alembic.operations.ops import AlterColumnOp + from alembic.operations.ops import MigrationScript + from alembic.operations.ops import ModifyTableOps + from alembic.operations.ops import UpgradeOps + +log = logging.getLogger(__name__) + + +def _populate_migration_script( + autogen_context: AutogenContext, migration_script: MigrationScript +) -> None: + upgrade_ops = migration_script.upgrade_ops_list[-1] + downgrade_ops = migration_script.downgrade_ops_list[-1] + + _produce_net_changes(autogen_context, upgrade_ops) + upgrade_ops.reverse_into(downgrade_ops) + + +comparators = util.Dispatcher(uselist=True) + + +def _produce_net_changes( + autogen_context: AutogenContext, upgrade_ops: UpgradeOps +) -> None: + connection = autogen_context.connection + assert connection is not None + include_schemas = autogen_context.opts.get("include_schemas", False) + + inspector: Inspector = inspect(connection) + + default_schema = connection.dialect.default_schema_name + schemas: Set[Optional[str]] + if include_schemas: + schemas = set(inspector.get_schema_names()) + # replace default schema name with None + schemas.discard("information_schema") + # replace the "default" schema with None + schemas.discard(default_schema) + schemas.add(None) + else: + schemas = {None} + + schemas = { + s for s in schemas if autogen_context.run_name_filters(s, "schema", {}) + } + + assert autogen_context.dialect is not None + comparators.dispatch("schema", autogen_context.dialect.name)( + autogen_context, upgrade_ops, schemas + ) + + +@comparators.dispatch_for("schema") +def _autogen_for_tables( + autogen_context: AutogenContext, + upgrade_ops: UpgradeOps, + schemas: Union[Set[None], Set[Optional[str]]], +) -> None: + inspector = autogen_context.inspector + + conn_table_names: Set[Tuple[Optional[str], str]] = set() + + version_table_schema = ( + autogen_context.migration_context.version_table_schema + ) + version_table = autogen_context.migration_context.version_table + + for schema_name in schemas: + tables = set(inspector.get_table_names(schema=schema_name)) + if schema_name == version_table_schema: + tables = tables.difference( + [autogen_context.migration_context.version_table] + ) + + conn_table_names.update( + (schema_name, tname) + for tname in tables + if autogen_context.run_name_filters( + tname, "table", {"schema_name": schema_name} + ) + ) + + metadata_table_names = OrderedSet( + [(table.schema, table.name) for table in autogen_context.sorted_tables] + ).difference([(version_table_schema, version_table)]) + + _compare_tables( + conn_table_names, + metadata_table_names, + inspector, + upgrade_ops, + autogen_context, + ) + + +def _compare_tables( + conn_table_names: set, + metadata_table_names: set, + inspector: Inspector, + upgrade_ops: UpgradeOps, + autogen_context: AutogenContext, +) -> None: + default_schema = inspector.bind.dialect.default_schema_name + + # tables coming from the connection will not have "schema" + # set if it matches default_schema_name; so we need a list + # of table names from local metadata that also have "None" if schema + # == default_schema_name. Most setups will be like this anyway but + # some are not (see #170) + metadata_table_names_no_dflt_schema = OrderedSet( + [ + (schema if schema != default_schema else None, tname) + for schema, tname in metadata_table_names + ] + ) + + # to adjust for the MetaData collection storing the tables either + # as "schemaname.tablename" or just "tablename", create a new lookup + # which will match the "non-default-schema" keys to the Table object. + tname_to_table = { + no_dflt_schema: autogen_context.table_key_to_table[ + sa_schema._get_table_key(tname, schema) + ] + for no_dflt_schema, (schema, tname) in zip( + metadata_table_names_no_dflt_schema, metadata_table_names + ) + } + metadata_table_names = metadata_table_names_no_dflt_schema + + for s, tname in metadata_table_names.difference(conn_table_names): + name = "%s.%s" % (s, tname) if s else tname + metadata_table = tname_to_table[(s, tname)] + if autogen_context.run_object_filters( + metadata_table, tname, "table", False, None + ): + upgrade_ops.ops.append( + ops.CreateTableOp.from_table(metadata_table) + ) + log.info("Detected added table %r", name) + modify_table_ops = ops.ModifyTableOps(tname, [], schema=s) + + comparators.dispatch("table")( + autogen_context, + modify_table_ops, + s, + tname, + None, + metadata_table, + ) + if not modify_table_ops.is_empty(): + upgrade_ops.ops.append(modify_table_ops) + + removal_metadata = sa_schema.MetaData() + for s, tname in conn_table_names.difference(metadata_table_names): + name = sa_schema._get_table_key(tname, s) + exists = name in removal_metadata.tables + t = sa_schema.Table(tname, removal_metadata, schema=s) + + if not exists: + event.listen( + t, + "column_reflect", + # fmt: off + autogen_context.migration_context.impl. + _compat_autogen_column_reflect + (inspector), + # fmt: on + ) + sqla_compat._reflect_table(inspector, t) + if autogen_context.run_object_filters(t, tname, "table", True, None): + modify_table_ops = ops.ModifyTableOps(tname, [], schema=s) + + comparators.dispatch("table")( + autogen_context, modify_table_ops, s, tname, t, None + ) + if not modify_table_ops.is_empty(): + upgrade_ops.ops.append(modify_table_ops) + + upgrade_ops.ops.append(ops.DropTableOp.from_table(t)) + log.info("Detected removed table %r", name) + + existing_tables = conn_table_names.intersection(metadata_table_names) + + existing_metadata = sa_schema.MetaData() + conn_column_info = {} + for s, tname in existing_tables: + name = sa_schema._get_table_key(tname, s) + exists = name in existing_metadata.tables + t = sa_schema.Table(tname, existing_metadata, schema=s) + if not exists: + event.listen( + t, + "column_reflect", + # fmt: off + autogen_context.migration_context.impl. + _compat_autogen_column_reflect(inspector), + # fmt: on + ) + sqla_compat._reflect_table(inspector, t) + conn_column_info[(s, tname)] = t + + for s, tname in sorted(existing_tables, key=lambda x: (x[0] or "", x[1])): + s = s or None + name = "%s.%s" % (s, tname) if s else tname + metadata_table = tname_to_table[(s, tname)] + conn_table = existing_metadata.tables[name] + + if autogen_context.run_object_filters( + metadata_table, tname, "table", False, conn_table + ): + modify_table_ops = ops.ModifyTableOps(tname, [], schema=s) + with _compare_columns( + s, + tname, + conn_table, + metadata_table, + modify_table_ops, + autogen_context, + inspector, + ): + comparators.dispatch("table")( + autogen_context, + modify_table_ops, + s, + tname, + conn_table, + metadata_table, + ) + + if not modify_table_ops.is_empty(): + upgrade_ops.ops.append(modify_table_ops) + + +_IndexColumnSortingOps: Mapping[str, Any] = util.immutabledict( + { + "asc": expression.asc, + "desc": expression.desc, + "nulls_first": expression.nullsfirst, + "nulls_last": expression.nullslast, + "nullsfirst": expression.nullsfirst, # 1_3 name + "nullslast": expression.nullslast, # 1_3 name + } +) + + +def _make_index( + impl: DefaultImpl, params: Dict[str, Any], conn_table: Table +) -> Optional[Index]: + exprs: list[Union[Column[Any], TextClause]] = [] + sorting = params.get("column_sorting") + + for num, col_name in enumerate(params["column_names"]): + item: Union[Column[Any], TextClause] + if col_name is None: + assert "expressions" in params + name = params["expressions"][num] + item = text(name) + else: + name = col_name + item = conn_table.c[col_name] + if sorting and name in sorting: + for operator in sorting[name]: + if operator in _IndexColumnSortingOps: + item = _IndexColumnSortingOps[operator](item) + exprs.append(item) + ix = sa_schema.Index( + params["name"], + *exprs, + unique=params["unique"], + _table=conn_table, + **impl.adjust_reflected_dialect_options(params, "index"), + ) + if "duplicates_constraint" in params: + ix.info["duplicates_constraint"] = params["duplicates_constraint"] + return ix + + +def _make_unique_constraint( + impl: DefaultImpl, params: Dict[str, Any], conn_table: Table +) -> UniqueConstraint: + uq = sa_schema.UniqueConstraint( + *[conn_table.c[cname] for cname in params["column_names"]], + name=params["name"], + **impl.adjust_reflected_dialect_options(params, "unique_constraint"), + ) + if "duplicates_index" in params: + uq.info["duplicates_index"] = params["duplicates_index"] + + return uq + + +def _make_foreign_key( + params: Dict[str, Any], conn_table: Table +) -> ForeignKeyConstraint: + tname = params["referred_table"] + if params["referred_schema"]: + tname = "%s.%s" % (params["referred_schema"], tname) + + options = params.get("options", {}) + + const = sa_schema.ForeignKeyConstraint( + [conn_table.c[cname] for cname in params["constrained_columns"]], + ["%s.%s" % (tname, n) for n in params["referred_columns"]], + onupdate=options.get("onupdate"), + ondelete=options.get("ondelete"), + deferrable=options.get("deferrable"), + initially=options.get("initially"), + name=params["name"], + ) + # needed by 0.7 + conn_table.append_constraint(const) + return const + + +@contextlib.contextmanager +def _compare_columns( + schema: Optional[str], + tname: Union[quoted_name, str], + conn_table: Table, + metadata_table: Table, + modify_table_ops: ModifyTableOps, + autogen_context: AutogenContext, + inspector: Inspector, +) -> Iterator[None]: + name = "%s.%s" % (schema, tname) if schema else tname + metadata_col_names = OrderedSet( + c.name for c in metadata_table.c if not c.system + ) + metadata_cols_by_name = { + c.name: c for c in metadata_table.c if not c.system + } + + conn_col_names = { + c.name: c + for c in conn_table.c + if autogen_context.run_name_filters( + c.name, "column", {"table_name": tname, "schema_name": schema} + ) + } + + for cname in metadata_col_names.difference(conn_col_names): + if autogen_context.run_object_filters( + metadata_cols_by_name[cname], cname, "column", False, None + ): + modify_table_ops.ops.append( + ops.AddColumnOp.from_column_and_tablename( + schema, tname, metadata_cols_by_name[cname] + ) + ) + log.info("Detected added column '%s.%s'", name, cname) + + for colname in metadata_col_names.intersection(conn_col_names): + metadata_col = metadata_cols_by_name[colname] + conn_col = conn_table.c[colname] + if not autogen_context.run_object_filters( + metadata_col, colname, "column", False, conn_col + ): + continue + alter_column_op = ops.AlterColumnOp(tname, colname, schema=schema) + + comparators.dispatch("column")( + autogen_context, + alter_column_op, + schema, + tname, + colname, + conn_col, + metadata_col, + ) + + if alter_column_op.has_changes(): + modify_table_ops.ops.append(alter_column_op) + + yield + + for cname in set(conn_col_names).difference(metadata_col_names): + if autogen_context.run_object_filters( + conn_table.c[cname], cname, "column", True, None + ): + modify_table_ops.ops.append( + ops.DropColumnOp.from_column_and_tablename( + schema, tname, conn_table.c[cname] + ) + ) + log.info("Detected removed column '%s.%s'", name, cname) + + +class _constraint_sig: + const: Union[UniqueConstraint, ForeignKeyConstraint, Index] + + def md_name_to_sql_name(self, context: AutogenContext) -> Optional[str]: + return sqla_compat._get_constraint_final_name( + self.const, context.dialect + ) + + def __eq__(self, other): + return self.const == other.const + + def __ne__(self, other): + return self.const != other.const + + def __hash__(self) -> int: + return hash(self.const) + + +class _uq_constraint_sig(_constraint_sig): + is_index = False + is_unique = True + + def __init__(self, const: UniqueConstraint, impl: DefaultImpl) -> None: + self.const = const + self.name = const.name + self.sig = ("UNIQUE_CONSTRAINT",) + impl.create_unique_constraint_sig( + const + ) + + @property + def column_names(self) -> List[str]: + return [col.name for col in self.const.columns] + + +class _ix_constraint_sig(_constraint_sig): + is_index = True + + def __init__(self, const: Index, impl: DefaultImpl) -> None: + self.const = const + self.name = const.name + self.sig = ("INDEX",) + impl.create_index_sig(const) + self.is_unique = bool(const.unique) + + def md_name_to_sql_name(self, context: AutogenContext) -> Optional[str]: + return sqla_compat._get_constraint_final_name( + self.const, context.dialect + ) + + @property + def column_names(self) -> Union[List[quoted_name], List[None]]: + return sqla_compat._get_index_column_names(self.const) + + +class _fk_constraint_sig(_constraint_sig): + def __init__( + self, const: ForeignKeyConstraint, include_options: bool = False + ) -> None: + self.const = const + self.name = const.name + + ( + self.source_schema, + self.source_table, + self.source_columns, + self.target_schema, + self.target_table, + self.target_columns, + onupdate, + ondelete, + deferrable, + initially, + ) = _fk_spec(const) + + self.sig: Tuple[Any, ...] = ( + self.source_schema, + self.source_table, + tuple(self.source_columns), + self.target_schema, + self.target_table, + tuple(self.target_columns), + ) + if include_options: + self.sig += ( + (None if onupdate.lower() == "no action" else onupdate.lower()) + if onupdate + else None, + (None if ondelete.lower() == "no action" else ondelete.lower()) + if ondelete + else None, + # convert initially + deferrable into one three-state value + "initially_deferrable" + if initially and initially.lower() == "deferred" + else "deferrable" + if deferrable + else "not deferrable", + ) + + +@comparators.dispatch_for("table") +def _compare_indexes_and_uniques( + autogen_context: AutogenContext, + modify_ops: ModifyTableOps, + schema: Optional[str], + tname: Union[quoted_name, str], + conn_table: Optional[Table], + metadata_table: Optional[Table], +) -> None: + inspector = autogen_context.inspector + is_create_table = conn_table is None + is_drop_table = metadata_table is None + impl = autogen_context.migration_context.impl + + # 1a. get raw indexes and unique constraints from metadata ... + if metadata_table is not None: + metadata_unique_constraints = { + uq + for uq in metadata_table.constraints + if isinstance(uq, sa_schema.UniqueConstraint) + } + metadata_indexes = set(metadata_table.indexes) + else: + metadata_unique_constraints = set() + metadata_indexes = set() + + conn_uniques = conn_indexes = frozenset() # type:ignore[var-annotated] + + supports_unique_constraints = False + + unique_constraints_duplicate_unique_indexes = False + + if conn_table is not None: + # 1b. ... and from connection, if the table exists + if hasattr(inspector, "get_unique_constraints"): + try: + conn_uniques = inspector.get_unique_constraints( # type:ignore[assignment] # noqa + tname, schema=schema + ) + supports_unique_constraints = True + except NotImplementedError: + pass + except TypeError: + # number of arguments is off for the base + # method in SQLAlchemy due to the cache decorator + # not being present + pass + else: + conn_uniques = [ # type:ignore[assignment] + uq + for uq in conn_uniques + if autogen_context.run_name_filters( + uq["name"], + "unique_constraint", + {"table_name": tname, "schema_name": schema}, + ) + ] + for uq in conn_uniques: + if uq.get("duplicates_index"): + unique_constraints_duplicate_unique_indexes = True + try: + conn_indexes = inspector.get_indexes( # type:ignore[assignment] + tname, schema=schema + ) + except NotImplementedError: + pass + else: + conn_indexes = [ # type:ignore[assignment] + ix + for ix in conn_indexes + if autogen_context.run_name_filters( + ix["name"], + "index", + {"table_name": tname, "schema_name": schema}, + ) + ] + + # 2. convert conn-level objects from raw inspector records + # into schema objects + if is_drop_table: + # for DROP TABLE uniques are inline, don't need them + conn_uniques = set() # type:ignore[assignment] + else: + conn_uniques = { # type:ignore[assignment] + _make_unique_constraint(impl, uq_def, conn_table) + for uq_def in conn_uniques + } + + conn_indexes = { # type:ignore[assignment] + index + for index in ( + _make_index(impl, ix, conn_table) for ix in conn_indexes + ) + if index is not None + } + + # 2a. if the dialect dupes unique indexes as unique constraints + # (mysql and oracle), correct for that + + if unique_constraints_duplicate_unique_indexes: + _correct_for_uq_duplicates_uix( + conn_uniques, + conn_indexes, + metadata_unique_constraints, + metadata_indexes, + autogen_context.dialect, + impl, + ) + + # 3. give the dialect a chance to omit indexes and constraints that + # we know are either added implicitly by the DB or that the DB + # can't accurately report on + autogen_context.migration_context.impl.correct_for_autogen_constraints( + conn_uniques, # type: ignore[arg-type] + conn_indexes, # type: ignore[arg-type] + metadata_unique_constraints, + metadata_indexes, + ) + + # 4. organize the constraints into "signature" collections, the + # _constraint_sig() objects provide a consistent facade over both + # Index and UniqueConstraint so we can easily work with them + # interchangeably + metadata_unique_constraints_sig = { + _uq_constraint_sig(uq, impl) for uq in metadata_unique_constraints + } + + metadata_indexes_sig = { + _ix_constraint_sig(ix, impl) for ix in metadata_indexes + } + + conn_unique_constraints = { + _uq_constraint_sig(uq, impl) for uq in conn_uniques + } + + conn_indexes_sig = {_ix_constraint_sig(ix, impl) for ix in conn_indexes} + + # 5. index things by name, for those objects that have names + metadata_names = { + cast(str, c.md_name_to_sql_name(autogen_context)): c + for c in metadata_unique_constraints_sig.union( + metadata_indexes_sig # type:ignore[arg-type] + ) + if isinstance(c, _ix_constraint_sig) + or sqla_compat._constraint_is_named(c.const, autogen_context.dialect) + } + + conn_uniques_by_name: Dict[sqla_compat._ConstraintName, _uq_constraint_sig] + conn_indexes_by_name: Dict[sqla_compat._ConstraintName, _ix_constraint_sig] + + conn_uniques_by_name = {c.name: c for c in conn_unique_constraints} + conn_indexes_by_name = {c.name: c for c in conn_indexes_sig} + conn_names = { + c.name: c + for c in conn_unique_constraints.union(conn_indexes_sig) + if sqla_compat.constraint_name_string(c.name) + } + + doubled_constraints = { + name: (conn_uniques_by_name[name], conn_indexes_by_name[name]) + for name in set(conn_uniques_by_name).intersection( + conn_indexes_by_name + ) + } + + # 6. index things by "column signature", to help with unnamed unique + # constraints. + conn_uniques_by_sig = {uq.sig: uq for uq in conn_unique_constraints} + metadata_uniques_by_sig = { + uq.sig: uq for uq in metadata_unique_constraints_sig + } + metadata_indexes_by_sig = {ix.sig: ix for ix in metadata_indexes_sig} + unnamed_metadata_uniques = { + uq.sig: uq + for uq in metadata_unique_constraints_sig + if not sqla_compat._constraint_is_named( + uq.const, autogen_context.dialect + ) + } + + # assumptions: + # 1. a unique constraint or an index from the connection *always* + # has a name. + # 2. an index on the metadata side *always* has a name. + # 3. a unique constraint on the metadata side *might* have a name. + # 4. The backend may double up indexes as unique constraints and + # vice versa (e.g. MySQL, Postgresql) + + def obj_added(obj): + if obj.is_index: + if autogen_context.run_object_filters( + obj.const, obj.name, "index", False, None + ): + modify_ops.ops.append(ops.CreateIndexOp.from_index(obj.const)) + log.info( + "Detected added index '%s' on %s", + obj.name, + ", ".join(["'%s'" % obj.column_names]), + ) + else: + if not supports_unique_constraints: + # can't report unique indexes as added if we don't + # detect them + return + if is_create_table or is_drop_table: + # unique constraints are created inline with table defs + return + if autogen_context.run_object_filters( + obj.const, obj.name, "unique_constraint", False, None + ): + modify_ops.ops.append( + ops.AddConstraintOp.from_constraint(obj.const) + ) + log.info( + "Detected added unique constraint '%s' on %s", + obj.name, + ", ".join(["'%s'" % obj.column_names]), + ) + + def obj_removed(obj): + if obj.is_index: + if obj.is_unique and not supports_unique_constraints: + # many databases double up unique constraints + # as unique indexes. without that list we can't + # be sure what we're doing here + return + + if autogen_context.run_object_filters( + obj.const, obj.name, "index", True, None + ): + modify_ops.ops.append(ops.DropIndexOp.from_index(obj.const)) + log.info( + "Detected removed index '%s' on '%s'", obj.name, tname + ) + else: + if is_create_table or is_drop_table: + # if the whole table is being dropped, we don't need to + # consider unique constraint separately + return + if autogen_context.run_object_filters( + obj.const, obj.name, "unique_constraint", True, None + ): + modify_ops.ops.append( + ops.DropConstraintOp.from_constraint(obj.const) + ) + log.info( + "Detected removed unique constraint '%s' on '%s'", + obj.name, + tname, + ) + + def obj_changed(old, new, msg): + if old.is_index: + if autogen_context.run_object_filters( + new.const, new.name, "index", False, old.const + ): + log.info( + "Detected changed index '%s' on '%s':%s", + old.name, + tname, + ", ".join(msg), + ) + modify_ops.ops.append(ops.DropIndexOp.from_index(old.const)) + modify_ops.ops.append(ops.CreateIndexOp.from_index(new.const)) + else: + if autogen_context.run_object_filters( + new.const, new.name, "unique_constraint", False, old.const + ): + log.info( + "Detected changed unique constraint '%s' on '%s':%s", + old.name, + tname, + ", ".join(msg), + ) + modify_ops.ops.append( + ops.DropConstraintOp.from_constraint(old.const) + ) + modify_ops.ops.append( + ops.AddConstraintOp.from_constraint(new.const) + ) + + for removed_name in sorted(set(conn_names).difference(metadata_names)): + conn_obj: Union[_ix_constraint_sig, _uq_constraint_sig] = conn_names[ + removed_name + ] + if not conn_obj.is_index and conn_obj.sig in unnamed_metadata_uniques: + continue + elif removed_name in doubled_constraints: + conn_uq, conn_idx = doubled_constraints[removed_name] + if ( + conn_idx.sig not in metadata_indexes_by_sig + and conn_uq.sig not in metadata_uniques_by_sig + ): + obj_removed(conn_uq) + obj_removed(conn_idx) + else: + obj_removed(conn_obj) + + for existing_name in sorted(set(metadata_names).intersection(conn_names)): + metadata_obj = metadata_names[existing_name] + + if existing_name in doubled_constraints: + conn_uq, conn_idx = doubled_constraints[existing_name] + if metadata_obj.is_index: + conn_obj = conn_idx + else: + conn_obj = conn_uq + else: + conn_obj = conn_names[existing_name] + + if conn_obj.is_index != metadata_obj.is_index: + obj_removed(conn_obj) + obj_added(metadata_obj) + else: + msg = [] + if conn_obj.is_unique != metadata_obj.is_unique: + msg.append( + " unique=%r to unique=%r" + % (conn_obj.is_unique, metadata_obj.is_unique) + ) + if conn_obj.sig != metadata_obj.sig: + msg.append( + " expression %r to %r" % (conn_obj.sig, metadata_obj.sig) + ) + + if msg: + obj_changed(conn_obj, metadata_obj, msg) + + for added_name in sorted(set(metadata_names).difference(conn_names)): + obj = metadata_names[added_name] + obj_added(obj) + + for uq_sig in unnamed_metadata_uniques: + if uq_sig not in conn_uniques_by_sig: + obj_added(unnamed_metadata_uniques[uq_sig]) + + +def _correct_for_uq_duplicates_uix( + conn_unique_constraints, + conn_indexes, + metadata_unique_constraints, + metadata_indexes, + dialect, + impl, +): + # dedupe unique indexes vs. constraints, since MySQL / Oracle + # doesn't really have unique constraints as a separate construct. + # but look in the metadata and try to maintain constructs + # that already seem to be defined one way or the other + # on that side. This logic was formerly local to MySQL dialect, + # generalized to Oracle and others. See #276 + + # resolve final rendered name for unique constraints defined in the + # metadata. this includes truncation of long names. naming convention + # names currently should already be set as cons.name, however leave this + # to the sqla_compat to decide. + metadata_cons_names = [ + (sqla_compat._get_constraint_final_name(cons, dialect), cons) + for cons in metadata_unique_constraints + ] + + metadata_uq_names = { + name for name, cons in metadata_cons_names if name is not None + } + + unnamed_metadata_uqs = { + _uq_constraint_sig(cons, impl).sig + for name, cons in metadata_cons_names + if name is None + } + + metadata_ix_names = { + sqla_compat._get_constraint_final_name(cons, dialect) + for cons in metadata_indexes + if cons.unique + } + + # for reflection side, names are in their final database form + # already since they're from the database + conn_ix_names = {cons.name: cons for cons in conn_indexes if cons.unique} + + uqs_dupe_indexes = { + cons.name: cons + for cons in conn_unique_constraints + if cons.info["duplicates_index"] + } + + for overlap in uqs_dupe_indexes: + if overlap not in metadata_uq_names: + if ( + _uq_constraint_sig(uqs_dupe_indexes[overlap], impl).sig + not in unnamed_metadata_uqs + ): + conn_unique_constraints.discard(uqs_dupe_indexes[overlap]) + elif overlap not in metadata_ix_names: + conn_indexes.discard(conn_ix_names[overlap]) + + +@comparators.dispatch_for("column") +def _compare_nullable( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: Union[quoted_name, str], + cname: Union[quoted_name, str], + conn_col: Column[Any], + metadata_col: Column[Any], +) -> None: + metadata_col_nullable = metadata_col.nullable + conn_col_nullable = conn_col.nullable + alter_column_op.existing_nullable = conn_col_nullable + + if conn_col_nullable is not metadata_col_nullable: + if ( + sqla_compat._server_default_is_computed( + metadata_col.server_default, conn_col.server_default + ) + and sqla_compat._nullability_might_be_unset(metadata_col) + or ( + sqla_compat._server_default_is_identity( + metadata_col.server_default, conn_col.server_default + ) + ) + ): + log.info( + "Ignoring nullable change on identity column '%s.%s'", + tname, + cname, + ) + else: + alter_column_op.modify_nullable = metadata_col_nullable + log.info( + "Detected %s on column '%s.%s'", + "NULL" if metadata_col_nullable else "NOT NULL", + tname, + cname, + ) + + +@comparators.dispatch_for("column") +def _setup_autoincrement( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: Union[quoted_name, str], + cname: quoted_name, + conn_col: Column[Any], + metadata_col: Column[Any], +) -> None: + if metadata_col.table._autoincrement_column is metadata_col: + alter_column_op.kw["autoincrement"] = True + elif metadata_col.autoincrement is True: + alter_column_op.kw["autoincrement"] = True + elif metadata_col.autoincrement is False: + alter_column_op.kw["autoincrement"] = False + + +@comparators.dispatch_for("column") +def _compare_type( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: Union[quoted_name, str], + cname: Union[quoted_name, str], + conn_col: Column[Any], + metadata_col: Column[Any], +) -> None: + conn_type = conn_col.type + alter_column_op.existing_type = conn_type + metadata_type = metadata_col.type + if conn_type._type_affinity is sqltypes.NullType: + log.info( + "Couldn't determine database type " "for column '%s.%s'", + tname, + cname, + ) + return + if metadata_type._type_affinity is sqltypes.NullType: + log.info( + "Column '%s.%s' has no type within " "the model; can't compare", + tname, + cname, + ) + return + + isdiff = autogen_context.migration_context._compare_type( + conn_col, metadata_col + ) + + if isdiff: + alter_column_op.modify_type = metadata_type + log.info( + "Detected type change from %r to %r on '%s.%s'", + conn_type, + metadata_type, + tname, + cname, + ) + + +def _render_server_default_for_compare( + metadata_default: Optional[Any], autogen_context: AutogenContext +) -> Optional[str]: + if isinstance(metadata_default, sa_schema.DefaultClause): + if isinstance(metadata_default.arg, str): + metadata_default = metadata_default.arg + else: + metadata_default = str( + metadata_default.arg.compile( + dialect=autogen_context.dialect, + compile_kwargs={"literal_binds": True}, + ) + ) + if isinstance(metadata_default, str): + return metadata_default + else: + return None + + +def _normalize_computed_default(sqltext: str) -> str: + """we want to warn if a computed sql expression has changed. however + we don't want false positives and the warning is not that critical. + so filter out most forms of variability from the SQL text. + + """ + + return re.sub(r"[ \(\)'\"`\[\]]", "", sqltext).lower() + + +def _compare_computed_default( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: str, + cname: str, + conn_col: Column[Any], + metadata_col: Column[Any], +) -> None: + rendered_metadata_default = str( + cast(sa_schema.Computed, metadata_col.server_default).sqltext.compile( + dialect=autogen_context.dialect, + compile_kwargs={"literal_binds": True}, + ) + ) + + # since we cannot change computed columns, we do only a crude comparison + # here where we try to eliminate syntactical differences in order to + # get a minimal comparison just to emit a warning. + + rendered_metadata_default = _normalize_computed_default( + rendered_metadata_default + ) + + if isinstance(conn_col.server_default, sa_schema.Computed): + rendered_conn_default = str( + conn_col.server_default.sqltext.compile( + dialect=autogen_context.dialect, + compile_kwargs={"literal_binds": True}, + ) + ) + if rendered_conn_default is None: + rendered_conn_default = "" + else: + rendered_conn_default = _normalize_computed_default( + rendered_conn_default + ) + else: + rendered_conn_default = "" + + if rendered_metadata_default != rendered_conn_default: + _warn_computed_not_supported(tname, cname) + + +def _warn_computed_not_supported(tname: str, cname: str) -> None: + util.warn("Computed default on %s.%s cannot be modified" % (tname, cname)) + + +def _compare_identity_default( + autogen_context, + alter_column_op, + schema, + tname, + cname, + conn_col, + metadata_col, +): + impl = autogen_context.migration_context.impl + diff, ignored_attr, is_alter = impl._compare_identity_default( + metadata_col.server_default, conn_col.server_default + ) + + return diff, is_alter + + +@comparators.dispatch_for("column") +def _compare_server_default( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: Union[quoted_name, str], + cname: Union[quoted_name, str], + conn_col: Column[Any], + metadata_col: Column[Any], +) -> Optional[bool]: + metadata_default = metadata_col.server_default + conn_col_default = conn_col.server_default + if conn_col_default is None and metadata_default is None: + return False + + if sqla_compat._server_default_is_computed(metadata_default): + # return False in case of a computed column as the server + # default. Note that DDL for adding or removing "GENERATED AS" from + # an existing column is not currently known for any backend. + # Once SQLAlchemy can reflect "GENERATED" as the "computed" element, + # we would also want to ignore and/or warn for changes vs. the + # metadata (or support backend specific DDL if applicable). + if not sqla_compat.has_computed_reflection: + return False + + else: + return ( + _compare_computed_default( # type:ignore[func-returns-value] + autogen_context, + alter_column_op, + schema, + tname, + cname, + conn_col, + metadata_col, + ) + ) + if sqla_compat._server_default_is_computed(conn_col_default): + _warn_computed_not_supported(tname, cname) + return False + + if sqla_compat._server_default_is_identity( + metadata_default, conn_col_default + ): + alter_column_op.existing_server_default = conn_col_default + diff, is_alter = _compare_identity_default( + autogen_context, + alter_column_op, + schema, + tname, + cname, + conn_col, + metadata_col, + ) + if is_alter: + alter_column_op.modify_server_default = metadata_default + if diff: + log.info( + "Detected server default on column '%s.%s': " + "identity options attributes %s", + tname, + cname, + sorted(diff), + ) + else: + rendered_metadata_default = _render_server_default_for_compare( + metadata_default, autogen_context + ) + + rendered_conn_default = ( + cast(Any, conn_col_default).arg.text if conn_col_default else None + ) + + alter_column_op.existing_server_default = conn_col_default + + is_diff = autogen_context.migration_context._compare_server_default( + conn_col, + metadata_col, + rendered_metadata_default, + rendered_conn_default, + ) + if is_diff: + alter_column_op.modify_server_default = metadata_default + log.info("Detected server default on column '%s.%s'", tname, cname) + + return None + + +@comparators.dispatch_for("column") +def _compare_column_comment( + autogen_context: AutogenContext, + alter_column_op: AlterColumnOp, + schema: Optional[str], + tname: Union[quoted_name, str], + cname: quoted_name, + conn_col: Column[Any], + metadata_col: Column[Any], +) -> Optional[Literal[False]]: + assert autogen_context.dialect is not None + if not autogen_context.dialect.supports_comments: + return None + + metadata_comment = metadata_col.comment + conn_col_comment = conn_col.comment + if conn_col_comment is None and metadata_comment is None: + return False + + alter_column_op.existing_comment = conn_col_comment + + if conn_col_comment != metadata_comment: + alter_column_op.modify_comment = metadata_comment + log.info("Detected column comment '%s.%s'", tname, cname) + + return None + + +@comparators.dispatch_for("table") +def _compare_foreign_keys( + autogen_context: AutogenContext, + modify_table_ops: ModifyTableOps, + schema: Optional[str], + tname: Union[quoted_name, str], + conn_table: Optional[Table], + metadata_table: Optional[Table], +) -> None: + # if we're doing CREATE TABLE, all FKs are created + # inline within the table def + if conn_table is None or metadata_table is None: + return + + inspector = autogen_context.inspector + metadata_fks = { + fk + for fk in metadata_table.constraints + if isinstance(fk, sa_schema.ForeignKeyConstraint) + } + + conn_fks_list = [ + fk + for fk in inspector.get_foreign_keys(tname, schema=schema) + if autogen_context.run_name_filters( + fk["name"], + "foreign_key_constraint", + {"table_name": tname, "schema_name": schema}, + ) + ] + + backend_reflects_fk_options = bool( + conn_fks_list and "options" in conn_fks_list[0] + ) + + conn_fks = { + _make_foreign_key(const, conn_table) # type: ignore[arg-type] + for const in conn_fks_list + } + + # give the dialect a chance to correct the FKs to match more + # closely + autogen_context.migration_context.impl.correct_for_autogen_foreignkeys( + conn_fks, metadata_fks + ) + + metadata_fks_sig = { + _fk_constraint_sig(fk, include_options=backend_reflects_fk_options) + for fk in metadata_fks + } + + conn_fks_sig = { + _fk_constraint_sig(fk, include_options=backend_reflects_fk_options) + for fk in conn_fks + } + + conn_fks_by_sig = {c.sig: c for c in conn_fks_sig} + metadata_fks_by_sig = {c.sig: c for c in metadata_fks_sig} + + metadata_fks_by_name = { + c.name: c for c in metadata_fks_sig if c.name is not None + } + conn_fks_by_name = {c.name: c for c in conn_fks_sig if c.name is not None} + + def _add_fk(obj, compare_to): + if autogen_context.run_object_filters( + obj.const, obj.name, "foreign_key_constraint", False, compare_to + ): + modify_table_ops.ops.append( + ops.CreateForeignKeyOp.from_constraint(const.const) + ) + + log.info( + "Detected added foreign key (%s)(%s) on table %s%s", + ", ".join(obj.source_columns), + ", ".join(obj.target_columns), + "%s." % obj.source_schema if obj.source_schema else "", + obj.source_table, + ) + + def _remove_fk(obj, compare_to): + if autogen_context.run_object_filters( + obj.const, obj.name, "foreign_key_constraint", True, compare_to + ): + modify_table_ops.ops.append( + ops.DropConstraintOp.from_constraint(obj.const) + ) + log.info( + "Detected removed foreign key (%s)(%s) on table %s%s", + ", ".join(obj.source_columns), + ", ".join(obj.target_columns), + "%s." % obj.source_schema if obj.source_schema else "", + obj.source_table, + ) + + # so far it appears we don't need to do this by name at all. + # SQLite doesn't preserve constraint names anyway + + for removed_sig in set(conn_fks_by_sig).difference(metadata_fks_by_sig): + const = conn_fks_by_sig[removed_sig] + if removed_sig not in metadata_fks_by_sig: + compare_to = ( + metadata_fks_by_name[const.name].const + if const.name in metadata_fks_by_name + else None + ) + _remove_fk(const, compare_to) + + for added_sig in set(metadata_fks_by_sig).difference(conn_fks_by_sig): + const = metadata_fks_by_sig[added_sig] + if added_sig not in conn_fks_by_sig: + compare_to = ( + conn_fks_by_name[const.name].const + if const.name in conn_fks_by_name + else None + ) + _add_fk(const, compare_to) + + +@comparators.dispatch_for("table") +def _compare_table_comment( + autogen_context: AutogenContext, + modify_table_ops: ModifyTableOps, + schema: Optional[str], + tname: Union[quoted_name, str], + conn_table: Optional[Table], + metadata_table: Optional[Table], +) -> None: + assert autogen_context.dialect is not None + if not autogen_context.dialect.supports_comments: + return + + # if we're doing CREATE TABLE, comments will be created inline + # with the create_table op. + if conn_table is None or metadata_table is None: + return + + if conn_table.comment is None and metadata_table.comment is None: + return + + if metadata_table.comment is None and conn_table.comment is not None: + modify_table_ops.ops.append( + ops.DropTableCommentOp( + tname, existing_comment=conn_table.comment, schema=schema + ) + ) + elif metadata_table.comment != conn_table.comment: + modify_table_ops.ops.append( + ops.CreateTableCommentOp( + tname, + metadata_table.comment, + existing_comment=conn_table.comment, + schema=schema, + ) + ) diff --git a/venv/Lib/site-packages/alembic/autogenerate/render.py b/venv/Lib/site-packages/alembic/autogenerate/render.py new file mode 100644 index 0000000..9c84cd6 --- /dev/null +++ b/venv/Lib/site-packages/alembic/autogenerate/render.py @@ -0,0 +1,1082 @@ +from __future__ import annotations + +from io import StringIO +import re +from typing import Any +from typing import cast +from typing import Dict +from typing import List +from typing import Optional +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from mako.pygen import PythonPrinter +from sqlalchemy import schema as sa_schema +from sqlalchemy import sql +from sqlalchemy import types as sqltypes +from sqlalchemy.sql.elements import conv +from sqlalchemy.sql.elements import quoted_name + +from .. import util +from ..operations import ops +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.sql.base import DialectKWArgs + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.schema import CheckConstraint + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.schema import FetchedValue + from sqlalchemy.sql.schema import ForeignKey + from sqlalchemy.sql.schema import ForeignKeyConstraint + from sqlalchemy.sql.schema import Index + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import PrimaryKeyConstraint + from sqlalchemy.sql.schema import UniqueConstraint + from sqlalchemy.sql.sqltypes import ARRAY + from sqlalchemy.sql.type_api import TypeEngine + + from alembic.autogenerate.api import AutogenContext + from alembic.config import Config + from alembic.operations.ops import MigrationScript + from alembic.operations.ops import ModifyTableOps + from alembic.util.sqla_compat import Computed + from alembic.util.sqla_compat import Identity + + +MAX_PYTHON_ARGS = 255 + + +def _render_gen_name( + autogen_context: AutogenContext, + name: sqla_compat._ConstraintName, +) -> Optional[Union[quoted_name, str, _f_name]]: + if isinstance(name, conv): + return _f_name(_alembic_autogenerate_prefix(autogen_context), name) + else: + return sqla_compat.constraint_name_or_none(name) + + +def _indent(text: str) -> str: + text = re.compile(r"^", re.M).sub(" ", text).strip() + text = re.compile(r" +$", re.M).sub("", text) + return text + + +def _render_python_into_templatevars( + autogen_context: AutogenContext, + migration_script: MigrationScript, + template_args: Dict[str, Union[str, Config]], +) -> None: + imports = autogen_context.imports + + for upgrade_ops, downgrade_ops in zip( + migration_script.upgrade_ops_list, migration_script.downgrade_ops_list + ): + template_args[upgrade_ops.upgrade_token] = _indent( + _render_cmd_body(upgrade_ops, autogen_context) + ) + template_args[downgrade_ops.downgrade_token] = _indent( + _render_cmd_body(downgrade_ops, autogen_context) + ) + template_args["imports"] = "\n".join(sorted(imports)) + + +default_renderers = renderers = util.Dispatcher() + + +def _render_cmd_body( + op_container: ops.OpContainer, + autogen_context: AutogenContext, +) -> str: + buf = StringIO() + printer = PythonPrinter(buf) + + printer.writeline( + "# ### commands auto generated by Alembic - please adjust! ###" + ) + + has_lines = False + for op in op_container.ops: + lines = render_op(autogen_context, op) + has_lines = has_lines or bool(lines) + + for line in lines: + printer.writeline(line) + + if not has_lines: + printer.writeline("pass") + + printer.writeline("# ### end Alembic commands ###") + + return buf.getvalue() + + +def render_op( + autogen_context: AutogenContext, op: ops.MigrateOperation +) -> List[str]: + renderer = renderers.dispatch(op) + lines = util.to_list(renderer(autogen_context, op)) + return lines + + +def render_op_text( + autogen_context: AutogenContext, op: ops.MigrateOperation +) -> str: + return "\n".join(render_op(autogen_context, op)) + + +@renderers.dispatch_for(ops.ModifyTableOps) +def _render_modify_table( + autogen_context: AutogenContext, op: ModifyTableOps +) -> List[str]: + opts = autogen_context.opts + render_as_batch = opts.get("render_as_batch", False) + + if op.ops: + lines = [] + if render_as_batch: + with autogen_context._within_batch(): + lines.append( + "with op.batch_alter_table(%r, schema=%r) as batch_op:" + % (op.table_name, op.schema) + ) + for t_op in op.ops: + t_lines = render_op(autogen_context, t_op) + lines.extend(t_lines) + lines.append("") + else: + for t_op in op.ops: + t_lines = render_op(autogen_context, t_op) + lines.extend(t_lines) + + return lines + else: + return [] + + +@renderers.dispatch_for(ops.CreateTableCommentOp) +def _render_create_table_comment( + autogen_context: AutogenContext, op: ops.CreateTableCommentOp +) -> str: + templ = ( + "{prefix}create_table_comment(\n" + "{indent}'{tname}',\n" + "{indent}{comment},\n" + "{indent}existing_comment={existing},\n" + "{indent}schema={schema}\n" + ")" + ) + return templ.format( + prefix=_alembic_autogenerate_prefix(autogen_context), + tname=op.table_name, + comment="%r" % op.comment if op.comment is not None else None, + existing="%r" % op.existing_comment + if op.existing_comment is not None + else None, + schema="'%s'" % op.schema if op.schema is not None else None, + indent=" ", + ) + + +@renderers.dispatch_for(ops.DropTableCommentOp) +def _render_drop_table_comment( + autogen_context: AutogenContext, op: ops.DropTableCommentOp +) -> str: + templ = ( + "{prefix}drop_table_comment(\n" + "{indent}'{tname}',\n" + "{indent}existing_comment={existing},\n" + "{indent}schema={schema}\n" + ")" + ) + return templ.format( + prefix=_alembic_autogenerate_prefix(autogen_context), + tname=op.table_name, + existing="%r" % op.existing_comment + if op.existing_comment is not None + else None, + schema="'%s'" % op.schema if op.schema is not None else None, + indent=" ", + ) + + +@renderers.dispatch_for(ops.CreateTableOp) +def _add_table(autogen_context: AutogenContext, op: ops.CreateTableOp) -> str: + table = op.to_table() + + args = [ + col + for col in [ + _render_column(col, autogen_context) for col in table.columns + ] + if col + ] + sorted( + [ + rcons + for rcons in [ + _render_constraint( + cons, autogen_context, op._namespace_metadata + ) + for cons in table.constraints + ] + if rcons is not None + ] + ) + + if len(args) > MAX_PYTHON_ARGS: + args_str = "*[" + ",\n".join(args) + "]" + else: + args_str = ",\n".join(args) + + text = "%(prefix)screate_table(%(tablename)r,\n%(args)s" % { + "tablename": _ident(op.table_name), + "prefix": _alembic_autogenerate_prefix(autogen_context), + "args": args_str, + } + if op.schema: + text += ",\nschema=%r" % _ident(op.schema) + + comment = table.comment + if comment: + text += ",\ncomment=%r" % _ident(comment) + + info = table.info + if info: + text += f",\ninfo={info!r}" + + for k in sorted(op.kw): + text += ",\n%s=%r" % (k.replace(" ", "_"), op.kw[k]) + + if table._prefixes: + prefixes = ", ".join("'%s'" % p for p in table._prefixes) + text += ",\nprefixes=[%s]" % prefixes + + text += "\n)" + return text + + +@renderers.dispatch_for(ops.DropTableOp) +def _drop_table(autogen_context: AutogenContext, op: ops.DropTableOp) -> str: + text = "%(prefix)sdrop_table(%(tname)r" % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "tname": _ident(op.table_name), + } + if op.schema: + text += ", schema=%r" % _ident(op.schema) + text += ")" + return text + + +def _render_dialect_kwargs_items( + autogen_context: AutogenContext, item: DialectKWArgs +) -> list[str]: + return [ + f"{key}={_render_potential_expr(val, autogen_context)}" + for key, val in item.dialect_kwargs.items() + ] + + +@renderers.dispatch_for(ops.CreateIndexOp) +def _add_index(autogen_context: AutogenContext, op: ops.CreateIndexOp) -> str: + index = op.to_index() + + has_batch = autogen_context._has_batch + + if has_batch: + tmpl = ( + "%(prefix)screate_index(%(name)r, [%(columns)s], " + "unique=%(unique)r%(kwargs)s)" + ) + else: + tmpl = ( + "%(prefix)screate_index(%(name)r, %(table)r, [%(columns)s], " + "unique=%(unique)r%(schema)s%(kwargs)s)" + ) + + assert index.table is not None + + opts = _render_dialect_kwargs_items(autogen_context, index) + text = tmpl % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "name": _render_gen_name(autogen_context, index.name), + "table": _ident(index.table.name), + "columns": ", ".join( + _get_index_rendered_expressions(index, autogen_context) + ), + "unique": index.unique or False, + "schema": (", schema=%r" % _ident(index.table.schema)) + if index.table.schema + else "", + "kwargs": ", " + ", ".join(opts) if opts else "", + } + return text + + +@renderers.dispatch_for(ops.DropIndexOp) +def _drop_index(autogen_context: AutogenContext, op: ops.DropIndexOp) -> str: + index = op.to_index() + + has_batch = autogen_context._has_batch + + if has_batch: + tmpl = "%(prefix)sdrop_index(%(name)r%(kwargs)s)" + else: + tmpl = ( + "%(prefix)sdrop_index(%(name)r, " + "table_name=%(table_name)r%(schema)s%(kwargs)s)" + ) + opts = _render_dialect_kwargs_items(autogen_context, index) + text = tmpl % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "name": _render_gen_name(autogen_context, op.index_name), + "table_name": _ident(op.table_name), + "schema": ((", schema=%r" % _ident(op.schema)) if op.schema else ""), + "kwargs": ", " + ", ".join(opts) if opts else "", + } + return text + + +@renderers.dispatch_for(ops.CreateUniqueConstraintOp) +def _add_unique_constraint( + autogen_context: AutogenContext, op: ops.CreateUniqueConstraintOp +) -> List[str]: + return [_uq_constraint(op.to_constraint(), autogen_context, True)] + + +@renderers.dispatch_for(ops.CreateForeignKeyOp) +def _add_fk_constraint( + autogen_context: AutogenContext, op: ops.CreateForeignKeyOp +) -> str: + args = [repr(_render_gen_name(autogen_context, op.constraint_name))] + if not autogen_context._has_batch: + args.append(repr(_ident(op.source_table))) + + args.extend( + [ + repr(_ident(op.referent_table)), + repr([_ident(col) for col in op.local_cols]), + repr([_ident(col) for col in op.remote_cols]), + ] + ) + kwargs = [ + "referent_schema", + "onupdate", + "ondelete", + "initially", + "deferrable", + "use_alter", + "match", + ] + if not autogen_context._has_batch: + kwargs.insert(0, "source_schema") + + for k in kwargs: + if k in op.kw: + value = op.kw[k] + if value is not None: + args.append("%s=%r" % (k, value)) + + return "%(prefix)screate_foreign_key(%(args)s)" % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "args": ", ".join(args), + } + + +@renderers.dispatch_for(ops.CreatePrimaryKeyOp) +def _add_pk_constraint(constraint, autogen_context): + raise NotImplementedError() + + +@renderers.dispatch_for(ops.CreateCheckConstraintOp) +def _add_check_constraint(constraint, autogen_context): + raise NotImplementedError() + + +@renderers.dispatch_for(ops.DropConstraintOp) +def _drop_constraint( + autogen_context: AutogenContext, op: ops.DropConstraintOp +) -> str: + prefix = _alembic_autogenerate_prefix(autogen_context) + name = _render_gen_name(autogen_context, op.constraint_name) + schema = _ident(op.schema) if op.schema else None + type_ = _ident(op.constraint_type) if op.constraint_type else None + + params_strs = [] + params_strs.append(repr(name)) + if not autogen_context._has_batch: + params_strs.append(repr(_ident(op.table_name))) + if schema is not None: + params_strs.append(f"schema={schema!r}") + if type_ is not None: + params_strs.append(f"type_={type_!r}") + + return f"{prefix}drop_constraint({', '.join(params_strs)})" + + +@renderers.dispatch_for(ops.AddColumnOp) +def _add_column(autogen_context: AutogenContext, op: ops.AddColumnOp) -> str: + schema, tname, column = op.schema, op.table_name, op.column + if autogen_context._has_batch: + template = "%(prefix)sadd_column(%(column)s)" + else: + template = "%(prefix)sadd_column(%(tname)r, %(column)s" + if schema: + template += ", schema=%(schema)r" + template += ")" + text = template % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "tname": tname, + "column": _render_column(column, autogen_context), + "schema": schema, + } + return text + + +@renderers.dispatch_for(ops.DropColumnOp) +def _drop_column(autogen_context: AutogenContext, op: ops.DropColumnOp) -> str: + schema, tname, column_name = op.schema, op.table_name, op.column_name + + if autogen_context._has_batch: + template = "%(prefix)sdrop_column(%(cname)r)" + else: + template = "%(prefix)sdrop_column(%(tname)r, %(cname)r" + if schema: + template += ", schema=%(schema)r" + template += ")" + + text = template % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "tname": _ident(tname), + "cname": _ident(column_name), + "schema": _ident(schema), + } + return text + + +@renderers.dispatch_for(ops.AlterColumnOp) +def _alter_column( + autogen_context: AutogenContext, op: ops.AlterColumnOp +) -> str: + tname = op.table_name + cname = op.column_name + server_default = op.modify_server_default + type_ = op.modify_type + nullable = op.modify_nullable + comment = op.modify_comment + autoincrement = op.kw.get("autoincrement", None) + existing_type = op.existing_type + existing_nullable = op.existing_nullable + existing_comment = op.existing_comment + existing_server_default = op.existing_server_default + schema = op.schema + + indent = " " * 11 + + if autogen_context._has_batch: + template = "%(prefix)salter_column(%(cname)r" + else: + template = "%(prefix)salter_column(%(tname)r, %(cname)r" + + text = template % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "tname": tname, + "cname": cname, + } + if existing_type is not None: + text += ",\n%sexisting_type=%s" % ( + indent, + _repr_type(existing_type, autogen_context), + ) + if server_default is not False: + rendered = _render_server_default(server_default, autogen_context) + text += ",\n%sserver_default=%s" % (indent, rendered) + + if type_ is not None: + text += ",\n%stype_=%s" % (indent, _repr_type(type_, autogen_context)) + if nullable is not None: + text += ",\n%snullable=%r" % (indent, nullable) + if comment is not False: + text += ",\n%scomment=%r" % (indent, comment) + if existing_comment is not None: + text += ",\n%sexisting_comment=%r" % (indent, existing_comment) + if nullable is None and existing_nullable is not None: + text += ",\n%sexisting_nullable=%r" % (indent, existing_nullable) + if autoincrement is not None: + text += ",\n%sautoincrement=%r" % (indent, autoincrement) + if server_default is False and existing_server_default: + rendered = _render_server_default( + existing_server_default, autogen_context + ) + text += ",\n%sexisting_server_default=%s" % (indent, rendered) + if schema and not autogen_context._has_batch: + text += ",\n%sschema=%r" % (indent, schema) + text += ")" + return text + + +class _f_name: + def __init__(self, prefix: str, name: conv) -> None: + self.prefix = prefix + self.name = name + + def __repr__(self) -> str: + return "%sf(%r)" % (self.prefix, _ident(self.name)) + + +def _ident(name: Optional[Union[quoted_name, str]]) -> Optional[str]: + """produce a __repr__() object for a string identifier that may + use quoted_name() in SQLAlchemy 0.9 and greater. + + The issue worked around here is that quoted_name() doesn't have + very good repr() behavior by itself when unicode is involved. + + """ + if name is None: + return name + elif isinstance(name, quoted_name): + return str(name) + elif isinstance(name, str): + return name + + +def _render_potential_expr( + value: Any, + autogen_context: AutogenContext, + *, + wrap_in_text: bool = True, + is_server_default: bool = False, + is_index: bool = False, +) -> str: + if isinstance(value, sql.ClauseElement): + if wrap_in_text: + template = "%(prefix)stext(%(sql)r)" + else: + template = "%(sql)r" + + return template % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "sql": autogen_context.migration_context.impl.render_ddl_sql_expr( + value, is_server_default=is_server_default, is_index=is_index + ), + } + + else: + return repr(value) + + +def _get_index_rendered_expressions( + idx: Index, autogen_context: AutogenContext +) -> List[str]: + return [ + repr(_ident(getattr(exp, "name", None))) + if isinstance(exp, sa_schema.Column) + else _render_potential_expr(exp, autogen_context, is_index=True) + for exp in idx.expressions + ] + + +def _uq_constraint( + constraint: UniqueConstraint, + autogen_context: AutogenContext, + alter: bool, +) -> str: + opts: List[Tuple[str, Any]] = [] + + has_batch = autogen_context._has_batch + + if constraint.deferrable: + opts.append(("deferrable", str(constraint.deferrable))) + if constraint.initially: + opts.append(("initially", str(constraint.initially))) + if not has_batch and alter and constraint.table.schema: + opts.append(("schema", _ident(constraint.table.schema))) + if not alter and constraint.name: + opts.append( + ("name", _render_gen_name(autogen_context, constraint.name)) + ) + dialect_options = _render_dialect_kwargs_items(autogen_context, constraint) + + if alter: + args = [repr(_render_gen_name(autogen_context, constraint.name))] + if not has_batch: + args += [repr(_ident(constraint.table.name))] + args.append(repr([_ident(col.name) for col in constraint.columns])) + args.extend(["%s=%r" % (k, v) for k, v in opts]) + args.extend(dialect_options) + return "%(prefix)screate_unique_constraint(%(args)s)" % { + "prefix": _alembic_autogenerate_prefix(autogen_context), + "args": ", ".join(args), + } + else: + args = [repr(_ident(col.name)) for col in constraint.columns] + args.extend(["%s=%r" % (k, v) for k, v in opts]) + args.extend(dialect_options) + return "%(prefix)sUniqueConstraint(%(args)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "args": ", ".join(args), + } + + +def _user_autogenerate_prefix(autogen_context, target): + prefix = autogen_context.opts["user_module_prefix"] + if prefix is None: + return "%s." % target.__module__ + else: + return prefix + + +def _sqlalchemy_autogenerate_prefix(autogen_context: AutogenContext) -> str: + return autogen_context.opts["sqlalchemy_module_prefix"] or "" + + +def _alembic_autogenerate_prefix(autogen_context: AutogenContext) -> str: + if autogen_context._has_batch: + return "batch_op." + else: + return autogen_context.opts["alembic_module_prefix"] or "" + + +def _user_defined_render( + type_: str, object_: Any, autogen_context: AutogenContext +) -> Union[str, Literal[False]]: + if "render_item" in autogen_context.opts: + render = autogen_context.opts["render_item"] + if render: + rendered = render(type_, object_, autogen_context) + if rendered is not False: + return rendered + return False + + +def _render_column( + column: Column[Any], autogen_context: AutogenContext +) -> str: + rendered = _user_defined_render("column", column, autogen_context) + if rendered is not False: + return rendered + + args: List[str] = [] + opts: List[Tuple[str, Any]] = [] + + if column.server_default: + rendered = _render_server_default( # type:ignore[assignment] + column.server_default, autogen_context + ) + if rendered: + if _should_render_server_default_positionally( + column.server_default + ): + args.append(rendered) + else: + opts.append(("server_default", rendered)) + + if ( + column.autoincrement is not None + and column.autoincrement != sqla_compat.AUTOINCREMENT_DEFAULT + ): + opts.append(("autoincrement", column.autoincrement)) + + if column.nullable is not None: + opts.append(("nullable", column.nullable)) + + if column.system: + opts.append(("system", column.system)) + + comment = column.comment + if comment: + opts.append(("comment", "%r" % comment)) + + # TODO: for non-ascii colname, assign a "key" + return "%(prefix)sColumn(%(name)r, %(type)s, %(args)s%(kwargs)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "name": _ident(column.name), + "type": _repr_type(column.type, autogen_context), + "args": ", ".join([str(arg) for arg in args]) + ", " if args else "", + "kwargs": ( + ", ".join( + ["%s=%s" % (kwname, val) for kwname, val in opts] + + [ + "%s=%s" + % (key, _render_potential_expr(val, autogen_context)) + for key, val in sqla_compat._column_kwargs(column).items() + ] + ) + ), + } + + +def _should_render_server_default_positionally(server_default: Any) -> bool: + return sqla_compat._server_default_is_computed( + server_default + ) or sqla_compat._server_default_is_identity(server_default) + + +def _render_server_default( + default: Optional[ + Union[FetchedValue, str, TextClause, ColumnElement[Any]] + ], + autogen_context: AutogenContext, + repr_: bool = True, +) -> Optional[str]: + rendered = _user_defined_render("server_default", default, autogen_context) + if rendered is not False: + return rendered + + if sqla_compat._server_default_is_computed(default): + return _render_computed(cast("Computed", default), autogen_context) + elif sqla_compat._server_default_is_identity(default): + return _render_identity(cast("Identity", default), autogen_context) + elif isinstance(default, sa_schema.DefaultClause): + if isinstance(default.arg, str): + default = default.arg + else: + return _render_potential_expr( + default.arg, autogen_context, is_server_default=True + ) + + if isinstance(default, str) and repr_: + default = repr(re.sub(r"^'|'$", "", default)) + + return cast(str, default) + + +def _render_computed( + computed: Computed, autogen_context: AutogenContext +) -> str: + text = _render_potential_expr( + computed.sqltext, autogen_context, wrap_in_text=False + ) + + kwargs = {} + if computed.persisted is not None: + kwargs["persisted"] = computed.persisted + return "%(prefix)sComputed(%(text)s, %(kwargs)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "text": text, + "kwargs": (", ".join("%s=%s" % pair for pair in kwargs.items())), + } + + +def _render_identity( + identity: Identity, autogen_context: AutogenContext +) -> str: + kwargs = sqla_compat._get_identity_options_dict( + identity, dialect_kwargs=True + ) + + return "%(prefix)sIdentity(%(kwargs)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "kwargs": (", ".join("%s=%s" % pair for pair in kwargs.items())), + } + + +def _repr_type( + type_: TypeEngine, + autogen_context: AutogenContext, + _skip_variants: bool = False, +) -> str: + rendered = _user_defined_render("type", type_, autogen_context) + if rendered is not False: + return rendered + + if hasattr(autogen_context.migration_context, "impl"): + impl_rt = autogen_context.migration_context.impl.render_type( + type_, autogen_context + ) + else: + impl_rt = None + + mod = type(type_).__module__ + imports = autogen_context.imports + if mod.startswith("sqlalchemy.dialects"): + match = re.match(r"sqlalchemy\.dialects\.(\w+)", mod) + assert match is not None + dname = match.group(1) + if imports is not None: + imports.add("from sqlalchemy.dialects import %s" % dname) + if impl_rt: + return impl_rt + else: + return "%s.%r" % (dname, type_) + elif impl_rt: + return impl_rt + elif not _skip_variants and sqla_compat._type_has_variants(type_): + return _render_Variant_type(type_, autogen_context) + elif mod.startswith("sqlalchemy."): + if "_render_%s_type" % type_.__visit_name__ in globals(): + fn = globals()["_render_%s_type" % type_.__visit_name__] + return fn(type_, autogen_context) + else: + prefix = _sqlalchemy_autogenerate_prefix(autogen_context) + return "%s%r" % (prefix, type_) + else: + prefix = _user_autogenerate_prefix(autogen_context, type_) + return "%s%r" % (prefix, type_) + + +def _render_ARRAY_type(type_: ARRAY, autogen_context: AutogenContext) -> str: + return cast( + str, + _render_type_w_subtype( + type_, autogen_context, "item_type", r"(.+?\()" + ), + ) + + +def _render_Variant_type( + type_: TypeEngine, autogen_context: AutogenContext +) -> str: + base_type, variant_mapping = sqla_compat._get_variant_mapping(type_) + base = _repr_type(base_type, autogen_context, _skip_variants=True) + assert base is not None and base is not False + for dialect in sorted(variant_mapping): + typ = variant_mapping[dialect] + base += ".with_variant(%s, %r)" % ( + _repr_type(typ, autogen_context, _skip_variants=True), + dialect, + ) + return base + + +def _render_type_w_subtype( + type_: TypeEngine, + autogen_context: AutogenContext, + attrname: str, + regexp: str, + prefix: Optional[str] = None, +) -> Union[Optional[str], Literal[False]]: + outer_repr = repr(type_) + inner_type = getattr(type_, attrname, None) + if inner_type is None: + return False + + inner_repr = repr(inner_type) + + inner_repr = re.sub(r"([\(\)])", r"\\\1", inner_repr) + sub_type = _repr_type(getattr(type_, attrname), autogen_context) + outer_type = re.sub(regexp + inner_repr, r"\1%s" % sub_type, outer_repr) + + if prefix: + return "%s%s" % (prefix, outer_type) + + mod = type(type_).__module__ + if mod.startswith("sqlalchemy.dialects"): + match = re.match(r"sqlalchemy\.dialects\.(\w+)", mod) + assert match is not None + dname = match.group(1) + return "%s.%s" % (dname, outer_type) + elif mod.startswith("sqlalchemy"): + prefix = _sqlalchemy_autogenerate_prefix(autogen_context) + return "%s%s" % (prefix, outer_type) + else: + return None + + +_constraint_renderers = util.Dispatcher() + + +def _render_constraint( + constraint: Constraint, + autogen_context: AutogenContext, + namespace_metadata: Optional[MetaData], +) -> Optional[str]: + try: + renderer = _constraint_renderers.dispatch(constraint) + except ValueError: + util.warn("No renderer is established for object %r" % constraint) + return "[Unknown Python object %r]" % constraint + else: + return renderer(constraint, autogen_context, namespace_metadata) + + +@_constraint_renderers.dispatch_for(sa_schema.PrimaryKeyConstraint) +def _render_primary_key( + constraint: PrimaryKeyConstraint, + autogen_context: AutogenContext, + namespace_metadata: Optional[MetaData], +) -> Optional[str]: + rendered = _user_defined_render("primary_key", constraint, autogen_context) + if rendered is not False: + return rendered + + if not constraint.columns: + return None + + opts = [] + if constraint.name: + opts.append( + ("name", repr(_render_gen_name(autogen_context, constraint.name))) + ) + return "%(prefix)sPrimaryKeyConstraint(%(args)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "args": ", ".join( + [repr(c.name) for c in constraint.columns] + + ["%s=%s" % (kwname, val) for kwname, val in opts] + ), + } + + +def _fk_colspec( + fk: ForeignKey, + metadata_schema: Optional[str], + namespace_metadata: MetaData, +) -> str: + """Implement a 'safe' version of ForeignKey._get_colspec() that + won't fail if the remote table can't be resolved. + + """ + colspec = fk._get_colspec() # type:ignore[attr-defined] + tokens = colspec.split(".") + tname, colname = tokens[-2:] + + if metadata_schema is not None and len(tokens) == 2: + table_fullname = "%s.%s" % (metadata_schema, tname) + else: + table_fullname = ".".join(tokens[0:-1]) + + if ( + not fk.link_to_name + and fk.parent is not None + and fk.parent.table is not None + ): + # try to resolve the remote table in order to adjust for column.key. + # the FK constraint needs to be rendered in terms of the column + # name. + + if table_fullname in namespace_metadata.tables: + col = namespace_metadata.tables[table_fullname].c.get(colname) + if col is not None: + colname = _ident(col.name) # type: ignore[assignment] + + colspec = "%s.%s" % (table_fullname, colname) + + return colspec + + +def _populate_render_fk_opts( + constraint: ForeignKeyConstraint, opts: List[Tuple[str, str]] +) -> None: + if constraint.onupdate: + opts.append(("onupdate", repr(constraint.onupdate))) + if constraint.ondelete: + opts.append(("ondelete", repr(constraint.ondelete))) + if constraint.initially: + opts.append(("initially", repr(constraint.initially))) + if constraint.deferrable: + opts.append(("deferrable", repr(constraint.deferrable))) + if constraint.use_alter: + opts.append(("use_alter", repr(constraint.use_alter))) + if constraint.match: + opts.append(("match", repr(constraint.match))) + + +@_constraint_renderers.dispatch_for(sa_schema.ForeignKeyConstraint) +def _render_foreign_key( + constraint: ForeignKeyConstraint, + autogen_context: AutogenContext, + namespace_metadata: MetaData, +) -> Optional[str]: + rendered = _user_defined_render("foreign_key", constraint, autogen_context) + if rendered is not False: + return rendered + + opts = [] + if constraint.name: + opts.append( + ("name", repr(_render_gen_name(autogen_context, constraint.name))) + ) + + _populate_render_fk_opts(constraint, opts) + + apply_metadata_schema = namespace_metadata.schema + return ( + "%(prefix)sForeignKeyConstraint([%(cols)s], " + "[%(refcols)s], %(args)s)" + % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "cols": ", ".join( + "%r" % _ident(cast("Column", f.parent).name) + for f in constraint.elements + ), + "refcols": ", ".join( + repr(_fk_colspec(f, apply_metadata_schema, namespace_metadata)) + for f in constraint.elements + ), + "args": ", ".join( + ["%s=%s" % (kwname, val) for kwname, val in opts] + ), + } + ) + + +@_constraint_renderers.dispatch_for(sa_schema.UniqueConstraint) +def _render_unique_constraint( + constraint: UniqueConstraint, + autogen_context: AutogenContext, + namespace_metadata: Optional[MetaData], +) -> str: + rendered = _user_defined_render("unique", constraint, autogen_context) + if rendered is not False: + return rendered + + return _uq_constraint(constraint, autogen_context, False) + + +@_constraint_renderers.dispatch_for(sa_schema.CheckConstraint) +def _render_check_constraint( + constraint: CheckConstraint, + autogen_context: AutogenContext, + namespace_metadata: Optional[MetaData], +) -> Optional[str]: + rendered = _user_defined_render("check", constraint, autogen_context) + if rendered is not False: + return rendered + + # detect the constraint being part of + # a parent type which is probably in the Table already. + # ideally SQLAlchemy would give us more of a first class + # way to detect this. + if ( + constraint._create_rule # type:ignore[attr-defined] + and hasattr( + constraint._create_rule, "target" # type:ignore[attr-defined] + ) + and isinstance( + constraint._create_rule.target, # type:ignore[attr-defined] + sqltypes.TypeEngine, + ) + ): + return None + opts = [] + if constraint.name: + opts.append( + ("name", repr(_render_gen_name(autogen_context, constraint.name))) + ) + return "%(prefix)sCheckConstraint(%(sqltext)s%(opts)s)" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + "opts": ", " + (", ".join("%s=%s" % (k, v) for k, v in opts)) + if opts + else "", + "sqltext": _render_potential_expr( + constraint.sqltext, autogen_context, wrap_in_text=False + ), + } + + +@renderers.dispatch_for(ops.ExecuteSQLOp) +def _execute_sql(autogen_context: AutogenContext, op: ops.ExecuteSQLOp) -> str: + if not isinstance(op.sqltext, str): + raise NotImplementedError( + "Autogenerate rendering of SQL Expression language constructs " + "not supported here; please use a plain SQL string" + ) + return "op.execute(%r)" % op.sqltext + + +renderers = default_renderers.branch() diff --git a/venv/Lib/site-packages/alembic/autogenerate/rewriter.py b/venv/Lib/site-packages/alembic/autogenerate/rewriter.py new file mode 100644 index 0000000..68a93dd --- /dev/null +++ b/venv/Lib/site-packages/alembic/autogenerate/rewriter.py @@ -0,0 +1,227 @@ +from __future__ import annotations + +from typing import Any +from typing import Callable +from typing import Iterator +from typing import List +from typing import Optional +from typing import Type +from typing import TYPE_CHECKING +from typing import Union + +from .. import util +from ..operations import ops + +if TYPE_CHECKING: + from ..operations.ops import AddColumnOp + from ..operations.ops import AlterColumnOp + from ..operations.ops import CreateTableOp + from ..operations.ops import MigrateOperation + from ..operations.ops import MigrationScript + from ..operations.ops import ModifyTableOps + from ..operations.ops import OpContainer + from ..runtime.environment import _GetRevArg + from ..runtime.migration import MigrationContext + + +class Rewriter: + """A helper object that allows easy 'rewriting' of ops streams. + + The :class:`.Rewriter` object is intended to be passed along + to the + :paramref:`.EnvironmentContext.configure.process_revision_directives` + parameter in an ``env.py`` script. Once constructed, any number + of "rewrites" functions can be associated with it, which will be given + the opportunity to modify the structure without having to have explicit + knowledge of the overall structure. + + The function is passed the :class:`.MigrationContext` object and + ``revision`` tuple that are passed to the :paramref:`.Environment + Context.configure.process_revision_directives` function normally, + and the third argument is an individual directive of the type + noted in the decorator. The function has the choice of returning + a single op directive, which normally can be the directive that + was actually passed, or a new directive to replace it, or a list + of zero or more directives to replace it. + + .. seealso:: + + :ref:`autogen_rewriter` - usage example + + """ + + _traverse = util.Dispatcher() + + _chained: Optional[Rewriter] = None + + def __init__(self) -> None: + self.dispatch = util.Dispatcher() + + def chain(self, other: Rewriter) -> Rewriter: + """Produce a "chain" of this :class:`.Rewriter` to another. + + This allows two rewriters to operate serially on a stream, + e.g.:: + + writer1 = autogenerate.Rewriter() + writer2 = autogenerate.Rewriter() + + + @writer1.rewrites(ops.AddColumnOp) + def add_column_nullable(context, revision, op): + op.column.nullable = True + return op + + + @writer2.rewrites(ops.AddColumnOp) + def add_column_idx(context, revision, op): + idx_op = ops.CreateIndexOp( + "ixc", op.table_name, [op.column.name] + ) + return [op, idx_op] + + writer = writer1.chain(writer2) + + :param other: a :class:`.Rewriter` instance + :return: a new :class:`.Rewriter` that will run the operations + of this writer, then the "other" writer, in succession. + + """ + wr = self.__class__.__new__(self.__class__) + wr.__dict__.update(self.__dict__) + wr._chained = other + return wr + + def rewrites( + self, + operator: Union[ + Type[AddColumnOp], + Type[MigrateOperation], + Type[AlterColumnOp], + Type[CreateTableOp], + Type[ModifyTableOps], + ], + ) -> Callable: + """Register a function as rewriter for a given type. + + The function should receive three arguments, which are + the :class:`.MigrationContext`, a ``revision`` tuple, and + an op directive of the type indicated. E.g.:: + + @writer1.rewrites(ops.AddColumnOp) + def add_column_nullable(context, revision, op): + op.column.nullable = True + return op + + """ + return self.dispatch.dispatch_for(operator) + + def _rewrite( + self, + context: MigrationContext, + revision: _GetRevArg, + directive: MigrateOperation, + ) -> Iterator[MigrateOperation]: + try: + _rewriter = self.dispatch.dispatch(directive) + except ValueError: + _rewriter = None + yield directive + else: + if self in directive._mutations: + yield directive + else: + for r_directive in util.to_list( + _rewriter(context, revision, directive), [] + ): + r_directive._mutations = r_directive._mutations.union( + [self] + ) + yield r_directive + + def __call__( + self, + context: MigrationContext, + revision: _GetRevArg, + directives: List[MigrationScript], + ) -> None: + self.process_revision_directives(context, revision, directives) + if self._chained: + self._chained(context, revision, directives) + + @_traverse.dispatch_for(ops.MigrationScript) + def _traverse_script( + self, + context: MigrationContext, + revision: _GetRevArg, + directive: MigrationScript, + ) -> None: + upgrade_ops_list = [] + for upgrade_ops in directive.upgrade_ops_list: + ret = self._traverse_for(context, revision, upgrade_ops) + if len(ret) != 1: + raise ValueError( + "Can only return single object for UpgradeOps traverse" + ) + upgrade_ops_list.append(ret[0]) + directive.upgrade_ops = upgrade_ops_list + + downgrade_ops_list = [] + for downgrade_ops in directive.downgrade_ops_list: + ret = self._traverse_for(context, revision, downgrade_ops) + if len(ret) != 1: + raise ValueError( + "Can only return single object for DowngradeOps traverse" + ) + downgrade_ops_list.append(ret[0]) + directive.downgrade_ops = downgrade_ops_list + + @_traverse.dispatch_for(ops.OpContainer) + def _traverse_op_container( + self, + context: MigrationContext, + revision: _GetRevArg, + directive: OpContainer, + ) -> None: + self._traverse_list(context, revision, directive.ops) + + @_traverse.dispatch_for(ops.MigrateOperation) + def _traverse_any_directive( + self, + context: MigrationContext, + revision: _GetRevArg, + directive: MigrateOperation, + ) -> None: + pass + + def _traverse_for( + self, + context: MigrationContext, + revision: _GetRevArg, + directive: MigrateOperation, + ) -> Any: + directives = list(self._rewrite(context, revision, directive)) + for directive in directives: + traverser = self._traverse.dispatch(directive) + traverser(self, context, revision, directive) + return directives + + def _traverse_list( + self, + context: MigrationContext, + revision: _GetRevArg, + directives: Any, + ) -> None: + dest = [] + for directive in directives: + dest.extend(self._traverse_for(context, revision, directive)) + + directives[:] = dest + + def process_revision_directives( + self, + context: MigrationContext, + revision: _GetRevArg, + directives: List[MigrationScript], + ) -> None: + self._traverse_list(context, revision, directives) diff --git a/venv/Lib/site-packages/alembic/command.py b/venv/Lib/site-packages/alembic/command.py new file mode 100644 index 0000000..dbaa9cf --- /dev/null +++ b/venv/Lib/site-packages/alembic/command.py @@ -0,0 +1,744 @@ +from __future__ import annotations + +import os +from typing import List +from typing import Optional +from typing import TYPE_CHECKING +from typing import Union + +from . import autogenerate as autogen +from . import util +from .runtime.environment import EnvironmentContext +from .script import ScriptDirectory + +if TYPE_CHECKING: + from alembic.config import Config + from alembic.script.base import Script + from alembic.script.revision import _RevIdType + from .runtime.environment import ProcessRevisionDirectiveFn + + +def list_templates(config: Config): + """List available templates. + + :param config: a :class:`.Config` object. + + """ + + config.print_stdout("Available templates:\n") + for tempname in os.listdir(config.get_template_directory()): + with open( + os.path.join(config.get_template_directory(), tempname, "README") + ) as readme: + synopsis = next(readme).rstrip() + config.print_stdout("%s - %s", tempname, synopsis) + + config.print_stdout("\nTemplates are used via the 'init' command, e.g.:") + config.print_stdout("\n alembic init --template generic ./scripts") + + +def init( + config: Config, + directory: str, + template: str = "generic", + package: bool = False, +) -> None: + """Initialize a new scripts directory. + + :param config: a :class:`.Config` object. + + :param directory: string path of the target directory + + :param template: string name of the migration environment template to + use. + + :param package: when True, write ``__init__.py`` files into the + environment location as well as the versions/ location. + + """ + + if os.access(directory, os.F_OK) and os.listdir(directory): + raise util.CommandError( + "Directory %s already exists and is not empty" % directory + ) + + template_dir = os.path.join(config.get_template_directory(), template) + if not os.access(template_dir, os.F_OK): + raise util.CommandError("No such template %r" % template) + + if not os.access(directory, os.F_OK): + with util.status( + f"Creating directory {os.path.abspath(directory)!r}", + **config.messaging_opts, + ): + os.makedirs(directory) + + versions = os.path.join(directory, "versions") + with util.status( + f"Creating directory {os.path.abspath(versions)!r}", + **config.messaging_opts, + ): + os.makedirs(versions) + + script = ScriptDirectory(directory) + + config_file: str | None = None + for file_ in os.listdir(template_dir): + file_path = os.path.join(template_dir, file_) + if file_ == "alembic.ini.mako": + assert config.config_file_name is not None + config_file = os.path.abspath(config.config_file_name) + if os.access(config_file, os.F_OK): + util.msg( + f"File {config_file!r} already exists, skipping", + **config.messaging_opts, + ) + else: + script._generate_template( + file_path, config_file, script_location=directory + ) + elif os.path.isfile(file_path): + output_file = os.path.join(directory, file_) + script._copy_file(file_path, output_file) + + if package: + for path in [ + os.path.join(os.path.abspath(directory), "__init__.py"), + os.path.join(os.path.abspath(versions), "__init__.py"), + ]: + with util.status(f"Adding {path!r}", **config.messaging_opts): + with open(path, "w"): + pass + + assert config_file is not None + util.msg( + "Please edit configuration/connection/logging " + f"settings in {config_file!r} before proceeding.", + **config.messaging_opts, + ) + + +def revision( + config: Config, + message: Optional[str] = None, + autogenerate: bool = False, + sql: bool = False, + head: str = "head", + splice: bool = False, + branch_label: Optional[_RevIdType] = None, + version_path: Optional[str] = None, + rev_id: Optional[str] = None, + depends_on: Optional[str] = None, + process_revision_directives: Optional[ProcessRevisionDirectiveFn] = None, +) -> Union[Optional[Script], List[Optional[Script]]]: + """Create a new revision file. + + :param config: a :class:`.Config` object. + + :param message: string message to apply to the revision; this is the + ``-m`` option to ``alembic revision``. + + :param autogenerate: whether or not to autogenerate the script from + the database; this is the ``--autogenerate`` option to + ``alembic revision``. + + :param sql: whether to dump the script out as a SQL string; when specified, + the script is dumped to stdout. This is the ``--sql`` option to + ``alembic revision``. + + :param head: head revision to build the new revision upon as a parent; + this is the ``--head`` option to ``alembic revision``. + + :param splice: whether or not the new revision should be made into a + new head of its own; is required when the given ``head`` is not itself + a head. This is the ``--splice`` option to ``alembic revision``. + + :param branch_label: string label to apply to the branch; this is the + ``--branch-label`` option to ``alembic revision``. + + :param version_path: string symbol identifying a specific version path + from the configuration; this is the ``--version-path`` option to + ``alembic revision``. + + :param rev_id: optional revision identifier to use instead of having + one generated; this is the ``--rev-id`` option to ``alembic revision``. + + :param depends_on: optional list of "depends on" identifiers; this is the + ``--depends-on`` option to ``alembic revision``. + + :param process_revision_directives: this is a callable that takes the + same form as the callable described at + :paramref:`.EnvironmentContext.configure.process_revision_directives`; + will be applied to the structure generated by the revision process + where it can be altered programmatically. Note that unlike all + the other parameters, this option is only available via programmatic + use of :func:`.command.revision` + + """ + + script_directory = ScriptDirectory.from_config(config) + + command_args = dict( + message=message, + autogenerate=autogenerate, + sql=sql, + head=head, + splice=splice, + branch_label=branch_label, + version_path=version_path, + rev_id=rev_id, + depends_on=depends_on, + ) + revision_context = autogen.RevisionContext( + config, + script_directory, + command_args, + process_revision_directives=process_revision_directives, + ) + + environment = util.asbool(config.get_main_option("revision_environment")) + + if autogenerate: + environment = True + + if sql: + raise util.CommandError( + "Using --sql with --autogenerate does not make any sense" + ) + + def retrieve_migrations(rev, context): + revision_context.run_autogenerate(rev, context) + return [] + + elif environment: + + def retrieve_migrations(rev, context): + revision_context.run_no_autogenerate(rev, context) + return [] + + elif sql: + raise util.CommandError( + "Using --sql with the revision command when " + "revision_environment is not configured does not make any sense" + ) + + if environment: + with EnvironmentContext( + config, + script_directory, + fn=retrieve_migrations, + as_sql=sql, + template_args=revision_context.template_args, + revision_context=revision_context, + ): + script_directory.run_env() + + # the revision_context now has MigrationScript structure(s) present. + # these could theoretically be further processed / rewritten *here*, + # in addition to the hooks present within each run_migrations() call, + # or at the end of env.py run_migrations_online(). + + scripts = [script for script in revision_context.generate_scripts()] + if len(scripts) == 1: + return scripts[0] + else: + return scripts + + +def check(config: "Config") -> None: + """Check if revision command with autogenerate has pending upgrade ops. + + :param config: a :class:`.Config` object. + + .. versionadded:: 1.9.0 + + """ + + script_directory = ScriptDirectory.from_config(config) + + command_args = dict( + message=None, + autogenerate=True, + sql=False, + head="head", + splice=False, + branch_label=None, + version_path=None, + rev_id=None, + depends_on=None, + ) + revision_context = autogen.RevisionContext( + config, + script_directory, + command_args, + ) + + def retrieve_migrations(rev, context): + revision_context.run_autogenerate(rev, context) + return [] + + with EnvironmentContext( + config, + script_directory, + fn=retrieve_migrations, + as_sql=False, + template_args=revision_context.template_args, + revision_context=revision_context, + ): + script_directory.run_env() + + # the revision_context now has MigrationScript structure(s) present. + + migration_script = revision_context.generated_revisions[-1] + diffs = migration_script.upgrade_ops.as_diffs() + if diffs: + raise util.AutogenerateDiffsDetected( + f"New upgrade operations detected: {diffs}" + ) + else: + config.print_stdout("No new upgrade operations detected.") + + +def merge( + config: Config, + revisions: _RevIdType, + message: Optional[str] = None, + branch_label: Optional[_RevIdType] = None, + rev_id: Optional[str] = None, +) -> Optional[Script]: + """Merge two revisions together. Creates a new migration file. + + :param config: a :class:`.Config` instance + + :param message: string message to apply to the revision + + :param branch_label: string label name to apply to the new revision + + :param rev_id: hardcoded revision identifier instead of generating a new + one. + + .. seealso:: + + :ref:`branches` + + """ + + script = ScriptDirectory.from_config(config) + template_args = { + "config": config # Let templates use config for + # e.g. multiple databases + } + + environment = util.asbool(config.get_main_option("revision_environment")) + + if environment: + + def nothing(rev, context): + return [] + + with EnvironmentContext( + config, + script, + fn=nothing, + as_sql=False, + template_args=template_args, + ): + script.run_env() + + return script.generate_revision( + rev_id or util.rev_id(), + message, + refresh=True, + head=revisions, + branch_labels=branch_label, + **template_args, # type:ignore[arg-type] + ) + + +def upgrade( + config: Config, + revision: str, + sql: bool = False, + tag: Optional[str] = None, +) -> None: + """Upgrade to a later version. + + :param config: a :class:`.Config` instance. + + :param revision: string revision target or range for --sql mode + + :param sql: if True, use ``--sql`` mode + + :param tag: an arbitrary "tag" that can be intercepted by custom + ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` + method. + + """ + + script = ScriptDirectory.from_config(config) + + starting_rev = None + if ":" in revision: + if not sql: + raise util.CommandError("Range revision not allowed") + starting_rev, revision = revision.split(":", 2) + + def upgrade(rev, context): + return script._upgrade_revs(revision, rev) + + with EnvironmentContext( + config, + script, + fn=upgrade, + as_sql=sql, + starting_rev=starting_rev, + destination_rev=revision, + tag=tag, + ): + script.run_env() + + +def downgrade( + config: Config, + revision: str, + sql: bool = False, + tag: Optional[str] = None, +) -> None: + """Revert to a previous version. + + :param config: a :class:`.Config` instance. + + :param revision: string revision target or range for --sql mode + + :param sql: if True, use ``--sql`` mode + + :param tag: an arbitrary "tag" that can be intercepted by custom + ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` + method. + + """ + + script = ScriptDirectory.from_config(config) + starting_rev = None + if ":" in revision: + if not sql: + raise util.CommandError("Range revision not allowed") + starting_rev, revision = revision.split(":", 2) + elif sql: + raise util.CommandError( + "downgrade with --sql requires :" + ) + + def downgrade(rev, context): + return script._downgrade_revs(revision, rev) + + with EnvironmentContext( + config, + script, + fn=downgrade, + as_sql=sql, + starting_rev=starting_rev, + destination_rev=revision, + tag=tag, + ): + script.run_env() + + +def show(config, rev): + """Show the revision(s) denoted by the given symbol. + + :param config: a :class:`.Config` instance. + + :param revision: string revision target + + """ + + script = ScriptDirectory.from_config(config) + + if rev == "current": + + def show_current(rev, context): + for sc in script.get_revisions(rev): + config.print_stdout(sc.log_entry) + return [] + + with EnvironmentContext(config, script, fn=show_current): + script.run_env() + else: + for sc in script.get_revisions(rev): + config.print_stdout(sc.log_entry) + + +def history( + config: Config, + rev_range: Optional[str] = None, + verbose: bool = False, + indicate_current: bool = False, +) -> None: + """List changeset scripts in chronological order. + + :param config: a :class:`.Config` instance. + + :param rev_range: string revision range + + :param verbose: output in verbose mode. + + :param indicate_current: indicate current revision. + + """ + base: Optional[str] + head: Optional[str] + script = ScriptDirectory.from_config(config) + if rev_range is not None: + if ":" not in rev_range: + raise util.CommandError( + "History range requires [start]:[end], " "[start]:, or :[end]" + ) + base, head = rev_range.strip().split(":") + else: + base = head = None + + environment = ( + util.asbool(config.get_main_option("revision_environment")) + or indicate_current + ) + + def _display_history(config, script, base, head, currents=()): + for sc in script.walk_revisions( + base=base or "base", head=head or "heads" + ): + if indicate_current: + sc._db_current_indicator = sc.revision in currents + + config.print_stdout( + sc.cmd_format( + verbose=verbose, + include_branches=True, + include_doc=True, + include_parents=True, + ) + ) + + def _display_history_w_current(config, script, base, head): + def _display_current_history(rev, context): + if head == "current": + _display_history(config, script, base, rev, rev) + elif base == "current": + _display_history(config, script, rev, head, rev) + else: + _display_history(config, script, base, head, rev) + return [] + + with EnvironmentContext(config, script, fn=_display_current_history): + script.run_env() + + if base == "current" or head == "current" or environment: + _display_history_w_current(config, script, base, head) + else: + _display_history(config, script, base, head) + + +def heads(config, verbose=False, resolve_dependencies=False): + """Show current available heads in the script directory. + + :param config: a :class:`.Config` instance. + + :param verbose: output in verbose mode. + + :param resolve_dependencies: treat dependency version as down revisions. + + """ + + script = ScriptDirectory.from_config(config) + if resolve_dependencies: + heads = script.get_revisions("heads") + else: + heads = script.get_revisions(script.get_heads()) + + for rev in heads: + config.print_stdout( + rev.cmd_format( + verbose, include_branches=True, tree_indicators=False + ) + ) + + +def branches(config, verbose=False): + """Show current branch points. + + :param config: a :class:`.Config` instance. + + :param verbose: output in verbose mode. + + """ + script = ScriptDirectory.from_config(config) + for sc in script.walk_revisions(): + if sc.is_branch_point: + config.print_stdout( + "%s\n%s\n", + sc.cmd_format(verbose, include_branches=True), + "\n".join( + "%s -> %s" + % ( + " " * len(str(sc.revision)), + rev_obj.cmd_format( + False, include_branches=True, include_doc=verbose + ), + ) + for rev_obj in ( + script.get_revision(rev) for rev in sc.nextrev + ) + ), + ) + + +def current(config: Config, verbose: bool = False) -> None: + """Display the current revision for a database. + + :param config: a :class:`.Config` instance. + + :param verbose: output in verbose mode. + + """ + + script = ScriptDirectory.from_config(config) + + def display_version(rev, context): + if verbose: + config.print_stdout( + "Current revision(s) for %s:", + util.obfuscate_url_pw(context.connection.engine.url), + ) + for rev in script.get_all_current(rev): + config.print_stdout(rev.cmd_format(verbose)) + + return [] + + with EnvironmentContext( + config, script, fn=display_version, dont_mutate=True + ): + script.run_env() + + +def stamp( + config: Config, + revision: _RevIdType, + sql: bool = False, + tag: Optional[str] = None, + purge: bool = False, +) -> None: + """'stamp' the revision table with the given revision; don't + run any migrations. + + :param config: a :class:`.Config` instance. + + :param revision: target revision or list of revisions. May be a list + to indicate stamping of multiple branch heads. + + .. note:: this parameter is called "revisions" in the command line + interface. + + :param sql: use ``--sql`` mode + + :param tag: an arbitrary "tag" that can be intercepted by custom + ``env.py`` scripts via the :class:`.EnvironmentContext.get_tag_argument` + method. + + :param purge: delete all entries in the version table before stamping. + + """ + + script = ScriptDirectory.from_config(config) + + if sql: + destination_revs = [] + starting_rev = None + for _revision in util.to_list(revision): + if ":" in _revision: + srev, _revision = _revision.split(":", 2) + + if starting_rev != srev: + if starting_rev is None: + starting_rev = srev + else: + raise util.CommandError( + "Stamp operation with --sql only supports a " + "single starting revision at a time" + ) + destination_revs.append(_revision) + else: + destination_revs = util.to_list(revision) + + def do_stamp(rev, context): + return script._stamp_revs(util.to_tuple(destination_revs), rev) + + with EnvironmentContext( + config, + script, + fn=do_stamp, + as_sql=sql, + starting_rev=starting_rev if sql else None, + destination_rev=util.to_tuple(destination_revs), + tag=tag, + purge=purge, + ): + script.run_env() + + +def edit(config: Config, rev: str) -> None: + """Edit revision script(s) using $EDITOR. + + :param config: a :class:`.Config` instance. + + :param rev: target revision. + + """ + + script = ScriptDirectory.from_config(config) + + if rev == "current": + + def edit_current(rev, context): + if not rev: + raise util.CommandError("No current revisions") + for sc in script.get_revisions(rev): + util.open_in_editor(sc.path) + return [] + + with EnvironmentContext(config, script, fn=edit_current): + script.run_env() + else: + revs = script.get_revisions(rev) + if not revs: + raise util.CommandError( + "No revision files indicated by symbol '%s'" % rev + ) + for sc in revs: + assert sc + util.open_in_editor(sc.path) + + +def ensure_version(config: Config, sql: bool = False) -> None: + """Create the alembic version table if it doesn't exist already . + + :param config: a :class:`.Config` instance. + + :param sql: use ``--sql`` mode + + .. versionadded:: 1.7.6 + + """ + + script = ScriptDirectory.from_config(config) + + def do_ensure_version(rev, context): + context._ensure_version_table() + return [] + + with EnvironmentContext( + config, + script, + fn=do_ensure_version, + as_sql=sql, + ): + script.run_env() diff --git a/venv/Lib/site-packages/alembic/config.py b/venv/Lib/site-packages/alembic/config.py new file mode 100644 index 0000000..55b5811 --- /dev/null +++ b/venv/Lib/site-packages/alembic/config.py @@ -0,0 +1,634 @@ +from __future__ import annotations + +from argparse import ArgumentParser +from argparse import Namespace +from configparser import ConfigParser +import inspect +import os +import sys +from typing import Any +from typing import cast +from typing import Dict +from typing import Mapping +from typing import Optional +from typing import overload +from typing import TextIO +from typing import Union + +from typing_extensions import TypedDict + +from . import __version__ +from . import command +from . import util +from .util import compat + + +class Config: + r"""Represent an Alembic configuration. + + Within an ``env.py`` script, this is available + via the :attr:`.EnvironmentContext.config` attribute, + which in turn is available at ``alembic.context``:: + + from alembic import context + + some_param = context.config.get_main_option("my option") + + When invoking Alembic programmatically, a new + :class:`.Config` can be created by passing + the name of an .ini file to the constructor:: + + from alembic.config import Config + alembic_cfg = Config("/path/to/yourapp/alembic.ini") + + With a :class:`.Config` object, you can then + run Alembic commands programmatically using the directives + in :mod:`alembic.command`. + + The :class:`.Config` object can also be constructed without + a filename. Values can be set programmatically, and + new sections will be created as needed:: + + from alembic.config import Config + alembic_cfg = Config() + alembic_cfg.set_main_option("script_location", "myapp:migrations") + alembic_cfg.set_main_option("sqlalchemy.url", "postgresql://foo/bar") + alembic_cfg.set_section_option("mysection", "foo", "bar") + + .. warning:: + + When using programmatic configuration, make sure the + ``env.py`` file in use is compatible with the target configuration; + including that the call to Python ``logging.fileConfig()`` is + omitted if the programmatic configuration doesn't actually include + logging directives. + + For passing non-string values to environments, such as connections and + engines, use the :attr:`.Config.attributes` dictionary:: + + with engine.begin() as connection: + alembic_cfg.attributes['connection'] = connection + command.upgrade(alembic_cfg, "head") + + :param file\_: name of the .ini file to open. + :param ini_section: name of the main Alembic section within the + .ini file + :param output_buffer: optional file-like input buffer which + will be passed to the :class:`.MigrationContext` - used to redirect + the output of "offline generation" when using Alembic programmatically. + :param stdout: buffer where the "print" output of commands will be sent. + Defaults to ``sys.stdout``. + + :param config_args: A dictionary of keys and values that will be used + for substitution in the alembic config file. The dictionary as given + is **copied** to a new one, stored locally as the attribute + ``.config_args``. When the :attr:`.Config.file_config` attribute is + first invoked, the replacement variable ``here`` will be added to this + dictionary before the dictionary is passed to ``ConfigParser()`` + to parse the .ini file. + + :param attributes: optional dictionary of arbitrary Python keys/values, + which will be populated into the :attr:`.Config.attributes` dictionary. + + .. seealso:: + + :ref:`connection_sharing` + + """ + + def __init__( + self, + file_: Union[str, os.PathLike[str], None] = None, + ini_section: str = "alembic", + output_buffer: Optional[TextIO] = None, + stdout: TextIO = sys.stdout, + cmd_opts: Optional[Namespace] = None, + config_args: Mapping[str, Any] = util.immutabledict(), + attributes: Optional[dict] = None, + ) -> None: + """Construct a new :class:`.Config`""" + self.config_file_name = file_ + self.config_ini_section = ini_section + self.output_buffer = output_buffer + self.stdout = stdout + self.cmd_opts = cmd_opts + self.config_args = dict(config_args) + if attributes: + self.attributes.update(attributes) + + cmd_opts: Optional[Namespace] = None + """The command-line options passed to the ``alembic`` script. + + Within an ``env.py`` script this can be accessed via the + :attr:`.EnvironmentContext.config` attribute. + + .. seealso:: + + :meth:`.EnvironmentContext.get_x_argument` + + """ + + config_file_name: Union[str, os.PathLike[str], None] = None + """Filesystem path to the .ini file in use.""" + + config_ini_section: str = None # type:ignore[assignment] + """Name of the config file section to read basic configuration + from. Defaults to ``alembic``, that is the ``[alembic]`` section + of the .ini file. This value is modified using the ``-n/--name`` + option to the Alembic runner. + + """ + + @util.memoized_property + def attributes(self): + """A Python dictionary for storage of additional state. + + + This is a utility dictionary which can include not just strings but + engines, connections, schema objects, or anything else. + Use this to pass objects into an env.py script, such as passing + a :class:`sqlalchemy.engine.base.Connection` when calling + commands from :mod:`alembic.command` programmatically. + + .. seealso:: + + :ref:`connection_sharing` + + :paramref:`.Config.attributes` + + """ + return {} + + def print_stdout(self, text: str, *arg) -> None: + """Render a message to standard out. + + When :meth:`.Config.print_stdout` is called with additional args + those arguments will formatted against the provided text, + otherwise we simply output the provided text verbatim. + + This is a no-op when the``quiet`` messaging option is enabled. + + e.g.:: + + >>> config.print_stdout('Some text %s', 'arg') + Some Text arg + + """ + + if arg: + output = str(text) % arg + else: + output = str(text) + + util.write_outstream(self.stdout, output, "\n", **self.messaging_opts) + + @util.memoized_property + def file_config(self): + """Return the underlying ``ConfigParser`` object. + + Direct access to the .ini file is available here, + though the :meth:`.Config.get_section` and + :meth:`.Config.get_main_option` + methods provide a possibly simpler interface. + + """ + + if self.config_file_name: + here = os.path.abspath(os.path.dirname(self.config_file_name)) + else: + here = "" + self.config_args["here"] = here + file_config = ConfigParser(self.config_args) + if self.config_file_name: + compat.read_config_parser(file_config, [self.config_file_name]) + else: + file_config.add_section(self.config_ini_section) + return file_config + + def get_template_directory(self) -> str: + """Return the directory where Alembic setup templates are found. + + This method is used by the alembic ``init`` and ``list_templates`` + commands. + + """ + import alembic + + package_dir = os.path.abspath(os.path.dirname(alembic.__file__)) + return os.path.join(package_dir, "templates") + + @overload + def get_section( + self, name: str, default: None = ... + ) -> Optional[Dict[str, str]]: + ... + + # "default" here could also be a TypeVar + # _MT = TypeVar("_MT", bound=Mapping[str, str]), + # however mypy wasn't handling that correctly (pyright was) + @overload + def get_section( + self, name: str, default: Dict[str, str] + ) -> Dict[str, str]: + ... + + @overload + def get_section( + self, name: str, default: Mapping[str, str] + ) -> Union[Dict[str, str], Mapping[str, str]]: + ... + + def get_section( + self, name: str, default: Optional[Mapping[str, str]] = None + ) -> Optional[Mapping[str, str]]: + """Return all the configuration options from a given .ini file section + as a dictionary. + + If the given section does not exist, the value of ``default`` + is returned, which is expected to be a dictionary or other mapping. + + """ + if not self.file_config.has_section(name): + return default + + return dict(self.file_config.items(name)) + + def set_main_option(self, name: str, value: str) -> None: + """Set an option programmatically within the 'main' section. + + This overrides whatever was in the .ini file. + + :param name: name of the value + + :param value: the value. Note that this value is passed to + ``ConfigParser.set``, which supports variable interpolation using + pyformat (e.g. ``%(some_value)s``). A raw percent sign not part of + an interpolation symbol must therefore be escaped, e.g. ``%%``. + The given value may refer to another value already in the file + using the interpolation format. + + """ + self.set_section_option(self.config_ini_section, name, value) + + def remove_main_option(self, name: str) -> None: + self.file_config.remove_option(self.config_ini_section, name) + + def set_section_option(self, section: str, name: str, value: str) -> None: + """Set an option programmatically within the given section. + + The section is created if it doesn't exist already. + The value here will override whatever was in the .ini + file. + + :param section: name of the section + + :param name: name of the value + + :param value: the value. Note that this value is passed to + ``ConfigParser.set``, which supports variable interpolation using + pyformat (e.g. ``%(some_value)s``). A raw percent sign not part of + an interpolation symbol must therefore be escaped, e.g. ``%%``. + The given value may refer to another value already in the file + using the interpolation format. + + """ + + if not self.file_config.has_section(section): + self.file_config.add_section(section) + self.file_config.set(section, name, value) + + def get_section_option( + self, section: str, name: str, default: Optional[str] = None + ) -> Optional[str]: + """Return an option from the given section of the .ini file.""" + if not self.file_config.has_section(section): + raise util.CommandError( + "No config file %r found, or file has no " + "'[%s]' section" % (self.config_file_name, section) + ) + if self.file_config.has_option(section, name): + return self.file_config.get(section, name) + else: + return default + + @overload + def get_main_option(self, name: str, default: str) -> str: + ... + + @overload + def get_main_option( + self, name: str, default: Optional[str] = None + ) -> Optional[str]: + ... + + def get_main_option(self, name, default=None): + """Return an option from the 'main' section of the .ini file. + + This defaults to being a key from the ``[alembic]`` + section, unless the ``-n/--name`` flag were used to + indicate a different section. + + """ + return self.get_section_option(self.config_ini_section, name, default) + + @util.memoized_property + def messaging_opts(self) -> MessagingOptions: + """The messaging options.""" + return cast( + MessagingOptions, + util.immutabledict( + {"quiet": getattr(self.cmd_opts, "quiet", False)} + ), + ) + + +class MessagingOptions(TypedDict, total=False): + quiet: bool + + +class CommandLine: + def __init__(self, prog: Optional[str] = None) -> None: + self._generate_args(prog) + + def _generate_args(self, prog: Optional[str]) -> None: + def add_options(fn, parser, positional, kwargs): + kwargs_opts = { + "template": ( + "-t", + "--template", + dict( + default="generic", + type=str, + help="Setup template for use with 'init'", + ), + ), + "message": ( + "-m", + "--message", + dict( + type=str, help="Message string to use with 'revision'" + ), + ), + "sql": ( + "--sql", + dict( + action="store_true", + help="Don't emit SQL to database - dump to " + "standard output/file instead. See docs on " + "offline mode.", + ), + ), + "tag": ( + "--tag", + dict( + type=str, + help="Arbitrary 'tag' name - can be used by " + "custom env.py scripts.", + ), + ), + "head": ( + "--head", + dict( + type=str, + help="Specify head revision or @head " + "to base new revision on.", + ), + ), + "splice": ( + "--splice", + dict( + action="store_true", + help="Allow a non-head revision as the " + "'head' to splice onto", + ), + ), + "depends_on": ( + "--depends-on", + dict( + action="append", + help="Specify one or more revision identifiers " + "which this revision should depend on.", + ), + ), + "rev_id": ( + "--rev-id", + dict( + type=str, + help="Specify a hardcoded revision id instead of " + "generating one", + ), + ), + "version_path": ( + "--version-path", + dict( + type=str, + help="Specify specific path from config for " + "version file", + ), + ), + "branch_label": ( + "--branch-label", + dict( + type=str, + help="Specify a branch label to apply to the " + "new revision", + ), + ), + "verbose": ( + "-v", + "--verbose", + dict(action="store_true", help="Use more verbose output"), + ), + "resolve_dependencies": ( + "--resolve-dependencies", + dict( + action="store_true", + help="Treat dependency versions as down revisions", + ), + ), + "autogenerate": ( + "--autogenerate", + dict( + action="store_true", + help="Populate revision script with candidate " + "migration operations, based on comparison " + "of database to model.", + ), + ), + "rev_range": ( + "-r", + "--rev-range", + dict( + action="store", + help="Specify a revision range; " + "format is [start]:[end]", + ), + ), + "indicate_current": ( + "-i", + "--indicate-current", + dict( + action="store_true", + help="Indicate the current revision", + ), + ), + "purge": ( + "--purge", + dict( + action="store_true", + help="Unconditionally erase the version table " + "before stamping", + ), + ), + "package": ( + "--package", + dict( + action="store_true", + help="Write empty __init__.py files to the " + "environment and version locations", + ), + ), + } + positional_help = { + "directory": "location of scripts directory", + "revision": "revision identifier", + "revisions": "one or more revisions, or 'heads' for all heads", + } + for arg in kwargs: + if arg in kwargs_opts: + args = kwargs_opts[arg] + args, kw = args[0:-1], args[-1] + parser.add_argument(*args, **kw) + + for arg in positional: + if ( + arg == "revisions" + or fn in positional_translations + and positional_translations[fn][arg] == "revisions" + ): + subparser.add_argument( + "revisions", + nargs="+", + help=positional_help.get("revisions"), + ) + else: + subparser.add_argument(arg, help=positional_help.get(arg)) + + parser = ArgumentParser(prog=prog) + + parser.add_argument( + "--version", action="version", version="%%(prog)s %s" % __version__ + ) + parser.add_argument( + "-c", + "--config", + type=str, + default=os.environ.get("ALEMBIC_CONFIG", "alembic.ini"), + help="Alternate config file; defaults to value of " + 'ALEMBIC_CONFIG environment variable, or "alembic.ini"', + ) + parser.add_argument( + "-n", + "--name", + type=str, + default="alembic", + help="Name of section in .ini file to " "use for Alembic config", + ) + parser.add_argument( + "-x", + action="append", + help="Additional arguments consumed by " + "custom env.py scripts, e.g. -x " + "setting1=somesetting -x setting2=somesetting", + ) + parser.add_argument( + "--raiseerr", + action="store_true", + help="Raise a full stack trace on error", + ) + parser.add_argument( + "-q", + "--quiet", + action="store_true", + help="Do not log to std output.", + ) + subparsers = parser.add_subparsers() + + positional_translations = {command.stamp: {"revision": "revisions"}} + + for fn in [getattr(command, n) for n in dir(command)]: + if ( + inspect.isfunction(fn) + and fn.__name__[0] != "_" + and fn.__module__ == "alembic.command" + ): + spec = compat.inspect_getfullargspec(fn) + if spec[3] is not None: + positional = spec[0][1 : -len(spec[3])] + kwarg = spec[0][-len(spec[3]) :] + else: + positional = spec[0][1:] + kwarg = [] + + if fn in positional_translations: + positional = [ + positional_translations[fn].get(name, name) + for name in positional + ] + + # parse first line(s) of helptext without a line break + help_ = fn.__doc__ + if help_: + help_text = [] + for line in help_.split("\n"): + if not line.strip(): + break + else: + help_text.append(line.strip()) + else: + help_text = [] + subparser = subparsers.add_parser( + fn.__name__, help=" ".join(help_text) + ) + add_options(fn, subparser, positional, kwarg) + subparser.set_defaults(cmd=(fn, positional, kwarg)) + self.parser = parser + + def run_cmd(self, config: Config, options: Namespace) -> None: + fn, positional, kwarg = options.cmd + + try: + fn( + config, + *[getattr(options, k, None) for k in positional], + **{k: getattr(options, k, None) for k in kwarg}, + ) + except util.CommandError as e: + if options.raiseerr: + raise + else: + util.err(str(e), **config.messaging_opts) + + def main(self, argv=None): + options = self.parser.parse_args(argv) + if not hasattr(options, "cmd"): + # see http://bugs.python.org/issue9253, argparse + # behavior changed incompatibly in py3.3 + self.parser.error("too few arguments") + else: + cfg = Config( + file_=options.config, + ini_section=options.name, + cmd_opts=options, + ) + self.run_cmd(cfg, options) + + +def main(argv=None, prog=None, **kwargs): + """The console runner function for Alembic.""" + + CommandLine(prog=prog).main(argv=argv) + + +if __name__ == "__main__": + main() diff --git a/venv/Lib/site-packages/alembic/context.py b/venv/Lib/site-packages/alembic/context.py new file mode 100644 index 0000000..758fca8 --- /dev/null +++ b/venv/Lib/site-packages/alembic/context.py @@ -0,0 +1,5 @@ +from .runtime.environment import EnvironmentContext + +# create proxy functions for +# each method on the EnvironmentContext class. +EnvironmentContext.create_module_class_proxy(globals(), locals()) diff --git a/venv/Lib/site-packages/alembic/context.pyi b/venv/Lib/site-packages/alembic/context.pyi new file mode 100644 index 0000000..f37f246 --- /dev/null +++ b/venv/Lib/site-packages/alembic/context.pyi @@ -0,0 +1,847 @@ +# ### this file stubs are generated by tools/write_pyi.py - do not edit ### +# ### imports are manually managed +from __future__ import annotations + +from typing import Any +from typing import Callable +from typing import Collection +from typing import ContextManager +from typing import Dict +from typing import Iterable +from typing import List +from typing import Literal +from typing import Mapping +from typing import MutableMapping +from typing import Optional +from typing import overload +from typing import TextIO +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +if TYPE_CHECKING: + from sqlalchemy.engine.base import Connection + from sqlalchemy.engine.url import URL + from sqlalchemy.sql import Executable + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import FetchedValue + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import SchemaItem + from sqlalchemy.sql.type_api import TypeEngine + + from .autogenerate.api import AutogenContext + from .config import Config + from .operations.ops import MigrationScript + from .runtime.migration import _ProxyTransaction + from .runtime.migration import MigrationContext + from .runtime.migration import MigrationInfo + from .script import ScriptDirectory + +### end imports ### + +def begin_transaction() -> Union[_ProxyTransaction, ContextManager[None]]: + """Return a context manager that will + enclose an operation within a "transaction", + as defined by the environment's offline + and transactional DDL settings. + + e.g.:: + + with context.begin_transaction(): + context.run_migrations() + + :meth:`.begin_transaction` is intended to + "do the right thing" regardless of + calling context: + + * If :meth:`.is_transactional_ddl` is ``False``, + returns a "do nothing" context manager + which otherwise produces no transactional + state or directives. + * If :meth:`.is_offline_mode` is ``True``, + returns a context manager that will + invoke the :meth:`.DefaultImpl.emit_begin` + and :meth:`.DefaultImpl.emit_commit` + methods, which will produce the string + directives ``BEGIN`` and ``COMMIT`` on + the output stream, as rendered by the + target backend (e.g. SQL Server would + emit ``BEGIN TRANSACTION``). + * Otherwise, calls :meth:`sqlalchemy.engine.Connection.begin` + on the current online connection, which + returns a :class:`sqlalchemy.engine.Transaction` + object. This object demarcates a real + transaction and is itself a context manager, + which will roll back if an exception + is raised. + + Note that a custom ``env.py`` script which + has more specific transactional needs can of course + manipulate the :class:`~sqlalchemy.engine.Connection` + directly to produce transactional state in "online" + mode. + + """ + +config: Config + +def configure( + connection: Optional[Connection] = None, + url: Union[str, URL, None] = None, + dialect_name: Optional[str] = None, + dialect_opts: Optional[Dict[str, Any]] = None, + transactional_ddl: Optional[bool] = None, + transaction_per_migration: bool = False, + output_buffer: Optional[TextIO] = None, + starting_rev: Optional[str] = None, + tag: Optional[str] = None, + template_args: Optional[Dict[str, Any]] = None, + render_as_batch: bool = False, + target_metadata: Optional[MetaData] = None, + include_name: Optional[ + Callable[ + [ + Optional[str], + Literal[ + "schema", + "table", + "column", + "index", + "unique_constraint", + "foreign_key_constraint", + ], + MutableMapping[ + Literal[ + "schema_name", + "table_name", + "schema_qualified_table_name", + ], + Optional[str], + ], + ], + bool, + ] + ] = None, + include_object: Optional[ + Callable[ + [ + SchemaItem, + Optional[str], + Literal[ + "schema", + "table", + "column", + "index", + "unique_constraint", + "foreign_key_constraint", + ], + bool, + Optional[SchemaItem], + ], + bool, + ] + ] = None, + include_schemas: bool = False, + process_revision_directives: Optional[ + Callable[ + [ + MigrationContext, + Union[str, Iterable[Optional[str]], Iterable[str]], + List[MigrationScript], + ], + None, + ] + ] = None, + compare_type: Union[ + bool, + Callable[ + [ + MigrationContext, + Column[Any], + Column[Any], + TypeEngine, + TypeEngine, + ], + Optional[bool], + ], + ] = True, + compare_server_default: Union[ + bool, + Callable[ + [ + MigrationContext, + Column[Any], + Column[Any], + Optional[str], + Optional[FetchedValue], + Optional[str], + ], + Optional[bool], + ], + ] = False, + render_item: Optional[ + Callable[[str, Any, AutogenContext], Union[str, Literal[False]]] + ] = None, + literal_binds: bool = False, + upgrade_token: str = "upgrades", + downgrade_token: str = "downgrades", + alembic_module_prefix: str = "op.", + sqlalchemy_module_prefix: str = "sa.", + user_module_prefix: Optional[str] = None, + on_version_apply: Optional[ + Callable[ + [ + MigrationContext, + MigrationInfo, + Collection[Any], + Mapping[str, Any], + ], + None, + ] + ] = None, + **kw: Any, +) -> None: + """Configure a :class:`.MigrationContext` within this + :class:`.EnvironmentContext` which will provide database + connectivity and other configuration to a series of + migration scripts. + + Many methods on :class:`.EnvironmentContext` require that + this method has been called in order to function, as they + ultimately need to have database access or at least access + to the dialect in use. Those which do are documented as such. + + The important thing needed by :meth:`.configure` is a + means to determine what kind of database dialect is in use. + An actual connection to that database is needed only if + the :class:`.MigrationContext` is to be used in + "online" mode. + + If the :meth:`.is_offline_mode` function returns ``True``, + then no connection is needed here. Otherwise, the + ``connection`` parameter should be present as an + instance of :class:`sqlalchemy.engine.Connection`. + + This function is typically called from the ``env.py`` + script within a migration environment. It can be called + multiple times for an invocation. The most recent + :class:`~sqlalchemy.engine.Connection` + for which it was called is the one that will be operated upon + by the next call to :meth:`.run_migrations`. + + General parameters: + + :param connection: a :class:`~sqlalchemy.engine.Connection` + to use + for SQL execution in "online" mode. When present, is also + used to determine the type of dialect in use. + :param url: a string database url, or a + :class:`sqlalchemy.engine.url.URL` object. + The type of dialect to be used will be derived from this if + ``connection`` is not passed. + :param dialect_name: string name of a dialect, such as + "postgresql", "mssql", etc. + The type of dialect to be used will be derived from this if + ``connection`` and ``url`` are not passed. + :param dialect_opts: dictionary of options to be passed to dialect + constructor. + :param transactional_ddl: Force the usage of "transactional" + DDL on or off; + this otherwise defaults to whether or not the dialect in + use supports it. + :param transaction_per_migration: if True, nest each migration script + in a transaction rather than the full series of migrations to + run. + :param output_buffer: a file-like object that will be used + for textual output + when the ``--sql`` option is used to generate SQL scripts. + Defaults to + ``sys.stdout`` if not passed here and also not present on + the :class:`.Config` + object. The value here overrides that of the :class:`.Config` + object. + :param output_encoding: when using ``--sql`` to generate SQL + scripts, apply this encoding to the string output. + :param literal_binds: when using ``--sql`` to generate SQL + scripts, pass through the ``literal_binds`` flag to the compiler + so that any literal values that would ordinarily be bound + parameters are converted to plain strings. + + .. warning:: Dialects can typically only handle simple datatypes + like strings and numbers for auto-literal generation. Datatypes + like dates, intervals, and others may still require manual + formatting, typically using :meth:`.Operations.inline_literal`. + + .. note:: the ``literal_binds`` flag is ignored on SQLAlchemy + versions prior to 0.8 where this feature is not supported. + + .. seealso:: + + :meth:`.Operations.inline_literal` + + :param starting_rev: Override the "starting revision" argument + when using ``--sql`` mode. + :param tag: a string tag for usage by custom ``env.py`` scripts. + Set via the ``--tag`` option, can be overridden here. + :param template_args: dictionary of template arguments which + will be added to the template argument environment when + running the "revision" command. Note that the script environment + is only run within the "revision" command if the --autogenerate + option is used, or if the option "revision_environment=true" + is present in the alembic.ini file. + + :param version_table: The name of the Alembic version table. + The default is ``'alembic_version'``. + :param version_table_schema: Optional schema to place version + table within. + :param version_table_pk: boolean, whether the Alembic version table + should use a primary key constraint for the "value" column; this + only takes effect when the table is first created. + Defaults to True; setting to False should not be necessary and is + here for backwards compatibility reasons. + :param on_version_apply: a callable or collection of callables to be + run for each migration step. + The callables will be run in the order they are given, once for + each migration step, after the respective operation has been + applied but before its transaction is finalized. + Each callable accepts no positional arguments and the following + keyword arguments: + + * ``ctx``: the :class:`.MigrationContext` running the migration, + * ``step``: a :class:`.MigrationInfo` representing the + step currently being applied, + * ``heads``: a collection of version strings representing the + current heads, + * ``run_args``: the ``**kwargs`` passed to :meth:`.run_migrations`. + + Parameters specific to the autogenerate feature, when + ``alembic revision`` is run with the ``--autogenerate`` feature: + + :param target_metadata: a :class:`sqlalchemy.schema.MetaData` + object, or a sequence of :class:`~sqlalchemy.schema.MetaData` + objects, that will be consulted during autogeneration. + The tables present in each :class:`~sqlalchemy.schema.MetaData` + will be compared against + what is locally available on the target + :class:`~sqlalchemy.engine.Connection` + to produce candidate upgrade/downgrade operations. + :param compare_type: Indicates type comparison behavior during + an autogenerate + operation. Defaults to ``True`` turning on type comparison, which + has good accuracy on most backends. See :ref:`compare_types` + for an example as well as information on other type + comparison options. Set to ``False`` which disables type + comparison. A callable can also be passed to provide custom type + comparison, see :ref:`compare_types` for additional details. + + .. versionchanged:: 1.12.0 The default value of + :paramref:`.EnvironmentContext.configure.compare_type` has been + changed to ``True``. + + .. seealso:: + + :ref:`compare_types` + + :paramref:`.EnvironmentContext.configure.compare_server_default` + + :param compare_server_default: Indicates server default comparison + behavior during + an autogenerate operation. Defaults to ``False`` which disables + server default + comparison. Set to ``True`` to turn on server default comparison, + which has + varied accuracy depending on backend. + + To customize server default comparison behavior, a callable may + be specified + which can filter server default comparisons during an + autogenerate operation. + defaults during an autogenerate operation. The format of this + callable is:: + + def my_compare_server_default(context, inspected_column, + metadata_column, inspected_default, metadata_default, + rendered_metadata_default): + # return True if the defaults are different, + # False if not, or None to allow the default implementation + # to compare these defaults + return None + + context.configure( + # ... + compare_server_default = my_compare_server_default + ) + + ``inspected_column`` is a dictionary structure as returned by + :meth:`sqlalchemy.engine.reflection.Inspector.get_columns`, whereas + ``metadata_column`` is a :class:`sqlalchemy.schema.Column` from + the local model environment. + + A return value of ``None`` indicates to allow default server default + comparison + to proceed. Note that some backends such as Postgresql actually + execute + the two defaults on the database side to compare for equivalence. + + .. seealso:: + + :paramref:`.EnvironmentContext.configure.compare_type` + + :param include_name: A callable function which is given + the chance to return ``True`` or ``False`` for any database reflected + object based on its name, including database schema names when + the :paramref:`.EnvironmentContext.configure.include_schemas` flag + is set to ``True``. + + The function accepts the following positional arguments: + + * ``name``: the name of the object, such as schema name or table name. + Will be ``None`` when indicating the default schema name of the + database connection. + * ``type``: a string describing the type of object; currently + ``"schema"``, ``"table"``, ``"column"``, ``"index"``, + ``"unique_constraint"``, or ``"foreign_key_constraint"`` + * ``parent_names``: a dictionary of "parent" object names, that are + relative to the name being given. Keys in this dictionary may + include: ``"schema_name"``, ``"table_name"`` or + ``"schema_qualified_table_name"``. + + E.g.:: + + def include_name(name, type_, parent_names): + if type_ == "schema": + return name in ["schema_one", "schema_two"] + else: + return True + + context.configure( + # ... + include_schemas = True, + include_name = include_name + ) + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_object` + + :paramref:`.EnvironmentContext.configure.include_schemas` + + + :param include_object: A callable function which is given + the chance to return ``True`` or ``False`` for any object, + indicating if the given object should be considered in the + autogenerate sweep. + + The function accepts the following positional arguments: + + * ``object``: a :class:`~sqlalchemy.schema.SchemaItem` object such + as a :class:`~sqlalchemy.schema.Table`, + :class:`~sqlalchemy.schema.Column`, + :class:`~sqlalchemy.schema.Index` + :class:`~sqlalchemy.schema.UniqueConstraint`, + or :class:`~sqlalchemy.schema.ForeignKeyConstraint` object + * ``name``: the name of the object. This is typically available + via ``object.name``. + * ``type``: a string describing the type of object; currently + ``"table"``, ``"column"``, ``"index"``, ``"unique_constraint"``, + or ``"foreign_key_constraint"`` + * ``reflected``: ``True`` if the given object was produced based on + table reflection, ``False`` if it's from a local :class:`.MetaData` + object. + * ``compare_to``: the object being compared against, if available, + else ``None``. + + E.g.:: + + def include_object(object, name, type_, reflected, compare_to): + if (type_ == "column" and + not reflected and + object.info.get("skip_autogenerate", False)): + return False + else: + return True + + context.configure( + # ... + include_object = include_object + ) + + For the use case of omitting specific schemas from a target database + when :paramref:`.EnvironmentContext.configure.include_schemas` is + set to ``True``, the :attr:`~sqlalchemy.schema.Table.schema` + attribute can be checked for each :class:`~sqlalchemy.schema.Table` + object passed to the hook, however it is much more efficient + to filter on schemas before reflection of objects takes place + using the :paramref:`.EnvironmentContext.configure.include_name` + hook. + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_name` + + :paramref:`.EnvironmentContext.configure.include_schemas` + + :param render_as_batch: if True, commands which alter elements + within a table will be placed under a ``with batch_alter_table():`` + directive, so that batch migrations will take place. + + .. seealso:: + + :ref:`batch_migrations` + + :param include_schemas: If True, autogenerate will scan across + all schemas located by the SQLAlchemy + :meth:`~sqlalchemy.engine.reflection.Inspector.get_schema_names` + method, and include all differences in tables found across all + those schemas. When using this option, you may want to also + use the :paramref:`.EnvironmentContext.configure.include_name` + parameter to specify a callable which + can filter the tables/schemas that get included. + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_name` + + :paramref:`.EnvironmentContext.configure.include_object` + + :param render_item: Callable that can be used to override how + any schema item, i.e. column, constraint, type, + etc., is rendered for autogenerate. The callable receives a + string describing the type of object, the object, and + the autogen context. If it returns False, the + default rendering method will be used. If it returns None, + the item will not be rendered in the context of a Table + construct, that is, can be used to skip columns or constraints + within op.create_table():: + + def my_render_column(type_, col, autogen_context): + if type_ == "column" and isinstance(col, MySpecialCol): + return repr(col) + else: + return False + + context.configure( + # ... + render_item = my_render_column + ) + + Available values for the type string include: ``"column"``, + ``"primary_key"``, ``"foreign_key"``, ``"unique"``, ``"check"``, + ``"type"``, ``"server_default"``. + + .. seealso:: + + :ref:`autogen_render_types` + + :param upgrade_token: When autogenerate completes, the text of the + candidate upgrade operations will be present in this template + variable when ``script.py.mako`` is rendered. Defaults to + ``upgrades``. + :param downgrade_token: When autogenerate completes, the text of the + candidate downgrade operations will be present in this + template variable when ``script.py.mako`` is rendered. Defaults to + ``downgrades``. + + :param alembic_module_prefix: When autogenerate refers to Alembic + :mod:`alembic.operations` constructs, this prefix will be used + (i.e. ``op.create_table``) Defaults to "``op.``". + Can be ``None`` to indicate no prefix. + + :param sqlalchemy_module_prefix: When autogenerate refers to + SQLAlchemy + :class:`~sqlalchemy.schema.Column` or type classes, this prefix + will be used + (i.e. ``sa.Column("somename", sa.Integer)``) Defaults to "``sa.``". + Can be ``None`` to indicate no prefix. + Note that when dialect-specific types are rendered, autogenerate + will render them using the dialect module name, i.e. ``mssql.BIT()``, + ``postgresql.UUID()``. + + :param user_module_prefix: When autogenerate refers to a SQLAlchemy + type (e.g. :class:`.TypeEngine`) where the module name is not + under the ``sqlalchemy`` namespace, this prefix will be used + within autogenerate. If left at its default of + ``None``, the ``__module__`` attribute of the type is used to + render the import module. It's a good practice to set this + and to have all custom types be available from a fixed module space, + in order to future-proof migration files against reorganizations + in modules. + + .. seealso:: + + :ref:`autogen_module_prefix` + + :param process_revision_directives: a callable function that will + be passed a structure representing the end result of an autogenerate + or plain "revision" operation, which can be manipulated to affect + how the ``alembic revision`` command ultimately outputs new + revision scripts. The structure of the callable is:: + + def process_revision_directives(context, revision, directives): + pass + + The ``directives`` parameter is a Python list containing + a single :class:`.MigrationScript` directive, which represents + the revision file to be generated. This list as well as its + contents may be freely modified to produce any set of commands. + The section :ref:`customizing_revision` shows an example of + doing this. The ``context`` parameter is the + :class:`.MigrationContext` in use, + and ``revision`` is a tuple of revision identifiers representing the + current revision of the database. + + The callable is invoked at all times when the ``--autogenerate`` + option is passed to ``alembic revision``. If ``--autogenerate`` + is not passed, the callable is invoked only if the + ``revision_environment`` variable is set to True in the Alembic + configuration, in which case the given ``directives`` collection + will contain empty :class:`.UpgradeOps` and :class:`.DowngradeOps` + collections for ``.upgrade_ops`` and ``.downgrade_ops``. The + ``--autogenerate`` option itself can be inferred by inspecting + ``context.config.cmd_opts.autogenerate``. + + The callable function may optionally be an instance of + a :class:`.Rewriter` object. This is a helper object that + assists in the production of autogenerate-stream rewriter functions. + + .. seealso:: + + :ref:`customizing_revision` + + :ref:`autogen_rewriter` + + :paramref:`.command.revision.process_revision_directives` + + Parameters specific to individual backends: + + :param mssql_batch_separator: The "batch separator" which will + be placed between each statement when generating offline SQL Server + migrations. Defaults to ``GO``. Note this is in addition to the + customary semicolon ``;`` at the end of each statement; SQL Server + considers the "batch separator" to denote the end of an + individual statement execution, and cannot group certain + dependent operations in one step. + :param oracle_batch_separator: The "batch separator" which will + be placed between each statement when generating offline + Oracle migrations. Defaults to ``/``. Oracle doesn't add a + semicolon between statements like most other backends. + + """ + +def execute( + sql: Union[Executable, str], execution_options: Optional[dict] = None +) -> None: + """Execute the given SQL using the current change context. + + The behavior of :meth:`.execute` is the same + as that of :meth:`.Operations.execute`. Please see that + function's documentation for full detail including + caveats and limitations. + + This function requires that a :class:`.MigrationContext` has + first been made available via :meth:`.configure`. + + """ + +def get_bind() -> Connection: + """Return the current 'bind'. + + In "online" mode, this is the + :class:`sqlalchemy.engine.Connection` currently being used + to emit SQL to the database. + + This function requires that a :class:`.MigrationContext` + has first been made available via :meth:`.configure`. + + """ + +def get_context() -> MigrationContext: + """Return the current :class:`.MigrationContext` object. + + If :meth:`.EnvironmentContext.configure` has not been + called yet, raises an exception. + + """ + +def get_head_revision() -> Union[str, Tuple[str, ...], None]: + """Return the hex identifier of the 'head' script revision. + + If the script directory has multiple heads, this + method raises a :class:`.CommandError`; + :meth:`.EnvironmentContext.get_head_revisions` should be preferred. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: :meth:`.EnvironmentContext.get_head_revisions` + + """ + +def get_head_revisions() -> Union[str, Tuple[str, ...], None]: + """Return the hex identifier of the 'heads' script revision(s). + + This returns a tuple containing the version number of all + heads in the script directory. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + +def get_revision_argument() -> Union[str, Tuple[str, ...], None]: + """Get the 'destination' revision argument. + + This is typically the argument passed to the + ``upgrade`` or ``downgrade`` command. + + If it was specified as ``head``, the actual + version number is returned; if specified + as ``base``, ``None`` is returned. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + +def get_starting_revision_argument() -> Union[str, Tuple[str, ...], None]: + """Return the 'starting revision' argument, + if the revision was passed using ``start:end``. + + This is only meaningful in "offline" mode. + Returns ``None`` if no value is available + or was configured. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + +def get_tag_argument() -> Optional[str]: + """Return the value passed for the ``--tag`` argument, if any. + + The ``--tag`` argument is not used directly by Alembic, + but is available for custom ``env.py`` configurations that + wish to use it; particularly for offline generation scripts + that wish to generate tagged filenames. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: + + :meth:`.EnvironmentContext.get_x_argument` - a newer and more + open ended system of extending ``env.py`` scripts via the command + line. + + """ + +@overload +def get_x_argument(as_dictionary: Literal[False]) -> List[str]: ... +@overload +def get_x_argument(as_dictionary: Literal[True]) -> Dict[str, str]: ... +@overload +def get_x_argument( + as_dictionary: bool = ..., +) -> Union[List[str], Dict[str, str]]: + """Return the value(s) passed for the ``-x`` argument, if any. + + The ``-x`` argument is an open ended flag that allows any user-defined + value or values to be passed on the command line, then available + here for consumption by a custom ``env.py`` script. + + The return value is a list, returned directly from the ``argparse`` + structure. If ``as_dictionary=True`` is passed, the ``x`` arguments + are parsed using ``key=value`` format into a dictionary that is + then returned. + + For example, to support passing a database URL on the command line, + the standard ``env.py`` script can be modified like this:: + + cmd_line_url = context.get_x_argument( + as_dictionary=True).get('dbname') + if cmd_line_url: + engine = create_engine(cmd_line_url) + else: + engine = engine_from_config( + config.get_section(config.config_ini_section), + prefix='sqlalchemy.', + poolclass=pool.NullPool) + + This then takes effect by running the ``alembic`` script as:: + + alembic -x dbname=postgresql://user:pass@host/dbname upgrade head + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: + + :meth:`.EnvironmentContext.get_tag_argument` + + :attr:`.Config.cmd_opts` + + """ + +def is_offline_mode() -> bool: + """Return True if the current migrations environment + is running in "offline mode". + + This is ``True`` or ``False`` depending + on the ``--sql`` flag passed. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + +def is_transactional_ddl(): + """Return True if the context is configured to expect a + transactional DDL capable backend. + + This defaults to the type of database in use, and + can be overridden by the ``transactional_ddl`` argument + to :meth:`.configure` + + This function requires that a :class:`.MigrationContext` + has first been made available via :meth:`.configure`. + + """ + +def run_migrations(**kw: Any) -> None: + """Run migrations as determined by the current command line + configuration + as well as versioning information present (or not) in the current + database connection (if one is present). + + The function accepts optional ``**kw`` arguments. If these are + passed, they are sent directly to the ``upgrade()`` and + ``downgrade()`` + functions within each target revision file. By modifying the + ``script.py.mako`` file so that the ``upgrade()`` and ``downgrade()`` + functions accept arguments, parameters can be passed here so that + contextual information, usually information to identify a particular + database in use, can be passed from a custom ``env.py`` script + to the migration functions. + + This function requires that a :class:`.MigrationContext` has + first been made available via :meth:`.configure`. + + """ + +script: ScriptDirectory + +def static_output(text: str) -> None: + """Emit text directly to the "offline" SQL stream. + + Typically this is for emitting comments that + start with --. The statement is not treated + as a SQL execution, no ; or batch separator + is added, etc. + + """ diff --git a/venv/Lib/site-packages/alembic/ddl/__init__.py b/venv/Lib/site-packages/alembic/ddl/__init__.py new file mode 100644 index 0000000..cfcc47e --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/__init__.py @@ -0,0 +1,6 @@ +from . import mssql +from . import mysql +from . import oracle +from . import postgresql +from . import sqlite +from .impl import DefaultImpl diff --git a/venv/Lib/site-packages/alembic/ddl/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/ddl/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dde4f28ca5e9d40d6cf2ee5e0ee1e1ff3178cc44 GIT binary patch literal 363 zcmXw!&q~BF5XO@>{ln_MgV!E(Wx%1#y0bIPGs{F>#vchxLIrpw39RDCUmN#00wHS=^2P^-5NXiHQ>{0Id zsQptn=;x}OkqsZUX%G@53zCD(L_v)$06&opi$?i*ZEo4h zi}m&ThV3 J1JCj4`~qW9S<3(b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/ddl/__pycache__/base.cpython-37.pyc b/venv/Lib/site-packages/alembic/ddl/__pycache__/base.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e89eea97c969915836c5dda3a48d8e2146ac7361 GIT binary patch literal 11128 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 A$N&HU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/ddl/__pycache__/mysql.cpython-37.pyc b/venv/Lib/site-packages/alembic/ddl/__pycache__/mysql.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fa7c9c3727b235a22419f43bbbebd397ed0c49a GIT binary patch literal 9941 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 ajbd0ckqP8K?KDKY>0>`_SRebfviMK^Cl4n8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/ddl/base.py b/venv/Lib/site-packages/alembic/ddl/base.py new file mode 100644 index 0000000..339db0c --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/base.py @@ -0,0 +1,332 @@ +from __future__ import annotations + +import functools +from typing import Optional +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import exc +from sqlalchemy import Integer +from sqlalchemy import types as sqltypes +from sqlalchemy.ext.compiler import compiles +from sqlalchemy.schema import Column +from sqlalchemy.schema import DDLElement +from sqlalchemy.sql.elements import quoted_name + +from ..util.sqla_compat import _columns_for_constraint # noqa +from ..util.sqla_compat import _find_columns # noqa +from ..util.sqla_compat import _fk_spec # noqa +from ..util.sqla_compat import _is_type_bound # noqa +from ..util.sqla_compat import _table_for_constraint # noqa + +if TYPE_CHECKING: + from typing import Any + + from sqlalchemy.sql.compiler import Compiled + from sqlalchemy.sql.compiler import DDLCompiler + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.functions import Function + from sqlalchemy.sql.schema import FetchedValue + from sqlalchemy.sql.type_api import TypeEngine + + from .impl import DefaultImpl + from ..util.sqla_compat import Computed + from ..util.sqla_compat import Identity + +_ServerDefault = Union["TextClause", "FetchedValue", "Function[Any]", str] + + +class AlterTable(DDLElement): + + """Represent an ALTER TABLE statement. + + Only the string name and optional schema name of the table + is required, not a full Table object. + + """ + + def __init__( + self, + table_name: str, + schema: Optional[Union[quoted_name, str]] = None, + ) -> None: + self.table_name = table_name + self.schema = schema + + +class RenameTable(AlterTable): + def __init__( + self, + old_table_name: str, + new_table_name: Union[quoted_name, str], + schema: Optional[Union[quoted_name, str]] = None, + ) -> None: + super().__init__(old_table_name, schema=schema) + self.new_table_name = new_table_name + + +class AlterColumn(AlterTable): + def __init__( + self, + name: str, + column_name: str, + schema: Optional[str] = None, + existing_type: Optional[TypeEngine] = None, + existing_nullable: Optional[bool] = None, + existing_server_default: Optional[_ServerDefault] = None, + existing_comment: Optional[str] = None, + ) -> None: + super().__init__(name, schema=schema) + self.column_name = column_name + self.existing_type = ( + sqltypes.to_instance(existing_type) + if existing_type is not None + else None + ) + self.existing_nullable = existing_nullable + self.existing_server_default = existing_server_default + self.existing_comment = existing_comment + + +class ColumnNullable(AlterColumn): + def __init__( + self, name: str, column_name: str, nullable: bool, **kw + ) -> None: + super().__init__(name, column_name, **kw) + self.nullable = nullable + + +class ColumnType(AlterColumn): + def __init__( + self, name: str, column_name: str, type_: TypeEngine, **kw + ) -> None: + super().__init__(name, column_name, **kw) + self.type_ = sqltypes.to_instance(type_) + + +class ColumnName(AlterColumn): + def __init__( + self, name: str, column_name: str, newname: str, **kw + ) -> None: + super().__init__(name, column_name, **kw) + self.newname = newname + + +class ColumnDefault(AlterColumn): + def __init__( + self, + name: str, + column_name: str, + default: Optional[_ServerDefault], + **kw, + ) -> None: + super().__init__(name, column_name, **kw) + self.default = default + + +class ComputedColumnDefault(AlterColumn): + def __init__( + self, name: str, column_name: str, default: Optional[Computed], **kw + ) -> None: + super().__init__(name, column_name, **kw) + self.default = default + + +class IdentityColumnDefault(AlterColumn): + def __init__( + self, + name: str, + column_name: str, + default: Optional[Identity], + impl: DefaultImpl, + **kw, + ) -> None: + super().__init__(name, column_name, **kw) + self.default = default + self.impl = impl + + +class AddColumn(AlterTable): + def __init__( + self, + name: str, + column: Column[Any], + schema: Optional[Union[quoted_name, str]] = None, + ) -> None: + super().__init__(name, schema=schema) + self.column = column + + +class DropColumn(AlterTable): + def __init__( + self, name: str, column: Column[Any], schema: Optional[str] = None + ) -> None: + super().__init__(name, schema=schema) + self.column = column + + +class ColumnComment(AlterColumn): + def __init__( + self, name: str, column_name: str, comment: Optional[str], **kw + ) -> None: + super().__init__(name, column_name, **kw) + self.comment = comment + + +@compiles(RenameTable) +def visit_rename_table( + element: RenameTable, compiler: DDLCompiler, **kw +) -> str: + return "%s RENAME TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_table_name(compiler, element.new_table_name, element.schema), + ) + + +@compiles(AddColumn) +def visit_add_column(element: AddColumn, compiler: DDLCompiler, **kw) -> str: + return "%s %s" % ( + alter_table(compiler, element.table_name, element.schema), + add_column(compiler, element.column, **kw), + ) + + +@compiles(DropColumn) +def visit_drop_column(element: DropColumn, compiler: DDLCompiler, **kw) -> str: + return "%s %s" % ( + alter_table(compiler, element.table_name, element.schema), + drop_column(compiler, element.column.name, **kw), + ) + + +@compiles(ColumnNullable) +def visit_column_nullable( + element: ColumnNullable, compiler: DDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "DROP NOT NULL" if element.nullable else "SET NOT NULL", + ) + + +@compiles(ColumnType) +def visit_column_type(element: ColumnType, compiler: DDLCompiler, **kw) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "TYPE %s" % format_type(compiler, element.type_), + ) + + +@compiles(ColumnName) +def visit_column_name(element: ColumnName, compiler: DDLCompiler, **kw) -> str: + return "%s RENAME %s TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + format_column_name(compiler, element.newname), + ) + + +@compiles(ColumnDefault) +def visit_column_default( + element: ColumnDefault, compiler: DDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "SET DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DROP DEFAULT", + ) + + +@compiles(ComputedColumnDefault) +def visit_computed_column( + element: ComputedColumnDefault, compiler: DDLCompiler, **kw +): + raise exc.CompileError( + 'Adding or removing a "computed" construct, e.g. GENERATED ' + "ALWAYS AS, to or from an existing column is not supported." + ) + + +@compiles(IdentityColumnDefault) +def visit_identity_column( + element: IdentityColumnDefault, compiler: DDLCompiler, **kw +): + raise exc.CompileError( + 'Adding, removing or modifying an "identity" construct, ' + "e.g. GENERATED AS IDENTITY, to or from an existing " + "column is not supported in this dialect." + ) + + +def quote_dotted( + name: Union[quoted_name, str], quote: functools.partial +) -> Union[quoted_name, str]: + """quote the elements of a dotted name""" + + if isinstance(name, quoted_name): + return quote(name) + result = ".".join([quote(x) for x in name.split(".")]) + return result + + +def format_table_name( + compiler: Compiled, + name: Union[quoted_name, str], + schema: Optional[Union[quoted_name, str]], +) -> Union[quoted_name, str]: + quote = functools.partial(compiler.preparer.quote) + if schema: + return quote_dotted(schema, quote) + "." + quote(name) + else: + return quote(name) + + +def format_column_name( + compiler: DDLCompiler, name: Optional[Union[quoted_name, str]] +) -> Union[quoted_name, str]: + return compiler.preparer.quote(name) # type: ignore[arg-type] + + +def format_server_default( + compiler: DDLCompiler, + default: Optional[_ServerDefault], +) -> str: + return compiler.get_column_default_string( + Column("x", Integer, server_default=default) + ) + + +def format_type(compiler: DDLCompiler, type_: TypeEngine) -> str: + return compiler.dialect.type_compiler.process(type_) + + +def alter_table( + compiler: DDLCompiler, + name: str, + schema: Optional[str], +) -> str: + return "ALTER TABLE %s" % format_table_name(compiler, name, schema) + + +def drop_column(compiler: DDLCompiler, name: str, **kw) -> str: + return "DROP COLUMN %s" % format_column_name(compiler, name) + + +def alter_column(compiler: DDLCompiler, name: str) -> str: + return "ALTER COLUMN %s" % format_column_name(compiler, name) + + +def add_column(compiler: DDLCompiler, column: Column[Any], **kw) -> str: + text = "ADD COLUMN %s" % compiler.get_column_specification(column, **kw) + + const = " ".join( + compiler.process(constraint) for constraint in column.constraints + ) + if const: + text += " " + const + + return text diff --git a/venv/Lib/site-packages/alembic/ddl/impl.py b/venv/Lib/site-packages/alembic/ddl/impl.py new file mode 100644 index 0000000..8a7c75d --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/impl.py @@ -0,0 +1,747 @@ +from __future__ import annotations + +from collections import namedtuple +import re +from typing import Any +from typing import Callable +from typing import Dict +from typing import Iterable +from typing import List +from typing import Mapping +from typing import Optional +from typing import Sequence +from typing import Set +from typing import Tuple +from typing import Type +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import cast +from sqlalchemy import schema +from sqlalchemy import text + +from . import base +from .. import util +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + from typing import TextIO + + from sqlalchemy.engine import Connection + from sqlalchemy.engine import Dialect + from sqlalchemy.engine.cursor import CursorResult + from sqlalchemy.engine.reflection import Inspector + from sqlalchemy.sql import ClauseElement + from sqlalchemy.sql import Executable + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import quoted_name + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.schema import ForeignKeyConstraint + from sqlalchemy.sql.schema import Index + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.schema import UniqueConstraint + from sqlalchemy.sql.selectable import TableClause + from sqlalchemy.sql.type_api import TypeEngine + + from .base import _ServerDefault + from ..autogenerate.api import AutogenContext + from ..operations.batch import ApplyBatchImpl + from ..operations.batch import BatchOperationsImpl + + +class ImplMeta(type): + def __init__( + cls, + classname: str, + bases: Tuple[Type[DefaultImpl]], + dict_: Dict[str, Any], + ): + newtype = type.__init__(cls, classname, bases, dict_) + if "__dialect__" in dict_: + _impls[dict_["__dialect__"]] = cls # type: ignore[assignment] + return newtype + + +_impls: Dict[str, Type[DefaultImpl]] = {} + +Params = namedtuple("Params", ["token0", "tokens", "args", "kwargs"]) + + +class DefaultImpl(metaclass=ImplMeta): + + """Provide the entrypoint for major migration operations, + including database-specific behavioral variances. + + While individual SQL/DDL constructs already provide + for database-specific implementations, variances here + allow for entirely different sequences of operations + to take place for a particular migration, such as + SQL Server's special 'IDENTITY INSERT' step for + bulk inserts. + + """ + + __dialect__ = "default" + + transactional_ddl = False + command_terminator = ";" + type_synonyms: Tuple[Set[str], ...] = ({"NUMERIC", "DECIMAL"},) + type_arg_extract: Sequence[str] = () + # These attributes are deprecated in SQLAlchemy via #10247. They need to + # be ignored to support older version that did not use dialect kwargs. + # They only apply to Oracle and are replaced by oracle_order, + # oracle_on_null + identity_attrs_ignore: Tuple[str, ...] = ("order", "on_null") + + def __init__( + self, + dialect: Dialect, + connection: Optional[Connection], + as_sql: bool, + transactional_ddl: Optional[bool], + output_buffer: Optional[TextIO], + context_opts: Dict[str, Any], + ) -> None: + self.dialect = dialect + self.connection = connection + self.as_sql = as_sql + self.literal_binds = context_opts.get("literal_binds", False) + + self.output_buffer = output_buffer + self.memo: dict = {} + self.context_opts = context_opts + if transactional_ddl is not None: + self.transactional_ddl = transactional_ddl + + if self.literal_binds: + if not self.as_sql: + raise util.CommandError( + "Can't use literal_binds setting without as_sql mode" + ) + + @classmethod + def get_by_dialect(cls, dialect: Dialect) -> Type[DefaultImpl]: + return _impls[dialect.name] + + def static_output(self, text: str) -> None: + assert self.output_buffer is not None + self.output_buffer.write(text + "\n\n") + self.output_buffer.flush() + + def requires_recreate_in_batch( + self, batch_op: BatchOperationsImpl + ) -> bool: + """Return True if the given :class:`.BatchOperationsImpl` + would need the table to be recreated and copied in order to + proceed. + + Normally, only returns True on SQLite when operations other + than add_column are present. + + """ + return False + + def prep_table_for_batch( + self, batch_impl: ApplyBatchImpl, table: Table + ) -> None: + """perform any operations needed on a table before a new + one is created to replace it in batch mode. + + the PG dialect uses this to drop constraints on the table + before the new one uses those same names. + + """ + + @property + def bind(self) -> Optional[Connection]: + return self.connection + + def _exec( + self, + construct: Union[Executable, str], + execution_options: Optional[dict[str, Any]] = None, + multiparams: Sequence[dict] = (), + params: Dict[str, Any] = util.immutabledict(), + ) -> Optional[CursorResult]: + if isinstance(construct, str): + construct = text(construct) + if self.as_sql: + if multiparams or params: + # TODO: coverage + raise Exception("Execution arguments not allowed with as_sql") + + compile_kw: dict[str, Any] + if self.literal_binds and not isinstance( + construct, schema.DDLElement + ): + compile_kw = dict(compile_kwargs={"literal_binds": True}) + else: + compile_kw = {} + + if TYPE_CHECKING: + assert isinstance(construct, ClauseElement) + compiled = construct.compile(dialect=self.dialect, **compile_kw) + self.static_output( + str(compiled).replace("\t", " ").strip() + + self.command_terminator + ) + return None + else: + conn = self.connection + assert conn is not None + if execution_options: + conn = conn.execution_options(**execution_options) + if params: + assert isinstance(multiparams, tuple) + multiparams += (params,) + + return conn.execute(construct, multiparams) + + def execute( + self, + sql: Union[Executable, str], + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + self._exec(sql, execution_options) + + def alter_column( + self, + table_name: str, + column_name: str, + nullable: Optional[bool] = None, + server_default: Union[_ServerDefault, Literal[False]] = False, + name: Optional[str] = None, + type_: Optional[TypeEngine] = None, + schema: Optional[str] = None, + autoincrement: Optional[bool] = None, + comment: Optional[Union[str, Literal[False]]] = False, + existing_comment: Optional[str] = None, + existing_type: Optional[TypeEngine] = None, + existing_server_default: Optional[_ServerDefault] = None, + existing_nullable: Optional[bool] = None, + existing_autoincrement: Optional[bool] = None, + **kw: Any, + ) -> None: + if autoincrement is not None or existing_autoincrement is not None: + util.warn( + "autoincrement and existing_autoincrement " + "only make sense for MySQL", + stacklevel=3, + ) + if nullable is not None: + self._exec( + base.ColumnNullable( + table_name, + column_name, + nullable, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + ) + ) + if server_default is not False: + kw = {} + cls_: Type[ + Union[ + base.ComputedColumnDefault, + base.IdentityColumnDefault, + base.ColumnDefault, + ] + ] + if sqla_compat._server_default_is_computed( + server_default, existing_server_default + ): + cls_ = base.ComputedColumnDefault + elif sqla_compat._server_default_is_identity( + server_default, existing_server_default + ): + cls_ = base.IdentityColumnDefault + kw["impl"] = self + else: + cls_ = base.ColumnDefault + self._exec( + cls_( + table_name, + column_name, + server_default, # type:ignore[arg-type] + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + **kw, + ) + ) + if type_ is not None: + self._exec( + base.ColumnType( + table_name, + column_name, + type_, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + ) + ) + + if comment is not False: + self._exec( + base.ColumnComment( + table_name, + column_name, + comment, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + ) + ) + + # do the new name last ;) + if name is not None: + self._exec( + base.ColumnName( + table_name, + column_name, + name, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + ) + ) + + def add_column( + self, + table_name: str, + column: Column[Any], + schema: Optional[Union[str, quoted_name]] = None, + ) -> None: + self._exec(base.AddColumn(table_name, column, schema=schema)) + + def drop_column( + self, + table_name: str, + column: Column[Any], + schema: Optional[str] = None, + **kw, + ) -> None: + self._exec(base.DropColumn(table_name, column, schema=schema)) + + def add_constraint(self, const: Any) -> None: + if const._create_rule is None or const._create_rule(self): + self._exec(schema.AddConstraint(const)) + + def drop_constraint(self, const: Constraint) -> None: + self._exec(schema.DropConstraint(const)) + + def rename_table( + self, + old_table_name: str, + new_table_name: Union[str, quoted_name], + schema: Optional[Union[str, quoted_name]] = None, + ) -> None: + self._exec( + base.RenameTable(old_table_name, new_table_name, schema=schema) + ) + + def create_table(self, table: Table) -> None: + table.dispatch.before_create( + table, self.connection, checkfirst=False, _ddl_runner=self + ) + self._exec(schema.CreateTable(table)) + table.dispatch.after_create( + table, self.connection, checkfirst=False, _ddl_runner=self + ) + for index in table.indexes: + self._exec(schema.CreateIndex(index)) + + with_comment = ( + self.dialect.supports_comments and not self.dialect.inline_comments + ) + comment = table.comment + if comment and with_comment: + self.create_table_comment(table) + + for column in table.columns: + comment = column.comment + if comment and with_comment: + self.create_column_comment(column) + + def drop_table(self, table: Table) -> None: + table.dispatch.before_drop( + table, self.connection, checkfirst=False, _ddl_runner=self + ) + self._exec(schema.DropTable(table)) + table.dispatch.after_drop( + table, self.connection, checkfirst=False, _ddl_runner=self + ) + + def create_index(self, index: Index, **kw: Any) -> None: + self._exec(schema.CreateIndex(index, **kw)) + + def create_table_comment(self, table: Table) -> None: + self._exec(schema.SetTableComment(table)) + + def drop_table_comment(self, table: Table) -> None: + self._exec(schema.DropTableComment(table)) + + def create_column_comment(self, column: ColumnElement[Any]) -> None: + self._exec(schema.SetColumnComment(column)) + + def drop_index(self, index: Index, **kw: Any) -> None: + self._exec(schema.DropIndex(index, **kw)) + + def bulk_insert( + self, + table: Union[TableClause, Table], + rows: List[dict], + multiinsert: bool = True, + ) -> None: + if not isinstance(rows, list): + raise TypeError("List expected") + elif rows and not isinstance(rows[0], dict): + raise TypeError("List of dictionaries expected") + if self.as_sql: + for row in rows: + self._exec( + sqla_compat._insert_inline(table).values( + **{ + k: sqla_compat._literal_bindparam( + k, v, type_=table.c[k].type + ) + if not isinstance( + v, sqla_compat._literal_bindparam + ) + else v + for k, v in row.items() + } + ) + ) + else: + if rows: + if multiinsert: + self._exec( + sqla_compat._insert_inline(table), multiparams=rows + ) + else: + for row in rows: + self._exec( + sqla_compat._insert_inline(table).values(**row) + ) + + def _tokenize_column_type(self, column: Column) -> Params: + definition = self.dialect.type_compiler.process(column.type).lower() + + # tokenize the SQLAlchemy-generated version of a type, so that + # the two can be compared. + # + # examples: + # NUMERIC(10, 5) + # TIMESTAMP WITH TIMEZONE + # INTEGER UNSIGNED + # INTEGER (10) UNSIGNED + # INTEGER(10) UNSIGNED + # varchar character set utf8 + # + + tokens = re.findall(r"[\w\-_]+|\(.+?\)", definition) + + term_tokens = [] + paren_term = None + + for token in tokens: + if re.match(r"^\(.*\)$", token): + paren_term = token + else: + term_tokens.append(token) + + params = Params(term_tokens[0], term_tokens[1:], [], {}) + + if paren_term: + for term in re.findall("[^(),]+", paren_term): + if "=" in term: + key, val = term.split("=") + params.kwargs[key.strip()] = val.strip() + else: + params.args.append(term.strip()) + + return params + + def _column_types_match( + self, inspector_params: Params, metadata_params: Params + ) -> bool: + if inspector_params.token0 == metadata_params.token0: + return True + + synonyms = [{t.lower() for t in batch} for batch in self.type_synonyms] + inspector_all_terms = " ".join( + [inspector_params.token0] + inspector_params.tokens + ) + metadata_all_terms = " ".join( + [metadata_params.token0] + metadata_params.tokens + ) + + for batch in synonyms: + if {inspector_all_terms, metadata_all_terms}.issubset(batch) or { + inspector_params.token0, + metadata_params.token0, + }.issubset(batch): + return True + return False + + def _column_args_match( + self, inspected_params: Params, meta_params: Params + ) -> bool: + """We want to compare column parameters. However, we only want + to compare parameters that are set. If they both have `collation`, + we want to make sure they are the same. However, if only one + specifies it, dont flag it for being less specific + """ + + if ( + len(meta_params.tokens) == len(inspected_params.tokens) + and meta_params.tokens != inspected_params.tokens + ): + return False + + if ( + len(meta_params.args) == len(inspected_params.args) + and meta_params.args != inspected_params.args + ): + return False + + insp = " ".join(inspected_params.tokens).lower() + meta = " ".join(meta_params.tokens).lower() + + for reg in self.type_arg_extract: + mi = re.search(reg, insp) + mm = re.search(reg, meta) + + if mi and mm and mi.group(1) != mm.group(1): + return False + + return True + + def compare_type( + self, inspector_column: Column[Any], metadata_column: Column + ) -> bool: + """Returns True if there ARE differences between the types of the two + columns. Takes impl.type_synonyms into account between retrospected + and metadata types + """ + inspector_params = self._tokenize_column_type(inspector_column) + metadata_params = self._tokenize_column_type(metadata_column) + + if not self._column_types_match(inspector_params, metadata_params): + return True + if not self._column_args_match(inspector_params, metadata_params): + return True + return False + + def compare_server_default( + self, + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default, + ): + return rendered_inspector_default != rendered_metadata_default + + def correct_for_autogen_constraints( + self, + conn_uniques: Set[UniqueConstraint], + conn_indexes: Set[Index], + metadata_unique_constraints: Set[UniqueConstraint], + metadata_indexes: Set[Index], + ) -> None: + pass + + def cast_for_batch_migrate(self, existing, existing_transfer, new_type): + if existing.type._type_affinity is not new_type._type_affinity: + existing_transfer["expr"] = cast( + existing_transfer["expr"], new_type + ) + + def render_ddl_sql_expr( + self, expr: ClauseElement, is_server_default: bool = False, **kw: Any + ) -> str: + """Render a SQL expression that is typically a server default, + index expression, etc. + + """ + + compile_kw = {"literal_binds": True, "include_table": False} + + return str( + expr.compile(dialect=self.dialect, compile_kwargs=compile_kw) + ) + + def _compat_autogen_column_reflect(self, inspector: Inspector) -> Callable: + return self.autogen_column_reflect + + def correct_for_autogen_foreignkeys( + self, + conn_fks: Set[ForeignKeyConstraint], + metadata_fks: Set[ForeignKeyConstraint], + ) -> None: + pass + + def autogen_column_reflect(self, inspector, table, column_info): + """A hook that is attached to the 'column_reflect' event for when + a Table is reflected from the database during the autogenerate + process. + + Dialects can elect to modify the information gathered here. + + """ + + def start_migrations(self) -> None: + """A hook called when :meth:`.EnvironmentContext.run_migrations` + is called. + + Implementations can set up per-migration-run state here. + + """ + + def emit_begin(self) -> None: + """Emit the string ``BEGIN``, or the backend-specific + equivalent, on the current connection context. + + This is used in offline mode and typically + via :meth:`.EnvironmentContext.begin_transaction`. + + """ + self.static_output("BEGIN" + self.command_terminator) + + def emit_commit(self) -> None: + """Emit the string ``COMMIT``, or the backend-specific + equivalent, on the current connection context. + + This is used in offline mode and typically + via :meth:`.EnvironmentContext.begin_transaction`. + + """ + self.static_output("COMMIT" + self.command_terminator) + + def render_type( + self, type_obj: TypeEngine, autogen_context: AutogenContext + ) -> Union[str, Literal[False]]: + return False + + def _compare_identity_default(self, metadata_identity, inspector_identity): + # ignored contains the attributes that were not considered + # because assumed to their default values in the db. + diff, ignored = _compare_identity_options( + metadata_identity, + inspector_identity, + sqla_compat.Identity(), + skip={"always"}, + ) + + meta_always = getattr(metadata_identity, "always", None) + inspector_always = getattr(inspector_identity, "always", None) + # None and False are the same in this comparison + if bool(meta_always) != bool(inspector_always): + diff.add("always") + + diff.difference_update(self.identity_attrs_ignore) + + # returns 3 values: + return ( + # different identity attributes + diff, + # ignored identity attributes + ignored, + # if the two identity should be considered different + bool(diff) or bool(metadata_identity) != bool(inspector_identity), + ) + + def create_index_sig(self, index: Index) -> Tuple[Any, ...]: + # order of col matters in an index + return tuple(col.name for col in index.columns) + + def create_unique_constraint_sig( + self, const: UniqueConstraint + ) -> Tuple[Any, ...]: + # order of col does not matters in an unique constraint + return tuple(sorted([col.name for col in const.columns])) + + def _skip_functional_indexes(self, metadata_indexes, conn_indexes): + conn_indexes_by_name = {c.name: c for c in conn_indexes} + + for idx in list(metadata_indexes): + if idx.name in conn_indexes_by_name: + continue + iex = sqla_compat.is_expression_index(idx) + if iex: + util.warn( + "autogenerate skipping metadata-specified " + "expression-based index " + f"{idx.name!r}; dialect {self.__dialect__!r} under " + f"SQLAlchemy {sqla_compat.sqlalchemy_version} can't " + "reflect these indexes so they can't be compared" + ) + metadata_indexes.discard(idx) + + def adjust_reflected_dialect_options( + self, reflected_object: Dict[str, Any], kind: str + ) -> Dict[str, Any]: + return reflected_object.get("dialect_options", {}) + + +def _compare_identity_options( + metadata_io: Union[schema.Identity, schema.Sequence, None], + inspector_io: Union[schema.Identity, schema.Sequence, None], + default_io: Union[schema.Identity, schema.Sequence], + skip: Set[str], +): + # this can be used for identity or sequence compare. + # default_io is an instance of IdentityOption with all attributes to the + # default value. + meta_d = sqla_compat._get_identity_options_dict(metadata_io) + insp_d = sqla_compat._get_identity_options_dict(inspector_io) + + diff = set() + ignored_attr = set() + + def check_dicts( + meta_dict: Mapping[str, Any], + insp_dict: Mapping[str, Any], + default_dict: Mapping[str, Any], + attrs: Iterable[str], + ): + for attr in set(attrs).difference(skip): + meta_value = meta_dict.get(attr) + insp_value = insp_dict.get(attr) + if insp_value != meta_value: + default_value = default_dict.get(attr) + if meta_value == default_value: + ignored_attr.add(attr) + else: + diff.add(attr) + + check_dicts( + meta_d, + insp_d, + sqla_compat._get_identity_options_dict(default_io), + set(meta_d).union(insp_d), + ) + if sqla_compat.identity_has_dialect_kwargs: + # use only the dialect kwargs in inspector_io since metadata_io + # can have options for many backends + check_dicts( + getattr(metadata_io, "dialect_kwargs", {}), + getattr(inspector_io, "dialect_kwargs", {}), + default_io.dialect_kwargs, # type: ignore[union-attr] + getattr(inspector_io, "dialect_kwargs", {}), + ) + + return diff, ignored_attr diff --git a/venv/Lib/site-packages/alembic/ddl/mssql.py b/venv/Lib/site-packages/alembic/ddl/mssql.py new file mode 100644 index 0000000..9b0fff8 --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/mssql.py @@ -0,0 +1,416 @@ +from __future__ import annotations + +import re +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import types as sqltypes +from sqlalchemy.ext.compiler import compiles +from sqlalchemy.schema import Column +from sqlalchemy.schema import CreateIndex +from sqlalchemy.sql.base import Executable +from sqlalchemy.sql.elements import ClauseElement + +from .base import AddColumn +from .base import alter_column +from .base import alter_table +from .base import ColumnDefault +from .base import ColumnName +from .base import ColumnNullable +from .base import ColumnType +from .base import format_column_name +from .base import format_server_default +from .base import format_table_name +from .base import format_type +from .base import RenameTable +from .impl import DefaultImpl +from .. import util +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.dialects.mssql.base import MSDDLCompiler + from sqlalchemy.dialects.mssql.base import MSSQLCompiler + from sqlalchemy.engine.cursor import CursorResult + from sqlalchemy.sql.schema import Index + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.selectable import TableClause + from sqlalchemy.sql.type_api import TypeEngine + + from .base import _ServerDefault + + +class MSSQLImpl(DefaultImpl): + __dialect__ = "mssql" + transactional_ddl = True + batch_separator = "GO" + + type_synonyms = DefaultImpl.type_synonyms + ({"VARCHAR", "NVARCHAR"},) + identity_attrs_ignore = DefaultImpl.identity_attrs_ignore + ( + "minvalue", + "maxvalue", + "nominvalue", + "nomaxvalue", + "cycle", + "cache", + ) + + def __init__(self, *arg, **kw) -> None: + super().__init__(*arg, **kw) + self.batch_separator = self.context_opts.get( + "mssql_batch_separator", self.batch_separator + ) + + def _exec(self, construct: Any, *args, **kw) -> Optional[CursorResult]: + result = super()._exec(construct, *args, **kw) + if self.as_sql and self.batch_separator: + self.static_output(self.batch_separator) + return result + + def emit_begin(self) -> None: + self.static_output("BEGIN TRANSACTION" + self.command_terminator) + + def emit_commit(self) -> None: + super().emit_commit() + if self.as_sql and self.batch_separator: + self.static_output(self.batch_separator) + + def alter_column( # type:ignore[override] + self, + table_name: str, + column_name: str, + nullable: Optional[bool] = None, + server_default: Optional[ + Union[_ServerDefault, Literal[False]] + ] = False, + name: Optional[str] = None, + type_: Optional[TypeEngine] = None, + schema: Optional[str] = None, + existing_type: Optional[TypeEngine] = None, + existing_server_default: Optional[_ServerDefault] = None, + existing_nullable: Optional[bool] = None, + **kw: Any, + ) -> None: + if nullable is not None: + if type_ is not None: + # the NULL/NOT NULL alter will handle + # the type alteration + existing_type = type_ + type_ = None + elif existing_type is None: + raise util.CommandError( + "MS-SQL ALTER COLUMN operations " + "with NULL or NOT NULL require the " + "existing_type or a new type_ be passed." + ) + elif existing_nullable is not None and type_ is not None: + nullable = existing_nullable + + # the NULL/NOT NULL alter will handle + # the type alteration + existing_type = type_ + type_ = None + + elif type_ is not None: + util.warn( + "MS-SQL ALTER COLUMN operations that specify type_= " + "should also specify a nullable= or " + "existing_nullable= argument to avoid implicit conversion " + "of NOT NULL columns to NULL." + ) + + used_default = False + if sqla_compat._server_default_is_identity( + server_default, existing_server_default + ) or sqla_compat._server_default_is_computed( + server_default, existing_server_default + ): + used_default = True + kw["server_default"] = server_default + kw["existing_server_default"] = existing_server_default + + super().alter_column( + table_name, + column_name, + nullable=nullable, + type_=type_, + schema=schema, + existing_type=existing_type, + existing_nullable=existing_nullable, + **kw, + ) + + if server_default is not False and used_default is False: + if existing_server_default is not False or server_default is None: + self._exec( + _ExecDropConstraint( + table_name, + column_name, + "sys.default_constraints", + schema, + ) + ) + if server_default is not None: + super().alter_column( + table_name, + column_name, + schema=schema, + server_default=server_default, + ) + + if name is not None: + super().alter_column( + table_name, column_name, schema=schema, name=name + ) + + def create_index(self, index: Index, **kw: Any) -> None: + # this likely defaults to None if not present, so get() + # should normally not return the default value. being + # defensive in any case + mssql_include = index.kwargs.get("mssql_include", None) or () + assert index.table is not None + for col in mssql_include: + if col not in index.table.c: + index.table.append_column(Column(col, sqltypes.NullType)) + self._exec(CreateIndex(index, **kw)) + + def bulk_insert( # type:ignore[override] + self, table: Union[TableClause, Table], rows: List[dict], **kw: Any + ) -> None: + if self.as_sql: + self._exec( + "SET IDENTITY_INSERT %s ON" + % self.dialect.identifier_preparer.format_table(table) + ) + super().bulk_insert(table, rows, **kw) + self._exec( + "SET IDENTITY_INSERT %s OFF" + % self.dialect.identifier_preparer.format_table(table) + ) + else: + super().bulk_insert(table, rows, **kw) + + def drop_column( + self, + table_name: str, + column: Column[Any], + schema: Optional[str] = None, + **kw, + ) -> None: + drop_default = kw.pop("mssql_drop_default", False) + if drop_default: + self._exec( + _ExecDropConstraint( + table_name, column, "sys.default_constraints", schema + ) + ) + drop_check = kw.pop("mssql_drop_check", False) + if drop_check: + self._exec( + _ExecDropConstraint( + table_name, column, "sys.check_constraints", schema + ) + ) + drop_fks = kw.pop("mssql_drop_foreign_key", False) + if drop_fks: + self._exec(_ExecDropFKConstraint(table_name, column, schema)) + super().drop_column(table_name, column, schema=schema, **kw) + + def compare_server_default( + self, + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default, + ): + if rendered_metadata_default is not None: + rendered_metadata_default = re.sub( + r"[\(\) \"\']", "", rendered_metadata_default + ) + + if rendered_inspector_default is not None: + # SQL Server collapses whitespace and adds arbitrary parenthesis + # within expressions. our only option is collapse all of it + + rendered_inspector_default = re.sub( + r"[\(\) \"\']", "", rendered_inspector_default + ) + + return rendered_inspector_default != rendered_metadata_default + + def _compare_identity_default(self, metadata_identity, inspector_identity): + diff, ignored, is_alter = super()._compare_identity_default( + metadata_identity, inspector_identity + ) + + if ( + metadata_identity is None + and inspector_identity is not None + and not diff + and inspector_identity.column is not None + and inspector_identity.column.primary_key + ): + # mssql reflect primary keys with autoincrement as identity + # columns. if no different attributes are present ignore them + is_alter = False + + return diff, ignored, is_alter + + def adjust_reflected_dialect_options( + self, reflected_object: Dict[str, Any], kind: str + ) -> Dict[str, Any]: + options: Dict[str, Any] + options = reflected_object.get("dialect_options", {}).copy() + if not options.get("mssql_include"): + options.pop("mssql_include", None) + if not options.get("mssql_clustered"): + options.pop("mssql_clustered", None) + return options + + +class _ExecDropConstraint(Executable, ClauseElement): + inherit_cache = False + + def __init__( + self, + tname: str, + colname: Union[Column[Any], str], + type_: str, + schema: Optional[str], + ) -> None: + self.tname = tname + self.colname = colname + self.type_ = type_ + self.schema = schema + + +class _ExecDropFKConstraint(Executable, ClauseElement): + inherit_cache = False + + def __init__( + self, tname: str, colname: Column[Any], schema: Optional[str] + ) -> None: + self.tname = tname + self.colname = colname + self.schema = schema + + +@compiles(_ExecDropConstraint, "mssql") +def _exec_drop_col_constraint( + element: _ExecDropConstraint, compiler: MSSQLCompiler, **kw +) -> str: + schema, tname, colname, type_ = ( + element.schema, + element.tname, + element.colname, + element.type_, + ) + # from http://www.mssqltips.com/sqlservertip/1425/\ + # working-with-default-constraints-in-sql-server/ + return """declare @const_name varchar(256) +select @const_name = QUOTENAME([name]) from %(type)s +where parent_object_id = object_id('%(schema_dot)s%(tname)s') +and col_name(parent_object_id, parent_column_id) = '%(colname)s' +exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % { + "type": type_, + "tname": tname, + "colname": colname, + "tname_quoted": format_table_name(compiler, tname, schema), + "schema_dot": schema + "." if schema else "", + } + + +@compiles(_ExecDropFKConstraint, "mssql") +def _exec_drop_col_fk_constraint( + element: _ExecDropFKConstraint, compiler: MSSQLCompiler, **kw +) -> str: + schema, tname, colname = element.schema, element.tname, element.colname + + return """declare @const_name varchar(256) +select @const_name = QUOTENAME([name]) from +sys.foreign_keys fk join sys.foreign_key_columns fkc +on fk.object_id=fkc.constraint_object_id +where fkc.parent_object_id = object_id('%(schema_dot)s%(tname)s') +and col_name(fkc.parent_object_id, fkc.parent_column_id) = '%(colname)s' +exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % { + "tname": tname, + "colname": colname, + "tname_quoted": format_table_name(compiler, tname, schema), + "schema_dot": schema + "." if schema else "", + } + + +@compiles(AddColumn, "mssql") +def visit_add_column(element: AddColumn, compiler: MSDDLCompiler, **kw) -> str: + return "%s %s" % ( + alter_table(compiler, element.table_name, element.schema), + mssql_add_column(compiler, element.column, **kw), + ) + + +def mssql_add_column( + compiler: MSDDLCompiler, column: Column[Any], **kw +) -> str: + return "ADD %s" % compiler.get_column_specification(column, **kw) + + +@compiles(ColumnNullable, "mssql") +def visit_column_nullable( + element: ColumnNullable, compiler: MSDDLCompiler, **kw +) -> str: + return "%s %s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + format_type(compiler, element.existing_type), # type: ignore[arg-type] + "NULL" if element.nullable else "NOT NULL", + ) + + +@compiles(ColumnDefault, "mssql") +def visit_column_default( + element: ColumnDefault, compiler: MSDDLCompiler, **kw +) -> str: + # TODO: there can also be a named constraint + # with ADD CONSTRAINT here + return "%s ADD DEFAULT %s FOR %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_server_default(compiler, element.default), + format_column_name(compiler, element.column_name), + ) + + +@compiles(ColumnName, "mssql") +def visit_rename_column( + element: ColumnName, compiler: MSDDLCompiler, **kw +) -> str: + return "EXEC sp_rename '%s.%s', %s, 'COLUMN'" % ( + format_table_name(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + format_column_name(compiler, element.newname), + ) + + +@compiles(ColumnType, "mssql") +def visit_column_type( + element: ColumnType, compiler: MSDDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + format_type(compiler, element.type_), + ) + + +@compiles(RenameTable, "mssql") +def visit_rename_table( + element: RenameTable, compiler: MSDDLCompiler, **kw +) -> str: + return "EXEC sp_rename '%s', %s" % ( + format_table_name(compiler, element.table_name, element.schema), + format_table_name(compiler, element.new_table_name, None), + ) diff --git a/venv/Lib/site-packages/alembic/ddl/mysql.py b/venv/Lib/site-packages/alembic/ddl/mysql.py new file mode 100644 index 0000000..32ced49 --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/mysql.py @@ -0,0 +1,471 @@ +from __future__ import annotations + +import re +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import schema +from sqlalchemy import types as sqltypes +from sqlalchemy.ext.compiler import compiles + +from .base import alter_table +from .base import AlterColumn +from .base import ColumnDefault +from .base import ColumnName +from .base import ColumnNullable +from .base import ColumnType +from .base import format_column_name +from .base import format_server_default +from .impl import DefaultImpl +from .. import util +from ..autogenerate import compare +from ..util import sqla_compat +from ..util.sqla_compat import _is_mariadb +from ..util.sqla_compat import _is_type_bound + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.dialects.mysql.base import MySQLDDLCompiler + from sqlalchemy.sql.ddl import DropConstraint + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.type_api import TypeEngine + + from .base import _ServerDefault + + +class MySQLImpl(DefaultImpl): + __dialect__ = "mysql" + + transactional_ddl = False + type_synonyms = DefaultImpl.type_synonyms + ( + {"BOOL", "TINYINT"}, + {"JSON", "LONGTEXT"}, + ) + type_arg_extract = [r"character set ([\w\-_]+)", r"collate ([\w\-_]+)"] + + def alter_column( # type:ignore[override] + self, + table_name: str, + column_name: str, + nullable: Optional[bool] = None, + server_default: Union[_ServerDefault, Literal[False]] = False, + name: Optional[str] = None, + type_: Optional[TypeEngine] = None, + schema: Optional[str] = None, + existing_type: Optional[TypeEngine] = None, + existing_server_default: Optional[_ServerDefault] = None, + existing_nullable: Optional[bool] = None, + autoincrement: Optional[bool] = None, + existing_autoincrement: Optional[bool] = None, + comment: Optional[Union[str, Literal[False]]] = False, + existing_comment: Optional[str] = None, + **kw: Any, + ) -> None: + if sqla_compat._server_default_is_identity( + server_default, existing_server_default + ) or sqla_compat._server_default_is_computed( + server_default, existing_server_default + ): + # modifying computed or identity columns is not supported + # the default will raise + super().alter_column( + table_name, + column_name, + nullable=nullable, + type_=type_, + schema=schema, + existing_type=existing_type, + existing_nullable=existing_nullable, + server_default=server_default, + existing_server_default=existing_server_default, + **kw, + ) + if name is not None or self._is_mysql_allowed_functional_default( + type_ if type_ is not None else existing_type, server_default + ): + self._exec( + MySQLChangeColumn( + table_name, + column_name, + schema=schema, + newname=name if name is not None else column_name, + nullable=nullable + if nullable is not None + else existing_nullable + if existing_nullable is not None + else True, + type_=type_ if type_ is not None else existing_type, + default=server_default + if server_default is not False + else existing_server_default, + autoincrement=autoincrement + if autoincrement is not None + else existing_autoincrement, + comment=comment + if comment is not False + else existing_comment, + ) + ) + elif ( + nullable is not None + or type_ is not None + or autoincrement is not None + or comment is not False + ): + self._exec( + MySQLModifyColumn( + table_name, + column_name, + schema=schema, + newname=name if name is not None else column_name, + nullable=nullable + if nullable is not None + else existing_nullable + if existing_nullable is not None + else True, + type_=type_ if type_ is not None else existing_type, + default=server_default + if server_default is not False + else existing_server_default, + autoincrement=autoincrement + if autoincrement is not None + else existing_autoincrement, + comment=comment + if comment is not False + else existing_comment, + ) + ) + elif server_default is not False: + self._exec( + MySQLAlterDefault( + table_name, column_name, server_default, schema=schema + ) + ) + + def drop_constraint( + self, + const: Constraint, + ) -> None: + if isinstance(const, schema.CheckConstraint) and _is_type_bound(const): + return + + super().drop_constraint(const) + + def _is_mysql_allowed_functional_default( + self, + type_: Optional[TypeEngine], + server_default: Union[_ServerDefault, Literal[False]], + ) -> bool: + return ( + type_ is not None + and type_._type_affinity # type:ignore[attr-defined] + is sqltypes.DateTime + and server_default is not None + ) + + def compare_server_default( + self, + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default, + ): + # partially a workaround for SQLAlchemy issue #3023; if the + # column were created without "NOT NULL", MySQL may have added + # an implicit default of '0' which we need to skip + # TODO: this is not really covered anymore ? + if ( + metadata_column.type._type_affinity is sqltypes.Integer + and inspector_column.primary_key + and not inspector_column.autoincrement + and not rendered_metadata_default + and rendered_inspector_default == "'0'" + ): + return False + elif ( + rendered_inspector_default + and inspector_column.type._type_affinity is sqltypes.Integer + ): + rendered_inspector_default = ( + re.sub(r"^'|'$", "", rendered_inspector_default) + if rendered_inspector_default is not None + else None + ) + return rendered_inspector_default != rendered_metadata_default + elif ( + rendered_metadata_default + and metadata_column.type._type_affinity is sqltypes.String + ): + metadata_default = re.sub(r"^'|'$", "", rendered_metadata_default) + return rendered_inspector_default != f"'{metadata_default}'" + elif rendered_inspector_default and rendered_metadata_default: + # adjust for "function()" vs. "FUNCTION" as can occur particularly + # for the CURRENT_TIMESTAMP function on newer MariaDB versions + + # SQLAlchemy MySQL dialect bundles ON UPDATE into the server + # default; adjust for this possibly being present. + onupdate_ins = re.match( + r"(.*) (on update.*?)(?:\(\))?$", + rendered_inspector_default.lower(), + ) + onupdate_met = re.match( + r"(.*) (on update.*?)(?:\(\))?$", + rendered_metadata_default.lower(), + ) + + if onupdate_ins: + if not onupdate_met: + return True + elif onupdate_ins.group(2) != onupdate_met.group(2): + return True + + rendered_inspector_default = onupdate_ins.group(1) + rendered_metadata_default = onupdate_met.group(1) + + return re.sub( + r"(.*?)(?:\(\))?$", r"\1", rendered_inspector_default.lower() + ) != re.sub( + r"(.*?)(?:\(\))?$", r"\1", rendered_metadata_default.lower() + ) + else: + return rendered_inspector_default != rendered_metadata_default + + def correct_for_autogen_constraints( + self, + conn_unique_constraints, + conn_indexes, + metadata_unique_constraints, + metadata_indexes, + ): + # TODO: if SQLA 1.0, make use of "duplicates_index" + # metadata + removed = set() + for idx in list(conn_indexes): + if idx.unique: + continue + # MySQL puts implicit indexes on FK columns, even if + # composite and even if MyISAM, so can't check this too easily. + # the name of the index may be the column name or it may + # be the name of the FK constraint. + for col in idx.columns: + if idx.name == col.name: + conn_indexes.remove(idx) + removed.add(idx.name) + break + for fk in col.foreign_keys: + if fk.name == idx.name: + conn_indexes.remove(idx) + removed.add(idx.name) + break + if idx.name in removed: + break + + # then remove indexes from the "metadata_indexes" + # that we've removed from reflected, otherwise they come out + # as adds (see #202) + for idx in list(metadata_indexes): + if idx.name in removed: + metadata_indexes.remove(idx) + + def correct_for_autogen_foreignkeys(self, conn_fks, metadata_fks): + conn_fk_by_sig = { + compare._fk_constraint_sig(fk).sig: fk for fk in conn_fks + } + metadata_fk_by_sig = { + compare._fk_constraint_sig(fk).sig: fk for fk in metadata_fks + } + + for sig in set(conn_fk_by_sig).intersection(metadata_fk_by_sig): + mdfk = metadata_fk_by_sig[sig] + cnfk = conn_fk_by_sig[sig] + # MySQL considers RESTRICT to be the default and doesn't + # report on it. if the model has explicit RESTRICT and + # the conn FK has None, set it to RESTRICT + if ( + mdfk.ondelete is not None + and mdfk.ondelete.lower() == "restrict" + and cnfk.ondelete is None + ): + cnfk.ondelete = "RESTRICT" + if ( + mdfk.onupdate is not None + and mdfk.onupdate.lower() == "restrict" + and cnfk.onupdate is None + ): + cnfk.onupdate = "RESTRICT" + + +class MariaDBImpl(MySQLImpl): + __dialect__ = "mariadb" + + +class MySQLAlterDefault(AlterColumn): + def __init__( + self, + name: str, + column_name: str, + default: _ServerDefault, + schema: Optional[str] = None, + ) -> None: + super(AlterColumn, self).__init__(name, schema=schema) + self.column_name = column_name + self.default = default + + +class MySQLChangeColumn(AlterColumn): + def __init__( + self, + name: str, + column_name: str, + schema: Optional[str] = None, + newname: Optional[str] = None, + type_: Optional[TypeEngine] = None, + nullable: Optional[bool] = None, + default: Optional[Union[_ServerDefault, Literal[False]]] = False, + autoincrement: Optional[bool] = None, + comment: Optional[Union[str, Literal[False]]] = False, + ) -> None: + super(AlterColumn, self).__init__(name, schema=schema) + self.column_name = column_name + self.nullable = nullable + self.newname = newname + self.default = default + self.autoincrement = autoincrement + self.comment = comment + if type_ is None: + raise util.CommandError( + "All MySQL CHANGE/MODIFY COLUMN operations " + "require the existing type." + ) + + self.type_ = sqltypes.to_instance(type_) + + +class MySQLModifyColumn(MySQLChangeColumn): + pass + + +@compiles(ColumnNullable, "mysql", "mariadb") +@compiles(ColumnName, "mysql", "mariadb") +@compiles(ColumnDefault, "mysql", "mariadb") +@compiles(ColumnType, "mysql", "mariadb") +def _mysql_doesnt_support_individual(element, compiler, **kw): + raise NotImplementedError( + "Individual alter column constructs not supported by MySQL" + ) + + +@compiles(MySQLAlterDefault, "mysql", "mariadb") +def _mysql_alter_default( + element: MySQLAlterDefault, compiler: MySQLDDLCompiler, **kw +) -> str: + return "%s ALTER COLUMN %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + "SET DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DROP DEFAULT", + ) + + +@compiles(MySQLModifyColumn, "mysql", "mariadb") +def _mysql_modify_column( + element: MySQLModifyColumn, compiler: MySQLDDLCompiler, **kw +) -> str: + return "%s MODIFY %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + _mysql_colspec( + compiler, + nullable=element.nullable, + server_default=element.default, + type_=element.type_, + autoincrement=element.autoincrement, + comment=element.comment, + ), + ) + + +@compiles(MySQLChangeColumn, "mysql", "mariadb") +def _mysql_change_column( + element: MySQLChangeColumn, compiler: MySQLDDLCompiler, **kw +) -> str: + return "%s CHANGE %s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + format_column_name(compiler, element.newname), + _mysql_colspec( + compiler, + nullable=element.nullable, + server_default=element.default, + type_=element.type_, + autoincrement=element.autoincrement, + comment=element.comment, + ), + ) + + +def _mysql_colspec( + compiler: MySQLDDLCompiler, + nullable: Optional[bool], + server_default: Optional[Union[_ServerDefault, Literal[False]]], + type_: TypeEngine, + autoincrement: Optional[bool], + comment: Optional[Union[str, Literal[False]]], +) -> str: + spec = "%s %s" % ( + compiler.dialect.type_compiler.process(type_), + "NULL" if nullable else "NOT NULL", + ) + if autoincrement: + spec += " AUTO_INCREMENT" + if server_default is not False and server_default is not None: + spec += " DEFAULT %s" % format_server_default(compiler, server_default) + if comment: + spec += " COMMENT %s" % compiler.sql_compiler.render_literal_value( + comment, sqltypes.String() + ) + + return spec + + +@compiles(schema.DropConstraint, "mysql", "mariadb") +def _mysql_drop_constraint( + element: DropConstraint, compiler: MySQLDDLCompiler, **kw +) -> str: + """Redefine SQLAlchemy's drop constraint to + raise errors for invalid constraint type.""" + + constraint = element.element + if isinstance( + constraint, + ( + schema.ForeignKeyConstraint, + schema.PrimaryKeyConstraint, + schema.UniqueConstraint, + ), + ): + assert not kw + return compiler.visit_drop_constraint(element) + elif isinstance(constraint, schema.CheckConstraint): + # note that SQLAlchemy as of 1.2 does not yet support + # DROP CONSTRAINT for MySQL/MariaDB, so we implement fully + # here. + if _is_mariadb(compiler.dialect): + return "ALTER TABLE %s DROP CONSTRAINT %s" % ( + compiler.preparer.format_table(constraint.table), + compiler.preparer.format_constraint(constraint), + ) + else: + return "ALTER TABLE %s DROP CHECK %s" % ( + compiler.preparer.format_table(constraint.table), + compiler.preparer.format_constraint(constraint), + ) + else: + raise NotImplementedError( + "No generic 'DROP CONSTRAINT' in MySQL - " + "please specify constraint type" + ) diff --git a/venv/Lib/site-packages/alembic/ddl/oracle.py b/venv/Lib/site-packages/alembic/ddl/oracle.py new file mode 100644 index 0000000..e56bb21 --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/oracle.py @@ -0,0 +1,197 @@ +from __future__ import annotations + +import re +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from sqlalchemy.ext.compiler import compiles +from sqlalchemy.sql import sqltypes + +from .base import AddColumn +from .base import alter_table +from .base import ColumnComment +from .base import ColumnDefault +from .base import ColumnName +from .base import ColumnNullable +from .base import ColumnType +from .base import format_column_name +from .base import format_server_default +from .base import format_table_name +from .base import format_type +from .base import IdentityColumnDefault +from .base import RenameTable +from .impl import DefaultImpl + +if TYPE_CHECKING: + from sqlalchemy.dialects.oracle.base import OracleDDLCompiler + from sqlalchemy.engine.cursor import CursorResult + from sqlalchemy.sql.schema import Column + + +class OracleImpl(DefaultImpl): + __dialect__ = "oracle" + transactional_ddl = False + batch_separator = "/" + command_terminator = "" + type_synonyms = DefaultImpl.type_synonyms + ( + {"VARCHAR", "VARCHAR2"}, + {"BIGINT", "INTEGER", "SMALLINT", "DECIMAL", "NUMERIC", "NUMBER"}, + {"DOUBLE", "FLOAT", "DOUBLE_PRECISION"}, + ) + identity_attrs_ignore = () + + def __init__(self, *arg, **kw) -> None: + super().__init__(*arg, **kw) + self.batch_separator = self.context_opts.get( + "oracle_batch_separator", self.batch_separator + ) + + def _exec(self, construct: Any, *args, **kw) -> Optional[CursorResult]: + result = super()._exec(construct, *args, **kw) + if self.as_sql and self.batch_separator: + self.static_output(self.batch_separator) + return result + + def compare_server_default( + self, + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default, + ): + if rendered_metadata_default is not None: + rendered_metadata_default = re.sub( + r"^\((.+)\)$", r"\1", rendered_metadata_default + ) + + rendered_metadata_default = re.sub( + r"^\"?'(.+)'\"?$", r"\1", rendered_metadata_default + ) + + if rendered_inspector_default is not None: + rendered_inspector_default = re.sub( + r"^\((.+)\)$", r"\1", rendered_inspector_default + ) + + rendered_inspector_default = re.sub( + r"^\"?'(.+)'\"?$", r"\1", rendered_inspector_default + ) + + rendered_inspector_default = rendered_inspector_default.strip() + return rendered_inspector_default != rendered_metadata_default + + def emit_begin(self) -> None: + self._exec("SET TRANSACTION READ WRITE") + + def emit_commit(self) -> None: + self._exec("COMMIT") + + +@compiles(AddColumn, "oracle") +def visit_add_column( + element: AddColumn, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s %s" % ( + alter_table(compiler, element.table_name, element.schema), + add_column(compiler, element.column, **kw), + ) + + +@compiles(ColumnNullable, "oracle") +def visit_column_nullable( + element: ColumnNullable, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "NULL" if element.nullable else "NOT NULL", + ) + + +@compiles(ColumnType, "oracle") +def visit_column_type( + element: ColumnType, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "%s" % format_type(compiler, element.type_), + ) + + +@compiles(ColumnName, "oracle") +def visit_column_name( + element: ColumnName, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s RENAME COLUMN %s TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_column_name(compiler, element.column_name), + format_column_name(compiler, element.newname), + ) + + +@compiles(ColumnDefault, "oracle") +def visit_column_default( + element: ColumnDefault, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DEFAULT NULL", + ) + + +@compiles(ColumnComment, "oracle") +def visit_column_comment( + element: ColumnComment, compiler: OracleDDLCompiler, **kw +) -> str: + ddl = "COMMENT ON COLUMN {table_name}.{column_name} IS {comment}" + + comment = compiler.sql_compiler.render_literal_value( + (element.comment if element.comment is not None else ""), + sqltypes.String(), + ) + + return ddl.format( + table_name=element.table_name, + column_name=element.column_name, + comment=comment, + ) + + +@compiles(RenameTable, "oracle") +def visit_rename_table( + element: RenameTable, compiler: OracleDDLCompiler, **kw +) -> str: + return "%s RENAME TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_table_name(compiler, element.new_table_name, None), + ) + + +def alter_column(compiler: OracleDDLCompiler, name: str) -> str: + return "MODIFY %s" % format_column_name(compiler, name) + + +def add_column(compiler: OracleDDLCompiler, column: Column[Any], **kw) -> str: + return "ADD %s" % compiler.get_column_specification(column, **kw) + + +@compiles(IdentityColumnDefault, "oracle") +def visit_identity_column( + element: IdentityColumnDefault, compiler: OracleDDLCompiler, **kw +): + text = "%s %s " % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + ) + if element.default is None: + # drop identity + text += "DROP IDENTITY" + return text + else: + text += compiler.visit_identity_column(element.default) + return text diff --git a/venv/Lib/site-packages/alembic/ddl/postgresql.py b/venv/Lib/site-packages/alembic/ddl/postgresql.py new file mode 100644 index 0000000..949e256 --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/postgresql.py @@ -0,0 +1,774 @@ +from __future__ import annotations + +import logging +import re +from typing import Any +from typing import cast +from typing import Dict +from typing import List +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import Column +from sqlalchemy import literal_column +from sqlalchemy import Numeric +from sqlalchemy import text +from sqlalchemy import types as sqltypes +from sqlalchemy.dialects.postgresql import BIGINT +from sqlalchemy.dialects.postgresql import ExcludeConstraint +from sqlalchemy.dialects.postgresql import INTEGER +from sqlalchemy.schema import CreateIndex +from sqlalchemy.sql import operators +from sqlalchemy.sql.elements import ColumnClause +from sqlalchemy.sql.elements import TextClause +from sqlalchemy.sql.elements import UnaryExpression +from sqlalchemy.sql.functions import FunctionElement +from sqlalchemy.types import NULLTYPE + +from .base import alter_column +from .base import alter_table +from .base import AlterColumn +from .base import ColumnComment +from .base import compiles +from .base import format_column_name +from .base import format_table_name +from .base import format_type +from .base import IdentityColumnDefault +from .base import RenameTable +from .impl import DefaultImpl +from .. import util +from ..autogenerate import render +from ..operations import ops +from ..operations import schemaobj +from ..operations.base import BatchOperations +from ..operations.base import Operations +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy import Index + from sqlalchemy import UniqueConstraint + from sqlalchemy.dialects.postgresql.array import ARRAY + from sqlalchemy.dialects.postgresql.base import PGDDLCompiler + from sqlalchemy.dialects.postgresql.hstore import HSTORE + from sqlalchemy.dialects.postgresql.json import JSON + from sqlalchemy.dialects.postgresql.json import JSONB + from sqlalchemy.sql.elements import ClauseElement + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import quoted_name + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.type_api import TypeEngine + + from .base import _ServerDefault + from ..autogenerate.api import AutogenContext + from ..autogenerate.render import _f_name + from ..runtime.migration import MigrationContext + + +log = logging.getLogger(__name__) + + +class PostgresqlImpl(DefaultImpl): + __dialect__ = "postgresql" + transactional_ddl = True + type_synonyms = DefaultImpl.type_synonyms + ( + {"FLOAT", "DOUBLE PRECISION"}, + ) + + def create_index(self, index: Index, **kw: Any) -> None: + # this likely defaults to None if not present, so get() + # should normally not return the default value. being + # defensive in any case + postgresql_include = index.kwargs.get("postgresql_include", None) or () + for col in postgresql_include: + if col not in index.table.c: # type: ignore[union-attr] + index.table.append_column( # type: ignore[union-attr] + Column(col, sqltypes.NullType) + ) + self._exec(CreateIndex(index, **kw)) + + def prep_table_for_batch(self, batch_impl, table): + for constraint in table.constraints: + if ( + constraint.name is not None + and constraint.name in batch_impl.named_constraints + ): + self.drop_constraint(constraint) + + def compare_server_default( + self, + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default, + ): + # don't do defaults for SERIAL columns + if ( + metadata_column.primary_key + and metadata_column is metadata_column.table._autoincrement_column + ): + return False + + conn_col_default = rendered_inspector_default + + defaults_equal = conn_col_default == rendered_metadata_default + if defaults_equal: + return False + + if None in ( + conn_col_default, + rendered_metadata_default, + metadata_column.server_default, + ): + return not defaults_equal + + metadata_default = metadata_column.server_default.arg + + if isinstance(metadata_default, str): + if not isinstance(inspector_column.type, Numeric): + metadata_default = re.sub(r"^'|'$", "", metadata_default) + metadata_default = f"'{metadata_default}'" + + metadata_default = literal_column(metadata_default) + + # run a real compare against the server + return not self.connection.scalar( + sqla_compat._select( + literal_column(conn_col_default) == metadata_default + ) + ) + + def alter_column( # type:ignore[override] + self, + table_name: str, + column_name: str, + nullable: Optional[bool] = None, + server_default: Union[_ServerDefault, Literal[False]] = False, + name: Optional[str] = None, + type_: Optional[TypeEngine] = None, + schema: Optional[str] = None, + autoincrement: Optional[bool] = None, + existing_type: Optional[TypeEngine] = None, + existing_server_default: Optional[_ServerDefault] = None, + existing_nullable: Optional[bool] = None, + existing_autoincrement: Optional[bool] = None, + **kw: Any, + ) -> None: + using = kw.pop("postgresql_using", None) + + if using is not None and type_ is None: + raise util.CommandError( + "postgresql_using must be used with the type_ parameter" + ) + + if type_ is not None: + self._exec( + PostgresqlColumnType( + table_name, + column_name, + type_, + schema=schema, + using=using, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + ) + ) + + super().alter_column( + table_name, + column_name, + nullable=nullable, + server_default=server_default, + name=name, + schema=schema, + autoincrement=autoincrement, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_autoincrement=existing_autoincrement, + **kw, + ) + + def autogen_column_reflect(self, inspector, table, column_info): + if column_info.get("default") and isinstance( + column_info["type"], (INTEGER, BIGINT) + ): + seq_match = re.match( + r"nextval\('(.+?)'::regclass\)", column_info["default"] + ) + if seq_match: + info = sqla_compat._exec_on_inspector( + inspector, + text( + "select c.relname, a.attname " + "from pg_class as c join " + "pg_depend d on d.objid=c.oid and " + "d.classid='pg_class'::regclass and " + "d.refclassid='pg_class'::regclass " + "join pg_class t on t.oid=d.refobjid " + "join pg_attribute a on a.attrelid=t.oid and " + "a.attnum=d.refobjsubid " + "where c.relkind='S' and c.relname=:seqname" + ), + seqname=seq_match.group(1), + ).first() + if info: + seqname, colname = info + if colname == column_info["name"]: + log.info( + "Detected sequence named '%s' as " + "owned by integer column '%s(%s)', " + "assuming SERIAL and omitting", + seqname, + table.name, + colname, + ) + # sequence, and the owner is this column, + # its a SERIAL - whack it! + del column_info["default"] + + def correct_for_autogen_constraints( + self, + conn_unique_constraints, + conn_indexes, + metadata_unique_constraints, + metadata_indexes, + ): + doubled_constraints = { + index + for index in conn_indexes + if index.info.get("duplicates_constraint") + } + + for ix in doubled_constraints: + conn_indexes.remove(ix) + + if not sqla_compat.sqla_2: + self._skip_functional_indexes(metadata_indexes, conn_indexes) + + def _cleanup_index_expr( + self, index: Index, expr: str, remove_suffix: str + ) -> str: + # start = expr + expr = expr.lower().replace('"', "").replace("'", "") + if index.table is not None: + # should not be needed, since include_table=False is in compile + expr = expr.replace(f"{index.table.name.lower()}.", "") + + while expr and expr[0] == "(" and expr[-1] == ")": + expr = expr[1:-1] + if "::" in expr: + # strip :: cast. types can have spaces in them + expr = re.sub(r"(::[\w ]+\w)", "", expr) + + if remove_suffix and expr.endswith(remove_suffix): + expr = expr[: -len(remove_suffix)] + + # print(f"START: {start} END: {expr}") + return expr + + def _default_modifiers(self, exp: ClauseElement) -> str: + to_remove = "" + while isinstance(exp, UnaryExpression): + if exp.modifier is None: + exp = exp.element + else: + op = exp.modifier + if isinstance(exp.element, UnaryExpression): + inner_op = exp.element.modifier + else: + inner_op = None + if inner_op is None: + if op == operators.asc_op: + # default is asc + to_remove = " asc" + elif op == operators.nullslast_op: + # default is nulls last + to_remove = " nulls last" + else: + if ( + inner_op == operators.asc_op + and op == operators.nullslast_op + ): + # default is asc nulls last + to_remove = " asc nulls last" + elif ( + inner_op == operators.desc_op + and op == operators.nullsfirst_op + ): + # default for desc is nulls first + to_remove = " nulls first" + break + return to_remove + + def _dialect_sig( + self, item: Union[Index, UniqueConstraint] + ) -> Tuple[Any, ...]: + # only the positive case is returned by sqlalchemy reflection so + # None and False are threated the same + if item.dialect_kwargs.get("postgresql_nulls_not_distinct"): + return ("nulls_not_distinct",) + return () + + def create_index_sig(self, index: Index) -> Tuple[Any, ...]: + return tuple( + self._cleanup_index_expr( + index, + *( + (e, "") + if isinstance(e, str) + else (self._compile_element(e), self._default_modifiers(e)) + ), + ) + for e in index.expressions + ) + self._dialect_sig(index) + + def create_unique_constraint_sig( + self, const: UniqueConstraint + ) -> Tuple[Any, ...]: + return tuple( + sorted([col.name for col in const.columns]) + ) + self._dialect_sig(const) + + def adjust_reflected_dialect_options( + self, reflected_options: Dict[str, Any], kind: str + ) -> Dict[str, Any]: + options: Dict[str, Any] + options = reflected_options.get("dialect_options", {}).copy() + if not options.get("postgresql_include"): + options.pop("postgresql_include", None) + return options + + def _compile_element(self, element: ClauseElement) -> str: + return element.compile( + dialect=self.dialect, + compile_kwargs={"literal_binds": True, "include_table": False}, + ).string + + def render_ddl_sql_expr( + self, + expr: ClauseElement, + is_server_default: bool = False, + is_index: bool = False, + **kw: Any, + ) -> str: + """Render a SQL expression that is typically a server default, + index expression, etc. + + """ + + # apply self_group to index expressions; + # see https://github.com/sqlalchemy/sqlalchemy/blob/ + # 82fa95cfce070fab401d020c6e6e4a6a96cc2578/ + # lib/sqlalchemy/dialects/postgresql/base.py#L2261 + if is_index and not isinstance(expr, ColumnClause): + expr = expr.self_group() + + return super().render_ddl_sql_expr( + expr, is_server_default=is_server_default, is_index=is_index, **kw + ) + + def render_type( + self, type_: TypeEngine, autogen_context: AutogenContext + ) -> Union[str, Literal[False]]: + mod = type(type_).__module__ + if not mod.startswith("sqlalchemy.dialects.postgresql"): + return False + + if hasattr(self, "_render_%s_type" % type_.__visit_name__): + meth = getattr(self, "_render_%s_type" % type_.__visit_name__) + return meth(type_, autogen_context) + + return False + + def _render_HSTORE_type( + self, type_: HSTORE, autogen_context: AutogenContext + ) -> str: + return cast( + str, + render._render_type_w_subtype( + type_, autogen_context, "text_type", r"(.+?\(.*text_type=)" + ), + ) + + def _render_ARRAY_type( + self, type_: ARRAY, autogen_context: AutogenContext + ) -> str: + return cast( + str, + render._render_type_w_subtype( + type_, autogen_context, "item_type", r"(.+?\()" + ), + ) + + def _render_JSON_type( + self, type_: JSON, autogen_context: AutogenContext + ) -> str: + return cast( + str, + render._render_type_w_subtype( + type_, autogen_context, "astext_type", r"(.+?\(.*astext_type=)" + ), + ) + + def _render_JSONB_type( + self, type_: JSONB, autogen_context: AutogenContext + ) -> str: + return cast( + str, + render._render_type_w_subtype( + type_, autogen_context, "astext_type", r"(.+?\(.*astext_type=)" + ), + ) + + +class PostgresqlColumnType(AlterColumn): + def __init__( + self, name: str, column_name: str, type_: TypeEngine, **kw + ) -> None: + using = kw.pop("using", None) + super().__init__(name, column_name, **kw) + self.type_ = sqltypes.to_instance(type_) + self.using = using + + +@compiles(RenameTable, "postgresql") +def visit_rename_table( + element: RenameTable, compiler: PGDDLCompiler, **kw +) -> str: + return "%s RENAME TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_table_name(compiler, element.new_table_name, None), + ) + + +@compiles(PostgresqlColumnType, "postgresql") +def visit_column_type( + element: PostgresqlColumnType, compiler: PGDDLCompiler, **kw +) -> str: + return "%s %s %s %s" % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + "TYPE %s" % format_type(compiler, element.type_), + "USING %s" % element.using if element.using else "", + ) + + +@compiles(ColumnComment, "postgresql") +def visit_column_comment( + element: ColumnComment, compiler: PGDDLCompiler, **kw +) -> str: + ddl = "COMMENT ON COLUMN {table_name}.{column_name} IS {comment}" + comment = ( + compiler.sql_compiler.render_literal_value( + element.comment, sqltypes.String() + ) + if element.comment is not None + else "NULL" + ) + + return ddl.format( + table_name=format_table_name( + compiler, element.table_name, element.schema + ), + column_name=format_column_name(compiler, element.column_name), + comment=comment, + ) + + +@compiles(IdentityColumnDefault, "postgresql") +def visit_identity_column( + element: IdentityColumnDefault, compiler: PGDDLCompiler, **kw +): + text = "%s %s " % ( + alter_table(compiler, element.table_name, element.schema), + alter_column(compiler, element.column_name), + ) + if element.default is None: + # drop identity + text += "DROP IDENTITY" + return text + elif element.existing_server_default is None: + # add identity options + text += "ADD " + text += compiler.visit_identity_column(element.default) + return text + else: + # alter identity + diff, _, _ = element.impl._compare_identity_default( + element.default, element.existing_server_default + ) + identity = element.default + for attr in sorted(diff): + if attr == "always": + text += "SET GENERATED %s " % ( + "ALWAYS" if identity.always else "BY DEFAULT" + ) + else: + text += "SET %s " % compiler.get_identity_options( + sqla_compat.Identity(**{attr: getattr(identity, attr)}) + ) + return text + + +@Operations.register_operation("create_exclude_constraint") +@BatchOperations.register_operation( + "create_exclude_constraint", "batch_create_exclude_constraint" +) +@ops.AddConstraintOp.register_add_constraint("exclude_constraint") +class CreateExcludeConstraintOp(ops.AddConstraintOp): + """Represent a create exclude constraint operation.""" + + constraint_type = "exclude" + + def __init__( + self, + constraint_name: sqla_compat._ConstraintName, + table_name: Union[str, quoted_name], + elements: Union[ + Sequence[Tuple[str, str]], + Sequence[Tuple[ColumnClause[Any], str]], + ], + where: Optional[Union[ColumnElement[bool], str]] = None, + schema: Optional[str] = None, + _orig_constraint: Optional[ExcludeConstraint] = None, + **kw, + ) -> None: + self.constraint_name = constraint_name + self.table_name = table_name + self.elements = elements + self.where = where + self.schema = schema + self._orig_constraint = _orig_constraint + self.kw = kw + + @classmethod + def from_constraint( # type:ignore[override] + cls, constraint: ExcludeConstraint + ) -> CreateExcludeConstraintOp: + constraint_table = sqla_compat._table_for_constraint(constraint) + return cls( + constraint.name, + constraint_table.name, + [ + (expr, op) + for expr, name, op in constraint._render_exprs # type:ignore[attr-defined] # noqa + ], + where=cast("ColumnElement[bool] | None", constraint.where), + schema=constraint_table.schema, + _orig_constraint=constraint, + deferrable=constraint.deferrable, + initially=constraint.initially, + using=constraint.using, + ) + + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> ExcludeConstraint: + if self._orig_constraint is not None: + return self._orig_constraint + schema_obj = schemaobj.SchemaObjects(migration_context) + t = schema_obj.table(self.table_name, schema=self.schema) + excl = ExcludeConstraint( + *self.elements, + name=self.constraint_name, + where=self.where, + **self.kw, + ) + for ( + expr, + name, + oper, + ) in excl._render_exprs: # type:ignore[attr-defined] + t.append_column(Column(name, NULLTYPE)) + t.append_constraint(excl) + return excl + + @classmethod + def create_exclude_constraint( + cls, + operations: Operations, + constraint_name: str, + table_name: str, + *elements: Any, + **kw: Any, + ) -> Optional[Table]: + """Issue an alter to create an EXCLUDE constraint using the + current migration context. + + .. note:: This method is Postgresql specific, and additionally + requires at least SQLAlchemy 1.0. + + e.g.:: + + from alembic import op + + op.create_exclude_constraint( + "user_excl", + "user", + ("period", "&&"), + ("group", "="), + where=("group != 'some group'"), + ) + + Note that the expressions work the same way as that of + the ``ExcludeConstraint`` object itself; if plain strings are + passed, quoting rules must be applied manually. + + :param name: Name of the constraint. + :param table_name: String name of the source table. + :param elements: exclude conditions. + :param where: SQL expression or SQL string with optional WHERE + clause. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. + + """ + op = cls(constraint_name, table_name, elements, **kw) + return operations.invoke(op) + + @classmethod + def batch_create_exclude_constraint( + cls, + operations: BatchOperations, + constraint_name: str, + *elements: Any, + **kw: Any, + ): + """Issue a "create exclude constraint" instruction using the + current batch migration context. + + .. note:: This method is Postgresql specific, and additionally + requires at least SQLAlchemy 1.0. + + .. seealso:: + + :meth:`.Operations.create_exclude_constraint` + + """ + kw["schema"] = operations.impl.schema + op = cls(constraint_name, operations.impl.table_name, elements, **kw) + return operations.invoke(op) + + +@render.renderers.dispatch_for(CreateExcludeConstraintOp) +def _add_exclude_constraint( + autogen_context: AutogenContext, op: CreateExcludeConstraintOp +) -> str: + return _exclude_constraint(op.to_constraint(), autogen_context, alter=True) + + +@render._constraint_renderers.dispatch_for(ExcludeConstraint) +def _render_inline_exclude_constraint( + constraint: ExcludeConstraint, + autogen_context: AutogenContext, + namespace_metadata: MetaData, +) -> str: + rendered = render._user_defined_render( + "exclude", constraint, autogen_context + ) + if rendered is not False: + return rendered + + return _exclude_constraint(constraint, autogen_context, False) + + +def _postgresql_autogenerate_prefix(autogen_context: AutogenContext) -> str: + imports = autogen_context.imports + if imports is not None: + imports.add("from sqlalchemy.dialects import postgresql") + return "postgresql." + + +def _exclude_constraint( + constraint: ExcludeConstraint, + autogen_context: AutogenContext, + alter: bool, +) -> str: + opts: List[Tuple[str, Union[quoted_name, str, _f_name, None]]] = [] + + has_batch = autogen_context._has_batch + + if constraint.deferrable: + opts.append(("deferrable", str(constraint.deferrable))) + if constraint.initially: + opts.append(("initially", str(constraint.initially))) + if constraint.using: + opts.append(("using", str(constraint.using))) + if not has_batch and alter and constraint.table.schema: + opts.append(("schema", render._ident(constraint.table.schema))) + if not alter and constraint.name: + opts.append( + ("name", render._render_gen_name(autogen_context, constraint.name)) + ) + + def do_expr_where_opts(): + args = [ + "(%s, %r)" + % ( + _render_potential_column(sqltext, autogen_context), + opstring, + ) + for sqltext, name, opstring in constraint._render_exprs # type:ignore[attr-defined] # noqa + ] + if constraint.where is not None: + args.append( + "where=%s" + % render._render_potential_expr( + constraint.where, autogen_context + ) + ) + args.extend(["%s=%r" % (k, v) for k, v in opts]) + return args + + if alter: + args = [ + repr(render._render_gen_name(autogen_context, constraint.name)) + ] + if not has_batch: + args += [repr(render._ident(constraint.table.name))] + args.extend(do_expr_where_opts()) + return "%(prefix)screate_exclude_constraint(%(args)s)" % { + "prefix": render._alembic_autogenerate_prefix(autogen_context), + "args": ", ".join(args), + } + else: + args = do_expr_where_opts() + return "%(prefix)sExcludeConstraint(%(args)s)" % { + "prefix": _postgresql_autogenerate_prefix(autogen_context), + "args": ", ".join(args), + } + + +def _render_potential_column( + value: Union[ + ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any] + ], + autogen_context: AutogenContext, +) -> str: + if isinstance(value, ColumnClause): + if value.is_literal: + # like literal_column("int8range(from, to)") in ExcludeConstraint + template = "%(prefix)sliteral_column(%(name)r)" + else: + template = "%(prefix)scolumn(%(name)r)" + + return template % { + "prefix": render._sqlalchemy_autogenerate_prefix(autogen_context), + "name": value.name, + } + else: + return render._render_potential_expr( + value, + autogen_context, + wrap_in_text=isinstance(value, (TextClause, FunctionElement)), + ) diff --git a/venv/Lib/site-packages/alembic/ddl/sqlite.py b/venv/Lib/site-packages/alembic/ddl/sqlite.py new file mode 100644 index 0000000..c6186c6 --- /dev/null +++ b/venv/Lib/site-packages/alembic/ddl/sqlite.py @@ -0,0 +1,223 @@ +from __future__ import annotations + +import re +from typing import Any +from typing import Dict +from typing import Optional +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import cast +from sqlalchemy import JSON +from sqlalchemy import schema +from sqlalchemy import sql +from sqlalchemy.ext.compiler import compiles + +from .base import alter_table +from .base import format_table_name +from .base import RenameTable +from .impl import DefaultImpl +from .. import util + +if TYPE_CHECKING: + from sqlalchemy.engine.reflection import Inspector + from sqlalchemy.sql.compiler import DDLCompiler + from sqlalchemy.sql.elements import Cast + from sqlalchemy.sql.elements import ClauseElement + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.type_api import TypeEngine + + from ..operations.batch import BatchOperationsImpl + + +class SQLiteImpl(DefaultImpl): + __dialect__ = "sqlite" + + transactional_ddl = False + """SQLite supports transactional DDL, but pysqlite does not: + see: http://bugs.python.org/issue10740 + """ + + def requires_recreate_in_batch( + self, batch_op: BatchOperationsImpl + ) -> bool: + """Return True if the given :class:`.BatchOperationsImpl` + would need the table to be recreated and copied in order to + proceed. + + Normally, only returns True on SQLite when operations other + than add_column are present. + + """ + for op in batch_op.batch: + if op[0] == "add_column": + col = op[1][1] + if isinstance( + col.server_default, schema.DefaultClause + ) and isinstance(col.server_default.arg, sql.ClauseElement): + return True + elif ( + isinstance(col.server_default, util.sqla_compat.Computed) + and col.server_default.persisted + ): + return True + elif op[0] not in ("create_index", "drop_index"): + return True + else: + return False + + def add_constraint(self, const: Constraint): + # attempt to distinguish between an + # auto-gen constraint and an explicit one + if const._create_rule is None: # type:ignore[attr-defined] + raise NotImplementedError( + "No support for ALTER of constraints in SQLite dialect. " + "Please refer to the batch mode feature which allows for " + "SQLite migrations using a copy-and-move strategy." + ) + elif const._create_rule(self): # type:ignore[attr-defined] + util.warn( + "Skipping unsupported ALTER for " + "creation of implicit constraint. " + "Please refer to the batch mode feature which allows for " + "SQLite migrations using a copy-and-move strategy." + ) + + def drop_constraint(self, const: Constraint): + if const._create_rule is None: # type:ignore[attr-defined] + raise NotImplementedError( + "No support for ALTER of constraints in SQLite dialect. " + "Please refer to the batch mode feature which allows for " + "SQLite migrations using a copy-and-move strategy." + ) + + def compare_server_default( + self, + inspector_column: Column[Any], + metadata_column: Column[Any], + rendered_metadata_default: Optional[str], + rendered_inspector_default: Optional[str], + ) -> bool: + if rendered_metadata_default is not None: + rendered_metadata_default = re.sub( + r"^\((.+)\)$", r"\1", rendered_metadata_default + ) + + rendered_metadata_default = re.sub( + r"^\"?'(.+)'\"?$", r"\1", rendered_metadata_default + ) + + if rendered_inspector_default is not None: + rendered_inspector_default = re.sub( + r"^\((.+)\)$", r"\1", rendered_inspector_default + ) + + rendered_inspector_default = re.sub( + r"^\"?'(.+)'\"?$", r"\1", rendered_inspector_default + ) + + return rendered_inspector_default != rendered_metadata_default + + def _guess_if_default_is_unparenthesized_sql_expr( + self, expr: Optional[str] + ) -> bool: + """Determine if a server default is a SQL expression or a constant. + + There are too many assertions that expect server defaults to round-trip + identically without parenthesis added so we will add parens only in + very specific cases. + + """ + if not expr: + return False + elif re.match(r"^[0-9\.]$", expr): + return False + elif re.match(r"^'.+'$", expr): + return False + elif re.match(r"^\(.+\)$", expr): + return False + else: + return True + + def autogen_column_reflect( + self, + inspector: Inspector, + table: Table, + column_info: Dict[str, Any], + ) -> None: + # SQLite expression defaults require parenthesis when sent + # as DDL + if self._guess_if_default_is_unparenthesized_sql_expr( + column_info.get("default", None) + ): + column_info["default"] = "(%s)" % (column_info["default"],) + + def render_ddl_sql_expr( + self, expr: ClauseElement, is_server_default: bool = False, **kw + ) -> str: + # SQLite expression defaults require parenthesis when sent + # as DDL + str_expr = super().render_ddl_sql_expr( + expr, is_server_default=is_server_default, **kw + ) + + if ( + is_server_default + and self._guess_if_default_is_unparenthesized_sql_expr(str_expr) + ): + str_expr = "(%s)" % (str_expr,) + return str_expr + + def cast_for_batch_migrate( + self, + existing: Column[Any], + existing_transfer: Dict[str, Union[TypeEngine, Cast]], + new_type: TypeEngine, + ) -> None: + if ( + existing.type._type_affinity # type:ignore[attr-defined] + is not new_type._type_affinity # type:ignore[attr-defined] + and not isinstance(new_type, JSON) + ): + existing_transfer["expr"] = cast( + existing_transfer["expr"], new_type + ) + + def correct_for_autogen_constraints( + self, + conn_unique_constraints, + conn_indexes, + metadata_unique_constraints, + metadata_indexes, + ): + self._skip_functional_indexes(metadata_indexes, conn_indexes) + + +@compiles(RenameTable, "sqlite") +def visit_rename_table( + element: RenameTable, compiler: DDLCompiler, **kw +) -> str: + return "%s RENAME TO %s" % ( + alter_table(compiler, element.table_name, element.schema), + format_table_name(compiler, element.new_table_name, None), + ) + + +# @compiles(AddColumn, 'sqlite') +# def visit_add_column(element, compiler, **kw): +# return "%s %s" % ( +# alter_table(compiler, element.table_name, element.schema), +# add_column(compiler, element.column, **kw) +# ) + + +# def add_column(compiler, column, **kw): +# text = "ADD COLUMN %s" % compiler.get_column_specification(column, **kw) +# need to modify SQLAlchemy so that the CHECK associated with a Boolean +# or Enum gets placed as part of the column constraints, not the Table +# see ticket 98 +# for const in column.constraints: +# text += compiler.process(AddConstraint(const)) +# return text diff --git a/venv/Lib/site-packages/alembic/environment.py b/venv/Lib/site-packages/alembic/environment.py new file mode 100644 index 0000000..adfc93e --- /dev/null +++ b/venv/Lib/site-packages/alembic/environment.py @@ -0,0 +1 @@ +from .runtime.environment import * # noqa diff --git a/venv/Lib/site-packages/alembic/migration.py b/venv/Lib/site-packages/alembic/migration.py new file mode 100644 index 0000000..02626e2 --- /dev/null +++ b/venv/Lib/site-packages/alembic/migration.py @@ -0,0 +1 @@ +from .runtime.migration import * # noqa diff --git a/venv/Lib/site-packages/alembic/op.py b/venv/Lib/site-packages/alembic/op.py new file mode 100644 index 0000000..f3f5fac --- /dev/null +++ b/venv/Lib/site-packages/alembic/op.py @@ -0,0 +1,5 @@ +from .operations.base import Operations + +# create proxy functions for +# each method on the Operations class. +Operations.create_module_class_proxy(globals(), locals()) diff --git a/venv/Lib/site-packages/alembic/op.pyi b/venv/Lib/site-packages/alembic/op.pyi new file mode 100644 index 0000000..944b5ae --- /dev/null +++ b/venv/Lib/site-packages/alembic/op.pyi @@ -0,0 +1,1283 @@ +# ### this file stubs are generated by tools/write_pyi.py - do not edit ### +# ### imports are manually managed +from __future__ import annotations + +from contextlib import contextmanager +from typing import Any +from typing import Awaitable +from typing import Callable +from typing import Dict +from typing import Iterator +from typing import List +from typing import Literal +from typing import Mapping +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Type +from typing import TYPE_CHECKING +from typing import TypeVar +from typing import Union + +if TYPE_CHECKING: + from sqlalchemy.engine import Connection + from sqlalchemy.sql import Executable + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import conv + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.expression import TableClause + from sqlalchemy.sql.functions import Function + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import Computed + from sqlalchemy.sql.schema import Identity + from sqlalchemy.sql.schema import SchemaItem + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.type_api import TypeEngine + from sqlalchemy.util import immutabledict + + from .operations.ops import BatchOperations + from .operations.ops import MigrateOperation + from .runtime.migration import MigrationContext + from .util.sqla_compat import _literal_bindparam + +_T = TypeVar("_T") +### end imports ### + +def add_column( + table_name: str, column: Column[Any], *, schema: Optional[str] = None +) -> None: + """Issue an "add column" instruction using the current + migration context. + + e.g.:: + + from alembic import op + from sqlalchemy import Column, String + + op.add_column("organization", Column("name", String())) + + The :meth:`.Operations.add_column` method typically corresponds + to the SQL command "ALTER TABLE... ADD COLUMN". Within the scope + of this command, the column's name, datatype, nullability, + and optional server-generated defaults may be indicated. + + .. note:: + + With the exception of NOT NULL constraints or single-column FOREIGN + KEY constraints, other kinds of constraints such as PRIMARY KEY, + UNIQUE or CHECK constraints **cannot** be generated using this + method; for these constraints, refer to operations such as + :meth:`.Operations.create_primary_key` and + :meth:`.Operations.create_check_constraint`. In particular, the + following :class:`~sqlalchemy.schema.Column` parameters are + **ignored**: + + * :paramref:`~sqlalchemy.schema.Column.primary_key` - SQL databases + typically do not support an ALTER operation that can add + individual columns one at a time to an existing primary key + constraint, therefore it's less ambiguous to use the + :meth:`.Operations.create_primary_key` method, which assumes no + existing primary key constraint is present. + * :paramref:`~sqlalchemy.schema.Column.unique` - use the + :meth:`.Operations.create_unique_constraint` method + * :paramref:`~sqlalchemy.schema.Column.index` - use the + :meth:`.Operations.create_index` method + + + The provided :class:`~sqlalchemy.schema.Column` object may include a + :class:`~sqlalchemy.schema.ForeignKey` constraint directive, + referencing a remote table name. For this specific type of constraint, + Alembic will automatically emit a second ALTER statement in order to + add the single-column FOREIGN KEY constraint separately:: + + from alembic import op + from sqlalchemy import Column, INTEGER, ForeignKey + + op.add_column( + "organization", + Column("account_id", INTEGER, ForeignKey("accounts.id")), + ) + + The column argument passed to :meth:`.Operations.add_column` is a + :class:`~sqlalchemy.schema.Column` construct, used in the same way it's + used in SQLAlchemy. In particular, values or functions to be indicated + as producing the column's default value on the database side are + specified using the ``server_default`` parameter, and not ``default`` + which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the column add + op.add_column( + "account", + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + :param table_name: String name of the parent table. + :param column: a :class:`sqlalchemy.schema.Column` object + representing the new column. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def alter_column( + table_name: str, + column_name: str, + *, + nullable: Optional[bool] = None, + comment: Union[str, Literal[False], None] = False, + server_default: Any = False, + new_column_name: Optional[str] = None, + type_: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_type: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_server_default: Union[ + str, bool, Identity, Computed, None + ] = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + **kw: Any, +) -> None: + r"""Issue an "alter column" instruction using the + current migration context. + + Generally, only that aspect of the column which + is being changed, i.e. name, type, nullability, + default, needs to be specified. Multiple changes + can also be specified at once and the backend should + "do the right thing", emitting each change either + separately or together as the backend allows. + + MySQL has special requirements here, since MySQL + cannot ALTER a column without a full specification. + When producing MySQL-compatible migration files, + it is recommended that the ``existing_type``, + ``existing_server_default``, and ``existing_nullable`` + parameters be present, if not being altered. + + Type changes which are against the SQLAlchemy + "schema" types :class:`~sqlalchemy.types.Boolean` + and :class:`~sqlalchemy.types.Enum` may also + add or drop constraints which accompany those + types on backends that don't support them natively. + The ``existing_type`` argument is + used in this case to identify and remove a previous + constraint that was bound to the type object. + + :param table_name: string name of the target table. + :param column_name: string name of the target column, + as it exists before the operation begins. + :param nullable: Optional; specify ``True`` or ``False`` + to alter the column's nullability. + :param server_default: Optional; specify a string + SQL expression, :func:`~sqlalchemy.sql.expression.text`, + or :class:`~sqlalchemy.schema.DefaultClause` to indicate + an alteration to the column's default value. + Set to ``None`` to have the default removed. + :param comment: optional string text of a new comment to add to the + column. + :param new_column_name: Optional; specify a string name here to + indicate the new name within a column rename operation. + :param type\_: Optional; a :class:`~sqlalchemy.types.TypeEngine` + type object to specify a change to the column's type. + For SQLAlchemy types that also indicate a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, :class:`~sqlalchemy.types.Enum`), + the constraint is also generated. + :param autoincrement: set the ``AUTO_INCREMENT`` flag of the column; + currently understood by the MySQL dialect. + :param existing_type: Optional; a + :class:`~sqlalchemy.types.TypeEngine` + type object to specify the previous type. This + is required for all MySQL column alter operations that + don't otherwise specify a new type, as well as for + when nullability is being changed on a SQL Server + column. It is also used if the type is a so-called + SQLAlchemy "schema" type which may define a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, + :class:`~sqlalchemy.types.Enum`), + so that the constraint can be dropped. + :param existing_server_default: Optional; The existing + default value of the column. Required on MySQL if + an existing default is not being changed; else MySQL + removes the default. + :param existing_nullable: Optional; the existing nullability + of the column. Required on MySQL if the existing nullability + is not being changed; else MySQL sets this to NULL. + :param existing_autoincrement: Optional; the existing autoincrement + of the column. Used for MySQL's system of altering a column + that specifies ``AUTO_INCREMENT``. + :param existing_comment: string text of the existing comment on the + column to be maintained. Required on MySQL if the existing comment + on the column is not being changed. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param postgresql_using: String argument which will indicate a + SQL expression to render within the Postgresql-specific USING clause + within ALTER COLUMN. This string is taken directly as raw SQL which + must explicitly include any necessary quoting or escaping of tokens + within the expression. + + """ + +@contextmanager +def batch_alter_table( + table_name: str, + schema: Optional[str] = None, + recreate: Literal["auto", "always", "never"] = "auto", + partial_reordering: Optional[tuple] = None, + copy_from: Optional[Table] = None, + table_args: Tuple[Any, ...] = (), + table_kwargs: Mapping[str, Any] = immutabledict({}), + reflect_args: Tuple[Any, ...] = (), + reflect_kwargs: Mapping[str, Any] = immutabledict({}), + naming_convention: Optional[Dict[str, str]] = None, +) -> Iterator[BatchOperations]: + """Invoke a series of per-table migrations in batch. + + Batch mode allows a series of operations specific to a table + to be syntactically grouped together, and allows for alternate + modes of table migration, in particular the "recreate" style of + migration required by SQLite. + + "recreate" style is as follows: + + 1. A new table is created with the new specification, based on the + migration directives within the batch, using a temporary name. + + 2. the data copied from the existing table to the new table. + + 3. the existing table is dropped. + + 4. the new table is renamed to the existing table name. + + The directive by default will only use "recreate" style on the + SQLite backend, and only if directives are present which require + this form, e.g. anything other than ``add_column()``. The batch + operation on other backends will proceed using standard ALTER TABLE + operations. + + The method is used as a context manager, which returns an instance + of :class:`.BatchOperations`; this object is the same as + :class:`.Operations` except that table names and schema names + are omitted. E.g.:: + + with op.batch_alter_table("some_table") as batch_op: + batch_op.add_column(Column("foo", Integer)) + batch_op.drop_column("bar") + + The operations within the context manager are invoked at once + when the context is ended. When run against SQLite, if the + migrations include operations not supported by SQLite's ALTER TABLE, + the entire table will be copied to a new one with the new + specification, moving all data across as well. + + The copy operation by default uses reflection to retrieve the current + structure of the table, and therefore :meth:`.batch_alter_table` + in this mode requires that the migration is run in "online" mode. + The ``copy_from`` parameter may be passed which refers to an existing + :class:`.Table` object, which will bypass this reflection step. + + .. note:: The table copy operation will currently not copy + CHECK constraints, and may not copy UNIQUE constraints that are + unnamed, as is possible on SQLite. See the section + :ref:`sqlite_batch_constraints` for workarounds. + + :param table_name: name of table + :param schema: optional schema name. + :param recreate: under what circumstances the table should be + recreated. At its default of ``"auto"``, the SQLite dialect will + recreate the table if any operations other than ``add_column()``, + ``create_index()``, or ``drop_index()`` are + present. Other options include ``"always"`` and ``"never"``. + :param copy_from: optional :class:`~sqlalchemy.schema.Table` object + that will act as the structure of the table being copied. If omitted, + table reflection is used to retrieve the structure of the table. + + .. seealso:: + + :ref:`batch_offline_mode` + + :paramref:`~.Operations.batch_alter_table.reflect_args` + + :paramref:`~.Operations.batch_alter_table.reflect_kwargs` + + :param reflect_args: a sequence of additional positional arguments that + will be applied to the table structure being reflected / copied; + this may be used to pass column and constraint overrides to the + table that will be reflected, in lieu of passing the whole + :class:`~sqlalchemy.schema.Table` using + :paramref:`~.Operations.batch_alter_table.copy_from`. + :param reflect_kwargs: a dictionary of additional keyword arguments + that will be applied to the table structure being copied; this may be + used to pass additional table and reflection options to the table that + will be reflected, in lieu of passing the whole + :class:`~sqlalchemy.schema.Table` using + :paramref:`~.Operations.batch_alter_table.copy_from`. + :param table_args: a sequence of additional positional arguments that + will be applied to the new :class:`~sqlalchemy.schema.Table` when + created, in addition to those copied from the source table. + This may be used to provide additional constraints such as CHECK + constraints that may not be reflected. + :param table_kwargs: a dictionary of additional keyword arguments + that will be applied to the new :class:`~sqlalchemy.schema.Table` + when created, in addition to those copied from the source table. + This may be used to provide for additional table options that may + not be reflected. + :param naming_convention: a naming convention dictionary of the form + described at :ref:`autogen_naming_conventions` which will be applied + to the :class:`~sqlalchemy.schema.MetaData` during the reflection + process. This is typically required if one wants to drop SQLite + constraints, as these constraints will not have names when + reflected on this backend. Requires SQLAlchemy **0.9.4** or greater. + + .. seealso:: + + :ref:`dropping_sqlite_foreign_keys` + + :param partial_reordering: a list of tuples, each suggesting a desired + ordering of two or more columns in the newly created table. Requires + that :paramref:`.batch_alter_table.recreate` is set to ``"always"``. + Examples, given a table with columns "a", "b", "c", and "d": + + Specify the order of all columns:: + + with op.batch_alter_table( + "some_table", + recreate="always", + partial_reordering=[("c", "d", "a", "b")], + ) as batch_op: + pass + + Ensure "d" appears before "c", and "b", appears before "a":: + + with op.batch_alter_table( + "some_table", + recreate="always", + partial_reordering=[("d", "c"), ("b", "a")], + ) as batch_op: + pass + + The ordering of columns not included in the partial_reordering + set is undefined. Therefore it is best to specify the complete + ordering of all columns for best results. + + .. note:: batch mode requires SQLAlchemy 0.8 or above. + + .. seealso:: + + :ref:`batch_migrations` + + """ + +def bulk_insert( + table: Union[Table, TableClause], + rows: List[dict], + *, + multiinsert: bool = True, +) -> None: + """Issue a "bulk insert" operation using the current + migration context. + + This provides a means of representing an INSERT of multiple rows + which works equally well in the context of executing on a live + connection as well as that of generating a SQL script. In the + case of a SQL script, the values are rendered inline into the + statement. + + e.g.:: + + from alembic import op + from datetime import date + from sqlalchemy.sql import table, column + from sqlalchemy import String, Integer, Date + + # Create an ad-hoc table to use for the insert statement. + accounts_table = table( + "account", + column("id", Integer), + column("name", String), + column("create_date", Date), + ) + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": date(2010, 10, 5), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": date(2007, 5, 27), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": date(2008, 8, 15), + }, + ], + ) + + When using --sql mode, some datatypes may not render inline + automatically, such as dates and other special types. When this + issue is present, :meth:`.Operations.inline_literal` may be used:: + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": op.inline_literal("2010-10-05"), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": op.inline_literal("2007-05-27"), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": op.inline_literal("2008-08-15"), + }, + ], + multiinsert=False, + ) + + When using :meth:`.Operations.inline_literal` in conjunction with + :meth:`.Operations.bulk_insert`, in order for the statement to work + in "online" (e.g. non --sql) mode, the + :paramref:`~.Operations.bulk_insert.multiinsert` + flag should be set to ``False``, which will have the effect of + individual INSERT statements being emitted to the database, each + with a distinct VALUES clause, so that the "inline" values can + still be rendered, rather than attempting to pass the values + as bound parameters. + + :param table: a table object which represents the target of the INSERT. + + :param rows: a list of dictionaries indicating rows. + + :param multiinsert: when at its default of True and --sql mode is not + enabled, the INSERT statement will be executed using + "executemany()" style, where all elements in the list of + dictionaries are passed as bound parameters in a single + list. Setting this to False results in individual INSERT + statements being emitted per parameter set, and is needed + in those cases where non-literal values are present in the + parameter sets. + + """ + +def create_check_constraint( + constraint_name: Optional[str], + table_name: str, + condition: Union[str, ColumnElement[bool], TextClause], + *, + schema: Optional[str] = None, + **kw: Any, +) -> None: + """Issue a "create check constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + from sqlalchemy.sql import column, func + + op.create_check_constraint( + "ck_user_name_len", + "user", + func.len(column("name")) > 5, + ) + + CHECK constraints are usually against a SQL expression, so ad-hoc + table metadata is usually needed. The function will convert the given + arguments into a :class:`sqlalchemy.schema.CheckConstraint` bound + to an anonymous table in order to emit the CREATE statement. + + :param name: Name of the check constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param condition: SQL expression that's the condition of the + constraint. Can be a string or SQLAlchemy expression language + structure. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def create_exclude_constraint( + constraint_name: str, table_name: str, *elements: Any, **kw: Any +) -> Optional[Table]: + """Issue an alter to create an EXCLUDE constraint using the + current migration context. + + .. note:: This method is Postgresql specific, and additionally + requires at least SQLAlchemy 1.0. + + e.g.:: + + from alembic import op + + op.create_exclude_constraint( + "user_excl", + "user", + ("period", "&&"), + ("group", "="), + where=("group != 'some group'"), + ) + + Note that the expressions work the same way as that of + the ``ExcludeConstraint`` object itself; if plain strings are + passed, quoting rules must be applied manually. + + :param name: Name of the constraint. + :param table_name: String name of the source table. + :param elements: exclude conditions. + :param where: SQL expression or SQL string with optional WHERE + clause. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. + + """ + +def create_foreign_key( + constraint_name: Optional[str], + source_table: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + *, + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + source_schema: Optional[str] = None, + referent_schema: Optional[str] = None, + **dialect_kw: Any, +) -> None: + """Issue a "create foreign key" instruction using the + current migration context. + + e.g.:: + + from alembic import op + + op.create_foreign_key( + "fk_user_address", + "address", + "user", + ["user_id"], + ["id"], + ) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.ForeignKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the foreign key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param source_table: String name of the source table. + :param referent_table: String name of the destination table. + :param local_cols: a list of string column names in the + source table. + :param remote_cols: a list of string column names in the + remote table. + :param onupdate: Optional string. If set, emit ON UPDATE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param ondelete: Optional string. If set, emit ON DELETE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param deferrable: optional bool. If set, emit DEFERRABLE or NOT + DEFERRABLE when issuing DDL for this constraint. + :param source_schema: Optional schema name of the source table. + :param referent_schema: Optional schema name of the destination table. + + """ + +def create_index( + index_name: Optional[str], + table_name: str, + columns: Sequence[Union[str, TextClause, Function[Any]]], + *, + schema: Optional[str] = None, + unique: bool = False, + if_not_exists: Optional[bool] = None, + **kw: Any, +) -> None: + r"""Issue a "create index" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_index("ik_test", "t1", ["foo", "bar"]) + + Functional indexes can be produced by using the + :func:`sqlalchemy.sql.expression.text` construct:: + + from alembic import op + from sqlalchemy import text + + op.create_index("ik_test", "t1", [text("lower(foo)")]) + + :param index_name: name of the index. + :param table_name: name of the owning table. + :param columns: a list consisting of string column names and/or + :func:`~sqlalchemy.sql.expression.text` constructs. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param unique: If True, create a unique index. + + :param quote: Force quoting of this column's name on or off, + corresponding to ``True`` or ``False``. When left at its default + of ``None``, the column identifier will be quoted according to + whether the name is case sensitive (identifiers with at least one + upper case character are treated as case sensitive), or if it's a + reserved word. This flag is only needed to force quoting of a + reserved word which is not known by the SQLAlchemy dialect. + + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ + +def create_primary_key( + constraint_name: Optional[str], + table_name: str, + columns: List[str], + *, + schema: Optional[str] = None, +) -> None: + """Issue a "create primary key" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_primary_key("pk_my_table", "my_table", ["id", "version"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.PrimaryKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the primary key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions` + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the target table. + :param columns: a list of string column names to be applied to the + primary key constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def create_table(table_name: str, *columns: SchemaItem, **kw: Any) -> Table: + r"""Issue a "create table" instruction using the current migration + context. + + This directive receives an argument list similar to that of the + traditional :class:`sqlalchemy.schema.Table` construct, but without the + metadata:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + Note that :meth:`.create_table` accepts + :class:`~sqlalchemy.schema.Column` + constructs directly from the SQLAlchemy library. In particular, + default values to be created on the database side are + specified using the ``server_default`` parameter, and not + ``default`` which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the "timestamp" column + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + The function also returns a newly created + :class:`~sqlalchemy.schema.Table` object, corresponding to the table + specification given, which is suitable for + immediate SQL operations, in particular + :meth:`.Operations.bulk_insert`:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + account_table = op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + op.bulk_insert( + account_table, + [ + {"name": "A1", "description": "account 1"}, + {"name": "A2", "description": "account 2"}, + ], + ) + + :param table_name: Name of the table + :param \*columns: collection of :class:`~sqlalchemy.schema.Column` + objects within + the table, as well as optional :class:`~sqlalchemy.schema.Constraint` + objects + and :class:`~.sqlalchemy.schema.Index` objects. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + :return: the :class:`~sqlalchemy.schema.Table` object corresponding + to the parameters given. + + """ + +def create_table_comment( + table_name: str, + comment: Optional[str], + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, +) -> None: + """Emit a COMMENT ON operation to set the comment for a table. + + :param table_name: string name of the target table. + :param comment: string value of the comment being registered against + the specified table. + :param existing_comment: String value of a comment + already registered on the specified table, used within autogenerate + so that the operation is reversible, but not required for direct + use. + + .. seealso:: + + :meth:`.Operations.drop_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ + +def create_unique_constraint( + constraint_name: Optional[str], + table_name: str, + columns: Sequence[str], + *, + schema: Optional[str] = None, + **kw: Any, +) -> Any: + """Issue a "create unique constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + op.create_unique_constraint("uq_user_name", "user", ["name"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.UniqueConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param name: Name of the unique constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param columns: a list of string column names in the + source table. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def drop_column( + table_name: str, + column_name: str, + *, + schema: Optional[str] = None, + **kw: Any, +) -> None: + """Issue a "drop column" instruction using the current + migration context. + + e.g.:: + + drop_column("organization", "account_id") + + :param table_name: name of table + :param column_name: name of column + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param mssql_drop_check: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the CHECK constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.check_constraints, + then exec's a separate DROP CONSTRAINT for that constraint. + :param mssql_drop_default: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the DEFAULT constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.default_constraints, + then exec's a separate DROP CONSTRAINT for that default. + :param mssql_drop_foreign_key: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop a single FOREIGN KEY constraint on the column using a + SQL-script-compatible + block that selects into a @variable from + sys.foreign_keys/sys.foreign_key_columns, + then exec's a separate DROP CONSTRAINT for that default. Only + works if the column has exactly one FK constraint which refers to + it, at the moment. + + """ + +def drop_constraint( + constraint_name: str, + table_name: str, + type_: Optional[str] = None, + *, + schema: Optional[str] = None, +) -> None: + r"""Drop a constraint of the given name, typically via DROP CONSTRAINT. + + :param constraint_name: name of the constraint. + :param table_name: table name. + :param type\_: optional, required on MySQL. can be + 'foreignkey', 'primary', 'unique', or 'check'. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def drop_index( + index_name: str, + table_name: Optional[str] = None, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + **kw: Any, +) -> None: + r"""Issue a "drop index" instruction using the current + migration context. + + e.g.:: + + drop_index("accounts") + + :param index_name: name of the index. + :param table_name: name of the owning table. Some + backends such as Microsoft SQL Server require this. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + :param if_exists: If True, adds IF EXISTS operator when + dropping the index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ + +def drop_table( + table_name: str, *, schema: Optional[str] = None, **kw: Any +) -> None: + r"""Issue a "drop table" instruction using the current + migration context. + + + e.g.:: + + drop_table("accounts") + + :param table_name: Name of the table + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + """ + +def drop_table_comment( + table_name: str, + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, +) -> None: + """Issue a "drop table comment" operation to + remove an existing comment set on a table. + + :param table_name: string name of the target table. + :param existing_comment: An optional string value of a comment already + registered on the specified table. + + .. seealso:: + + :meth:`.Operations.create_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ + +def execute( + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, +) -> None: + r"""Execute the given SQL using the current migration context. + + The given SQL can be a plain string, e.g.:: + + op.execute("INSERT INTO table (foo) VALUES ('some value')") + + Or it can be any kind of Core SQL Expression construct, such as + below where we use an update construct:: + + from sqlalchemy.sql import table, column + from sqlalchemy import String + from alembic import op + + account = table("account", column("name", String)) + op.execute( + account.update() + .where(account.c.name == op.inline_literal("account 1")) + .values({"name": op.inline_literal("account 2")}) + ) + + Above, we made use of the SQLAlchemy + :func:`sqlalchemy.sql.expression.table` and + :func:`sqlalchemy.sql.expression.column` constructs to make a brief, + ad-hoc table construct just for our UPDATE statement. A full + :class:`~sqlalchemy.schema.Table` construct of course works perfectly + fine as well, though note it's a recommended practice to at least + ensure the definition of a table is self-contained within the migration + script, rather than imported from a module that may break compatibility + with older migrations. + + In a SQL script context, the statement is emitted directly to the + output stream. There is *no* return result, however, as this + function is oriented towards generating a change script + that can run in "offline" mode. Additionally, parameterized + statements are discouraged here, as they *will not work* in offline + mode. Above, we use :meth:`.inline_literal` where parameters are + to be used. + + For full interaction with a connected database where parameters can + also be used normally, use the "bind" available from the context:: + + from alembic import op + + connection = op.get_bind() + + connection.execute( + account.update() + .where(account.c.name == "account 1") + .values({"name": "account 2"}) + ) + + Additionally, when passing the statement as a plain string, it is first + coerced into a :func:`sqlalchemy.sql.expression.text` construct + before being passed along. In the less likely case that the + literal SQL string contains a colon, it must be escaped with a + backslash, as:: + + op.execute(r"INSERT INTO table (foo) VALUES ('\:colon_value')") + + + :param sqltext: Any legal SQLAlchemy expression, including: + + * a string + * a :func:`sqlalchemy.sql.expression.text` construct. + * a :func:`sqlalchemy.sql.expression.insert` construct. + * a :func:`sqlalchemy.sql.expression.update` construct. + * a :func:`sqlalchemy.sql.expression.delete` construct. + * Any "executable" described in SQLAlchemy Core documentation, + noting that no result set is returned. + + .. note:: when passing a plain string, the statement is coerced into + a :func:`sqlalchemy.sql.expression.text` construct. This construct + considers symbols with colons, e.g. ``:foo`` to be bound parameters. + To avoid this, ensure that colon symbols are escaped, e.g. + ``\:foo``. + + :param execution_options: Optional dictionary of + execution options, will be passed to + :meth:`sqlalchemy.engine.Connection.execution_options`. + """ + +def f(name: str) -> conv: + """Indicate a string name that has already had a naming convention + applied to it. + + This feature combines with the SQLAlchemy ``naming_convention`` feature + to disambiguate constraint names that have already had naming + conventions applied to them, versus those that have not. This is + necessary in the case that the ``"%(constraint_name)s"`` token + is used within a naming convention, so that it can be identified + that this particular name should remain fixed. + + If the :meth:`.Operations.f` is used on a constraint, the naming + convention will not take effect:: + + op.add_column("t", "x", Boolean(name=op.f("ck_bool_t_x"))) + + Above, the CHECK constraint generated will have the name + ``ck_bool_t_x`` regardless of whether or not a naming convention is + in use. + + Alternatively, if a naming convention is in use, and 'f' is not used, + names will be converted along conventions. If the ``target_metadata`` + contains the naming convention + ``{"ck": "ck_bool_%(table_name)s_%(constraint_name)s"}``, then the + output of the following: + + op.add_column("t", "x", Boolean(name="x")) + + will be:: + + CONSTRAINT ck_bool_t_x CHECK (x in (1, 0))) + + The function is rendered in the output of autogenerate when + a particular constraint name is already converted. + + """ + +def get_bind() -> Connection: + """Return the current 'bind'. + + Under normal circumstances, this is the + :class:`~sqlalchemy.engine.Connection` currently being used + to emit SQL to the database. + + In a SQL script context, this value is ``None``. [TODO: verify this] + + """ + +def get_context() -> MigrationContext: + """Return the :class:`.MigrationContext` object that's + currently in use. + + """ + +def implementation_for(op_cls: Any) -> Callable[..., Any]: + """Register an implementation for a given :class:`.MigrateOperation`. + + This is part of the operation extensibility API. + + .. seealso:: + + :ref:`operation_plugins` - example of use + + """ + +def inline_literal( + value: Union[str, int], type_: Optional[TypeEngine] = None +) -> _literal_bindparam: + r"""Produce an 'inline literal' expression, suitable for + using in an INSERT, UPDATE, or DELETE statement. + + When using Alembic in "offline" mode, CRUD operations + aren't compatible with SQLAlchemy's default behavior surrounding + literal values, + which is that they are converted into bound values and passed + separately into the ``execute()`` method of the DBAPI cursor. + An offline SQL + script needs to have these rendered inline. While it should + always be noted that inline literal values are an **enormous** + security hole in an application that handles untrusted input, + a schema migration is not run in this context, so + literals are safe to render inline, with the caveat that + advanced types like dates may not be supported directly + by SQLAlchemy. + + See :meth:`.Operations.execute` for an example usage of + :meth:`.Operations.inline_literal`. + + The environment can also be configured to attempt to render + "literal" values inline automatically, for those simple types + that are supported by the dialect; see + :paramref:`.EnvironmentContext.configure.literal_binds` for this + more recently added feature. + + :param value: The value to render. Strings, integers, and simple + numerics should be supported. Other types like boolean, + dates, etc. may or may not be supported yet by various + backends. + :param type\_: optional - a :class:`sqlalchemy.types.TypeEngine` + subclass stating the type of this value. In SQLAlchemy + expressions, this is usually derived automatically + from the Python type of the value itself, as well as + based on the context in which the value is used. + + .. seealso:: + + :paramref:`.EnvironmentContext.configure.literal_binds` + + """ + +def invoke(operation: MigrateOperation) -> Any: + """Given a :class:`.MigrateOperation`, invoke it in terms of + this :class:`.Operations` instance. + + """ + +def register_operation( + name: str, sourcename: Optional[str] = None +) -> Callable[[_T], _T]: + """Register a new operation for this class. + + This method is normally used to add new operations + to the :class:`.Operations` class, and possibly the + :class:`.BatchOperations` class as well. All Alembic migration + operations are implemented via this system, however the system + is also available as a public API to facilitate adding custom + operations. + + .. seealso:: + + :ref:`operation_plugins` + + + """ + +def rename_table( + old_table_name: str, new_table_name: str, *, schema: Optional[str] = None +) -> None: + """Emit an ALTER TABLE to rename a table. + + :param old_table_name: old name. + :param new_table_name: new name. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + +def run_async( + async_function: Callable[..., Awaitable[_T]], *args: Any, **kw_args: Any +) -> _T: + """Invoke the given asynchronous callable, passing an asynchronous + :class:`~sqlalchemy.ext.asyncio.AsyncConnection` as the first + argument. + + This method allows calling async functions from within the + synchronous ``upgrade()`` or ``downgrade()`` alembic migration + method. + + The async connection passed to the callable shares the same + transaction as the connection running in the migration context. + + Any additional arg or kw_arg passed to this function are passed + to the provided async function. + + .. versionadded: 1.11 + + .. note:: + + This method can be called only when alembic is called using + an async dialect. + """ diff --git a/venv/Lib/site-packages/alembic/operations/__init__.py b/venv/Lib/site-packages/alembic/operations/__init__.py new file mode 100644 index 0000000..26197cb --- /dev/null +++ b/venv/Lib/site-packages/alembic/operations/__init__.py @@ -0,0 +1,15 @@ +from . import toimpl +from .base import AbstractOperations +from .base import BatchOperations +from .base import Operations +from .ops import MigrateOperation +from .ops import MigrationScript + + +__all__ = [ + "AbstractOperations", + "Operations", + "BatchOperations", + "MigrateOperation", + "MigrationScript", +] diff --git a/venv/Lib/site-packages/alembic/operations/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/operations/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e7b2fa08b25e37d9cfa7504f025d2ae4803d8f3 GIT binary patch literal 470 zcmY+B%}N6?6or%d=}f0BiueF-yUGki&Nm=O% z_sTR5+><5u)#k`5j=Iw)wT8Gnm|FTLHfCq2kZ$WuOP%Lyc`?79-_SSB z-InfTv!joyq)vHx+45=&0Y|x(b*ZYEIlOzum}-<~?5h3f^1IrIcP+zTA$JZk#)p+e Hc)xxD@H2KI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/operations/__pycache__/base.cpython-37.pyc b/venv/Lib/site-packages/alembic/operations/__pycache__/base.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9a9b238a1e9f5c79060e9cd2b360e03ed4efa24 GIT binary patch literal 70349 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/operations/__pycache__/batch.cpython-37.pyc b/venv/Lib/site-packages/alembic/operations/__pycache__/batch.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..006fbcfbe604cfdd61da58a2208d7ee168a874cc GIT binary patch literal 19093 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 mc;(E?jhDAx`L{FIE`<%bQ)9cV4dI@#G#39Vk!$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/operations/__pycache__/ops.cpython-37.pyc b/venv/Lib/site-packages/alembic/operations/__pycache__/ops.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c28ec138f8f5fa34e17d129ee40a4ff9db18762 GIT binary patch literal 83624 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

H9xIMiy7D0Zw%y}mCS7N7-7qOas z#F>5I4Ls?0Vfa)rr!na(Dx^~Mz$m>PC`bI}E%QVEPP$T^O9WX!9;PoNs``3wD|mQ! zfXY2Ow9zbz4@J)*ed!?iV5pv_gXvM}G|5EfR3=LB`b4+E-w^HLi2sd%&XeM>s9?`2 zhL7;Jw;jp%aMN#5IjQOuZ7ldV=4#au0k>)8m85_Z!)u)+cXuk7)loH@dchzzNDN6f zPjVX_7?Da#rwJ8<6`D+8IqF1`xrJ&rXJK*=nz5qZoVbo~X6bE@i#h(QrM)?nPVK;d zDEyw_RBun-5x63EY#K?qor_whrgEt+)|jBw!gPd6nsgSYuzMq}9-P{N%7L@9Gq3J; zFx7D$bY?ScR@0O%Dd#xVseHqX;xrDiiKOUtno9XJjGzXEnPX4;xV*(f({98^G*uEY z>CsDDQo4bcRQw%rll}k+*CA{ZUr-#rsO)U30@=J#5%UG^6bd0;1| Iu None: + """Construct a new :class:`.Operations` + + :param migration_context: a :class:`.MigrationContext` + instance. + + """ + self.migration_context = migration_context + if impl is None: + self.impl = migration_context.impl + else: + self.impl = impl + + self.schema_obj = schemaobj.SchemaObjects(migration_context) + + @classmethod + def register_operation( + cls, name: str, sourcename: Optional[str] = None + ) -> Callable[[_T], _T]: + """Register a new operation for this class. + + This method is normally used to add new operations + to the :class:`.Operations` class, and possibly the + :class:`.BatchOperations` class as well. All Alembic migration + operations are implemented via this system, however the system + is also available as a public API to facilitate adding custom + operations. + + .. seealso:: + + :ref:`operation_plugins` + + + """ + + def register(op_cls): + if sourcename is None: + fn = getattr(op_cls, name) + source_name = fn.__name__ + else: + fn = getattr(op_cls, sourcename) + source_name = fn.__name__ + + spec = inspect_getfullargspec(fn) + + name_args = spec[0] + assert name_args[0:2] == ["cls", "operations"] + + name_args[0:2] = ["self"] + + args = inspect_formatargspec( + *spec, formatannotation=formatannotation_fwdref + ) + num_defaults = len(spec[3]) if spec[3] else 0 + if num_defaults: + defaulted_vals = name_args[0 - num_defaults :] + else: + defaulted_vals = () + + defaulted_vals += tuple(spec[4]) + # here, we are using formatargspec in a different way in order + # to get a string that will re-apply incoming arguments to a new + # function call + + apply_kw = inspect_formatargspec( + name_args + spec[4], + spec[1], + spec[2], + defaulted_vals, + formatvalue=lambda x: "=" + x, + formatannotation=formatannotation_fwdref, + ) + + args = re.sub( + r'[_]?ForwardRef\(([\'"].+?[\'"])\)', + lambda m: m.group(1), + args, + ) + + func_text = textwrap.dedent( + """\ + def %(name)s%(args)s: + %(doc)r + return op_cls.%(source_name)s%(apply_kw)s + """ + % { + "name": name, + "source_name": source_name, + "args": args, + "apply_kw": apply_kw, + "doc": fn.__doc__, + } + ) + + globals_ = dict(globals()) + globals_.update({"op_cls": op_cls}) + lcl = {} + + exec(func_text, globals_, lcl) + setattr(cls, name, lcl[name]) + fn.__func__.__doc__ = ( + "This method is proxied on " + "the :class:`.%s` class, via the :meth:`.%s.%s` method." + % (cls.__name__, cls.__name__, name) + ) + if hasattr(fn, "_legacy_translations"): + lcl[name]._legacy_translations = fn._legacy_translations + return op_cls + + return register + + @classmethod + def implementation_for(cls, op_cls: Any) -> Callable[..., Any]: + """Register an implementation for a given :class:`.MigrateOperation`. + + This is part of the operation extensibility API. + + .. seealso:: + + :ref:`operation_plugins` - example of use + + """ + + def decorate(fn): + cls._to_impl.dispatch_for(op_cls)(fn) + return fn + + return decorate + + @classmethod + @contextmanager + def context( + cls, migration_context: MigrationContext + ) -> Iterator[Operations]: + op = Operations(migration_context) + op._install_proxy() + yield op + op._remove_proxy() + + @contextmanager + def batch_alter_table( + self, + table_name: str, + schema: Optional[str] = None, + recreate: Literal["auto", "always", "never"] = "auto", + partial_reordering: Optional[tuple] = None, + copy_from: Optional[Table] = None, + table_args: Tuple[Any, ...] = (), + table_kwargs: Mapping[str, Any] = util.immutabledict(), + reflect_args: Tuple[Any, ...] = (), + reflect_kwargs: Mapping[str, Any] = util.immutabledict(), + naming_convention: Optional[Dict[str, str]] = None, + ) -> Iterator[BatchOperations]: + """Invoke a series of per-table migrations in batch. + + Batch mode allows a series of operations specific to a table + to be syntactically grouped together, and allows for alternate + modes of table migration, in particular the "recreate" style of + migration required by SQLite. + + "recreate" style is as follows: + + 1. A new table is created with the new specification, based on the + migration directives within the batch, using a temporary name. + + 2. the data copied from the existing table to the new table. + + 3. the existing table is dropped. + + 4. the new table is renamed to the existing table name. + + The directive by default will only use "recreate" style on the + SQLite backend, and only if directives are present which require + this form, e.g. anything other than ``add_column()``. The batch + operation on other backends will proceed using standard ALTER TABLE + operations. + + The method is used as a context manager, which returns an instance + of :class:`.BatchOperations`; this object is the same as + :class:`.Operations` except that table names and schema names + are omitted. E.g.:: + + with op.batch_alter_table("some_table") as batch_op: + batch_op.add_column(Column("foo", Integer)) + batch_op.drop_column("bar") + + The operations within the context manager are invoked at once + when the context is ended. When run against SQLite, if the + migrations include operations not supported by SQLite's ALTER TABLE, + the entire table will be copied to a new one with the new + specification, moving all data across as well. + + The copy operation by default uses reflection to retrieve the current + structure of the table, and therefore :meth:`.batch_alter_table` + in this mode requires that the migration is run in "online" mode. + The ``copy_from`` parameter may be passed which refers to an existing + :class:`.Table` object, which will bypass this reflection step. + + .. note:: The table copy operation will currently not copy + CHECK constraints, and may not copy UNIQUE constraints that are + unnamed, as is possible on SQLite. See the section + :ref:`sqlite_batch_constraints` for workarounds. + + :param table_name: name of table + :param schema: optional schema name. + :param recreate: under what circumstances the table should be + recreated. At its default of ``"auto"``, the SQLite dialect will + recreate the table if any operations other than ``add_column()``, + ``create_index()``, or ``drop_index()`` are + present. Other options include ``"always"`` and ``"never"``. + :param copy_from: optional :class:`~sqlalchemy.schema.Table` object + that will act as the structure of the table being copied. If omitted, + table reflection is used to retrieve the structure of the table. + + .. seealso:: + + :ref:`batch_offline_mode` + + :paramref:`~.Operations.batch_alter_table.reflect_args` + + :paramref:`~.Operations.batch_alter_table.reflect_kwargs` + + :param reflect_args: a sequence of additional positional arguments that + will be applied to the table structure being reflected / copied; + this may be used to pass column and constraint overrides to the + table that will be reflected, in lieu of passing the whole + :class:`~sqlalchemy.schema.Table` using + :paramref:`~.Operations.batch_alter_table.copy_from`. + :param reflect_kwargs: a dictionary of additional keyword arguments + that will be applied to the table structure being copied; this may be + used to pass additional table and reflection options to the table that + will be reflected, in lieu of passing the whole + :class:`~sqlalchemy.schema.Table` using + :paramref:`~.Operations.batch_alter_table.copy_from`. + :param table_args: a sequence of additional positional arguments that + will be applied to the new :class:`~sqlalchemy.schema.Table` when + created, in addition to those copied from the source table. + This may be used to provide additional constraints such as CHECK + constraints that may not be reflected. + :param table_kwargs: a dictionary of additional keyword arguments + that will be applied to the new :class:`~sqlalchemy.schema.Table` + when created, in addition to those copied from the source table. + This may be used to provide for additional table options that may + not be reflected. + :param naming_convention: a naming convention dictionary of the form + described at :ref:`autogen_naming_conventions` which will be applied + to the :class:`~sqlalchemy.schema.MetaData` during the reflection + process. This is typically required if one wants to drop SQLite + constraints, as these constraints will not have names when + reflected on this backend. Requires SQLAlchemy **0.9.4** or greater. + + .. seealso:: + + :ref:`dropping_sqlite_foreign_keys` + + :param partial_reordering: a list of tuples, each suggesting a desired + ordering of two or more columns in the newly created table. Requires + that :paramref:`.batch_alter_table.recreate` is set to ``"always"``. + Examples, given a table with columns "a", "b", "c", and "d": + + Specify the order of all columns:: + + with op.batch_alter_table( + "some_table", + recreate="always", + partial_reordering=[("c", "d", "a", "b")], + ) as batch_op: + pass + + Ensure "d" appears before "c", and "b", appears before "a":: + + with op.batch_alter_table( + "some_table", + recreate="always", + partial_reordering=[("d", "c"), ("b", "a")], + ) as batch_op: + pass + + The ordering of columns not included in the partial_reordering + set is undefined. Therefore it is best to specify the complete + ordering of all columns for best results. + + .. note:: batch mode requires SQLAlchemy 0.8 or above. + + .. seealso:: + + :ref:`batch_migrations` + + """ + impl = batch.BatchOperationsImpl( + self, + table_name, + schema, + recreate, + copy_from, + table_args, + table_kwargs, + reflect_args, + reflect_kwargs, + naming_convention, + partial_reordering, + ) + batch_op = BatchOperations(self.migration_context, impl=impl) + yield batch_op + impl.flush() + + def get_context(self) -> MigrationContext: + """Return the :class:`.MigrationContext` object that's + currently in use. + + """ + + return self.migration_context + + def invoke(self, operation: MigrateOperation) -> Any: + """Given a :class:`.MigrateOperation`, invoke it in terms of + this :class:`.Operations` instance. + + """ + fn = self._to_impl.dispatch( + operation, self.migration_context.impl.__dialect__ + ) + return fn(self, operation) + + def f(self, name: str) -> conv: + """Indicate a string name that has already had a naming convention + applied to it. + + This feature combines with the SQLAlchemy ``naming_convention`` feature + to disambiguate constraint names that have already had naming + conventions applied to them, versus those that have not. This is + necessary in the case that the ``"%(constraint_name)s"`` token + is used within a naming convention, so that it can be identified + that this particular name should remain fixed. + + If the :meth:`.Operations.f` is used on a constraint, the naming + convention will not take effect:: + + op.add_column("t", "x", Boolean(name=op.f("ck_bool_t_x"))) + + Above, the CHECK constraint generated will have the name + ``ck_bool_t_x`` regardless of whether or not a naming convention is + in use. + + Alternatively, if a naming convention is in use, and 'f' is not used, + names will be converted along conventions. If the ``target_metadata`` + contains the naming convention + ``{"ck": "ck_bool_%(table_name)s_%(constraint_name)s"}``, then the + output of the following: + + op.add_column("t", "x", Boolean(name="x")) + + will be:: + + CONSTRAINT ck_bool_t_x CHECK (x in (1, 0))) + + The function is rendered in the output of autogenerate when + a particular constraint name is already converted. + + """ + return conv(name) + + def inline_literal( + self, value: Union[str, int], type_: Optional[TypeEngine[Any]] = None + ) -> _literal_bindparam: + r"""Produce an 'inline literal' expression, suitable for + using in an INSERT, UPDATE, or DELETE statement. + + When using Alembic in "offline" mode, CRUD operations + aren't compatible with SQLAlchemy's default behavior surrounding + literal values, + which is that they are converted into bound values and passed + separately into the ``execute()`` method of the DBAPI cursor. + An offline SQL + script needs to have these rendered inline. While it should + always be noted that inline literal values are an **enormous** + security hole in an application that handles untrusted input, + a schema migration is not run in this context, so + literals are safe to render inline, with the caveat that + advanced types like dates may not be supported directly + by SQLAlchemy. + + See :meth:`.Operations.execute` for an example usage of + :meth:`.Operations.inline_literal`. + + The environment can also be configured to attempt to render + "literal" values inline automatically, for those simple types + that are supported by the dialect; see + :paramref:`.EnvironmentContext.configure.literal_binds` for this + more recently added feature. + + :param value: The value to render. Strings, integers, and simple + numerics should be supported. Other types like boolean, + dates, etc. may or may not be supported yet by various + backends. + :param type\_: optional - a :class:`sqlalchemy.types.TypeEngine` + subclass stating the type of this value. In SQLAlchemy + expressions, this is usually derived automatically + from the Python type of the value itself, as well as + based on the context in which the value is used. + + .. seealso:: + + :paramref:`.EnvironmentContext.configure.literal_binds` + + """ + return sqla_compat._literal_bindparam(None, value, type_=type_) + + def get_bind(self) -> Connection: + """Return the current 'bind'. + + Under normal circumstances, this is the + :class:`~sqlalchemy.engine.Connection` currently being used + to emit SQL to the database. + + In a SQL script context, this value is ``None``. [TODO: verify this] + + """ + return self.migration_context.impl.bind # type: ignore[return-value] + + def run_async( + self, + async_function: Callable[..., Awaitable[_T]], + *args: Any, + **kw_args: Any, + ) -> _T: + """Invoke the given asynchronous callable, passing an asynchronous + :class:`~sqlalchemy.ext.asyncio.AsyncConnection` as the first + argument. + + This method allows calling async functions from within the + synchronous ``upgrade()`` or ``downgrade()`` alembic migration + method. + + The async connection passed to the callable shares the same + transaction as the connection running in the migration context. + + Any additional arg or kw_arg passed to this function are passed + to the provided async function. + + .. versionadded: 1.11 + + .. note:: + + This method can be called only when alembic is called using + an async dialect. + """ + if not sqla_compat.sqla_14_18: + raise NotImplementedError("SQLAlchemy 1.4.18+ required") + sync_conn = self.get_bind() + if sync_conn is None: + raise NotImplementedError("Cannot call run_async in SQL mode") + if not sync_conn.dialect.is_async: + raise ValueError("Cannot call run_async with a sync engine") + from sqlalchemy.ext.asyncio import AsyncConnection + from sqlalchemy.util import await_only + + async_conn = AsyncConnection._retrieve_proxy_for_target(sync_conn) + return await_only(async_function(async_conn, *args, **kw_args)) + + +class Operations(AbstractOperations): + """Define high level migration operations. + + Each operation corresponds to some schema migration operation, + executed against a particular :class:`.MigrationContext` + which in turn represents connectivity to a database, + or a file output stream. + + While :class:`.Operations` is normally configured as + part of the :meth:`.EnvironmentContext.run_migrations` + method called from an ``env.py`` script, a standalone + :class:`.Operations` instance can be + made for use cases external to regular Alembic + migrations by passing in a :class:`.MigrationContext`:: + + from alembic.migration import MigrationContext + from alembic.operations import Operations + + conn = myengine.connect() + ctx = MigrationContext.configure(conn) + op = Operations(ctx) + + op.alter_column("t", "c", nullable=True) + + Note that as of 0.8, most of the methods on this class are produced + dynamically using the :meth:`.Operations.register_operation` + method. + + """ + + if TYPE_CHECKING: + # START STUB FUNCTIONS: op_cls + # ### the following stubs are generated by tools/write_pyi.py ### + # ### do not edit ### + + def add_column( + self, + table_name: str, + column: Column[Any], + *, + schema: Optional[str] = None, + ) -> None: + """Issue an "add column" instruction using the current + migration context. + + e.g.:: + + from alembic import op + from sqlalchemy import Column, String + + op.add_column("organization", Column("name", String())) + + The :meth:`.Operations.add_column` method typically corresponds + to the SQL command "ALTER TABLE... ADD COLUMN". Within the scope + of this command, the column's name, datatype, nullability, + and optional server-generated defaults may be indicated. + + .. note:: + + With the exception of NOT NULL constraints or single-column FOREIGN + KEY constraints, other kinds of constraints such as PRIMARY KEY, + UNIQUE or CHECK constraints **cannot** be generated using this + method; for these constraints, refer to operations such as + :meth:`.Operations.create_primary_key` and + :meth:`.Operations.create_check_constraint`. In particular, the + following :class:`~sqlalchemy.schema.Column` parameters are + **ignored**: + + * :paramref:`~sqlalchemy.schema.Column.primary_key` - SQL databases + typically do not support an ALTER operation that can add + individual columns one at a time to an existing primary key + constraint, therefore it's less ambiguous to use the + :meth:`.Operations.create_primary_key` method, which assumes no + existing primary key constraint is present. + * :paramref:`~sqlalchemy.schema.Column.unique` - use the + :meth:`.Operations.create_unique_constraint` method + * :paramref:`~sqlalchemy.schema.Column.index` - use the + :meth:`.Operations.create_index` method + + + The provided :class:`~sqlalchemy.schema.Column` object may include a + :class:`~sqlalchemy.schema.ForeignKey` constraint directive, + referencing a remote table name. For this specific type of constraint, + Alembic will automatically emit a second ALTER statement in order to + add the single-column FOREIGN KEY constraint separately:: + + from alembic import op + from sqlalchemy import Column, INTEGER, ForeignKey + + op.add_column( + "organization", + Column("account_id", INTEGER, ForeignKey("accounts.id")), + ) + + The column argument passed to :meth:`.Operations.add_column` is a + :class:`~sqlalchemy.schema.Column` construct, used in the same way it's + used in SQLAlchemy. In particular, values or functions to be indicated + as producing the column's default value on the database side are + specified using the ``server_default`` parameter, and not ``default`` + which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the column add + op.add_column( + "account", + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + :param table_name: String name of the parent table. + :param column: a :class:`sqlalchemy.schema.Column` object + representing the new column. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + def alter_column( + self, + table_name: str, + column_name: str, + *, + nullable: Optional[bool] = None, + comment: Union[str, Literal[False], None] = False, + server_default: Any = False, + new_column_name: Optional[str] = None, + type_: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_type: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_server_default: Union[ + str, bool, Identity, Computed, None + ] = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + r"""Issue an "alter column" instruction using the + current migration context. + + Generally, only that aspect of the column which + is being changed, i.e. name, type, nullability, + default, needs to be specified. Multiple changes + can also be specified at once and the backend should + "do the right thing", emitting each change either + separately or together as the backend allows. + + MySQL has special requirements here, since MySQL + cannot ALTER a column without a full specification. + When producing MySQL-compatible migration files, + it is recommended that the ``existing_type``, + ``existing_server_default``, and ``existing_nullable`` + parameters be present, if not being altered. + + Type changes which are against the SQLAlchemy + "schema" types :class:`~sqlalchemy.types.Boolean` + and :class:`~sqlalchemy.types.Enum` may also + add or drop constraints which accompany those + types on backends that don't support them natively. + The ``existing_type`` argument is + used in this case to identify and remove a previous + constraint that was bound to the type object. + + :param table_name: string name of the target table. + :param column_name: string name of the target column, + as it exists before the operation begins. + :param nullable: Optional; specify ``True`` or ``False`` + to alter the column's nullability. + :param server_default: Optional; specify a string + SQL expression, :func:`~sqlalchemy.sql.expression.text`, + or :class:`~sqlalchemy.schema.DefaultClause` to indicate + an alteration to the column's default value. + Set to ``None`` to have the default removed. + :param comment: optional string text of a new comment to add to the + column. + :param new_column_name: Optional; specify a string name here to + indicate the new name within a column rename operation. + :param type\_: Optional; a :class:`~sqlalchemy.types.TypeEngine` + type object to specify a change to the column's type. + For SQLAlchemy types that also indicate a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, :class:`~sqlalchemy.types.Enum`), + the constraint is also generated. + :param autoincrement: set the ``AUTO_INCREMENT`` flag of the column; + currently understood by the MySQL dialect. + :param existing_type: Optional; a + :class:`~sqlalchemy.types.TypeEngine` + type object to specify the previous type. This + is required for all MySQL column alter operations that + don't otherwise specify a new type, as well as for + when nullability is being changed on a SQL Server + column. It is also used if the type is a so-called + SQLAlchemy "schema" type which may define a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, + :class:`~sqlalchemy.types.Enum`), + so that the constraint can be dropped. + :param existing_server_default: Optional; The existing + default value of the column. Required on MySQL if + an existing default is not being changed; else MySQL + removes the default. + :param existing_nullable: Optional; the existing nullability + of the column. Required on MySQL if the existing nullability + is not being changed; else MySQL sets this to NULL. + :param existing_autoincrement: Optional; the existing autoincrement + of the column. Used for MySQL's system of altering a column + that specifies ``AUTO_INCREMENT``. + :param existing_comment: string text of the existing comment on the + column to be maintained. Required on MySQL if the existing comment + on the column is not being changed. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param postgresql_using: String argument which will indicate a + SQL expression to render within the Postgresql-specific USING clause + within ALTER COLUMN. This string is taken directly as raw SQL which + must explicitly include any necessary quoting or escaping of tokens + within the expression. + + """ # noqa: E501 + ... + + def bulk_insert( + self, + table: Union[Table, TableClause], + rows: List[dict], + *, + multiinsert: bool = True, + ) -> None: + """Issue a "bulk insert" operation using the current + migration context. + + This provides a means of representing an INSERT of multiple rows + which works equally well in the context of executing on a live + connection as well as that of generating a SQL script. In the + case of a SQL script, the values are rendered inline into the + statement. + + e.g.:: + + from alembic import op + from datetime import date + from sqlalchemy.sql import table, column + from sqlalchemy import String, Integer, Date + + # Create an ad-hoc table to use for the insert statement. + accounts_table = table( + "account", + column("id", Integer), + column("name", String), + column("create_date", Date), + ) + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": date(2010, 10, 5), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": date(2007, 5, 27), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": date(2008, 8, 15), + }, + ], + ) + + When using --sql mode, some datatypes may not render inline + automatically, such as dates and other special types. When this + issue is present, :meth:`.Operations.inline_literal` may be used:: + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": op.inline_literal("2010-10-05"), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": op.inline_literal("2007-05-27"), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": op.inline_literal("2008-08-15"), + }, + ], + multiinsert=False, + ) + + When using :meth:`.Operations.inline_literal` in conjunction with + :meth:`.Operations.bulk_insert`, in order for the statement to work + in "online" (e.g. non --sql) mode, the + :paramref:`~.Operations.bulk_insert.multiinsert` + flag should be set to ``False``, which will have the effect of + individual INSERT statements being emitted to the database, each + with a distinct VALUES clause, so that the "inline" values can + still be rendered, rather than attempting to pass the values + as bound parameters. + + :param table: a table object which represents the target of the INSERT. + + :param rows: a list of dictionaries indicating rows. + + :param multiinsert: when at its default of True and --sql mode is not + enabled, the INSERT statement will be executed using + "executemany()" style, where all elements in the list of + dictionaries are passed as bound parameters in a single + list. Setting this to False results in individual INSERT + statements being emitted per parameter set, and is needed + in those cases where non-literal values are present in the + parameter sets. + + """ # noqa: E501 + ... + + def create_check_constraint( + self, + constraint_name: Optional[str], + table_name: str, + condition: Union[str, ColumnElement[bool], TextClause], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue a "create check constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + from sqlalchemy.sql import column, func + + op.create_check_constraint( + "ck_user_name_len", + "user", + func.len(column("name")) > 5, + ) + + CHECK constraints are usually against a SQL expression, so ad-hoc + table metadata is usually needed. The function will convert the given + arguments into a :class:`sqlalchemy.schema.CheckConstraint` bound + to an anonymous table in order to emit the CREATE statement. + + :param name: Name of the check constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param condition: SQL expression that's the condition of the + constraint. Can be a string or SQLAlchemy expression language + structure. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + def create_exclude_constraint( + self, + constraint_name: str, + table_name: str, + *elements: Any, + **kw: Any, + ) -> Optional[Table]: + """Issue an alter to create an EXCLUDE constraint using the + current migration context. + + .. note:: This method is Postgresql specific, and additionally + requires at least SQLAlchemy 1.0. + + e.g.:: + + from alembic import op + + op.create_exclude_constraint( + "user_excl", + "user", + ("period", "&&"), + ("group", "="), + where=("group != 'some group'"), + ) + + Note that the expressions work the same way as that of + the ``ExcludeConstraint`` object itself; if plain strings are + passed, quoting rules must be applied manually. + + :param name: Name of the constraint. + :param table_name: String name of the source table. + :param elements: exclude conditions. + :param where: SQL expression or SQL string with optional WHERE + clause. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. + + """ # noqa: E501 + ... + + def create_foreign_key( + self, + constraint_name: Optional[str], + source_table: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + *, + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + source_schema: Optional[str] = None, + referent_schema: Optional[str] = None, + **dialect_kw: Any, + ) -> None: + """Issue a "create foreign key" instruction using the + current migration context. + + e.g.:: + + from alembic import op + + op.create_foreign_key( + "fk_user_address", + "address", + "user", + ["user_id"], + ["id"], + ) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.ForeignKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the foreign key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param source_table: String name of the source table. + :param referent_table: String name of the destination table. + :param local_cols: a list of string column names in the + source table. + :param remote_cols: a list of string column names in the + remote table. + :param onupdate: Optional string. If set, emit ON UPDATE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param ondelete: Optional string. If set, emit ON DELETE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param deferrable: optional bool. If set, emit DEFERRABLE or NOT + DEFERRABLE when issuing DDL for this constraint. + :param source_schema: Optional schema name of the source table. + :param referent_schema: Optional schema name of the destination table. + + """ # noqa: E501 + ... + + def create_index( + self, + index_name: Optional[str], + table_name: str, + columns: Sequence[Union[str, TextClause, Function[Any]]], + *, + schema: Optional[str] = None, + unique: bool = False, + if_not_exists: Optional[bool] = None, + **kw: Any, + ) -> None: + r"""Issue a "create index" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_index("ik_test", "t1", ["foo", "bar"]) + + Functional indexes can be produced by using the + :func:`sqlalchemy.sql.expression.text` construct:: + + from alembic import op + from sqlalchemy import text + + op.create_index("ik_test", "t1", [text("lower(foo)")]) + + :param index_name: name of the index. + :param table_name: name of the owning table. + :param columns: a list consisting of string column names and/or + :func:`~sqlalchemy.sql.expression.text` constructs. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param unique: If True, create a unique index. + + :param quote: Force quoting of this column's name on or off, + corresponding to ``True`` or ``False``. When left at its default + of ``None``, the column identifier will be quoted according to + whether the name is case sensitive (identifiers with at least one + upper case character are treated as case sensitive), or if it's a + reserved word. This flag is only needed to force quoting of a + reserved word which is not known by the SQLAlchemy dialect. + + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ # noqa: E501 + ... + + def create_primary_key( + self, + constraint_name: Optional[str], + table_name: str, + columns: List[str], + *, + schema: Optional[str] = None, + ) -> None: + """Issue a "create primary key" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_primary_key("pk_my_table", "my_table", ["id", "version"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.PrimaryKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the primary key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions` + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the target table. + :param columns: a list of string column names to be applied to the + primary key constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + def create_table( + self, table_name: str, *columns: SchemaItem, **kw: Any + ) -> Table: + r"""Issue a "create table" instruction using the current migration + context. + + This directive receives an argument list similar to that of the + traditional :class:`sqlalchemy.schema.Table` construct, but without the + metadata:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + Note that :meth:`.create_table` accepts + :class:`~sqlalchemy.schema.Column` + constructs directly from the SQLAlchemy library. In particular, + default values to be created on the database side are + specified using the ``server_default`` parameter, and not + ``default`` which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the "timestamp" column + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + The function also returns a newly created + :class:`~sqlalchemy.schema.Table` object, corresponding to the table + specification given, which is suitable for + immediate SQL operations, in particular + :meth:`.Operations.bulk_insert`:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + account_table = op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + op.bulk_insert( + account_table, + [ + {"name": "A1", "description": "account 1"}, + {"name": "A2", "description": "account 2"}, + ], + ) + + :param table_name: Name of the table + :param \*columns: collection of :class:`~sqlalchemy.schema.Column` + objects within + the table, as well as optional :class:`~sqlalchemy.schema.Constraint` + objects + and :class:`~.sqlalchemy.schema.Index` objects. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + :return: the :class:`~sqlalchemy.schema.Table` object corresponding + to the parameters given. + + """ # noqa: E501 + ... + + def create_table_comment( + self, + table_name: str, + comment: Optional[str], + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + ) -> None: + """Emit a COMMENT ON operation to set the comment for a table. + + :param table_name: string name of the target table. + :param comment: string value of the comment being registered against + the specified table. + :param existing_comment: String value of a comment + already registered on the specified table, used within autogenerate + so that the operation is reversible, but not required for direct + use. + + .. seealso:: + + :meth:`.Operations.drop_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ # noqa: E501 + ... + + def create_unique_constraint( + self, + constraint_name: Optional[str], + table_name: str, + columns: Sequence[str], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> Any: + """Issue a "create unique constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + op.create_unique_constraint("uq_user_name", "user", ["name"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.UniqueConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param name: Name of the unique constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param columns: a list of string column names in the + source table. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + def drop_column( + self, + table_name: str, + column_name: str, + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue a "drop column" instruction using the current + migration context. + + e.g.:: + + drop_column("organization", "account_id") + + :param table_name: name of table + :param column_name: name of column + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param mssql_drop_check: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the CHECK constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.check_constraints, + then exec's a separate DROP CONSTRAINT for that constraint. + :param mssql_drop_default: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the DEFAULT constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.default_constraints, + then exec's a separate DROP CONSTRAINT for that default. + :param mssql_drop_foreign_key: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop a single FOREIGN KEY constraint on the column using a + SQL-script-compatible + block that selects into a @variable from + sys.foreign_keys/sys.foreign_key_columns, + then exec's a separate DROP CONSTRAINT for that default. Only + works if the column has exactly one FK constraint which refers to + it, at the moment. + + """ # noqa: E501 + ... + + def drop_constraint( + self, + constraint_name: str, + table_name: str, + type_: Optional[str] = None, + *, + schema: Optional[str] = None, + ) -> None: + r"""Drop a constraint of the given name, typically via DROP CONSTRAINT. + + :param constraint_name: name of the constraint. + :param table_name: table name. + :param type\_: optional, required on MySQL. can be + 'foreignkey', 'primary', 'unique', or 'check'. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + def drop_index( + self, + index_name: str, + table_name: Optional[str] = None, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + **kw: Any, + ) -> None: + r"""Issue a "drop index" instruction using the current + migration context. + + e.g.:: + + drop_index("accounts") + + :param index_name: name of the index. + :param table_name: name of the owning table. Some + backends such as Microsoft SQL Server require this. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + :param if_exists: If True, adds IF EXISTS operator when + dropping the index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ # noqa: E501 + ... + + def drop_table( + self, table_name: str, *, schema: Optional[str] = None, **kw: Any + ) -> None: + r"""Issue a "drop table" instruction using the current + migration context. + + + e.g.:: + + drop_table("accounts") + + :param table_name: Name of the table + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + """ # noqa: E501 + ... + + def drop_table_comment( + self, + table_name: str, + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + ) -> None: + """Issue a "drop table comment" operation to + remove an existing comment set on a table. + + :param table_name: string name of the target table. + :param existing_comment: An optional string value of a comment already + registered on the specified table. + + .. seealso:: + + :meth:`.Operations.create_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ # noqa: E501 + ... + + def execute( + self, + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + r"""Execute the given SQL using the current migration context. + + The given SQL can be a plain string, e.g.:: + + op.execute("INSERT INTO table (foo) VALUES ('some value')") + + Or it can be any kind of Core SQL Expression construct, such as + below where we use an update construct:: + + from sqlalchemy.sql import table, column + from sqlalchemy import String + from alembic import op + + account = table("account", column("name", String)) + op.execute( + account.update() + .where(account.c.name == op.inline_literal("account 1")) + .values({"name": op.inline_literal("account 2")}) + ) + + Above, we made use of the SQLAlchemy + :func:`sqlalchemy.sql.expression.table` and + :func:`sqlalchemy.sql.expression.column` constructs to make a brief, + ad-hoc table construct just for our UPDATE statement. A full + :class:`~sqlalchemy.schema.Table` construct of course works perfectly + fine as well, though note it's a recommended practice to at least + ensure the definition of a table is self-contained within the migration + script, rather than imported from a module that may break compatibility + with older migrations. + + In a SQL script context, the statement is emitted directly to the + output stream. There is *no* return result, however, as this + function is oriented towards generating a change script + that can run in "offline" mode. Additionally, parameterized + statements are discouraged here, as they *will not work* in offline + mode. Above, we use :meth:`.inline_literal` where parameters are + to be used. + + For full interaction with a connected database where parameters can + also be used normally, use the "bind" available from the context:: + + from alembic import op + + connection = op.get_bind() + + connection.execute( + account.update() + .where(account.c.name == "account 1") + .values({"name": "account 2"}) + ) + + Additionally, when passing the statement as a plain string, it is first + coerced into a :func:`sqlalchemy.sql.expression.text` construct + before being passed along. In the less likely case that the + literal SQL string contains a colon, it must be escaped with a + backslash, as:: + + op.execute(r"INSERT INTO table (foo) VALUES ('\:colon_value')") + + + :param sqltext: Any legal SQLAlchemy expression, including: + + * a string + * a :func:`sqlalchemy.sql.expression.text` construct. + * a :func:`sqlalchemy.sql.expression.insert` construct. + * a :func:`sqlalchemy.sql.expression.update` construct. + * a :func:`sqlalchemy.sql.expression.delete` construct. + * Any "executable" described in SQLAlchemy Core documentation, + noting that no result set is returned. + + .. note:: when passing a plain string, the statement is coerced into + a :func:`sqlalchemy.sql.expression.text` construct. This construct + considers symbols with colons, e.g. ``:foo`` to be bound parameters. + To avoid this, ensure that colon symbols are escaped, e.g. + ``\:foo``. + + :param execution_options: Optional dictionary of + execution options, will be passed to + :meth:`sqlalchemy.engine.Connection.execution_options`. + """ # noqa: E501 + ... + + def rename_table( + self, + old_table_name: str, + new_table_name: str, + *, + schema: Optional[str] = None, + ) -> None: + """Emit an ALTER TABLE to rename a table. + + :param old_table_name: old name. + :param new_table_name: new name. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ # noqa: E501 + ... + + # END STUB FUNCTIONS: op_cls + + +class BatchOperations(AbstractOperations): + """Modifies the interface :class:`.Operations` for batch mode. + + This basically omits the ``table_name`` and ``schema`` parameters + from associated methods, as these are a given when running under batch + mode. + + .. seealso:: + + :meth:`.Operations.batch_alter_table` + + Note that as of 0.8, most of the methods on this class are produced + dynamically using the :meth:`.Operations.register_operation` + method. + + """ + + impl: BatchOperationsImpl + + def _noop(self, operation): + raise NotImplementedError( + "The %s method does not apply to a batch table alter operation." + % operation + ) + + if TYPE_CHECKING: + # START STUB FUNCTIONS: batch_op + # ### the following stubs are generated by tools/write_pyi.py ### + # ### do not edit ### + + def add_column( + self, + column: Column[Any], + *, + insert_before: Optional[str] = None, + insert_after: Optional[str] = None, + ) -> None: + """Issue an "add column" instruction using the current + batch migration context. + + .. seealso:: + + :meth:`.Operations.add_column` + + """ # noqa: E501 + ... + + def alter_column( + self, + column_name: str, + *, + nullable: Optional[bool] = None, + comment: Union[str, Literal[False], None] = False, + server_default: Any = False, + new_column_name: Optional[str] = None, + type_: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_type: Union[TypeEngine, Type[TypeEngine], None] = None, + existing_server_default: Union[ + str, bool, Identity, Computed, None + ] = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + insert_before: Optional[str] = None, + insert_after: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue an "alter column" instruction using the current + batch migration context. + + Parameters are the same as that of :meth:`.Operations.alter_column`, + as well as the following option(s): + + :param insert_before: String name of an existing column which this + column should be placed before, when creating the new table. + + :param insert_after: String name of an existing column which this + column should be placed after, when creating the new table. If + both :paramref:`.BatchOperations.alter_column.insert_before` + and :paramref:`.BatchOperations.alter_column.insert_after` are + omitted, the column is inserted after the last existing column + in the table. + + .. seealso:: + + :meth:`.Operations.alter_column` + + + """ # noqa: E501 + ... + + def create_check_constraint( + self, + constraint_name: str, + condition: Union[str, ColumnElement[bool], TextClause], + **kw: Any, + ) -> None: + """Issue a "create check constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_check_constraint` + + """ # noqa: E501 + ... + + def create_exclude_constraint( + self, constraint_name: str, *elements: Any, **kw: Any + ): + """Issue a "create exclude constraint" instruction using the + current batch migration context. + + .. note:: This method is Postgresql specific, and additionally + requires at least SQLAlchemy 1.0. + + .. seealso:: + + :meth:`.Operations.create_exclude_constraint` + + """ # noqa: E501 + ... + + def create_foreign_key( + self, + constraint_name: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + *, + referent_schema: Optional[str] = None, + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + **dialect_kw: Any, + ) -> None: + """Issue a "create foreign key" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``source_schema`` + arguments from the call. + + e.g.:: + + with batch_alter_table("address") as batch_op: + batch_op.create_foreign_key( + "fk_user_address", + "user", + ["user_id"], + ["id"], + ) + + .. seealso:: + + :meth:`.Operations.create_foreign_key` + + """ # noqa: E501 + ... + + def create_index( + self, index_name: str, columns: List[str], **kw: Any + ) -> None: + """Issue a "create index" instruction using the + current batch migration context. + + .. seealso:: + + :meth:`.Operations.create_index` + + """ # noqa: E501 + ... + + def create_primary_key( + self, constraint_name: str, columns: List[str] + ) -> None: + """Issue a "create primary key" instruction using the + current batch migration context. + + The batch form of this call omits the ``table_name`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_primary_key` + + """ # noqa: E501 + ... + + def create_table_comment( + self, + comment: Optional[str], + *, + existing_comment: Optional[str] = None, + ) -> None: + """Emit a COMMENT ON operation to set the comment for a table + using the current batch migration context. + + :param comment: string value of the comment being registered against + the specified table. + :param existing_comment: String value of a comment + already registered on the specified table, used within autogenerate + so that the operation is reversible, but not required for direct + use. + + """ # noqa: E501 + ... + + def create_unique_constraint( + self, constraint_name: str, columns: Sequence[str], **kw: Any + ) -> Any: + """Issue a "create unique constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_unique_constraint` + + """ # noqa: E501 + ... + + def drop_column(self, column_name: str, **kw: Any) -> None: + """Issue a "drop column" instruction using the current + batch migration context. + + .. seealso:: + + :meth:`.Operations.drop_column` + + """ # noqa: E501 + ... + + def drop_constraint( + self, constraint_name: str, type_: Optional[str] = None + ) -> None: + """Issue a "drop constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``table_name`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.drop_constraint` + + """ # noqa: E501 + ... + + def drop_index(self, index_name: str, **kw: Any) -> None: + """Issue a "drop index" instruction using the + current batch migration context. + + .. seealso:: + + :meth:`.Operations.drop_index` + + """ # noqa: E501 + ... + + def drop_table_comment( + self, *, existing_comment: Optional[str] = None + ) -> None: + """Issue a "drop table comment" operation to + remove an existing comment set on a table using the current + batch operations context. + + :param existing_comment: An optional string value of a comment already + registered on the specified table. + + """ # noqa: E501 + ... + + def execute( + self, + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + """Execute the given SQL using the current migration context. + + .. seealso:: + + :meth:`.Operations.execute` + + """ # noqa: E501 + ... + + # END STUB FUNCTIONS: batch_op diff --git a/venv/Lib/site-packages/alembic/operations/batch.py b/venv/Lib/site-packages/alembic/operations/batch.py new file mode 100644 index 0000000..8c88e88 --- /dev/null +++ b/venv/Lib/site-packages/alembic/operations/batch.py @@ -0,0 +1,718 @@ +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import CheckConstraint +from sqlalchemy import Column +from sqlalchemy import ForeignKeyConstraint +from sqlalchemy import Index +from sqlalchemy import MetaData +from sqlalchemy import PrimaryKeyConstraint +from sqlalchemy import schema as sql_schema +from sqlalchemy import Table +from sqlalchemy import types as sqltypes +from sqlalchemy.events import SchemaEventTarget +from sqlalchemy.util import OrderedDict +from sqlalchemy.util import topological + +from ..util import exc +from ..util.sqla_compat import _columns_for_constraint +from ..util.sqla_compat import _copy +from ..util.sqla_compat import _copy_expression +from ..util.sqla_compat import _ensure_scope_for_ddl +from ..util.sqla_compat import _fk_is_self_referential +from ..util.sqla_compat import _idx_table_bound_expressions +from ..util.sqla_compat import _insert_inline +from ..util.sqla_compat import _is_type_bound +from ..util.sqla_compat import _remove_column_from_collection +from ..util.sqla_compat import _resolve_for_variant +from ..util.sqla_compat import _select +from ..util.sqla_compat import constraint_name_defined +from ..util.sqla_compat import constraint_name_string + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.engine import Dialect + from sqlalchemy.sql.elements import ColumnClause + from sqlalchemy.sql.elements import quoted_name + from sqlalchemy.sql.functions import Function + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.type_api import TypeEngine + + from ..ddl.impl import DefaultImpl + + +class BatchOperationsImpl: + def __init__( + self, + operations, + table_name, + schema, + recreate, + copy_from, + table_args, + table_kwargs, + reflect_args, + reflect_kwargs, + naming_convention, + partial_reordering, + ): + self.operations = operations + self.table_name = table_name + self.schema = schema + if recreate not in ("auto", "always", "never"): + raise ValueError( + "recreate may be one of 'auto', 'always', or 'never'." + ) + self.recreate = recreate + self.copy_from = copy_from + self.table_args = table_args + self.table_kwargs = dict(table_kwargs) + self.reflect_args = reflect_args + self.reflect_kwargs = dict(reflect_kwargs) + self.reflect_kwargs.setdefault( + "listeners", list(self.reflect_kwargs.get("listeners", ())) + ) + self.reflect_kwargs["listeners"].append( + ("column_reflect", operations.impl.autogen_column_reflect) + ) + self.naming_convention = naming_convention + self.partial_reordering = partial_reordering + self.batch = [] + + @property + def dialect(self) -> Dialect: + return self.operations.impl.dialect + + @property + def impl(self) -> DefaultImpl: + return self.operations.impl + + def _should_recreate(self) -> bool: + if self.recreate == "auto": + return self.operations.impl.requires_recreate_in_batch(self) + elif self.recreate == "always": + return True + else: + return False + + def flush(self) -> None: + should_recreate = self._should_recreate() + + with _ensure_scope_for_ddl(self.impl.connection): + if not should_recreate: + for opname, arg, kw in self.batch: + fn = getattr(self.operations.impl, opname) + fn(*arg, **kw) + else: + if self.naming_convention: + m1 = MetaData(naming_convention=self.naming_convention) + else: + m1 = MetaData() + + if self.copy_from is not None: + existing_table = self.copy_from + reflected = False + else: + if self.operations.migration_context.as_sql: + raise exc.CommandError( + f"This operation cannot proceed in --sql mode; " + f"batch mode with dialect " + f"{self.operations.migration_context.dialect.name} " # noqa: E501 + f"requires a live database connection with which " + f'to reflect the table "{self.table_name}". ' + f"To generate a batch SQL migration script using " + "table " + '"move and copy", a complete Table object ' + f'should be passed to the "copy_from" argument ' + "of the batch_alter_table() method so that table " + "reflection can be skipped." + ) + + existing_table = Table( + self.table_name, + m1, + schema=self.schema, + autoload_with=self.operations.get_bind(), + *self.reflect_args, + **self.reflect_kwargs, + ) + reflected = True + + batch_impl = ApplyBatchImpl( + self.impl, + existing_table, + self.table_args, + self.table_kwargs, + reflected, + partial_reordering=self.partial_reordering, + ) + for opname, arg, kw in self.batch: + fn = getattr(batch_impl, opname) + fn(*arg, **kw) + + batch_impl._create(self.impl) + + def alter_column(self, *arg, **kw) -> None: + self.batch.append(("alter_column", arg, kw)) + + def add_column(self, *arg, **kw) -> None: + if ( + "insert_before" in kw or "insert_after" in kw + ) and not self._should_recreate(): + raise exc.CommandError( + "Can't specify insert_before or insert_after when using " + "ALTER; please specify recreate='always'" + ) + self.batch.append(("add_column", arg, kw)) + + def drop_column(self, *arg, **kw) -> None: + self.batch.append(("drop_column", arg, kw)) + + def add_constraint(self, const: Constraint) -> None: + self.batch.append(("add_constraint", (const,), {})) + + def drop_constraint(self, const: Constraint) -> None: + self.batch.append(("drop_constraint", (const,), {})) + + def rename_table(self, *arg, **kw): + self.batch.append(("rename_table", arg, kw)) + + def create_index(self, idx: Index, **kw: Any) -> None: + self.batch.append(("create_index", (idx,), kw)) + + def drop_index(self, idx: Index, **kw: Any) -> None: + self.batch.append(("drop_index", (idx,), kw)) + + def create_table_comment(self, table): + self.batch.append(("create_table_comment", (table,), {})) + + def drop_table_comment(self, table): + self.batch.append(("drop_table_comment", (table,), {})) + + def create_table(self, table): + raise NotImplementedError("Can't create table in batch mode") + + def drop_table(self, table): + raise NotImplementedError("Can't drop table in batch mode") + + def create_column_comment(self, column): + self.batch.append(("create_column_comment", (column,), {})) + + +class ApplyBatchImpl: + def __init__( + self, + impl: DefaultImpl, + table: Table, + table_args: tuple, + table_kwargs: Dict[str, Any], + reflected: bool, + partial_reordering: tuple = (), + ) -> None: + self.impl = impl + self.table = table # this is a Table object + self.table_args = table_args + self.table_kwargs = table_kwargs + self.temp_table_name = self._calc_temp_name(table.name) + self.new_table: Optional[Table] = None + + self.partial_reordering = partial_reordering # tuple of tuples + self.add_col_ordering: Tuple[ + Tuple[str, str], ... + ] = () # tuple of tuples + + self.column_transfers = OrderedDict( + (c.name, {"expr": c}) for c in self.table.c + ) + self.existing_ordering = list(self.column_transfers) + + self.reflected = reflected + self._grab_table_elements() + + @classmethod + def _calc_temp_name(cls, tablename: Union[quoted_name, str]) -> str: + return ("_alembic_tmp_%s" % tablename)[0:50] + + def _grab_table_elements(self) -> None: + schema = self.table.schema + self.columns: Dict[str, Column[Any]] = OrderedDict() + for c in self.table.c: + c_copy = _copy(c, schema=schema) + c_copy.unique = c_copy.index = False + # ensure that the type object was copied, + # as we may need to modify it in-place + if isinstance(c.type, SchemaEventTarget): + assert c_copy.type is not c.type + self.columns[c.name] = c_copy + self.named_constraints: Dict[str, Constraint] = {} + self.unnamed_constraints = [] + self.col_named_constraints = {} + self.indexes: Dict[str, Index] = {} + self.new_indexes: Dict[str, Index] = {} + + for const in self.table.constraints: + if _is_type_bound(const): + continue + elif ( + self.reflected + and isinstance(const, CheckConstraint) + and not const.name + ): + # TODO: we are skipping unnamed reflected CheckConstraint + # because + # we have no way to determine _is_type_bound() for these. + pass + elif constraint_name_string(const.name): + self.named_constraints[const.name] = const + else: + self.unnamed_constraints.append(const) + + if not self.reflected: + for col in self.table.c: + for const in col.constraints: + if const.name: + self.col_named_constraints[const.name] = (col, const) + + for idx in self.table.indexes: + self.indexes[idx.name] = idx # type: ignore[index] + + for k in self.table.kwargs: + self.table_kwargs.setdefault(k, self.table.kwargs[k]) + + def _adjust_self_columns_for_partial_reordering(self) -> None: + pairs = set() + + col_by_idx = list(self.columns) + + if self.partial_reordering: + for tuple_ in self.partial_reordering: + for index, elem in enumerate(tuple_): + if index > 0: + pairs.add((tuple_[index - 1], elem)) + else: + for index, elem in enumerate(self.existing_ordering): + if index > 0: + pairs.add((col_by_idx[index - 1], elem)) + + pairs.update(self.add_col_ordering) + + # this can happen if some columns were dropped and not removed + # from existing_ordering. this should be prevented already, but + # conservatively making sure this didn't happen + pairs_list = [p for p in pairs if p[0] != p[1]] + + sorted_ = list( + topological.sort(pairs_list, col_by_idx, deterministic_order=True) + ) + self.columns = OrderedDict((k, self.columns[k]) for k in sorted_) + self.column_transfers = OrderedDict( + (k, self.column_transfers[k]) for k in sorted_ + ) + + def _transfer_elements_to_new_table(self) -> None: + assert self.new_table is None, "Can only create new table once" + + m = MetaData() + schema = self.table.schema + + if self.partial_reordering or self.add_col_ordering: + self._adjust_self_columns_for_partial_reordering() + + self.new_table = new_table = Table( + self.temp_table_name, + m, + *(list(self.columns.values()) + list(self.table_args)), + schema=schema, + **self.table_kwargs, + ) + + for const in ( + list(self.named_constraints.values()) + self.unnamed_constraints + ): + const_columns = {c.key for c in _columns_for_constraint(const)} + + if not const_columns.issubset(self.column_transfers): + continue + + const_copy: Constraint + if isinstance(const, ForeignKeyConstraint): + if _fk_is_self_referential(const): + # for self-referential constraint, refer to the + # *original* table name, and not _alembic_batch_temp. + # This is consistent with how we're handling + # FK constraints from other tables; we assume SQLite + # no foreign keys just keeps the names unchanged, so + # when we rename back, they match again. + const_copy = _copy( + const, schema=schema, target_table=self.table + ) + else: + # "target_table" for ForeignKeyConstraint.copy() is + # only used if the FK is detected as being + # self-referential, which we are handling above. + const_copy = _copy(const, schema=schema) + else: + const_copy = _copy( + const, schema=schema, target_table=new_table + ) + if isinstance(const, ForeignKeyConstraint): + self._setup_referent(m, const) + new_table.append_constraint(const_copy) + + def _gather_indexes_from_both_tables(self) -> List[Index]: + assert self.new_table is not None + idx: List[Index] = [] + + for idx_existing in self.indexes.values(): + # this is a lift-and-move from Table.to_metadata + + if idx_existing._column_flag: # type: ignore + continue + + idx_copy = Index( + idx_existing.name, + unique=idx_existing.unique, + *[ + _copy_expression(expr, self.new_table) + for expr in _idx_table_bound_expressions(idx_existing) + ], + _table=self.new_table, + **idx_existing.kwargs, + ) + idx.append(idx_copy) + + for index in self.new_indexes.values(): + idx.append( + Index( + index.name, + unique=index.unique, + *[self.new_table.c[col] for col in index.columns.keys()], + **index.kwargs, + ) + ) + return idx + + def _setup_referent( + self, metadata: MetaData, constraint: ForeignKeyConstraint + ) -> None: + spec = constraint.elements[ + 0 + ]._get_colspec() # type:ignore[attr-defined] + parts = spec.split(".") + tname = parts[-2] + if len(parts) == 3: + referent_schema = parts[0] + else: + referent_schema = None + + if tname != self.temp_table_name: + key = sql_schema._get_table_key(tname, referent_schema) + + def colspec(elem: Any): + return elem._get_colspec() + + if key in metadata.tables: + t = metadata.tables[key] + for elem in constraint.elements: + colname = colspec(elem).split(".")[-1] + if colname not in t.c: + t.append_column(Column(colname, sqltypes.NULLTYPE)) + else: + Table( + tname, + metadata, + *[ + Column(n, sqltypes.NULLTYPE) + for n in [ + colspec(elem).split(".")[-1] + for elem in constraint.elements + ] + ], + schema=referent_schema, + ) + + def _create(self, op_impl: DefaultImpl) -> None: + self._transfer_elements_to_new_table() + + op_impl.prep_table_for_batch(self, self.table) + assert self.new_table is not None + op_impl.create_table(self.new_table) + + try: + op_impl._exec( + _insert_inline(self.new_table).from_select( + list( + k + for k, transfer in self.column_transfers.items() + if "expr" in transfer + ), + _select( + *[ + transfer["expr"] + for transfer in self.column_transfers.values() + if "expr" in transfer + ] + ), + ) + ) + op_impl.drop_table(self.table) + except: + op_impl.drop_table(self.new_table) + raise + else: + op_impl.rename_table( + self.temp_table_name, self.table.name, schema=self.table.schema + ) + self.new_table.name = self.table.name + try: + for idx in self._gather_indexes_from_both_tables(): + op_impl.create_index(idx) + finally: + self.new_table.name = self.temp_table_name + + def alter_column( + self, + table_name: str, + column_name: str, + nullable: Optional[bool] = None, + server_default: Optional[Union[Function[Any], str, bool]] = False, + name: Optional[str] = None, + type_: Optional[TypeEngine] = None, + autoincrement: Optional[Union[bool, Literal["auto"]]] = None, + comment: Union[str, Literal[False]] = False, + **kw, + ) -> None: + existing = self.columns[column_name] + existing_transfer: Dict[str, Any] = self.column_transfers[column_name] + if name is not None and name != column_name: + # note that we don't change '.key' - we keep referring + # to the renamed column by its old key in _create(). neat! + existing.name = name + existing_transfer["name"] = name + + existing_type = kw.get("existing_type", None) + if existing_type: + resolved_existing_type = _resolve_for_variant( + kw["existing_type"], self.impl.dialect + ) + + # pop named constraints for Boolean/Enum for rename + if ( + isinstance(resolved_existing_type, SchemaEventTarget) + and resolved_existing_type.name # type:ignore[attr-defined] # noqa E501 + ): + self.named_constraints.pop( + resolved_existing_type.name, # type:ignore[attr-defined] # noqa E501 + None, + ) + + if type_ is not None: + type_ = sqltypes.to_instance(type_) + # old type is being discarded so turn off eventing + # rules. Alternatively we can + # erase the events set up by this type, but this is simpler. + # we also ignore the drop_constraint that will come here from + # Operations.implementation_for(alter_column) + + if isinstance(existing.type, SchemaEventTarget): + existing.type._create_events = ( # type:ignore[attr-defined] + existing.type.create_constraint # type:ignore[attr-defined] # noqa + ) = False + + self.impl.cast_for_batch_migrate( + existing, existing_transfer, type_ + ) + + existing.type = type_ + + # we *dont* however set events for the new type, because + # alter_column is invoked from + # Operations.implementation_for(alter_column) which already + # will emit an add_constraint() + + if nullable is not None: + existing.nullable = nullable + if server_default is not False: + if server_default is None: + existing.server_default = None + else: + sql_schema.DefaultClause( + server_default # type: ignore[arg-type] + )._set_parent( # type:ignore[attr-defined] + existing + ) + if autoincrement is not None: + existing.autoincrement = bool(autoincrement) + + if comment is not False: + existing.comment = comment + + def _setup_dependencies_for_add_column( + self, + colname: str, + insert_before: Optional[str], + insert_after: Optional[str], + ) -> None: + index_cols = self.existing_ordering + col_indexes = {name: i for i, name in enumerate(index_cols)} + + if not self.partial_reordering: + if insert_after: + if not insert_before: + if insert_after in col_indexes: + # insert after an existing column + idx = col_indexes[insert_after] + 1 + if idx < len(index_cols): + insert_before = index_cols[idx] + else: + # insert after a column that is also new + insert_before = dict(self.add_col_ordering)[ + insert_after + ] + if insert_before: + if not insert_after: + if insert_before in col_indexes: + # insert before an existing column + idx = col_indexes[insert_before] - 1 + if idx >= 0: + insert_after = index_cols[idx] + else: + # insert before a column that is also new + insert_after = { + b: a for a, b in self.add_col_ordering + }[insert_before] + + if insert_before: + self.add_col_ordering += ((colname, insert_before),) + if insert_after: + self.add_col_ordering += ((insert_after, colname),) + + if ( + not self.partial_reordering + and not insert_before + and not insert_after + and col_indexes + ): + self.add_col_ordering += ((index_cols[-1], colname),) + + def add_column( + self, + table_name: str, + column: Column[Any], + insert_before: Optional[str] = None, + insert_after: Optional[str] = None, + **kw, + ) -> None: + self._setup_dependencies_for_add_column( + column.name, insert_before, insert_after + ) + # we copy the column because operations.add_column() + # gives us a Column that is part of a Table already. + self.columns[column.name] = _copy(column, schema=self.table.schema) + self.column_transfers[column.name] = {} + + def drop_column( + self, + table_name: str, + column: Union[ColumnClause[Any], Column[Any]], + **kw, + ) -> None: + if column.name in self.table.primary_key.columns: + _remove_column_from_collection( + self.table.primary_key.columns, column + ) + del self.columns[column.name] + del self.column_transfers[column.name] + self.existing_ordering.remove(column.name) + + # pop named constraints for Boolean/Enum for rename + if ( + "existing_type" in kw + and isinstance(kw["existing_type"], SchemaEventTarget) + and kw["existing_type"].name # type:ignore[attr-defined] + ): + self.named_constraints.pop( + kw["existing_type"].name, None # type:ignore[attr-defined] + ) + + def create_column_comment(self, column): + """the batch table creation function will issue create_column_comment + on the real "impl" as part of the create table process. + + That is, the Column object will have the comment on it already, + so when it is received by add_column() it will be a normal part of + the CREATE TABLE and doesn't need an extra step here. + + """ + + def create_table_comment(self, table): + """the batch table creation function will issue create_table_comment + on the real "impl" as part of the create table process. + + """ + + def drop_table_comment(self, table): + """the batch table creation function will issue drop_table_comment + on the real "impl" as part of the create table process. + + """ + + def add_constraint(self, const: Constraint) -> None: + if not constraint_name_defined(const.name): + raise ValueError("Constraint must have a name") + if isinstance(const, sql_schema.PrimaryKeyConstraint): + if self.table.primary_key in self.unnamed_constraints: + self.unnamed_constraints.remove(self.table.primary_key) + + if constraint_name_string(const.name): + self.named_constraints[const.name] = const + else: + self.unnamed_constraints.append(const) + + def drop_constraint(self, const: Constraint) -> None: + if not const.name: + raise ValueError("Constraint must have a name") + try: + if const.name in self.col_named_constraints: + col, const = self.col_named_constraints.pop(const.name) + + for col_const in list(self.columns[col.name].constraints): + if col_const.name == const.name: + self.columns[col.name].constraints.remove(col_const) + elif constraint_name_string(const.name): + const = self.named_constraints.pop(const.name) + elif const in self.unnamed_constraints: + self.unnamed_constraints.remove(const) + + except KeyError: + if _is_type_bound(const): + # type-bound constraints are only included in the new + # table via their type object in any case, so ignore the + # drop_constraint() that comes here via the + # Operations.implementation_for(alter_column) + return + raise ValueError("No such constraint: '%s'" % const.name) + else: + if isinstance(const, PrimaryKeyConstraint): + for col in const.columns: + self.columns[col.name].primary_key = False + + def create_index(self, idx: Index) -> None: + self.new_indexes[idx.name] = idx # type: ignore[index] + + def drop_index(self, idx: Index) -> None: + try: + del self.indexes[idx.name] # type: ignore[arg-type] + except KeyError: + raise ValueError("No such index: '%s'" % idx.name) + + def rename_table(self, *arg, **kw): + raise NotImplementedError("TODO") diff --git a/venv/Lib/site-packages/alembic/operations/ops.py b/venv/Lib/site-packages/alembic/operations/ops.py new file mode 100644 index 0000000..711d7ab --- /dev/null +++ b/venv/Lib/site-packages/alembic/operations/ops.py @@ -0,0 +1,2764 @@ +from __future__ import annotations + +from abc import abstractmethod +import re +from typing import Any +from typing import Callable +from typing import cast +from typing import FrozenSet +from typing import Iterator +from typing import List +from typing import MutableMapping +from typing import Optional +from typing import Sequence +from typing import Set +from typing import Tuple +from typing import Type +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy.types import NULLTYPE + +from . import schemaobj +from .base import BatchOperations +from .base import Operations +from .. import util +from ..util import sqla_compat + +if TYPE_CHECKING: + from typing import Literal + + from sqlalchemy.sql import Executable + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import conv + from sqlalchemy.sql.elements import quoted_name + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.functions import Function + from sqlalchemy.sql.schema import CheckConstraint + from sqlalchemy.sql.schema import Column + from sqlalchemy.sql.schema import Computed + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.schema import ForeignKeyConstraint + from sqlalchemy.sql.schema import Identity + from sqlalchemy.sql.schema import Index + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import PrimaryKeyConstraint + from sqlalchemy.sql.schema import SchemaItem + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.schema import UniqueConstraint + from sqlalchemy.sql.selectable import TableClause + from sqlalchemy.sql.type_api import TypeEngine + + from ..autogenerate.rewriter import Rewriter + from ..runtime.migration import MigrationContext + from ..script.revision import _RevIdType + + +class MigrateOperation: + """base class for migration command and organization objects. + + This system is part of the operation extensibility API. + + .. seealso:: + + :ref:`operation_objects` + + :ref:`operation_plugins` + + :ref:`customizing_revision` + + """ + + @util.memoized_property + def info(self): + """A dictionary that may be used to store arbitrary information + along with this :class:`.MigrateOperation` object. + + """ + return {} + + _mutations: FrozenSet[Rewriter] = frozenset() + + def reverse(self) -> MigrateOperation: + raise NotImplementedError + + def to_diff_tuple(self) -> Tuple[Any, ...]: + raise NotImplementedError + + +class AddConstraintOp(MigrateOperation): + """Represent an add constraint operation.""" + + add_constraint_ops = util.Dispatcher() + + @property + def constraint_type(self): + raise NotImplementedError() + + @classmethod + def register_add_constraint(cls, type_: str) -> Callable: + def go(klass): + cls.add_constraint_ops.dispatch_for(type_)(klass.from_constraint) + return klass + + return go + + @classmethod + def from_constraint(cls, constraint: Constraint) -> AddConstraintOp: + return cls.add_constraint_ops.dispatch(constraint.__visit_name__)( + constraint + ) + + @abstractmethod + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> Constraint: + pass + + def reverse(self) -> DropConstraintOp: + return DropConstraintOp.from_constraint(self.to_constraint()) + + def to_diff_tuple(self) -> Tuple[str, Constraint]: + return ("add_constraint", self.to_constraint()) + + +@Operations.register_operation("drop_constraint") +@BatchOperations.register_operation("drop_constraint", "batch_drop_constraint") +class DropConstraintOp(MigrateOperation): + """Represent a drop constraint operation.""" + + def __init__( + self, + constraint_name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + type_: Optional[str] = None, + *, + schema: Optional[str] = None, + _reverse: Optional[AddConstraintOp] = None, + ) -> None: + self.constraint_name = constraint_name + self.table_name = table_name + self.constraint_type = type_ + self.schema = schema + self._reverse = _reverse + + def reverse(self) -> AddConstraintOp: + return AddConstraintOp.from_constraint(self.to_constraint()) + + def to_diff_tuple( + self, + ) -> Tuple[str, SchemaItem]: + if self.constraint_type == "foreignkey": + return ("remove_fk", self.to_constraint()) + else: + return ("remove_constraint", self.to_constraint()) + + @classmethod + def from_constraint(cls, constraint: Constraint) -> DropConstraintOp: + types = { + "unique_constraint": "unique", + "foreign_key_constraint": "foreignkey", + "primary_key_constraint": "primary", + "check_constraint": "check", + "column_check_constraint": "check", + "table_or_column_check_constraint": "check", + } + + constraint_table = sqla_compat._table_for_constraint(constraint) + return cls( + sqla_compat.constraint_name_or_none(constraint.name), + constraint_table.name, + schema=constraint_table.schema, + type_=types.get(constraint.__visit_name__), + _reverse=AddConstraintOp.from_constraint(constraint), + ) + + def to_constraint(self) -> Constraint: + if self._reverse is not None: + constraint = self._reverse.to_constraint() + constraint.name = self.constraint_name + constraint_table = sqla_compat._table_for_constraint(constraint) + constraint_table.name = self.table_name + constraint_table.schema = self.schema + + return constraint + else: + raise ValueError( + "constraint cannot be produced; " + "original constraint is not present" + ) + + @classmethod + def drop_constraint( + cls, + operations: Operations, + constraint_name: str, + table_name: str, + type_: Optional[str] = None, + *, + schema: Optional[str] = None, + ) -> None: + r"""Drop a constraint of the given name, typically via DROP CONSTRAINT. + + :param constraint_name: name of the constraint. + :param table_name: table name. + :param type\_: optional, required on MySQL. can be + 'foreignkey', 'primary', 'unique', or 'check'. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + + op = cls(constraint_name, table_name, type_=type_, schema=schema) + return operations.invoke(op) + + @classmethod + def batch_drop_constraint( + cls, + operations: BatchOperations, + constraint_name: str, + type_: Optional[str] = None, + ) -> None: + """Issue a "drop constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``table_name`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.drop_constraint` + + """ + op = cls( + constraint_name, + operations.impl.table_name, + type_=type_, + schema=operations.impl.schema, + ) + return operations.invoke(op) + + +@Operations.register_operation("create_primary_key") +@BatchOperations.register_operation( + "create_primary_key", "batch_create_primary_key" +) +@AddConstraintOp.register_add_constraint("primary_key_constraint") +class CreatePrimaryKeyOp(AddConstraintOp): + """Represent a create primary key operation.""" + + constraint_type = "primarykey" + + def __init__( + self, + constraint_name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + columns: Sequence[str], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + self.constraint_name = constraint_name + self.table_name = table_name + self.columns = columns + self.schema = schema + self.kw = kw + + @classmethod + def from_constraint(cls, constraint: Constraint) -> CreatePrimaryKeyOp: + constraint_table = sqla_compat._table_for_constraint(constraint) + pk_constraint = cast("PrimaryKeyConstraint", constraint) + return cls( + sqla_compat.constraint_name_or_none(pk_constraint.name), + constraint_table.name, + pk_constraint.columns.keys(), + schema=constraint_table.schema, + **pk_constraint.dialect_kwargs, + ) + + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> PrimaryKeyConstraint: + schema_obj = schemaobj.SchemaObjects(migration_context) + + return schema_obj.primary_key_constraint( + self.constraint_name, + self.table_name, + self.columns, + schema=self.schema, + **self.kw, + ) + + @classmethod + def create_primary_key( + cls, + operations: Operations, + constraint_name: Optional[str], + table_name: str, + columns: List[str], + *, + schema: Optional[str] = None, + ) -> None: + """Issue a "create primary key" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_primary_key("pk_my_table", "my_table", ["id", "version"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.PrimaryKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the primary key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions` + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the target table. + :param columns: a list of string column names to be applied to the + primary key constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + op = cls(constraint_name, table_name, columns, schema=schema) + return operations.invoke(op) + + @classmethod + def batch_create_primary_key( + cls, + operations: BatchOperations, + constraint_name: str, + columns: List[str], + ) -> None: + """Issue a "create primary key" instruction using the + current batch migration context. + + The batch form of this call omits the ``table_name`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_primary_key` + + """ + op = cls( + constraint_name, + operations.impl.table_name, + columns, + schema=operations.impl.schema, + ) + return operations.invoke(op) + + +@Operations.register_operation("create_unique_constraint") +@BatchOperations.register_operation( + "create_unique_constraint", "batch_create_unique_constraint" +) +@AddConstraintOp.register_add_constraint("unique_constraint") +class CreateUniqueConstraintOp(AddConstraintOp): + """Represent a create unique constraint operation.""" + + constraint_type = "unique" + + def __init__( + self, + constraint_name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + columns: Sequence[str], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + self.constraint_name = constraint_name + self.table_name = table_name + self.columns = columns + self.schema = schema + self.kw = kw + + @classmethod + def from_constraint( + cls, constraint: Constraint + ) -> CreateUniqueConstraintOp: + constraint_table = sqla_compat._table_for_constraint(constraint) + + uq_constraint = cast("UniqueConstraint", constraint) + + kw: dict = {} + if uq_constraint.deferrable: + kw["deferrable"] = uq_constraint.deferrable + if uq_constraint.initially: + kw["initially"] = uq_constraint.initially + kw.update(uq_constraint.dialect_kwargs) + return cls( + sqla_compat.constraint_name_or_none(uq_constraint.name), + constraint_table.name, + [c.name for c in uq_constraint.columns], + schema=constraint_table.schema, + **kw, + ) + + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> UniqueConstraint: + schema_obj = schemaobj.SchemaObjects(migration_context) + return schema_obj.unique_constraint( + self.constraint_name, + self.table_name, + self.columns, + schema=self.schema, + **self.kw, + ) + + @classmethod + def create_unique_constraint( + cls, + operations: Operations, + constraint_name: Optional[str], + table_name: str, + columns: Sequence[str], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> Any: + """Issue a "create unique constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + op.create_unique_constraint("uq_user_name", "user", ["name"]) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.UniqueConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param name: Name of the unique constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param columns: a list of string column names in the + source table. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + + op = cls(constraint_name, table_name, columns, schema=schema, **kw) + return operations.invoke(op) + + @classmethod + def batch_create_unique_constraint( + cls, + operations: BatchOperations, + constraint_name: str, + columns: Sequence[str], + **kw: Any, + ) -> Any: + """Issue a "create unique constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_unique_constraint` + + """ + kw["schema"] = operations.impl.schema + op = cls(constraint_name, operations.impl.table_name, columns, **kw) + return operations.invoke(op) + + +@Operations.register_operation("create_foreign_key") +@BatchOperations.register_operation( + "create_foreign_key", "batch_create_foreign_key" +) +@AddConstraintOp.register_add_constraint("foreign_key_constraint") +class CreateForeignKeyOp(AddConstraintOp): + """Represent a create foreign key constraint operation.""" + + constraint_type = "foreignkey" + + def __init__( + self, + constraint_name: Optional[sqla_compat._ConstraintNameDefined], + source_table: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + **kw: Any, + ) -> None: + self.constraint_name = constraint_name + self.source_table = source_table + self.referent_table = referent_table + self.local_cols = local_cols + self.remote_cols = remote_cols + self.kw = kw + + def to_diff_tuple(self) -> Tuple[str, ForeignKeyConstraint]: + return ("add_fk", self.to_constraint()) + + @classmethod + def from_constraint(cls, constraint: Constraint) -> CreateForeignKeyOp: + fk_constraint = cast("ForeignKeyConstraint", constraint) + kw: dict = {} + if fk_constraint.onupdate: + kw["onupdate"] = fk_constraint.onupdate + if fk_constraint.ondelete: + kw["ondelete"] = fk_constraint.ondelete + if fk_constraint.initially: + kw["initially"] = fk_constraint.initially + if fk_constraint.deferrable: + kw["deferrable"] = fk_constraint.deferrable + if fk_constraint.use_alter: + kw["use_alter"] = fk_constraint.use_alter + if fk_constraint.match: + kw["match"] = fk_constraint.match + + ( + source_schema, + source_table, + source_columns, + target_schema, + target_table, + target_columns, + onupdate, + ondelete, + deferrable, + initially, + ) = sqla_compat._fk_spec(fk_constraint) + + kw["source_schema"] = source_schema + kw["referent_schema"] = target_schema + kw.update(fk_constraint.dialect_kwargs) + return cls( + sqla_compat.constraint_name_or_none(fk_constraint.name), + source_table, + target_table, + source_columns, + target_columns, + **kw, + ) + + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> ForeignKeyConstraint: + schema_obj = schemaobj.SchemaObjects(migration_context) + return schema_obj.foreign_key_constraint( + self.constraint_name, + self.source_table, + self.referent_table, + self.local_cols, + self.remote_cols, + **self.kw, + ) + + @classmethod + def create_foreign_key( + cls, + operations: Operations, + constraint_name: Optional[str], + source_table: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + *, + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + source_schema: Optional[str] = None, + referent_schema: Optional[str] = None, + **dialect_kw: Any, + ) -> None: + """Issue a "create foreign key" instruction using the + current migration context. + + e.g.:: + + from alembic import op + + op.create_foreign_key( + "fk_user_address", + "address", + "user", + ["user_id"], + ["id"], + ) + + This internally generates a :class:`~sqlalchemy.schema.Table` object + containing the necessary columns, then generates a new + :class:`~sqlalchemy.schema.ForeignKeyConstraint` + object which it then associates with the + :class:`~sqlalchemy.schema.Table`. + Any event listeners associated with this action will be fired + off normally. The :class:`~sqlalchemy.schema.AddConstraint` + construct is ultimately used to generate the ALTER statement. + + :param constraint_name: Name of the foreign key constraint. The name + is necessary so that an ALTER statement can be emitted. For setups + that use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param source_table: String name of the source table. + :param referent_table: String name of the destination table. + :param local_cols: a list of string column names in the + source table. + :param remote_cols: a list of string column names in the + remote table. + :param onupdate: Optional string. If set, emit ON UPDATE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param ondelete: Optional string. If set, emit ON DELETE when + issuing DDL for this constraint. Typical values include CASCADE, + DELETE and RESTRICT. + :param deferrable: optional bool. If set, emit DEFERRABLE or NOT + DEFERRABLE when issuing DDL for this constraint. + :param source_schema: Optional schema name of the source table. + :param referent_schema: Optional schema name of the destination table. + + """ + + op = cls( + constraint_name, + source_table, + referent_table, + local_cols, + remote_cols, + onupdate=onupdate, + ondelete=ondelete, + deferrable=deferrable, + source_schema=source_schema, + referent_schema=referent_schema, + initially=initially, + match=match, + **dialect_kw, + ) + return operations.invoke(op) + + @classmethod + def batch_create_foreign_key( + cls, + operations: BatchOperations, + constraint_name: str, + referent_table: str, + local_cols: List[str], + remote_cols: List[str], + *, + referent_schema: Optional[str] = None, + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + **dialect_kw: Any, + ) -> None: + """Issue a "create foreign key" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``source_schema`` + arguments from the call. + + e.g.:: + + with batch_alter_table("address") as batch_op: + batch_op.create_foreign_key( + "fk_user_address", + "user", + ["user_id"], + ["id"], + ) + + .. seealso:: + + :meth:`.Operations.create_foreign_key` + + """ + op = cls( + constraint_name, + operations.impl.table_name, + referent_table, + local_cols, + remote_cols, + onupdate=onupdate, + ondelete=ondelete, + deferrable=deferrable, + source_schema=operations.impl.schema, + referent_schema=referent_schema, + initially=initially, + match=match, + **dialect_kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("create_check_constraint") +@BatchOperations.register_operation( + "create_check_constraint", "batch_create_check_constraint" +) +@AddConstraintOp.register_add_constraint("check_constraint") +@AddConstraintOp.register_add_constraint("table_or_column_check_constraint") +@AddConstraintOp.register_add_constraint("column_check_constraint") +class CreateCheckConstraintOp(AddConstraintOp): + """Represent a create check constraint operation.""" + + constraint_type = "check" + + def __init__( + self, + constraint_name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + condition: Union[str, TextClause, ColumnElement[Any]], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + self.constraint_name = constraint_name + self.table_name = table_name + self.condition = condition + self.schema = schema + self.kw = kw + + @classmethod + def from_constraint( + cls, constraint: Constraint + ) -> CreateCheckConstraintOp: + constraint_table = sqla_compat._table_for_constraint(constraint) + + ck_constraint = cast("CheckConstraint", constraint) + return cls( + sqla_compat.constraint_name_or_none(ck_constraint.name), + constraint_table.name, + cast("ColumnElement[Any]", ck_constraint.sqltext), + schema=constraint_table.schema, + **ck_constraint.dialect_kwargs, + ) + + def to_constraint( + self, migration_context: Optional[MigrationContext] = None + ) -> CheckConstraint: + schema_obj = schemaobj.SchemaObjects(migration_context) + return schema_obj.check_constraint( + self.constraint_name, + self.table_name, + self.condition, + schema=self.schema, + **self.kw, + ) + + @classmethod + def create_check_constraint( + cls, + operations: Operations, + constraint_name: Optional[str], + table_name: str, + condition: Union[str, ColumnElement[bool], TextClause], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue a "create check constraint" instruction using the + current migration context. + + e.g.:: + + from alembic import op + from sqlalchemy.sql import column, func + + op.create_check_constraint( + "ck_user_name_len", + "user", + func.len(column("name")) > 5, + ) + + CHECK constraints are usually against a SQL expression, so ad-hoc + table metadata is usually needed. The function will convert the given + arguments into a :class:`sqlalchemy.schema.CheckConstraint` bound + to an anonymous table in order to emit the CREATE statement. + + :param name: Name of the check constraint. The name is necessary + so that an ALTER statement can be emitted. For setups that + use an automated naming scheme such as that described at + :ref:`sqla:constraint_naming_conventions`, + ``name`` here can be ``None``, as the event listener will + apply the name to the constraint object when it is associated + with the table. + :param table_name: String name of the source table. + :param condition: SQL expression that's the condition of the + constraint. Can be a string or SQLAlchemy expression language + structure. + :param deferrable: optional bool. If set, emit DEFERRABLE or + NOT DEFERRABLE when issuing DDL for this constraint. + :param initially: optional string. If set, emit INITIALLY + when issuing DDL for this constraint. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + op = cls(constraint_name, table_name, condition, schema=schema, **kw) + return operations.invoke(op) + + @classmethod + def batch_create_check_constraint( + cls, + operations: BatchOperations, + constraint_name: str, + condition: Union[str, ColumnElement[bool], TextClause], + **kw: Any, + ) -> None: + """Issue a "create check constraint" instruction using the + current batch migration context. + + The batch form of this call omits the ``source`` and ``schema`` + arguments from the call. + + .. seealso:: + + :meth:`.Operations.create_check_constraint` + + """ + op = cls( + constraint_name, + operations.impl.table_name, + condition, + schema=operations.impl.schema, + **kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("create_index") +@BatchOperations.register_operation("create_index", "batch_create_index") +class CreateIndexOp(MigrateOperation): + """Represent a create index operation.""" + + def __init__( + self, + index_name: Optional[str], + table_name: str, + columns: Sequence[Union[str, TextClause, ColumnElement[Any]]], + *, + schema: Optional[str] = None, + unique: bool = False, + if_not_exists: Optional[bool] = None, + **kw: Any, + ) -> None: + self.index_name = index_name + self.table_name = table_name + self.columns = columns + self.schema = schema + self.unique = unique + self.if_not_exists = if_not_exists + self.kw = kw + + def reverse(self) -> DropIndexOp: + return DropIndexOp.from_index(self.to_index()) + + def to_diff_tuple(self) -> Tuple[str, Index]: + return ("add_index", self.to_index()) + + @classmethod + def from_index(cls, index: Index) -> CreateIndexOp: + assert index.table is not None + return cls( + index.name, # type: ignore[arg-type] + index.table.name, + sqla_compat._get_index_expressions(index), + schema=index.table.schema, + unique=index.unique, + **index.kwargs, + ) + + def to_index( + self, migration_context: Optional[MigrationContext] = None + ) -> Index: + schema_obj = schemaobj.SchemaObjects(migration_context) + + idx = schema_obj.index( + self.index_name, + self.table_name, + self.columns, + schema=self.schema, + unique=self.unique, + **self.kw, + ) + return idx + + @classmethod + def create_index( + cls, + operations: Operations, + index_name: Optional[str], + table_name: str, + columns: Sequence[Union[str, TextClause, Function[Any]]], + *, + schema: Optional[str] = None, + unique: bool = False, + if_not_exists: Optional[bool] = None, + **kw: Any, + ) -> None: + r"""Issue a "create index" instruction using the current + migration context. + + e.g.:: + + from alembic import op + + op.create_index("ik_test", "t1", ["foo", "bar"]) + + Functional indexes can be produced by using the + :func:`sqlalchemy.sql.expression.text` construct:: + + from alembic import op + from sqlalchemy import text + + op.create_index("ik_test", "t1", [text("lower(foo)")]) + + :param index_name: name of the index. + :param table_name: name of the owning table. + :param columns: a list consisting of string column names and/or + :func:`~sqlalchemy.sql.expression.text` constructs. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param unique: If True, create a unique index. + + :param quote: Force quoting of this column's name on or off, + corresponding to ``True`` or ``False``. When left at its default + of ``None``, the column identifier will be quoted according to + whether the name is case sensitive (identifiers with at least one + upper case character are treated as case sensitive), or if it's a + reserved word. This flag is only needed to force quoting of a + reserved word which is not known by the SQLAlchemy dialect. + + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ + op = cls( + index_name, + table_name, + columns, + schema=schema, + unique=unique, + if_not_exists=if_not_exists, + **kw, + ) + return operations.invoke(op) + + @classmethod + def batch_create_index( + cls, + operations: BatchOperations, + index_name: str, + columns: List[str], + **kw: Any, + ) -> None: + """Issue a "create index" instruction using the + current batch migration context. + + .. seealso:: + + :meth:`.Operations.create_index` + + """ + + op = cls( + index_name, + operations.impl.table_name, + columns, + schema=operations.impl.schema, + **kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("drop_index") +@BatchOperations.register_operation("drop_index", "batch_drop_index") +class DropIndexOp(MigrateOperation): + """Represent a drop index operation.""" + + def __init__( + self, + index_name: Union[quoted_name, str, conv], + table_name: Optional[str] = None, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + _reverse: Optional[CreateIndexOp] = None, + **kw: Any, + ) -> None: + self.index_name = index_name + self.table_name = table_name + self.schema = schema + self.if_exists = if_exists + self._reverse = _reverse + self.kw = kw + + def to_diff_tuple(self) -> Tuple[str, Index]: + return ("remove_index", self.to_index()) + + def reverse(self) -> CreateIndexOp: + return CreateIndexOp.from_index(self.to_index()) + + @classmethod + def from_index(cls, index: Index) -> DropIndexOp: + assert index.table is not None + return cls( + index.name, # type: ignore[arg-type] + table_name=index.table.name, + schema=index.table.schema, + _reverse=CreateIndexOp.from_index(index), + **index.kwargs, + ) + + def to_index( + self, migration_context: Optional[MigrationContext] = None + ) -> Index: + schema_obj = schemaobj.SchemaObjects(migration_context) + + # need a dummy column name here since SQLAlchemy + # 0.7.6 and further raises on Index with no columns + return schema_obj.index( + self.index_name, + self.table_name, + self._reverse.columns if self._reverse else ["x"], + schema=self.schema, + **self.kw, + ) + + @classmethod + def drop_index( + cls, + operations: Operations, + index_name: str, + table_name: Optional[str] = None, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + **kw: Any, + ) -> None: + r"""Issue a "drop index" instruction using the current + migration context. + + e.g.:: + + drop_index("accounts") + + :param index_name: name of the index. + :param table_name: name of the owning table. Some + backends such as Microsoft SQL Server require this. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + :param if_exists: If True, adds IF EXISTS operator when + dropping the index. + + .. versionadded:: 1.12.0 + + :param \**kw: Additional keyword arguments not mentioned above are + dialect specific, and passed in the form + ``_``. + See the documentation regarding an individual dialect at + :ref:`dialect_toplevel` for detail on documented arguments. + + """ + op = cls( + index_name, + table_name=table_name, + schema=schema, + if_exists=if_exists, + **kw, + ) + return operations.invoke(op) + + @classmethod + def batch_drop_index( + cls, operations: BatchOperations, index_name: str, **kw: Any + ) -> None: + """Issue a "drop index" instruction using the + current batch migration context. + + .. seealso:: + + :meth:`.Operations.drop_index` + + """ + + op = cls( + index_name, + table_name=operations.impl.table_name, + schema=operations.impl.schema, + **kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("create_table") +class CreateTableOp(MigrateOperation): + """Represent a create table operation.""" + + def __init__( + self, + table_name: str, + columns: Sequence[SchemaItem], + *, + schema: Optional[str] = None, + _namespace_metadata: Optional[MetaData] = None, + _constraints_included: bool = False, + **kw: Any, + ) -> None: + self.table_name = table_name + self.columns = columns + self.schema = schema + self.info = kw.pop("info", {}) + self.comment = kw.pop("comment", None) + self.prefixes = kw.pop("prefixes", None) + self.kw = kw + self._namespace_metadata = _namespace_metadata + self._constraints_included = _constraints_included + + def reverse(self) -> DropTableOp: + return DropTableOp.from_table( + self.to_table(), _namespace_metadata=self._namespace_metadata + ) + + def to_diff_tuple(self) -> Tuple[str, Table]: + return ("add_table", self.to_table()) + + @classmethod + def from_table( + cls, table: Table, *, _namespace_metadata: Optional[MetaData] = None + ) -> CreateTableOp: + if _namespace_metadata is None: + _namespace_metadata = table.metadata + + return cls( + table.name, + list(table.c) + list(table.constraints), # type:ignore[arg-type] + schema=table.schema, + _namespace_metadata=_namespace_metadata, + # given a Table() object, this Table will contain full Index() + # and UniqueConstraint objects already constructed in response to + # each unique=True / index=True flag on a Column. Carry this + # state along so that when we re-convert back into a Table, we + # skip unique=True/index=True so that these constraints are + # not doubled up. see #844 #848 + _constraints_included=True, + comment=table.comment, + info=dict(table.info), + prefixes=list(table._prefixes), + **table.kwargs, + ) + + def to_table( + self, migration_context: Optional[MigrationContext] = None + ) -> Table: + schema_obj = schemaobj.SchemaObjects(migration_context) + + return schema_obj.table( + self.table_name, + *self.columns, + schema=self.schema, + prefixes=list(self.prefixes) if self.prefixes else [], + comment=self.comment, + info=self.info.copy() if self.info else {}, + _constraints_included=self._constraints_included, + **self.kw, + ) + + @classmethod + def create_table( + cls, + operations: Operations, + table_name: str, + *columns: SchemaItem, + **kw: Any, + ) -> Table: + r"""Issue a "create table" instruction using the current migration + context. + + This directive receives an argument list similar to that of the + traditional :class:`sqlalchemy.schema.Table` construct, but without the + metadata:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + Note that :meth:`.create_table` accepts + :class:`~sqlalchemy.schema.Column` + constructs directly from the SQLAlchemy library. In particular, + default values to be created on the database side are + specified using the ``server_default`` parameter, and not + ``default`` which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the "timestamp" column + op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + The function also returns a newly created + :class:`~sqlalchemy.schema.Table` object, corresponding to the table + specification given, which is suitable for + immediate SQL operations, in particular + :meth:`.Operations.bulk_insert`:: + + from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column + from alembic import op + + account_table = op.create_table( + "account", + Column("id", INTEGER, primary_key=True), + Column("name", VARCHAR(50), nullable=False), + Column("description", NVARCHAR(200)), + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + op.bulk_insert( + account_table, + [ + {"name": "A1", "description": "account 1"}, + {"name": "A2", "description": "account 2"}, + ], + ) + + :param table_name: Name of the table + :param \*columns: collection of :class:`~sqlalchemy.schema.Column` + objects within + the table, as well as optional :class:`~sqlalchemy.schema.Constraint` + objects + and :class:`~.sqlalchemy.schema.Index` objects. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + :return: the :class:`~sqlalchemy.schema.Table` object corresponding + to the parameters given. + + """ + op = cls(table_name, columns, **kw) + return operations.invoke(op) + + +@Operations.register_operation("drop_table") +class DropTableOp(MigrateOperation): + """Represent a drop table operation.""" + + def __init__( + self, + table_name: str, + *, + schema: Optional[str] = None, + table_kw: Optional[MutableMapping[Any, Any]] = None, + _reverse: Optional[CreateTableOp] = None, + ) -> None: + self.table_name = table_name + self.schema = schema + self.table_kw = table_kw or {} + self.comment = self.table_kw.pop("comment", None) + self.info = self.table_kw.pop("info", None) + self.prefixes = self.table_kw.pop("prefixes", None) + self._reverse = _reverse + + def to_diff_tuple(self) -> Tuple[str, Table]: + return ("remove_table", self.to_table()) + + def reverse(self) -> CreateTableOp: + return CreateTableOp.from_table(self.to_table()) + + @classmethod + def from_table( + cls, table: Table, *, _namespace_metadata: Optional[MetaData] = None + ) -> DropTableOp: + return cls( + table.name, + schema=table.schema, + table_kw={ + "comment": table.comment, + "info": dict(table.info), + "prefixes": list(table._prefixes), + **table.kwargs, + }, + _reverse=CreateTableOp.from_table( + table, _namespace_metadata=_namespace_metadata + ), + ) + + def to_table( + self, migration_context: Optional[MigrationContext] = None + ) -> Table: + if self._reverse: + cols_and_constraints = self._reverse.columns + else: + cols_and_constraints = [] + + schema_obj = schemaobj.SchemaObjects(migration_context) + t = schema_obj.table( + self.table_name, + *cols_and_constraints, + comment=self.comment, + info=self.info.copy() if self.info else {}, + prefixes=list(self.prefixes) if self.prefixes else [], + schema=self.schema, + _constraints_included=self._reverse._constraints_included + if self._reverse + else False, + **self.table_kw, + ) + return t + + @classmethod + def drop_table( + cls, + operations: Operations, + table_name: str, + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + r"""Issue a "drop table" instruction using the current + migration context. + + + e.g.:: + + drop_table("accounts") + + :param table_name: Name of the table + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param \**kw: Other keyword arguments are passed to the underlying + :class:`sqlalchemy.schema.Table` object created for the command. + + """ + op = cls(table_name, schema=schema, table_kw=kw) + operations.invoke(op) + + +class AlterTableOp(MigrateOperation): + """Represent an alter table operation.""" + + def __init__( + self, + table_name: str, + *, + schema: Optional[str] = None, + ) -> None: + self.table_name = table_name + self.schema = schema + + +@Operations.register_operation("rename_table") +class RenameTableOp(AlterTableOp): + """Represent a rename table operation.""" + + def __init__( + self, + old_table_name: str, + new_table_name: str, + *, + schema: Optional[str] = None, + ) -> None: + super().__init__(old_table_name, schema=schema) + self.new_table_name = new_table_name + + @classmethod + def rename_table( + cls, + operations: Operations, + old_table_name: str, + new_table_name: str, + *, + schema: Optional[str] = None, + ) -> None: + """Emit an ALTER TABLE to rename a table. + + :param old_table_name: old name. + :param new_table_name: new name. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + op = cls(old_table_name, new_table_name, schema=schema) + return operations.invoke(op) + + +@Operations.register_operation("create_table_comment") +@BatchOperations.register_operation( + "create_table_comment", "batch_create_table_comment" +) +class CreateTableCommentOp(AlterTableOp): + """Represent a COMMENT ON `table` operation.""" + + def __init__( + self, + table_name: str, + comment: Optional[str], + *, + schema: Optional[str] = None, + existing_comment: Optional[str] = None, + ) -> None: + self.table_name = table_name + self.comment = comment + self.existing_comment = existing_comment + self.schema = schema + + @classmethod + def create_table_comment( + cls, + operations: Operations, + table_name: str, + comment: Optional[str], + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + ) -> None: + """Emit a COMMENT ON operation to set the comment for a table. + + :param table_name: string name of the target table. + :param comment: string value of the comment being registered against + the specified table. + :param existing_comment: String value of a comment + already registered on the specified table, used within autogenerate + so that the operation is reversible, but not required for direct + use. + + .. seealso:: + + :meth:`.Operations.drop_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ + + op = cls( + table_name, + comment, + existing_comment=existing_comment, + schema=schema, + ) + return operations.invoke(op) + + @classmethod + def batch_create_table_comment( + cls, + operations: BatchOperations, + comment: Optional[str], + *, + existing_comment: Optional[str] = None, + ) -> None: + """Emit a COMMENT ON operation to set the comment for a table + using the current batch migration context. + + :param comment: string value of the comment being registered against + the specified table. + :param existing_comment: String value of a comment + already registered on the specified table, used within autogenerate + so that the operation is reversible, but not required for direct + use. + + """ + + op = cls( + operations.impl.table_name, + comment, + existing_comment=existing_comment, + schema=operations.impl.schema, + ) + return operations.invoke(op) + + def reverse(self): + """Reverses the COMMENT ON operation against a table.""" + if self.existing_comment is None: + return DropTableCommentOp( + self.table_name, + existing_comment=self.comment, + schema=self.schema, + ) + else: + return CreateTableCommentOp( + self.table_name, + self.existing_comment, + existing_comment=self.comment, + schema=self.schema, + ) + + def to_table(self, migration_context=None): + schema_obj = schemaobj.SchemaObjects(migration_context) + + return schema_obj.table( + self.table_name, schema=self.schema, comment=self.comment + ) + + def to_diff_tuple(self): + return ("add_table_comment", self.to_table(), self.existing_comment) + + +@Operations.register_operation("drop_table_comment") +@BatchOperations.register_operation( + "drop_table_comment", "batch_drop_table_comment" +) +class DropTableCommentOp(AlterTableOp): + """Represent an operation to remove the comment from a table.""" + + def __init__( + self, + table_name: str, + *, + schema: Optional[str] = None, + existing_comment: Optional[str] = None, + ) -> None: + self.table_name = table_name + self.existing_comment = existing_comment + self.schema = schema + + @classmethod + def drop_table_comment( + cls, + operations: Operations, + table_name: str, + *, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + ) -> None: + """Issue a "drop table comment" operation to + remove an existing comment set on a table. + + :param table_name: string name of the target table. + :param existing_comment: An optional string value of a comment already + registered on the specified table. + + .. seealso:: + + :meth:`.Operations.create_table_comment` + + :paramref:`.Operations.alter_column.comment` + + """ + + op = cls(table_name, existing_comment=existing_comment, schema=schema) + return operations.invoke(op) + + @classmethod + def batch_drop_table_comment( + cls, + operations: BatchOperations, + *, + existing_comment: Optional[str] = None, + ) -> None: + """Issue a "drop table comment" operation to + remove an existing comment set on a table using the current + batch operations context. + + :param existing_comment: An optional string value of a comment already + registered on the specified table. + + """ + + op = cls( + operations.impl.table_name, + existing_comment=existing_comment, + schema=operations.impl.schema, + ) + return operations.invoke(op) + + def reverse(self): + """Reverses the COMMENT ON operation against a table.""" + return CreateTableCommentOp( + self.table_name, self.existing_comment, schema=self.schema + ) + + def to_table(self, migration_context=None): + schema_obj = schemaobj.SchemaObjects(migration_context) + + return schema_obj.table(self.table_name, schema=self.schema) + + def to_diff_tuple(self): + return ("remove_table_comment", self.to_table()) + + +@Operations.register_operation("alter_column") +@BatchOperations.register_operation("alter_column", "batch_alter_column") +class AlterColumnOp(AlterTableOp): + """Represent an alter column operation.""" + + def __init__( + self, + table_name: str, + column_name: str, + *, + schema: Optional[str] = None, + existing_type: Optional[Any] = None, + existing_server_default: Any = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + modify_nullable: Optional[bool] = None, + modify_comment: Optional[Union[str, Literal[False]]] = False, + modify_server_default: Any = False, + modify_name: Optional[str] = None, + modify_type: Optional[Any] = None, + **kw: Any, + ) -> None: + super().__init__(table_name, schema=schema) + self.column_name = column_name + self.existing_type = existing_type + self.existing_server_default = existing_server_default + self.existing_nullable = existing_nullable + self.existing_comment = existing_comment + self.modify_nullable = modify_nullable + self.modify_comment = modify_comment + self.modify_server_default = modify_server_default + self.modify_name = modify_name + self.modify_type = modify_type + self.kw = kw + + def to_diff_tuple(self) -> Any: + col_diff = [] + schema, tname, cname = self.schema, self.table_name, self.column_name + + if self.modify_type is not None: + col_diff.append( + ( + "modify_type", + schema, + tname, + cname, + { + "existing_nullable": self.existing_nullable, + "existing_server_default": ( + self.existing_server_default + ), + "existing_comment": self.existing_comment, + }, + self.existing_type, + self.modify_type, + ) + ) + + if self.modify_nullable is not None: + col_diff.append( + ( + "modify_nullable", + schema, + tname, + cname, + { + "existing_type": self.existing_type, + "existing_server_default": ( + self.existing_server_default + ), + "existing_comment": self.existing_comment, + }, + self.existing_nullable, + self.modify_nullable, + ) + ) + + if self.modify_server_default is not False: + col_diff.append( + ( + "modify_default", + schema, + tname, + cname, + { + "existing_nullable": self.existing_nullable, + "existing_type": self.existing_type, + "existing_comment": self.existing_comment, + }, + self.existing_server_default, + self.modify_server_default, + ) + ) + + if self.modify_comment is not False: + col_diff.append( + ( + "modify_comment", + schema, + tname, + cname, + { + "existing_nullable": self.existing_nullable, + "existing_type": self.existing_type, + "existing_server_default": ( + self.existing_server_default + ), + }, + self.existing_comment, + self.modify_comment, + ) + ) + + return col_diff + + def has_changes(self) -> bool: + hc1 = ( + self.modify_nullable is not None + or self.modify_server_default is not False + or self.modify_type is not None + or self.modify_comment is not False + ) + if hc1: + return True + for kw in self.kw: + if kw.startswith("modify_"): + return True + else: + return False + + def reverse(self) -> AlterColumnOp: + kw = self.kw.copy() + kw["existing_type"] = self.existing_type + kw["existing_nullable"] = self.existing_nullable + kw["existing_server_default"] = self.existing_server_default + kw["existing_comment"] = self.existing_comment + if self.modify_type is not None: + kw["modify_type"] = self.modify_type + if self.modify_nullable is not None: + kw["modify_nullable"] = self.modify_nullable + if self.modify_server_default is not False: + kw["modify_server_default"] = self.modify_server_default + if self.modify_comment is not False: + kw["modify_comment"] = self.modify_comment + + # TODO: make this a little simpler + all_keys = { + m.group(1) + for m in [re.match(r"^(?:existing_|modify_)(.+)$", k) for k in kw] + if m + } + + for k in all_keys: + if "modify_%s" % k in kw: + swap = kw["existing_%s" % k] + kw["existing_%s" % k] = kw["modify_%s" % k] + kw["modify_%s" % k] = swap + + return self.__class__( + self.table_name, self.column_name, schema=self.schema, **kw + ) + + @classmethod + def alter_column( + cls, + operations: Operations, + table_name: str, + column_name: str, + *, + nullable: Optional[bool] = None, + comment: Optional[Union[str, Literal[False]]] = False, + server_default: Any = False, + new_column_name: Optional[str] = None, + type_: Optional[Union[TypeEngine, Type[TypeEngine]]] = None, + existing_type: Optional[Union[TypeEngine, Type[TypeEngine]]] = None, + existing_server_default: Optional[ + Union[str, bool, Identity, Computed] + ] = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + r"""Issue an "alter column" instruction using the + current migration context. + + Generally, only that aspect of the column which + is being changed, i.e. name, type, nullability, + default, needs to be specified. Multiple changes + can also be specified at once and the backend should + "do the right thing", emitting each change either + separately or together as the backend allows. + + MySQL has special requirements here, since MySQL + cannot ALTER a column without a full specification. + When producing MySQL-compatible migration files, + it is recommended that the ``existing_type``, + ``existing_server_default``, and ``existing_nullable`` + parameters be present, if not being altered. + + Type changes which are against the SQLAlchemy + "schema" types :class:`~sqlalchemy.types.Boolean` + and :class:`~sqlalchemy.types.Enum` may also + add or drop constraints which accompany those + types on backends that don't support them natively. + The ``existing_type`` argument is + used in this case to identify and remove a previous + constraint that was bound to the type object. + + :param table_name: string name of the target table. + :param column_name: string name of the target column, + as it exists before the operation begins. + :param nullable: Optional; specify ``True`` or ``False`` + to alter the column's nullability. + :param server_default: Optional; specify a string + SQL expression, :func:`~sqlalchemy.sql.expression.text`, + or :class:`~sqlalchemy.schema.DefaultClause` to indicate + an alteration to the column's default value. + Set to ``None`` to have the default removed. + :param comment: optional string text of a new comment to add to the + column. + :param new_column_name: Optional; specify a string name here to + indicate the new name within a column rename operation. + :param type\_: Optional; a :class:`~sqlalchemy.types.TypeEngine` + type object to specify a change to the column's type. + For SQLAlchemy types that also indicate a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, :class:`~sqlalchemy.types.Enum`), + the constraint is also generated. + :param autoincrement: set the ``AUTO_INCREMENT`` flag of the column; + currently understood by the MySQL dialect. + :param existing_type: Optional; a + :class:`~sqlalchemy.types.TypeEngine` + type object to specify the previous type. This + is required for all MySQL column alter operations that + don't otherwise specify a new type, as well as for + when nullability is being changed on a SQL Server + column. It is also used if the type is a so-called + SQLAlchemy "schema" type which may define a constraint (i.e. + :class:`~sqlalchemy.types.Boolean`, + :class:`~sqlalchemy.types.Enum`), + so that the constraint can be dropped. + :param existing_server_default: Optional; The existing + default value of the column. Required on MySQL if + an existing default is not being changed; else MySQL + removes the default. + :param existing_nullable: Optional; the existing nullability + of the column. Required on MySQL if the existing nullability + is not being changed; else MySQL sets this to NULL. + :param existing_autoincrement: Optional; the existing autoincrement + of the column. Used for MySQL's system of altering a column + that specifies ``AUTO_INCREMENT``. + :param existing_comment: string text of the existing comment on the + column to be maintained. Required on MySQL if the existing comment + on the column is not being changed. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param postgresql_using: String argument which will indicate a + SQL expression to render within the Postgresql-specific USING clause + within ALTER COLUMN. This string is taken directly as raw SQL which + must explicitly include any necessary quoting or escaping of tokens + within the expression. + + """ + + alt = cls( + table_name, + column_name, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + modify_name=new_column_name, + modify_type=type_, + modify_server_default=server_default, + modify_nullable=nullable, + modify_comment=comment, + **kw, + ) + + return operations.invoke(alt) + + @classmethod + def batch_alter_column( + cls, + operations: BatchOperations, + column_name: str, + *, + nullable: Optional[bool] = None, + comment: Optional[Union[str, Literal[False]]] = False, + server_default: Any = False, + new_column_name: Optional[str] = None, + type_: Optional[Union[TypeEngine, Type[TypeEngine]]] = None, + existing_type: Optional[Union[TypeEngine, Type[TypeEngine]]] = None, + existing_server_default: Optional[ + Union[str, bool, Identity, Computed] + ] = False, + existing_nullable: Optional[bool] = None, + existing_comment: Optional[str] = None, + insert_before: Optional[str] = None, + insert_after: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue an "alter column" instruction using the current + batch migration context. + + Parameters are the same as that of :meth:`.Operations.alter_column`, + as well as the following option(s): + + :param insert_before: String name of an existing column which this + column should be placed before, when creating the new table. + + :param insert_after: String name of an existing column which this + column should be placed after, when creating the new table. If + both :paramref:`.BatchOperations.alter_column.insert_before` + and :paramref:`.BatchOperations.alter_column.insert_after` are + omitted, the column is inserted after the last existing column + in the table. + + .. seealso:: + + :meth:`.Operations.alter_column` + + + """ + alt = cls( + operations.impl.table_name, + column_name, + schema=operations.impl.schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + existing_comment=existing_comment, + modify_name=new_column_name, + modify_type=type_, + modify_server_default=server_default, + modify_nullable=nullable, + modify_comment=comment, + insert_before=insert_before, + insert_after=insert_after, + **kw, + ) + + return operations.invoke(alt) + + +@Operations.register_operation("add_column") +@BatchOperations.register_operation("add_column", "batch_add_column") +class AddColumnOp(AlterTableOp): + """Represent an add column operation.""" + + def __init__( + self, + table_name: str, + column: Column[Any], + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + super().__init__(table_name, schema=schema) + self.column = column + self.kw = kw + + def reverse(self) -> DropColumnOp: + return DropColumnOp.from_column_and_tablename( + self.schema, self.table_name, self.column + ) + + def to_diff_tuple( + self, + ) -> Tuple[str, Optional[str], str, Column[Any]]: + return ("add_column", self.schema, self.table_name, self.column) + + def to_column(self) -> Column: + return self.column + + @classmethod + def from_column(cls, col: Column) -> AddColumnOp: + return cls(col.table.name, col, schema=col.table.schema) + + @classmethod + def from_column_and_tablename( + cls, + schema: Optional[str], + tname: str, + col: Column[Any], + ) -> AddColumnOp: + return cls(tname, col, schema=schema) + + @classmethod + def add_column( + cls, + operations: Operations, + table_name: str, + column: Column[Any], + *, + schema: Optional[str] = None, + ) -> None: + """Issue an "add column" instruction using the current + migration context. + + e.g.:: + + from alembic import op + from sqlalchemy import Column, String + + op.add_column("organization", Column("name", String())) + + The :meth:`.Operations.add_column` method typically corresponds + to the SQL command "ALTER TABLE... ADD COLUMN". Within the scope + of this command, the column's name, datatype, nullability, + and optional server-generated defaults may be indicated. + + .. note:: + + With the exception of NOT NULL constraints or single-column FOREIGN + KEY constraints, other kinds of constraints such as PRIMARY KEY, + UNIQUE or CHECK constraints **cannot** be generated using this + method; for these constraints, refer to operations such as + :meth:`.Operations.create_primary_key` and + :meth:`.Operations.create_check_constraint`. In particular, the + following :class:`~sqlalchemy.schema.Column` parameters are + **ignored**: + + * :paramref:`~sqlalchemy.schema.Column.primary_key` - SQL databases + typically do not support an ALTER operation that can add + individual columns one at a time to an existing primary key + constraint, therefore it's less ambiguous to use the + :meth:`.Operations.create_primary_key` method, which assumes no + existing primary key constraint is present. + * :paramref:`~sqlalchemy.schema.Column.unique` - use the + :meth:`.Operations.create_unique_constraint` method + * :paramref:`~sqlalchemy.schema.Column.index` - use the + :meth:`.Operations.create_index` method + + + The provided :class:`~sqlalchemy.schema.Column` object may include a + :class:`~sqlalchemy.schema.ForeignKey` constraint directive, + referencing a remote table name. For this specific type of constraint, + Alembic will automatically emit a second ALTER statement in order to + add the single-column FOREIGN KEY constraint separately:: + + from alembic import op + from sqlalchemy import Column, INTEGER, ForeignKey + + op.add_column( + "organization", + Column("account_id", INTEGER, ForeignKey("accounts.id")), + ) + + The column argument passed to :meth:`.Operations.add_column` is a + :class:`~sqlalchemy.schema.Column` construct, used in the same way it's + used in SQLAlchemy. In particular, values or functions to be indicated + as producing the column's default value on the database side are + specified using the ``server_default`` parameter, and not ``default`` + which only specifies Python-side defaults:: + + from alembic import op + from sqlalchemy import Column, TIMESTAMP, func + + # specify "DEFAULT NOW" along with the column add + op.add_column( + "account", + Column("timestamp", TIMESTAMP, server_default=func.now()), + ) + + :param table_name: String name of the parent table. + :param column: a :class:`sqlalchemy.schema.Column` object + representing the new column. + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + + """ + + op = cls(table_name, column, schema=schema) + return operations.invoke(op) + + @classmethod + def batch_add_column( + cls, + operations: BatchOperations, + column: Column[Any], + *, + insert_before: Optional[str] = None, + insert_after: Optional[str] = None, + ) -> None: + """Issue an "add column" instruction using the current + batch migration context. + + .. seealso:: + + :meth:`.Operations.add_column` + + """ + + kw = {} + if insert_before: + kw["insert_before"] = insert_before + if insert_after: + kw["insert_after"] = insert_after + + op = cls( + operations.impl.table_name, + column, + schema=operations.impl.schema, + **kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("drop_column") +@BatchOperations.register_operation("drop_column", "batch_drop_column") +class DropColumnOp(AlterTableOp): + """Represent a drop column operation.""" + + def __init__( + self, + table_name: str, + column_name: str, + *, + schema: Optional[str] = None, + _reverse: Optional[AddColumnOp] = None, + **kw: Any, + ) -> None: + super().__init__(table_name, schema=schema) + self.column_name = column_name + self.kw = kw + self._reverse = _reverse + + def to_diff_tuple( + self, + ) -> Tuple[str, Optional[str], str, Column[Any]]: + return ( + "remove_column", + self.schema, + self.table_name, + self.to_column(), + ) + + def reverse(self) -> AddColumnOp: + if self._reverse is None: + raise ValueError( + "operation is not reversible; " + "original column is not present" + ) + + return AddColumnOp.from_column_and_tablename( + self.schema, self.table_name, self._reverse.column + ) + + @classmethod + def from_column_and_tablename( + cls, + schema: Optional[str], + tname: str, + col: Column[Any], + ) -> DropColumnOp: + return cls( + tname, + col.name, + schema=schema, + _reverse=AddColumnOp.from_column_and_tablename(schema, tname, col), + ) + + def to_column( + self, migration_context: Optional[MigrationContext] = None + ) -> Column: + if self._reverse is not None: + return self._reverse.column + schema_obj = schemaobj.SchemaObjects(migration_context) + return schema_obj.column(self.column_name, NULLTYPE) + + @classmethod + def drop_column( + cls, + operations: Operations, + table_name: str, + column_name: str, + *, + schema: Optional[str] = None, + **kw: Any, + ) -> None: + """Issue a "drop column" instruction using the current + migration context. + + e.g.:: + + drop_column("organization", "account_id") + + :param table_name: name of table + :param column_name: name of column + :param schema: Optional schema name to operate within. To control + quoting of the schema outside of the default behavior, use + the SQLAlchemy construct + :class:`~sqlalchemy.sql.elements.quoted_name`. + :param mssql_drop_check: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the CHECK constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.check_constraints, + then exec's a separate DROP CONSTRAINT for that constraint. + :param mssql_drop_default: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop the DEFAULT constraint on the column using a + SQL-script-compatible + block that selects into a @variable from sys.default_constraints, + then exec's a separate DROP CONSTRAINT for that default. + :param mssql_drop_foreign_key: Optional boolean. When ``True``, on + Microsoft SQL Server only, first + drop a single FOREIGN KEY constraint on the column using a + SQL-script-compatible + block that selects into a @variable from + sys.foreign_keys/sys.foreign_key_columns, + then exec's a separate DROP CONSTRAINT for that default. Only + works if the column has exactly one FK constraint which refers to + it, at the moment. + + """ + + op = cls(table_name, column_name, schema=schema, **kw) + return operations.invoke(op) + + @classmethod + def batch_drop_column( + cls, operations: BatchOperations, column_name: str, **kw: Any + ) -> None: + """Issue a "drop column" instruction using the current + batch migration context. + + .. seealso:: + + :meth:`.Operations.drop_column` + + """ + op = cls( + operations.impl.table_name, + column_name, + schema=operations.impl.schema, + **kw, + ) + return operations.invoke(op) + + +@Operations.register_operation("bulk_insert") +class BulkInsertOp(MigrateOperation): + """Represent a bulk insert operation.""" + + def __init__( + self, + table: Union[Table, TableClause], + rows: List[dict], + *, + multiinsert: bool = True, + ) -> None: + self.table = table + self.rows = rows + self.multiinsert = multiinsert + + @classmethod + def bulk_insert( + cls, + operations: Operations, + table: Union[Table, TableClause], + rows: List[dict], + *, + multiinsert: bool = True, + ) -> None: + """Issue a "bulk insert" operation using the current + migration context. + + This provides a means of representing an INSERT of multiple rows + which works equally well in the context of executing on a live + connection as well as that of generating a SQL script. In the + case of a SQL script, the values are rendered inline into the + statement. + + e.g.:: + + from alembic import op + from datetime import date + from sqlalchemy.sql import table, column + from sqlalchemy import String, Integer, Date + + # Create an ad-hoc table to use for the insert statement. + accounts_table = table( + "account", + column("id", Integer), + column("name", String), + column("create_date", Date), + ) + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": date(2010, 10, 5), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": date(2007, 5, 27), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": date(2008, 8, 15), + }, + ], + ) + + When using --sql mode, some datatypes may not render inline + automatically, such as dates and other special types. When this + issue is present, :meth:`.Operations.inline_literal` may be used:: + + op.bulk_insert( + accounts_table, + [ + { + "id": 1, + "name": "John Smith", + "create_date": op.inline_literal("2010-10-05"), + }, + { + "id": 2, + "name": "Ed Williams", + "create_date": op.inline_literal("2007-05-27"), + }, + { + "id": 3, + "name": "Wendy Jones", + "create_date": op.inline_literal("2008-08-15"), + }, + ], + multiinsert=False, + ) + + When using :meth:`.Operations.inline_literal` in conjunction with + :meth:`.Operations.bulk_insert`, in order for the statement to work + in "online" (e.g. non --sql) mode, the + :paramref:`~.Operations.bulk_insert.multiinsert` + flag should be set to ``False``, which will have the effect of + individual INSERT statements being emitted to the database, each + with a distinct VALUES clause, so that the "inline" values can + still be rendered, rather than attempting to pass the values + as bound parameters. + + :param table: a table object which represents the target of the INSERT. + + :param rows: a list of dictionaries indicating rows. + + :param multiinsert: when at its default of True and --sql mode is not + enabled, the INSERT statement will be executed using + "executemany()" style, where all elements in the list of + dictionaries are passed as bound parameters in a single + list. Setting this to False results in individual INSERT + statements being emitted per parameter set, and is needed + in those cases where non-literal values are present in the + parameter sets. + + """ + + op = cls(table, rows, multiinsert=multiinsert) + operations.invoke(op) + + +@Operations.register_operation("execute") +@BatchOperations.register_operation("execute", "batch_execute") +class ExecuteSQLOp(MigrateOperation): + """Represent an execute SQL operation.""" + + def __init__( + self, + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + self.sqltext = sqltext + self.execution_options = execution_options + + @classmethod + def execute( + cls, + operations: Operations, + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + r"""Execute the given SQL using the current migration context. + + The given SQL can be a plain string, e.g.:: + + op.execute("INSERT INTO table (foo) VALUES ('some value')") + + Or it can be any kind of Core SQL Expression construct, such as + below where we use an update construct:: + + from sqlalchemy.sql import table, column + from sqlalchemy import String + from alembic import op + + account = table("account", column("name", String)) + op.execute( + account.update() + .where(account.c.name == op.inline_literal("account 1")) + .values({"name": op.inline_literal("account 2")}) + ) + + Above, we made use of the SQLAlchemy + :func:`sqlalchemy.sql.expression.table` and + :func:`sqlalchemy.sql.expression.column` constructs to make a brief, + ad-hoc table construct just for our UPDATE statement. A full + :class:`~sqlalchemy.schema.Table` construct of course works perfectly + fine as well, though note it's a recommended practice to at least + ensure the definition of a table is self-contained within the migration + script, rather than imported from a module that may break compatibility + with older migrations. + + In a SQL script context, the statement is emitted directly to the + output stream. There is *no* return result, however, as this + function is oriented towards generating a change script + that can run in "offline" mode. Additionally, parameterized + statements are discouraged here, as they *will not work* in offline + mode. Above, we use :meth:`.inline_literal` where parameters are + to be used. + + For full interaction with a connected database where parameters can + also be used normally, use the "bind" available from the context:: + + from alembic import op + + connection = op.get_bind() + + connection.execute( + account.update() + .where(account.c.name == "account 1") + .values({"name": "account 2"}) + ) + + Additionally, when passing the statement as a plain string, it is first + coerced into a :func:`sqlalchemy.sql.expression.text` construct + before being passed along. In the less likely case that the + literal SQL string contains a colon, it must be escaped with a + backslash, as:: + + op.execute(r"INSERT INTO table (foo) VALUES ('\:colon_value')") + + + :param sqltext: Any legal SQLAlchemy expression, including: + + * a string + * a :func:`sqlalchemy.sql.expression.text` construct. + * a :func:`sqlalchemy.sql.expression.insert` construct. + * a :func:`sqlalchemy.sql.expression.update` construct. + * a :func:`sqlalchemy.sql.expression.delete` construct. + * Any "executable" described in SQLAlchemy Core documentation, + noting that no result set is returned. + + .. note:: when passing a plain string, the statement is coerced into + a :func:`sqlalchemy.sql.expression.text` construct. This construct + considers symbols with colons, e.g. ``:foo`` to be bound parameters. + To avoid this, ensure that colon symbols are escaped, e.g. + ``\:foo``. + + :param execution_options: Optional dictionary of + execution options, will be passed to + :meth:`sqlalchemy.engine.Connection.execution_options`. + """ + op = cls(sqltext, execution_options=execution_options) + return operations.invoke(op) + + @classmethod + def batch_execute( + cls, + operations: Operations, + sqltext: Union[Executable, str], + *, + execution_options: Optional[dict[str, Any]] = None, + ) -> None: + """Execute the given SQL using the current migration context. + + .. seealso:: + + :meth:`.Operations.execute` + + """ + return cls.execute( + operations, sqltext, execution_options=execution_options + ) + + def to_diff_tuple(self) -> Tuple[str, Union[Executable, str]]: + return ("execute", self.sqltext) + + +class OpContainer(MigrateOperation): + """Represent a sequence of operations operation.""" + + def __init__(self, ops: Sequence[MigrateOperation] = ()) -> None: + self.ops = list(ops) + + def is_empty(self) -> bool: + return not self.ops + + def as_diffs(self) -> Any: + return list(OpContainer._ops_as_diffs(self)) + + @classmethod + def _ops_as_diffs( + cls, migrations: OpContainer + ) -> Iterator[Tuple[Any, ...]]: + for op in migrations.ops: + if hasattr(op, "ops"): + yield from cls._ops_as_diffs(cast("OpContainer", op)) + else: + yield op.to_diff_tuple() + + +class ModifyTableOps(OpContainer): + """Contains a sequence of operations that all apply to a single Table.""" + + def __init__( + self, + table_name: str, + ops: Sequence[MigrateOperation], + *, + schema: Optional[str] = None, + ) -> None: + super().__init__(ops) + self.table_name = table_name + self.schema = schema + + def reverse(self) -> ModifyTableOps: + return ModifyTableOps( + self.table_name, + ops=list(reversed([op.reverse() for op in self.ops])), + schema=self.schema, + ) + + +class UpgradeOps(OpContainer): + """contains a sequence of operations that would apply to the + 'upgrade' stream of a script. + + .. seealso:: + + :ref:`customizing_revision` + + """ + + def __init__( + self, + ops: Sequence[MigrateOperation] = (), + upgrade_token: str = "upgrades", + ) -> None: + super().__init__(ops=ops) + self.upgrade_token = upgrade_token + + def reverse_into(self, downgrade_ops: DowngradeOps) -> DowngradeOps: + downgrade_ops.ops[:] = list( # type:ignore[index] + reversed([op.reverse() for op in self.ops]) + ) + return downgrade_ops + + def reverse(self) -> DowngradeOps: + return self.reverse_into(DowngradeOps(ops=[])) + + +class DowngradeOps(OpContainer): + """contains a sequence of operations that would apply to the + 'downgrade' stream of a script. + + .. seealso:: + + :ref:`customizing_revision` + + """ + + def __init__( + self, + ops: Sequence[MigrateOperation] = (), + downgrade_token: str = "downgrades", + ) -> None: + super().__init__(ops=ops) + self.downgrade_token = downgrade_token + + def reverse(self): + return UpgradeOps( + ops=list(reversed([op.reverse() for op in self.ops])) + ) + + +class MigrationScript(MigrateOperation): + """represents a migration script. + + E.g. when autogenerate encounters this object, this corresponds to the + production of an actual script file. + + A normal :class:`.MigrationScript` object would contain a single + :class:`.UpgradeOps` and a single :class:`.DowngradeOps` directive. + These are accessible via the ``.upgrade_ops`` and ``.downgrade_ops`` + attributes. + + In the case of an autogenerate operation that runs multiple times, + such as the multiple database example in the "multidb" template, + the ``.upgrade_ops`` and ``.downgrade_ops`` attributes are disabled, + and instead these objects should be accessed via the ``.upgrade_ops_list`` + and ``.downgrade_ops_list`` list-based attributes. These latter + attributes are always available at the very least as single-element lists. + + .. seealso:: + + :ref:`customizing_revision` + + """ + + _needs_render: Optional[bool] + + def __init__( + self, + rev_id: Optional[str], + upgrade_ops: UpgradeOps, + downgrade_ops: DowngradeOps, + *, + message: Optional[str] = None, + imports: Set[str] = set(), + head: Optional[str] = None, + splice: Optional[bool] = None, + branch_label: Optional[_RevIdType] = None, + version_path: Optional[str] = None, + depends_on: Optional[_RevIdType] = None, + ) -> None: + self.rev_id = rev_id + self.message = message + self.imports = imports + self.head = head + self.splice = splice + self.branch_label = branch_label + self.version_path = version_path + self.depends_on = depends_on + self.upgrade_ops = upgrade_ops + self.downgrade_ops = downgrade_ops + + @property + def upgrade_ops(self): + """An instance of :class:`.UpgradeOps`. + + .. seealso:: + + :attr:`.MigrationScript.upgrade_ops_list` + """ + if len(self._upgrade_ops) > 1: + raise ValueError( + "This MigrationScript instance has a multiple-entry " + "list for UpgradeOps; please use the " + "upgrade_ops_list attribute." + ) + elif not self._upgrade_ops: + return None + else: + return self._upgrade_ops[0] + + @upgrade_ops.setter + def upgrade_ops(self, upgrade_ops): + self._upgrade_ops = util.to_list(upgrade_ops) + for elem in self._upgrade_ops: + assert isinstance(elem, UpgradeOps) + + @property + def downgrade_ops(self): + """An instance of :class:`.DowngradeOps`. + + .. seealso:: + + :attr:`.MigrationScript.downgrade_ops_list` + """ + if len(self._downgrade_ops) > 1: + raise ValueError( + "This MigrationScript instance has a multiple-entry " + "list for DowngradeOps; please use the " + "downgrade_ops_list attribute." + ) + elif not self._downgrade_ops: + return None + else: + return self._downgrade_ops[0] + + @downgrade_ops.setter + def downgrade_ops(self, downgrade_ops): + self._downgrade_ops = util.to_list(downgrade_ops) + for elem in self._downgrade_ops: + assert isinstance(elem, DowngradeOps) + + @property + def upgrade_ops_list(self) -> List[UpgradeOps]: + """A list of :class:`.UpgradeOps` instances. + + This is used in place of the :attr:`.MigrationScript.upgrade_ops` + attribute when dealing with a revision operation that does + multiple autogenerate passes. + + """ + return self._upgrade_ops + + @property + def downgrade_ops_list(self) -> List[DowngradeOps]: + """A list of :class:`.DowngradeOps` instances. + + This is used in place of the :attr:`.MigrationScript.downgrade_ops` + attribute when dealing with a revision operation that does + multiple autogenerate passes. + + """ + return self._downgrade_ops diff --git a/venv/Lib/site-packages/alembic/operations/schemaobj.py b/venv/Lib/site-packages/alembic/operations/schemaobj.py new file mode 100644 index 0000000..799f113 --- /dev/null +++ b/venv/Lib/site-packages/alembic/operations/schemaobj.py @@ -0,0 +1,287 @@ +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import schema as sa_schema +from sqlalchemy.sql.schema import Column +from sqlalchemy.sql.schema import Constraint +from sqlalchemy.sql.schema import Index +from sqlalchemy.types import Integer +from sqlalchemy.types import NULLTYPE + +from .. import util +from ..util import sqla_compat + +if TYPE_CHECKING: + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.elements import TextClause + from sqlalchemy.sql.schema import CheckConstraint + from sqlalchemy.sql.schema import ForeignKey + from sqlalchemy.sql.schema import ForeignKeyConstraint + from sqlalchemy.sql.schema import MetaData + from sqlalchemy.sql.schema import PrimaryKeyConstraint + from sqlalchemy.sql.schema import Table + from sqlalchemy.sql.schema import UniqueConstraint + from sqlalchemy.sql.type_api import TypeEngine + + from ..runtime.migration import MigrationContext + + +class SchemaObjects: + def __init__( + self, migration_context: Optional[MigrationContext] = None + ) -> None: + self.migration_context = migration_context + + def primary_key_constraint( + self, + name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + cols: Sequence[str], + schema: Optional[str] = None, + **dialect_kw, + ) -> PrimaryKeyConstraint: + m = self.metadata() + columns = [sa_schema.Column(n, NULLTYPE) for n in cols] + t = sa_schema.Table(table_name, m, *columns, schema=schema) + # SQLAlchemy primary key constraint name arg is wrongly typed on + # the SQLAlchemy side through 2.0.5 at least + p = sa_schema.PrimaryKeyConstraint( + *[t.c[n] for n in cols], name=name, **dialect_kw # type: ignore + ) + return p + + def foreign_key_constraint( + self, + name: Optional[sqla_compat._ConstraintNameDefined], + source: str, + referent: str, + local_cols: List[str], + remote_cols: List[str], + onupdate: Optional[str] = None, + ondelete: Optional[str] = None, + deferrable: Optional[bool] = None, + source_schema: Optional[str] = None, + referent_schema: Optional[str] = None, + initially: Optional[str] = None, + match: Optional[str] = None, + **dialect_kw, + ) -> ForeignKeyConstraint: + m = self.metadata() + if source == referent and source_schema == referent_schema: + t1_cols = local_cols + remote_cols + else: + t1_cols = local_cols + sa_schema.Table( + referent, + m, + *[sa_schema.Column(n, NULLTYPE) for n in remote_cols], + schema=referent_schema, + ) + + t1 = sa_schema.Table( + source, + m, + *[ + sa_schema.Column(n, NULLTYPE) + for n in util.unique_list(t1_cols) + ], + schema=source_schema, + ) + + tname = ( + "%s.%s" % (referent_schema, referent) + if referent_schema + else referent + ) + + dialect_kw["match"] = match + + f = sa_schema.ForeignKeyConstraint( + local_cols, + ["%s.%s" % (tname, n) for n in remote_cols], + name=name, + onupdate=onupdate, + ondelete=ondelete, + deferrable=deferrable, + initially=initially, + **dialect_kw, + ) + t1.append_constraint(f) + + return f + + def unique_constraint( + self, + name: Optional[sqla_compat._ConstraintNameDefined], + source: str, + local_cols: Sequence[str], + schema: Optional[str] = None, + **kw, + ) -> UniqueConstraint: + t = sa_schema.Table( + source, + self.metadata(), + *[sa_schema.Column(n, NULLTYPE) for n in local_cols], + schema=schema, + ) + kw["name"] = name + uq = sa_schema.UniqueConstraint(*[t.c[n] for n in local_cols], **kw) + # TODO: need event tests to ensure the event + # is fired off here + t.append_constraint(uq) + return uq + + def check_constraint( + self, + name: Optional[sqla_compat._ConstraintNameDefined], + source: str, + condition: Union[str, TextClause, ColumnElement[Any]], + schema: Optional[str] = None, + **kw, + ) -> Union[CheckConstraint]: + t = sa_schema.Table( + source, + self.metadata(), + sa_schema.Column("x", Integer), + schema=schema, + ) + ck = sa_schema.CheckConstraint(condition, name=name, **kw) + t.append_constraint(ck) + return ck + + def generic_constraint( + self, + name: Optional[sqla_compat._ConstraintNameDefined], + table_name: str, + type_: Optional[str], + schema: Optional[str] = None, + **kw, + ) -> Any: + t = self.table(table_name, schema=schema) + types: Dict[Optional[str], Any] = { + "foreignkey": lambda name: sa_schema.ForeignKeyConstraint( + [], [], name=name + ), + "primary": sa_schema.PrimaryKeyConstraint, + "unique": sa_schema.UniqueConstraint, + "check": lambda name: sa_schema.CheckConstraint("", name=name), + None: sa_schema.Constraint, + } + try: + const = types[type_] + except KeyError as ke: + raise TypeError( + "'type' can be one of %s" + % ", ".join(sorted(repr(x) for x in types)) + ) from ke + else: + const = const(name=name) + t.append_constraint(const) + return const + + def metadata(self) -> MetaData: + kw = {} + if ( + self.migration_context is not None + and "target_metadata" in self.migration_context.opts + ): + mt = self.migration_context.opts["target_metadata"] + if hasattr(mt, "naming_convention"): + kw["naming_convention"] = mt.naming_convention + return sa_schema.MetaData(**kw) + + def table(self, name: str, *columns, **kw) -> Table: + m = self.metadata() + + cols = [ + sqla_compat._copy(c) if c.table is not None else c + for c in columns + if isinstance(c, Column) + ] + # these flags have already added their UniqueConstraint / + # Index objects to the table, so flip them off here. + # SQLAlchemy tometadata() avoids this instead by preserving the + # flags and skipping the constraints that have _type_bound on them, + # but for a migration we'd rather list out the constraints + # explicitly. + _constraints_included = kw.pop("_constraints_included", False) + if _constraints_included: + for c in cols: + c.unique = c.index = False + + t = sa_schema.Table(name, m, *cols, **kw) + + constraints = [ + sqla_compat._copy(elem, target_table=t) + if getattr(elem, "parent", None) is not t + and getattr(elem, "parent", None) is not None + else elem + for elem in columns + if isinstance(elem, (Constraint, Index)) + ] + + for const in constraints: + t.append_constraint(const) + + for f in t.foreign_keys: + self._ensure_table_for_fk(m, f) + return t + + def column(self, name: str, type_: TypeEngine, **kw) -> Column: + return sa_schema.Column(name, type_, **kw) + + def index( + self, + name: Optional[str], + tablename: Optional[str], + columns: Sequence[Union[str, TextClause, ColumnElement[Any]]], + schema: Optional[str] = None, + **kw, + ) -> Index: + t = sa_schema.Table( + tablename or "no_table", + self.metadata(), + schema=schema, + ) + kw["_table"] = t + idx = sa_schema.Index( + name, + *[util.sqla_compat._textual_index_column(t, n) for n in columns], + **kw, + ) + return idx + + def _parse_table_key(self, table_key: str) -> Tuple[Optional[str], str]: + if "." in table_key: + tokens = table_key.split(".") + sname: Optional[str] = ".".join(tokens[0:-1]) + tname = tokens[-1] + else: + tname = table_key + sname = None + return (sname, tname) + + def _ensure_table_for_fk(self, metadata: MetaData, fk: ForeignKey) -> None: + """create a placeholder Table object for the referent of a + ForeignKey. + + """ + if isinstance(fk._colspec, str): # type:ignore[attr-defined] + table_key, cname = fk._colspec.rsplit( # type:ignore[attr-defined] + ".", 1 + ) + sname, tname = self._parse_table_key(table_key) + if table_key not in metadata.tables: + rel_t = sa_schema.Table(tname, metadata, schema=sname) + else: + rel_t = metadata.tables[table_key] + if cname not in rel_t.c: + rel_t.append_column(sa_schema.Column(cname, NULLTYPE)) diff --git a/venv/Lib/site-packages/alembic/operations/toimpl.py b/venv/Lib/site-packages/alembic/operations/toimpl.py new file mode 100644 index 0000000..ba974b6 --- /dev/null +++ b/venv/Lib/site-packages/alembic/operations/toimpl.py @@ -0,0 +1,223 @@ +from typing import TYPE_CHECKING + +from sqlalchemy import schema as sa_schema + +from . import ops +from .base import Operations +from ..util.sqla_compat import _copy +from ..util.sqla_compat import sqla_2 + +if TYPE_CHECKING: + from sqlalchemy.sql.schema import Table + + +@Operations.implementation_for(ops.AlterColumnOp) +def alter_column( + operations: "Operations", operation: "ops.AlterColumnOp" +) -> None: + compiler = operations.impl.dialect.statement_compiler( + operations.impl.dialect, None + ) + + existing_type = operation.existing_type + existing_nullable = operation.existing_nullable + existing_server_default = operation.existing_server_default + type_ = operation.modify_type + column_name = operation.column_name + table_name = operation.table_name + schema = operation.schema + server_default = operation.modify_server_default + new_column_name = operation.modify_name + nullable = operation.modify_nullable + comment = operation.modify_comment + existing_comment = operation.existing_comment + + def _count_constraint(constraint): + return not isinstance(constraint, sa_schema.PrimaryKeyConstraint) and ( + not constraint._create_rule or constraint._create_rule(compiler) + ) + + if existing_type and type_: + t = operations.schema_obj.table( + table_name, + sa_schema.Column(column_name, existing_type), + schema=schema, + ) + for constraint in t.constraints: + if _count_constraint(constraint): + operations.impl.drop_constraint(constraint) + + operations.impl.alter_column( + table_name, + column_name, + nullable=nullable, + server_default=server_default, + name=new_column_name, + type_=type_, + schema=schema, + existing_type=existing_type, + existing_server_default=existing_server_default, + existing_nullable=existing_nullable, + comment=comment, + existing_comment=existing_comment, + **operation.kw, + ) + + if type_: + t = operations.schema_obj.table( + table_name, + operations.schema_obj.column(column_name, type_), + schema=schema, + ) + for constraint in t.constraints: + if _count_constraint(constraint): + operations.impl.add_constraint(constraint) + + +@Operations.implementation_for(ops.DropTableOp) +def drop_table(operations: "Operations", operation: "ops.DropTableOp") -> None: + operations.impl.drop_table( + operation.to_table(operations.migration_context) + ) + + +@Operations.implementation_for(ops.DropColumnOp) +def drop_column( + operations: "Operations", operation: "ops.DropColumnOp" +) -> None: + column = operation.to_column(operations.migration_context) + operations.impl.drop_column( + operation.table_name, column, schema=operation.schema, **operation.kw + ) + + +@Operations.implementation_for(ops.CreateIndexOp) +def create_index( + operations: "Operations", operation: "ops.CreateIndexOp" +) -> None: + idx = operation.to_index(operations.migration_context) + kw = {} + if operation.if_not_exists is not None: + if not sqla_2: + raise NotImplementedError("SQLAlchemy 2.0+ required") + + kw["if_not_exists"] = operation.if_not_exists + operations.impl.create_index(idx, **kw) + + +@Operations.implementation_for(ops.DropIndexOp) +def drop_index(operations: "Operations", operation: "ops.DropIndexOp") -> None: + kw = {} + if operation.if_exists is not None: + if not sqla_2: + raise NotImplementedError("SQLAlchemy 2.0+ required") + + kw["if_exists"] = operation.if_exists + + operations.impl.drop_index( + operation.to_index(operations.migration_context), + **kw, + ) + + +@Operations.implementation_for(ops.CreateTableOp) +def create_table( + operations: "Operations", operation: "ops.CreateTableOp" +) -> "Table": + table = operation.to_table(operations.migration_context) + operations.impl.create_table(table) + return table + + +@Operations.implementation_for(ops.RenameTableOp) +def rename_table( + operations: "Operations", operation: "ops.RenameTableOp" +) -> None: + operations.impl.rename_table( + operation.table_name, operation.new_table_name, schema=operation.schema + ) + + +@Operations.implementation_for(ops.CreateTableCommentOp) +def create_table_comment( + operations: "Operations", operation: "ops.CreateTableCommentOp" +) -> None: + table = operation.to_table(operations.migration_context) + operations.impl.create_table_comment(table) + + +@Operations.implementation_for(ops.DropTableCommentOp) +def drop_table_comment( + operations: "Operations", operation: "ops.DropTableCommentOp" +) -> None: + table = operation.to_table(operations.migration_context) + operations.impl.drop_table_comment(table) + + +@Operations.implementation_for(ops.AddColumnOp) +def add_column(operations: "Operations", operation: "ops.AddColumnOp") -> None: + table_name = operation.table_name + column = operation.column + schema = operation.schema + kw = operation.kw + + if column.table is not None: + column = _copy(column) + + t = operations.schema_obj.table(table_name, column, schema=schema) + operations.impl.add_column(table_name, column, schema=schema, **kw) + + for constraint in t.constraints: + if not isinstance(constraint, sa_schema.PrimaryKeyConstraint): + operations.impl.add_constraint(constraint) + for index in t.indexes: + operations.impl.create_index(index) + + with_comment = ( + operations.impl.dialect.supports_comments + and not operations.impl.dialect.inline_comments + ) + comment = column.comment + if comment and with_comment: + operations.impl.create_column_comment(column) + + +@Operations.implementation_for(ops.AddConstraintOp) +def create_constraint( + operations: "Operations", operation: "ops.AddConstraintOp" +) -> None: + operations.impl.add_constraint( + operation.to_constraint(operations.migration_context) + ) + + +@Operations.implementation_for(ops.DropConstraintOp) +def drop_constraint( + operations: "Operations", operation: "ops.DropConstraintOp" +) -> None: + operations.impl.drop_constraint( + operations.schema_obj.generic_constraint( + operation.constraint_name, + operation.table_name, + operation.constraint_type, + schema=operation.schema, + ) + ) + + +@Operations.implementation_for(ops.BulkInsertOp) +def bulk_insert( + operations: "Operations", operation: "ops.BulkInsertOp" +) -> None: + operations.impl.bulk_insert( # type: ignore[union-attr] + operation.table, operation.rows, multiinsert=operation.multiinsert + ) + + +@Operations.implementation_for(ops.ExecuteSQLOp) +def execute_sql( + operations: "Operations", operation: "ops.ExecuteSQLOp" +) -> None: + operations.migration_context.impl.execute( + operation.sqltext, execution_options=operation.execution_options + ) diff --git a/venv/Lib/site-packages/alembic/py.typed b/venv/Lib/site-packages/alembic/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/alembic/runtime/__init__.py b/venv/Lib/site-packages/alembic/runtime/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/alembic/runtime/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/runtime/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af58c2ea9815d86660349a5f3d596a514468ff06 GIT binary patch literal 178 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 None: + r"""Construct a new :class:`.EnvironmentContext`. + + :param config: a :class:`.Config` instance. + :param script: a :class:`.ScriptDirectory` instance. + :param \**kw: keyword options that will be ultimately + passed along to the :class:`.MigrationContext` when + :meth:`.EnvironmentContext.configure` is called. + + """ + self.config = config + self.script = script + self.context_opts = kw + + def __enter__(self) -> EnvironmentContext: + """Establish a context which provides a + :class:`.EnvironmentContext` object to + env.py scripts. + + The :class:`.EnvironmentContext` will + be made available as ``from alembic import context``. + + """ + self._install_proxy() + return self + + def __exit__(self, *arg: Any, **kw: Any) -> None: + self._remove_proxy() + + def is_offline_mode(self) -> bool: + """Return True if the current migrations environment + is running in "offline mode". + + This is ``True`` or ``False`` depending + on the ``--sql`` flag passed. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + return self.context_opts.get("as_sql", False) + + def is_transactional_ddl(self): + """Return True if the context is configured to expect a + transactional DDL capable backend. + + This defaults to the type of database in use, and + can be overridden by the ``transactional_ddl`` argument + to :meth:`.configure` + + This function requires that a :class:`.MigrationContext` + has first been made available via :meth:`.configure`. + + """ + return self.get_context().impl.transactional_ddl + + def requires_connection(self) -> bool: + return not self.is_offline_mode() + + def get_head_revision(self) -> _RevNumber: + """Return the hex identifier of the 'head' script revision. + + If the script directory has multiple heads, this + method raises a :class:`.CommandError`; + :meth:`.EnvironmentContext.get_head_revisions` should be preferred. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: :meth:`.EnvironmentContext.get_head_revisions` + + """ + return self.script.as_revision_number("head") + + def get_head_revisions(self) -> _RevNumber: + """Return the hex identifier of the 'heads' script revision(s). + + This returns a tuple containing the version number of all + heads in the script directory. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + return self.script.as_revision_number("heads") + + def get_starting_revision_argument(self) -> _RevNumber: + """Return the 'starting revision' argument, + if the revision was passed using ``start:end``. + + This is only meaningful in "offline" mode. + Returns ``None`` if no value is available + or was configured. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + if self._migration_context is not None: + return self.script.as_revision_number( + self.get_context()._start_from_rev + ) + elif "starting_rev" in self.context_opts: + return self.script.as_revision_number( + self.context_opts["starting_rev"] + ) + else: + # this should raise only in the case that a command + # is being run where the "starting rev" is never applicable; + # this is to catch scripts which rely upon this in + # non-sql mode or similar + raise util.CommandError( + "No starting revision argument is available." + ) + + def get_revision_argument(self) -> _RevNumber: + """Get the 'destination' revision argument. + + This is typically the argument passed to the + ``upgrade`` or ``downgrade`` command. + + If it was specified as ``head``, the actual + version number is returned; if specified + as ``base``, ``None`` is returned. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + """ + return self.script.as_revision_number( + self.context_opts["destination_rev"] + ) + + def get_tag_argument(self) -> Optional[str]: + """Return the value passed for the ``--tag`` argument, if any. + + The ``--tag`` argument is not used directly by Alembic, + but is available for custom ``env.py`` configurations that + wish to use it; particularly for offline generation scripts + that wish to generate tagged filenames. + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: + + :meth:`.EnvironmentContext.get_x_argument` - a newer and more + open ended system of extending ``env.py`` scripts via the command + line. + + """ + return self.context_opts.get("tag", None) + + @overload + def get_x_argument(self, as_dictionary: Literal[False]) -> List[str]: + ... + + @overload + def get_x_argument(self, as_dictionary: Literal[True]) -> Dict[str, str]: + ... + + @overload + def get_x_argument( + self, as_dictionary: bool = ... + ) -> Union[List[str], Dict[str, str]]: + ... + + def get_x_argument( + self, as_dictionary: bool = False + ) -> Union[List[str], Dict[str, str]]: + """Return the value(s) passed for the ``-x`` argument, if any. + + The ``-x`` argument is an open ended flag that allows any user-defined + value or values to be passed on the command line, then available + here for consumption by a custom ``env.py`` script. + + The return value is a list, returned directly from the ``argparse`` + structure. If ``as_dictionary=True`` is passed, the ``x`` arguments + are parsed using ``key=value`` format into a dictionary that is + then returned. + + For example, to support passing a database URL on the command line, + the standard ``env.py`` script can be modified like this:: + + cmd_line_url = context.get_x_argument( + as_dictionary=True).get('dbname') + if cmd_line_url: + engine = create_engine(cmd_line_url) + else: + engine = engine_from_config( + config.get_section(config.config_ini_section), + prefix='sqlalchemy.', + poolclass=pool.NullPool) + + This then takes effect by running the ``alembic`` script as:: + + alembic -x dbname=postgresql://user:pass@host/dbname upgrade head + + This function does not require that the :class:`.MigrationContext` + has been configured. + + .. seealso:: + + :meth:`.EnvironmentContext.get_tag_argument` + + :attr:`.Config.cmd_opts` + + """ + if self.config.cmd_opts is not None: + value = self.config.cmd_opts.x or [] + else: + value = [] + if as_dictionary: + value = dict(arg.split("=", 1) for arg in value) + return value + + def configure( + self, + connection: Optional[Connection] = None, + url: Optional[Union[str, URL]] = None, + dialect_name: Optional[str] = None, + dialect_opts: Optional[Dict[str, Any]] = None, + transactional_ddl: Optional[bool] = None, + transaction_per_migration: bool = False, + output_buffer: Optional[TextIO] = None, + starting_rev: Optional[str] = None, + tag: Optional[str] = None, + template_args: Optional[Dict[str, Any]] = None, + render_as_batch: bool = False, + target_metadata: Optional[MetaData] = None, + include_name: Optional[IncludeNameFn] = None, + include_object: Optional[IncludeObjectFn] = None, + include_schemas: bool = False, + process_revision_directives: Optional[ + ProcessRevisionDirectiveFn + ] = None, + compare_type: Union[bool, CompareType] = True, + compare_server_default: Union[bool, CompareServerDefault] = False, + render_item: Optional[RenderItemFn] = None, + literal_binds: bool = False, + upgrade_token: str = "upgrades", + downgrade_token: str = "downgrades", + alembic_module_prefix: str = "op.", + sqlalchemy_module_prefix: str = "sa.", + user_module_prefix: Optional[str] = None, + on_version_apply: Optional[OnVersionApplyFn] = None, + **kw: Any, + ) -> None: + """Configure a :class:`.MigrationContext` within this + :class:`.EnvironmentContext` which will provide database + connectivity and other configuration to a series of + migration scripts. + + Many methods on :class:`.EnvironmentContext` require that + this method has been called in order to function, as they + ultimately need to have database access or at least access + to the dialect in use. Those which do are documented as such. + + The important thing needed by :meth:`.configure` is a + means to determine what kind of database dialect is in use. + An actual connection to that database is needed only if + the :class:`.MigrationContext` is to be used in + "online" mode. + + If the :meth:`.is_offline_mode` function returns ``True``, + then no connection is needed here. Otherwise, the + ``connection`` parameter should be present as an + instance of :class:`sqlalchemy.engine.Connection`. + + This function is typically called from the ``env.py`` + script within a migration environment. It can be called + multiple times for an invocation. The most recent + :class:`~sqlalchemy.engine.Connection` + for which it was called is the one that will be operated upon + by the next call to :meth:`.run_migrations`. + + General parameters: + + :param connection: a :class:`~sqlalchemy.engine.Connection` + to use + for SQL execution in "online" mode. When present, is also + used to determine the type of dialect in use. + :param url: a string database url, or a + :class:`sqlalchemy.engine.url.URL` object. + The type of dialect to be used will be derived from this if + ``connection`` is not passed. + :param dialect_name: string name of a dialect, such as + "postgresql", "mssql", etc. + The type of dialect to be used will be derived from this if + ``connection`` and ``url`` are not passed. + :param dialect_opts: dictionary of options to be passed to dialect + constructor. + :param transactional_ddl: Force the usage of "transactional" + DDL on or off; + this otherwise defaults to whether or not the dialect in + use supports it. + :param transaction_per_migration: if True, nest each migration script + in a transaction rather than the full series of migrations to + run. + :param output_buffer: a file-like object that will be used + for textual output + when the ``--sql`` option is used to generate SQL scripts. + Defaults to + ``sys.stdout`` if not passed here and also not present on + the :class:`.Config` + object. The value here overrides that of the :class:`.Config` + object. + :param output_encoding: when using ``--sql`` to generate SQL + scripts, apply this encoding to the string output. + :param literal_binds: when using ``--sql`` to generate SQL + scripts, pass through the ``literal_binds`` flag to the compiler + so that any literal values that would ordinarily be bound + parameters are converted to plain strings. + + .. warning:: Dialects can typically only handle simple datatypes + like strings and numbers for auto-literal generation. Datatypes + like dates, intervals, and others may still require manual + formatting, typically using :meth:`.Operations.inline_literal`. + + .. note:: the ``literal_binds`` flag is ignored on SQLAlchemy + versions prior to 0.8 where this feature is not supported. + + .. seealso:: + + :meth:`.Operations.inline_literal` + + :param starting_rev: Override the "starting revision" argument + when using ``--sql`` mode. + :param tag: a string tag for usage by custom ``env.py`` scripts. + Set via the ``--tag`` option, can be overridden here. + :param template_args: dictionary of template arguments which + will be added to the template argument environment when + running the "revision" command. Note that the script environment + is only run within the "revision" command if the --autogenerate + option is used, or if the option "revision_environment=true" + is present in the alembic.ini file. + + :param version_table: The name of the Alembic version table. + The default is ``'alembic_version'``. + :param version_table_schema: Optional schema to place version + table within. + :param version_table_pk: boolean, whether the Alembic version table + should use a primary key constraint for the "value" column; this + only takes effect when the table is first created. + Defaults to True; setting to False should not be necessary and is + here for backwards compatibility reasons. + :param on_version_apply: a callable or collection of callables to be + run for each migration step. + The callables will be run in the order they are given, once for + each migration step, after the respective operation has been + applied but before its transaction is finalized. + Each callable accepts no positional arguments and the following + keyword arguments: + + * ``ctx``: the :class:`.MigrationContext` running the migration, + * ``step``: a :class:`.MigrationInfo` representing the + step currently being applied, + * ``heads``: a collection of version strings representing the + current heads, + * ``run_args``: the ``**kwargs`` passed to :meth:`.run_migrations`. + + Parameters specific to the autogenerate feature, when + ``alembic revision`` is run with the ``--autogenerate`` feature: + + :param target_metadata: a :class:`sqlalchemy.schema.MetaData` + object, or a sequence of :class:`~sqlalchemy.schema.MetaData` + objects, that will be consulted during autogeneration. + The tables present in each :class:`~sqlalchemy.schema.MetaData` + will be compared against + what is locally available on the target + :class:`~sqlalchemy.engine.Connection` + to produce candidate upgrade/downgrade operations. + :param compare_type: Indicates type comparison behavior during + an autogenerate + operation. Defaults to ``True`` turning on type comparison, which + has good accuracy on most backends. See :ref:`compare_types` + for an example as well as information on other type + comparison options. Set to ``False`` which disables type + comparison. A callable can also be passed to provide custom type + comparison, see :ref:`compare_types` for additional details. + + .. versionchanged:: 1.12.0 The default value of + :paramref:`.EnvironmentContext.configure.compare_type` has been + changed to ``True``. + + .. seealso:: + + :ref:`compare_types` + + :paramref:`.EnvironmentContext.configure.compare_server_default` + + :param compare_server_default: Indicates server default comparison + behavior during + an autogenerate operation. Defaults to ``False`` which disables + server default + comparison. Set to ``True`` to turn on server default comparison, + which has + varied accuracy depending on backend. + + To customize server default comparison behavior, a callable may + be specified + which can filter server default comparisons during an + autogenerate operation. + defaults during an autogenerate operation. The format of this + callable is:: + + def my_compare_server_default(context, inspected_column, + metadata_column, inspected_default, metadata_default, + rendered_metadata_default): + # return True if the defaults are different, + # False if not, or None to allow the default implementation + # to compare these defaults + return None + + context.configure( + # ... + compare_server_default = my_compare_server_default + ) + + ``inspected_column`` is a dictionary structure as returned by + :meth:`sqlalchemy.engine.reflection.Inspector.get_columns`, whereas + ``metadata_column`` is a :class:`sqlalchemy.schema.Column` from + the local model environment. + + A return value of ``None`` indicates to allow default server default + comparison + to proceed. Note that some backends such as Postgresql actually + execute + the two defaults on the database side to compare for equivalence. + + .. seealso:: + + :paramref:`.EnvironmentContext.configure.compare_type` + + :param include_name: A callable function which is given + the chance to return ``True`` or ``False`` for any database reflected + object based on its name, including database schema names when + the :paramref:`.EnvironmentContext.configure.include_schemas` flag + is set to ``True``. + + The function accepts the following positional arguments: + + * ``name``: the name of the object, such as schema name or table name. + Will be ``None`` when indicating the default schema name of the + database connection. + * ``type``: a string describing the type of object; currently + ``"schema"``, ``"table"``, ``"column"``, ``"index"``, + ``"unique_constraint"``, or ``"foreign_key_constraint"`` + * ``parent_names``: a dictionary of "parent" object names, that are + relative to the name being given. Keys in this dictionary may + include: ``"schema_name"``, ``"table_name"`` or + ``"schema_qualified_table_name"``. + + E.g.:: + + def include_name(name, type_, parent_names): + if type_ == "schema": + return name in ["schema_one", "schema_two"] + else: + return True + + context.configure( + # ... + include_schemas = True, + include_name = include_name + ) + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_object` + + :paramref:`.EnvironmentContext.configure.include_schemas` + + + :param include_object: A callable function which is given + the chance to return ``True`` or ``False`` for any object, + indicating if the given object should be considered in the + autogenerate sweep. + + The function accepts the following positional arguments: + + * ``object``: a :class:`~sqlalchemy.schema.SchemaItem` object such + as a :class:`~sqlalchemy.schema.Table`, + :class:`~sqlalchemy.schema.Column`, + :class:`~sqlalchemy.schema.Index` + :class:`~sqlalchemy.schema.UniqueConstraint`, + or :class:`~sqlalchemy.schema.ForeignKeyConstraint` object + * ``name``: the name of the object. This is typically available + via ``object.name``. + * ``type``: a string describing the type of object; currently + ``"table"``, ``"column"``, ``"index"``, ``"unique_constraint"``, + or ``"foreign_key_constraint"`` + * ``reflected``: ``True`` if the given object was produced based on + table reflection, ``False`` if it's from a local :class:`.MetaData` + object. + * ``compare_to``: the object being compared against, if available, + else ``None``. + + E.g.:: + + def include_object(object, name, type_, reflected, compare_to): + if (type_ == "column" and + not reflected and + object.info.get("skip_autogenerate", False)): + return False + else: + return True + + context.configure( + # ... + include_object = include_object + ) + + For the use case of omitting specific schemas from a target database + when :paramref:`.EnvironmentContext.configure.include_schemas` is + set to ``True``, the :attr:`~sqlalchemy.schema.Table.schema` + attribute can be checked for each :class:`~sqlalchemy.schema.Table` + object passed to the hook, however it is much more efficient + to filter on schemas before reflection of objects takes place + using the :paramref:`.EnvironmentContext.configure.include_name` + hook. + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_name` + + :paramref:`.EnvironmentContext.configure.include_schemas` + + :param render_as_batch: if True, commands which alter elements + within a table will be placed under a ``with batch_alter_table():`` + directive, so that batch migrations will take place. + + .. seealso:: + + :ref:`batch_migrations` + + :param include_schemas: If True, autogenerate will scan across + all schemas located by the SQLAlchemy + :meth:`~sqlalchemy.engine.reflection.Inspector.get_schema_names` + method, and include all differences in tables found across all + those schemas. When using this option, you may want to also + use the :paramref:`.EnvironmentContext.configure.include_name` + parameter to specify a callable which + can filter the tables/schemas that get included. + + .. seealso:: + + :ref:`autogenerate_include_hooks` + + :paramref:`.EnvironmentContext.configure.include_name` + + :paramref:`.EnvironmentContext.configure.include_object` + + :param render_item: Callable that can be used to override how + any schema item, i.e. column, constraint, type, + etc., is rendered for autogenerate. The callable receives a + string describing the type of object, the object, and + the autogen context. If it returns False, the + default rendering method will be used. If it returns None, + the item will not be rendered in the context of a Table + construct, that is, can be used to skip columns or constraints + within op.create_table():: + + def my_render_column(type_, col, autogen_context): + if type_ == "column" and isinstance(col, MySpecialCol): + return repr(col) + else: + return False + + context.configure( + # ... + render_item = my_render_column + ) + + Available values for the type string include: ``"column"``, + ``"primary_key"``, ``"foreign_key"``, ``"unique"``, ``"check"``, + ``"type"``, ``"server_default"``. + + .. seealso:: + + :ref:`autogen_render_types` + + :param upgrade_token: When autogenerate completes, the text of the + candidate upgrade operations will be present in this template + variable when ``script.py.mako`` is rendered. Defaults to + ``upgrades``. + :param downgrade_token: When autogenerate completes, the text of the + candidate downgrade operations will be present in this + template variable when ``script.py.mako`` is rendered. Defaults to + ``downgrades``. + + :param alembic_module_prefix: When autogenerate refers to Alembic + :mod:`alembic.operations` constructs, this prefix will be used + (i.e. ``op.create_table``) Defaults to "``op.``". + Can be ``None`` to indicate no prefix. + + :param sqlalchemy_module_prefix: When autogenerate refers to + SQLAlchemy + :class:`~sqlalchemy.schema.Column` or type classes, this prefix + will be used + (i.e. ``sa.Column("somename", sa.Integer)``) Defaults to "``sa.``". + Can be ``None`` to indicate no prefix. + Note that when dialect-specific types are rendered, autogenerate + will render them using the dialect module name, i.e. ``mssql.BIT()``, + ``postgresql.UUID()``. + + :param user_module_prefix: When autogenerate refers to a SQLAlchemy + type (e.g. :class:`.TypeEngine`) where the module name is not + under the ``sqlalchemy`` namespace, this prefix will be used + within autogenerate. If left at its default of + ``None``, the ``__module__`` attribute of the type is used to + render the import module. It's a good practice to set this + and to have all custom types be available from a fixed module space, + in order to future-proof migration files against reorganizations + in modules. + + .. seealso:: + + :ref:`autogen_module_prefix` + + :param process_revision_directives: a callable function that will + be passed a structure representing the end result of an autogenerate + or plain "revision" operation, which can be manipulated to affect + how the ``alembic revision`` command ultimately outputs new + revision scripts. The structure of the callable is:: + + def process_revision_directives(context, revision, directives): + pass + + The ``directives`` parameter is a Python list containing + a single :class:`.MigrationScript` directive, which represents + the revision file to be generated. This list as well as its + contents may be freely modified to produce any set of commands. + The section :ref:`customizing_revision` shows an example of + doing this. The ``context`` parameter is the + :class:`.MigrationContext` in use, + and ``revision`` is a tuple of revision identifiers representing the + current revision of the database. + + The callable is invoked at all times when the ``--autogenerate`` + option is passed to ``alembic revision``. If ``--autogenerate`` + is not passed, the callable is invoked only if the + ``revision_environment`` variable is set to True in the Alembic + configuration, in which case the given ``directives`` collection + will contain empty :class:`.UpgradeOps` and :class:`.DowngradeOps` + collections for ``.upgrade_ops`` and ``.downgrade_ops``. The + ``--autogenerate`` option itself can be inferred by inspecting + ``context.config.cmd_opts.autogenerate``. + + The callable function may optionally be an instance of + a :class:`.Rewriter` object. This is a helper object that + assists in the production of autogenerate-stream rewriter functions. + + .. seealso:: + + :ref:`customizing_revision` + + :ref:`autogen_rewriter` + + :paramref:`.command.revision.process_revision_directives` + + Parameters specific to individual backends: + + :param mssql_batch_separator: The "batch separator" which will + be placed between each statement when generating offline SQL Server + migrations. Defaults to ``GO``. Note this is in addition to the + customary semicolon ``;`` at the end of each statement; SQL Server + considers the "batch separator" to denote the end of an + individual statement execution, and cannot group certain + dependent operations in one step. + :param oracle_batch_separator: The "batch separator" which will + be placed between each statement when generating offline + Oracle migrations. Defaults to ``/``. Oracle doesn't add a + semicolon between statements like most other backends. + + """ + opts = self.context_opts + if transactional_ddl is not None: + opts["transactional_ddl"] = transactional_ddl + if output_buffer is not None: + opts["output_buffer"] = output_buffer + elif self.config.output_buffer is not None: + opts["output_buffer"] = self.config.output_buffer + if starting_rev: + opts["starting_rev"] = starting_rev + if tag: + opts["tag"] = tag + if template_args and "template_args" in opts: + opts["template_args"].update(template_args) + opts["transaction_per_migration"] = transaction_per_migration + opts["target_metadata"] = target_metadata + opts["include_name"] = include_name + opts["include_object"] = include_object + opts["include_schemas"] = include_schemas + opts["render_as_batch"] = render_as_batch + opts["upgrade_token"] = upgrade_token + opts["downgrade_token"] = downgrade_token + opts["sqlalchemy_module_prefix"] = sqlalchemy_module_prefix + opts["alembic_module_prefix"] = alembic_module_prefix + opts["user_module_prefix"] = user_module_prefix + opts["literal_binds"] = literal_binds + opts["process_revision_directives"] = process_revision_directives + opts["on_version_apply"] = util.to_tuple(on_version_apply, default=()) + + if render_item is not None: + opts["render_item"] = render_item + opts["compare_type"] = compare_type + if compare_server_default is not None: + opts["compare_server_default"] = compare_server_default + opts["script"] = self.script + + opts.update(kw) + + self._migration_context = MigrationContext.configure( + connection=connection, + url=url, + dialect_name=dialect_name, + environment_context=self, + dialect_opts=dialect_opts, + opts=opts, + ) + + def run_migrations(self, **kw: Any) -> None: + """Run migrations as determined by the current command line + configuration + as well as versioning information present (or not) in the current + database connection (if one is present). + + The function accepts optional ``**kw`` arguments. If these are + passed, they are sent directly to the ``upgrade()`` and + ``downgrade()`` + functions within each target revision file. By modifying the + ``script.py.mako`` file so that the ``upgrade()`` and ``downgrade()`` + functions accept arguments, parameters can be passed here so that + contextual information, usually information to identify a particular + database in use, can be passed from a custom ``env.py`` script + to the migration functions. + + This function requires that a :class:`.MigrationContext` has + first been made available via :meth:`.configure`. + + """ + assert self._migration_context is not None + with Operations.context(self._migration_context): + self.get_context().run_migrations(**kw) + + def execute( + self, + sql: Union[Executable, str], + execution_options: Optional[dict] = None, + ) -> None: + """Execute the given SQL using the current change context. + + The behavior of :meth:`.execute` is the same + as that of :meth:`.Operations.execute`. Please see that + function's documentation for full detail including + caveats and limitations. + + This function requires that a :class:`.MigrationContext` has + first been made available via :meth:`.configure`. + + """ + self.get_context().execute(sql, execution_options=execution_options) + + def static_output(self, text: str) -> None: + """Emit text directly to the "offline" SQL stream. + + Typically this is for emitting comments that + start with --. The statement is not treated + as a SQL execution, no ; or batch separator + is added, etc. + + """ + self.get_context().impl.static_output(text) + + def begin_transaction( + self, + ) -> Union[_ProxyTransaction, ContextManager[None]]: + """Return a context manager that will + enclose an operation within a "transaction", + as defined by the environment's offline + and transactional DDL settings. + + e.g.:: + + with context.begin_transaction(): + context.run_migrations() + + :meth:`.begin_transaction` is intended to + "do the right thing" regardless of + calling context: + + * If :meth:`.is_transactional_ddl` is ``False``, + returns a "do nothing" context manager + which otherwise produces no transactional + state or directives. + * If :meth:`.is_offline_mode` is ``True``, + returns a context manager that will + invoke the :meth:`.DefaultImpl.emit_begin` + and :meth:`.DefaultImpl.emit_commit` + methods, which will produce the string + directives ``BEGIN`` and ``COMMIT`` on + the output stream, as rendered by the + target backend (e.g. SQL Server would + emit ``BEGIN TRANSACTION``). + * Otherwise, calls :meth:`sqlalchemy.engine.Connection.begin` + on the current online connection, which + returns a :class:`sqlalchemy.engine.Transaction` + object. This object demarcates a real + transaction and is itself a context manager, + which will roll back if an exception + is raised. + + Note that a custom ``env.py`` script which + has more specific transactional needs can of course + manipulate the :class:`~sqlalchemy.engine.Connection` + directly to produce transactional state in "online" + mode. + + """ + + return self.get_context().begin_transaction() + + def get_context(self) -> MigrationContext: + """Return the current :class:`.MigrationContext` object. + + If :meth:`.EnvironmentContext.configure` has not been + called yet, raises an exception. + + """ + + if self._migration_context is None: + raise Exception("No context has been configured yet.") + return self._migration_context + + def get_bind(self) -> Connection: + """Return the current 'bind'. + + In "online" mode, this is the + :class:`sqlalchemy.engine.Connection` currently being used + to emit SQL to the database. + + This function requires that a :class:`.MigrationContext` + has first been made available via :meth:`.configure`. + + """ + return self.get_context().bind # type: ignore[return-value] + + def get_impl(self) -> DefaultImpl: + return self.get_context().impl diff --git a/venv/Lib/site-packages/alembic/runtime/migration.py b/venv/Lib/site-packages/alembic/runtime/migration.py new file mode 100644 index 0000000..24e3d64 --- /dev/null +++ b/venv/Lib/site-packages/alembic/runtime/migration.py @@ -0,0 +1,1380 @@ +from __future__ import annotations + +from contextlib import contextmanager +from contextlib import nullcontext +import logging +import sys +from typing import Any +from typing import Callable +from typing import cast +from typing import Collection +from typing import ContextManager +from typing import Dict +from typing import Iterable +from typing import Iterator +from typing import List +from typing import Optional +from typing import Set +from typing import Tuple +from typing import TYPE_CHECKING +from typing import Union + +from sqlalchemy import Column +from sqlalchemy import literal_column +from sqlalchemy import MetaData +from sqlalchemy import PrimaryKeyConstraint +from sqlalchemy import String +from sqlalchemy import Table +from sqlalchemy.engine import Engine +from sqlalchemy.engine import url as sqla_url +from sqlalchemy.engine.strategies import MockEngineStrategy + +from .. import ddl +from .. import util +from ..util import sqla_compat +from ..util.compat import EncodedIO + +if TYPE_CHECKING: + from sqlalchemy.engine import Dialect + from sqlalchemy.engine import URL + from sqlalchemy.engine.base import Connection + from sqlalchemy.engine.base import Transaction + from sqlalchemy.engine.mock import MockConnection + from sqlalchemy.sql import Executable + + from .environment import EnvironmentContext + from ..config import Config + from ..script.base import Script + from ..script.base import ScriptDirectory + from ..script.revision import _RevisionOrBase + from ..script.revision import Revision + from ..script.revision import RevisionMap + +log = logging.getLogger(__name__) + + +class _ProxyTransaction: + def __init__(self, migration_context: MigrationContext) -> None: + self.migration_context = migration_context + + @property + def _proxied_transaction(self) -> Optional[Transaction]: + return self.migration_context._transaction + + def rollback(self) -> None: + t = self._proxied_transaction + assert t is not None + t.rollback() + self.migration_context._transaction = None + + def commit(self) -> None: + t = self._proxied_transaction + assert t is not None + t.commit() + self.migration_context._transaction = None + + def __enter__(self) -> _ProxyTransaction: + return self + + def __exit__(self, type_: Any, value: Any, traceback: Any) -> None: + if self._proxied_transaction is not None: + self._proxied_transaction.__exit__(type_, value, traceback) + self.migration_context._transaction = None + + +class MigrationContext: + + """Represent the database state made available to a migration + script. + + :class:`.MigrationContext` is the front end to an actual + database connection, or alternatively a string output + stream given a particular database dialect, + from an Alembic perspective. + + When inside the ``env.py`` script, the :class:`.MigrationContext` + is available via the + :meth:`.EnvironmentContext.get_context` method, + which is available at ``alembic.context``:: + + # from within env.py script + from alembic import context + + migration_context = context.get_context() + + For usage outside of an ``env.py`` script, such as for + utility routines that want to check the current version + in the database, the :meth:`.MigrationContext.configure` + method to create new :class:`.MigrationContext` objects. + For example, to get at the current revision in the + database using :meth:`.MigrationContext.get_current_revision`:: + + # in any application, outside of an env.py script + from alembic.migration import MigrationContext + from sqlalchemy import create_engine + + engine = create_engine("postgresql://mydatabase") + conn = engine.connect() + + context = MigrationContext.configure(conn) + current_rev = context.get_current_revision() + + The above context can also be used to produce + Alembic migration operations with an :class:`.Operations` + instance:: + + # in any application, outside of the normal Alembic environment + from alembic.operations import Operations + + op = Operations(context) + op.alter_column("mytable", "somecolumn", nullable=True) + + """ + + def __init__( + self, + dialect: Dialect, + connection: Optional[Connection], + opts: Dict[str, Any], + environment_context: Optional[EnvironmentContext] = None, + ) -> None: + self.environment_context = environment_context + self.opts = opts + self.dialect = dialect + self.script: Optional[ScriptDirectory] = opts.get("script") + as_sql: bool = opts.get("as_sql", False) + transactional_ddl = opts.get("transactional_ddl") + self._transaction_per_migration = opts.get( + "transaction_per_migration", False + ) + self.on_version_apply_callbacks = opts.get("on_version_apply", ()) + self._transaction: Optional[Transaction] = None + + if as_sql: + self.connection = cast( + Optional["Connection"], self._stdout_connection(connection) + ) + assert self.connection is not None + self._in_external_transaction = False + else: + self.connection = connection + self._in_external_transaction = ( + sqla_compat._get_connection_in_transaction(connection) + ) + + self._migrations_fn: Optional[ + Callable[..., Iterable[RevisionStep]] + ] = opts.get("fn") + self.as_sql = as_sql + + self.purge = opts.get("purge", False) + + if "output_encoding" in opts: + self.output_buffer = EncodedIO( + opts.get("output_buffer") + or sys.stdout, # type:ignore[arg-type] + opts["output_encoding"], + ) + else: + self.output_buffer = opts.get("output_buffer", sys.stdout) + + self._user_compare_type = opts.get("compare_type", True) + self._user_compare_server_default = opts.get( + "compare_server_default", False + ) + self.version_table = version_table = opts.get( + "version_table", "alembic_version" + ) + self.version_table_schema = version_table_schema = opts.get( + "version_table_schema", None + ) + self._version = Table( + version_table, + MetaData(), + Column("version_num", String(32), nullable=False), + schema=version_table_schema, + ) + if opts.get("version_table_pk", True): + self._version.append_constraint( + PrimaryKeyConstraint( + "version_num", name="%s_pkc" % version_table + ) + ) + + self._start_from_rev: Optional[str] = opts.get("starting_rev") + self.impl = ddl.DefaultImpl.get_by_dialect(dialect)( + dialect, + self.connection, + self.as_sql, + transactional_ddl, + self.output_buffer, + opts, + ) + log.info("Context impl %s.", self.impl.__class__.__name__) + if self.as_sql: + log.info("Generating static SQL") + log.info( + "Will assume %s DDL.", + "transactional" + if self.impl.transactional_ddl + else "non-transactional", + ) + + @classmethod + def configure( + cls, + connection: Optional[Connection] = None, + url: Optional[Union[str, URL]] = None, + dialect_name: Optional[str] = None, + dialect: Optional[Dialect] = None, + environment_context: Optional[EnvironmentContext] = None, + dialect_opts: Optional[Dict[str, str]] = None, + opts: Optional[Any] = None, + ) -> MigrationContext: + """Create a new :class:`.MigrationContext`. + + This is a factory method usually called + by :meth:`.EnvironmentContext.configure`. + + :param connection: a :class:`~sqlalchemy.engine.Connection` + to use for SQL execution in "online" mode. When present, + is also used to determine the type of dialect in use. + :param url: a string database url, or a + :class:`sqlalchemy.engine.url.URL` object. + The type of dialect to be used will be derived from this if + ``connection`` is not passed. + :param dialect_name: string name of a dialect, such as + "postgresql", "mssql", etc. The type of dialect to be used will be + derived from this if ``connection`` and ``url`` are not passed. + :param opts: dictionary of options. Most other options + accepted by :meth:`.EnvironmentContext.configure` are passed via + this dictionary. + + """ + if opts is None: + opts = {} + if dialect_opts is None: + dialect_opts = {} + + if connection: + if isinstance(connection, Engine): + raise util.CommandError( + "'connection' argument to configure() is expected " + "to be a sqlalchemy.engine.Connection instance, " + "got %r" % connection, + ) + + dialect = connection.dialect + elif url: + url_obj = sqla_url.make_url(url) + dialect = url_obj.get_dialect()(**dialect_opts) + elif dialect_name: + url_obj = sqla_url.make_url("%s://" % dialect_name) + dialect = url_obj.get_dialect()(**dialect_opts) + elif not dialect: + raise Exception("Connection, url, or dialect_name is required.") + assert dialect is not None + return MigrationContext(dialect, connection, opts, environment_context) + + @contextmanager + def autocommit_block(self) -> Iterator[None]: + """Enter an "autocommit" block, for databases that support AUTOCOMMIT + isolation levels. + + This special directive is intended to support the occasional database + DDL or system operation that specifically has to be run outside of + any kind of transaction block. The PostgreSQL database platform + is the most common target for this style of operation, as many + of its DDL operations must be run outside of transaction blocks, even + though the database overall supports transactional DDL. + + The method is used as a context manager within a migration script, by + calling on :meth:`.Operations.get_context` to retrieve the + :class:`.MigrationContext`, then invoking + :meth:`.MigrationContext.autocommit_block` using the ``with:`` + statement:: + + def upgrade(): + with op.get_context().autocommit_block(): + op.execute("ALTER TYPE mood ADD VALUE 'soso'") + + Above, a PostgreSQL "ALTER TYPE..ADD VALUE" directive is emitted, + which must be run outside of a transaction block at the database level. + The :meth:`.MigrationContext.autocommit_block` method makes use of the + SQLAlchemy ``AUTOCOMMIT`` isolation level setting, which against the + psycogp2 DBAPI corresponds to the ``connection.autocommit`` setting, + to ensure that the database driver is not inside of a DBAPI level + transaction block. + + .. warning:: + + As is necessary, **the database transaction preceding the block is + unconditionally committed**. This means that the run of migrations + preceding the operation will be committed, before the overall + migration operation is complete. + + It is recommended that when an application includes migrations with + "autocommit" blocks, that + :paramref:`.EnvironmentContext.transaction_per_migration` be used + so that the calling environment is tuned to expect short per-file + migrations whether or not one of them has an autocommit block. + + + """ + _in_connection_transaction = self._in_connection_transaction() + + if self.impl.transactional_ddl and self.as_sql: + self.impl.emit_commit() + + elif _in_connection_transaction: + assert self._transaction is not None + + self._transaction.commit() + self._transaction = None + + if not self.as_sql: + assert self.connection is not None + current_level = self.connection.get_isolation_level() + base_connection = self.connection + + # in 1.3 and 1.4 non-future mode, the connection gets switched + # out. we can use the base connection with the new mode + # except that it will not know it's in "autocommit" and will + # emit deprecation warnings when an autocommit action takes + # place. + self.connection = ( + self.impl.connection + ) = base_connection.execution_options(isolation_level="AUTOCOMMIT") + + # sqlalchemy future mode will "autobegin" in any case, so take + # control of that "transaction" here + fake_trans: Optional[Transaction] = self.connection.begin() + else: + fake_trans = None + try: + yield + finally: + if not self.as_sql: + assert self.connection is not None + if fake_trans is not None: + fake_trans.commit() + self.connection.execution_options( + isolation_level=current_level + ) + self.connection = self.impl.connection = base_connection + + if self.impl.transactional_ddl and self.as_sql: + self.impl.emit_begin() + + elif _in_connection_transaction: + assert self.connection is not None + self._transaction = self.connection.begin() + + def begin_transaction( + self, _per_migration: bool = False + ) -> Union[_ProxyTransaction, ContextManager[None]]: + """Begin a logical transaction for migration operations. + + This method is used within an ``env.py`` script to demarcate where + the outer "transaction" for a series of migrations begins. Example:: + + def run_migrations_online(): + connectable = create_engine(...) + + with connectable.connect() as connection: + context.configure( + connection=connection, target_metadata=target_metadata + ) + + with context.begin_transaction(): + context.run_migrations() + + Above, :meth:`.MigrationContext.begin_transaction` is used to demarcate + where the outer logical transaction occurs around the + :meth:`.MigrationContext.run_migrations` operation. + + A "Logical" transaction means that the operation may or may not + correspond to a real database transaction. If the target database + supports transactional DDL (or + :paramref:`.EnvironmentContext.configure.transactional_ddl` is true), + the :paramref:`.EnvironmentContext.configure.transaction_per_migration` + flag is not set, and the migration is against a real database + connection (as opposed to using "offline" ``--sql`` mode), a real + transaction will be started. If ``--sql`` mode is in effect, the + operation would instead correspond to a string such as "BEGIN" being + emitted to the string output. + + The returned object is a Python context manager that should only be + used in the context of a ``with:`` statement as indicated above. + The object has no other guaranteed API features present. + + .. seealso:: + + :meth:`.MigrationContext.autocommit_block` + + """ + + if self._in_external_transaction: + return nullcontext() + + if self.impl.transactional_ddl: + transaction_now = _per_migration == self._transaction_per_migration + else: + transaction_now = _per_migration is True + + if not transaction_now: + return nullcontext() + + elif not self.impl.transactional_ddl: + assert _per_migration + + if self.as_sql: + return nullcontext() + else: + # track our own notion of a "transaction block", which must be + # committed when complete. Don't rely upon whether or not the + # SQLAlchemy connection reports as "in transaction"; this + # because SQLAlchemy future connection features autobegin + # behavior, so it may already be in a transaction from our + # emitting of queries like "has_version_table", etc. While we + # could track these operations as well, that leaves open the + # possibility of new operations or other things happening in + # the user environment that still may be triggering + # "autobegin". + + in_transaction = self._transaction is not None + + if in_transaction: + return nullcontext() + else: + assert self.connection is not None + self._transaction = ( + sqla_compat._safe_begin_connection_transaction( + self.connection + ) + ) + return _ProxyTransaction(self) + elif self.as_sql: + + @contextmanager + def begin_commit(): + self.impl.emit_begin() + yield + self.impl.emit_commit() + + return begin_commit() + else: + assert self.connection is not None + self._transaction = sqla_compat._safe_begin_connection_transaction( + self.connection + ) + return _ProxyTransaction(self) + + def get_current_revision(self) -> Optional[str]: + """Return the current revision, usually that which is present + in the ``alembic_version`` table in the database. + + This method intends to be used only for a migration stream that + does not contain unmerged branches in the target database; + if there are multiple branches present, an exception is raised. + The :meth:`.MigrationContext.get_current_heads` should be preferred + over this method going forward in order to be compatible with + branch migration support. + + If this :class:`.MigrationContext` was configured in "offline" + mode, that is with ``as_sql=True``, the ``starting_rev`` + parameter is returned instead, if any. + + """ + heads = self.get_current_heads() + if len(heads) == 0: + return None + elif len(heads) > 1: + raise util.CommandError( + "Version table '%s' has more than one head present; " + "please use get_current_heads()" % self.version_table + ) + else: + return heads[0] + + def get_current_heads(self) -> Tuple[str, ...]: + """Return a tuple of the current 'head versions' that are represented + in the target database. + + For a migration stream without branches, this will be a single + value, synonymous with that of + :meth:`.MigrationContext.get_current_revision`. However when multiple + unmerged branches exist within the target database, the returned tuple + will contain a value for each head. + + If this :class:`.MigrationContext` was configured in "offline" + mode, that is with ``as_sql=True``, the ``starting_rev`` + parameter is returned in a one-length tuple. + + If no version table is present, or if there are no revisions + present, an empty tuple is returned. + + """ + if self.as_sql: + start_from_rev: Any = self._start_from_rev + if start_from_rev == "base": + start_from_rev = None + elif start_from_rev is not None and self.script: + start_from_rev = [ + cast("Script", self.script.get_revision(sfr)).revision + for sfr in util.to_list(start_from_rev) + if sfr not in (None, "base") + ] + return util.to_tuple(start_from_rev, default=()) + else: + if self._start_from_rev: + raise util.CommandError( + "Can't specify current_rev to context " + "when using a database connection" + ) + if not self._has_version_table(): + return () + assert self.connection is not None + return tuple( + row[0] for row in self.connection.execute(self._version.select()) + ) + + def _ensure_version_table(self, purge: bool = False) -> None: + with sqla_compat._ensure_scope_for_ddl(self.connection): + assert self.connection is not None + self._version.create(self.connection, checkfirst=True) + if purge: + assert self.connection is not None + self.connection.execute(self._version.delete()) + + def _has_version_table(self) -> bool: + assert self.connection is not None + return sqla_compat._connectable_has_table( + self.connection, self.version_table, self.version_table_schema + ) + + def stamp(self, script_directory: ScriptDirectory, revision: str) -> None: + """Stamp the version table with a specific revision. + + This method calculates those branches to which the given revision + can apply, and updates those branches as though they were migrated + towards that revision (either up or down). If no current branches + include the revision, it is added as a new branch head. + + """ + heads = self.get_current_heads() + if not self.as_sql and not heads: + self._ensure_version_table() + head_maintainer = HeadMaintainer(self, heads) + for step in script_directory._stamp_revs(revision, heads): + head_maintainer.update_to_step(step) + + def run_migrations(self, **kw: Any) -> None: + r"""Run the migration scripts established for this + :class:`.MigrationContext`, if any. + + The commands in :mod:`alembic.command` will set up a function + that is ultimately passed to the :class:`.MigrationContext` + as the ``fn`` argument. This function represents the "work" + that will be done when :meth:`.MigrationContext.run_migrations` + is called, typically from within the ``env.py`` script of the + migration environment. The "work function" then provides an iterable + of version callables and other version information which + in the case of the ``upgrade`` or ``downgrade`` commands are the + list of version scripts to invoke. Other commands yield nothing, + in the case that a command wants to run some other operation + against the database such as the ``current`` or ``stamp`` commands. + + :param \**kw: keyword arguments here will be passed to each + migration callable, that is the ``upgrade()`` or ``downgrade()`` + method within revision scripts. + + """ + self.impl.start_migrations() + + heads: Tuple[str, ...] + if self.purge: + if self.as_sql: + raise util.CommandError("Can't use --purge with --sql mode") + self._ensure_version_table(purge=True) + heads = () + else: + heads = self.get_current_heads() + + dont_mutate = self.opts.get("dont_mutate", False) + + if not self.as_sql and not heads and not dont_mutate: + self._ensure_version_table() + + head_maintainer = HeadMaintainer(self, heads) + + assert self._migrations_fn is not None + for step in self._migrations_fn(heads, self): + with self.begin_transaction(_per_migration=True): + if self.as_sql and not head_maintainer.heads: + # for offline mode, include a CREATE TABLE from + # the base + assert self.connection is not None + self._version.create(self.connection) + log.info("Running %s", step) + if self.as_sql: + self.impl.static_output( + "-- Running %s" % (step.short_log,) + ) + step.migration_fn(**kw) + + # previously, we wouldn't stamp per migration + # if we were in a transaction, however given the more + # complex model that involves any number of inserts + # and row-targeted updates and deletes, it's simpler for now + # just to run the operations on every version + head_maintainer.update_to_step(step) + for callback in self.on_version_apply_callbacks: + callback( + ctx=self, + step=step.info, + heads=set(head_maintainer.heads), + run_args=kw, + ) + + if self.as_sql and not head_maintainer.heads: + assert self.connection is not None + self._version.drop(self.connection) + + def _in_connection_transaction(self) -> bool: + try: + meth = self.connection.in_transaction # type:ignore[union-attr] + except AttributeError: + return False + else: + return meth() + + def execute( + self, + sql: Union[Executable, str], + execution_options: Optional[dict] = None, + ) -> None: + """Execute a SQL construct or string statement. + + The underlying execution mechanics are used, that is + if this is "offline mode" the SQL is written to the + output buffer, otherwise the SQL is emitted on + the current SQLAlchemy connection. + + """ + self.impl._exec(sql, execution_options) + + def _stdout_connection( + self, connection: Optional[Connection] + ) -> MockConnection: + def dump(construct, *multiparams, **params): + self.impl._exec(construct) + + return MockEngineStrategy.MockConnection(self.dialect, dump) + + @property + def bind(self) -> Optional[Connection]: + """Return the current "bind". + + In online mode, this is an instance of + :class:`sqlalchemy.engine.Connection`, and is suitable + for ad-hoc execution of any kind of usage described + in SQLAlchemy Core documentation as well as + for usage with the :meth:`sqlalchemy.schema.Table.create` + and :meth:`sqlalchemy.schema.MetaData.create_all` methods + of :class:`~sqlalchemy.schema.Table`, + :class:`~sqlalchemy.schema.MetaData`. + + Note that when "standard output" mode is enabled, + this bind will be a "mock" connection handler that cannot + return results and is only appropriate for a very limited + subset of commands. + + """ + return self.connection + + @property + def config(self) -> Optional[Config]: + """Return the :class:`.Config` used by the current environment, + if any.""" + + if self.environment_context: + return self.environment_context.config + else: + return None + + def _compare_type( + self, inspector_column: Column[Any], metadata_column: Column + ) -> bool: + if self._user_compare_type is False: + return False + + if callable(self._user_compare_type): + user_value = self._user_compare_type( + self, + inspector_column, + metadata_column, + inspector_column.type, + metadata_column.type, + ) + if user_value is not None: + return user_value + + return self.impl.compare_type(inspector_column, metadata_column) + + def _compare_server_default( + self, + inspector_column: Column[Any], + metadata_column: Column[Any], + rendered_metadata_default: Optional[str], + rendered_column_default: Optional[str], + ) -> bool: + if self._user_compare_server_default is False: + return False + + if callable(self._user_compare_server_default): + user_value = self._user_compare_server_default( + self, + inspector_column, + metadata_column, + rendered_column_default, + metadata_column.server_default, + rendered_metadata_default, + ) + if user_value is not None: + return user_value + + return self.impl.compare_server_default( + inspector_column, + metadata_column, + rendered_metadata_default, + rendered_column_default, + ) + + +class HeadMaintainer: + def __init__(self, context: MigrationContext, heads: Any) -> None: + self.context = context + self.heads = set(heads) + + def _insert_version(self, version: str) -> None: + assert version not in self.heads + self.heads.add(version) + + self.context.impl._exec( + self.context._version.insert().values( + version_num=literal_column("'%s'" % version) + ) + ) + + def _delete_version(self, version: str) -> None: + self.heads.remove(version) + + ret = self.context.impl._exec( + self.context._version.delete().where( + self.context._version.c.version_num + == literal_column("'%s'" % version) + ) + ) + + if ( + not self.context.as_sql + and self.context.dialect.supports_sane_rowcount + and ret is not None + and ret.rowcount != 1 + ): + raise util.CommandError( + "Online migration expected to match one " + "row when deleting '%s' in '%s'; " + "%d found" + % (version, self.context.version_table, ret.rowcount) + ) + + def _update_version(self, from_: str, to_: str) -> None: + assert to_ not in self.heads + self.heads.remove(from_) + self.heads.add(to_) + + ret = self.context.impl._exec( + self.context._version.update() + .values(version_num=literal_column("'%s'" % to_)) + .where( + self.context._version.c.version_num + == literal_column("'%s'" % from_) + ) + ) + + if ( + not self.context.as_sql + and self.context.dialect.supports_sane_rowcount + and ret is not None + and ret.rowcount != 1 + ): + raise util.CommandError( + "Online migration expected to match one " + "row when updating '%s' to '%s' in '%s'; " + "%d found" + % (from_, to_, self.context.version_table, ret.rowcount) + ) + + def update_to_step(self, step: Union[RevisionStep, StampStep]) -> None: + if step.should_delete_branch(self.heads): + vers = step.delete_version_num + log.debug("branch delete %s", vers) + self._delete_version(vers) + elif step.should_create_branch(self.heads): + vers = step.insert_version_num + log.debug("new branch insert %s", vers) + self._insert_version(vers) + elif step.should_merge_branches(self.heads): + # delete revs, update from rev, update to rev + ( + delete_revs, + update_from_rev, + update_to_rev, + ) = step.merge_branch_idents(self.heads) + log.debug( + "merge, delete %s, update %s to %s", + delete_revs, + update_from_rev, + update_to_rev, + ) + for delrev in delete_revs: + self._delete_version(delrev) + self._update_version(update_from_rev, update_to_rev) + elif step.should_unmerge_branches(self.heads): + ( + update_from_rev, + update_to_rev, + insert_revs, + ) = step.unmerge_branch_idents(self.heads) + log.debug( + "unmerge, insert %s, update %s to %s", + insert_revs, + update_from_rev, + update_to_rev, + ) + for insrev in insert_revs: + self._insert_version(insrev) + self._update_version(update_from_rev, update_to_rev) + else: + from_, to_ = step.update_version_num(self.heads) + log.debug("update %s to %s", from_, to_) + self._update_version(from_, to_) + + +class MigrationInfo: + """Exposes information about a migration step to a callback listener. + + The :class:`.MigrationInfo` object is available exclusively for the + benefit of the :paramref:`.EnvironmentContext.on_version_apply` + callback hook. + + """ + + is_upgrade: bool + """True/False: indicates whether this operation ascends or descends the + version tree.""" + + is_stamp: bool + """True/False: indicates whether this operation is a stamp (i.e. whether + it results in any actual database operations).""" + + up_revision_id: Optional[str] + """Version string corresponding to :attr:`.Revision.revision`. + + In the case of a stamp operation, it is advised to use the + :attr:`.MigrationInfo.up_revision_ids` tuple as a stamp operation can + make a single movement from one or more branches down to a single + branchpoint, in which case there will be multiple "up" revisions. + + .. seealso:: + + :attr:`.MigrationInfo.up_revision_ids` + + """ + + up_revision_ids: Tuple[str, ...] + """Tuple of version strings corresponding to :attr:`.Revision.revision`. + + In the majority of cases, this tuple will be a single value, synonymous + with the scalar value of :attr:`.MigrationInfo.up_revision_id`. + It can be multiple revision identifiers only in the case of an + ``alembic stamp`` operation which is moving downwards from multiple + branches down to their common branch point. + + """ + + down_revision_ids: Tuple[str, ...] + """Tuple of strings representing the base revisions of this migration step. + + If empty, this represents a root revision; otherwise, the first item + corresponds to :attr:`.Revision.down_revision`, and the rest are inferred + from dependencies. + """ + + revision_map: RevisionMap + """The revision map inside of which this operation occurs.""" + + def __init__( + self, + revision_map: RevisionMap, + is_upgrade: bool, + is_stamp: bool, + up_revisions: Union[str, Tuple[str, ...]], + down_revisions: Union[str, Tuple[str, ...]], + ) -> None: + self.revision_map = revision_map + self.is_upgrade = is_upgrade + self.is_stamp = is_stamp + self.up_revision_ids = util.to_tuple(up_revisions, default=()) + if self.up_revision_ids: + self.up_revision_id = self.up_revision_ids[0] + else: + # this should never be the case with + # "upgrade", "downgrade", or "stamp" as we are always + # measuring movement in terms of at least one upgrade version + self.up_revision_id = None + self.down_revision_ids = util.to_tuple(down_revisions, default=()) + + @property + def is_migration(self) -> bool: + """True/False: indicates whether this operation is a migration. + + At present this is true if and only the migration is not a stamp. + If other operation types are added in the future, both this attribute + and :attr:`~.MigrationInfo.is_stamp` will be false. + """ + return not self.is_stamp + + @property + def source_revision_ids(self) -> Tuple[str, ...]: + """Active revisions before this migration step is applied.""" + return ( + self.down_revision_ids if self.is_upgrade else self.up_revision_ids + ) + + @property + def destination_revision_ids(self) -> Tuple[str, ...]: + """Active revisions after this migration step is applied.""" + return ( + self.up_revision_ids if self.is_upgrade else self.down_revision_ids + ) + + @property + def up_revision(self) -> Optional[Revision]: + """Get :attr:`~.MigrationInfo.up_revision_id` as + a :class:`.Revision`. + + """ + return self.revision_map.get_revision(self.up_revision_id) + + @property + def up_revisions(self) -> Tuple[Optional[_RevisionOrBase], ...]: + """Get :attr:`~.MigrationInfo.up_revision_ids` as a + :class:`.Revision`.""" + return self.revision_map.get_revisions(self.up_revision_ids) + + @property + def down_revisions(self) -> Tuple[Optional[_RevisionOrBase], ...]: + """Get :attr:`~.MigrationInfo.down_revision_ids` as a tuple of + :class:`Revisions <.Revision>`.""" + return self.revision_map.get_revisions(self.down_revision_ids) + + @property + def source_revisions(self) -> Tuple[Optional[_RevisionOrBase], ...]: + """Get :attr:`~MigrationInfo.source_revision_ids` as a tuple of + :class:`Revisions <.Revision>`.""" + return self.revision_map.get_revisions(self.source_revision_ids) + + @property + def destination_revisions(self) -> Tuple[Optional[_RevisionOrBase], ...]: + """Get :attr:`~MigrationInfo.destination_revision_ids` as a tuple of + :class:`Revisions <.Revision>`.""" + return self.revision_map.get_revisions(self.destination_revision_ids) + + +class MigrationStep: + from_revisions_no_deps: Tuple[str, ...] + to_revisions_no_deps: Tuple[str, ...] + is_upgrade: bool + migration_fn: Any + + @property + def name(self) -> str: + return self.migration_fn.__name__ + + @classmethod + def upgrade_from_script( + cls, revision_map: RevisionMap, script: Script + ) -> RevisionStep: + return RevisionStep(revision_map, script, True) + + @classmethod + def downgrade_from_script( + cls, revision_map: RevisionMap, script: Script + ) -> RevisionStep: + return RevisionStep(revision_map, script, False) + + @property + def is_downgrade(self) -> bool: + return not self.is_upgrade + + @property + def short_log(self) -> str: + return "%s %s -> %s" % ( + self.name, + util.format_as_comma(self.from_revisions_no_deps), + util.format_as_comma(self.to_revisions_no_deps), + ) + + def __str__(self): + if self.doc: + return "%s %s -> %s, %s" % ( + self.name, + util.format_as_comma(self.from_revisions_no_deps), + util.format_as_comma(self.to_revisions_no_deps), + self.doc, + ) + else: + return self.short_log + + +class RevisionStep(MigrationStep): + def __init__( + self, revision_map: RevisionMap, revision: Script, is_upgrade: bool + ) -> None: + self.revision_map = revision_map + self.revision = revision + self.is_upgrade = is_upgrade + if is_upgrade: + self.migration_fn = ( + revision.module.upgrade # type:ignore[attr-defined] + ) + else: + self.migration_fn = ( + revision.module.downgrade # type:ignore[attr-defined] + ) + + def __repr__(self): + return "RevisionStep(%r, is_upgrade=%r)" % ( + self.revision.revision, + self.is_upgrade, + ) + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, RevisionStep) + and other.revision == self.revision + and self.is_upgrade == other.is_upgrade + ) + + @property + def doc(self) -> str: + return self.revision.doc + + @property + def from_revisions(self) -> Tuple[str, ...]: + if self.is_upgrade: + return self.revision._normalized_down_revisions + else: + return (self.revision.revision,) + + @property + def from_revisions_no_deps( # type:ignore[override] + self, + ) -> Tuple[str, ...]: + if self.is_upgrade: + return self.revision._versioned_down_revisions + else: + return (self.revision.revision,) + + @property + def to_revisions(self) -> Tuple[str, ...]: + if self.is_upgrade: + return (self.revision.revision,) + else: + return self.revision._normalized_down_revisions + + @property + def to_revisions_no_deps( # type:ignore[override] + self, + ) -> Tuple[str, ...]: + if self.is_upgrade: + return (self.revision.revision,) + else: + return self.revision._versioned_down_revisions + + @property + def _has_scalar_down_revision(self) -> bool: + return len(self.revision._normalized_down_revisions) == 1 + + def should_delete_branch(self, heads: Set[str]) -> bool: + """A delete is when we are a. in a downgrade and b. + we are going to the "base" or we are going to a version that + is implied as a dependency on another version that is remaining. + + """ + if not self.is_downgrade: + return False + + if self.revision.revision not in heads: + return False + + downrevs = self.revision._normalized_down_revisions + + if not downrevs: + # is a base + return True + else: + # determine what the ultimate "to_revisions" for an + # unmerge would be. If there are none, then we're a delete. + to_revisions = self._unmerge_to_revisions(heads) + return not to_revisions + + def merge_branch_idents( + self, heads: Set[str] + ) -> Tuple[List[str], str, str]: + other_heads = set(heads).difference(self.from_revisions) + + if other_heads: + ancestors = { + r.revision + for r in self.revision_map._get_ancestor_nodes( + self.revision_map.get_revisions(other_heads), check=False + ) + } + from_revisions = list( + set(self.from_revisions).difference(ancestors) + ) + else: + from_revisions = list(self.from_revisions) + + return ( + # delete revs, update from rev, update to rev + list(from_revisions[0:-1]), + from_revisions[-1], + self.to_revisions[0], + ) + + def _unmerge_to_revisions(self, heads: Set[str]) -> Tuple[str, ...]: + other_heads = set(heads).difference([self.revision.revision]) + if other_heads: + ancestors = { + r.revision + for r in self.revision_map._get_ancestor_nodes( + self.revision_map.get_revisions(other_heads), check=False + ) + } + return tuple(set(self.to_revisions).difference(ancestors)) + else: + return self.to_revisions + + def unmerge_branch_idents( + self, heads: Set[str] + ) -> Tuple[str, str, Tuple[str, ...]]: + to_revisions = self._unmerge_to_revisions(heads) + + return ( + # update from rev, update to rev, insert revs + self.from_revisions[0], + to_revisions[-1], + to_revisions[0:-1], + ) + + def should_create_branch(self, heads: Set[str]) -> bool: + if not self.is_upgrade: + return False + + downrevs = self.revision._normalized_down_revisions + + if not downrevs: + # is a base + return True + else: + # none of our downrevs are present, so... + # we have to insert our version. This is true whether + # or not there is only one downrev, or multiple (in the latter + # case, we're a merge point.) + if not heads.intersection(downrevs): + return True + else: + return False + + def should_merge_branches(self, heads: Set[str]) -> bool: + if not self.is_upgrade: + return False + + downrevs = self.revision._normalized_down_revisions + + if len(downrevs) > 1 and len(heads.intersection(downrevs)) > 1: + return True + + return False + + def should_unmerge_branches(self, heads: Set[str]) -> bool: + if not self.is_downgrade: + return False + + downrevs = self.revision._normalized_down_revisions + + if self.revision.revision in heads and len(downrevs) > 1: + return True + + return False + + def update_version_num(self, heads: Set[str]) -> Tuple[str, str]: + if not self._has_scalar_down_revision: + downrev = heads.intersection( + self.revision._normalized_down_revisions + ) + assert ( + len(downrev) == 1 + ), "Can't do an UPDATE because downrevision is ambiguous" + down_revision = list(downrev)[0] + else: + down_revision = self.revision._normalized_down_revisions[0] + + if self.is_upgrade: + return down_revision, self.revision.revision + else: + return self.revision.revision, down_revision + + @property + def delete_version_num(self) -> str: + return self.revision.revision + + @property + def insert_version_num(self) -> str: + return self.revision.revision + + @property + def info(self) -> MigrationInfo: + return MigrationInfo( + revision_map=self.revision_map, + up_revisions=self.revision.revision, + down_revisions=self.revision._normalized_down_revisions, + is_upgrade=self.is_upgrade, + is_stamp=False, + ) + + +class StampStep(MigrationStep): + def __init__( + self, + from_: Optional[Union[str, Collection[str]]], + to_: Optional[Union[str, Collection[str]]], + is_upgrade: bool, + branch_move: bool, + revision_map: Optional[RevisionMap] = None, + ) -> None: + self.from_: Tuple[str, ...] = util.to_tuple(from_, default=()) + self.to_: Tuple[str, ...] = util.to_tuple(to_, default=()) + self.is_upgrade = is_upgrade + self.branch_move = branch_move + self.migration_fn = self.stamp_revision + self.revision_map = revision_map + + doc: Optional[str] = None + + def stamp_revision(self, **kw: Any) -> None: + return None + + def __eq__(self, other): + return ( + isinstance(other, StampStep) + and other.from_revisions == self.revisions + and other.to_revisions == self.to_revisions + and other.branch_move == self.branch_move + and self.is_upgrade == other.is_upgrade + ) + + @property + def from_revisions(self): + return self.from_ + + @property + def to_revisions(self) -> Tuple[str, ...]: + return self.to_ + + @property + def from_revisions_no_deps( # type:ignore[override] + self, + ) -> Tuple[str, ...]: + return self.from_ + + @property + def to_revisions_no_deps( # type:ignore[override] + self, + ) -> Tuple[str, ...]: + return self.to_ + + @property + def delete_version_num(self) -> str: + assert len(self.from_) == 1 + return self.from_[0] + + @property + def insert_version_num(self) -> str: + assert len(self.to_) == 1 + return self.to_[0] + + def update_version_num(self, heads: Set[str]) -> Tuple[str, str]: + assert len(self.from_) == 1 + assert len(self.to_) == 1 + return self.from_[0], self.to_[0] + + def merge_branch_idents( + self, heads: Union[Set[str], List[str]] + ) -> Union[Tuple[List[Any], str, str], Tuple[List[str], str, str]]: + return ( + # delete revs, update from rev, update to rev + list(self.from_[0:-1]), + self.from_[-1], + self.to_[0], + ) + + def unmerge_branch_idents( + self, heads: Set[str] + ) -> Tuple[str, str, List[str]]: + return ( + # update from rev, update to rev, insert revs + self.from_[0], + self.to_[-1], + list(self.to_[0:-1]), + ) + + def should_delete_branch(self, heads: Set[str]) -> bool: + # TODO: we probably need to look for self.to_ inside of heads, + # in a similar manner as should_create_branch, however we have + # no tests for this yet (stamp downgrades w/ branches) + return self.is_downgrade and self.branch_move + + def should_create_branch(self, heads: Set[str]) -> Union[Set[str], bool]: + return ( + self.is_upgrade + and (self.branch_move or set(self.from_).difference(heads)) + and set(self.to_).difference(heads) + ) + + def should_merge_branches(self, heads: Set[str]) -> bool: + return len(self.from_) > 1 + + def should_unmerge_branches(self, heads: Set[str]) -> bool: + return len(self.to_) > 1 + + @property + def info(self) -> MigrationInfo: + up, down = ( + (self.to_, self.from_) + if self.is_upgrade + else (self.from_, self.to_) + ) + assert self.revision_map is not None + return MigrationInfo( + revision_map=self.revision_map, + up_revisions=up, + down_revisions=down, + is_upgrade=self.is_upgrade, + is_stamp=True, + ) diff --git a/venv/Lib/site-packages/alembic/script/__init__.py b/venv/Lib/site-packages/alembic/script/__init__.py new file mode 100644 index 0000000..d78f3f1 --- /dev/null +++ b/venv/Lib/site-packages/alembic/script/__init__.py @@ -0,0 +1,4 @@ +from .base import Script +from .base import ScriptDirectory + +__all__ = ["ScriptDirectory", "Script"] diff --git a/venv/Lib/site-packages/alembic/script/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/script/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f14c7c051889f2729175d250a9e160ee014f562 GIT binary patch literal 279 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 IBKq_HFV>`3B>(^b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/script/__pycache__/revision.cpython-37.pyc b/venv/Lib/site-packages/alembic/script/__pycache__/revision.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f64c7e9455cb4d3ee8abc6d3819565ff6c5498d GIT binary patch literal 41636 zcmd^odvqMvdEe~p>;sDhumnNyA&Od3qDW9AM7?c@q9~H0ELnmTlCq=~>E#l40WP@M z1!o2%uwBTtC|i_krH-96iKAnaaUOM(I?tx5Pnx7@UVr4cJ!wvwY+Ki9a@@EleVnwX zN!9kWzu$Lf?#wP06fN8Rrwi=eJ9qBf$9M1j-uKSYp`o0G&tYfg!X5v`vi_78;U|sA z5vyQ%ziV5TvQ(mOEhI{b1mkwyF4^*%EG6-qtUC*-QcCVQh^I?wiKh_Hlrj=eBc3f~ zC7wZipfn)yEaJIRPT~WI50(ZcoAU7fJ<* zk08FGv_awp#79e`65oLM#?nTKk0L%+8k6`a{TNqh|P@zS`&H`O;UY$NW@uMSsl-)dDiR&Q5ZXYH-lY;vnr z+97xH)e+vq-8_Hg&K+{cwByB;`xKPKB(@)^?h=EAFl6L58(QN>cQ%LSDn)RNO@2_gp`M_+NB3@^|0E8 zt8KV?uv$=$;O~8J+v@#l>U9UbdI)KcszZ|YSeT{`tH&kf2vbTAsVCGnxjw3n;rd}^ zpRy*7f0OfjBGDPFG#X96;@6rDZyMLhCmJjG$sViJ>y`8MD&o#e#q;r-JJzh%t24}s ztJLx8r6sw2yf(wz11H>OtJ*kKszv>3h>$u-^k?uTOld`fOT4XtuI`cL!SKWHE zq8LBLQX4ZYIH`+DonBg$b_|_<`S~Zy$3F1nu@62y{S-1}POmIhKU`tCsTUf$S!O}9%*4U)_WG8#Fdb#E?yX|g8#@0x1>yg6~d(T|C2O(0<+|xcVaYo%U@lN8%JBb7DB<`6Z zV8c%W5kVe#M5Rt4ki)TE)GFL6$fAIc?&dk;;-o-PQ ztBuQNo~@lf;{gr_7ArFsk-Yamhi>UE#{6xJ|31zF~+sQYq*@SXb>h*jHamOk-=y$ra>13rbSDkM9PhglmObh9M zXLC7($J46X@N2WRs>|{1IMW=!WG7W`Ua7jB)Y9T2e$sB$Uve8WNoj*+@i&EUlI_`# zNITKC%2wM(nDFhZ*7c-Hv=fWll-;%$i$E^+xOGF&I9ipQZXF1#FYfk=HLr-NQ>--b zuNzrx&K5)9AVhm>zd=kMU__lrvUr0@w3R3PaK7J>IyBM&b&QMUrOtoGQtKqDfNVo@? zNvh1Qr)j%xqhHpQC@2(T+Od|zI(Pc6fSzX zboZi8j_U>H?PM$N+|mL@-o1xyiH~ar2{NvPbKh~bm3`f5CvGHqNA=;bK}D&hSaGYx zMYrmqp5koNEzZ@jE|99LF7Daw?RgZ#+p_l;CsOVMsLy?n!2t#WUT3~pYfL2FdzoS~ zgus>MX$JKe^5{X8A(cTL4_hQ4dY8d;?_(`y&4;x}1zeg(SwXNod3{Smc=P2sa%gMThF+LSj9oZZnT4w70dHuatQjZ{nhex9BEE%1hb6~FCd&|<5|&y5m@WdR6cj@9 zeRxVI1XHyen$O|3CpagOPqeo5wDa45Bp1T7EIfcDulqxiQ#L|$;Q91&um#oW<=_aa zOQEM&4#!qz>eb^_A5^odN-4SQSrrdGgmbTZOkThpFN?qm zk=A%upQBMp_aduD@sKR3n@#ffBhyKIW!$p~$99?W9T}X>$E%Cg258O9N>`Ixh3H0c zh6C7t#9RTJtbzDgnKe*AL*r{8oc(qL>UW3lIrd$OPqd0rySf_u?ZWsF>Nv}KxV8kw zO!*1#!{!vl3Bxg>Yt%+H21f9=FKz#K*X5SVjmy!^qr!y3XNF z2+mFMwtc%Wd<+FE7H(k3lNls)Wc*p!+RM)%9W9VE2Qm zdPmf@c$>dnC_j!WF0vW}Wu|mNc>oE*asMcq(hpTDqG_k(R8#Y5l~LKZ6KX)^M4ZaR z(gsyt(z3C%AvG*%1F^IbRgkotq-~J$M%6}18&qRz6GdixlWOzZX|+XdMcsJ_WE+rj z+uKRCUEPk9p;*cebq7+0V<|UH%&^(<2FR?i`I zT73wq+fe`WQs4KelX&(v^>K9?f6T?d7u1K}&ZrmFOUS!jeL}sgO2M61)EU6=tojJ< z+^*g*cV1BCw^Qnzsvv!bx~9$tcV194NLQ+g^g95(Sv99Fpbs@Qk9v#hO?6S#rPT|n zft*dXh@3lv)?899+UzMGd3ObA4@%mSx{S0tW38T5SJ1L$wSx4!V(BgQH;~>|t4QCC zQ8+67epP)G*LSOZU=lvr84LxF=PHY>zk04xYxwwj#Y%CZvPiLGN+gDQS|K?fsozA7U&iQK0zKt>U1#a~&hv9gt@C^O#SD0oZfWsU&IS8DzR;q&H}>J_*6 zgck2vZmefi^yJE>V<8*z1fUiP8(L7L%=0(!)tEio8jAtTp!3#<=x8X`?JrJFPM!tz z6~>7A4}SQ|uM7@#Az)jPfRMV7MC;d{0Q`1QMB5c(Q7c{%CDs~q;Y24KPhY^q7Wv#= zAXqRcJ{3d+Fmxbu{)Hm+1^W%OmKt@)EXAe9Le-t)a&R#l0o}ML7z53e)+=zVO|iNW zreVd#(!zNxkl0gH=ak(*cT&c>70D1#5cXME=7?{m(D-qDg^F3ZbfUE(4pb3TXKod8 zzao&MGU65>7tX1$rJkO>7qH&Z-*e|w^Gd^X;~ZA^Y>~>B2$+zVs|$<%iiS-L0PhuS z?lAxYDmJv=TL)ank>fM#gG(O0WpGsmTyC{e-z6FWGpLvk{bt*@*RMeUvr;e1h_2JS zC(*MnnBHYD88*i!L#%-J)JH<+|4AQjHi9S6zc0O8AEkg!!Ds=2jH&)Jy&gsZl!FC@ z`~{YW5ADJYYc+vi8^3n&3pL-WgKx@DUbR-!5@wcPYg^Zy8`g2_?B&&LJ99nN&Wc_l zJD+YRE~ed&_?hcjs0MMZ)q?FT=m)M2SqKN*<#yUUW1Cpg#Io}__wBaR&dw$tu~zXr zKj=Q(MlEuky7cgiphws9Xy*W0GSp7{!~RG+an-(I6AfN3v@`LP3-mtDFR)>`1SZ#!W&X7tR zvixnrRzuHo9QUtM^?Do9GGMi>cG9G6M_N|W9FulC(gq|gWzu$__B-0?_K-kl2qYrc zDlb$Qnza@%c*O@%IKSjq_k(=a{92`sWTLWYrVHyd>oymdYDhtlJI2$*Fqja&*6wie z1-g?^SGdrG;t-_10pc=K?N%1M)!C{`n}sS$mAj4pICy&6Oky%9{CZ?k#t>;+XY;F2 zlFeHm20grFRAdQP1TDK`Pafr;2wf2Y2$Lg6hn4AP@ z@=(1AHo`kRX&!vfEOp^w73vkoMR31`YadRq;Q*`&GOXRWVWQWW7uE3QbF$ z!4J6#!>wrbD&>L;SgJZnuj;!;@l+>SQA)5> z-+-8q3AuD;nu{x)Q4U$T>j^i7vfQUw;7A!2l$EHjymGVANnftim#SW8V;LM#xr>T> zu<#)>rizbQ)Y)1lYY*LS6$QkpJzAt{-b}?+olP*Ak+;ICidQm>3o0_pq7#D!L;(Vw z6gb@luagpHN$bN&(p*w)mxv!7WCKFBYhqY}ZhaKh`PK_c@KEXUTa%B2=%g~XWtL%g;1WYG9E>k@XaryDR# z))rz}NcgD9@gw=CHKtkYFjv55r`_{tx`v~GT!2rwYX&^cp5a3kEmb30Is)}gqw3FU;-|~Tmh`V1)C|C%9x2<{6ZX;&QnJ%qGHM?*wdW-d zsC{<}`_~RSm_}Wueo-P0b>rtGz;ufEnL5V{#Lzj7p+93^f(27B9+)|epV!5NK+wPk zGtGs?!-D{~;KQ^X5e}IMT?;CPp~EK)`lK|#ue6I}O8JSB6C^qJWn4p`OSnDAxRX6p zuPmHbmBa870m;Fqhd``XfAAQ}uHYfl3KAK9Z<%_n3munq0{$lfok-jwTtbp(T11%e z+Yc_COn~&z4eEV+pyOUZ8eCm8U`&bZ-*;vPxU(p#81^x3n<{SBX!k`tbdv_(*|)*p z!9m#@HrPqrQiI{1K;-=Hpxzg@d?F_{oQ_k6D@bQsSyUx{75Kegft4(V=Oc=jhl+|S zDRDk=X$XXss=DHJ(q7ZWLoO{A6Im^8pGUkOMl22b@N}t{Jvcv9p@gm0LC>Tc zAp9SEy(0*$ENB8KLmpJY0sglWqp;EI*jTcF7_t9)cOlVj3z7EPMc*2WoN6Lu4}<6w z>Xp@}@i?a>KV17p3R=X)@_ai1$>98IvYni_+%!TsnOq$3cKG&diRBOQ8ut%FCUM#} zB%L$l=^-Vg+9}C*g86(pM}X6xciO3WXEr$wjQv^yoImm&vM${XDIxtL3>-i?_H^sf zqe7jFbV(7DdEBx{#<@}lL!(xV{?QGnAMU}b{ydruR;B6I=DO*8XZQ&ZzAVP{EFLEs z(WWCqq=pL7ZzmsT6G|CjDb}#c?rCIwfU}R}-%65#R=P{Ue(&i8*;cgKp(kv`q zyf+gc1CE2x(oZ3>{0SL@S7T#9%Qwb@($?}`Qqp#EF44A0SxG_9j&eNaW4SKf4=K!9 zO)W!ebYH_LBt3?Xgt2@`OS!LNT=2_Lyfpp1b!j>_KFR45AO>T##!P)lg$x{|lNuB( zX$|}I(xSpr1EV)r^}*G7Gq8hJ8g!My1(FR%s=2U5cs%%>VWf%CdzFXlU~`02_HG*+Aq zpe3V_xkq!}8m4>1jig$E^4rXE=wB-_Au}d_7J}~n%w}Rg`>x1 z3Id@a9CO4JZ=`HUyv6SRY3oBwb~coPgvh~nV<_Lw1rqKxFq~Vh?~6DnnH5kxQUVF~;S08T9dX8mSa3rJ-=)EVy&dZ5O>iwWgv z0u_RY&~fQ`QD*g2r(1boHG7+FC&rSk+in6NvuwHuiH{Pfa>BBi4VKL;7;-EXE|cZM zAp%n%6kxM$2m%_7?IIazCog8*-?GFV(7 zQ~br^qBmfw@(UQ%W1tp(wQJ2#^}H(%$X(RF_{HWz&G(A&8)m}FefoEW)W^8)30hlk zor(vTDI_v?#iqBI9L_J*>I!y*MJ$K)mrrcj7iXkfio_8Qm@0aN_q`Lvg{ps{srDD) z83EUux!{4~>=Mlzi_Jw?a=@rWxB{ffltw4Eu%pBvu-_3zKFdL^3&bhwH`f#s^_vgW zd|FtbiKuCGq3vZ+o=MuL#D*57;R#b3D(r)Aj8=g>S0B_9DfWPJOj+-Odf1SzMzFUH z&3ORPQNnQ-Y7LFKYYPiiRpVUSMKyte=q^)R&G?>rGGSm$^GvqblsEy@MTtriJtC87 zu%91gig2eJg|vnPqX}zFgR?=^W&@>RSrcPdFvHGB^|B6-`cvG}#y-I9tDt)YO}tFB zA=GzcsM8?j9R(Ll>Pu$GPUMoUon45;)DTk&oe&3VIKwuZbug{Mlw~oxi*>NrYdKdU z9ih`F&;p9EKsL5__cfRSfke{o-M&pXU0!P~d}BNG6Gwyl8TY8~C|lnpe+r_Ky+ZSTmfsfsIXh z-3_=^P5Zcc9&!bJvVl!eQlv1Tyz#CY_%0rR+~NadP{f_sI=hP;fR8yekCC{}`2}A6 z2COWu-A;6?|u*^PK7ABXVg*`FgwwqS4_2ErSLDtFk`T3u)N|`O!s)ZgI>6(Pvb<6B0oud$u5f|Ne^VfiI{cnIB*%{ zMR-r!uxw(>!c}NxFFNk~e9Ghr_kP$afg>Bx&|Zc74lH>b(k0~jQzEqllFPq9KTpa& z3E=@|mRt&C-G=WNQh0h+vgxfLMHPAp6`_zXE(DJK+K=8K0<{Fn8j31d_~bx}Rc>e@ zT5&5i$TE+b+*8CjaAfLnLz<)*%CYs%6}=11r8>McB7O-*G>}SITw*Pq(ylpi`FskZ zlipGk3QnS)(0)ncpHr`aF=7u*dxA{?GjI$7;YSr(Hi7^a_%j7kG#&!)8LutgmdInI zzoSSj@8l$0HQ^HAHK(Su?-o2-Q_CQV~M3Rg#GbhcIp z-%|!^F4w{Qz+=CYgma90KkkO!_MDELpaOm7`jge1)Rt!so z_-r)Ecx!unIrKg(PQUP!$wf?7_j2H}Fw24Vek=km383d2+_VO5x9z@#bU`GDi@5ZC zOyGKtFfO!9tegflgH^qE*mhZYiPjzQcJ|5J8Z%o}%1>2&=)6$us>f##D_%eV`ma2s#)i%?e6naZ`iZi_yXqxl6x-h zQ`R;6I?O0H5@&!4-n9ITAOq*3?f(4AOE6`?C_~2M&BV2YN?o+v&mlhy>M($SIZ_!2 zwy*hmgF;pffRzZ$@vBLsCQzfTa`E(2){9nS%(493#hm-I38>c-*2_RNFIg-_@()UW zTQej;IAlZel^+CbW5~uhsf93tN1|~Bq?elD8omFN=t|{j`=Uh2aA70WvD?;p*PAU;lc01fjBX z9)&@1)Qq7rfKaTX;`xBqO5OX>eD0D%B6DoxMvlq)q zg%AvY>st0}RBXgL5pGQ}WJ3+Z8SCU4_D}Rv#ABiY8eRnh4orhJ7Sm8ci#kLs5<=Dk z!lAaRl)>VL?O*}?g&-ioJ!CRms)R&4AE)$O{yV`wjQY;Ck!S#Q}vTN6MZHlUrt#9ow5$f@#`O8sJ2OYM#WPf))X z;%x7oA;e=QDG`U_nKZV*Ay-VT0Mi# zChUuvFfj-M2U$vcJ-ghlpt)Gl3k<+R2%Dr~;Dx`)(n4nosufj8RK4~tb-x!6f{vie z-_Ka?!*ubG9eJSg(uB`4ebA^C(?YINF0CZP>$49#>@hq?V;ITb#-O3codC(}Qw|9)O%;$N^k0s773w zUi6me%f6N-5G4umA!3zb^9=4Gl8lfZ@O_|W?_#<^U5NN2991laOn1-#Q=V|I!ukTo z!An2jzd^_hW$oHYDh~ge;f{6g{|of)MmUp89qZ%s_>mPP9IyMsObxW_Ts7_u2EqVi z^O;sfYV2z;VJ9D-;FDb6IXq+yi_ec;kPWDj=oio2HSve=jEHxvZDp7O9xWlOHn^-3 zxU2-YtP7gU;$0Z1urOAWxO+eDCUN&82{@D{tk#$qX(9A+fwZ01P=dnWs`IMz5;?T= zOHhZM3S;0KLv!uebW_i0Ex=5P$reC5h8A_QAFQqjRuLe%-1-_qO5l?Vq#i7r(h!bP zh%P&}TkQqfh(TvM-!Z~Xc@?bn>E(V5L&2cA@&JQUVU7m#Fo&>UkkX#VdV-vy+2e3=Zh=3qqL>$0; z3t(;o=2Ln^6qJgZ_ie+a7*>w2U9-Gr{p4#2QQ`qHiE1uEP8jOJq`QdnVM1@it(WRT z?}z-9azLWf*T~J2JO89g1EFQ8I7Au{UE>7oBPra?LcIUy$PZPd%3aUE#VHTdWJ+Pz z*~ftfS%===9z4gnl;C|HqXGnJLut4V?Sv^yVo5RYzr)sEvp${hVD1E3wXSDjcpiXl zXW#~&@E~<4C@GNwNg!-fo3@$4^ocI!gJ@j%rhSMA-z17N*U=0JYIA5pyH4_&U`+E; z6NztfL_j=+qUD4S^vDN>`6`wvZ4rgElYGhU8;2364F1W^~CdM(k;P*NA9M zL$=ve5TgN_FZMc?AgI!U}eCuD&T?f z&}&#&sFuSbrZwHyylP*^Co(Lr5w`e(Ft_f%b;yQXo@P+Lgy&oP!l$W-1$~rrGhou< z78y!9F=)f{=O^)q)*SvAW0x3+L{G${G4?}TwOPEB!2U&?mQ-Hf${iS}C$d0mjyx z>JM;$xChw+=!Zq+I*M>O5g7?&(XaP>Ysi2bNA{czccUR5C}bR$t%9;kh(#c#YWtli zX@~>(5updaLNYjGL|y=Npn8FC&Yblo{BGPL6f8izgcaywWNiaOddNz5&oARQM4h%j2e|W&F!ykW zlU1WZFAIQ+{pSeZP@r=Xt^2|yOQ^0@6~-`WxZVSns*{G{2fjj`G~CJYD}qg^iLzhwxrUOZex6Yj4YLhv^{$O2YxvNww@UGh4E+2!2HHP&> zcZmi_->MTa2);9q)y9L6-V&7=b|$6$46IBb#PA7As`Oisf3AxKGD^W39poI7*^`+* z-8FquXoisDyATmlyq)`?s8B?Ewxcz|Mm7+}6&gwRN047kwwfgl6dHwIIP}+S{5A&) zUn`yLal+}w)v@{0t=oW%pHbD>3PhP;K2PLhO%h8G5wV7z-4j&5SipBWD^pe-pXDI+CFV`}>u4 zau(7&b0|C~IrkxF_M+|m0e&s8(EmETNV?l4e-g0Y*yzHz8Xw12QzPK4>)k18=I zzrvqjPCkM-bW)4;ny(c&JK3yb42ZUL2~RTiX$G4ZaL&fnGlBq1`M3$Chb)Sy`ZdnC zNjz&g+&q#^Y=_!~GcE5pa5aVv5@wckl6FUp95EwlZn-Ot9*yV~f~%}GNvGXCD7ZB$ zG!on9V{XP7m%O|jP}Ui$EugD2IJu0l>kNqL%L4#Al94 zuzVLL7Pe!yA*Fzw8C%W4@JZPU+ZwNGB`3C2%29^N%2L9zbnmKA54+8!xeLX>h#A5H zY7=3##Wz8WfLf7b)GczVoMFu4GmV;d(7M=@au8ii$wE6paA*P)=#=3-C#Yf!%PP=(@3tx7*Pqht!Fm^teq_8@qV ze~dwOe}%!XBB1}{_Hy8l6-^4#R=sx%{{G?JrA3)Av3ncJIJvM{Z_e?+gEBq)wRgZ5 zQS!u~R$rP4t1Ff2S+o0V2s-v`LpuRHz@%jcvb-fAdhcw|9gW!q)8MDIj$#vSm}yyf zTzpu5$8^|$Paoo-54hytG%Cbg&kbZuQ-qf(vb-Q%S`tF2l6#bhfw2JxDOfzFl&bOUcl89=7{*p zL#@R*k`kniqabCDq`K$GdgFk_Z=48wx1Zi*cuq#(>~@;!<74@)&yAPS(VJBMVpMs* zu?#d4{a|Z`QBM&W#E+q}r&(eS5i4T`uv?+P0qk)dC0B?slrnoN>l#B&jx4@HaN!0C zm9TJKvP5ZX!I=mt`Y+-ng7os&+a#`kw3>laH+E#=WQ6FH0|y?6%ssH&0@3~z+)3k^ z9OlGF+5^`!!TAEYb_!hSg-gfVsW5H%2LWs2c|_ zCf%R#a|+}fDXdq{Cb-mw79uB>!Q+TI?k?0eNDlLQzMZAcVs)rJ%*4leK^vPcV^@PG-&bKViR%&(lCqYNmya=b^1^5*nIcZGn zAX_Zmpu}7|r*ha{_=kRmRuHt)hNS{+!9gQgwv~JjbW64-1@lW?weSt5F1$o%1iEZ>aP0>_?j$ zy+&I9`DOCHaUno&)rxO0fJQrYZFY@w{og88O%QZ3ru)pd*k{dZK?u9u0);tP~BC|>9a&@k?ZjW@=y);#=xMr5`q z#=dtkPvioGu_Jq?sXn!z7z~(~h<6D(fGHW#dSW)tc;UH55xGG8_O83-`(d|PJpBc( zXO;;r@Tm~UWV+Xg1rbt=Tk* z@AGU7sV)w-wObFqm*yDozDGE<*)(aNX{78a|1kq6t99@e8)g8~)hPB)#(X;>GI;RN z;Vw9^^=Z8yZv8_K*gU}X_e?8=!{I>wRMbGI{F0cK{c9yb6zwHQBIX%5fta>ZdLHPx z_24Dkf7V?W-K~Bms;gVCeUnKO?JLx7v;A9F3|j{;EBFji`v$F<2t4>*uce&aX!YO5 zPcLZL+^>eyiZ)HradlOWyV@=g+4(eJy4|W(_-^+juwpfVVe~1{g zYvP79#Z*e^rD5nlpkBg0R6%5=f?0#*^DD6JE_c$+C4X_rFKr6-Xfr^EHEv;++XLpZ zRL~Y4`aj_merc{Ltu$ovaru|>;w4370Ka_=(v%)InPy*Q1Er}l!)0>+2GTxFs8W?> z<-tp&hvCLRRROGoNo-&SPeION3`fL(zevKCi0d4#^3dMp9P%aUL;jqRw4u_o zFDAVsehR0`Xm*EM(Z!sSEf3`z*00;k8?F>nkxn;|aquiKmeiB|Ag9e0>{D9MXyNYHD*! z&82A5CHNN899>a!(j;gm6##c3$m zOo0{eCt*aOy$V7R*#BSUX7wA^ndE9}H4QxogdNd?KqGoF<$eZY3*Ejh_!$L(2%9Z{ zLFgtWxC1*#aYkX58{i?DIm9xO`;*9xQYcom2gGhBrBHN2jUR5O5a#?Gv>McA3<8_w zaf)LK_zovGdjH8E;z^KO!Aj#)NMJRHOhb}qNb(Hh1jPY}jl+U5^Ztf51*jYaC=bqS zs1+w-0jH%K&zd^Gzu@j$P; zJ!5TbF=^1DZcOFT)3n|T3wR{e&|Aq68p!=i((f<#tG$t311p?TsfOWk!4Vk&B>}X& zKT>qBgXU4!N|;WJR9*sKZ7{*}6`oja%up1p7AQ1%D>zPjxj3aY4-|qp>uc5EERP^L zoMomsJ{ou~$@v?Q-{2;US7T|jk)XY)HFK0UrUf~(8`#y971|?X7*V?}L#zu98QvR5 z{@CLnZa+qRn+P_9#50-FftM?&mljZc{3H>(={+~O%&zdBPyp@u1|Wo6-imvhk<6*_ z{4C5wVc*5sd1AlNh@M6fi&qR{4`gA}D!uJ4-W21?JlWelaT^Qkjy+-uGmjSc&^Eb8 zA3qQb-Gbf|B-?rL&L}x<0Z5c8zA8QR7P#{#R+P43aw4o9zlgA4r`hy$YwwfG03e0< zXkrD`VjFS@bkreqi1J5JdN`k`Is~WM*yH1^LwKRrOtrXM6^)UPM;;SXw}xK?b{2Bq zgi_M&B4)tGnwU`v6mdz8ETQYxJe=dZL=lun9bHJ$`bpZ9LRMlV?U9oKLn4wk+!?WF z&h$3W&GjR4nyyt$*5ZNt^!y7w)q~BIoF*addla(}*Gqhb5d89Cl{}9%Tl27C2!=~N zbl6LdElcE+#36ICmBKzpoEw#NBN9iLiI>2{c#Mux0>R-$#!L;n5q7?dHMNrxU(8N= z4%T646UixSMdrU^j8rc&;A>h-KG-F3(MKE^V5Q`4@0$C!%%zFOk)-+>3Zo;4*LX<3KZ;)^P@v>{A4c%YP>fwq)~otFmn z!*GxE{L&y#U<;a68usdPB3szZf5Qs9wFo$Kvi~?g!g=v39H{+wQm)B?7XUwy;z1IK(Qg5q0}s)ptZUl^TtPESixqf>F-S}{@&|Vz1)+RM zLgX@9cizIBoCz6#Av8CGub8b~0|O8eeRrIO4o&RgB!(m*S0RVH5f*3&(j6)-M zNF_)PSb){6Ci6nTY$1vJ+nIpy72wmYupI@&2;`iaQo6s0&-V=&F+jpW*Cj(LOI zj6;SYXju;Va_uY*m4;wrSd{!MRCe;D95Ib{m}hyXankhc8F_x7=XusC%nQi)dGrRy zR0l-Apa#(j@ne@#lPdofoPS{drIK){@=RQe(!@D1_(#O)y_06W1C+F4EfVh{!o^!4 zzWr3Xntqwh==yyQAO!aYorpH8`ps{h91*#RD@|OuS=*BsIT8W`V|IVaaO=9)enJja zc3(3T!Rk?VYD^J2YiQ~hqX%n_DkZt%(iHitSFZ@|K$f1#pGjUCz69?At#(Pc)EfcA z)8$qpKZkUs2W^S+^WU-WQo}6EBHm-9Kd@r06ZiKE|NTz({wRG6{|PB5q6!txHoP<(TOu zNrjLa_ZxVYM`Z^p$kH5kc&?-o_7LG z8|a6o9zA{!{aOZRntf=NCcxdkN?MGh=*UkO6*&jw1*{2$0UTlIm6n9%4735*(uUI` z9A_ksbI-ho;c}nB`$cWUxW6W&cpBR20MEnip5mp5YE)b$-E-{>jw;GF#sln6RaRym zSXJi%P5GLpKZ56scv%fII5)rh7h0qq0b5c-f+1(dttEeOf0gOWA?Y6C1!=VZ{C!RsTz%L6DRK8WiA zUNf)(H4pGr3jBk>$li1J(Mw_jd=%%pfKFDw9!*jT{}u_FQQ7>-IN z%TA;Yq(T+dnsr-@xO~3VNZj56;Uq3^g}#V^pwaVGfWjcUaBIA5Ru9jU!!~$o#zguu zB7=FeQP>{7b4J!mOrV=G?vjsDX9g>r9KWdzbb-haE==4Edub{G^7}ewVT@6v?x-8x z8?3quw?q)YwgK^~4bCnUPY+|8(5_Dkc|&oa&w>^W*8|{nqm5RFPR0d-&|A;&`Gy;f zo7;@)tBXFF29JdehN0)Zs^K1EBO&o)H&}nW$+u{Q><0`|!egc$yY=XM07Xa;aSE%r zbA9(9@|M|x}zfLM`^G3~<)gkaVf6Ot$t@+Wz@z+fkX=NK#@=xl`O zWDbcAkJa;e`{x+kjUXhT>(T@=1EmqYV9iX2a<(vCnca6f|7tYn)bo z9nWtfL{B4P6|@+|W2KzLxI=-d0MeFq_*;Ms33Q;x_qUs#4kH6;t9ZbC1&Cg| z6bMy?&H_|5sb3|4mjr;yl7hm#1Jx|dte?cIYG5p)67WsI*;b+y5&{a~u zDJX)6x8fi!QI<}jwv7QNfj)zi$Y@otw?&-ca%x1pUnc!gy4$JLs@;J6H=BS2nw!T} z&|bDSYA@*f>L466#;76&eNLj@S3!|Cfo5~xaL^OBS|~Hy^<}EOy)UCZ<9L%K4?dP& zq0~{r0cz$vUivd6`SVZuDHM2loP@SN0>o<%A3%fR zG(5&yUTFsq&GcHXfc%HJw^02h?kzk523-Ao;NH^h-10nf1*}rZX;iB?$+45x5Y>|C zZe$Q4^oy~Mbo*h3?9$CT5^@NnjlabrNg%tRP73}2T}Ih4xKxcBJ`bpq9w_U(gOII3 zyP-UkJtBDX4~}9lqsmwpo(vu!%(p%|7=qJ*;Gnk%+T4L#kXZV3r5Ow7` zW?FXBV>csj7tI}Zb?+9;wCvFDhhyS&!}2@Ig#K|@N!mIwvBmu+>Wu{b&HyA(A1@@s zsi0rvox==-apBYwvu+0yYuWEO+()8W7vX6>!TV%(U;u8c2&)2@S!@o``T${)gozP$ zhTM+(9}t9ox9gJRpJh(b0RK2+UuVD>0!JBr7NnUTr4(npSK1&LF5Gj09Y(>XdfWXA zKKvgU>}K#!5VQ%7^N8r<07XjAjzY7G*C5%W*uV>47%(bgGZsxRv;m?QNIPQzBg5A# zk$n-*7^rlDykLg5f$7nD0ceTs9v|Ixr>Hr6g_Da6h^U1RB7&*KGc`dDA<#kx1s@ii z^eV@hC&-*|Upz!uo*|4F$X;^#bil)d>k&4SBjm~u$f${L)XyUg7)gxqpGCZc!`|^` ztMD{}*s}XG-2D?mj1Kyi!*fT+dX7x&H8M;jAVy%*H~tYhG2xszaT?(?ez;8^?ZZLT zXyzW5GNF4XgS!xPGG!QXX3AxEl1ZBols1Gf&@1!oUU*!sXvgK_%<&|H6AX?qIK$vH zgL4dCVDJiqzs2Cw3_im^03vf;xbh!n8UdnBC|_pm^9+8IflONgT%DJ{!9Xl8GQDLj z{W{Y)vs?lzrvDQIhRnMoyn(Mr0U?Vm6ouT_5dL!bdv?o%qnk!I<8SZS`$z8t8+~74 zQ(@!S{m`f7^HJ-)*@tnkS5+789 zNY5iagx}%dcLb&7p(QG)4R71v(DXaSht&N@8w($I42sD> z(N)Oht|Dk<&EwDWviC*N`pEpN%)S=^I3gjMvYEn00zXN7doek1_;qZPfan8E?(XN& zSjxWc_`uy1c(A)Y@Y0bTK*{OW`;Uc3Oz!n2^h=A#0mm%QW^iIB`0zj-Zs-XK0M!n# zo`zY=V5F;a*sIC|f;_E{cnDd#S#cgo1D{E`F@%D_lglZ`sW2TQAIC~a5#{{fqSmY!~EwFkYBYjFm8jzf%#il zn*!J#oC>$W3{)AWd~Dh+qt!B!$Kzd08dha*{BB`zl3(`Npp~~T?{zWv0%yhbR6i+d-YwNEcg$URW3hFpyiRz z!YeU@v(>vnrSlo)jWFV}7Z^Q=2zn>X+q@iGgh|2_Ovib?HsT=S4p}>M7pI`1_h6e+ zE)iCA*1h&duOTgHx$bDsK);0hhuLO)(dJQDr=l0%%Q5f4`|ga?#=&J~X)vvxoZ*<) z!efRrd*0cMK@`riYd)uBKJ&#vYH6_=yea5a6rv~XM-js$5)QMcp)ayZ(@^LFab}J= zgL|^i+hE^ogIjH_yC|AH=-SIU#Dw}45*2Dj;BOVafF?fmjDEqqrw86S&_l%YkRls@ z{g`#7547C>N%%xSA_-XsNWX(y&ln)31xUujWODs2$z8BAsIh?31Yu!t^}wzj&}0lj z5$CScu$OV`1vX45o!#0M;f{bP^W|L73mJmr$$>as4db&i>$tu`RFaqJU%`nkR$%7R zRw=rDg99@BLRg_39$E=boHpvM*a)2FWB4}*FGH;d77DBv+|V!JRDWz>gX9|Qj5Xy4 z{D>L*fRiBy)|2OW__l#_s2=D2gLmO;%3{9gJrA720o_G&qMjHV@Vb%)by@*q7Hd8h z`|AKtxN*PVQXR@3#6vZXN5Y5_;UqyA@+I_le+!r0W$pi#Iwb z9#359T}0;seKHD^MT9q6n5Bp11Vw!OJ@&A(FU`zA>qGb8-qjTxw2qSaNK^`h899x; zH@|?t(tFfR{2U$WK`2~N*UUriV?7o9Ee1*yWiJNRi8C&~nl1Sh#58 znflMte#6#k-E@9-joBW~&OKd27fnvT61>a}kgv?lG?#E%PuJwc2wthy>+6BwCg|fb zrrYbL+v(_-yh(#T-ecztu~ej2xA?qiIg@le{Fh)-Nz3l5qbQ0}g@9?(|hsZN-hh0F&>LTh0w&s|*ej#TLM9 zK9`rRfn!5ZI2DGoh16(fba2#>Z+bL0njg)ElJL_ky-Rc;m&vctdk2w#%?6S@msY(vdT=nyNzIGli~czYWMhVczaZG1zy@>9qgI9Ceh z!Ngq;ieF%JNqns&J=l0uzMKfr)d(ZCj3OT^m+eQxvN1=PvS}!be}t8Cj)+ZQohp9- z_x~QN@H3S^LOi%Cpbz?=tua1UT7pWf3S=n&t92{mwy@V!6~|x>P;8 z0}R*^caQ-YM|X$;@u54yfLyM-fdTvBZe&234wu18^-3MvY!_BEllwv5`uhwvGuXo5 z5d@_iy$7^H2=S-Fx9G@ebfw{#Yr!esEseykkAkakt1Ra!2DdSwNY%;Elncd``zK8L zZw#(6*va5-2KO^~n8EuQ9AXe@2#)Ylz|KXWk2#4}i^O*0Mkjk{0edy-)x(_B-fIZx zq`|jEzv~~~5~klDmbbTw*CPEP$2nK<-GQ(`dq=Y16!L{!Azc_OWD1$l%|bqW9%a)n9u^&(VCh@G7or@t5$F7sx_Jh zT0JOqip`>$V?Zu7OG++4Hk+oBi;&CBvXV=XE6s|MO~@0?2_=^ySDRJH6)_P^cBYzB zO0EV|o$2N@2^l6jW!+(0*Srj2=Xr!i(EU)ZL5|XUDTHynW%F%~s&V?ac>X z_+az8zr7h_*Kc+mw~Yz$rW1IbZQp$>cBS7<-Ws#C-rdj4p-;V6@Vb~zi)p6Tf9}w& z_0=G9vGI%b!-*2Hiz8L`$py%HM{cm3M@MEJu3o}ZuC!V;r-!KfCD3u+QdrAH zKTNi^BzdT2DCMN)fgj`Gvr?q+8Ou``c4-b>1^kFou8>D>LfEe+@a75|=%29gU4tcB zyCN@ZY+z`tznt)=y3kVgB?#q-{!B}a&-f=G5up!^PmMe57c8vaVX2;KDSw3E5<1Ss zaDIS;TMr*ZZ7){X0YExVk^pgsy99O!H3Y03AE#gu*oVkzbRFq*R8PaYjTtm%MJ>yr zHA6*ys21n?&|S+9frrrb#@7y=MoTF+ zEjI$<{SYBt#8>y?fldvRlA$q-w0B8mEy zsMB#mu_k3C@2dIz<&9`;n|pq8FW>*!e)a5_`!;amg#FBX-`iK~~pQfML`rFn+NPFd!!AF1He&~RsmtOCLmk@gd2dc0SNyd5Jr~k zKc5ty7Df3$1B5HM^Ct#iTvRZg5EFyqr$vJC{WEu1QrInts+z;aq?r1G|87=eiJ2Bs zmKu+AjRE=-KW8`D9n2>gV4v>4mLpwpW}I`Owc~{z;08Dxg0cQJkr|k3!H&CupV(0d z!Err!3mC`>iU>0{;y!X*5kJL!--qBMPPfhz$v*`4ogOSdhGXvcd^zL+ zN(f`A$J*#G-|U4d>`o5dh7U`jw}%Ym)ykQ%?SScDhH+UzIX2UGyhN_h76@+>W4a*hAK_Df=tij)e|!H)RWK z*zJ;>PY^^)keAp1yuHhj9ray9@Gtm)tFi#$^w>td@*A zAXdDYI1ULV!czbvhh%&S3EYZ%+i~J2y=2JehoH9d1PL;1gTfV85u-b9(sKf<t6}fIt!a_Cm(EQx)^Om0gQ|c{F50wO%9vL{; zx4P2ndZF+{&c@$p7T{9=ru>KB9%;mqI}~X%d88q(*fahI6-`4tWF;sK5W3mI$;$5b zhwrZ;(&X#Vk`;3!QJ1JQ9giwm!YmXeY821coc_c1=X7wuqKdK>9r~@Ebw3nAaqu5klyN|K> z0&dJWWbtLb2sS5vFM`dhyox}mKq6*0&~ohsZsI93$lg)8U51Vky8nTP|2MjUP90Sd zA+?}n;1+T*G18(!Y6(b13Xs1+byEaVO<@A5z%!7FdMDLeT3Y%O2NDq(K%zN@#L9+z zA2y$W;OIQQ8-mK+L;(s>a*d>GxYf*)h#BEQ{)8s|lx|dU)XFDLSy_~4=i`SdZ_pZb zkfYPY;lo<{FBr+QG)k8|E7N(NJVO)bDCwK1rd^|dE2v`ZRu7-wo^4AaY560%DGPrF zDJ!B@K-yGaVCu77()X35vQ1LKD^0o)2yzDy*{R@A?48%|)3!bK{}6Z)ee$V7MO6$c zNE9lSX=58a+NHUg2gXGzG2=RJoS_K8M=A03*dM`GH+WT_nVVmjJw3Zn None: + self.dir = dir + self.file_template = file_template + self.version_locations = version_locations + self.truncate_slug_length = truncate_slug_length or 40 + self.sourceless = sourceless + self.output_encoding = output_encoding + self.revision_map = revision.RevisionMap(self._load_revisions) + self.timezone = timezone + self.hook_config = hook_config + self.recursive_version_locations = recursive_version_locations + self.messaging_opts = messaging_opts + + if not os.access(dir, os.F_OK): + raise util.CommandError( + "Path doesn't exist: %r. Please use " + "the 'init' command to create a new " + "scripts folder." % os.path.abspath(dir) + ) + + @property + def versions(self) -> str: + loc = self._version_locations + if len(loc) > 1: + raise util.CommandError("Multiple version_locations present") + else: + return loc[0] + + @util.memoized_property + def _version_locations(self): + if self.version_locations: + return [ + os.path.abspath(util.coerce_resource_to_filename(location)) + for location in self.version_locations + ] + else: + return (os.path.abspath(os.path.join(self.dir, "versions")),) + + def _load_revisions(self) -> Iterator[Script]: + if self.version_locations: + paths = [ + vers + for vers in self._version_locations + if os.path.exists(vers) + ] + else: + paths = [self.versions] + + dupes = set() + for vers in paths: + for file_path in Script._list_py_dir(self, vers): + real_path = os.path.realpath(file_path) + if real_path in dupes: + util.warn( + "File %s loaded twice! ignoring. Please ensure " + "version_locations is unique." % real_path + ) + continue + dupes.add(real_path) + + filename = os.path.basename(real_path) + dir_name = os.path.dirname(real_path) + script = Script._from_filename(self, dir_name, filename) + if script is None: + continue + yield script + + @classmethod + def from_config(cls, config: Config) -> ScriptDirectory: + """Produce a new :class:`.ScriptDirectory` given a :class:`.Config` + instance. + + The :class:`.Config` need only have the ``script_location`` key + present. + + """ + script_location = config.get_main_option("script_location") + if script_location is None: + raise util.CommandError( + "No 'script_location' key " "found in configuration." + ) + truncate_slug_length: Optional[int] + tsl = config.get_main_option("truncate_slug_length") + if tsl is not None: + truncate_slug_length = int(tsl) + else: + truncate_slug_length = None + + version_locations_str = config.get_main_option("version_locations") + version_locations: Optional[List[str]] + if version_locations_str: + version_path_separator = config.get_main_option( + "version_path_separator" + ) + + split_on_path = { + None: None, + "space": " ", + "os": os.pathsep, + ":": ":", + ";": ";", + } + + try: + split_char: Optional[str] = split_on_path[ + version_path_separator + ] + except KeyError as ke: + raise ValueError( + "'%s' is not a valid value for " + "version_path_separator; " + "expected 'space', 'os', ':', ';'" % version_path_separator + ) from ke + else: + if split_char is None: + # legacy behaviour for backwards compatibility + version_locations = _split_on_space_comma.split( + version_locations_str + ) + else: + version_locations = [ + x for x in version_locations_str.split(split_char) if x + ] + else: + version_locations = None + + prepend_sys_path = config.get_main_option("prepend_sys_path") + if prepend_sys_path: + sys.path[:0] = list( + _split_on_space_comma_colon.split(prepend_sys_path) + ) + + rvl = config.get_main_option("recursive_version_locations") == "true" + return ScriptDirectory( + util.coerce_resource_to_filename(script_location), + file_template=config.get_main_option( + "file_template", _default_file_template + ), + truncate_slug_length=truncate_slug_length, + sourceless=config.get_main_option("sourceless") == "true", + output_encoding=config.get_main_option("output_encoding", "utf-8"), + version_locations=version_locations, + timezone=config.get_main_option("timezone"), + hook_config=config.get_section("post_write_hooks", {}), + recursive_version_locations=rvl, + messaging_opts=config.messaging_opts, + ) + + @contextmanager + def _catch_revision_errors( + self, + ancestor: Optional[str] = None, + multiple_heads: Optional[str] = None, + start: Optional[str] = None, + end: Optional[str] = None, + resolution: Optional[str] = None, + ) -> Iterator[None]: + try: + yield + except revision.RangeNotAncestorError as rna: + if start is None: + start = cast(Any, rna.lower) + if end is None: + end = cast(Any, rna.upper) + if not ancestor: + ancestor = ( + "Requested range %(start)s:%(end)s does not refer to " + "ancestor/descendant revisions along the same branch" + ) + ancestor = ancestor % {"start": start, "end": end} + raise util.CommandError(ancestor) from rna + except revision.MultipleHeads as mh: + if not multiple_heads: + multiple_heads = ( + "Multiple head revisions are present for given " + "argument '%(head_arg)s'; please " + "specify a specific target revision, " + "'@%(head_arg)s' to " + "narrow to a specific head, or 'heads' for all heads" + ) + multiple_heads = multiple_heads % { + "head_arg": end or mh.argument, + "heads": util.format_as_comma(mh.heads), + } + raise util.CommandError(multiple_heads) from mh + except revision.ResolutionError as re: + if resolution is None: + resolution = "Can't locate revision identified by '%s'" % ( + re.argument + ) + raise util.CommandError(resolution) from re + except revision.RevisionError as err: + raise util.CommandError(err.args[0]) from err + + def walk_revisions( + self, base: str = "base", head: str = "heads" + ) -> Iterator[Script]: + """Iterate through all revisions. + + :param base: the base revision, or "base" to start from the + empty revision. + + :param head: the head revision; defaults to "heads" to indicate + all head revisions. May also be "head" to indicate a single + head revision. + + """ + with self._catch_revision_errors(start=base, end=head): + for rev in self.revision_map.iterate_revisions( + head, base, inclusive=True, assert_relative_length=False + ): + yield cast(Script, rev) + + def get_revisions(self, id_: _GetRevArg) -> Tuple[Optional[Script], ...]: + """Return the :class:`.Script` instance with the given rev identifier, + symbolic name, or sequence of identifiers. + + """ + with self._catch_revision_errors(): + return cast( + Tuple[Optional[Script], ...], + self.revision_map.get_revisions(id_), + ) + + def get_all_current(self, id_: Tuple[str, ...]) -> Set[Optional[Script]]: + with self._catch_revision_errors(): + return cast( + Set[Optional[Script]], self.revision_map._get_all_current(id_) + ) + + def get_revision(self, id_: str) -> Optional[Script]: + """Return the :class:`.Script` instance with the given rev id. + + .. seealso:: + + :meth:`.ScriptDirectory.get_revisions` + + """ + + with self._catch_revision_errors(): + return cast(Optional[Script], self.revision_map.get_revision(id_)) + + def as_revision_number( + self, id_: Optional[str] + ) -> Optional[Union[str, Tuple[str, ...]]]: + """Convert a symbolic revision, i.e. 'head' or 'base', into + an actual revision number.""" + + with self._catch_revision_errors(): + rev, branch_name = self.revision_map._resolve_revision_number(id_) + + if not rev: + # convert () to None + return None + elif id_ == "heads": + return rev + else: + return rev[0] + + def iterate_revisions( + self, + upper: Union[str, Tuple[str, ...], None], + lower: Union[str, Tuple[str, ...], None], + **kw: Any, + ) -> Iterator[Script]: + """Iterate through script revisions, starting at the given + upper revision identifier and ending at the lower. + + The traversal uses strictly the `down_revision` + marker inside each migration script, so + it is a requirement that upper >= lower, + else you'll get nothing back. + + The iterator yields :class:`.Script` objects. + + .. seealso:: + + :meth:`.RevisionMap.iterate_revisions` + + """ + return cast( + Iterator[Script], + self.revision_map.iterate_revisions(upper, lower, **kw), + ) + + def get_current_head(self) -> Optional[str]: + """Return the current head revision. + + If the script directory has multiple heads + due to branching, an error is raised; + :meth:`.ScriptDirectory.get_heads` should be + preferred. + + :return: a string revision number. + + .. seealso:: + + :meth:`.ScriptDirectory.get_heads` + + """ + with self._catch_revision_errors( + multiple_heads=( + "The script directory has multiple heads (due to branching)." + "Please use get_heads(), or merge the branches using " + "alembic merge." + ) + ): + return self.revision_map.get_current_head() + + def get_heads(self) -> List[str]: + """Return all "versioned head" revisions as strings. + + This is normally a list of length one, + unless branches are present. The + :meth:`.ScriptDirectory.get_current_head()` method + can be used normally when a script directory + has only one head. + + :return: a tuple of string revision numbers. + """ + return list(self.revision_map.heads) + + def get_base(self) -> Optional[str]: + """Return the "base" revision as a string. + + This is the revision number of the script that + has a ``down_revision`` of None. + + If the script directory has multiple bases, an error is raised; + :meth:`.ScriptDirectory.get_bases` should be + preferred. + + """ + bases = self.get_bases() + if len(bases) > 1: + raise util.CommandError( + "The script directory has multiple bases. " + "Please use get_bases()." + ) + elif bases: + return bases[0] + else: + return None + + def get_bases(self) -> List[str]: + """return all "base" revisions as strings. + + This is the revision number of all scripts that + have a ``down_revision`` of None. + + """ + return list(self.revision_map.bases) + + def _upgrade_revs( + self, destination: str, current_rev: str + ) -> List[RevisionStep]: + with self._catch_revision_errors( + ancestor="Destination %(end)s is not a valid upgrade " + "target from current head(s)", + end=destination, + ): + revs = self.iterate_revisions( + destination, current_rev, implicit_base=True + ) + return [ + migration.MigrationStep.upgrade_from_script( + self.revision_map, script + ) + for script in reversed(list(revs)) + ] + + def _downgrade_revs( + self, destination: str, current_rev: Optional[str] + ) -> List[RevisionStep]: + with self._catch_revision_errors( + ancestor="Destination %(end)s is not a valid downgrade " + "target from current head(s)", + end=destination, + ): + revs = self.iterate_revisions( + current_rev, destination, select_for_downgrade=True + ) + return [ + migration.MigrationStep.downgrade_from_script( + self.revision_map, script + ) + for script in revs + ] + + def _stamp_revs( + self, revision: _RevIdType, heads: _RevIdType + ) -> List[StampStep]: + with self._catch_revision_errors( + multiple_heads="Multiple heads are present; please specify a " + "single target revision" + ): + heads_revs = self.get_revisions(heads) + + steps = [] + + if not revision: + revision = "base" + + filtered_heads: List[Script] = [] + for rev in util.to_tuple(revision): + if rev: + filtered_heads.extend( + self.revision_map.filter_for_lineage( + cast(Sequence[Script], heads_revs), + rev, + include_dependencies=True, + ) + ) + filtered_heads = util.unique_list(filtered_heads) + + dests = self.get_revisions(revision) or [None] + + for dest in dests: + if dest is None: + # dest is 'base'. Return a "delete branch" migration + # for all applicable heads. + steps.extend( + [ + migration.StampStep( + head.revision, + None, + False, + True, + self.revision_map, + ) + for head in filtered_heads + ] + ) + continue + elif dest in filtered_heads: + # the dest is already in the version table, do nothing. + continue + + # figure out if the dest is a descendant or an + # ancestor of the selected nodes + descendants = set( + self.revision_map._get_descendant_nodes([dest]) + ) + ancestors = set(self.revision_map._get_ancestor_nodes([dest])) + + if descendants.intersection(filtered_heads): + # heads are above the target, so this is a downgrade. + # we can treat them as a "merge", single step. + assert not ancestors.intersection(filtered_heads) + todo_heads = [head.revision for head in filtered_heads] + step = migration.StampStep( + todo_heads, + dest.revision, + False, + False, + self.revision_map, + ) + steps.append(step) + continue + elif ancestors.intersection(filtered_heads): + # heads are below the target, so this is an upgrade. + # we can treat them as a "merge", single step. + todo_heads = [head.revision for head in filtered_heads] + step = migration.StampStep( + todo_heads, + dest.revision, + True, + False, + self.revision_map, + ) + steps.append(step) + continue + else: + # destination is in a branch not represented, + # treat it as new branch + step = migration.StampStep( + (), dest.revision, True, True, self.revision_map + ) + steps.append(step) + continue + + return steps + + def run_env(self) -> None: + """Run the script environment. + + This basically runs the ``env.py`` script present + in the migration environment. It is called exclusively + by the command functions in :mod:`alembic.command`. + + + """ + util.load_python_file(self.dir, "env.py") + + @property + def env_py_location(self): + return os.path.abspath(os.path.join(self.dir, "env.py")) + + def _generate_template(self, src: str, dest: str, **kw: Any) -> None: + with util.status( + f"Generating {os.path.abspath(dest)}", **self.messaging_opts + ): + util.template_to_file(src, dest, self.output_encoding, **kw) + + def _copy_file(self, src: str, dest: str) -> None: + with util.status( + f"Generating {os.path.abspath(dest)}", **self.messaging_opts + ): + shutil.copy(src, dest) + + def _ensure_directory(self, path: str) -> None: + path = os.path.abspath(path) + if not os.path.exists(path): + with util.status( + f"Creating directory {path}", **self.messaging_opts + ): + os.makedirs(path) + + def _generate_create_date(self) -> datetime.datetime: + if self.timezone is not None: + if tz is None: + raise util.CommandError( + "The library 'python-dateutil' is required " + "for timezone support" + ) + # First, assume correct capitalization + tzinfo = tz.gettz(self.timezone) + if tzinfo is None: + # Fall back to uppercase + tzinfo = tz.gettz(self.timezone.upper()) + if tzinfo is None: + raise util.CommandError( + "Can't locate timezone: %s" % self.timezone + ) + create_date = ( + datetime.datetime.utcnow() + .replace(tzinfo=tz.tzutc()) + .astimezone(tzinfo) + ) + else: + create_date = datetime.datetime.now() + return create_date + + def generate_revision( + self, + revid: str, + message: Optional[str], + head: Optional[_RevIdType] = None, + splice: Optional[bool] = False, + branch_labels: Optional[_RevIdType] = None, + version_path: Optional[str] = None, + depends_on: Optional[_RevIdType] = None, + **kw: Any, + ) -> Optional[Script]: + """Generate a new revision file. + + This runs the ``script.py.mako`` template, given + template arguments, and creates a new file. + + :param revid: String revision id. Typically this + comes from ``alembic.util.rev_id()``. + :param message: the revision message, the one passed + by the -m argument to the ``revision`` command. + :param head: the head revision to generate against. Defaults + to the current "head" if no branches are present, else raises + an exception. + :param splice: if True, allow the "head" version to not be an + actual head; otherwise, the selected head must be a head + (e.g. endpoint) revision. + + """ + if head is None: + head = "head" + + try: + Script.verify_rev_id(revid) + except revision.RevisionError as err: + raise util.CommandError(err.args[0]) from err + + with self._catch_revision_errors( + multiple_heads=( + "Multiple heads are present; please specify the head " + "revision on which the new revision should be based, " + "or perform a merge." + ) + ): + heads = cast( + Tuple[Optional["Revision"], ...], + self.revision_map.get_revisions(head), + ) + for h in heads: + assert h != "base" + + if len(set(heads)) != len(heads): + raise util.CommandError("Duplicate head revisions specified") + + create_date = self._generate_create_date() + + if version_path is None: + if len(self._version_locations) > 1: + for head_ in heads: + if head_ is not None: + assert isinstance(head_, Script) + version_path = os.path.dirname(head_.path) + break + else: + raise util.CommandError( + "Multiple version locations present, " + "please specify --version-path" + ) + else: + version_path = self.versions + + norm_path = os.path.normpath(os.path.abspath(version_path)) + for vers_path in self._version_locations: + if os.path.normpath(vers_path) == norm_path: + break + else: + raise util.CommandError( + "Path %s is not represented in current " + "version locations" % version_path + ) + + if self.version_locations: + self._ensure_directory(version_path) + + path = self._rev_path(version_path, revid, message, create_date) + + if not splice: + for head_ in heads: + if head_ is not None and not head_.is_head: + raise util.CommandError( + "Revision %s is not a head revision; please specify " + "--splice to create a new branch from this revision" + % head_.revision + ) + + resolved_depends_on: Optional[List[str]] + if depends_on: + with self._catch_revision_errors(): + resolved_depends_on = [ + dep + if dep in rev.branch_labels # maintain branch labels + else rev.revision # resolve partial revision identifiers + for rev, dep in [ + (not_none(self.revision_map.get_revision(dep)), dep) + for dep in util.to_list(depends_on) + ] + ] + else: + resolved_depends_on = None + + self._generate_template( + os.path.join(self.dir, "script.py.mako"), + path, + up_revision=str(revid), + down_revision=revision.tuple_rev_as_scalar( + tuple(h.revision if h is not None else None for h in heads) + ), + branch_labels=util.to_tuple(branch_labels), + depends_on=revision.tuple_rev_as_scalar(resolved_depends_on), + create_date=create_date, + comma=util.format_as_comma, + message=message if message is not None else ("empty message"), + **kw, + ) + + post_write_hooks = self.hook_config + if post_write_hooks: + write_hooks._run_hooks(path, post_write_hooks) + + try: + script = Script._from_path(self, path) + except revision.RevisionError as err: + raise util.CommandError(err.args[0]) from err + if script is None: + return None + if branch_labels and not script.branch_labels: + raise util.CommandError( + "Version %s specified branch_labels %s, however the " + "migration file %s does not have them; have you upgraded " + "your script.py.mako to include the " + "'branch_labels' section?" + % (script.revision, branch_labels, script.path) + ) + self.revision_map.add_revision(script) + return script + + def _rev_path( + self, + path: str, + rev_id: str, + message: Optional[str], + create_date: datetime.datetime, + ) -> str: + epoch = int(create_date.timestamp()) + slug = "_".join(_slug_re.findall(message or "")).lower() + if len(slug) > self.truncate_slug_length: + slug = slug[: self.truncate_slug_length].rsplit("_", 1)[0] + "_" + filename = "%s.py" % ( + self.file_template + % { + "rev": rev_id, + "slug": slug, + "epoch": epoch, + "year": create_date.year, + "month": create_date.month, + "day": create_date.day, + "hour": create_date.hour, + "minute": create_date.minute, + "second": create_date.second, + } + ) + return os.path.join(path, filename) + + +class Script(revision.Revision): + + """Represent a single revision file in a ``versions/`` directory. + + The :class:`.Script` instance is returned by methods + such as :meth:`.ScriptDirectory.iterate_revisions`. + + """ + + def __init__(self, module: ModuleType, rev_id: str, path: str): + self.module = module + self.path = path + super().__init__( + rev_id, + module.down_revision, # type: ignore[attr-defined] + branch_labels=util.to_tuple( + getattr(module, "branch_labels", None), default=() + ), + dependencies=util.to_tuple( + getattr(module, "depends_on", None), default=() + ), + ) + + module: ModuleType + """The Python module representing the actual script itself.""" + + path: str + """Filesystem path of the script.""" + + _db_current_indicator: Optional[bool] = None + """Utility variable which when set will cause string output to indicate + this is a "current" version in some database""" + + @property + def doc(self) -> str: + """Return the docstring given in the script.""" + + return re.split("\n\n", self.longdoc)[0] + + @property + def longdoc(self) -> str: + """Return the docstring given in the script.""" + + doc = self.module.__doc__ + if doc: + if hasattr(self.module, "_alembic_source_encoding"): + doc = doc.decode( # type: ignore[attr-defined] + self.module._alembic_source_encoding # type: ignore[attr-defined] # noqa + ) + return doc.strip() # type: ignore[union-attr] + else: + return "" + + @property + def log_entry(self) -> str: + entry = "Rev: %s%s%s%s%s\n" % ( + self.revision, + " (head)" if self.is_head else "", + " (branchpoint)" if self.is_branch_point else "", + " (mergepoint)" if self.is_merge_point else "", + " (current)" if self._db_current_indicator else "", + ) + if self.is_merge_point: + entry += "Merges: %s\n" % (self._format_down_revision(),) + else: + entry += "Parent: %s\n" % (self._format_down_revision(),) + + if self.dependencies: + entry += "Also depends on: %s\n" % ( + util.format_as_comma(self.dependencies) + ) + + if self.is_branch_point: + entry += "Branches into: %s\n" % ( + util.format_as_comma(self.nextrev) + ) + + if self.branch_labels: + entry += "Branch names: %s\n" % ( + util.format_as_comma(self.branch_labels), + ) + + entry += "Path: %s\n" % (self.path,) + + entry += "\n%s\n" % ( + "\n".join(" %s" % para for para in self.longdoc.splitlines()) + ) + return entry + + def __str__(self): + return "%s -> %s%s%s%s, %s" % ( + self._format_down_revision(), + self.revision, + " (head)" if self.is_head else "", + " (branchpoint)" if self.is_branch_point else "", + " (mergepoint)" if self.is_merge_point else "", + self.doc, + ) + + def _head_only( + self, + include_branches: bool = False, + include_doc: bool = False, + include_parents: bool = False, + tree_indicators: bool = True, + head_indicators: bool = True, + ) -> str: + text = self.revision + if include_parents: + if self.dependencies: + text = "%s (%s) -> %s" % ( + self._format_down_revision(), + util.format_as_comma(self.dependencies), + text, + ) + else: + text = "%s -> %s" % (self._format_down_revision(), text) + assert text is not None + if include_branches and self.branch_labels: + text += " (%s)" % util.format_as_comma(self.branch_labels) + if head_indicators or tree_indicators: + text += "%s%s%s" % ( + " (head)" if self._is_real_head else "", + " (effective head)" + if self.is_head and not self._is_real_head + else "", + " (current)" if self._db_current_indicator else "", + ) + if tree_indicators: + text += "%s%s" % ( + " (branchpoint)" if self.is_branch_point else "", + " (mergepoint)" if self.is_merge_point else "", + ) + if include_doc: + text += ", %s" % self.doc + return text + + def cmd_format( + self, + verbose: bool, + include_branches: bool = False, + include_doc: bool = False, + include_parents: bool = False, + tree_indicators: bool = True, + ) -> str: + if verbose: + return self.log_entry + else: + return self._head_only( + include_branches, include_doc, include_parents, tree_indicators + ) + + def _format_down_revision(self) -> str: + if not self.down_revision: + return "" + else: + return util.format_as_comma(self._versioned_down_revisions) + + @classmethod + def _from_path( + cls, scriptdir: ScriptDirectory, path: str + ) -> Optional[Script]: + dir_, filename = os.path.split(path) + return cls._from_filename(scriptdir, dir_, filename) + + @classmethod + def _list_py_dir(cls, scriptdir: ScriptDirectory, path: str) -> List[str]: + paths = [] + for root, dirs, files in os.walk(path, topdown=True): + if root.endswith("__pycache__"): + # a special case - we may include these files + # if a `sourceless` option is specified + continue + + for filename in sorted(files): + paths.append(os.path.join(root, filename)) + + if scriptdir.sourceless: + # look for __pycache__ + py_cache_path = os.path.join(root, "__pycache__") + if os.path.exists(py_cache_path): + # add all files from __pycache__ whose filename is not + # already in the names we got from the version directory. + # add as relative paths including __pycache__ token + names = {filename.split(".")[0] for filename in files} + paths.extend( + os.path.join(py_cache_path, pyc) + for pyc in os.listdir(py_cache_path) + if pyc.split(".")[0] not in names + ) + + if not scriptdir.recursive_version_locations: + break + + # the real script order is defined by revision, + # but it may be undefined if there are many files with a same + # `down_revision`, for a better user experience (ex. debugging), + # we use a deterministic order + dirs.sort() + + return paths + + @classmethod + def _from_filename( + cls, scriptdir: ScriptDirectory, dir_: str, filename: str + ) -> Optional[Script]: + if scriptdir.sourceless: + py_match = _sourceless_rev_file.match(filename) + else: + py_match = _only_source_rev_file.match(filename) + + if not py_match: + return None + + py_filename = py_match.group(1) + + if scriptdir.sourceless: + is_c = py_match.group(2) == "c" + is_o = py_match.group(2) == "o" + else: + is_c = is_o = False + + if is_o or is_c: + py_exists = os.path.exists(os.path.join(dir_, py_filename)) + pyc_exists = os.path.exists(os.path.join(dir_, py_filename + "c")) + + # prefer .py over .pyc because we'd like to get the + # source encoding; prefer .pyc over .pyo because we'd like to + # have the docstrings which a -OO file would not have + if py_exists or is_o and pyc_exists: + return None + + module = util.load_python_file(dir_, filename) + + if not hasattr(module, "revision"): + # attempt to get the revision id from the script name, + # this for legacy only + m = _legacy_rev.match(filename) + if not m: + raise util.CommandError( + "Could not determine revision id from filename %s. " + "Be sure the 'revision' variable is " + "declared inside the script (please see 'Upgrading " + "from Alembic 0.1 to 0.2' in the documentation)." + % filename + ) + else: + revision = m.group(1) + else: + revision = module.revision + return Script(module, revision, os.path.join(dir_, filename)) diff --git a/venv/Lib/site-packages/alembic/script/revision.py b/venv/Lib/site-packages/alembic/script/revision.py new file mode 100644 index 0000000..0350264 --- /dev/null +++ b/venv/Lib/site-packages/alembic/script/revision.py @@ -0,0 +1,1708 @@ +from __future__ import annotations + +import collections +import re +from typing import Any +from typing import Callable +from typing import cast +from typing import Collection +from typing import Deque +from typing import Dict +from typing import FrozenSet +from typing import Iterable +from typing import Iterator +from typing import List +from typing import Optional +from typing import overload +from typing import Sequence +from typing import Set +from typing import Tuple +from typing import TYPE_CHECKING +from typing import TypeVar +from typing import Union + +from sqlalchemy import util as sqlautil + +from .. import util +from ..util import not_none + +if TYPE_CHECKING: + from typing import Literal + +_RevIdType = Union[str, List[str], Tuple[str, ...]] +_GetRevArg = Union[ + str, + Iterable[Optional[str]], + Iterable[str], +] +_RevisionIdentifierType = Union[str, Tuple[str, ...], None] +_RevisionOrStr = Union["Revision", str] +_RevisionOrBase = Union["Revision", "Literal['base']"] +_InterimRevisionMapType = Dict[str, "Revision"] +_RevisionMapType = Dict[Union[None, str, Tuple[()]], Optional["Revision"]] +_T = TypeVar("_T") +_TR = TypeVar("_TR", bound=Optional[_RevisionOrStr]) + +_relative_destination = re.compile(r"(?:(.+?)@)?(\w+)?((?:\+|-)\d+)") +_revision_illegal_chars = ["@", "-", "+"] + + +class RevisionError(Exception): + pass + + +class RangeNotAncestorError(RevisionError): + def __init__( + self, lower: _RevisionIdentifierType, upper: _RevisionIdentifierType + ) -> None: + self.lower = lower + self.upper = upper + super().__init__( + "Revision %s is not an ancestor of revision %s" + % (lower or "base", upper or "base") + ) + + +class MultipleHeads(RevisionError): + def __init__(self, heads: Sequence[str], argument: Optional[str]) -> None: + self.heads = heads + self.argument = argument + super().__init__( + "Multiple heads are present for given argument '%s'; " + "%s" % (argument, ", ".join(heads)) + ) + + +class ResolutionError(RevisionError): + def __init__(self, message: str, argument: str) -> None: + super().__init__(message) + self.argument = argument + + +class CycleDetected(RevisionError): + kind = "Cycle" + + def __init__(self, revisions: Sequence[str]) -> None: + self.revisions = revisions + super().__init__( + "%s is detected in revisions (%s)" + % (self.kind, ", ".join(revisions)) + ) + + +class DependencyCycleDetected(CycleDetected): + kind = "Dependency cycle" + + def __init__(self, revisions: Sequence[str]) -> None: + super().__init__(revisions) + + +class LoopDetected(CycleDetected): + kind = "Self-loop" + + def __init__(self, revision: str) -> None: + super().__init__([revision]) + + +class DependencyLoopDetected(DependencyCycleDetected, LoopDetected): + kind = "Dependency self-loop" + + def __init__(self, revision: Sequence[str]) -> None: + super().__init__(revision) + + +class RevisionMap: + """Maintains a map of :class:`.Revision` objects. + + :class:`.RevisionMap` is used by :class:`.ScriptDirectory` to maintain + and traverse the collection of :class:`.Script` objects, which are + themselves instances of :class:`.Revision`. + + """ + + def __init__(self, generator: Callable[[], Iterable[Revision]]) -> None: + """Construct a new :class:`.RevisionMap`. + + :param generator: a zero-arg callable that will generate an iterable + of :class:`.Revision` instances to be used. These are typically + :class:`.Script` subclasses within regular Alembic use. + + """ + self._generator = generator + + @util.memoized_property + def heads(self) -> Tuple[str, ...]: + """All "head" revisions as strings. + + This is normally a tuple of length one, + unless unmerged branches are present. + + :return: a tuple of string revision numbers. + + """ + self._revision_map + return self.heads + + @util.memoized_property + def bases(self) -> Tuple[str, ...]: + """All "base" revisions as strings. + + These are revisions that have a ``down_revision`` of None, + or empty tuple. + + :return: a tuple of string revision numbers. + + """ + self._revision_map + return self.bases + + @util.memoized_property + def _real_heads(self) -> Tuple[str, ...]: + """All "real" head revisions as strings. + + :return: a tuple of string revision numbers. + + """ + self._revision_map + return self._real_heads + + @util.memoized_property + def _real_bases(self) -> Tuple[str, ...]: + """All "real" base revisions as strings. + + :return: a tuple of string revision numbers. + + """ + self._revision_map + return self._real_bases + + @util.memoized_property + def _revision_map(self) -> _RevisionMapType: + """memoized attribute, initializes the revision map from the + initial collection. + + """ + # Ordering required for some tests to pass (but not required in + # general) + map_: _InterimRevisionMapType = sqlautil.OrderedDict() + + heads: Set[Revision] = sqlautil.OrderedSet() + _real_heads: Set[Revision] = sqlautil.OrderedSet() + bases: Tuple[Revision, ...] = () + _real_bases: Tuple[Revision, ...] = () + + has_branch_labels = set() + all_revisions = set() + + for revision in self._generator(): + all_revisions.add(revision) + + if revision.revision in map_: + util.warn( + "Revision %s is present more than once" % revision.revision + ) + map_[revision.revision] = revision + if revision.branch_labels: + has_branch_labels.add(revision) + + heads.add(revision) + _real_heads.add(revision) + if revision.is_base: + bases += (revision,) + if revision._is_real_base: + _real_bases += (revision,) + + # add the branch_labels to the map_. We'll need these + # to resolve the dependencies. + rev_map = map_.copy() + self._map_branch_labels( + has_branch_labels, cast(_RevisionMapType, map_) + ) + + # resolve dependency names from branch labels and symbolic + # names + self._add_depends_on(all_revisions, cast(_RevisionMapType, map_)) + + for rev in map_.values(): + for downrev in rev._all_down_revisions: + if downrev not in map_: + util.warn( + "Revision %s referenced from %s is not present" + % (downrev, rev) + ) + down_revision = map_[downrev] + down_revision.add_nextrev(rev) + if downrev in rev._versioned_down_revisions: + heads.discard(down_revision) + _real_heads.discard(down_revision) + + # once the map has downrevisions populated, the dependencies + # can be further refined to include only those which are not + # already ancestors + self._normalize_depends_on(all_revisions, cast(_RevisionMapType, map_)) + self._detect_cycles(rev_map, heads, bases, _real_heads, _real_bases) + + revision_map: _RevisionMapType = dict(map_.items()) + revision_map[None] = revision_map[()] = None + self.heads = tuple(rev.revision for rev in heads) + self._real_heads = tuple(rev.revision for rev in _real_heads) + self.bases = tuple(rev.revision for rev in bases) + self._real_bases = tuple(rev.revision for rev in _real_bases) + + self._add_branches(has_branch_labels, revision_map) + return revision_map + + def _detect_cycles( + self, + rev_map: _InterimRevisionMapType, + heads: Set[Revision], + bases: Tuple[Revision, ...], + _real_heads: Set[Revision], + _real_bases: Tuple[Revision, ...], + ) -> None: + if not rev_map: + return + if not heads or not bases: + raise CycleDetected(list(rev_map)) + total_space = { + rev.revision + for rev in self._iterate_related_revisions( + lambda r: r._versioned_down_revisions, + heads, + map_=cast(_RevisionMapType, rev_map), + ) + }.intersection( + rev.revision + for rev in self._iterate_related_revisions( + lambda r: r.nextrev, + bases, + map_=cast(_RevisionMapType, rev_map), + ) + ) + deleted_revs = set(rev_map.keys()) - total_space + if deleted_revs: + raise CycleDetected(sorted(deleted_revs)) + + if not _real_heads or not _real_bases: + raise DependencyCycleDetected(list(rev_map)) + total_space = { + rev.revision + for rev in self._iterate_related_revisions( + lambda r: r._all_down_revisions, + _real_heads, + map_=cast(_RevisionMapType, rev_map), + ) + }.intersection( + rev.revision + for rev in self._iterate_related_revisions( + lambda r: r._all_nextrev, + _real_bases, + map_=cast(_RevisionMapType, rev_map), + ) + ) + deleted_revs = set(rev_map.keys()) - total_space + if deleted_revs: + raise DependencyCycleDetected(sorted(deleted_revs)) + + def _map_branch_labels( + self, revisions: Collection[Revision], map_: _RevisionMapType + ) -> None: + for revision in revisions: + if revision.branch_labels: + assert revision._orig_branch_labels is not None + for branch_label in revision._orig_branch_labels: + if branch_label in map_: + map_rev = map_[branch_label] + assert map_rev is not None + raise RevisionError( + "Branch name '%s' in revision %s already " + "used by revision %s" + % ( + branch_label, + revision.revision, + map_rev.revision, + ) + ) + map_[branch_label] = revision + + def _add_branches( + self, revisions: Collection[Revision], map_: _RevisionMapType + ) -> None: + for revision in revisions: + if revision.branch_labels: + revision.branch_labels.update(revision.branch_labels) + for node in self._get_descendant_nodes( + [revision], map_, include_dependencies=False + ): + node.branch_labels.update(revision.branch_labels) + + parent = node + while ( + parent + and not parent._is_real_branch_point + and not parent.is_merge_point + ): + parent.branch_labels.update(revision.branch_labels) + if parent.down_revision: + parent = map_[parent.down_revision] + else: + break + + def _add_depends_on( + self, revisions: Collection[Revision], map_: _RevisionMapType + ) -> None: + """Resolve the 'dependencies' for each revision in a collection + in terms of actual revision ids, as opposed to branch labels or other + symbolic names. + + The collection is then assigned to the _resolved_dependencies + attribute on each revision object. + + """ + + for revision in revisions: + if revision.dependencies: + deps = [ + map_[dep] for dep in util.to_tuple(revision.dependencies) + ] + revision._resolved_dependencies = tuple( + [d.revision for d in deps if d is not None] + ) + else: + revision._resolved_dependencies = () + + def _normalize_depends_on( + self, revisions: Collection[Revision], map_: _RevisionMapType + ) -> None: + """Create a collection of "dependencies" that omits dependencies + that are already ancestor nodes for each revision in a given + collection. + + This builds upon the _resolved_dependencies collection created in the + _add_depends_on() method, looking in the fully populated revision map + for ancestors, and omitting them as the _resolved_dependencies + collection as it is copied to a new collection. The new collection is + then assigned to the _normalized_resolved_dependencies attribute on + each revision object. + + The collection is then used to determine the immediate "down revision" + identifiers for this revision. + + """ + + for revision in revisions: + if revision._resolved_dependencies: + normalized_resolved = set(revision._resolved_dependencies) + for rev in self._get_ancestor_nodes( + [revision], + include_dependencies=False, + map_=cast(_RevisionMapType, map_), + ): + if rev is revision: + continue + elif rev._resolved_dependencies: + normalized_resolved.difference_update( + rev._resolved_dependencies + ) + + revision._normalized_resolved_dependencies = tuple( + normalized_resolved + ) + else: + revision._normalized_resolved_dependencies = () + + def add_revision(self, revision: Revision, _replace: bool = False) -> None: + """add a single revision to an existing map. + + This method is for single-revision use cases, it's not + appropriate for fully populating an entire revision map. + + """ + map_ = self._revision_map + if not _replace and revision.revision in map_: + util.warn( + "Revision %s is present more than once" % revision.revision + ) + elif _replace and revision.revision not in map_: + raise Exception("revision %s not in map" % revision.revision) + + map_[revision.revision] = revision + + revisions = [revision] + self._add_branches(revisions, map_) + self._map_branch_labels(revisions, map_) + self._add_depends_on(revisions, map_) + + if revision.is_base: + self.bases += (revision.revision,) + if revision._is_real_base: + self._real_bases += (revision.revision,) + + for downrev in revision._all_down_revisions: + if downrev not in map_: + util.warn( + "Revision %s referenced from %s is not present" + % (downrev, revision) + ) + not_none(map_[downrev]).add_nextrev(revision) + + self._normalize_depends_on(revisions, map_) + + if revision._is_real_head: + self._real_heads = tuple( + head + for head in self._real_heads + if head + not in set(revision._all_down_revisions).union( + [revision.revision] + ) + ) + (revision.revision,) + if revision.is_head: + self.heads = tuple( + head + for head in self.heads + if head + not in set(revision._versioned_down_revisions).union( + [revision.revision] + ) + ) + (revision.revision,) + + def get_current_head( + self, branch_label: Optional[str] = None + ) -> Optional[str]: + """Return the current head revision. + + If the script directory has multiple heads + due to branching, an error is raised; + :meth:`.ScriptDirectory.get_heads` should be + preferred. + + :param branch_label: optional branch name which will limit the + heads considered to those which include that branch_label. + + :return: a string revision number. + + .. seealso:: + + :meth:`.ScriptDirectory.get_heads` + + """ + current_heads: Sequence[str] = self.heads + if branch_label: + current_heads = self.filter_for_lineage( + current_heads, branch_label + ) + if len(current_heads) > 1: + raise MultipleHeads( + current_heads, + "%s@head" % branch_label if branch_label else "head", + ) + + if current_heads: + return current_heads[0] + else: + return None + + def _get_base_revisions(self, identifier: str) -> Tuple[str, ...]: + return self.filter_for_lineage(self.bases, identifier) + + def get_revisions( + self, id_: Optional[_GetRevArg] + ) -> Tuple[Optional[_RevisionOrBase], ...]: + """Return the :class:`.Revision` instances with the given rev id + or identifiers. + + May be given a single identifier, a sequence of identifiers, or the + special symbols "head" or "base". The result is a tuple of one + or more identifiers, or an empty tuple in the case of "base". + + In the cases where 'head', 'heads' is requested and the + revision map is empty, returns an empty tuple. + + Supports partial identifiers, where the given identifier + is matched against all identifiers that start with the given + characters; if there is exactly one match, that determines the + full revision. + + """ + + if isinstance(id_, (list, tuple, set, frozenset)): + return sum([self.get_revisions(id_elem) for id_elem in id_], ()) + else: + resolved_id, branch_label = self._resolve_revision_number(id_) + if len(resolved_id) == 1: + try: + rint = int(resolved_id[0]) + if rint < 0: + # branch@-n -> walk down from heads + select_heads = self.get_revisions("heads") + if branch_label is not None: + select_heads = tuple( + head + for head in select_heads + if branch_label + in is_revision(head).branch_labels + ) + return tuple( + self._walk(head, steps=rint) + for head in select_heads + ) + except ValueError: + # couldn't resolve as integer + pass + return tuple( + self._revision_for_ident(rev_id, branch_label) + for rev_id in resolved_id + ) + + def get_revision(self, id_: Optional[str]) -> Optional[Revision]: + """Return the :class:`.Revision` instance with the given rev id. + + If a symbolic name such as "head" or "base" is given, resolves + the identifier into the current head or base revision. If the symbolic + name refers to multiples, :class:`.MultipleHeads` is raised. + + Supports partial identifiers, where the given identifier + is matched against all identifiers that start with the given + characters; if there is exactly one match, that determines the + full revision. + + """ + + resolved_id, branch_label = self._resolve_revision_number(id_) + if len(resolved_id) > 1: + raise MultipleHeads(resolved_id, id_) + + resolved: Union[str, Tuple[()]] = resolved_id[0] if resolved_id else () + return self._revision_for_ident(resolved, branch_label) + + def _resolve_branch(self, branch_label: str) -> Optional[Revision]: + try: + branch_rev = self._revision_map[branch_label] + except KeyError: + try: + nonbranch_rev = self._revision_for_ident(branch_label) + except ResolutionError as re: + raise ResolutionError( + "No such branch: '%s'" % branch_label, branch_label + ) from re + + else: + return nonbranch_rev + else: + return branch_rev + + def _revision_for_ident( + self, + resolved_id: Union[str, Tuple[()], None], + check_branch: Optional[str] = None, + ) -> Optional[Revision]: + branch_rev: Optional[Revision] + if check_branch: + branch_rev = self._resolve_branch(check_branch) + else: + branch_rev = None + + revision: Union[Optional[Revision], Literal[False]] + try: + revision = self._revision_map[resolved_id] + except KeyError: + # break out to avoid misleading py3k stack traces + revision = False + revs: Sequence[str] + if revision is False: + assert resolved_id + # do a partial lookup + revs = [ + x + for x in self._revision_map + if x and len(x) > 3 and x.startswith(resolved_id) + ] + + if branch_rev: + revs = self.filter_for_lineage(revs, check_branch) + if not revs: + raise ResolutionError( + "No such revision or branch '%s'%s" + % ( + resolved_id, + ( + "; please ensure at least four characters are " + "present for partial revision identifier matches" + if len(resolved_id) < 4 + else "" + ), + ), + resolved_id, + ) + elif len(revs) > 1: + raise ResolutionError( + "Multiple revisions start " + "with '%s': %s..." + % (resolved_id, ", ".join("'%s'" % r for r in revs[0:3])), + resolved_id, + ) + else: + revision = self._revision_map[revs[0]] + + if check_branch and revision is not None: + assert branch_rev is not None + assert resolved_id + if not self._shares_lineage( + revision.revision, branch_rev.revision + ): + raise ResolutionError( + "Revision %s is not a member of branch '%s'" + % (revision.revision, check_branch), + resolved_id, + ) + return revision + + def _filter_into_branch_heads( + self, targets: Iterable[Optional[_RevisionOrBase]] + ) -> Set[Optional[_RevisionOrBase]]: + targets = set(targets) + + for rev in list(targets): + assert rev + if targets.intersection( + self._get_descendant_nodes([rev], include_dependencies=False) + ).difference([rev]): + targets.discard(rev) + return targets + + def filter_for_lineage( + self, + targets: Iterable[_TR], + check_against: Optional[str], + include_dependencies: bool = False, + ) -> Tuple[_TR, ...]: + id_, branch_label = self._resolve_revision_number(check_against) + + shares = [] + if branch_label: + shares.append(branch_label) + if id_: + shares.extend(id_) + + return tuple( + tg + for tg in targets + if self._shares_lineage( + tg, shares, include_dependencies=include_dependencies + ) + ) + + def _shares_lineage( + self, + target: Optional[_RevisionOrStr], + test_against_revs: Sequence[_RevisionOrStr], + include_dependencies: bool = False, + ) -> bool: + if not test_against_revs: + return True + if not isinstance(target, Revision): + resolved_target = not_none(self._revision_for_ident(target)) + else: + resolved_target = target + + resolved_test_against_revs = [ + self._revision_for_ident(test_against_rev) + if not isinstance(test_against_rev, Revision) + else test_against_rev + for test_against_rev in util.to_tuple( + test_against_revs, default=() + ) + ] + + return bool( + set( + self._get_descendant_nodes( + [resolved_target], + include_dependencies=include_dependencies, + ) + ) + .union( + self._get_ancestor_nodes( + [resolved_target], + include_dependencies=include_dependencies, + ) + ) + .intersection(resolved_test_against_revs) + ) + + def _resolve_revision_number( + self, id_: Optional[_GetRevArg] + ) -> Tuple[Tuple[str, ...], Optional[str]]: + branch_label: Optional[str] + if isinstance(id_, str) and "@" in id_: + branch_label, id_ = id_.split("@", 1) + + elif id_ is not None and ( + (isinstance(id_, tuple) and id_ and not isinstance(id_[0], str)) + or not isinstance(id_, (str, tuple)) + ): + raise RevisionError( + "revision identifier %r is not a string; ensure database " + "driver settings are correct" % (id_,) + ) + + else: + branch_label = None + + # ensure map is loaded + self._revision_map + if id_ == "heads": + if branch_label: + return ( + self.filter_for_lineage(self.heads, branch_label), + branch_label, + ) + else: + return self._real_heads, branch_label + elif id_ == "head": + current_head = self.get_current_head(branch_label) + if current_head: + return (current_head,), branch_label + else: + return (), branch_label + elif id_ == "base" or id_ is None: + return (), branch_label + else: + return util.to_tuple(id_, default=None), branch_label + + def iterate_revisions( + self, + upper: _RevisionIdentifierType, + lower: _RevisionIdentifierType, + implicit_base: bool = False, + inclusive: bool = False, + assert_relative_length: bool = True, + select_for_downgrade: bool = False, + ) -> Iterator[Revision]: + """Iterate through script revisions, starting at the given + upper revision identifier and ending at the lower. + + The traversal uses strictly the `down_revision` + marker inside each migration script, so + it is a requirement that upper >= lower, + else you'll get nothing back. + + The iterator yields :class:`.Revision` objects. + + """ + fn: Callable + if select_for_downgrade: + fn = self._collect_downgrade_revisions + else: + fn = self._collect_upgrade_revisions + + revisions, heads = fn( + upper, + lower, + inclusive=inclusive, + implicit_base=implicit_base, + assert_relative_length=assert_relative_length, + ) + + for node in self._topological_sort(revisions, heads): + yield not_none(self.get_revision(node)) + + def _get_descendant_nodes( + self, + targets: Collection[Optional[_RevisionOrBase]], + map_: Optional[_RevisionMapType] = None, + check: bool = False, + omit_immediate_dependencies: bool = False, + include_dependencies: bool = True, + ) -> Iterator[Any]: + if omit_immediate_dependencies: + + def fn(rev): + if rev not in targets: + return rev._all_nextrev + else: + return rev.nextrev + + elif include_dependencies: + + def fn(rev): + return rev._all_nextrev + + else: + + def fn(rev): + return rev.nextrev + + return self._iterate_related_revisions( + fn, targets, map_=map_, check=check + ) + + def _get_ancestor_nodes( + self, + targets: Collection[Optional[_RevisionOrBase]], + map_: Optional[_RevisionMapType] = None, + check: bool = False, + include_dependencies: bool = True, + ) -> Iterator[Revision]: + if include_dependencies: + + def fn(rev): + return rev._normalized_down_revisions + + else: + + def fn(rev): + return rev._versioned_down_revisions + + return self._iterate_related_revisions( + fn, targets, map_=map_, check=check + ) + + def _iterate_related_revisions( + self, + fn: Callable, + targets: Collection[Optional[_RevisionOrBase]], + map_: Optional[_RevisionMapType], + check: bool = False, + ) -> Iterator[Revision]: + if map_ is None: + map_ = self._revision_map + + seen = set() + todo: Deque[Revision] = collections.deque() + for target_for in targets: + target = is_revision(target_for) + todo.append(target) + if check: + per_target = set() + + while todo: + rev = todo.pop() + if check: + per_target.add(rev) + + if rev in seen: + continue + seen.add(rev) + # Check for map errors before collecting. + for rev_id in fn(rev): + next_rev = map_[rev_id] + assert next_rev is not None + if next_rev.revision != rev_id: + raise RevisionError( + "Dependency resolution failed; broken map" + ) + todo.append(next_rev) + yield rev + if check: + overlaps = per_target.intersection(targets).difference( + [target] + ) + if overlaps: + raise RevisionError( + "Requested revision %s overlaps with " + "other requested revisions %s" + % ( + target.revision, + ", ".join(r.revision for r in overlaps), + ) + ) + + def _topological_sort( + self, + revisions: Collection[Revision], + heads: Any, + ) -> List[str]: + """Yield revision ids of a collection of Revision objects in + topological sorted order (i.e. revisions always come after their + down_revisions and dependencies). Uses the order of keys in + _revision_map to sort. + + """ + + id_to_rev = self._revision_map + + def get_ancestors(rev_id): + return { + r.revision + for r in self._get_ancestor_nodes([id_to_rev[rev_id]]) + } + + todo = {d.revision for d in revisions} + + # Use revision map (ordered dict) key order to pre-sort. + inserted_order = list(self._revision_map) + + current_heads = list( + sorted( + {d.revision for d in heads if d.revision in todo}, + key=inserted_order.index, + ) + ) + ancestors_by_idx = [get_ancestors(rev_id) for rev_id in current_heads] + + output = [] + + current_candidate_idx = 0 + while current_heads: + candidate = current_heads[current_candidate_idx] + + for check_head_index, ancestors in enumerate(ancestors_by_idx): + # scan all the heads. see if we can continue walking + # down the current branch indicated by current_candidate_idx. + if ( + check_head_index != current_candidate_idx + and candidate in ancestors + ): + current_candidate_idx = check_head_index + # nope, another head is dependent on us, they have + # to be traversed first + break + else: + # yup, we can emit + if candidate in todo: + output.append(candidate) + todo.remove(candidate) + + # now update the heads with our ancestors. + + candidate_rev = id_to_rev[candidate] + assert candidate_rev is not None + + heads_to_add = [ + r + for r in candidate_rev._normalized_down_revisions + if r in todo and r not in current_heads + ] + + if not heads_to_add: + # no ancestors, so remove this head from the list + del current_heads[current_candidate_idx] + del ancestors_by_idx[current_candidate_idx] + current_candidate_idx = max(current_candidate_idx - 1, 0) + else: + if ( + not candidate_rev._normalized_resolved_dependencies + and len(candidate_rev._versioned_down_revisions) == 1 + ): + current_heads[current_candidate_idx] = heads_to_add[0] + + # for plain movement down a revision line without + # any mergepoints, branchpoints, or deps, we + # can update the ancestors collection directly + # by popping out the candidate we just emitted + ancestors_by_idx[current_candidate_idx].discard( + candidate + ) + + else: + # otherwise recalculate it again, things get + # complicated otherwise. This can possibly be + # improved to not run the whole ancestor thing + # each time but it was getting complicated + current_heads[current_candidate_idx] = heads_to_add[0] + current_heads.extend(heads_to_add[1:]) + ancestors_by_idx[ + current_candidate_idx + ] = get_ancestors(heads_to_add[0]) + ancestors_by_idx.extend( + get_ancestors(head) for head in heads_to_add[1:] + ) + + assert not todo + return output + + def _walk( + self, + start: Optional[Union[str, Revision]], + steps: int, + branch_label: Optional[str] = None, + no_overwalk: bool = True, + ) -> Optional[_RevisionOrBase]: + """ + Walk the requested number of :steps up (steps > 0) or down (steps < 0) + the revision tree. + + :branch_label is used to select branches only when walking up. + + If the walk goes past the boundaries of the tree and :no_overwalk is + True, None is returned, otherwise the walk terminates early. + + A RevisionError is raised if there is no unambiguous revision to + walk to. + """ + initial: Optional[_RevisionOrBase] + if isinstance(start, str): + initial = self.get_revision(start) + else: + initial = start + + children: Sequence[Optional[_RevisionOrBase]] + for _ in range(abs(steps)): + if steps > 0: + assert initial != "base" + # Walk up + walk_up = [ + is_revision(rev) + for rev in self.get_revisions( + self.bases if initial is None else initial.nextrev + ) + ] + if branch_label: + children = self.filter_for_lineage(walk_up, branch_label) + else: + children = walk_up + else: + # Walk down + if initial == "base": + children = () + else: + children = self.get_revisions( + self.heads + if initial is None + else initial.down_revision + ) + if not children: + children = ("base",) + if not children: + # This will return an invalid result if no_overwalk, otherwise + # further steps will stay where we are. + ret = None if no_overwalk else initial + return ret + elif len(children) > 1: + raise RevisionError("Ambiguous walk") + initial = children[0] + + return initial + + def _parse_downgrade_target( + self, + current_revisions: _RevisionIdentifierType, + target: _RevisionIdentifierType, + assert_relative_length: bool, + ) -> Tuple[Optional[str], Optional[_RevisionOrBase]]: + """ + Parse downgrade command syntax :target to retrieve the target revision + and branch label (if any) given the :current_revisions stamp of the + database. + + Returns a tuple (branch_label, target_revision) where branch_label + is a string from the command specifying the branch to consider (or + None if no branch given), and target_revision is a Revision object + which the command refers to. target_revisions is None if the command + refers to 'base'. The target may be specified in absolute form, or + relative to :current_revisions. + """ + if target is None: + return None, None + assert isinstance( + target, str + ), "Expected downgrade target in string form" + match = _relative_destination.match(target) + if match: + branch_label, symbol, relative = match.groups() + rel_int = int(relative) + if rel_int >= 0: + if symbol is None: + # Downgrading to current + n is not valid. + raise RevisionError( + "Relative revision %s didn't " + "produce %d migrations" % (relative, abs(rel_int)) + ) + # Find target revision relative to given symbol. + rev = self._walk( + symbol, + rel_int, + branch_label, + no_overwalk=assert_relative_length, + ) + if rev is None: + raise RevisionError("Walked too far") + return branch_label, rev + else: + relative_revision = symbol is None + if relative_revision: + # Find target revision relative to current state. + if branch_label: + cr_tuple = util.to_tuple(current_revisions) + symbol_list: Sequence[str] + symbol_list = self.filter_for_lineage( + cr_tuple, branch_label + ) + if not symbol_list: + # check the case where there are multiple branches + # but there is currently a single heads, since all + # other branch heads are dependent of the current + # single heads. + all_current = cast( + Set[Revision], self._get_all_current(cr_tuple) + ) + sl_all_current = self.filter_for_lineage( + all_current, branch_label + ) + symbol_list = [ + r.revision if r else r # type: ignore[misc] + for r in sl_all_current + ] + + assert len(symbol_list) == 1 + symbol = symbol_list[0] + else: + current_revisions = util.to_tuple(current_revisions) + if not current_revisions: + raise RevisionError( + "Relative revision %s didn't " + "produce %d migrations" + % (relative, abs(rel_int)) + ) + # Have to check uniques here for duplicate rows test. + if len(set(current_revisions)) > 1: + util.warn( + "downgrade -1 from multiple heads is " + "ambiguous; " + "this usage will be disallowed in a future " + "release." + ) + symbol = current_revisions[0] + # Restrict iteration to just the selected branch when + # ambiguous branches are involved. + branch_label = symbol + # Walk down the tree to find downgrade target. + rev = self._walk( + start=self.get_revision(symbol) + if branch_label is None + else self.get_revision("%s@%s" % (branch_label, symbol)), + steps=rel_int, + no_overwalk=assert_relative_length, + ) + if rev is None: + if relative_revision: + raise RevisionError( + "Relative revision %s didn't " + "produce %d migrations" % (relative, abs(rel_int)) + ) + else: + raise RevisionError("Walked too far") + return branch_label, rev + + # No relative destination given, revision specified is absolute. + branch_label, _, symbol = target.rpartition("@") + if not branch_label: + branch_label = None # type:ignore[assignment] + return branch_label, self.get_revision(symbol) + + def _parse_upgrade_target( + self, + current_revisions: _RevisionIdentifierType, + target: _RevisionIdentifierType, + assert_relative_length: bool, + ) -> Tuple[Optional[_RevisionOrBase], ...]: + """ + Parse upgrade command syntax :target to retrieve the target revision + and given the :current_revisions stamp of the database. + + Returns a tuple of Revision objects which should be iterated/upgraded + to. The target may be specified in absolute form, or relative to + :current_revisions. + """ + if isinstance(target, str): + match = _relative_destination.match(target) + else: + match = None + + if not match: + # No relative destination, target is absolute. + return self.get_revisions(target) + + current_revisions_tup: Union[str, Tuple[Optional[str], ...], None] + current_revisions_tup = util.to_tuple(current_revisions) + + branch_label, symbol, relative_str = match.groups() + relative = int(relative_str) + if relative > 0: + if symbol is None: + if not current_revisions_tup: + current_revisions_tup = (None,) + # Try to filter to a single target (avoid ambiguous branches). + start_revs = current_revisions_tup + if branch_label: + start_revs = self.filter_for_lineage( + self.get_revisions(current_revisions_tup), # type: ignore[arg-type] # noqa: E501 + branch_label, + ) + if not start_revs: + # The requested branch is not a head, so we need to + # backtrack to find a branchpoint. + active_on_branch = self.filter_for_lineage( + self._get_ancestor_nodes( + self.get_revisions(current_revisions_tup) + ), + branch_label, + ) + # Find the tips of this set of revisions (revisions + # without children within the set). + start_revs = tuple( + {rev.revision for rev in active_on_branch} + - { + down + for rev in active_on_branch + for down in rev._normalized_down_revisions + } + ) + if not start_revs: + # We must need to go right back to base to find + # a starting point for this branch. + start_revs = (None,) + if len(start_revs) > 1: + raise RevisionError( + "Ambiguous upgrade from multiple current revisions" + ) + # Walk up from unique target revision. + rev = self._walk( + start=start_revs[0], + steps=relative, + branch_label=branch_label, + no_overwalk=assert_relative_length, + ) + if rev is None: + raise RevisionError( + "Relative revision %s didn't " + "produce %d migrations" % (relative_str, abs(relative)) + ) + return (rev,) + else: + # Walk is relative to a given revision, not the current state. + return ( + self._walk( + start=self.get_revision(symbol), + steps=relative, + branch_label=branch_label, + no_overwalk=assert_relative_length, + ), + ) + else: + if symbol is None: + # Upgrading to current - n is not valid. + raise RevisionError( + "Relative revision %s didn't " + "produce %d migrations" % (relative, abs(relative)) + ) + return ( + self._walk( + start=self.get_revision(symbol) + if branch_label is None + else self.get_revision("%s@%s" % (branch_label, symbol)), + steps=relative, + no_overwalk=assert_relative_length, + ), + ) + + def _collect_downgrade_revisions( + self, + upper: _RevisionIdentifierType, + target: _RevisionIdentifierType, + inclusive: bool, + implicit_base: bool, + assert_relative_length: bool, + ) -> Any: + """ + Compute the set of current revisions specified by :upper, and the + downgrade target specified by :target. Return all dependents of target + which are currently active. + + :inclusive=True includes the target revision in the set + """ + + branch_label, target_revision = self._parse_downgrade_target( + current_revisions=upper, + target=target, + assert_relative_length=assert_relative_length, + ) + if target_revision == "base": + target_revision = None + assert target_revision is None or isinstance(target_revision, Revision) + + roots: List[Revision] + # Find candidates to drop. + if target_revision is None: + # Downgrading back to base: find all tree roots. + roots = [ + rev + for rev in self._revision_map.values() + if rev is not None and rev.down_revision is None + ] + elif inclusive: + # inclusive implies target revision should also be dropped + roots = [target_revision] + else: + # Downgrading to fixed target: find all direct children. + roots = [ + is_revision(rev) + for rev in self.get_revisions(target_revision.nextrev) + ] + + if branch_label and len(roots) > 1: + # Need to filter roots. + ancestors = { + rev.revision + for rev in self._get_ancestor_nodes( + [self._resolve_branch(branch_label)], + include_dependencies=False, + ) + } + # Intersection gives the root revisions we are trying to + # rollback with the downgrade. + roots = [ + is_revision(rev) + for rev in self.get_revisions( + {rev.revision for rev in roots}.intersection(ancestors) + ) + ] + + # Ensure we didn't throw everything away when filtering branches. + if len(roots) == 0: + raise RevisionError( + "Not a valid downgrade target from current heads" + ) + + heads = self.get_revisions(upper) + + # Aim is to drop :branch_revision; to do so we also need to drop its + # descendents and anything dependent on it. + downgrade_revisions = set( + self._get_descendant_nodes( + roots, + include_dependencies=True, + omit_immediate_dependencies=False, + ) + ) + active_revisions = set( + self._get_ancestor_nodes(heads, include_dependencies=True) + ) + + # Emit revisions to drop in reverse topological sorted order. + downgrade_revisions.intersection_update(active_revisions) + + if implicit_base: + # Wind other branches back to base. + downgrade_revisions.update( + active_revisions.difference(self._get_ancestor_nodes(roots)) + ) + + if ( + target_revision is not None + and not downgrade_revisions + and target_revision not in heads + ): + # Empty intersection: target revs are not present. + + raise RangeNotAncestorError("Nothing to drop", upper) + + return downgrade_revisions, heads + + def _collect_upgrade_revisions( + self, + upper: _RevisionIdentifierType, + lower: _RevisionIdentifierType, + inclusive: bool, + implicit_base: bool, + assert_relative_length: bool, + ) -> Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase]]]: + """ + Compute the set of required revisions specified by :upper, and the + current set of active revisions specified by :lower. Find the + difference between the two to compute the required upgrades. + + :inclusive=True includes the current/lower revisions in the set + + :implicit_base=False only returns revisions which are downstream + of the current/lower revisions. Dependencies from branches with + different bases will not be included. + """ + targets: Collection[Revision] = [ + is_revision(rev) + for rev in self._parse_upgrade_target( + current_revisions=lower, + target=upper, + assert_relative_length=assert_relative_length, + ) + ] + + # assert type(targets) is tuple, "targets should be a tuple" + + # Handled named bases (e.g. branch@... -> heads should only produce + # targets on the given branch) + if isinstance(lower, str) and "@" in lower: + branch, _, _ = lower.partition("@") + branch_rev = self.get_revision(branch) + if branch_rev is not None and branch_rev.revision == branch: + # A revision was used as a label; get its branch instead + assert len(branch_rev.branch_labels) == 1 + branch = next(iter(branch_rev.branch_labels)) + targets = { + need for need in targets if branch in need.branch_labels + } + + required_node_set = set( + self._get_ancestor_nodes( + targets, check=True, include_dependencies=True + ) + ).union(targets) + + current_revisions = self.get_revisions(lower) + if not implicit_base and any( + rev not in required_node_set + for rev in current_revisions + if rev is not None + ): + raise RangeNotAncestorError(lower, upper) + assert ( + type(current_revisions) is tuple + ), "current_revisions should be a tuple" + + # Special case where lower = a relative value (get_revisions can't + # find it) + if current_revisions and current_revisions[0] is None: + _, rev = self._parse_downgrade_target( + current_revisions=upper, + target=lower, + assert_relative_length=assert_relative_length, + ) + assert rev + if rev == "base": + current_revisions = tuple() + lower = None + else: + current_revisions = (rev,) + lower = rev.revision + + current_node_set = set( + self._get_ancestor_nodes( + current_revisions, check=True, include_dependencies=True + ) + ).union(current_revisions) + + needs = required_node_set.difference(current_node_set) + + # Include the lower revision (=current_revisions?) in the iteration + if inclusive: + needs.update(is_revision(rev) for rev in self.get_revisions(lower)) + # By default, base is implicit as we want all dependencies returned. + # Base is also implicit if lower = base + # implicit_base=False -> only return direct downstreams of + # current_revisions + if current_revisions and not implicit_base: + lower_descendents = self._get_descendant_nodes( + [is_revision(rev) for rev in current_revisions], + check=True, + include_dependencies=False, + ) + needs.intersection_update(lower_descendents) + + return needs, tuple(targets) # type:ignore[return-value] + + def _get_all_current( + self, id_: Tuple[str, ...] + ) -> Set[Optional[_RevisionOrBase]]: + top_revs: Set[Optional[_RevisionOrBase]] + top_revs = set(self.get_revisions(id_)) + top_revs.update( + self._get_ancestor_nodes(list(top_revs), include_dependencies=True) + ) + return self._filter_into_branch_heads(top_revs) + + +class Revision: + """Base class for revisioned objects. + + The :class:`.Revision` class is the base of the more public-facing + :class:`.Script` object, which represents a migration script. + The mechanics of revision management and traversal are encapsulated + within :class:`.Revision`, while :class:`.Script` applies this logic + to Python files in a version directory. + + """ + + nextrev: FrozenSet[str] = frozenset() + """following revisions, based on down_revision only.""" + + _all_nextrev: FrozenSet[str] = frozenset() + + revision: str = None # type: ignore[assignment] + """The string revision number.""" + + down_revision: Optional[_RevIdType] = None + """The ``down_revision`` identifier(s) within the migration script. + + Note that the total set of "down" revisions is + down_revision + dependencies. + + """ + + dependencies: Optional[_RevIdType] = None + """Additional revisions which this revision is dependent on. + + From a migration standpoint, these dependencies are added to the + down_revision to form the full iteration. However, the separation + of down_revision from "dependencies" is to assist in navigating + a history that contains many branches, typically a multi-root scenario. + + """ + + branch_labels: Set[str] = None # type: ignore[assignment] + """Optional string/tuple of symbolic names to apply to this + revision's branch""" + + _resolved_dependencies: Tuple[str, ...] + _normalized_resolved_dependencies: Tuple[str, ...] + + @classmethod + def verify_rev_id(cls, revision: str) -> None: + illegal_chars = set(revision).intersection(_revision_illegal_chars) + if illegal_chars: + raise RevisionError( + "Character(s) '%s' not allowed in revision identifier '%s'" + % (", ".join(sorted(illegal_chars)), revision) + ) + + def __init__( + self, + revision: str, + down_revision: Optional[Union[str, Tuple[str, ...]]], + dependencies: Optional[Union[str, Tuple[str, ...]]] = None, + branch_labels: Optional[Union[str, Tuple[str, ...]]] = None, + ) -> None: + if down_revision and revision in util.to_tuple(down_revision): + raise LoopDetected(revision) + elif dependencies is not None and revision in util.to_tuple( + dependencies + ): + raise DependencyLoopDetected(revision) + + self.verify_rev_id(revision) + self.revision = revision + self.down_revision = tuple_rev_as_scalar(util.to_tuple(down_revision)) + self.dependencies = tuple_rev_as_scalar(util.to_tuple(dependencies)) + self._orig_branch_labels = util.to_tuple(branch_labels, default=()) + self.branch_labels = set(self._orig_branch_labels) + + def __repr__(self) -> str: + args = [repr(self.revision), repr(self.down_revision)] + if self.dependencies: + args.append("dependencies=%r" % (self.dependencies,)) + if self.branch_labels: + args.append("branch_labels=%r" % (self.branch_labels,)) + return "%s(%s)" % (self.__class__.__name__, ", ".join(args)) + + def add_nextrev(self, revision: Revision) -> None: + self._all_nextrev = self._all_nextrev.union([revision.revision]) + if self.revision in revision._versioned_down_revisions: + self.nextrev = self.nextrev.union([revision.revision]) + + @property + def _all_down_revisions(self) -> Tuple[str, ...]: + return util.dedupe_tuple( + util.to_tuple(self.down_revision, default=()) + + self._resolved_dependencies + ) + + @property + def _normalized_down_revisions(self) -> Tuple[str, ...]: + """return immediate down revisions for a rev, omitting dependencies + that are still dependencies of ancestors. + + """ + return util.dedupe_tuple( + util.to_tuple(self.down_revision, default=()) + + self._normalized_resolved_dependencies + ) + + @property + def _versioned_down_revisions(self) -> Tuple[str, ...]: + return util.to_tuple(self.down_revision, default=()) + + @property + def is_head(self) -> bool: + """Return True if this :class:`.Revision` is a 'head' revision. + + This is determined based on whether any other :class:`.Script` + within the :class:`.ScriptDirectory` refers to this + :class:`.Script`. Multiple heads can be present. + + """ + return not bool(self.nextrev) + + @property + def _is_real_head(self) -> bool: + return not bool(self._all_nextrev) + + @property + def is_base(self) -> bool: + """Return True if this :class:`.Revision` is a 'base' revision.""" + + return self.down_revision is None + + @property + def _is_real_base(self) -> bool: + """Return True if this :class:`.Revision` is a "real" base revision, + e.g. that it has no dependencies either.""" + + # we use self.dependencies here because this is called up + # in initialization where _real_dependencies isn't set up + # yet + return self.down_revision is None and self.dependencies is None + + @property + def is_branch_point(self) -> bool: + """Return True if this :class:`.Script` is a branch point. + + A branchpoint is defined as a :class:`.Script` which is referred + to by more than one succeeding :class:`.Script`, that is more + than one :class:`.Script` has a `down_revision` identifier pointing + here. + + """ + return len(self.nextrev) > 1 + + @property + def _is_real_branch_point(self) -> bool: + """Return True if this :class:`.Script` is a 'real' branch point, + taking into account dependencies as well. + + """ + return len(self._all_nextrev) > 1 + + @property + def is_merge_point(self) -> bool: + """Return True if this :class:`.Script` is a merge point.""" + + return len(self._versioned_down_revisions) > 1 + + +@overload +def tuple_rev_as_scalar(rev: None) -> None: + ... + + +@overload +def tuple_rev_as_scalar( + rev: Union[Tuple[_T, ...], List[_T]] +) -> Union[_T, Tuple[_T, ...], List[_T]]: + ... + + +def tuple_rev_as_scalar( + rev: Optional[Sequence[_T]], +) -> Union[_T, Sequence[_T], None]: + if not rev: + return None + elif len(rev) == 1: + return rev[0] + else: + return rev + + +def is_revision(rev: Any) -> Revision: + assert isinstance(rev, Revision) + return rev diff --git a/venv/Lib/site-packages/alembic/script/write_hooks.py b/venv/Lib/site-packages/alembic/script/write_hooks.py new file mode 100644 index 0000000..b44ce64 --- /dev/null +++ b/venv/Lib/site-packages/alembic/script/write_hooks.py @@ -0,0 +1,176 @@ +from __future__ import annotations + +import shlex +import subprocess +import sys +from typing import Any +from typing import Callable +from typing import Dict +from typing import List +from typing import Mapping +from typing import Optional +from typing import Union + +from .. import util +from ..util import compat + + +REVISION_SCRIPT_TOKEN = "REVISION_SCRIPT_FILENAME" + +_registry: dict = {} + + +def register(name: str) -> Callable: + """A function decorator that will register that function as a write hook. + + See the documentation linked below for an example. + + .. seealso:: + + :ref:`post_write_hooks_custom` + + + """ + + def decorate(fn): + _registry[name] = fn + return fn + + return decorate + + +def _invoke( + name: str, revision: str, options: Mapping[str, Union[str, int]] +) -> Any: + """Invokes the formatter registered for the given name. + + :param name: The name of a formatter in the registry + :param revision: A :class:`.MigrationRevision` instance + :param options: A dict containing kwargs passed to the + specified formatter. + :raises: :class:`alembic.util.CommandError` + """ + try: + hook = _registry[name] + except KeyError as ke: + raise util.CommandError( + f"No formatter with name '{name}' registered" + ) from ke + else: + return hook(revision, options) + + +def _run_hooks(path: str, hook_config: Mapping[str, str]) -> None: + """Invoke hooks for a generated revision.""" + + from .base import _split_on_space_comma + + names = _split_on_space_comma.split(hook_config.get("hooks", "")) + + for name in names: + if not name: + continue + opts = { + key[len(name) + 1 :]: hook_config[key] + for key in hook_config + if key.startswith(name + ".") + } + opts["_hook_name"] = name + try: + type_ = opts["type"] + except KeyError as ke: + raise util.CommandError( + f"Key {name}.type is required for post write hook {name!r}" + ) from ke + else: + with util.status( + f"Running post write hook {name!r}", newline=True + ): + _invoke(type_, path, opts) + + +def _parse_cmdline_options(cmdline_options_str: str, path: str) -> List[str]: + """Parse options from a string into a list. + + Also substitutes the revision script token with the actual filename of + the revision script. + + If the revision script token doesn't occur in the options string, it is + automatically prepended. + """ + if REVISION_SCRIPT_TOKEN not in cmdline_options_str: + cmdline_options_str = REVISION_SCRIPT_TOKEN + " " + cmdline_options_str + cmdline_options_list = shlex.split( + cmdline_options_str, posix=compat.is_posix + ) + cmdline_options_list = [ + option.replace(REVISION_SCRIPT_TOKEN, path) + for option in cmdline_options_list + ] + return cmdline_options_list + + +@register("console_scripts") +def console_scripts( + path: str, options: dict, ignore_output: bool = False +) -> None: + try: + entrypoint_name = options["entrypoint"] + except KeyError as ke: + raise util.CommandError( + f"Key {options['_hook_name']}.entrypoint is required for post " + f"write hook {options['_hook_name']!r}" + ) from ke + for entry in compat.importlib_metadata_get("console_scripts"): + if entry.name == entrypoint_name: + impl: Any = entry + break + else: + raise util.CommandError( + f"Could not find entrypoint console_scripts.{entrypoint_name}" + ) + cwd: Optional[str] = options.get("cwd", None) + cmdline_options_str = options.get("options", "") + cmdline_options_list = _parse_cmdline_options(cmdline_options_str, path) + + kw: Dict[str, Any] = {} + if ignore_output: + kw["stdout"] = kw["stderr"] = subprocess.DEVNULL + + subprocess.run( + [ + sys.executable, + "-c", + f"import {impl.module}; {impl.module}.{impl.attr}()", + ] + + cmdline_options_list, + cwd=cwd, + **kw, + ) + + +@register("exec") +def exec_(path: str, options: dict, ignore_output: bool = False) -> None: + try: + executable = options["executable"] + except KeyError as ke: + raise util.CommandError( + f"Key {options['_hook_name']}.executable is required for post " + f"write hook {options['_hook_name']!r}" + ) from ke + cwd: Optional[str] = options.get("cwd", None) + cmdline_options_str = options.get("options", "") + cmdline_options_list = _parse_cmdline_options(cmdline_options_str, path) + + kw: Dict[str, Any] = {} + if ignore_output: + kw["stdout"] = kw["stderr"] = subprocess.DEVNULL + + subprocess.run( + [ + executable, + *cmdline_options_list, + ], + cwd=cwd, + **kw, + ) diff --git a/venv/Lib/site-packages/alembic/templates/async/README b/venv/Lib/site-packages/alembic/templates/async/README new file mode 100644 index 0000000..e0d0858 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/async/README @@ -0,0 +1 @@ +Generic single-database configuration with an async dbapi. \ No newline at end of file diff --git a/venv/Lib/site-packages/alembic/templates/async/__pycache__/env.cpython-37.pyc b/venv/Lib/site-packages/alembic/templates/async/__pycache__/env.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b2e196ff5afb534994572129836569be9f20339 GIT binary patch literal 2114 zcmZuyO^+Kj7`A67lVp<3Znm(L6TX#5B}Eko387W#0-{p2YL`}^QPh!l>?F>5KCqqr zsM=GxR@_k!$q|V&e}I26S5Eu|PQ3O^cDJY#jmLid@jiav=XrB~Yb!$V><8)mX&0ft z?O^lx(76Y%{u3I87?vouUr*x9i#=@nzVx#o4qQKwtt^Z~*Kf&o)`>f=AIfeP#Sun4 zTJ+)`?=AWapLEqT?%Dn;46AUw#V~8X!K}l&zXb7shcJ%bc&x|zFy3xvx7YwiJI!dD z?Z9Zrqt)&jsXzGO6~ZVF`OtnD{sE1K{{VJ$IKovl6_Otm`Bcnc6qH3FtraXePmL&Y z7~Q1$B2N>Z&qU6XsVcH0-Rx*X&+u~t%RV+CCUw2p&3sSKouipcQ6#jb9?; zE&LbA1k7VT3j}7Z*AOh@ty*jJ>%jHGH5~9GV&P+SgnoiAz;4s;;LxLGPBJl5)WXw5 zn_pQ7oJiA@mxdlo?sm<&;)H5)#-$t+a{q$p6H%5TpE-y1NhDR=p>&B>!G>H0hJQ)7aRCve$LaS;UABPbI&tj zoVS^9AMA=`hJAf5Nso_ir`|6Y*ZUesg;0z-jc!?3mn6y&T69xeXZ_ma^En%ca8Cot*}&lD$e7sEqW=?1*jXT z7F<{Lpox2yyt=M}@ovr8MC4*)Q@&l*Ib2Hl2u`SMDYOvcjt#XfnJ%hvn+aVOnvcA= z*DSH(erKZIvs>$Od&T~J@S|;ZQRv}5urBg4^}0gLld6X}1Hdfy_w!k859oJZEXr4RDehtQ60s1M*% z4P-F`jnBq)7?oWTM_2i%V>!GsjO%|J71)J)*X`$K+#qzh0=%`DYfZS!?KH`<|80q_ zWKK3tr7k7)tt`HHTj-6v6Z_}!&bxNLf~lqC`&P%AK-0l}uMfF^HVA_VM`6$z+}vpo Lb_Zbxcf9`q(7-N1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/templates/async/alembic.ini.mako b/venv/Lib/site-packages/alembic/templates/async/alembic.ini.mako new file mode 100644 index 0000000..bc9f2d5 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/async/alembic.ini.mako @@ -0,0 +1,114 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = ${script_location} + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to ${script_location}/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:${script_location}/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +sqlalchemy.url = driver://user:pass@localhost/dbname + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# lint with attempts to fix using "ruff" - use the exec runner, execute a binary +# hooks = ruff +# ruff.type = exec +# ruff.executable = %(here)s/.venv/bin/ruff +# ruff.options = --fix REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/venv/Lib/site-packages/alembic/templates/async/env.py b/venv/Lib/site-packages/alembic/templates/async/env.py new file mode 100644 index 0000000..9f2d519 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/async/env.py @@ -0,0 +1,89 @@ +import asyncio +from logging.config import fileConfig + +from sqlalchemy import pool +from sqlalchemy.engine import Connection +from sqlalchemy.ext.asyncio import async_engine_from_config + +from alembic import context + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +target_metadata = None + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline() -> None: + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def do_run_migrations(connection: Connection) -> None: + context.configure(connection=connection, target_metadata=target_metadata) + + with context.begin_transaction(): + context.run_migrations() + + +async def run_async_migrations() -> None: + """In this scenario we need to create an Engine + and associate a connection with the context. + + """ + + connectable = async_engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + async with connectable.connect() as connection: + await connection.run_sync(do_run_migrations) + + await connectable.dispose() + + +def run_migrations_online() -> None: + """Run migrations in 'online' mode.""" + + asyncio.run(run_async_migrations()) + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/venv/Lib/site-packages/alembic/templates/async/script.py.mako b/venv/Lib/site-packages/alembic/templates/async/script.py.mako new file mode 100644 index 0000000..fbc4b07 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/async/script.py.mako @@ -0,0 +1,26 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + ${downgrades if downgrades else "pass"} diff --git a/venv/Lib/site-packages/alembic/templates/generic/README b/venv/Lib/site-packages/alembic/templates/generic/README new file mode 100644 index 0000000..98e4f9c --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/generic/README @@ -0,0 +1 @@ +Generic single-database configuration. \ No newline at end of file diff --git a/venv/Lib/site-packages/alembic/templates/generic/__pycache__/env.cpython-37.pyc b/venv/Lib/site-packages/alembic/templates/generic/__pycache__/env.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff77a9793a8824db337eec40fdaace60075b9771 GIT binary patch literal 1683 zcmZux&5qkP5GG|=wq>t34cZ`=0=%UL+D#B32v8J3nr#cD2o`CYqJ?0AM=B~hStsZn)Z;7;daSxdk|mTtvhHO)=&k#rdpt1T0`>Z9 zzq^|aL{}ugQPC6qH*uD3M+1@KXb8z>bVV;h5=sM`7)G%9^vY6#NYh0D3!r2~L9Gto%)Dr`)Hahoie52S0*blMWhbSD`P(d&0 zE8?Pc=OuBmh(t%kl8WvH9??ac?j?CU4q9@F4t^ve`HnmzKj9xC_V_pG^jWQ0A(w_b zS!&CqX1B`4LLtaotSAK>q$$Jpd?hVw0oMjBb1U#ekCwfVZpGHMb&Rtgo;?ZcxfV>9 zXwmHJaO6*MOIa^hR~CjId7eY%_*_BQwE_c-TlNB!I$-S48MDW-s-#|qfUPH%8whB_ zmKVT8sc$(3C!m=I5QyTdM_)dD%v{Ol=$iJ{N)b*0h~f!JNRV6LU<^o z3(=O+d$i7k@TIqfh&DH}a;&UfRlBXz^RfL!ah0#2I6J6~dY+{fH@vX!OhMDtyZ|wY zn+{Gj`;MC>xLE;?3+{Nfr=$bJ)od=cu-QmRt{``_vU2ul(rc3T-n0F%i%aciFk7aJ zG-w9zvSK_xnh)lH6q`B2wdJ{A*NjcAXIDv{P=f_TekW#(zrTLYKcChXjGZdbP__K=V$GE^w5p6M-`E3V9rMLrodkGp0 zT5$bAb=KVYXZ+cgU>{?2dkqB{r8K5d_(q+S8gG2Z{0IlW^aJy!s5s*2CUSJ$k>oNG z)Wz$rh%P#>$V;+8roX-OiaIRem(&eJ=OV%i=xx$%E%Y|SZ7sxYEnrn_H4$S~bkBeN zzmm}ZsffoK8G#hGIcRQViKK1m=c(lxiqzYY|6NINYs*}QInO_hX~qP#74%+7?N~K@ zk5!YXNh$*id72IUdy!*GEE>}*KY;*8lacA*Eg64j+0b*wwqdgCEmdYx%bm@{epUad zR_ZA_4Ns6q6}V-F-j8RM8F{gXViIM;ZA4#G=DMHoJZi;0YRyOg&Ud)IdpKqNa?*?F z2$P*+s^cKdhiIMbHDgsSk-W=;7O3&5&(f<)XbPx# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/templates/generic/alembic.ini.mako b/venv/Lib/site-packages/alembic/templates/generic/alembic.ini.mako new file mode 100644 index 0000000..c18ddb4 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/generic/alembic.ini.mako @@ -0,0 +1,116 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = ${script_location} + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file +# for all available tokens +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to ${script_location}/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:${script_location}/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +sqlalchemy.url = driver://user:pass@localhost/dbname + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# lint with attempts to fix using "ruff" - use the exec runner, execute a binary +# hooks = ruff +# ruff.type = exec +# ruff.executable = %(here)s/.venv/bin/ruff +# ruff.options = --fix REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/venv/Lib/site-packages/alembic/templates/generic/env.py b/venv/Lib/site-packages/alembic/templates/generic/env.py new file mode 100644 index 0000000..36112a3 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/generic/env.py @@ -0,0 +1,78 @@ +from logging.config import fileConfig + +from sqlalchemy import engine_from_config +from sqlalchemy import pool + +from alembic import context + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +target_metadata = None + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline() -> None: + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online() -> None: + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + connectable = engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + with connectable.connect() as connection: + context.configure( + connection=connection, target_metadata=target_metadata + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/venv/Lib/site-packages/alembic/templates/generic/script.py.mako b/venv/Lib/site-packages/alembic/templates/generic/script.py.mako new file mode 100644 index 0000000..fbc4b07 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/generic/script.py.mako @@ -0,0 +1,26 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + ${downgrades if downgrades else "pass"} diff --git a/venv/Lib/site-packages/alembic/templates/multidb/README b/venv/Lib/site-packages/alembic/templates/multidb/README new file mode 100644 index 0000000..f046ec9 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/multidb/README @@ -0,0 +1,12 @@ +Rudimentary multi-database configuration. + +Multi-DB isn't vastly different from generic. The primary difference is that it +will run the migrations N times (depending on how many databases you have +configured), providing one engine name and associated context for each run. + +That engine name will then allow the migration to restrict what runs within it to +just the appropriate migrations for that engine. You can see this behavior within +the mako template. + +In the provided configuration, you'll need to have `databases` provided in +alembic's config, and an `sqlalchemy.url` provided for each engine name. diff --git a/venv/Lib/site-packages/alembic/templates/multidb/__pycache__/env.cpython-37.pyc b/venv/Lib/site-packages/alembic/templates/multidb/__pycache__/env.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a07650a9b634040a30ad08c3b1f2b795109f3697 GIT binary patch literal 2729 zcmZ{m-H+Tv62QA{kH_Qr+MOf|i-0qTC^x4tL6J@;p(uh4i2&vH!X{|I8g96HkR$WrR$=yYZIjpuc{B}hAHAb2H z9c6Xa_|o#%SG^`{L9fG|#ib(FRpN^ui$CE?9#sU?L0?B1Tz{(a}5{$F8OZ|5jiEtHx*e>MwPKN-XovAeo7-^kvW;uTjbPG=AN~v%qfG>xxvg^ zEVJ`{Te>pHtDcDsP4zuQTgDfFS3}$SQQ&Vg0xmjveZEmvaW8>TRPc884 zqQ6Ztw^V)6nA0W2Y%({396o{lQRbq#B;R(hwbz0O8c)D;pRndfWQTlmp>?o@TF7N9 zxJL=u$rEoHO+=ugG?8AEc-PYLIEG|i^QI}|J=gW%_h>hgUYXcjaOtUCj$O>EcND2z zZ!ee13%rka?rZxXVP2AgCh_j-t+@_U(tNV}OyhyaAPjj1n-Ft7YnKb|1=2g>aoqE~ ztrJh~M_Cpn6TM*R$qNP7(dsEj++%5SO?mu~CtkuigDBqHdiTKxo=UwDxH}A@7*|+5 z$(CowN7NigNCTM-T%M88?u4oCTT%tg^wftYYLoN^W55`Hs|6c<4}97PF}euG7D z?n5<9GbQ1q*H_hoKDWE=!Vs{4%wSUCu+b3JQsD6~>~hQf4!W1%0uBj!fm>05HKww# z<8(5CAgm}Er-hYfJSl4DCq-Zd6(&sg*GC*`bf`p-$Uu84S|U$|&rV;rQdG;(WMN?x zg(-MgRIt>Cg^~>p9q*j`ySIW>Ytd%aGgv`9Yv^&4Fb8$4hElCBIvPsu6AKVz?Og%{ z)e%7l-}i~CKc%8^{4#jHtRr1JMLgP@WN~E)Xg~NrK=Re|(a!nk297?Z2OE6=Skj}= zqrY$Y!picUKKX)tN)kgOukjnN5clH6m2KPyFtP@qusQqY_c)mR27@0YfC1o^40#fW zCh5O8>U%yaYe*~WTRXNNvAU+h#tO*^K9wlYBYY9BqeseWGROvoX{Pwv;snA8; zg)If!?e3;%!d@Ziw^qD3O0!*fNf#B}7aeqb3B?r@$QQAJ;sp?eeHg?!ywIzVFTf{9f=z+w zg(K299zpFFl`u{v2b8{uvo=w@gyJ=vZ(%YuU`p{SDzE$+1o~j?z>wSmLFy$3pyr|O zJ7x#!f6cIH%Rq^2Kq}xLH6UTMMK`dI{D8K&4qm#Kiz>1d-UUT#)##NV6$Xs!H2dze zb5SN5Gg?$vFe}sk23qUfua)zMnxLAfHQ0^&n%Fv%ej9gZ8UUC}te0D;vx@N2k-;aM zJfq(bKMF1+2w5z2mYiEKl*jxwkgWuy0|{}A20UWJuq@khDf}yqrscHWX#LHBv0ngP C?CxFw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/templates/multidb/alembic.ini.mako b/venv/Lib/site-packages/alembic/templates/multidb/alembic.ini.mako new file mode 100644 index 0000000..a9ea075 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/multidb/alembic.ini.mako @@ -0,0 +1,121 @@ +# a multi-database configuration. + +[alembic] +# path to migration scripts +script_location = ${script_location} + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file +# for all available tokens +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to ${script_location}/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:${script_location}/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +databases = engine1, engine2 + +[engine1] +sqlalchemy.url = driver://user:pass@localhost/dbname + +[engine2] +sqlalchemy.url = driver://user:pass@localhost/dbname2 + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# lint with attempts to fix using "ruff" - use the exec runner, execute a binary +# hooks = ruff +# ruff.type = exec +# ruff.executable = %(here)s/.venv/bin/ruff +# ruff.options = --fix REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/venv/Lib/site-packages/alembic/templates/multidb/env.py b/venv/Lib/site-packages/alembic/templates/multidb/env.py new file mode 100644 index 0000000..e937b64 --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/multidb/env.py @@ -0,0 +1,140 @@ +import logging +from logging.config import fileConfig +import re + +from sqlalchemy import engine_from_config +from sqlalchemy import pool + +from alembic import context + +USE_TWOPHASE = False + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) +logger = logging.getLogger("alembic.env") + +# gather section names referring to different +# databases. These are named "engine1", "engine2" +# in the sample .ini file. +db_names = config.get_main_option("databases", "") + +# add your model's MetaData objects here +# for 'autogenerate' support. These must be set +# up to hold just those tables targeting a +# particular database. table.tometadata() may be +# helpful here in case a "copy" of +# a MetaData is needed. +# from myapp import mymodel +# target_metadata = { +# 'engine1':mymodel.metadata1, +# 'engine2':mymodel.metadata2 +# } +target_metadata = {} + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline() -> None: + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + # for the --sql use case, run migrations for each URL into + # individual files. + + engines = {} + for name in re.split(r",\s*", db_names): + engines[name] = rec = {} + rec["url"] = context.config.get_section_option(name, "sqlalchemy.url") + + for name, rec in engines.items(): + logger.info("Migrating database %s" % name) + file_ = "%s.sql" % name + logger.info("Writing output to %s" % file_) + with open(file_, "w") as buffer: + context.configure( + url=rec["url"], + output_buffer=buffer, + target_metadata=target_metadata.get(name), + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + with context.begin_transaction(): + context.run_migrations(engine_name=name) + + +def run_migrations_online() -> None: + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + + # for the direct-to-DB use case, start a transaction on all + # engines, then run all migrations, then commit all transactions. + + engines = {} + for name in re.split(r",\s*", db_names): + engines[name] = rec = {} + rec["engine"] = engine_from_config( + context.config.get_section(name, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + for name, rec in engines.items(): + engine = rec["engine"] + rec["connection"] = conn = engine.connect() + + if USE_TWOPHASE: + rec["transaction"] = conn.begin_twophase() + else: + rec["transaction"] = conn.begin() + + try: + for name, rec in engines.items(): + logger.info("Migrating database %s" % name) + context.configure( + connection=rec["connection"], + upgrade_token="%s_upgrades" % name, + downgrade_token="%s_downgrades" % name, + target_metadata=target_metadata.get(name), + ) + context.run_migrations(engine_name=name) + + if USE_TWOPHASE: + for rec in engines.values(): + rec["transaction"].prepare() + + for rec in engines.values(): + rec["transaction"].commit() + except: + for rec in engines.values(): + rec["transaction"].rollback() + raise + finally: + for rec in engines.values(): + rec["connection"].close() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/venv/Lib/site-packages/alembic/templates/multidb/script.py.mako b/venv/Lib/site-packages/alembic/templates/multidb/script.py.mako new file mode 100644 index 0000000..6108b8a --- /dev/null +++ b/venv/Lib/site-packages/alembic/templates/multidb/script.py.mako @@ -0,0 +1,47 @@ +<%! +import re + +%>"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade(engine_name: str) -> None: + globals()["upgrade_%s" % engine_name]() + + +def downgrade(engine_name: str) -> None: + globals()["downgrade_%s" % engine_name]() + +<% + db_names = config.get_main_option("databases") +%> + +## generate an "upgrade_() / downgrade_()" function +## for each database name in the ini file. + +% for db_name in re.split(r',\s*', db_names): + +def upgrade_${db_name}() -> None: + ${context.get("%s_upgrades" % db_name, "pass")} + + +def downgrade_${db_name}() -> None: + ${context.get("%s_downgrades" % db_name, "pass")} + +% endfor diff --git a/venv/Lib/site-packages/alembic/testing/__init__.py b/venv/Lib/site-packages/alembic/testing/__init__.py new file mode 100644 index 0000000..0407adf --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/__init__.py @@ -0,0 +1,29 @@ +from sqlalchemy.testing import config +from sqlalchemy.testing import emits_warning +from sqlalchemy.testing import engines +from sqlalchemy.testing import exclusions +from sqlalchemy.testing import mock +from sqlalchemy.testing import provide_metadata +from sqlalchemy.testing import skip_if +from sqlalchemy.testing import uses_deprecated +from sqlalchemy.testing.config import combinations +from sqlalchemy.testing.config import fixture +from sqlalchemy.testing.config import requirements as requires + +from .assertions import assert_raises +from .assertions import assert_raises_message +from .assertions import emits_python_deprecation_warning +from .assertions import eq_ +from .assertions import eq_ignore_whitespace +from .assertions import expect_raises +from .assertions import expect_raises_message +from .assertions import expect_sqlalchemy_deprecated +from .assertions import expect_sqlalchemy_deprecated_20 +from .assertions import expect_warnings +from .assertions import is_ +from .assertions import is_false +from .assertions import is_not_ +from .assertions import is_true +from .assertions import ne_ +from .fixtures import TestBase +from .util import resolve_lambda diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3aaa6c230c78ad89965671fba75815cc95da2a9 GIT binary patch literal 1268 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 BGg<%u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/env.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/env.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02f8ca5c190ed11029e2de37d2c17c89dfc68423 GIT binary patch literal 9539 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 Y9k)yN75k!n7WK0IO6jH2N2SmH8>YaZ+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/fixtures.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/fixtures.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4d7bd69974913d80a0ade4afc7ed7694d513cc8 GIT binary patch literal 9348 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/requirements.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/requirements.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0702f272ad507a3c87db7da6e3895ba91b98e009 GIT binary patch literal 8333 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 J(VTA1{0A2e#w!2- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/util.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/util.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61cf5317404332e39abe8abdcdc3e267a0003d3a GIT binary patch literal 3938 zcma)9&u`qu73K`NTxzwFW!1Hvpe@({iM*&RCr*N*hHWHnsscf36tEk&tPEnbGrOY1 zCD$`t$r89H39x)#rH+-UpI9JUgX(1FKrC`$Oqk!e%c%a zQ2@FrgCi%JlXJ3#-W0aWqBcrB+tx4j2nN+K!UiMWM-(kMch|KZ0b6PX;sQ#5^|sI_!zAkSY{9A7wK9s!*m#vi@2( zA8aOBZQPAcnCnDkg_2>B?+GnUxS8jv5?L$6wWId;axHIe3Ih&UI~su5thMah2f`#> zk*51$Uu8-Q>=24DOS&pd^Lz)Jg^2`z(o2*MYZ-YK7F%j6*jPCN>WS3kp;3hiM?=do z-7L(+Kuvf2!&-ms&YgO9(r;!|FBSdx4a=-#;-O0>-Qq?n4)*V@VE)D6T-zM&#QF-14(RWJc=@&17HYbiPI+W{C zaLlOaPFar?Y*LD|*+X{C`4@lYq3pbh#WT?a2o2nyljvW8fZ(fRh8jmjOXrkpUb63@ z!80zYX8Ahdj0;%l@QSZ}TCp9Bnf#CQ`bqcB#>gmbHd2-4yZMGxW~a!98>SF_72f{z z_Lmz-f3vf(tFqmV?~=_8lN9RaP;_^|U^YamQ1RVc69Bk1Dw1?D!&pEjDRw=FBO>>mFxep>S1yXDXa=P~2CVyC)ynNo|i{|P%Fm<@5cA)2pX1Yx@ zx`Lw@>2V2pRiT}~@sx6X8(S?BYEkAISN6-z26 zUbEE>k6ff-6-;xk6I9Ct@@aQV4ffY2F4dGpl?(W){LxSX2rJ*@8mL;e&sSvSB7}O0 zbawSG@M9OA84U}TX_hRgF2AMfWlWnZcsRdobDy`^A`iI7Tc8)2rYxHUgSw7~d!F*| zTMz{@5S@d4;EcIVVlG|u6Hci;b_-TI+Z>cvdM7S*6Z9wVq=8w#^iKJ>Q8s!`>DvC{ z9sKu?z|M@YKEDaigsB*8N)cKdukjkm2jtYM7-`F=_NGk5mMCmhZV7aYG__#AE7B2~ zM=wcJ^qC}^G?>R*i3#zK^p_#}1Fa4BRM-_+xFvQ~ILPHFRX0<$t5U3fj_n|3wuM$b zG@c@dL=;QbopSC9oruj8tRq8Rs@8wnWGr0FJUOjo3li7i$%JZoX`0xltYrVT0ASOW zig=h0Cs|#&@D8T<&fZy4BQ>cV*)sYL@@#JV&cR1eJx_O4Tx)Z#>SpYnrlz1)9?ewq zaokVyO;lzaYbrRD#r{y4s=YqSx^#GXjA0eTXpB41~+f%}p(VDAg|g7;iH=o|%OxEK)GJox0#I^V^KBK(so#5bZ4VK3Ln z!r?yE;WYkh6S%jv^@=ba5x6`_j(Dn+c}puBU@9W)?eqZ4g#8G!yX_pKSpESm4oMI1 z;cO`dgFwup{6i2^gXnx$vJ-xaA{_J5iQR+n7&TV%Lq5hS?*ym2?FLm@=@KkHLCe7` z&UE$cUopm3?!#H@G6XoH(~MeY@T19xQ84vJ6%61PppS@JU9EsZG3u-0ax)5~&WAKY zm-2AR=-H+ECe~LzB8n3QQr4mvpG3V5cT8kw~Qwa zK1*Avx;dQ*&t@jF5RQiF=0o6j)SN8C?w>)pzKsX4vBp#EtA9fitbS=>F__Bz8{Qa- zfWsCS4nF#EMLM3Q`mKdKwPdcpps6qEVROCSyPl=JYd0)il>P{>On`^uw&9VbCH-5_ zXaR*jxMaT;{+?vTYKZYubghO3IC3=s;w*nCISHwMPX$4`?FThZKSEB>Ux_TRnZWGv z03zWF>Sr~a%o=4i7aP%2F&I+3tu;fG0_HPKC!6&y6&_vF&S3X^jEPy!x+p??XHXH2 z@p)Bpvs!qiyWQCKr6(JQ?wA)%^PuGVuJlWuu#6|pxRH7EEInj5>+!N-dqi`Zxz^i= z_~N8h#wzP4nTi&ABLeHmaJ};DaVI#7QS{+is!u!ZTD{!pd(gaU;=Ck^LIdNvBdzhN zQ8n|S{cO`@XUDJHkxup3p!I!vP-5A&HKbVw&b(+}7;qSB(a3Z})?-V!mvP&-aDNA{ zP?-~J!FpRdM$>q_db4Jj~Yl7gGBpq$vwuos{$VRKy@JzXx fhE;I4Zh7~~5JQKBHV>dC{@mcR;BxDOrRM(uTUggC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/__pycache__/warnings.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/__pycache__/warnings.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa4038611216419a465aafa4be7fc59811044866 GIT binary patch literal 810 zcmZWn&2Q5%6t|r;O}n-#)efAHFB~et3e(_#&_wx=n1rTDJq$vm%8k7?trG{^DRcr( zT=^f^k$)*yPWu-)@!WRP&|dVu?DzG1@ym9*iGU9MWcJiY=#O)*h=B0|*gOEi5yuim zP7{eU5_uSLkNeWkYEcdB8V`P;DByU6`t?i5K*xPtdE!fQ=?Z~eH=iUMKR!s@r6UX+ z0>1(_-$7XP3tzyoMRUTj_2xb&KgkWh_MabYy}Ee|nZ%7_g9{jJ)pFy=@EbZs`L2&_ zW6{(z43#nZfb!n^O^5ndG;eNd@BqdR&j%x6=~Su-lk_vwd74k@M9kPSRhpgw+nJzN z7)wo=TCrEvgw{#}xG-T>OqE_$K|0Nq7U%bi#dNHNQKe3Vp{b!<6k51APMM)Br^AyY z?Ury{`6^FDf2Rt!T}{=7RAH~(&RHt0(AR!o*cf&j?T&`8w`Eh6pKfN38l&OXta`Vv zHT-E*1;xrCsdkRCLTUTP0g3LOtPgMJ^s(+h)^DV{p#FYLp2ejR+Qd@iYN=u_%)+W7 zHkM5V-G8+IBtDbOEaIiem+`xF5*t|9!-6FX2rw~|BAcYiz>NS~9$W$2D^^t-fS1L1 zgV?x!<{k*-g`|tSUI+Wc#{|BB5ZuBY&_32Zi0IdK160&>PfaE>k*&0QeYypr@=Ke_ eHTZS#8p#cD$Hj!tGsR0O4qY7+fCx#8w7h?56xgKz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/assertions.py b/venv/Lib/site-packages/alembic/testing/assertions.py new file mode 100644 index 0000000..ec9593b --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/assertions.py @@ -0,0 +1,167 @@ +from __future__ import annotations + +import contextlib +import re +import sys +from typing import Any +from typing import Dict + +from sqlalchemy import exc as sa_exc +from sqlalchemy.engine import default +from sqlalchemy.testing.assertions import _expect_warnings +from sqlalchemy.testing.assertions import eq_ # noqa +from sqlalchemy.testing.assertions import is_ # noqa +from sqlalchemy.testing.assertions import is_false # noqa +from sqlalchemy.testing.assertions import is_not_ # noqa +from sqlalchemy.testing.assertions import is_true # noqa +from sqlalchemy.testing.assertions import ne_ # noqa +from sqlalchemy.util import decorator + +from ..util import sqla_compat + + +def _assert_proper_exception_context(exception): + """assert that any exception we're catching does not have a __context__ + without a __cause__, and that __suppress_context__ is never set. + + Python 3 will report nested as exceptions as "during the handling of + error X, error Y occurred". That's not what we want to do. we want + these exceptions in a cause chain. + + """ + + if ( + exception.__context__ is not exception.__cause__ + and not exception.__suppress_context__ + ): + assert False, ( + "Exception %r was correctly raised but did not set a cause, " + "within context %r as its cause." + % (exception, exception.__context__) + ) + + +def assert_raises(except_cls, callable_, *args, **kw): + return _assert_raises(except_cls, callable_, args, kw, check_context=True) + + +def assert_raises_context_ok(except_cls, callable_, *args, **kw): + return _assert_raises(except_cls, callable_, args, kw) + + +def assert_raises_message(except_cls, msg, callable_, *args, **kwargs): + return _assert_raises( + except_cls, callable_, args, kwargs, msg=msg, check_context=True + ) + + +def assert_raises_message_context_ok( + except_cls, msg, callable_, *args, **kwargs +): + return _assert_raises(except_cls, callable_, args, kwargs, msg=msg) + + +def _assert_raises( + except_cls, callable_, args, kwargs, msg=None, check_context=False +): + with _expect_raises(except_cls, msg, check_context) as ec: + callable_(*args, **kwargs) + return ec.error + + +class _ErrorContainer: + error: Any = None + + +@contextlib.contextmanager +def _expect_raises(except_cls, msg=None, check_context=False): + ec = _ErrorContainer() + if check_context: + are_we_already_in_a_traceback = sys.exc_info()[0] + try: + yield ec + success = False + except except_cls as err: + ec.error = err + success = True + if msg is not None: + assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}" + if check_context and not are_we_already_in_a_traceback: + _assert_proper_exception_context(err) + print(str(err).encode("utf-8")) + + # assert outside the block so it works for AssertionError too ! + assert success, "Callable did not raise an exception" + + +def expect_raises(except_cls, check_context=True): + return _expect_raises(except_cls, check_context=check_context) + + +def expect_raises_message(except_cls, msg, check_context=True): + return _expect_raises(except_cls, msg=msg, check_context=check_context) + + +def eq_ignore_whitespace(a, b, msg=None): + a = re.sub(r"^\s+?|\n", "", a) + a = re.sub(r" {2,}", " ", a) + b = re.sub(r"^\s+?|\n", "", b) + b = re.sub(r" {2,}", " ", b) + + assert a == b, msg or "%r != %r" % (a, b) + + +_dialect_mods: Dict[Any, Any] = {} + + +def _get_dialect(name): + if name is None or name == "default": + return default.DefaultDialect() + else: + d = sqla_compat._create_url(name).get_dialect()() + + if name == "postgresql": + d.implicit_returning = True + elif name == "mssql": + d.legacy_schema_aliasing = False + return d + + +def expect_warnings(*messages, **kw): + """Context manager which expects one or more warnings. + + With no arguments, squelches all SAWarnings emitted via + sqlalchemy.util.warn and sqlalchemy.util.warn_limited. Otherwise + pass string expressions that will match selected warnings via regex; + all non-matching warnings are sent through. + + The expect version **asserts** that the warnings were in fact seen. + + Note that the test suite sets SAWarning warnings to raise exceptions. + + """ + return _expect_warnings(Warning, messages, **kw) + + +def emits_python_deprecation_warning(*messages): + """Decorator form of expect_warnings(). + + Note that emits_warning does **not** assert that the warnings + were in fact seen. + + """ + + @decorator + def decorate(fn, *args, **kw): + with _expect_warnings(DeprecationWarning, assert_=False, *messages): + return fn(*args, **kw) + + return decorate + + +def expect_sqlalchemy_deprecated(*messages, **kw): + return _expect_warnings(sa_exc.SADeprecationWarning, messages, **kw) + + +def expect_sqlalchemy_deprecated_20(*messages, **kw): + return _expect_warnings(sa_exc.RemovedIn20Warning, messages, **kw) diff --git a/venv/Lib/site-packages/alembic/testing/env.py b/venv/Lib/site-packages/alembic/testing/env.py new file mode 100644 index 0000000..5df7ef8 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/env.py @@ -0,0 +1,518 @@ +import importlib.machinery +import os +import shutil +import textwrap + +from sqlalchemy.testing import config +from sqlalchemy.testing import provision + +from . import util as testing_util +from .. import command +from .. import script +from .. import util +from ..script import Script +from ..script import ScriptDirectory + + +def _get_staging_directory(): + if provision.FOLLOWER_IDENT: + return "scratch_%s" % provision.FOLLOWER_IDENT + else: + return "scratch" + + +def staging_env(create=True, template="generic", sourceless=False): + cfg = _testing_config() + if create: + path = os.path.join(_get_staging_directory(), "scripts") + assert not os.path.exists(path), ( + "staging directory %s already exists; poor cleanup?" % path + ) + + command.init(cfg, path, template=template) + if sourceless: + try: + # do an import so that a .pyc/.pyo is generated. + util.load_python_file(path, "env.py") + except AttributeError: + # we don't have the migration context set up yet + # so running the .env py throws this exception. + # theoretically we could be using py_compiler here to + # generate .pyc/.pyo without importing but not really + # worth it. + pass + assert sourceless in ( + "pep3147_envonly", + "simple", + "pep3147_everything", + ), sourceless + make_sourceless( + os.path.join(path, "env.py"), + "pep3147" if "pep3147" in sourceless else "simple", + ) + + sc = script.ScriptDirectory.from_config(cfg) + return sc + + +def clear_staging_env(): + from sqlalchemy.testing import engines + + engines.testing_reaper.close_all() + shutil.rmtree(_get_staging_directory(), True) + + +def script_file_fixture(txt): + dir_ = os.path.join(_get_staging_directory(), "scripts") + path = os.path.join(dir_, "script.py.mako") + with open(path, "w") as f: + f.write(txt) + + +def env_file_fixture(txt): + dir_ = os.path.join(_get_staging_directory(), "scripts") + txt = ( + """ +from alembic import context + +config = context.config +""" + + txt + ) + + path = os.path.join(dir_, "env.py") + pyc_path = util.pyc_file_from_path(path) + if pyc_path: + os.unlink(pyc_path) + + with open(path, "w") as f: + f.write(txt) + + +def _sqlite_file_db(tempname="foo.db", future=False, scope=None, **options): + dir_ = os.path.join(_get_staging_directory(), "scripts") + url = "sqlite:///%s/%s" % (dir_, tempname) + if scope and util.sqla_14: + options["scope"] = scope + return testing_util.testing_engine(url=url, future=future, options=options) + + +def _sqlite_testing_config(sourceless=False, future=False): + dir_ = os.path.join(_get_staging_directory(), "scripts") + url = "sqlite:///%s/foo.db" % dir_ + + sqlalchemy_future = future or ("future" in config.db.__class__.__module__) + + return _write_config_file( + """ +[alembic] +script_location = %s +sqlalchemy.url = %s +sourceless = %s +%s + +[loggers] +keys = root,sqlalchemy + +[handlers] +keys = console + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = DEBUG +handlers = +qualname = sqlalchemy.engine + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatters] +keys = generic + +[formatter_generic] +format = %%(levelname)-5.5s [%%(name)s] %%(message)s +datefmt = %%H:%%M:%%S + """ + % ( + dir_, + url, + "true" if sourceless else "false", + "sqlalchemy.future = true" if sqlalchemy_future else "", + ) + ) + + +def _multi_dir_testing_config(sourceless=False, extra_version_location=""): + dir_ = os.path.join(_get_staging_directory(), "scripts") + sqlalchemy_future = "future" in config.db.__class__.__module__ + + url = "sqlite:///%s/foo.db" % dir_ + + return _write_config_file( + """ +[alembic] +script_location = %s +sqlalchemy.url = %s +sqlalchemy.future = %s +sourceless = %s +version_locations = %%(here)s/model1/ %%(here)s/model2/ %%(here)s/model3/ %s + +[loggers] +keys = root + +[handlers] +keys = console + +[logger_root] +level = WARN +handlers = console +qualname = + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatters] +keys = generic + +[formatter_generic] +format = %%(levelname)-5.5s [%%(name)s] %%(message)s +datefmt = %%H:%%M:%%S + """ + % ( + dir_, + url, + "true" if sqlalchemy_future else "false", + "true" if sourceless else "false", + extra_version_location, + ) + ) + + +def _no_sql_testing_config(dialect="postgresql", directives=""): + """use a postgresql url with no host so that + connections guaranteed to fail""" + dir_ = os.path.join(_get_staging_directory(), "scripts") + return _write_config_file( + """ +[alembic] +script_location = %s +sqlalchemy.url = %s:// +%s + +[loggers] +keys = root + +[handlers] +keys = console + +[logger_root] +level = WARN +handlers = console +qualname = + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatters] +keys = generic + +[formatter_generic] +format = %%(levelname)-5.5s [%%(name)s] %%(message)s +datefmt = %%H:%%M:%%S + +""" + % (dir_, dialect, directives) + ) + + +def _write_config_file(text): + cfg = _testing_config() + with open(cfg.config_file_name, "w") as f: + f.write(text) + return cfg + + +def _testing_config(): + from alembic.config import Config + + if not os.access(_get_staging_directory(), os.F_OK): + os.mkdir(_get_staging_directory()) + return Config(os.path.join(_get_staging_directory(), "test_alembic.ini")) + + +def write_script( + scriptdir, rev_id, content, encoding="ascii", sourceless=False +): + old = scriptdir.revision_map.get_revision(rev_id) + path = old.path + + content = textwrap.dedent(content) + if encoding: + content = content.encode(encoding) + with open(path, "wb") as fp: + fp.write(content) + pyc_path = util.pyc_file_from_path(path) + if pyc_path: + os.unlink(pyc_path) + script = Script._from_path(scriptdir, path) + old = scriptdir.revision_map.get_revision(script.revision) + if old.down_revision != script.down_revision: + raise Exception( + "Can't change down_revision " "on a refresh operation." + ) + scriptdir.revision_map.add_revision(script, _replace=True) + + if sourceless: + make_sourceless( + path, "pep3147" if sourceless == "pep3147_everything" else "simple" + ) + + +def make_sourceless(path, style): + import py_compile + + py_compile.compile(path) + + if style == "simple": + pyc_path = util.pyc_file_from_path(path) + suffix = importlib.machinery.BYTECODE_SUFFIXES[0] + filepath, ext = os.path.splitext(path) + simple_pyc_path = filepath + suffix + shutil.move(pyc_path, simple_pyc_path) + pyc_path = simple_pyc_path + else: + assert style in ("pep3147", "simple") + pyc_path = util.pyc_file_from_path(path) + + assert os.access(pyc_path, os.F_OK) + + os.unlink(path) + + +def three_rev_fixture(cfg): + a = util.rev_id() + b = util.rev_id() + c = util.rev_id() + + script = ScriptDirectory.from_config(cfg) + script.generate_revision(a, "revision a", refresh=True, head="base") + write_script( + script, + a, + """\ +"Rev A" +revision = '%s' +down_revision = None + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 1") + + +def downgrade(): + op.execute("DROP STEP 1") + +""" + % a, + ) + + script.generate_revision(b, "revision b", refresh=True, head=a) + write_script( + script, + b, + f"""# coding: utf-8 +"Rev B, méil, %3" +revision = '{b}' +down_revision = '{a}' + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 2") + + +def downgrade(): + op.execute("DROP STEP 2") + +""", + encoding="utf-8", + ) + + script.generate_revision(c, "revision c", refresh=True, head=b) + write_script( + script, + c, + """\ +"Rev C" +revision = '%s' +down_revision = '%s' + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 3") + + +def downgrade(): + op.execute("DROP STEP 3") + +""" + % (c, b), + ) + return a, b, c + + +def multi_heads_fixture(cfg, a, b, c): + """Create a multiple head fixture from the three-revs fixture""" + + # a->b->c + # -> d -> e + # -> f + d = util.rev_id() + e = util.rev_id() + f = util.rev_id() + + script = ScriptDirectory.from_config(cfg) + script.generate_revision( + d, "revision d from b", head=b, splice=True, refresh=True + ) + write_script( + script, + d, + """\ +"Rev D" +revision = '%s' +down_revision = '%s' + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 4") + + +def downgrade(): + op.execute("DROP STEP 4") + +""" + % (d, b), + ) + + script.generate_revision( + e, "revision e from d", head=d, splice=True, refresh=True + ) + write_script( + script, + e, + """\ +"Rev E" +revision = '%s' +down_revision = '%s' + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 5") + + +def downgrade(): + op.execute("DROP STEP 5") + +""" + % (e, d), + ) + + script.generate_revision( + f, "revision f from b", head=b, splice=True, refresh=True + ) + write_script( + script, + f, + """\ +"Rev F" +revision = '%s' +down_revision = '%s' + +from alembic import op + + +def upgrade(): + op.execute("CREATE STEP 6") + + +def downgrade(): + op.execute("DROP STEP 6") + +""" + % (f, b), + ) + + return d, e, f + + +def _multidb_testing_config(engines): + """alembic.ini fixture to work exactly with the 'multidb' template""" + + dir_ = os.path.join(_get_staging_directory(), "scripts") + + sqlalchemy_future = "future" in config.db.__class__.__module__ + + databases = ", ".join(engines.keys()) + engines = "\n\n".join( + "[%s]\n" "sqlalchemy.url = %s" % (key, value.url) + for key, value in engines.items() + ) + + return _write_config_file( + """ +[alembic] +script_location = %s +sourceless = false +sqlalchemy.future = %s +databases = %s + +%s +[loggers] +keys = root + +[handlers] +keys = console + +[logger_root] +level = WARN +handlers = console +qualname = + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatters] +keys = generic + +[formatter_generic] +format = %%(levelname)-5.5s [%%(name)s] %%(message)s +datefmt = %%H:%%M:%%S + """ + % (dir_, "true" if sqlalchemy_future else "false", databases, engines) + ) diff --git a/venv/Lib/site-packages/alembic/testing/fixtures.py b/venv/Lib/site-packages/alembic/testing/fixtures.py new file mode 100644 index 0000000..4b83a74 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/fixtures.py @@ -0,0 +1,306 @@ +from __future__ import annotations + +import configparser +from contextlib import contextmanager +import io +import re +from typing import Any +from typing import Dict + +from sqlalchemy import Column +from sqlalchemy import inspect +from sqlalchemy import MetaData +from sqlalchemy import String +from sqlalchemy import Table +from sqlalchemy import testing +from sqlalchemy import text +from sqlalchemy.testing import config +from sqlalchemy.testing import mock +from sqlalchemy.testing.assertions import eq_ +from sqlalchemy.testing.fixtures import TablesTest as SQLAlchemyTablesTest +from sqlalchemy.testing.fixtures import TestBase as SQLAlchemyTestBase + +import alembic +from .assertions import _get_dialect +from ..environment import EnvironmentContext +from ..migration import MigrationContext +from ..operations import Operations +from ..util import sqla_compat +from ..util.sqla_compat import create_mock_engine +from ..util.sqla_compat import sqla_14 +from ..util.sqla_compat import sqla_2 + + +testing_config = configparser.ConfigParser() +testing_config.read(["test.cfg"]) + + +class TestBase(SQLAlchemyTestBase): + is_sqlalchemy_future = sqla_2 + + @testing.fixture() + def ops_context(self, migration_context): + with migration_context.begin_transaction(_per_migration=True): + yield Operations(migration_context) + + @testing.fixture + def migration_context(self, connection): + return MigrationContext.configure( + connection, opts=dict(transaction_per_migration=True) + ) + + @testing.fixture + def connection(self): + with config.db.connect() as conn: + yield conn + + +class TablesTest(TestBase, SQLAlchemyTablesTest): + pass + + +if sqla_14: + from sqlalchemy.testing.fixtures import FutureEngineMixin +else: + + class FutureEngineMixin: # type:ignore[no-redef] + __requires__ = ("sqlalchemy_14",) + + +FutureEngineMixin.is_sqlalchemy_future = True + + +def capture_db(dialect="postgresql://"): + buf = [] + + def dump(sql, *multiparams, **params): + buf.append(str(sql.compile(dialect=engine.dialect))) + + engine = create_mock_engine(dialect, dump) + return engine, buf + + +_engs: Dict[Any, Any] = {} + + +@contextmanager +def capture_context_buffer(**kw): + if kw.pop("bytes_io", False): + buf = io.BytesIO() + else: + buf = io.StringIO() + + kw.update({"dialect_name": "sqlite", "output_buffer": buf}) + conf = EnvironmentContext.configure + + def configure(*arg, **opt): + opt.update(**kw) + return conf(*arg, **opt) + + with mock.patch.object(EnvironmentContext, "configure", configure): + yield buf + + +@contextmanager +def capture_engine_context_buffer(**kw): + from .env import _sqlite_file_db + from sqlalchemy import event + + buf = io.StringIO() + + eng = _sqlite_file_db() + + conn = eng.connect() + + @event.listens_for(conn, "before_cursor_execute") + def bce(conn, cursor, statement, parameters, context, executemany): + buf.write(statement + "\n") + + kw.update({"connection": conn}) + conf = EnvironmentContext.configure + + def configure(*arg, **opt): + opt.update(**kw) + return conf(*arg, **opt) + + with mock.patch.object(EnvironmentContext, "configure", configure): + yield buf + + +def op_fixture( + dialect="default", + as_sql=False, + naming_convention=None, + literal_binds=False, + native_boolean=None, +): + opts = {} + if naming_convention: + opts["target_metadata"] = MetaData(naming_convention=naming_convention) + + class buffer_: + def __init__(self): + self.lines = [] + + def write(self, msg): + msg = msg.strip() + msg = re.sub(r"[\n\t]", "", msg) + if as_sql: + # the impl produces soft tabs, + # so search for blocks of 4 spaces + msg = re.sub(r" ", "", msg) + msg = re.sub(r"\;\n*$", "", msg) + + self.lines.append(msg) + + def flush(self): + pass + + buf = buffer_() + + class ctx(MigrationContext): + def get_buf(self): + return buf + + def clear_assertions(self): + buf.lines[:] = [] + + def assert_(self, *sql): + # TODO: make this more flexible about + # whitespace and such + eq_(buf.lines, [re.sub(r"[\n\t]", "", s) for s in sql]) + + def assert_contains(self, sql): + for stmt in buf.lines: + if re.sub(r"[\n\t]", "", sql) in stmt: + return + else: + assert False, "Could not locate fragment %r in %r" % ( + sql, + buf.lines, + ) + + if as_sql: + opts["as_sql"] = as_sql + if literal_binds: + opts["literal_binds"] = literal_binds + if not sqla_14 and dialect == "mariadb": + ctx_dialect = _get_dialect("mysql") + ctx_dialect.server_version_info = (10, 4, 0, "MariaDB") + + else: + ctx_dialect = _get_dialect(dialect) + if native_boolean is not None: + ctx_dialect.supports_native_boolean = native_boolean + # this is new as of SQLAlchemy 1.2.7 and is used by SQL Server, + # which breaks assumptions in the alembic test suite + ctx_dialect.non_native_boolean_check_constraint = True + if not as_sql: + + def execute(stmt, *multiparam, **param): + if isinstance(stmt, str): + stmt = text(stmt) + assert stmt.supports_execution + sql = str(stmt.compile(dialect=ctx_dialect)) + + buf.write(sql) + + connection = mock.Mock(dialect=ctx_dialect, execute=execute) + else: + opts["output_buffer"] = buf + connection = None + context = ctx(ctx_dialect, connection, opts) + + alembic.op._proxy = Operations(context) + return context + + +class AlterColRoundTripFixture: + # since these tests are about syntax, use more recent SQLAlchemy as some of + # the type / server default compare logic might not work on older + # SQLAlchemy versions as seems to be the case for SQLAlchemy 1.1 on Oracle + + __requires__ = ("alter_column",) + + def setUp(self): + self.conn = config.db.connect() + self.ctx = MigrationContext.configure(self.conn) + self.op = Operations(self.ctx) + self.metadata = MetaData() + + def _compare_type(self, t1, t2): + c1 = Column("q", t1) + c2 = Column("q", t2) + assert not self.ctx.impl.compare_type( + c1, c2 + ), "Type objects %r and %r didn't compare as equivalent" % (t1, t2) + + def _compare_server_default(self, t1, s1, t2, s2): + c1 = Column("q", t1, server_default=s1) + c2 = Column("q", t2, server_default=s2) + assert not self.ctx.impl.compare_server_default( + c1, c2, s2, s1 + ), "server defaults %r and %r didn't compare as equivalent" % (s1, s2) + + def tearDown(self): + sqla_compat._safe_rollback_connection_transaction(self.conn) + with self.conn.begin(): + self.metadata.drop_all(self.conn) + self.conn.close() + + def _run_alter_col(self, from_, to_, compare=None): + column = Column( + from_.get("name", "colname"), + from_.get("type", String(10)), + nullable=from_.get("nullable", True), + server_default=from_.get("server_default", None), + # comment=from_.get("comment", None) + ) + t = Table("x", self.metadata, column) + + with sqla_compat._ensure_scope_for_ddl(self.conn): + t.create(self.conn) + insp = inspect(self.conn) + old_col = insp.get_columns("x")[0] + + # TODO: conditional comment support + self.op.alter_column( + "x", + column.name, + existing_type=column.type, + existing_server_default=column.server_default + if column.server_default is not None + else False, + existing_nullable=True if column.nullable else False, + # existing_comment=column.comment, + nullable=to_.get("nullable", None), + # modify_comment=False, + server_default=to_.get("server_default", False), + new_column_name=to_.get("name", None), + type_=to_.get("type", None), + ) + + insp = inspect(self.conn) + new_col = insp.get_columns("x")[0] + + if compare is None: + compare = to_ + + eq_( + new_col["name"], + compare["name"] if "name" in compare else column.name, + ) + self._compare_type( + new_col["type"], compare.get("type", old_col["type"]) + ) + eq_(new_col["nullable"], compare.get("nullable", column.nullable)) + self._compare_server_default( + new_col["type"], + new_col.get("default", None), + compare.get("type", old_col["type"]), + compare["server_default"].text + if "server_default" in compare + else column.server_default.arg.text + if column.server_default is not None + else None, + ) diff --git a/venv/Lib/site-packages/alembic/testing/plugin/__init__.py b/venv/Lib/site-packages/alembic/testing/plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/alembic/testing/plugin/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/plugin/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f5f3d3459b51b1f8ee528a58f0b9af81e22fb33 GIT binary patch literal 185 zcmZ?b<>g`k0y~!E3=sVoM8E(ekl_Ht#VkM~g&~+hlhJP_LlHgNi5EeDND^Oi}A@!iYd-4N!2Y#OwI-> zD2_?YNzF~lOx7<+EiTE-OV=;RDNWDJ(~pnO%*!l^kJl@xyv1RYo1apelWGUDyBLTW E0Iyjwy#N3J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/plugin/__pycache__/bootstrap.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/plugin/__pycache__/bootstrap.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a2a6d06d442bb5add84d2c3e79d8958a9628820 GIT binary patch literal 241 zcmXv}!D_=W40TGOCD4EHwUjj@u*(=_^gMdmZ3u#6E18KC8Our8{%F6{>;7V=IvsuR zo+J?ONyp757YT=@{w!1dorgQJ)VwD0I*Ab)ITr6)5wJS^uo62%qvgGT-U literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/plugin/bootstrap.py b/venv/Lib/site-packages/alembic/testing/plugin/bootstrap.py new file mode 100644 index 0000000..d4a2c55 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/plugin/bootstrap.py @@ -0,0 +1,4 @@ +""" +Bootstrapper for test framework plugins. + +""" diff --git a/venv/Lib/site-packages/alembic/testing/requirements.py b/venv/Lib/site-packages/alembic/testing/requirements.py new file mode 100644 index 0000000..2107da4 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/requirements.py @@ -0,0 +1,198 @@ +from sqlalchemy.testing.requirements import Requirements + +from alembic import util +from alembic.util import sqla_compat +from ..testing import exclusions + + +class SuiteRequirements(Requirements): + @property + def schemas(self): + """Target database must support external schemas, and have one + named 'test_schema'.""" + + return exclusions.open() + + @property + def autocommit_isolation(self): + """target database should support 'AUTOCOMMIT' isolation level""" + + return exclusions.closed() + + @property + def materialized_views(self): + """needed for sqlalchemy compat""" + return exclusions.closed() + + @property + def unique_constraint_reflection(self): + def doesnt_have_check_uq_constraints(config): + from sqlalchemy import inspect + + insp = inspect(config.db) + try: + insp.get_unique_constraints("x") + except NotImplementedError: + return True + except TypeError: + return True + except Exception: + pass + return False + + return exclusions.skip_if(doesnt_have_check_uq_constraints) + + @property + def sequences(self): + """Target database must support SEQUENCEs.""" + + return exclusions.only_if( + [lambda config: config.db.dialect.supports_sequences], + "no sequence support", + ) + + @property + def foreign_key_match(self): + return exclusions.open() + + @property + def foreign_key_constraint_reflection(self): + return exclusions.open() + + @property + def check_constraints_w_enforcement(self): + """Target database must support check constraints + and also enforce them.""" + + return exclusions.open() + + @property + def reflects_pk_names(self): + return exclusions.closed() + + @property + def reflects_fk_options(self): + return exclusions.closed() + + @property + def sqlalchemy_14(self): + return exclusions.skip_if( + lambda config: not util.sqla_14, + "SQLAlchemy 1.4 or greater required", + ) + + @property + def sqlalchemy_1x(self): + return exclusions.skip_if( + lambda config: util.sqla_2, + "SQLAlchemy 1.x test", + ) + + @property + def sqlalchemy_2(self): + return exclusions.skip_if( + lambda config: not util.sqla_2, + "SQLAlchemy 2.x test", + ) + + @property + def comments(self): + return exclusions.only_if( + lambda config: config.db.dialect.supports_comments + ) + + @property + def alter_column(self): + return exclusions.open() + + @property + def computed_columns(self): + return exclusions.closed() + + @property + def computed_columns_api(self): + return exclusions.only_if( + exclusions.BooleanPredicate(sqla_compat.has_computed) + ) + + @property + def computed_reflects_normally(self): + return exclusions.only_if( + exclusions.BooleanPredicate(sqla_compat.has_computed_reflection) + ) + + @property + def computed_reflects_as_server_default(self): + return exclusions.closed() + + @property + def computed_doesnt_reflect_as_server_default(self): + return exclusions.closed() + + @property + def autoincrement_on_composite_pk(self): + return exclusions.closed() + + @property + def fk_ondelete_is_reflected(self): + return exclusions.closed() + + @property + def fk_onupdate_is_reflected(self): + return exclusions.closed() + + @property + def fk_onupdate(self): + return exclusions.open() + + @property + def fk_ondelete_restrict(self): + return exclusions.open() + + @property + def fk_onupdate_restrict(self): + return exclusions.open() + + @property + def fk_ondelete_noaction(self): + return exclusions.open() + + @property + def fk_initially(self): + return exclusions.closed() + + @property + def fk_deferrable(self): + return exclusions.closed() + + @property + def fk_deferrable_is_reflected(self): + return exclusions.closed() + + @property + def fk_names(self): + return exclusions.open() + + @property + def integer_subtype_comparisons(self): + return exclusions.open() + + @property + def no_name_normalize(self): + return exclusions.skip_if( + lambda config: config.db.dialect.requires_name_normalize + ) + + @property + def identity_columns(self): + return exclusions.closed() + + @property + def identity_columns_alter(self): + return exclusions.closed() + + @property + def identity_columns_api(self): + return exclusions.only_if( + exclusions.BooleanPredicate(sqla_compat.has_identity) + ) diff --git a/venv/Lib/site-packages/alembic/testing/schemacompare.py b/venv/Lib/site-packages/alembic/testing/schemacompare.py new file mode 100644 index 0000000..c063499 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/schemacompare.py @@ -0,0 +1,160 @@ +from itertools import zip_longest + +from sqlalchemy import schema + + +class CompareTable: + def __init__(self, table): + self.table = table + + def __eq__(self, other): + if self.table.name != other.name or self.table.schema != other.schema: + return False + + for c1, c2 in zip_longest(self.table.c, other.c): + if (c1 is None and c2 is not None) or ( + c2 is None and c1 is not None + ): + return False + if CompareColumn(c1) != c2: + return False + + return True + + # TODO: compare constraints, indexes + + def __ne__(self, other): + return not self.__eq__(other) + + +class CompareColumn: + def __init__(self, column): + self.column = column + + def __eq__(self, other): + return ( + self.column.name == other.name + and self.column.nullable == other.nullable + ) + # TODO: datatypes etc + + def __ne__(self, other): + return not self.__eq__(other) + + +class CompareIndex: + def __init__(self, index, name_only=False): + self.index = index + self.name_only = name_only + + def __eq__(self, other): + if self.name_only: + return self.index.name == other.name + else: + return ( + str(schema.CreateIndex(self.index)) + == str(schema.CreateIndex(other)) + and self.index.dialect_kwargs == other.dialect_kwargs + ) + + def __ne__(self, other): + return not self.__eq__(other) + + +class CompareCheckConstraint: + def __init__(self, constraint): + self.constraint = constraint + + def __eq__(self, other): + return ( + isinstance(other, schema.CheckConstraint) + and self.constraint.name == other.name + and (str(self.constraint.sqltext) == str(other.sqltext)) + and (other.table.name == self.constraint.table.name) + and other.table.schema == self.constraint.table.schema + ) + + def __ne__(self, other): + return not self.__eq__(other) + + +class CompareForeignKey: + def __init__(self, constraint): + self.constraint = constraint + + def __eq__(self, other): + r1 = ( + isinstance(other, schema.ForeignKeyConstraint) + and self.constraint.name == other.name + and (other.table.name == self.constraint.table.name) + and other.table.schema == self.constraint.table.schema + ) + if not r1: + return False + for c1, c2 in zip_longest(self.constraint.columns, other.columns): + if (c1 is None and c2 is not None) or ( + c2 is None and c1 is not None + ): + return False + if CompareColumn(c1) != c2: + return False + return True + + def __ne__(self, other): + return not self.__eq__(other) + + +class ComparePrimaryKey: + def __init__(self, constraint): + self.constraint = constraint + + def __eq__(self, other): + r1 = ( + isinstance(other, schema.PrimaryKeyConstraint) + and self.constraint.name == other.name + and (other.table.name == self.constraint.table.name) + and other.table.schema == self.constraint.table.schema + ) + if not r1: + return False + + for c1, c2 in zip_longest(self.constraint.columns, other.columns): + if (c1 is None and c2 is not None) or ( + c2 is None and c1 is not None + ): + return False + if CompareColumn(c1) != c2: + return False + + return True + + def __ne__(self, other): + return not self.__eq__(other) + + +class CompareUniqueConstraint: + def __init__(self, constraint): + self.constraint = constraint + + def __eq__(self, other): + r1 = ( + isinstance(other, schema.UniqueConstraint) + and self.constraint.name == other.name + and (other.table.name == self.constraint.table.name) + and other.table.schema == self.constraint.table.schema + ) + if not r1: + return False + + for c1, c2 in zip_longest(self.constraint.columns, other.columns): + if (c1 is None and c2 is not None) or ( + c2 is None and c1 is not None + ): + return False + if CompareColumn(c1) != c2: + return False + + return True + + def __ne__(self, other): + return not self.__eq__(other) diff --git a/venv/Lib/site-packages/alembic/testing/suite/__init__.py b/venv/Lib/site-packages/alembic/testing/suite/__init__.py new file mode 100644 index 0000000..3da498d --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/__init__.py @@ -0,0 +1,7 @@ +from .test_autogen_comments import * # noqa +from .test_autogen_computed import * # noqa +from .test_autogen_diffs import * # noqa +from .test_autogen_fks import * # noqa +from .test_autogen_identity import * # noqa +from .test_environment import * # noqa +from .test_op import * # noqa diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fb7226f821a733c2724c56a50531658a8c5a2bc GIT binary patch literal 393 zcmZXQ!Ait15QdX>br*3#1n+yTpp^wLvMl0Ryy&R}LbjRK&^9TZw6KrlEA7>jui(k) z8j;lr`M+c`^C#qCK0jd;>q-8);EcVGo1chiaZeLhB${bnvzKr3z$h>doCF>P9uuQy zmc$?A%@V%jmruzwyYPTss@}U2tjt~0fc5x4-S!@Ic79N;O;KQWc91Kozs*LIqw(8N z2zD@?v*R_{bl>XQH`c}UsJ(ou{7&=;9f}&P8=TO9m3OT`uS!@fZBs1;UXATRM~ zHUf=@t5)R|6`)WxG#itrqq(tViai~tQW|T#l-KQcH(NDM_cg4?ufS818UGz$2RU>b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/_autogen_fixtures.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/_autogen_fixtures.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e57b0381bbf7199d6da95d37619e9cf38deb7e8 GIT binary patch literal 7903 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 AzyJUM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_comments.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_comments.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30d10b4cee5942b819c7d4861f0c823ea248756d GIT binary patch literal 4438 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_identity.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_autogen_identity.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..883402a33ee402e3f02f7aff119474421eb17fc7 GIT binary patch literal 5330 zcmbtY&2QVt73T~|iJ~Z3_Ikbc=3}#MuwAu{vq`_OMUZZHgR~3m`mzSLC0r1+hH@xV zR6HCxu_2$Ft8?w4MUnJSpgs1~V^2Nw&_j>B7AWd}p{M@dkfLS9&bBB8KE8P~B!}<) z-j_aZwOj+oeXIBA&nt%U4;oAl8_Y*Iv)_UUL$Ji~8Lm7rhTP|jWF~miH#Kj8w|q$s}d_%a2J8b$*%{Pteu^R0}>BIP`8p~)i%G9Y@Ow|x)siLghFHe<%@Ygq zV$`9Lo?Q`diB++7Vq$Iuvu_jM=PzrKH)svo;)=NX%s6Jp%wG`K#C7bdBi<1=a9tEl z=>Oe(wbWcBLlu20qEyA|fOOGiekU%+&^8$-+w76P=^&sraejg``zwetj*TOxDOXIe z2~%8fWe%)kehjc_89$SOGnI|`ny^TLC!ExGVjTmF6XQjF!Y2GBKQfgwF-2ny;KS)2 z1HzT02?;wV@z#t%LzpBh?;?qNWT~d|CKkO7yJ7kn)}SS@w~}uQn|NVBDXop%8fTHr z?U8zf3y;MqeeY=51-ryK&= zpxYOuMLa!Ek~HU8m|L6CQzZ$oxihsv?gae;&C;U@D-DNH?o3T037WYZXK{+{q`gSK z34ugFFuHbbWl_@4`S1?TySXjmem~1u{Ch*bhXwymdq3QwFU+=*C>`yOwnUWes?p;u zJZdMparc9}-`naZVYa)qAEoroIE zo)}Cwy8ieeU!`>c>0>G_6|;=pWbcC*tj215nR7-zS5wYB=2{+KVoPk9wRs2Q!#kJZ zb^Wq;oWm@IPL0_=g1HQ{${N_@+`><3+8)XB|j$fJ8bQ8c$P+ImKtW z!df$c#QMYCvw&&2NF(==qQUCobB&mK}K*aY+qQupk#NK7nb)JUEA#NyRWzW#V@IhU&DJGoZ9$5 z12b#$?hU)MTLM?vpVnC?XLF7`RT zHEV+uYHq`cR-xL%AG}_jmp<>DMhSdcqkjT3t5MRSybdiwkH1D3PhHKM#6zbR(gWNJ z37|HpYZqgMZfV?yGl^QvCgv~s^TGz!gcs|lHh}(}(gkhR7`TI`XzX(N2j!{O#6D(a zs%TGaL1|)odSs>4RglkEthKS(<$il4!(I{vqcljzN#c9cu@opqxL+?PkQPWX=Z8~s zlg<5FajT?+Q6z)*aD*Uy5QwNBjuSOa1B6QdO63@j!YmLmf@@C&yH7&7lbt1s3tg2` zaL&c{nY-pDLb`V0S5ai?Cw`kYMgBSuq{3OxzrO@k_H(Sy2)PA{YH&)IUqx76=5SEB z=PLgy2fg^g=beS}L3bvYJw#@$g~^lfAUjj$si0Msb}!!<#_4{TjFB3L;nRY%dj~M& zDaCpn9^(ZBqpo=tzvTBZ7261JJrf)qq)9TDMzev~Ibm{183Wb__nh@vikNU@PPlx( zlmeTj)KVP9kF9A9=;jj}XhnI`=M(cc{JEjyhoOrPls9@sty*Edxh1oDcB@+~X0Z-x zj}?A+@AbiQF7mG5OGdpg$?mV~2X@_=3`;thcj_x7tD?W8#Mo`>6p+`pqy9)nxgGXZ zBz+ei926qILA(~v=V5b{h}=x0C-O)1WXiDx(K&fp=Zm>553we@3u1Iu@WE7!6{)z* z+U6NYshGT-ehzcEov=`n?d(k@AUd*Hp?Na1J@xKs>rlF6*)4Zcms?|OwKLq!>N>0ORuAC!G%{Yp# zOz16Ld#=%UZ!uK10%a>YgO!V6a#2v$ zSRt5bz;wN@sQNF6KWA9E1R?dJ-hKrmH!iIB`*Jiaf$|q@EBhwMEKmp@MU)}P%md}{ z!`DZc`O<&pZQUjG(E+v2L6EyafHG{18ZXGbAlMs+NjZa&jP}N{jIto`n?bORPB%&g z#MGTi+ONDt#Qg4&MLP{pG(%PkT2l+^W@S3ZjV8p!;Ws=6!xL?VkVY-Dlgnse3hoMj7P*hBfX#M`W6dN`N9<=oJBbQgV> z{vu0|e1-=_>e2r{P^oi<1m7#0`1P@h6IsKgzgTte e`i&QDK6maFy1q|+XtoOC=si3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_environment.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_environment.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c4b77302eacf1a784f7745c9dc0179241974fab GIT binary patch literal 8852 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 BJ?H=c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_op.cpython-37.pyc b/venv/Lib/site-packages/alembic/testing/suite/__pycache__/test_op.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..359e3b7f1566cffe609376880c2dc2591f06536b GIT binary patch literal 2268 zcma)8&u`l{6ecCvR&2*ff2_;ewe^OffCtnW0_3s{U6%qG1`Ix|J`n~uTBKt&vgDFf z+628h=lumcB**-Pv`p8>~Tz@-LdIDjS!cY|71ZGNWws7b077>zv3fRacE!z*=(qHR;?rd)`;Z zw#AW%Q>g7&wTF3}NTp3XPF*{jcE4>;GMOi;dj%9ohZfaWS&~muuqx_Ar523Zuc=i> zN@MS9tK;+td;4OTC@=!6-rFm`^xpY7u}Z@fzh`+W`#PQ;#_w&eabSpe4unzco*2O> zJ{1}k;KEuFjUx{Mz=Jgg_7%M52^1g58wlpHryqVG7u0&vv;NGxq!1bcMExFnY=;Sd z7uzuxxy`tkPE{(EG7-h(Ii|ah)0_A|QMxhv$j9f&^;tqHe zcQGa$bO2uSoO}-74H6~vtg{+l_qNv(;wm^V=;s3PS~?>!g&OoTqf6L9!lzSpwFgce zUn5DU2#vfuRDXsaPzVdKcN_rNI`Qa~qc@L1$;Rr3Fzy=s?mF-*d{6z85vF;P;AwLRDM7`p&CGn^Yab40T$-iN5c_m)Hk|+f literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/testing/suite/_autogen_fixtures.py b/venv/Lib/site-packages/alembic/testing/suite/_autogen_fixtures.py new file mode 100644 index 0000000..d838ebe --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/_autogen_fixtures.py @@ -0,0 +1,335 @@ +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import Set + +from sqlalchemy import CHAR +from sqlalchemy import CheckConstraint +from sqlalchemy import Column +from sqlalchemy import event +from sqlalchemy import ForeignKey +from sqlalchemy import Index +from sqlalchemy import inspect +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import Numeric +from sqlalchemy import String +from sqlalchemy import Table +from sqlalchemy import Text +from sqlalchemy import text +from sqlalchemy import UniqueConstraint + +from ... import autogenerate +from ... import util +from ...autogenerate import api +from ...ddl.base import _fk_spec +from ...migration import MigrationContext +from ...operations import ops +from ...testing import config +from ...testing import eq_ +from ...testing.env import clear_staging_env +from ...testing.env import staging_env + +names_in_this_test: Set[Any] = set() + + +@event.listens_for(Table, "after_parent_attach") +def new_table(table, parent): + names_in_this_test.add(table.name) + + +def _default_include_object(obj, name, type_, reflected, compare_to): + if type_ == "table": + return name in names_in_this_test + else: + return True + + +_default_object_filters: Any = _default_include_object + +_default_name_filters: Any = None + + +class ModelOne: + __requires__ = ("unique_constraint_reflection",) + + schema: Any = None + + @classmethod + def _get_db_schema(cls): + schema = cls.schema + + m = MetaData(schema=schema) + + Table( + "user", + m, + Column("id", Integer, primary_key=True), + Column("name", String(50)), + Column("a1", Text), + Column("pw", String(50)), + Index("pw_idx", "pw"), + ) + + Table( + "address", + m, + Column("id", Integer, primary_key=True), + Column("email_address", String(100), nullable=False), + ) + + Table( + "order", + m, + Column("order_id", Integer, primary_key=True), + Column( + "amount", + Numeric(8, 2), + nullable=False, + server_default=text("0"), + ), + CheckConstraint("amount >= 0", name="ck_order_amount"), + ) + + Table( + "extra", + m, + Column("x", CHAR), + Column("uid", Integer, ForeignKey("user.id")), + ) + + return m + + @classmethod + def _get_model_schema(cls): + schema = cls.schema + + m = MetaData(schema=schema) + + Table( + "user", + m, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", Text, server_default="x"), + ) + + Table( + "address", + m, + Column("id", Integer, primary_key=True), + Column("email_address", String(100), nullable=False), + Column("street", String(50)), + UniqueConstraint("email_address", name="uq_email"), + ) + + Table( + "order", + m, + Column("order_id", Integer, primary_key=True), + Column( + "amount", + Numeric(10, 2), + nullable=True, + server_default=text("0"), + ), + Column("user_id", Integer, ForeignKey("user.id")), + CheckConstraint("amount > -1", name="ck_order_amount"), + ) + + Table( + "item", + m, + Column("id", Integer, primary_key=True), + Column("description", String(100)), + Column("order_id", Integer, ForeignKey("order.order_id")), + CheckConstraint("len(description) > 5"), + ) + return m + + +class _ComparesFKs: + def _assert_fk_diff( + self, + diff, + type_, + source_table, + source_columns, + target_table, + target_columns, + name=None, + conditional_name=None, + source_schema=None, + onupdate=None, + ondelete=None, + initially=None, + deferrable=None, + ): + # the public API for ForeignKeyConstraint was not very rich + # in 0.7, 0.8, so here we use the well-known but slightly + # private API to get at its elements + ( + fk_source_schema, + fk_source_table, + fk_source_columns, + fk_target_schema, + fk_target_table, + fk_target_columns, + fk_onupdate, + fk_ondelete, + fk_deferrable, + fk_initially, + ) = _fk_spec(diff[1]) + + eq_(diff[0], type_) + eq_(fk_source_table, source_table) + eq_(fk_source_columns, source_columns) + eq_(fk_target_table, target_table) + eq_(fk_source_schema, source_schema) + eq_(fk_onupdate, onupdate) + eq_(fk_ondelete, ondelete) + eq_(fk_initially, initially) + eq_(fk_deferrable, deferrable) + + eq_([elem.column.name for elem in diff[1].elements], target_columns) + if conditional_name is not None: + if conditional_name == "servergenerated": + fks = inspect(self.bind).get_foreign_keys(source_table) + server_fk_name = fks[0]["name"] + eq_(diff[1].name, server_fk_name) + else: + eq_(diff[1].name, conditional_name) + else: + eq_(diff[1].name, name) + + +class AutogenTest(_ComparesFKs): + def _flatten_diffs(self, diffs): + for d in diffs: + if isinstance(d, list): + yield from self._flatten_diffs(d) + else: + yield d + + @classmethod + def _get_bind(cls): + return config.db + + configure_opts: Dict[Any, Any] = {} + + @classmethod + def setup_class(cls): + staging_env() + cls.bind = cls._get_bind() + cls.m1 = cls._get_db_schema() + cls.m1.create_all(cls.bind) + cls.m2 = cls._get_model_schema() + + @classmethod + def teardown_class(cls): + cls.m1.drop_all(cls.bind) + clear_staging_env() + + def setUp(self): + self.conn = conn = self.bind.connect() + ctx_opts = { + "compare_type": True, + "compare_server_default": True, + "target_metadata": self.m2, + "upgrade_token": "upgrades", + "downgrade_token": "downgrades", + "alembic_module_prefix": "op.", + "sqlalchemy_module_prefix": "sa.", + "include_object": _default_object_filters, + "include_name": _default_name_filters, + } + if self.configure_opts: + ctx_opts.update(self.configure_opts) + self.context = context = MigrationContext.configure( + connection=conn, opts=ctx_opts + ) + + self.autogen_context = api.AutogenContext(context, self.m2) + + def tearDown(self): + self.conn.close() + + def _update_context( + self, object_filters=None, name_filters=None, include_schemas=None + ): + if include_schemas is not None: + self.autogen_context.opts["include_schemas"] = include_schemas + if object_filters is not None: + self.autogen_context._object_filters = [object_filters] + if name_filters is not None: + self.autogen_context._name_filters = [name_filters] + return self.autogen_context + + +class AutogenFixtureTest(_ComparesFKs): + def _fixture( + self, + m1, + m2, + include_schemas=False, + opts=None, + object_filters=_default_object_filters, + name_filters=_default_name_filters, + return_ops=False, + max_identifier_length=None, + ): + if max_identifier_length: + dialect = self.bind.dialect + existing_length = dialect.max_identifier_length + dialect.max_identifier_length = ( + dialect._user_defined_max_identifier_length + ) = max_identifier_length + try: + self._alembic_metadata, model_metadata = m1, m2 + for m in util.to_list(self._alembic_metadata): + m.create_all(self.bind) + + with self.bind.connect() as conn: + ctx_opts = { + "compare_type": True, + "compare_server_default": True, + "target_metadata": model_metadata, + "upgrade_token": "upgrades", + "downgrade_token": "downgrades", + "alembic_module_prefix": "op.", + "sqlalchemy_module_prefix": "sa.", + "include_object": object_filters, + "include_name": name_filters, + "include_schemas": include_schemas, + } + if opts: + ctx_opts.update(opts) + self.context = context = MigrationContext.configure( + connection=conn, opts=ctx_opts + ) + + autogen_context = api.AutogenContext(context, model_metadata) + uo = ops.UpgradeOps(ops=[]) + autogenerate._produce_net_changes(autogen_context, uo) + + if return_ops: + return uo + else: + return uo.as_diffs() + finally: + if max_identifier_length: + dialect = self.bind.dialect + dialect.max_identifier_length = ( + dialect._user_defined_max_identifier_length + ) = existing_length + + def setUp(self): + staging_env() + self.bind = config.db + + def tearDown(self): + if hasattr(self, "_alembic_metadata"): + for m in util.to_list(self._alembic_metadata): + m.drop_all(self.bind) + clear_staging_env() diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_autogen_comments.py b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_comments.py new file mode 100644 index 0000000..7ef074f --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_comments.py @@ -0,0 +1,242 @@ +from sqlalchemy import Column +from sqlalchemy import Float +from sqlalchemy import MetaData +from sqlalchemy import String +from sqlalchemy import Table + +from ._autogen_fixtures import AutogenFixtureTest +from ...testing import eq_ +from ...testing import mock +from ...testing import TestBase + + +class AutogenerateCommentsTest(AutogenFixtureTest, TestBase): + __backend__ = True + + __requires__ = ("comments",) + + def test_existing_table_comment_no_change(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + comment="this is some table", + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + comment="this is some table", + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + def test_add_table_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table("some_table", m1, Column("test", String(10), primary_key=True)) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + comment="this is some table", + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "add_table_comment") + eq_(diffs[0][1].comment, "this is some table") + eq_(diffs[0][2], None) + + def test_remove_table_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + comment="this is some table", + ) + + Table("some_table", m2, Column("test", String(10), primary_key=True)) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "remove_table_comment") + eq_(diffs[0][1].comment, None) + + def test_alter_table_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + comment="this is some table", + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + comment="this is also some table", + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "add_table_comment") + eq_(diffs[0][1].comment, "this is also some table") + eq_(diffs[0][2], "this is some table") + + def test_existing_column_comment_no_change(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the amount"), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the amount"), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + def test_add_column_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + Column("amount", Float), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the amount"), + ) + + diffs = self._fixture(m1, m2) + eq_( + diffs, + [ + [ + ( + "modify_comment", + None, + "some_table", + "amount", + { + "existing_nullable": True, + "existing_type": mock.ANY, + "existing_server_default": False, + }, + None, + "the amount", + ) + ] + ], + ) + + def test_remove_column_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the amount"), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + Column("amount", Float), + ) + + diffs = self._fixture(m1, m2) + eq_( + diffs, + [ + [ + ( + "modify_comment", + None, + "some_table", + "amount", + { + "existing_nullable": True, + "existing_type": mock.ANY, + "existing_server_default": False, + }, + "the amount", + None, + ) + ] + ], + ) + + def test_alter_column_comment(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the amount"), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + Column("amount", Float, comment="the adjusted amount"), + ) + + diffs = self._fixture(m1, m2) + + eq_( + diffs, + [ + [ + ( + "modify_comment", + None, + "some_table", + "amount", + { + "existing_nullable": True, + "existing_type": mock.ANY, + "existing_server_default": False, + }, + "the amount", + "the adjusted amount", + ) + ] + ], + ) diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_autogen_computed.py b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_computed.py new file mode 100644 index 0000000..01a89a1 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_computed.py @@ -0,0 +1,203 @@ +import sqlalchemy as sa +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import Table + +from ._autogen_fixtures import AutogenFixtureTest +from ... import testing +from ...testing import config +from ...testing import eq_ +from ...testing import exclusions +from ...testing import is_ +from ...testing import is_true +from ...testing import mock +from ...testing import TestBase + + +class AutogenerateComputedTest(AutogenFixtureTest, TestBase): + __requires__ = ("computed_columns",) + __backend__ = True + + def test_add_computed_column(self): + m1 = MetaData() + m2 = MetaData() + + Table("user", m1, Column("id", Integer, primary_key=True)) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("foo", Integer, sa.Computed("5")), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "add_column") + eq_(diffs[0][2], "user") + eq_(diffs[0][3].name, "foo") + c = diffs[0][3].computed + + is_true(isinstance(c, sa.Computed)) + is_(c.persisted, None) + eq_(str(c.sqltext), "5") + + def test_remove_computed_column(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("foo", Integer, sa.Computed("5")), + ) + + Table("user", m2, Column("id", Integer, primary_key=True)) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "remove_column") + eq_(diffs[0][2], "user") + c = diffs[0][3] + eq_(c.name, "foo") + + if config.requirements.computed_reflects_normally.enabled: + is_true(isinstance(c.computed, sa.Computed)) + else: + is_(c.computed, None) + + if config.requirements.computed_reflects_as_server_default.enabled: + is_true(isinstance(c.server_default, sa.DefaultClause)) + eq_(str(c.server_default.arg.text), "5") + elif config.requirements.computed_reflects_normally.enabled: + is_true(isinstance(c.computed, sa.Computed)) + else: + is_(c.computed, None) + + @testing.combinations( + lambda: (None, sa.Computed("bar*5")), + (lambda: (sa.Computed("bar*5"), None)), + lambda: ( + sa.Computed("bar*5"), + sa.Computed("bar * 42", persisted=True), + ), + lambda: (sa.Computed("bar*5"), sa.Computed("bar * 42")), + ) + @config.requirements.computed_reflects_normally + def test_cant_change_computed_warning(self, test_case): + arg_before, arg_after = testing.resolve_lambda(test_case, **locals()) + m1 = MetaData() + m2 = MetaData() + + arg_before = [] if arg_before is None else [arg_before] + arg_after = [] if arg_after is None else [arg_after] + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer, *arg_before), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer, *arg_after), + ) + + with mock.patch("alembic.util.warn") as mock_warn: + diffs = self._fixture(m1, m2) + + eq_( + mock_warn.mock_calls, + [mock.call("Computed default on user.foo cannot be modified")], + ) + + eq_(list(diffs), []) + + @testing.combinations( + lambda: (None, None), + lambda: (sa.Computed("5"), sa.Computed("5")), + lambda: (sa.Computed("bar*5"), sa.Computed("bar*5")), + ( + lambda: (sa.Computed("bar*5"), None), + config.requirements.computed_doesnt_reflect_as_server_default, + ), + ) + def test_computed_unchanged(self, test_case): + arg_before, arg_after = testing.resolve_lambda(test_case, **locals()) + m1 = MetaData() + m2 = MetaData() + + arg_before = [] if arg_before is None else [arg_before] + arg_after = [] if arg_after is None else [arg_after] + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer, *arg_before), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer, *arg_after), + ) + + with mock.patch("alembic.util.warn") as mock_warn: + diffs = self._fixture(m1, m2) + eq_(mock_warn.mock_calls, []) + + eq_(list(diffs), []) + + @config.requirements.computed_reflects_as_server_default + def test_remove_computed_default_on_computed(self): + """Asserts the current behavior which is that on PG and Oracle, + the GENERATED ALWAYS AS is reflected as a server default which we can't + tell is actually "computed", so these come out as a modification to + the server default. + + """ + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer, sa.Computed("bar + 42")), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("bar", Integer), + Column("foo", Integer), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0][0], "modify_default") + eq_(diffs[0][0][2], "user") + eq_(diffs[0][0][3], "foo") + old = diffs[0][0][-2] + new = diffs[0][0][-1] + + is_(new, None) + is_true(isinstance(old, sa.DefaultClause)) + + if exclusions.against(config, "postgresql"): + eq_(str(old.arg.text), "(bar + 42)") + elif exclusions.against(config, "oracle"): + eq_(str(old.arg.text), '"BAR"+42') diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_autogen_diffs.py b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_diffs.py new file mode 100644 index 0000000..75bcd37 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_diffs.py @@ -0,0 +1,273 @@ +from sqlalchemy import BigInteger +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import Table +from sqlalchemy.testing import in_ + +from ._autogen_fixtures import AutogenFixtureTest +from ... import testing +from ...testing import config +from ...testing import eq_ +from ...testing import is_ +from ...testing import TestBase + + +class AlterColumnTest(AutogenFixtureTest, TestBase): + __backend__ = True + + @testing.combinations((True,), (False,)) + @config.requirements.comments + def test_all_existings_filled(self, pk): + m1 = MetaData() + m2 = MetaData() + + Table("a", m1, Column("x", Integer, primary_key=pk)) + Table("a", m2, Column("x", Integer, comment="x", primary_key=pk)) + + alter_col = self._assert_alter_col(m1, m2, pk) + eq_(alter_col.modify_comment, "x") + + @testing.combinations((True,), (False,)) + @config.requirements.comments + def test_all_existings_filled_in_notnull(self, pk): + m1 = MetaData() + m2 = MetaData() + + Table("a", m1, Column("x", Integer, nullable=False, primary_key=pk)) + Table( + "a", + m2, + Column("x", Integer, nullable=False, comment="x", primary_key=pk), + ) + + self._assert_alter_col(m1, m2, pk, nullable=False) + + @testing.combinations((True,), (False,)) + @config.requirements.comments + def test_all_existings_filled_in_comment(self, pk): + m1 = MetaData() + m2 = MetaData() + + Table("a", m1, Column("x", Integer, comment="old", primary_key=pk)) + Table("a", m2, Column("x", Integer, comment="new", primary_key=pk)) + + alter_col = self._assert_alter_col(m1, m2, pk) + eq_(alter_col.existing_comment, "old") + + @testing.combinations((True,), (False,)) + @config.requirements.comments + def test_all_existings_filled_in_server_default(self, pk): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", m1, Column("x", Integer, server_default="5", primary_key=pk) + ) + Table( + "a", + m2, + Column( + "x", Integer, server_default="5", comment="new", primary_key=pk + ), + ) + + alter_col = self._assert_alter_col(m1, m2, pk) + in_("5", alter_col.existing_server_default.arg.text) + + def _assert_alter_col(self, m1, m2, pk, nullable=None): + ops = self._fixture(m1, m2, return_ops=True) + modify_table = ops.ops[-1] + alter_col = modify_table.ops[0] + + if nullable is None: + eq_(alter_col.existing_nullable, not pk) + else: + eq_(alter_col.existing_nullable, nullable) + assert alter_col.existing_type._compare_type_affinity(Integer()) + return alter_col + + +class AutoincrementTest(AutogenFixtureTest, TestBase): + __backend__ = True + __requires__ = ("integer_subtype_comparisons",) + + def test_alter_column_autoincrement_none(self): + m1 = MetaData() + m2 = MetaData() + + Table("a", m1, Column("x", Integer, nullable=False)) + Table("a", m2, Column("x", Integer, nullable=True)) + + ops = self._fixture(m1, m2, return_ops=True) + assert "autoincrement" not in ops.ops[0].ops[0].kw + + def test_alter_column_autoincrement_pk_false(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("x", Integer, primary_key=True, autoincrement=False), + ) + Table( + "a", + m2, + Column("x", BigInteger, primary_key=True, autoincrement=False), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], False) + + def test_alter_column_autoincrement_pk_implicit_true(self): + m1 = MetaData() + m2 = MetaData() + + Table("a", m1, Column("x", Integer, primary_key=True)) + Table("a", m2, Column("x", BigInteger, primary_key=True)) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], True) + + def test_alter_column_autoincrement_pk_explicit_true(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", m1, Column("x", Integer, primary_key=True, autoincrement=True) + ) + Table( + "a", + m2, + Column("x", BigInteger, primary_key=True, autoincrement=True), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], True) + + def test_alter_column_autoincrement_nonpk_false(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True), + Column("x", Integer, autoincrement=False), + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True), + Column("x", BigInteger, autoincrement=False), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], False) + + def test_alter_column_autoincrement_nonpk_implicit_false(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True), + Column("x", Integer), + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True), + Column("x", BigInteger), + ) + + ops = self._fixture(m1, m2, return_ops=True) + assert "autoincrement" not in ops.ops[0].ops[0].kw + + def test_alter_column_autoincrement_nonpk_explicit_true(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True, autoincrement=False), + Column("x", Integer, autoincrement=True), + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True, autoincrement=False), + Column("x", BigInteger, autoincrement=True), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], True) + + def test_alter_column_autoincrement_compositepk_false(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True), + Column("x", Integer, primary_key=True, autoincrement=False), + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True), + Column("x", BigInteger, primary_key=True, autoincrement=False), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], False) + + def test_alter_column_autoincrement_compositepk_implicit_false(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True), + Column("x", Integer, primary_key=True), + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True), + Column("x", BigInteger, primary_key=True), + ) + + ops = self._fixture(m1, m2, return_ops=True) + assert "autoincrement" not in ops.ops[0].ops[0].kw + + @config.requirements.autoincrement_on_composite_pk + def test_alter_column_autoincrement_compositepk_explicit_true(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "a", + m1, + Column("id", Integer, primary_key=True, autoincrement=False), + Column("x", Integer, primary_key=True, autoincrement=True), + # on SQLA 1.0 and earlier, this being present + # trips the "add KEY for the primary key" so that the + # AUTO_INCREMENT keyword is accepted by MySQL. SQLA 1.1 and + # greater the columns are just reorganized. + mysql_engine="InnoDB", + ) + Table( + "a", + m2, + Column("id", Integer, primary_key=True, autoincrement=False), + Column("x", BigInteger, primary_key=True, autoincrement=True), + ) + + ops = self._fixture(m1, m2, return_ops=True) + is_(ops.ops[0].ops[0].kw["autoincrement"], True) diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_autogen_fks.py b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_fks.py new file mode 100644 index 0000000..0240b98 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_fks.py @@ -0,0 +1,1190 @@ +from sqlalchemy import Column +from sqlalchemy import ForeignKeyConstraint +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import String +from sqlalchemy import Table + +from ._autogen_fixtures import AutogenFixtureTest +from ...testing import combinations +from ...testing import config +from ...testing import eq_ +from ...testing import mock +from ...testing import TestBase + + +class AutogenerateForeignKeysTest(AutogenFixtureTest, TestBase): + __backend__ = True + __requires__ = ("foreign_key_constraint_reflection",) + + def test_remove_fk(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ForeignKeyConstraint(["test2"], ["some_table.test"]), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ) + + diffs = self._fixture(m1, m2) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["test2"], + "some_table", + ["test"], + conditional_name="servergenerated", + ) + + def test_add_fk(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ) + + Table( + "some_table", + m2, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ForeignKeyConstraint(["test2"], ["some_table.test"]), + ) + + diffs = self._fixture(m1, m2) + + self._assert_fk_diff( + diffs[0], "add_fk", "user", ["test2"], "some_table", ["test"] + ) + + def test_no_change(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", Integer), + ForeignKeyConstraint(["test2"], ["some_table.id"]), + ) + + Table( + "some_table", + m2, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", Integer), + ForeignKeyConstraint(["test2"], ["some_table.id"]), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + def test_no_change_composite_fk(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ForeignKeyConstraint( + ["other_id_1", "other_id_2"], + ["some_table.id_1", "some_table.id_2"], + ), + ) + + Table( + "some_table", + m2, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ForeignKeyConstraint( + ["other_id_1", "other_id_2"], + ["some_table.id_1", "some_table.id_2"], + ), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + def test_casing_convention_changed_so_put_drops_first(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("test", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ForeignKeyConstraint(["test2"], ["some_table.test"], name="MyFK"), + ) + + Table( + "some_table", + m2, + Column("test", String(10), primary_key=True), + ) + + # foreign key autogen currently does not take "name" into account, + # so change the def just for the purposes of testing the + # add/drop order for now. + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("test2", String(10)), + ForeignKeyConstraint(["a1"], ["some_table.test"], name="myfk"), + ) + + diffs = self._fixture(m1, m2) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["test2"], + "some_table", + ["test"], + name="MyFK" if config.requirements.fk_names.enabled else None, + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["a1"], + "some_table", + ["test"], + name="myfk", + ) + + def test_add_composite_fk_with_name(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ) + + Table( + "some_table", + m2, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ForeignKeyConstraint( + ["other_id_1", "other_id_2"], + ["some_table.id_1", "some_table.id_2"], + name="fk_test_name", + ), + ) + + diffs = self._fixture(m1, m2) + self._assert_fk_diff( + diffs[0], + "add_fk", + "user", + ["other_id_1", "other_id_2"], + "some_table", + ["id_1", "id_2"], + name="fk_test_name", + ) + + @config.requirements.no_name_normalize + def test_remove_composite_fk(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ForeignKeyConstraint( + ["other_id_1", "other_id_2"], + ["some_table.id_1", "some_table.id_2"], + name="fk_test_name", + ), + ) + + Table( + "some_table", + m2, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("a1", String(10), server_default="x"), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ) + + diffs = self._fixture(m1, m2) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["other_id_1", "other_id_2"], + "some_table", + ["id_1", "id_2"], + conditional_name="fk_test_name", + ) + + def test_add_fk_colkeys(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ) + + Table( + "some_table", + m2, + Column("id_1", String(10), key="tid1", primary_key=True), + Column("id_2", String(10), key="tid2", primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("other_id_1", String(10), key="oid1"), + Column("other_id_2", String(10), key="oid2"), + ForeignKeyConstraint( + ["oid1", "oid2"], + ["some_table.tid1", "some_table.tid2"], + name="fk_test_name", + ), + ) + + diffs = self._fixture(m1, m2) + + self._assert_fk_diff( + diffs[0], + "add_fk", + "user", + ["other_id_1", "other_id_2"], + "some_table", + ["id_1", "id_2"], + name="fk_test_name", + ) + + def test_no_change_colkeys(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id_1", String(10), primary_key=True), + Column("id_2", String(10), primary_key=True), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("other_id_1", String(10)), + Column("other_id_2", String(10)), + ForeignKeyConstraint( + ["other_id_1", "other_id_2"], + ["some_table.id_1", "some_table.id_2"], + ), + ) + + Table( + "some_table", + m2, + Column("id_1", String(10), key="tid1", primary_key=True), + Column("id_2", String(10), key="tid2", primary_key=True), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("other_id_1", String(10), key="oid1"), + Column("other_id_2", String(10), key="oid2"), + ForeignKeyConstraint( + ["oid1", "oid2"], ["some_table.tid1", "some_table.tid2"] + ), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + +class IncludeHooksTest(AutogenFixtureTest, TestBase): + __backend__ = True + __requires__ = ("fk_names",) + + @combinations(("object",), ("name",)) + @config.requirements.no_name_normalize + def test_remove_connection_fk(self, hook_type): + m1 = MetaData() + m2 = MetaData() + + ref = Table( + "ref", + m1, + Column("id", Integer, primary_key=True), + ) + t1 = Table( + "t", + m1, + Column("x", Integer), + Column("y", Integer), + ) + t1.append_constraint( + ForeignKeyConstraint([t1.c.x], [ref.c.id], name="fk1") + ) + t1.append_constraint( + ForeignKeyConstraint([t1.c.y], [ref.c.id], name="fk2") + ) + + ref = Table( + "ref", + m2, + Column("id", Integer, primary_key=True), + ) + Table( + "t", + m2, + Column("x", Integer), + Column("y", Integer), + ) + + if hook_type == "object": + + def include_object(object_, name, type_, reflected, compare_to): + return not ( + isinstance(object_, ForeignKeyConstraint) + and type_ == "foreign_key_constraint" + and reflected + and name == "fk1" + ) + + diffs = self._fixture(m1, m2, object_filters=include_object) + elif hook_type == "name": + + def include_name(name, type_, parent_names): + if name == "fk1": + if type_ == "index": # MariaDB thing + return True + eq_(type_, "foreign_key_constraint") + eq_( + parent_names, + { + "schema_name": None, + "table_name": "t", + "schema_qualified_table_name": "t", + }, + ) + return False + else: + return True + + diffs = self._fixture(m1, m2, name_filters=include_name) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "t", + ["y"], + "ref", + ["id"], + conditional_name="fk2", + ) + eq_(len(diffs), 1) + + def test_add_metadata_fk(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "ref", + m1, + Column("id", Integer, primary_key=True), + ) + Table( + "t", + m1, + Column("x", Integer), + Column("y", Integer), + ) + + ref = Table( + "ref", + m2, + Column("id", Integer, primary_key=True), + ) + t2 = Table( + "t", + m2, + Column("x", Integer), + Column("y", Integer), + ) + t2.append_constraint( + ForeignKeyConstraint([t2.c.x], [ref.c.id], name="fk1") + ) + t2.append_constraint( + ForeignKeyConstraint([t2.c.y], [ref.c.id], name="fk2") + ) + + def include_object(object_, name, type_, reflected, compare_to): + return not ( + isinstance(object_, ForeignKeyConstraint) + and type_ == "foreign_key_constraint" + and not reflected + and name == "fk1" + ) + + diffs = self._fixture(m1, m2, object_filters=include_object) + + self._assert_fk_diff( + diffs[0], "add_fk", "t", ["y"], "ref", ["id"], name="fk2" + ) + eq_(len(diffs), 1) + + @combinations(("object",), ("name",)) + @config.requirements.no_name_normalize + def test_change_fk(self, hook_type): + m1 = MetaData() + m2 = MetaData() + + r1a = Table( + "ref_a", + m1, + Column("a", Integer, primary_key=True), + ) + Table( + "ref_b", + m1, + Column("a", Integer, primary_key=True), + Column("b", Integer, primary_key=True), + ) + t1 = Table( + "t", + m1, + Column("x", Integer), + Column("y", Integer), + Column("z", Integer), + ) + t1.append_constraint( + ForeignKeyConstraint([t1.c.x], [r1a.c.a], name="fk1") + ) + t1.append_constraint( + ForeignKeyConstraint([t1.c.y], [r1a.c.a], name="fk2") + ) + + Table( + "ref_a", + m2, + Column("a", Integer, primary_key=True), + ) + r2b = Table( + "ref_b", + m2, + Column("a", Integer, primary_key=True), + Column("b", Integer, primary_key=True), + ) + t2 = Table( + "t", + m2, + Column("x", Integer), + Column("y", Integer), + Column("z", Integer), + ) + t2.append_constraint( + ForeignKeyConstraint( + [t2.c.x, t2.c.z], [r2b.c.a, r2b.c.b], name="fk1" + ) + ) + t2.append_constraint( + ForeignKeyConstraint( + [t2.c.y, t2.c.z], [r2b.c.a, r2b.c.b], name="fk2" + ) + ) + + if hook_type == "object": + + def include_object(object_, name, type_, reflected, compare_to): + return not ( + isinstance(object_, ForeignKeyConstraint) + and type_ == "foreign_key_constraint" + and name == "fk1" + ) + + diffs = self._fixture(m1, m2, object_filters=include_object) + elif hook_type == "name": + + def include_name(name, type_, parent_names): + if type_ == "index": + return True # MariaDB thing + + if name == "fk1": + eq_(type_, "foreign_key_constraint") + eq_( + parent_names, + { + "schema_name": None, + "table_name": "t", + "schema_qualified_table_name": "t", + }, + ) + return False + else: + return True + + diffs = self._fixture(m1, m2, name_filters=include_name) + + if hook_type == "object": + self._assert_fk_diff( + diffs[0], "remove_fk", "t", ["y"], "ref_a", ["a"], name="fk2" + ) + self._assert_fk_diff( + diffs[1], + "add_fk", + "t", + ["y", "z"], + "ref_b", + ["a", "b"], + name="fk2", + ) + eq_(len(diffs), 2) + elif hook_type == "name": + eq_( + {(d[0], d[1].name) for d in diffs}, + {("add_fk", "fk2"), ("add_fk", "fk1"), ("remove_fk", "fk2")}, + ) + + +class AutogenerateFKOptionsTest(AutogenFixtureTest, TestBase): + __backend__ = True + + def _fk_opts_fixture(self, old_opts, new_opts): + m1 = MetaData() + m2 = MetaData() + + Table( + "some_table", + m1, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m1, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("tid", Integer), + ForeignKeyConstraint(["tid"], ["some_table.id"], **old_opts), + ) + + Table( + "some_table", + m2, + Column("id", Integer, primary_key=True), + Column("test", String(10)), + ) + + Table( + "user", + m2, + Column("id", Integer, primary_key=True), + Column("name", String(50), nullable=False), + Column("tid", Integer), + ForeignKeyConstraint(["tid"], ["some_table.id"], **new_opts), + ) + + return self._fixture(m1, m2) + + @config.requirements.fk_ondelete_is_reflected + def test_add_ondelete(self): + diffs = self._fk_opts_fixture({}, {"ondelete": "cascade"}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + ondelete=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + ondelete="cascade", + ) + + @config.requirements.fk_ondelete_is_reflected + def test_remove_ondelete(self): + diffs = self._fk_opts_fixture({"ondelete": "CASCADE"}, {}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + ondelete="CASCADE", + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + ondelete=None, + ) + + def test_nochange_ondelete(self): + """test case sensitivity""" + diffs = self._fk_opts_fixture( + {"ondelete": "caSCAde"}, {"ondelete": "CasCade"} + ) + eq_(diffs, []) + + @config.requirements.fk_onupdate_is_reflected + def test_add_onupdate(self): + diffs = self._fk_opts_fixture({}, {"onupdate": "cascade"}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate="cascade", + ) + + @config.requirements.fk_onupdate_is_reflected + def test_remove_onupdate(self): + diffs = self._fk_opts_fixture({"onupdate": "CASCADE"}, {}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate="CASCADE", + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate=None, + ) + + @config.requirements.fk_onupdate + def test_nochange_onupdate(self): + """test case sensitivity""" + diffs = self._fk_opts_fixture( + {"onupdate": "caSCAde"}, {"onupdate": "CasCade"} + ) + eq_(diffs, []) + + @config.requirements.fk_ondelete_restrict + def test_nochange_ondelete_restrict(self): + """test the RESTRICT option which MySQL doesn't report on""" + + diffs = self._fk_opts_fixture( + {"ondelete": "restrict"}, {"ondelete": "restrict"} + ) + eq_(diffs, []) + + @config.requirements.fk_onupdate_restrict + def test_nochange_onupdate_restrict(self): + """test the RESTRICT option which MySQL doesn't report on""" + + diffs = self._fk_opts_fixture( + {"onupdate": "restrict"}, {"onupdate": "restrict"} + ) + eq_(diffs, []) + + @config.requirements.fk_ondelete_noaction + def test_nochange_ondelete_noaction(self): + """test the NO ACTION option which generally comes back as None""" + + diffs = self._fk_opts_fixture( + {"ondelete": "no action"}, {"ondelete": "no action"} + ) + eq_(diffs, []) + + @config.requirements.fk_onupdate + def test_nochange_onupdate_noaction(self): + """test the NO ACTION option which generally comes back as None""" + + diffs = self._fk_opts_fixture( + {"onupdate": "no action"}, {"onupdate": "no action"} + ) + eq_(diffs, []) + + @config.requirements.fk_ondelete_restrict + def test_change_ondelete_from_restrict(self): + """test the RESTRICT option which MySQL doesn't report on""" + + # note that this is impossible to detect if we change + # from RESTRICT to NO ACTION on MySQL. + diffs = self._fk_opts_fixture( + {"ondelete": "restrict"}, {"ondelete": "cascade"} + ) + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate=None, + ondelete=mock.ANY, # MySQL reports None, PG reports RESTRICT + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate=None, + ondelete="cascade", + ) + + @config.requirements.fk_ondelete_restrict + def test_change_onupdate_from_restrict(self): + """test the RESTRICT option which MySQL doesn't report on""" + + # note that this is impossible to detect if we change + # from RESTRICT to NO ACTION on MySQL. + diffs = self._fk_opts_fixture( + {"onupdate": "restrict"}, {"onupdate": "cascade"} + ) + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate=mock.ANY, # MySQL reports None, PG reports RESTRICT + ondelete=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate="cascade", + ondelete=None, + ) + + @config.requirements.fk_ondelete_is_reflected + @config.requirements.fk_onupdate_is_reflected + def test_ondelete_onupdate_combo(self): + diffs = self._fk_opts_fixture( + {"onupdate": "CASCADE", "ondelete": "SET NULL"}, + {"onupdate": "RESTRICT", "ondelete": "RESTRICT"}, + ) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate="CASCADE", + ondelete="SET NULL", + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + onupdate="RESTRICT", + ondelete="RESTRICT", + ) + + @config.requirements.fk_initially + def test_add_initially_deferred(self): + diffs = self._fk_opts_fixture({}, {"initially": "deferred"}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially="deferred", + ) + + @config.requirements.fk_initially + def test_remove_initially_deferred(self): + diffs = self._fk_opts_fixture({"initially": "deferred"}, {}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially="DEFERRED", + deferrable=True, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially=None, + ) + + @config.requirements.fk_deferrable + @config.requirements.fk_initially + def test_add_initially_immediate_plus_deferrable(self): + diffs = self._fk_opts_fixture( + {}, {"initially": "immediate", "deferrable": True} + ) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially="immediate", + deferrable=True, + ) + + @config.requirements.fk_deferrable + @config.requirements.fk_initially + def test_remove_initially_immediate_plus_deferrable(self): + diffs = self._fk_opts_fixture( + {"initially": "immediate", "deferrable": True}, {} + ) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially=None, # immediate is the default + deferrable=True, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + initially=None, + deferrable=None, + ) + + @config.requirements.fk_initially + @config.requirements.fk_deferrable + def test_add_initially_deferrable_nochange_one(self): + diffs = self._fk_opts_fixture( + {"deferrable": True, "initially": "immediate"}, + {"deferrable": True, "initially": "immediate"}, + ) + + eq_(diffs, []) + + @config.requirements.fk_initially + @config.requirements.fk_deferrable + def test_add_initially_deferrable_nochange_two(self): + diffs = self._fk_opts_fixture( + {"deferrable": True, "initially": "deferred"}, + {"deferrable": True, "initially": "deferred"}, + ) + + eq_(diffs, []) + + @config.requirements.fk_initially + @config.requirements.fk_deferrable + def test_add_initially_deferrable_nochange_three(self): + diffs = self._fk_opts_fixture( + {"deferrable": None, "initially": "deferred"}, + {"deferrable": None, "initially": "deferred"}, + ) + + eq_(diffs, []) + + @config.requirements.fk_deferrable + def test_add_deferrable(self): + diffs = self._fk_opts_fixture({}, {"deferrable": True}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + deferrable=None, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + deferrable=True, + ) + + @config.requirements.fk_deferrable_is_reflected + def test_remove_deferrable(self): + diffs = self._fk_opts_fixture({"deferrable": True}, {}) + + self._assert_fk_diff( + diffs[0], + "remove_fk", + "user", + ["tid"], + "some_table", + ["id"], + deferrable=True, + conditional_name="servergenerated", + ) + + self._assert_fk_diff( + diffs[1], + "add_fk", + "user", + ["tid"], + "some_table", + ["id"], + deferrable=None, + ) diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_autogen_identity.py b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_identity.py new file mode 100644 index 0000000..3dee9fc --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_autogen_identity.py @@ -0,0 +1,226 @@ +import sqlalchemy as sa +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import Table + +from alembic.util import sqla_compat +from ._autogen_fixtures import AutogenFixtureTest +from ... import testing +from ...testing import config +from ...testing import eq_ +from ...testing import is_true +from ...testing import TestBase + + +class AutogenerateIdentityTest(AutogenFixtureTest, TestBase): + __requires__ = ("identity_columns",) + __backend__ = True + + def test_add_identity_column(self): + m1 = MetaData() + m2 = MetaData() + + Table("user", m1, Column("other", sa.Text)) + + Table( + "user", + m2, + Column("other", sa.Text), + Column( + "id", + Integer, + sa.Identity(start=5, increment=7), + primary_key=True, + ), + ) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "add_column") + eq_(diffs[0][2], "user") + eq_(diffs[0][3].name, "id") + i = diffs[0][3].identity + + is_true(isinstance(i, sa.Identity)) + eq_(i.start, 5) + eq_(i.increment, 7) + + def test_remove_identity_column(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column( + "id", + Integer, + sa.Identity(start=2, increment=3), + primary_key=True, + ), + ) + + Table("user", m2) + + diffs = self._fixture(m1, m2) + + eq_(diffs[0][0], "remove_column") + eq_(diffs[0][2], "user") + c = diffs[0][3] + eq_(c.name, "id") + + is_true(isinstance(c.identity, sa.Identity)) + eq_(c.identity.start, 2) + eq_(c.identity.increment, 3) + + def test_no_change_identity_column(self): + m1 = MetaData() + m2 = MetaData() + + for m in (m1, m2): + id_ = sa.Identity(start=2) + Table("user", m, Column("id", Integer, id_)) + + diffs = self._fixture(m1, m2) + + eq_(diffs, []) + + def test_dialect_kwargs_changes(self): + m1 = MetaData() + m2 = MetaData() + + if sqla_compat.identity_has_dialect_kwargs: + args = {"oracle_on_null": True, "oracle_order": True} + else: + args = {"on_null": True, "order": True} + + Table("user", m1, Column("id", Integer, sa.Identity(start=2))) + id_ = sa.Identity(start=2, **args) + Table("user", m2, Column("id", Integer, id_)) + + diffs = self._fixture(m1, m2) + if config.db.name == "oracle": + is_true(len(diffs), 1) + eq_(diffs[0][0][0], "modify_default") + else: + eq_(diffs, []) + + @testing.combinations( + (None, dict(start=2)), + (dict(start=2), None), + (dict(start=2), dict(start=2, increment=7)), + (dict(always=False), dict(always=True)), + ( + dict(start=1, minvalue=0, maxvalue=100, cycle=True), + dict(start=1, minvalue=0, maxvalue=100, cycle=False), + ), + ( + dict(start=10, increment=3, maxvalue=9999), + dict(start=10, increment=1, maxvalue=3333), + ), + ) + @config.requirements.identity_columns_alter + def test_change_identity(self, before, after): + arg_before = (sa.Identity(**before),) if before else () + arg_after = (sa.Identity(**after),) if after else () + + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column("id", Integer, *arg_before), + Column("other", sa.Text), + ) + + Table( + "user", + m2, + Column("id", Integer, *arg_after), + Column("other", sa.Text), + ) + + diffs = self._fixture(m1, m2) + + eq_(len(diffs[0]), 1) + diffs = diffs[0][0] + eq_(diffs[0], "modify_default") + eq_(diffs[2], "user") + eq_(diffs[3], "id") + old = diffs[5] + new = diffs[6] + + def check(kw, idt): + if kw: + is_true(isinstance(idt, sa.Identity)) + for k, v in kw.items(): + eq_(getattr(idt, k), v) + else: + is_true(idt in (None, False)) + + check(before, old) + check(after, new) + + def test_add_identity_to_column(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column("id", Integer), + Column("other", sa.Text), + ) + + Table( + "user", + m2, + Column("id", Integer, sa.Identity(start=2, maxvalue=1000)), + Column("other", sa.Text), + ) + + diffs = self._fixture(m1, m2) + + eq_(len(diffs[0]), 1) + diffs = diffs[0][0] + eq_(diffs[0], "modify_default") + eq_(diffs[2], "user") + eq_(diffs[3], "id") + eq_(diffs[5], None) + added = diffs[6] + + is_true(isinstance(added, sa.Identity)) + eq_(added.start, 2) + eq_(added.maxvalue, 1000) + + def test_remove_identity_from_column(self): + m1 = MetaData() + m2 = MetaData() + + Table( + "user", + m1, + Column("id", Integer, sa.Identity(start=2, maxvalue=1000)), + Column("other", sa.Text), + ) + + Table( + "user", + m2, + Column("id", Integer), + Column("other", sa.Text), + ) + + diffs = self._fixture(m1, m2) + + eq_(len(diffs[0]), 1) + diffs = diffs[0][0] + eq_(diffs[0], "modify_default") + eq_(diffs[2], "user") + eq_(diffs[3], "id") + eq_(diffs[6], None) + removed = diffs[5] + + is_true(isinstance(removed, sa.Identity)) diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_environment.py b/venv/Lib/site-packages/alembic/testing/suite/test_environment.py new file mode 100644 index 0000000..8c86859 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_environment.py @@ -0,0 +1,364 @@ +import io + +from ...migration import MigrationContext +from ...testing import assert_raises +from ...testing import config +from ...testing import eq_ +from ...testing import is_ +from ...testing import is_false +from ...testing import is_not_ +from ...testing import is_true +from ...testing import ne_ +from ...testing.fixtures import TestBase + + +class MigrationTransactionTest(TestBase): + __backend__ = True + + conn = None + + def _fixture(self, opts): + self.conn = conn = config.db.connect() + + if opts.get("as_sql", False): + self.context = MigrationContext.configure( + dialect=conn.dialect, opts=opts + ) + self.context.output_buffer = ( + self.context.impl.output_buffer + ) = io.StringIO() + else: + self.context = MigrationContext.configure( + connection=conn, opts=opts + ) + return self.context + + def teardown_method(self): + if self.conn: + self.conn.close() + + def test_proxy_transaction_rollback(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + + is_false(self.conn.in_transaction()) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + proxy.rollback() + is_false(self.conn.in_transaction()) + + def test_proxy_transaction_commit(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + proxy.commit() + is_false(self.conn.in_transaction()) + + def test_proxy_transaction_contextmanager_commit(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + with proxy: + pass + is_false(self.conn.in_transaction()) + + def test_proxy_transaction_contextmanager_rollback(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + + def go(): + with proxy: + raise Exception("hi") + + assert_raises(Exception, go) + is_false(self.conn.in_transaction()) + + def test_proxy_transaction_contextmanager_explicit_rollback(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + + with proxy: + is_true(self.conn.in_transaction()) + proxy.rollback() + is_false(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + + def test_proxy_transaction_contextmanager_explicit_commit(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + proxy = context.begin_transaction(_per_migration=True) + is_true(self.conn.in_transaction()) + + with proxy: + is_true(self.conn.in_transaction()) + proxy.commit() + is_false(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + + def test_transaction_per_migration_transactional_ddl(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": True} + ) + + is_false(self.conn.in_transaction()) + + with context.begin_transaction(): + is_false(self.conn.in_transaction()) + with context.begin_transaction(_per_migration=True): + is_true(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + is_false(self.conn.in_transaction()) + + def test_transaction_per_migration_non_transactional_ddl(self): + context = self._fixture( + {"transaction_per_migration": True, "transactional_ddl": False} + ) + + is_false(self.conn.in_transaction()) + + with context.begin_transaction(): + is_false(self.conn.in_transaction()) + with context.begin_transaction(_per_migration=True): + is_true(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + is_false(self.conn.in_transaction()) + + def test_transaction_per_all_transactional_ddl(self): + context = self._fixture({"transactional_ddl": True}) + + is_false(self.conn.in_transaction()) + + with context.begin_transaction(): + is_true(self.conn.in_transaction()) + with context.begin_transaction(_per_migration=True): + is_true(self.conn.in_transaction()) + + is_true(self.conn.in_transaction()) + is_false(self.conn.in_transaction()) + + def test_transaction_per_all_non_transactional_ddl(self): + context = self._fixture({"transactional_ddl": False}) + + is_false(self.conn.in_transaction()) + + with context.begin_transaction(): + is_false(self.conn.in_transaction()) + with context.begin_transaction(_per_migration=True): + is_true(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + is_false(self.conn.in_transaction()) + + def test_transaction_per_all_sqlmode(self): + context = self._fixture({"as_sql": True}) + + context.execute("step 1") + with context.begin_transaction(): + context.execute("step 2") + with context.begin_transaction(_per_migration=True): + context.execute("step 3") + + context.execute("step 4") + context.execute("step 5") + + if context.impl.transactional_ddl: + self._assert_impl_steps( + "step 1", + "BEGIN", + "step 2", + "step 3", + "step 4", + "COMMIT", + "step 5", + ) + else: + self._assert_impl_steps( + "step 1", "step 2", "step 3", "step 4", "step 5" + ) + + def test_transaction_per_migration_sqlmode(self): + context = self._fixture( + {"as_sql": True, "transaction_per_migration": True} + ) + + context.execute("step 1") + with context.begin_transaction(): + context.execute("step 2") + with context.begin_transaction(_per_migration=True): + context.execute("step 3") + + context.execute("step 4") + context.execute("step 5") + + if context.impl.transactional_ddl: + self._assert_impl_steps( + "step 1", + "step 2", + "BEGIN", + "step 3", + "COMMIT", + "step 4", + "step 5", + ) + else: + self._assert_impl_steps( + "step 1", "step 2", "step 3", "step 4", "step 5" + ) + + @config.requirements.autocommit_isolation + def test_autocommit_block(self): + context = self._fixture({"transaction_per_migration": True}) + + is_false(self.conn.in_transaction()) + + with context.begin_transaction(): + is_false(self.conn.in_transaction()) + with context.begin_transaction(_per_migration=True): + is_true(self.conn.in_transaction()) + + with context.autocommit_block(): + # in 1.x, self.conn is separate due to the + # execution_options call. however for future they are the + # same connection and there is a "transaction" block + # despite autocommit + if self.is_sqlalchemy_future: + is_(context.connection, self.conn) + else: + is_not_(context.connection, self.conn) + is_false(self.conn.in_transaction()) + + eq_( + context.connection._execution_options[ + "isolation_level" + ], + "AUTOCOMMIT", + ) + + ne_( + context.connection._execution_options.get( + "isolation_level", None + ), + "AUTOCOMMIT", + ) + is_true(self.conn.in_transaction()) + + is_false(self.conn.in_transaction()) + is_false(self.conn.in_transaction()) + + @config.requirements.autocommit_isolation + def test_autocommit_block_no_transaction(self): + context = self._fixture({"transaction_per_migration": True}) + + is_false(self.conn.in_transaction()) + + with context.autocommit_block(): + is_true(context.connection.in_transaction()) + + # in 1.x, self.conn is separate due to the execution_options + # call. however for future they are the same connection and there + # is a "transaction" block despite autocommit + if self.is_sqlalchemy_future: + is_(context.connection, self.conn) + else: + is_not_(context.connection, self.conn) + is_false(self.conn.in_transaction()) + + eq_( + context.connection._execution_options["isolation_level"], + "AUTOCOMMIT", + ) + + ne_( + context.connection._execution_options.get("isolation_level", None), + "AUTOCOMMIT", + ) + + is_false(self.conn.in_transaction()) + + def test_autocommit_block_transactional_ddl_sqlmode(self): + context = self._fixture( + { + "transaction_per_migration": True, + "transactional_ddl": True, + "as_sql": True, + } + ) + + with context.begin_transaction(): + context.execute("step 1") + with context.begin_transaction(_per_migration=True): + context.execute("step 2") + + with context.autocommit_block(): + context.execute("step 3") + + context.execute("step 4") + + context.execute("step 5") + + self._assert_impl_steps( + "step 1", + "BEGIN", + "step 2", + "COMMIT", + "step 3", + "BEGIN", + "step 4", + "COMMIT", + "step 5", + ) + + def test_autocommit_block_nontransactional_ddl_sqlmode(self): + context = self._fixture( + { + "transaction_per_migration": True, + "transactional_ddl": False, + "as_sql": True, + } + ) + + with context.begin_transaction(): + context.execute("step 1") + with context.begin_transaction(_per_migration=True): + context.execute("step 2") + + with context.autocommit_block(): + context.execute("step 3") + + context.execute("step 4") + + context.execute("step 5") + + self._assert_impl_steps( + "step 1", "step 2", "step 3", "step 4", "step 5" + ) + + def _assert_impl_steps(self, *steps): + to_check = self.context.output_buffer.getvalue() + + self.context.impl.output_buffer = buf = io.StringIO() + for step in steps: + if step == "BEGIN": + self.context.impl.emit_begin() + elif step == "COMMIT": + self.context.impl.emit_commit() + else: + self.context.impl._exec(step) + + eq_(to_check, buf.getvalue()) diff --git a/venv/Lib/site-packages/alembic/testing/suite/test_op.py b/venv/Lib/site-packages/alembic/testing/suite/test_op.py new file mode 100644 index 0000000..a63b3f2 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/suite/test_op.py @@ -0,0 +1,42 @@ +"""Test against the builders in the op.* module.""" + +from sqlalchemy import Column +from sqlalchemy import event +from sqlalchemy import Integer +from sqlalchemy import String +from sqlalchemy import Table +from sqlalchemy.sql import text + +from ...testing.fixtures import AlterColRoundTripFixture +from ...testing.fixtures import TestBase + + +@event.listens_for(Table, "after_parent_attach") +def _add_cols(table, metadata): + if table.name == "tbl_with_auto_appended_column": + table.append_column(Column("bat", Integer)) + + +class BackendAlterColumnTest(AlterColRoundTripFixture, TestBase): + __backend__ = True + + def test_rename_column(self): + self._run_alter_col({}, {"name": "newname"}) + + def test_modify_type_int_str(self): + self._run_alter_col({"type": Integer()}, {"type": String(50)}) + + def test_add_server_default_int(self): + self._run_alter_col({"type": Integer}, {"server_default": text("5")}) + + def test_modify_server_default_int(self): + self._run_alter_col( + {"type": Integer, "server_default": text("2")}, + {"server_default": text("5")}, + ) + + def test_modify_nullable_to_non(self): + self._run_alter_col({}, {"nullable": False}) + + def test_modify_non_nullable_to_nullable(self): + self._run_alter_col({"nullable": False}, {"nullable": True}) diff --git a/venv/Lib/site-packages/alembic/testing/util.py b/venv/Lib/site-packages/alembic/testing/util.py new file mode 100644 index 0000000..4517a69 --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/util.py @@ -0,0 +1,126 @@ +# testing/util.py +# Copyright (C) 2005-2019 the SQLAlchemy authors and contributors +# +# +# This module is part of SQLAlchemy and is released under +# the MIT License: http://www.opensource.org/licenses/mit-license.php +from __future__ import annotations + +import types +from typing import Union + +from sqlalchemy.util import inspect_getfullargspec + +from ..util import sqla_2 + + +def flag_combinations(*combinations): + """A facade around @testing.combinations() oriented towards boolean + keyword-based arguments. + + Basically generates a nice looking identifier based on the keywords + and also sets up the argument names. + + E.g.:: + + @testing.flag_combinations( + dict(lazy=False, passive=False), + dict(lazy=True, passive=False), + dict(lazy=False, passive=True), + dict(lazy=False, passive=True, raiseload=True), + ) + + + would result in:: + + @testing.combinations( + ('', False, False, False), + ('lazy', True, False, False), + ('lazy_passive', True, True, False), + ('lazy_passive', True, True, True), + id_='iaaa', + argnames='lazy,passive,raiseload' + ) + + """ + from sqlalchemy.testing import config + + keys = set() + + for d in combinations: + keys.update(d) + + keys = sorted(keys) + + return config.combinations( + *[ + ("_".join(k for k in keys if d.get(k, False)),) + + tuple(d.get(k, False) for k in keys) + for d in combinations + ], + id_="i" + ("a" * len(keys)), + argnames=",".join(keys), + ) + + +def resolve_lambda(__fn, **kw): + """Given a no-arg lambda and a namespace, return a new lambda that + has all the values filled in. + + This is used so that we can have module-level fixtures that + refer to instance-level variables using lambdas. + + """ + + pos_args = inspect_getfullargspec(__fn)[0] + pass_pos_args = {arg: kw.pop(arg) for arg in pos_args} + glb = dict(__fn.__globals__) + glb.update(kw) + new_fn = types.FunctionType(__fn.__code__, glb) + return new_fn(**pass_pos_args) + + +def metadata_fixture(ddl="function"): + """Provide MetaData for a pytest fixture.""" + + from sqlalchemy.testing import config + from . import fixture_functions + + def decorate(fn): + def run_ddl(self): + from sqlalchemy import schema + + metadata = self.metadata = schema.MetaData() + try: + result = fn(self, metadata) + metadata.create_all(config.db) + # TODO: + # somehow get a per-function dml erase fixture here + yield result + finally: + metadata.drop_all(config.db) + + return fixture_functions.fixture(scope=ddl)(run_ddl) + + return decorate + + +def _safe_int(value: str) -> Union[int, str]: + try: + return int(value) + except: + return value + + +def testing_engine(url=None, options=None, future=False): + from sqlalchemy.testing import config + from sqlalchemy.testing.engines import testing_engine + + if not future: + future = getattr(config._current.options, "future_engine", False) + + if not sqla_2: + kw = {"future": future} if future else {} + else: + kw = {} + return testing_engine(url, options, **kw) diff --git a/venv/Lib/site-packages/alembic/testing/warnings.py b/venv/Lib/site-packages/alembic/testing/warnings.py new file mode 100644 index 0000000..e87136b --- /dev/null +++ b/venv/Lib/site-packages/alembic/testing/warnings.py @@ -0,0 +1,40 @@ +# testing/warnings.py +# Copyright (C) 2005-2021 the SQLAlchemy authors and contributors +# +# +# This module is part of SQLAlchemy and is released under +# the MIT License: http://www.opensource.org/licenses/mit-license.php + + +import warnings + +from sqlalchemy import exc as sa_exc + +from ..util import sqla_14 + + +def setup_filters(): + """Set global warning behavior for the test suite.""" + + warnings.resetwarnings() + + warnings.filterwarnings("error", category=sa_exc.SADeprecationWarning) + warnings.filterwarnings("error", category=sa_exc.SAWarning) + + # some selected deprecations... + warnings.filterwarnings("error", category=DeprecationWarning) + if not sqla_14: + # 1.3 uses pkg_resources in PluginLoader + warnings.filterwarnings( + "ignore", + "pkg_resources is deprecated as an API", + DeprecationWarning, + ) + try: + import pytest + except ImportError: + pass + else: + warnings.filterwarnings( + "once", category=pytest.PytestDeprecationWarning + ) diff --git a/venv/Lib/site-packages/alembic/util/__init__.py b/venv/Lib/site-packages/alembic/util/__init__.py new file mode 100644 index 0000000..3c1e27c --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/__init__.py @@ -0,0 +1,35 @@ +from .editor import open_in_editor +from .exc import AutogenerateDiffsDetected +from .exc import CommandError +from .langhelpers import _with_legacy_names +from .langhelpers import asbool +from .langhelpers import dedupe_tuple +from .langhelpers import Dispatcher +from .langhelpers import EMPTY_DICT +from .langhelpers import immutabledict +from .langhelpers import memoized_property +from .langhelpers import ModuleClsProxy +from .langhelpers import not_none +from .langhelpers import rev_id +from .langhelpers import to_list +from .langhelpers import to_tuple +from .langhelpers import unique_list +from .messaging import err +from .messaging import format_as_comma +from .messaging import msg +from .messaging import obfuscate_url_pw +from .messaging import status +from .messaging import warn +from .messaging import write_outstream +from .pyfiles import coerce_resource_to_filename +from .pyfiles import load_python_file +from .pyfiles import pyc_file_from_path +from .pyfiles import template_to_file +from .sqla_compat import has_computed +from .sqla_compat import sqla_13 +from .sqla_compat import sqla_14 +from .sqla_compat import sqla_2 + + +if not sqla_13: + raise CommandError("SQLAlchemy 1.3.0 or greater is required.") diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3018ad9f80152d55d28b9a89455acad40f3fabb5 GIT binary patch literal 1369 zcmbu<%WfMt6b9fKOCHI(OTNliSxJF<5hrodO;H3%?JNo;MS^6}5&{Tn=13w;4#y45ZqVmdV_5Q573)z zGk6`n#kPVs(A#V~coV(Dc7nIiLpBWFM(?uS;2pK6_t}2%5PiT7f_Kq}>@au_eZ-D} z_ti)rv*X|c^q7r<577_UgWx0dL-sI^VEjkyzCbk_{T6?Tv*QoZ$@m{Ui|8c2?U({` zE^`i<^u}Uk_^R|~4mnui;X=-4?gBid9x@zkog1x1p1rmF7RngV zl-_v@LStz!HDFWV7Mv*w*u+dKpgqFjo-zX0we$;GzY;;Swfz8s^$eGH{pP6caqwIgHMpoP9T$ zDd8?B*N|UN-pJ|1;psjqM0$x6+(anQQ<*+4y;P4mzC6-%ep)PV>p$r5aK50I%e};C L#sA}{lEnW3EPQ1S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/compat.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/compat.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cba61e1b0de43a14387e8f02c3f33dc6ec40738d GIT binary patch literal 2185 zcmZuyNpBlB6eeepMyqAn@e(gl7ZerHDjS-nMG+JUf+9fR1aO)b6B&c?kg`XbEhOc} zhT4mL?XAZg;$#0%54`qJ~SlK2DeT}W2bHGkcl-vWHq-!OPF*-W?mElRRY^U8I9-LxD22DFRG#&njo z*%DiRZLuqC<;?N7*)_Jx*3PJZjjgk*Y=dpSw%HcjhPe*2cS*PN7CqOcx)x?xu0j>( znS^frL7olbgQua8T2H;11bOc$OdKea7WTp}2x946Blu{?Y0<*UUKjy0iLhhi@9sOf`+6~Sdb77@pgdns2TgIEEsKFpLj zewxRb(zaCMWO)|;7nd`8T}!(MA|Dr`1!vElibkL>jZ=F76nR6>$V9WOm%#PFt1cCru-{nIb#*&Vi(IHA-VbJP)pd?94GMg! z)aAoahDr&s1>3X@v;-dE5!&L#drkrN{^vL(@~5y|BJBwEXqDD2@e$z2ga*LBtoscH z6qyi(Ry8L;9-J-47OVGHYUmkYZNCuCS+ozf8&+V?+5FVmX|r1{`rXRO8jz6Xg0s#*;B zCr*_*R*SAdXqr%3v<^kwgc*U-aPrBVsYaz<0DC{{#6FfLPy(}6xKQ~E@?{bx(IHQddni)^ zZ}C^&8|_WSOO){j2gS$tVhKqI;;!pQAd&F@5X9La_l=b|#T`7x0gJyf^MD2Yu rmC$>r{t|s(x9X7Z(_bC39!u4#0>$80YP${)tq#t{6?MDiRoj09%@!?2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/editor.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/editor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4fb6468b46ff442a74ae7ef5b24358a4f8df797 GIT binary patch literal 2477 zcmZ8jOLN@D5uO3C*ash4QncQ2CaiMGC`)vTl~k%&i7SewR8&zYS4f*SysBLgGfP5? zmuF^~!xnzg`U-UkUL?=${oml=v&!OyIC*n zS-G3`vq3npau4!axMt-( zmv8f%-*&=nz60GmuN{7i-~QGMZ=$!u@9?{ragX1JW`{rEKYLC2yZqdW(}4@{2?kdF@M~=Q58S;|m@Gn*sG>1KlZvigG&Z$xTgO z(cG!%%DKFwoyxhQD_6UfTah!!l$?-!-y_@2wuIWq>cBxeyb(PM%qx{!P9+0@Qy zoybJ4*+nFi=rk2}o5|$qlV`^-{x+GgL@_1wL(GSSKON1mZ=_f$#Z*X<$6{~LoQ-4U z-xDPs;T?R@f?BE3b}CpIDXeAeLda9FE;BP= zyLG|@v5As39SqsC`u2!6Vh8MTj!heSF)oYp5rQm5nMSd&;hYwdO(uofYgbGrd+bx3 z`sR=WqyPOZJ{ZlFkZJ^S7Z=5d3pLY4IRap3 zg6;om|2Ly)8mZX`jJg;-PfkY)$@r*@;u$8WQIv}8G>Jciwdsc~#mdWi(?oroEbo{WpnFm2%21x6P&8nF%hZU*ZyT~Qvn|DR!uPg6}X!n&@d9yA?>35w9Bi}oed^J2Fi`~lX zac|Ype$}bSm9z3IpOaZ%9#{Sm`Re$D=q^XLenUAid3P8%q2FXm=zsR?=+no~mq&*M zQ}aZdT)IYXTFk*C_DL!tB}_Wm?AvWt?lMqdw^_Z*TDtrwB~{R?hhr|L(LB{{G*#Uf z`8*Rc(n7k3g}jLdg-n#Sk6aT{V@*R4OC)1Y-EC7S=r)`f#2|RWv4^T@QoASu;hN#X zI6g0uSk(PD6Kb!F^tokB)7&$M?w|?qst0HY_31W%H9wCI=+GIUH9d#gnahngCDs(y zz?JV|)munkS5XgY^ID{jA!wYSDKG)jcX0vET=}5F_qSw47W+Wb;VuV~-?`d*)%m`` z(E*N*#nIK>$^`@VD;GHKqmCN*o#c88n*6ZQKObXWlvM91-sGF7KVeJL_5haCt-FCP)DKqqacY#=_9cqr3pl zNmhGt!Nsy?TI2t619z|}BmTh$w!7ALO$P?qn3!_$Q@;%Gf5EFv0V1wPHyvqo0X+!Ym#$#!~ZKH^~XxU_mYeQ+nJy7%0QWmjLs;OtbzBHG)G?_1Zroq2SM4Ah> z_Hngflg6?;Mr}%-Ehv_3HmcT?w@kJk80OZ!-(>}#r{W`1UDUg1)}0<*|MAa3-`lx8 I+}YmzA23*cxBvhE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/exc.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/exc.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34eaaef33366e290490b27f3830d09e22034144c GIT binary patch literal 482 zcma)2Jx{|h5VeyOLX}FaYz!k^DnBwrVJetEKw2#YbMy+C*(iYWSl31l12De^#t$U~sW z0~O6kzavq32#VDh(HZT3Ki8(Jt0h~8o&I_&T+}8=` zZ?(vGFQ3G8uu}`)GkMEu3&ye>O1;)hfz6z*m~~W{3 zm5><nA%+ksl$Uk#f0ZnwD6!NY0v16;LdN&o-= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/langhelpers.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/langhelpers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ee54bf1f3b9a9720d1bed835bd8c551e5cff77a GIT binary patch literal 8976 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/alembic/util/__pycache__/sqla_compat.cpython-37.pyc b/venv/Lib/site-packages/alembic/util/__pycache__/sqla_compat.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d30e584c0f1b9aaff12c2bb80c4542cfdfea8ef9 GIT binary patch literal 17140 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 (3, 11) +py310 = sys.version_info >= (3, 10) +py39 = sys.version_info >= (3, 9) +py38 = sys.version_info >= (3, 8) + + +# produce a wrapper that allows encoded text to stream +# into a given buffer, but doesn't close it. +# not sure of a more idiomatic approach to this. +class EncodedIO(io.TextIOWrapper): + def close(self) -> None: + pass + + +if py39: + from importlib import resources as importlib_resources + from importlib import metadata as importlib_metadata + from importlib.metadata import EntryPoint +else: + import importlib_resources # type:ignore # noqa + import importlib_metadata # type:ignore # noqa + from importlib_metadata import EntryPoint # type:ignore # noqa + + +def importlib_metadata_get(group: str) -> Sequence[EntryPoint]: + ep = importlib_metadata.entry_points() + if hasattr(ep, "select"): + return ep.select(group=group) # type: ignore + else: + return ep.get(group, ()) # type: ignore + + +def formatannotation_fwdref(annotation, base_module=None): + """vendored from python 3.7""" + # copied over _formatannotation from sqlalchemy 2.0 + + if isinstance(annotation, str): + return annotation + + if getattr(annotation, "__module__", None) == "typing": + return repr(annotation).replace("typing.", "").replace("~", "") + if isinstance(annotation, type): + if annotation.__module__ in ("builtins", base_module): + return repr(annotation.__qualname__) + return annotation.__module__ + "." + annotation.__qualname__ + elif isinstance(annotation, typing.TypeVar): + return repr(annotation).replace("~", "") + return repr(annotation).replace("~", "") + + +def read_config_parser( + file_config: ConfigParser, + file_argument: Sequence[Union[str, os.PathLike[str]]], +) -> list[str]: + if py310: + return file_config.read(file_argument, encoding="locale") + else: + return file_config.read(file_argument) diff --git a/venv/Lib/site-packages/alembic/util/editor.py b/venv/Lib/site-packages/alembic/util/editor.py new file mode 100644 index 0000000..f1d1557 --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/editor.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +import os +from os.path import exists +from os.path import join +from os.path import splitext +from subprocess import check_call +from typing import Dict +from typing import List +from typing import Mapping +from typing import Optional + +from .compat import is_posix +from .exc import CommandError + + +def open_in_editor( + filename: str, environ: Optional[Dict[str, str]] = None +) -> None: + """ + Opens the given file in a text editor. If the environment variable + ``EDITOR`` is set, this is taken as preference. + + Otherwise, a list of commonly installed editors is tried. + + If no editor matches, an :py:exc:`OSError` is raised. + + :param filename: The filename to open. Will be passed verbatim to the + editor command. + :param environ: An optional drop-in replacement for ``os.environ``. Used + mainly for testing. + """ + env = os.environ if environ is None else environ + try: + editor = _find_editor(env) + check_call([editor, filename]) + except Exception as exc: + raise CommandError("Error executing editor (%s)" % (exc,)) from exc + + +def _find_editor(environ: Mapping[str, str]) -> str: + candidates = _default_editors() + for i, var in enumerate(("EDITOR", "VISUAL")): + if var in environ: + user_choice = environ[var] + if exists(user_choice): + return user_choice + if os.sep not in user_choice: + candidates.insert(i, user_choice) + + for candidate in candidates: + path = _find_executable(candidate, environ) + if path is not None: + return path + raise OSError( + "No suitable editor found. Please set the " + '"EDITOR" or "VISUAL" environment variables' + ) + + +def _find_executable( + candidate: str, environ: Mapping[str, str] +) -> Optional[str]: + # Assuming this is on the PATH, we need to determine it's absolute + # location. Otherwise, ``check_call`` will fail + if not is_posix and splitext(candidate)[1] != ".exe": + candidate += ".exe" + for path in environ.get("PATH", "").split(os.pathsep): + value = join(path, candidate) + if exists(value): + return value + return None + + +def _default_editors() -> List[str]: + # Look for an editor. Prefer the user's choice by env-var, fall back to + # most commonly installed editor (nano/vim) + if is_posix: + return ["sensible-editor", "editor", "nano", "vim", "code"] + else: + return ["code.exe", "notepad++.exe", "notepad.exe"] diff --git a/venv/Lib/site-packages/alembic/util/exc.py b/venv/Lib/site-packages/alembic/util/exc.py new file mode 100644 index 0000000..0d0496b --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/exc.py @@ -0,0 +1,6 @@ +class CommandError(Exception): + pass + + +class AutogenerateDiffsDetected(CommandError): + pass diff --git a/venv/Lib/site-packages/alembic/util/langhelpers.py b/venv/Lib/site-packages/alembic/util/langhelpers.py new file mode 100644 index 0000000..34d48bc --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/langhelpers.py @@ -0,0 +1,290 @@ +from __future__ import annotations + +import collections +from collections.abc import Iterable +import textwrap +from typing import Any +from typing import Callable +from typing import Dict +from typing import List +from typing import Mapping +from typing import Optional +from typing import overload +from typing import Sequence +from typing import Tuple +from typing import TypeVar +from typing import Union +import uuid +import warnings + +from sqlalchemy.util import asbool # noqa +from sqlalchemy.util import immutabledict # noqa +from sqlalchemy.util import memoized_property # noqa +from sqlalchemy.util import to_list # noqa +from sqlalchemy.util import unique_list # noqa + +from .compat import inspect_getfullargspec + + +EMPTY_DICT: Mapping[Any, Any] = immutabledict() +_T = TypeVar("_T") + + +class _ModuleClsMeta(type): + def __setattr__(cls, key: str, value: Callable) -> None: + super().__setattr__(key, value) + cls._update_module_proxies(key) # type: ignore + + +class ModuleClsProxy(metaclass=_ModuleClsMeta): + """Create module level proxy functions for the + methods on a given class. + + The functions will have a compatible signature + as the methods. + + """ + + _setups: Dict[type, Tuple[set, list]] = collections.defaultdict( + lambda: (set(), []) + ) + + @classmethod + def _update_module_proxies(cls, name: str) -> None: + attr_names, modules = cls._setups[cls] + for globals_, locals_ in modules: + cls._add_proxied_attribute(name, globals_, locals_, attr_names) + + def _install_proxy(self) -> None: + attr_names, modules = self._setups[self.__class__] + for globals_, locals_ in modules: + globals_["_proxy"] = self + for attr_name in attr_names: + globals_[attr_name] = getattr(self, attr_name) + + def _remove_proxy(self) -> None: + attr_names, modules = self._setups[self.__class__] + for globals_, locals_ in modules: + globals_["_proxy"] = None + for attr_name in attr_names: + del globals_[attr_name] + + @classmethod + def create_module_class_proxy(cls, globals_, locals_): + attr_names, modules = cls._setups[cls] + modules.append((globals_, locals_)) + cls._setup_proxy(globals_, locals_, attr_names) + + @classmethod + def _setup_proxy(cls, globals_, locals_, attr_names): + for methname in dir(cls): + cls._add_proxied_attribute(methname, globals_, locals_, attr_names) + + @classmethod + def _add_proxied_attribute(cls, methname, globals_, locals_, attr_names): + if not methname.startswith("_"): + meth = getattr(cls, methname) + if callable(meth): + locals_[methname] = cls._create_method_proxy( + methname, globals_, locals_ + ) + else: + attr_names.add(methname) + + @classmethod + def _create_method_proxy(cls, name, globals_, locals_): + fn = getattr(cls, name) + + def _name_error(name, from_): + raise NameError( + "Can't invoke function '%s', as the proxy object has " + "not yet been " + "established for the Alembic '%s' class. " + "Try placing this code inside a callable." + % (name, cls.__name__) + ) from from_ + + globals_["_name_error"] = _name_error + + translations = getattr(fn, "_legacy_translations", []) + if translations: + spec = inspect_getfullargspec(fn) + if spec[0] and spec[0][0] == "self": + spec[0].pop(0) + + outer_args = inner_args = "*args, **kw" + translate_str = "args, kw = _translate(%r, %r, %r, args, kw)" % ( + fn.__name__, + tuple(spec), + translations, + ) + + def translate(fn_name, spec, translations, args, kw): + return_kw = {} + return_args = [] + + for oldname, newname in translations: + if oldname in kw: + warnings.warn( + "Argument %r is now named %r " + "for method %s()." % (oldname, newname, fn_name) + ) + return_kw[newname] = kw.pop(oldname) + return_kw.update(kw) + + args = list(args) + if spec[3]: + pos_only = spec[0][: -len(spec[3])] + else: + pos_only = spec[0] + for arg in pos_only: + if arg not in return_kw: + try: + return_args.append(args.pop(0)) + except IndexError: + raise TypeError( + "missing required positional argument: %s" + % arg + ) + return_args.extend(args) + + return return_args, return_kw + + globals_["_translate"] = translate + else: + outer_args = "*args, **kw" + inner_args = "*args, **kw" + translate_str = "" + + func_text = textwrap.dedent( + """\ + def %(name)s(%(args)s): + %(doc)r + %(translate)s + try: + p = _proxy + except NameError as ne: + _name_error('%(name)s', ne) + return _proxy.%(name)s(%(apply_kw)s) + e + """ + % { + "name": name, + "translate": translate_str, + "args": outer_args, + "apply_kw": inner_args, + "doc": fn.__doc__, + } + ) + lcl = {} + + exec(func_text, globals_, lcl) + return lcl[name] + + +def _with_legacy_names(translations): + def decorate(fn): + fn._legacy_translations = translations + return fn + + return decorate + + +def rev_id() -> str: + return uuid.uuid4().hex[-12:] + + +@overload +def to_tuple(x: Any, default: tuple) -> tuple: + ... + + +@overload +def to_tuple(x: None, default: Optional[_T] = None) -> _T: + ... + + +@overload +def to_tuple(x: Any, default: Optional[tuple] = None) -> tuple: + ... + + +def to_tuple(x, default=None): + if x is None: + return default + elif isinstance(x, str): + return (x,) + elif isinstance(x, Iterable): + return tuple(x) + else: + return (x,) + + +def dedupe_tuple(tup: Tuple[str, ...]) -> Tuple[str, ...]: + return tuple(unique_list(tup)) + + +class Dispatcher: + def __init__(self, uselist: bool = False) -> None: + self._registry: Dict[tuple, Any] = {} + self.uselist = uselist + + def dispatch_for( + self, target: Any, qualifier: str = "default" + ) -> Callable: + def decorate(fn): + if self.uselist: + self._registry.setdefault((target, qualifier), []).append(fn) + else: + assert (target, qualifier) not in self._registry + self._registry[(target, qualifier)] = fn + return fn + + return decorate + + def dispatch(self, obj: Any, qualifier: str = "default") -> Any: + if isinstance(obj, str): + targets: Sequence = [obj] + elif isinstance(obj, type): + targets = obj.__mro__ + else: + targets = type(obj).__mro__ + + for spcls in targets: + if qualifier != "default" and (spcls, qualifier) in self._registry: + return self._fn_or_list(self._registry[(spcls, qualifier)]) + elif (spcls, "default") in self._registry: + return self._fn_or_list(self._registry[(spcls, "default")]) + else: + raise ValueError("no dispatch function for object: %s" % obj) + + def _fn_or_list( + self, fn_or_list: Union[List[Callable], Callable] + ) -> Callable: + if self.uselist: + + def go(*arg, **kw): + for fn in fn_or_list: + fn(*arg, **kw) + + return go + else: + return fn_or_list # type: ignore + + def branch(self) -> Dispatcher: + """Return a copy of this dispatcher that is independently + writable.""" + + d = Dispatcher() + if self.uselist: + d._registry.update( + (k, [fn for fn in self._registry[k]]) for k in self._registry + ) + else: + d._registry.update(self._registry) + return d + + +def not_none(value: Optional[_T]) -> _T: + assert value is not None + return value diff --git a/venv/Lib/site-packages/alembic/util/messaging.py b/venv/Lib/site-packages/alembic/util/messaging.py new file mode 100644 index 0000000..35592c0 --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/messaging.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Iterable +from contextlib import contextmanager +import logging +import sys +import textwrap +from typing import Optional +from typing import TextIO +from typing import Union +import warnings + +from sqlalchemy.engine import url + +from . import sqla_compat + +log = logging.getLogger(__name__) + +# disable "no handler found" errors +logging.getLogger("alembic").addHandler(logging.NullHandler()) + + +try: + import fcntl + import termios + import struct + + ioctl = fcntl.ioctl(0, termios.TIOCGWINSZ, struct.pack("HHHH", 0, 0, 0, 0)) + _h, TERMWIDTH, _hp, _wp = struct.unpack("HHHH", ioctl) + if TERMWIDTH <= 0: # can occur if running in emacs pseudo-tty + TERMWIDTH = None +except (ImportError, OSError): + TERMWIDTH = None + + +def write_outstream( + stream: TextIO, *text: Union[str, bytes], quiet: bool = False +) -> None: + if quiet: + return + encoding = getattr(stream, "encoding", "ascii") or "ascii" + for t in text: + if not isinstance(t, bytes): + t = t.encode(encoding, "replace") + t = t.decode(encoding) + try: + stream.write(t) + except OSError: + # suppress "broken pipe" errors. + # no known way to handle this on Python 3 however + # as the exception is "ignored" (noisily) in TextIOWrapper. + break + + +@contextmanager +def status(status_msg: str, newline: bool = False, quiet: bool = False): + msg(status_msg + " ...", newline, flush=True, quiet=quiet) + try: + yield + except: + if not quiet: + write_outstream(sys.stdout, " FAILED\n") + raise + else: + if not quiet: + write_outstream(sys.stdout, " done\n") + + +def err(message: str, quiet: bool = False): + log.error(message) + msg(f"FAILED: {message}", quiet=quiet) + sys.exit(-1) + + +def obfuscate_url_pw(input_url: str) -> str: + u = url.make_url(input_url) + return sqla_compat.url_render_as_string(u, hide_password=True) + + +def warn(msg: str, stacklevel: int = 2) -> None: + warnings.warn(msg, UserWarning, stacklevel=stacklevel) + + +def msg( + msg: str, newline: bool = True, flush: bool = False, quiet: bool = False +) -> None: + if quiet: + return + if TERMWIDTH is None: + write_outstream(sys.stdout, msg) + if newline: + write_outstream(sys.stdout, "\n") + else: + # left indent output lines + lines = textwrap.wrap(msg, TERMWIDTH) + if len(lines) > 1: + for line in lines[0:-1]: + write_outstream(sys.stdout, " ", line, "\n") + write_outstream(sys.stdout, " ", lines[-1], ("\n" if newline else "")) + if flush: + sys.stdout.flush() + + +def format_as_comma(value: Optional[Union[str, Iterable[str]]]) -> str: + if value is None: + return "" + elif isinstance(value, str): + return value + elif isinstance(value, Iterable): + return ", ".join(value) + else: + raise ValueError("Don't know how to comma-format %r" % value) diff --git a/venv/Lib/site-packages/alembic/util/pyfiles.py b/venv/Lib/site-packages/alembic/util/pyfiles.py new file mode 100644 index 0000000..e757673 --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/pyfiles.py @@ -0,0 +1,110 @@ +from __future__ import annotations + +import atexit +from contextlib import ExitStack +import importlib +import importlib.machinery +import importlib.util +import os +import re +import tempfile +from typing import Optional + +from mako import exceptions +from mako.template import Template + +from . import compat +from .exc import CommandError + + +def template_to_file( + template_file: str, dest: str, output_encoding: str, **kw +) -> None: + template = Template(filename=template_file) + try: + output = template.render_unicode(**kw).encode(output_encoding) + except: + with tempfile.NamedTemporaryFile(suffix=".txt", delete=False) as ntf: + ntf.write( + exceptions.text_error_template() + .render_unicode() + .encode(output_encoding) + ) + fname = ntf.name + raise CommandError( + "Template rendering failed; see %s for a " + "template-oriented traceback." % fname + ) + else: + with open(dest, "wb") as f: + f.write(output) + + +def coerce_resource_to_filename(fname: str) -> str: + """Interpret a filename as either a filesystem location or as a package + resource. + + Names that are non absolute paths and contain a colon + are interpreted as resources and coerced to a file location. + + """ + if not os.path.isabs(fname) and ":" in fname: + tokens = fname.split(":") + + # from https://importlib-resources.readthedocs.io/en/latest/migration.html#pkg-resources-resource-filename # noqa E501 + + file_manager = ExitStack() + atexit.register(file_manager.close) + + ref = compat.importlib_resources.files(tokens[0]) + for tok in tokens[1:]: + ref = ref / tok + fname = file_manager.enter_context( # type: ignore[assignment] + compat.importlib_resources.as_file(ref) + ) + return fname + + +def pyc_file_from_path(path: str) -> Optional[str]: + """Given a python source path, locate the .pyc.""" + + candidate = importlib.util.cache_from_source(path) + if os.path.exists(candidate): + return candidate + + # even for pep3147, fall back to the old way of finding .pyc files, + # to support sourceless operation + filepath, ext = os.path.splitext(path) + for ext in importlib.machinery.BYTECODE_SUFFIXES: + if os.path.exists(filepath + ext): + return filepath + ext + else: + return None + + +def load_python_file(dir_: str, filename: str): + """Load a file from the given path as a Python module.""" + + module_id = re.sub(r"\W", "_", filename) + path = os.path.join(dir_, filename) + _, ext = os.path.splitext(filename) + if ext == ".py": + if os.path.exists(path): + module = load_module_py(module_id, path) + else: + pyc_path = pyc_file_from_path(path) + if pyc_path is None: + raise ImportError("Can't find Python file %s" % path) + else: + module = load_module_py(module_id, pyc_path) + elif ext in (".pyc", ".pyo"): + module = load_module_py(module_id, path) + return module + + +def load_module_py(module_id: str, path: str): + spec = importlib.util.spec_from_file_location(module_id, path) + assert spec + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) # type: ignore + return module diff --git a/venv/Lib/site-packages/alembic/util/sqla_compat.py b/venv/Lib/site-packages/alembic/util/sqla_compat.py new file mode 100644 index 0000000..3f175cf --- /dev/null +++ b/venv/Lib/site-packages/alembic/util/sqla_compat.py @@ -0,0 +1,639 @@ +from __future__ import annotations + +import contextlib +import re +from typing import Any +from typing import Dict +from typing import Iterable +from typing import Iterator +from typing import Mapping +from typing import Optional +from typing import TYPE_CHECKING +from typing import TypeVar +from typing import Union + +from sqlalchemy import __version__ +from sqlalchemy import inspect +from sqlalchemy import schema +from sqlalchemy import sql +from sqlalchemy import types as sqltypes +from sqlalchemy.engine import url +from sqlalchemy.ext.compiler import compiles +from sqlalchemy.schema import CheckConstraint +from sqlalchemy.schema import Column +from sqlalchemy.schema import ForeignKeyConstraint +from sqlalchemy.sql import visitors +from sqlalchemy.sql.base import DialectKWArgs +from sqlalchemy.sql.elements import BindParameter +from sqlalchemy.sql.elements import ColumnClause +from sqlalchemy.sql.elements import quoted_name +from sqlalchemy.sql.elements import TextClause +from sqlalchemy.sql.elements import UnaryExpression +from sqlalchemy.sql.visitors import traverse +from typing_extensions import TypeGuard + +if TYPE_CHECKING: + from sqlalchemy import Index + from sqlalchemy import Table + from sqlalchemy.engine import Connection + from sqlalchemy.engine import Dialect + from sqlalchemy.engine import Transaction + from sqlalchemy.engine.reflection import Inspector + from sqlalchemy.sql.base import ColumnCollection + from sqlalchemy.sql.compiler import SQLCompiler + from sqlalchemy.sql.dml import Insert + from sqlalchemy.sql.elements import ColumnElement + from sqlalchemy.sql.schema import Constraint + from sqlalchemy.sql.schema import SchemaItem + from sqlalchemy.sql.selectable import Select + from sqlalchemy.sql.selectable import TableClause + +_CE = TypeVar("_CE", bound=Union["ColumnElement[Any]", "SchemaItem"]) + + +def _safe_int(value: str) -> Union[int, str]: + try: + return int(value) + except: + return value + + +_vers = tuple( + [_safe_int(x) for x in re.findall(r"(\d+|[abc]\d)", __version__)] +) +sqla_13 = _vers >= (1, 3) +sqla_14 = _vers >= (1, 4) +# https://docs.sqlalchemy.org/en/latest/changelog/changelog_14.html#change-0c6e0cc67dfe6fac5164720e57ef307d +sqla_14_18 = _vers >= (1, 4, 18) +sqla_14_26 = _vers >= (1, 4, 26) +sqla_2 = _vers >= (2,) +sqlalchemy_version = __version__ + +try: + from sqlalchemy.sql.naming import _NONE_NAME as _NONE_NAME +except ImportError: + from sqlalchemy.sql.elements import _NONE_NAME as _NONE_NAME # type: ignore # noqa: E501 + + +class _Unsupported: + "Placeholder for unsupported SQLAlchemy classes" + + +try: + from sqlalchemy import Computed +except ImportError: + if not TYPE_CHECKING: + + class Computed(_Unsupported): + pass + + has_computed = False + has_computed_reflection = False +else: + has_computed = True + has_computed_reflection = _vers >= (1, 3, 16) + +try: + from sqlalchemy import Identity +except ImportError: + if not TYPE_CHECKING: + + class Identity(_Unsupported): + pass + + has_identity = False +else: + identity_has_dialect_kwargs = issubclass(Identity, DialectKWArgs) + + def _get_identity_options_dict( + identity: Union[Identity, schema.Sequence, None], + dialect_kwargs: bool = False, + ) -> Dict[str, Any]: + if identity is None: + return {} + elif identity_has_dialect_kwargs: + as_dict = identity._as_dict() # type: ignore + if dialect_kwargs: + assert isinstance(identity, DialectKWArgs) + as_dict.update(identity.dialect_kwargs) + else: + as_dict = {} + if isinstance(identity, Identity): + # always=None means something different than always=False + as_dict["always"] = identity.always + if identity.on_null is not None: + as_dict["on_null"] = identity.on_null + # attributes common to Identity and Sequence + attrs = ( + "start", + "increment", + "minvalue", + "maxvalue", + "nominvalue", + "nomaxvalue", + "cycle", + "cache", + "order", + ) + as_dict.update( + { + key: getattr(identity, key, None) + for key in attrs + if getattr(identity, key, None) is not None + } + ) + return as_dict + + has_identity = True + +if sqla_2: + from sqlalchemy.sql.base import _NoneName +else: + from sqlalchemy.util import symbol as _NoneName # type: ignore[assignment] + + +_ConstraintName = Union[None, str, _NoneName] + +_ConstraintNameDefined = Union[str, _NoneName] + + +def constraint_name_defined( + name: _ConstraintName, +) -> TypeGuard[_ConstraintNameDefined]: + return name is _NONE_NAME or isinstance(name, (str, _NoneName)) + + +def constraint_name_string( + name: _ConstraintName, +) -> TypeGuard[str]: + return isinstance(name, str) + + +def constraint_name_or_none( + name: _ConstraintName, +) -> Optional[str]: + return name if constraint_name_string(name) else None + + +AUTOINCREMENT_DEFAULT = "auto" + + +@contextlib.contextmanager +def _ensure_scope_for_ddl( + connection: Optional[Connection], +) -> Iterator[None]: + try: + in_transaction = connection.in_transaction # type: ignore[union-attr] + except AttributeError: + # catch for MockConnection, None + in_transaction = None + pass + + # yield outside the catch + if in_transaction is None: + yield + else: + if not in_transaction(): + assert connection is not None + with connection.begin(): + yield + else: + yield + + +def url_render_as_string(url, hide_password=True): + if sqla_14: + return url.render_as_string(hide_password=hide_password) + else: + return url.__to_string__(hide_password=hide_password) + + +def _safe_begin_connection_transaction( + connection: Connection, +) -> Transaction: + transaction = _get_connection_transaction(connection) + if transaction: + return transaction + else: + return connection.begin() + + +def _safe_commit_connection_transaction( + connection: Connection, +) -> None: + transaction = _get_connection_transaction(connection) + if transaction: + transaction.commit() + + +def _safe_rollback_connection_transaction( + connection: Connection, +) -> None: + transaction = _get_connection_transaction(connection) + if transaction: + transaction.rollback() + + +def _get_connection_in_transaction(connection: Optional[Connection]) -> bool: + try: + in_transaction = connection.in_transaction # type: ignore + except AttributeError: + # catch for MockConnection + return False + else: + return in_transaction() + + +def _idx_table_bound_expressions(idx: Index) -> Iterable[ColumnElement[Any]]: + return idx.expressions # type: ignore + + +def _copy(schema_item: _CE, **kw) -> _CE: + if hasattr(schema_item, "_copy"): + return schema_item._copy(**kw) # type: ignore[union-attr] + else: + return schema_item.copy(**kw) # type: ignore[union-attr] + + +def _get_connection_transaction( + connection: Connection, +) -> Optional[Transaction]: + if sqla_14: + return connection.get_transaction() + else: + r = connection._root # type: ignore[attr-defined] + return r._Connection__transaction + + +def _create_url(*arg, **kw) -> url.URL: + if hasattr(url.URL, "create"): + return url.URL.create(*arg, **kw) + else: + return url.URL(*arg, **kw) + + +def _connectable_has_table( + connectable: Connection, tablename: str, schemaname: Union[str, None] +) -> bool: + if sqla_14: + return inspect(connectable).has_table(tablename, schemaname) + else: + return connectable.dialect.has_table( + connectable, tablename, schemaname + ) + + +def _exec_on_inspector(inspector, statement, **params): + if sqla_14: + with inspector._operation_context() as conn: + return conn.execute(statement, params) + else: + return inspector.bind.execute(statement, params) + + +def _nullability_might_be_unset(metadata_column): + if not sqla_14: + return metadata_column.nullable + else: + from sqlalchemy.sql import schema + + return ( + metadata_column._user_defined_nullable is schema.NULL_UNSPECIFIED + ) + + +def _server_default_is_computed(*server_default) -> bool: + if not has_computed: + return False + else: + return any(isinstance(sd, Computed) for sd in server_default) + + +def _server_default_is_identity(*server_default) -> bool: + if not sqla_14: + return False + else: + return any(isinstance(sd, Identity) for sd in server_default) + + +def _table_for_constraint(constraint: Constraint) -> Table: + if isinstance(constraint, ForeignKeyConstraint): + table = constraint.parent + assert table is not None + return table # type: ignore[return-value] + else: + return constraint.table + + +def _columns_for_constraint(constraint): + if isinstance(constraint, ForeignKeyConstraint): + return [fk.parent for fk in constraint.elements] + elif isinstance(constraint, CheckConstraint): + return _find_columns(constraint.sqltext) + else: + return list(constraint.columns) + + +def _reflect_table(inspector: Inspector, table: Table) -> None: + if sqla_14: + return inspector.reflect_table(table, None) + else: + return inspector.reflecttable( # type: ignore[attr-defined] + table, None + ) + + +def _resolve_for_variant(type_, dialect): + if _type_has_variants(type_): + base_type, mapping = _get_variant_mapping(type_) + return mapping.get(dialect.name, base_type) + else: + return type_ + + +if hasattr(sqltypes.TypeEngine, "_variant_mapping"): + + def _type_has_variants(type_): + return bool(type_._variant_mapping) + + def _get_variant_mapping(type_): + return type_, type_._variant_mapping + +else: + + def _type_has_variants(type_): + return type(type_) is sqltypes.Variant + + def _get_variant_mapping(type_): + return type_.impl, type_.mapping + + +def _fk_spec(constraint): + source_columns = [ + constraint.columns[key].name for key in constraint.column_keys + ] + + source_table = constraint.parent.name + source_schema = constraint.parent.schema + target_schema = constraint.elements[0].column.table.schema + target_table = constraint.elements[0].column.table.name + target_columns = [element.column.name for element in constraint.elements] + ondelete = constraint.ondelete + onupdate = constraint.onupdate + deferrable = constraint.deferrable + initially = constraint.initially + return ( + source_schema, + source_table, + source_columns, + target_schema, + target_table, + target_columns, + onupdate, + ondelete, + deferrable, + initially, + ) + + +def _fk_is_self_referential(constraint: ForeignKeyConstraint) -> bool: + spec = constraint.elements[0]._get_colspec() # type: ignore[attr-defined] + tokens = spec.split(".") + tokens.pop(-1) # colname + tablekey = ".".join(tokens) + assert constraint.parent is not None + return tablekey == constraint.parent.key + + +def _is_type_bound(constraint: Constraint) -> bool: + # this deals with SQLAlchemy #3260, don't copy CHECK constraints + # that will be generated by the type. + # new feature added for #3260 + return constraint._type_bound # type: ignore[attr-defined] + + +def _find_columns(clause): + """locate Column objects within the given expression.""" + + cols = set() + traverse(clause, {}, {"column": cols.add}) + return cols + + +def _remove_column_from_collection( + collection: ColumnCollection, column: Union[Column[Any], ColumnClause[Any]] +) -> None: + """remove a column from a ColumnCollection.""" + + # workaround for older SQLAlchemy, remove the + # same object that's present + assert column.key is not None + to_remove = collection[column.key] + + # SQLAlchemy 2.0 will use more ReadOnlyColumnCollection + # (renamed from ImmutableColumnCollection) + if hasattr(collection, "_immutable") or hasattr(collection, "_readonly"): + collection._parent.remove(to_remove) + else: + collection.remove(to_remove) + + +def _textual_index_column( + table: Table, text_: Union[str, TextClause, ColumnElement[Any]] +) -> Union[ColumnElement[Any], Column[Any]]: + """a workaround for the Index construct's severe lack of flexibility""" + if isinstance(text_, str): + c = Column(text_, sqltypes.NULLTYPE) + table.append_column(c) + return c + elif isinstance(text_, TextClause): + return _textual_index_element(table, text_) + elif isinstance(text_, _textual_index_element): + return _textual_index_column(table, text_.text) + elif isinstance(text_, sql.ColumnElement): + return _copy_expression(text_, table) + else: + raise ValueError("String or text() construct expected") + + +def _copy_expression(expression: _CE, target_table: Table) -> _CE: + def replace(col): + if ( + isinstance(col, Column) + and col.table is not None + and col.table is not target_table + ): + if col.name in target_table.c: + return target_table.c[col.name] + else: + c = _copy(col) + target_table.append_column(c) + return c + else: + return None + + return visitors.replacement_traverse( # type: ignore[call-overload] + expression, {}, replace + ) + + +class _textual_index_element(sql.ColumnElement): + """Wrap around a sqlalchemy text() construct in such a way that + we appear like a column-oriented SQL expression to an Index + construct. + + The issue here is that currently the Postgresql dialect, the biggest + recipient of functional indexes, keys all the index expressions to + the corresponding column expressions when rendering CREATE INDEX, + so the Index we create here needs to have a .columns collection that + is the same length as the .expressions collection. Ultimately + SQLAlchemy should support text() expressions in indexes. + + See SQLAlchemy issue 3174. + + """ + + __visit_name__ = "_textual_idx_element" + + def __init__(self, table: Table, text: TextClause) -> None: + self.table = table + self.text = text + self.key = text.text + self.fake_column = schema.Column(self.text.text, sqltypes.NULLTYPE) + table.append_column(self.fake_column) + + def get_children(self): + return [self.fake_column] + + +@compiles(_textual_index_element) +def _render_textual_index_column( + element: _textual_index_element, compiler: SQLCompiler, **kw +) -> str: + return compiler.process(element.text, **kw) + + +class _literal_bindparam(BindParameter): + pass + + +@compiles(_literal_bindparam) +def _render_literal_bindparam( + element: _literal_bindparam, compiler: SQLCompiler, **kw +) -> str: + return compiler.render_literal_bindparam(element, **kw) + + +def _get_index_expressions(idx): + return list(idx.expressions) + + +def _get_index_column_names(idx): + return [getattr(exp, "name", None) for exp in _get_index_expressions(idx)] + + +def _column_kwargs(col: Column) -> Mapping: + if sqla_13: + return col.kwargs + else: + return {} + + +def _get_constraint_final_name( + constraint: Union[Index, Constraint], dialect: Optional[Dialect] +) -> Optional[str]: + if constraint.name is None: + return None + assert dialect is not None + if sqla_14: + # for SQLAlchemy 1.4 we would like to have the option to expand + # the use of "deferred" names for constraints as well as to have + # some flexibility with "None" name and similar; make use of new + # SQLAlchemy API to return what would be the final compiled form of + # the name for this dialect. + return dialect.identifier_preparer.format_constraint( + constraint, _alembic_quote=False + ) + else: + # prior to SQLAlchemy 1.4, work around quoting logic to get at the + # final compiled name without quotes. + if hasattr(constraint.name, "quote"): + # might be quoted_name, might be truncated_name, keep it the + # same + quoted_name_cls: type = type(constraint.name) + else: + quoted_name_cls = quoted_name + + new_name = quoted_name_cls(str(constraint.name), quote=False) + constraint = constraint.__class__(name=new_name) + + if isinstance(constraint, schema.Index): + # name should not be quoted. + d = dialect.ddl_compiler(dialect, None) # type: ignore[arg-type] + return d._prepared_index_name( # type: ignore[attr-defined] + constraint + ) + else: + # name should not be quoted. + return dialect.identifier_preparer.format_constraint(constraint) + + +def _constraint_is_named( + constraint: Union[Constraint, Index], dialect: Optional[Dialect] +) -> bool: + if sqla_14: + if constraint.name is None: + return False + assert dialect is not None + name = dialect.identifier_preparer.format_constraint( + constraint, _alembic_quote=False + ) + return name is not None + else: + return constraint.name is not None + + +def _is_mariadb(mysql_dialect: Dialect) -> bool: + if sqla_14: + return mysql_dialect.is_mariadb # type: ignore[attr-defined] + else: + return bool( + mysql_dialect.server_version_info + and mysql_dialect._is_mariadb # type: ignore[attr-defined] + ) + + +def _mariadb_normalized_version_info(mysql_dialect): + return mysql_dialect._mariadb_normalized_version_info + + +def _insert_inline(table: Union[TableClause, Table]) -> Insert: + if sqla_14: + return table.insert().inline() + else: + return table.insert(inline=True) # type: ignore[call-arg] + + +if sqla_14: + from sqlalchemy import create_mock_engine + from sqlalchemy import select as _select +else: + from sqlalchemy import create_engine + + def create_mock_engine(url, executor, **kw): # type: ignore[misc] + return create_engine( + "postgresql://", strategy="mock", executor=executor + ) + + def _select(*columns, **kw) -> Select: # type: ignore[no-redef] + return sql.select(list(columns), **kw) # type: ignore[call-overload] + + +def is_expression_index(index: Index) -> bool: + expr: Any + for expr in index.expressions: + while isinstance(expr, UnaryExpression): + expr = expr.element + if not isinstance(expr, ColumnClause) or expr.is_literal: + return True + return False diff --git a/venv/Lib/site-packages/click-8.1.8.dist-info/INSTALLER b/venv/Lib/site-packages/click-8.1.8.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.8.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/click-8.1.8.dist-info/LICENSE.txt b/venv/Lib/site-packages/click-8.1.8.dist-info/LICENSE.txt new file mode 100644 index 0000000..d12a849 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.8.dist-info/LICENSE.txt @@ -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/venv/Lib/site-packages/click-8.1.8.dist-info/METADATA b/venv/Lib/site-packages/click-8.1.8.dist-info/METADATA new file mode 100644 index 0000000..366d1a7 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.8.dist-info/METADATA @@ -0,0 +1,74 @@ +Metadata-Version: 2.3 +Name: click +Version: 8.1.8 +Summary: Composable command line interface toolkit +Maintainer-email: Pallets +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +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 +Classifier: Typing :: Typed +Requires-Dist: colorama; platform_system == 'Windows' +Requires-Dist: importlib-metadata; python_version < '3.8' +Project-URL: Changes, https://click.palletsprojects.com/changes/ +Project-URL: Chat, https://discord.gg/pallets +Project-URL: Documentation, https://click.palletsprojects.com/ +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Source, https://github.com/pallets/click/ + +# $ 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 + + +## A Simple Example + +```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() +``` + +``` +$ 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 + diff --git a/venv/Lib/site-packages/click-8.1.8.dist-info/RECORD b/venv/Lib/site-packages/click-8.1.8.dist-info/RECORD new file mode 100644 index 0000000..7d771b0 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.8.dist-info/RECORD @@ -0,0 +1,38 @@ +click/__init__.py,sha256=j1DJeCbga4ribkv5uyvIAzI0oFN13fW9mevDKShFelo,3188 +click/_compat.py,sha256=IGKh_J5QdfKELitnRfTGHneejWxoCw_NX9tfMbdcg3w,18730 +click/_termui_impl.py,sha256=a5z7I9gOFeMmu7Gb6_RPyQ8GPuVP1EeblixcWSPSQPk,24783 +click/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353 +click/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860 +click/core.py,sha256=Q1nEVdctZwvIPOlt4vfHko0TYnHCeE40UEEul8Wpyvs,114748 +click/decorators.py,sha256=7t6F-QWowtLh6F_6l-4YV4Y4yNTcqFQEu9i37zIz68s,18925 +click/exceptions.py,sha256=V7zDT6emqJ8iNl0kF1P5kpFmLMWQ1T1L7aNNKM4YR0w,9600 +click/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706 +click/globals.py,sha256=cuJ6Bbo073lgEEmhjr394PeM-QFmXM-Ci-wmfsd7H5g,1954 +click/parser.py,sha256=h4sndcpF5OHrZQN8vD8IWb5OByvW7ABbhRToxovrqS8,19067 +click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click/shell_completion.py,sha256=TR0dXEGcvWb9Eo3aaQEXGhnvNS3FF4H4QcuLnvAvYo4,18636 +click/termui.py,sha256=dLxiS70UOvIYBda_nEEZaPAFOVDVmRs1sEPMuLDowQo,28310 +click/testing.py,sha256=3RA8anCf7TZ8-5RAF5it2Te-aWXBAL5VLasQnMiC2ZQ,16282 +click/types.py,sha256=BD5Qqq4h-8kawBmOIzJlmq4xzThAf4wCvaOLZSBDNx0,36422 +click/utils.py,sha256=ce-IrO9ilII76LGkU354pOdHbepM8UftfNH7SfMU_28,20330 +click-8.1.8.dist-info/LICENSE.txt,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475 +click-8.1.8.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82 +click-8.1.8.dist-info/METADATA,sha256=WJtQ6uGS2ybLfvUE4vC0XIhIBr4yFGwjrMBR2fiCQ-Q,2263 +click-8.1.8.dist-info/RECORD,, +click-8.1.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click/__pycache__/core.cpython-37.pyc,, +click/__pycache__/decorators.cpython-37.pyc,, +click/__pycache__/exceptions.cpython-37.pyc,, +click/__pycache__/formatting.cpython-37.pyc,, +click/__pycache__/globals.cpython-37.pyc,, +click/__pycache__/parser.cpython-37.pyc,, +click/__pycache__/shell_completion.cpython-37.pyc,, +click/__pycache__/termui.cpython-37.pyc,, +click/__pycache__/testing.cpython-37.pyc,, +click/__pycache__/types.cpython-37.pyc,, +click/__pycache__/utils.cpython-37.pyc,, +click/__pycache__/_compat.cpython-37.pyc,, +click/__pycache__/_termui_impl.cpython-37.pyc,, +click/__pycache__/_textwrap.cpython-37.pyc,, +click/__pycache__/_winconsole.cpython-37.pyc,, +click/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/click-8.1.8.dist-info/WHEEL b/venv/Lib/site-packages/click-8.1.8.dist-info/WHEEL new file mode 100644 index 0000000..e3c6fee --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.8.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.10.1 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/venv/Lib/site-packages/click/__init__.py b/venv/Lib/site-packages/click/__init__.py new file mode 100644 index 0000000..2610d0e --- /dev/null +++ b/venv/Lib/site-packages/click/__init__.py @@ -0,0 +1,75 @@ +""" +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 HelpOption as HelpOption +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.8" diff --git a/venv/Lib/site-packages/click/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..118a1083c6a5fcab5fb6dc51b8066e21f651eaf2 GIT binary patch literal 2643 zcmc)L=~mlD6bEnv-fi|R>>?0$%)YO-Swcd96X44|oTJLpV5`yA899VLK;NaW5i0@_tI2A1 zn%rh+ZX&m!TcCv~Ph_e&u1SHr=bP|&66gmYdb{d_AG&|#D+$?0- zS#&G3vRlz@(8g{<)A%bh10qUC_nuLU%(qyBpmDJ?tKIFZ8l|(S6Xz z?nC!OKfB*~=MKOC`yF}^2H6AXAsAv0qK9FaJ%k>C5%w^86h_%2=rI^$kD@iu*kkB% z7-wtFdv^jR*yHF)m}I|qKDbjb#h!4c-5Ho+Pdc;i9L%vlpyy$pJ%wI?1@<(05f<4q z=p5wOv*;yQV$Y$MVVOOTUV#<%0(uoz*^B5kSYzkV>#)vVLT|tZd)e7^w_uCCg5HL0 z_9}V@cGzp^UD#!>qxWEsy@B3`efB2$01nt&=tDSUZ=;Xkh`ob8hGX_FIuCjF9=ZSp z_CC4@MfL&u1Wwq8&Z&C_XY3>NIh?bP(I4R>JCDAA3w8nh2|lrl=+E#OeFB%(>1|~8 z?Dtx_=-B2r%~qPBDccPkq1`-(72nfb->PEC_Eca?VQHmjEvyJlg_dKNG(QLfLn@(# zzUCU=MEXhEq3xA5(|29Nvoy!{u(2uaAXM68)yrx3o@0L#nvcE6M(=7tv%_hnl?)}U zv?2W}-uXI_{LKXpX@r{P3#EB}NSzDq$qp+xERI_>D>!)BHZ>a2R%yH*_{u0bBA5QV z3BLyjki$~=Ie;vrtdx4(lzKF9XGK)P^{eOJyQ`*@K&Gxh{e|d zx@n{Jz)(uJgy~Bo^l7O0Yd2ZGhC?(ao#e7#`W0KXlb?KPz4hMqT}bucdE`sJq~&%L z4C`gz?v+s%Sl5Pi^|`#%WU=PwMYr)`I{jgamxZOyY)70*$rJ7PVk?Dbq- zH=oub%!;pnw+-CRGPjBf%chkluv4?b?c0u zJ+_@&$!%ZFeyJsN-SSOcuSM~!3Q4bLiErkJj8eoX;uHyrBt?pXUht59J>W`as1{%L z5!p)7M$t~uLD5OkMbS;sL(xmohfzz5m&2%JKh?gY7@!!W7@`=a7@-)Y7{h>ceQ)S1 zO=?s-j)8~6@k@rI zFlw<7AE}bdRIx&_O0h<PjP@zi&aA#XL?8#M-;~td5Qu> z5u=vT^_MRJ{m+QJqze@PTo-pA?(y@Z9xjFFfA=5qL4ar0c)0XU!+E$9ZtxJ;!6LpM xLc?(ugWtA<+_E+wOnRR*QrB(I4s|^jJlB%@^%u$^J#+O3MzlHG^uPZ${|hiDx^w^l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/_compat.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/_compat.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39a2a517104002f489d90daf0e38001379da58e4 GIT binary patch literal 15689 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 E0UHB#;{X5v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/_winconsole.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/_winconsole.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..027bdeee1d15099e2fb0a98504506cb89d69b814 GIT binary patch literal 7715 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/core.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/core.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf06acfcd136647d794ccc555316992fa2e840b3 GIT binary patch literal 90469 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/decorators.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/decorators.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5fa6ab7ccfcb1ac5f368333ab82787895043702 GIT binary patch literal 17693 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/exceptions.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/exceptions.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6217ac5c36eef347031f394e6ecb396341ffe18b GIT binary patch literal 10231 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 OBIxwuX60|i2mcGDz#&fn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/globals.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/globals.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a77bfb2e7478d9994b964336d3824dc9a32d866 GIT binary patch literal 2391 zcmah~-EJF26yDigJC5U|Nt)86(~=(xj)bb18du5_nf&m)c?`@U}3ol39DJ?_heX{}d-9q)i1S) zw)Twhb$%IUm-sdGCK_9a%D(vq*k0jp!MCfN+;^JSUqT#Cr%AGkQ~{GO2~1(Ou&rVv zj?B)=m;-wi_81PhXNgX!2?Z^Jq?QO;gxaFC8%8M&SWHKP&QifC zODUs=?3fx=r_fjsi1ZB~IZ;%N_C;XmSgR>z@$q3Ov?yJIS4O8w3mQ!mAU`s>Hwmc` zGZW1P9AJ^P$Fn$S4-=NA2@M2mokWndTBHWTj$#^wES^O1ghnO>i;&GD@Ht}0 z3LN|zi#Y?Wx^>f4G?}I0MHV+`dn!!W9u@`CN&}UM;d#ajC#@Ep19k|JaV~hfO+RUU zl>2WdOtUG?>!(elF-?U*`i5OS180aVFDg1`at4&Abl6cbY=Ld8%ImgZ@lMY*yr(&f zBpb>6?gVf@W;2N-6%>FC9Hv>63d$~W(iTT>gZE~!iKgPN)=Cds*3Q=c%YUGqywk<> zKxhDn!CgWIyq=7m=0ZkH<_9bVl^9ro$tqCD!9lii#~2-rW+r!^)puhqj_grcvIzZ#@Q#&T}~!Y zna{mb=LI34<4|kf$%o&;?F&r!SR9sQm+4&=o{giWSHM-L>FZ^9XSKnAM}Zj(vO3&o z!FyI^Ng`qnf^r#*-UuUWV5*gcasv!R2mxv9-T+=0tDCUxqI^7 zJuy{t0FOyzR6?bg3#cZnXY~g2KqLOp4tUROGWlOM8Li-pNN@!a!29_&< zl1jhMGoth0u?Rna!6_g+Sk#SE_zM_dn0vpHN1%0f_1#ml5C0*H-9Pzb7wb1>vM79{ z90c9sE|WMf2sO5g_Ix^)Yyz^fJ1&y>tY%PxPzucZX;Duw1KmMg5c~#JK!`rXDzGL} zsRJ}fEL%3;k+Jf^OO3S~oo?}efc(UtioOONjPZ5hHD3W;QgSYUPT*`%gmVkb^Zc#U zi0{_j8mYSaI{G3zP13S`r@59@&2a)!rk7wVTQs2-jN=^X?k#s8es_1U{q^1LZ+1Ih z_11FR0sOy3i~^Kqt`Sg&px(BC?bY{ckS1Cx#%%zZKT=9&wQmztWhQO7+Jd7i(W{o#_LXj!6UNgmU(rA;J4b_^R;Wk<4PJ8~RGfE3Bu$XPCTX31Ud z&aS>0N+h#%Qd6zvqAJo9=%G{0xfzddg!GEdTWm@2I#5180evwqJ=N%^Ss~8 zEXgQoZlyHee)Ij!_w&Bb`}e&)Iax9Aw`jIjzW2Ui{2O1gzcMnH@I)V*hT$7^!#91a zXVxwJ+C97P)E$#$POs1})LqFJkT2GY$h&^ASL&DRWyzP2uhc7&FC#xupOAb7`D(pt z8iCcFR6mt3Ow|vd_e5{Hf3Q9yt*XdBQ-4PClgJ;cKP&kuWf)i=(1-3Y9_*UEIFG}ZF(zZ}G{n+*o`ZEul`is*3 zd88+#=9$Nqf5?9pHK(NJ1^+Pmp74*L$E<%8*xIAD1G@o!$0Ald|>z| zx2^giygl!Gc=Paf5N|K|b9kG>+iASL=%2#dDZHKWts6$|rRHzihEch>(uutOz+dYH zUKBS~9QfW~E%us`*K4Zfpts>Qz1Cp3;SHNn9C&Rt=zH-B8~eS^(&?x&7{cf(2eB6hDC2nJA(nzxa}7hGQKvub1^pn5 zIac56gx-~2r?u)0LQH6-v%C^0uNT}4dfu7#Kvg;+W*@c!FWwji-bypX?84=<-b&CL zdT7vZ#xV*!RG@zkpYIP;P@At{2Lf-{Yla>+A|9lZm0D@cW_s25V&GvR%8NVwAnmDw zW`rrl+(!IwdVZ(fMnlXy-Bo^(%gy&`-xgN*UG5Cli4QdKWMj0jd06y!TYFJWw0n^?C1hQ|amS zo1HMm6ZjRh;DoMk#4Fgh8-sRypG$ssuon8wxHAanJ)ueLO0U!Ja6veg*1!izgdjpt znwlSOa6+I;C6j&i{P|bTA$fiO$LGDvy`CqHNQUSNI-K9z^HtsRS54@tgM3a@Td0{y z!4K}P1;`ZBokg}3ruol-bOs8h-){Ps)$$rC`dd6Plue=Rn?tTSE2%CFZmhLdbRk+) zq~aZ(GzZNFK)!fo5b_j}b@S%s>rK_{2XUYh^H$AH9B^=yR6_nVqG8ZVTor&P!|l)slMu?rX@otCm_CSv$@{8TE;28fm$se)g&HsoA#tqF;JYiVGuq z+q`Pvi_SxQZ?&v`G;(&_Cx&UTe_R|n+h*RsylSY|(sq9nm;B1M`H2~qM;2yovAv(R zy=~}LKQvV(E^=if>!EegST?Z23iG~u1QO@BfzY}xd%tMln;0*iV6Qe2bE5eO8}wf1 z9_XBKfo*Os0XD%0*kCzX008l2Z>4O%$L;U5J1wE{=xoKqUnd4p@;nF}@frZn6ZC9? zXvrjN;jr0SB}URo|}PQ=0dRr23= zZhcg<60@Zaf|Oh2I{xvugy$JN(d$Syjz5Iv0ScWN89T-klfSo(@Q`D~)@nta zH_;LL07^fUv}P`Vor=Q&j;I|cHZn=&8h1bCO*MnD!HZ6W#r~P`#W${8xbrQ*O?2mj zAROEq+_^j)UTwzBJ0A>M&EB1xL4SB>*cqM^vDNFH8{T~*P;dCJ-)T|ErD+a!iQ8xg zacku&S5ZY`n3h>GOIFpKGB=MmG@Ufa=JOYO{6h5ByzZjN;rVuu?aA)49fy!v#_~U^ zZkd`v|G>KI+%VJ;R7ipiwdT(!W}{}Qqbxj-)u>tIzNlR6b)vX6=nvnzh4+ZVyT+#X z^a+g{D;~?{(JRf6f^nsJ57crWN&y$(UG&b^s)|D;W}K8XxHWrfiY0DyI1EBRDX1n8 zHYqA-0FVetLAWO=--Ps+BT4LD5GJLx-cKCPv{uk7nC4KHx|bB>lZm;mmuv4@ChB^M0%qgd0R?*V4)R)i?n`#e+ z@m@O34(1Anzlmf7y3@F{WsXczsygmlBj}Q(SnA8ftdR+Xy((?>JJ8uTSR?IBX_>#* zoCP6=#Q2=wqZH{x%^sK?=lf-pBn82hF#+feC`ZFyCvITU15Qs9U{%&PZO)qNJWACB zN3``Yb}L@j>*II$NBKg+ll5`?Mkcv1ni-j0&5wsi;Ic7@ogitJ~T!)7Vb9x1T1rd z$3W?li36y0oF$cYfyN8miVKU;N-tQSmqS}T>n%ZF^atVTSP-+_?DV`&TT2Ap8wlMA z$;3Tq4)fl%Wo!}D#3nRBjl-=T034sWyEXu>L)j)skGpt5)M`TMjtIk4!6}SHPo&tP zuGncpp7GQ$({r5+=I7@{tvj~_#9F;@!5fN7s6_z3ps5aPZRlm5nG4pNoTYcVzd?}@ z%++KnZ2X<9a_+1*msNlC>kQW4xbw@$nM;SbfMqoM>3(1EZs?tZxRXh0VI-)wa1(4* zpu}5OXGu$LQjqgVrthynphb}A0dz5(WKzMVQy&C^spru)soZMz)>8Z`$c6#2$SsPZ zi;%Vs>{yG{1(xM7t+{l1|9*WRjUvLBaiC;PnJ)f0mSt8z>Ql~)rQSqMi`Cg5Y5NkM zsEs5r>R?fr=2N~M*j*lb|YL7`p_D#3(bd~Et9zx)7- zTfK^QP}9IK6EJG4{v^!TN#6uzA5eso6qlfwt3U%j_RStFbrT0%8YPY&L@~g>MKwa5 zL64+B1te}2k>?+s4&+ba&A&y4lC7arGq$$*X0LAwAF8cl?2L*6G^MTbs1&^w7kqP6 z{4q@TpFk1)1TfUKcid6Qhr&xBd9*WjN~5B1^fA1d*;_V(uDNZD z98o(S`vsx^W>X$HNGqcP(ut9av^v6f8(m(47YMLKM@gok}Je(6y9cHVlA9ZxAjMzoW#C0ti)&jX|WL`!}#%iQV*l zbqYBlMRl3Ex0!Ia6}MG=6-liE9Vh6ukQy5`H(9y^ z66!+8Jh65PBe8kH?@9|2>iRFVz*r>5@Pf1{pv{i70r7QV2|a-|b_8-a|JqCp>x^x| z80C~PtZoV4GP-4sB&1qdkWEb{g!mf5mm1HiT3gdaxL2w!`r zzc5eNDw^spVRtlT@g$Q9$kq?q&9z>vhqhr~DJbO!l2>ai|7x zszm>Qx`_IKVOF3*S3qqQ&|AekhUcU;V{T5R=bUz^*&3o2z+0f*5LR}h0mf=*ClB(~ zM&s@plqsoECoptUx{*pma9ym_NtW4gge3Oma6^4Vnqd54pyG|hSsDy_Y5|4nLnh;y zOOBHjsCb!*O)i0rS*{=Y(D}E8&R8?dzjXPBW_vO^$1P2f)^yv{jTBLdY@i%8qN~RGs z+6Gh{q)?)eT0&8@w#MD{(K`BQ_l~@4mt=#ur~iT{a*-GsF%D+)$}vNI6P5hLm`=oK z%-EFE%w@@Aya>CPtB$%OYHK+<9MjzHZiF3P zwbh;2frKe+n_aS6QO0v0!Mz}o#_)^i@i9tE-7=&^8F|P~mT?q;h6?*#By&#eRM|3T zzp|#xJvJU!67e}Ev;Sy@qlo;0bLAH3=C0moOZSy+1U9m@sxcW;ANTc(@TVF;yVq1&SlwpB=aJM>g34*2 zURW9QAQJa3U6}D-(O$OFC{R4j;DM+T8+_V1X*&>8o7346=QGGKg*R#w>f8Kgoym8Y z5E}#x)JM#Hmx+Ku;aefqn>#G{kjZ!|k`odq)BQ7^h}v4oJXSo3c?c`+;eS%VB{rKw zlJS4W)wEj>MgVPsn_bbv3Mo@qG_7$Yd(Ag8ZO*vI@zMcLWZIQxT+z4ejC~#1?WDjM zLZrIrp>87qjft?8g7NBPVcdfM!6OUPybF2%>~7hbb8xNrv`tN%4`Af$UFB#`-9PgF zfAce3Psx;J@7cLLNOcCfM7DFjS-1UDfzvHeBLv?&*gvi9y8cUk2{pw4S}=@(e0D^=DCX zI5@~J`_H4D=f8l`BfHwo`7femR>DcAld6`OJTEv#zl`mrlX0N+)S;A0gapn}nmi$F z!d9;trNIvvp^)tzglQOZg7rwZzgTzDH617QuV${zdC$8RpO*MlAP&N2oBA=nsXNgS zU802?$w*BvLPP;1DK_yv#Ix`z6u}s4cksc>*RRQlnV(XJRC;JcHx+!IoR*B_cT~_~ zZ&=Di@q|CagZzzwu#%7KGVDoD}$x5KWG*q&VWzJFpQbuqsmKFtcYY5#oWG*O5sTh^iDF4SOdq-o#KE$^)C;^k5T`}z$kqNM zOMExK0(;&E(+b`|r>D|DmsrEnQdxZoei$jmuapZ)*^)X$yA_re1gTs>s=~s}cfT;t zZCdBf0aCH96c7#|WH(qO{VS0$S6$%1y1LoLgGSBpWm` zLn|rBAQ}GgOS{l1$G=HHPIL&BhV2&c54I0|h_rkvz`}3JC$H-mSY`oV?50)V6 z(Iw=y{Ck_Zu>mJqPG&I^=O{xcDWV>dPYnchu%i!3BTGUt7K1=g(crOyl?r|Fk-JrV zNE_E06}2g`K8u_qzAae6s4I+07md3YZyQqM?y7+Wjhb7x;VFRjSZHoyt(SeDj;1iU zpOP1Rz=$b$i?sJ8oRGSZ04ZQi0t#z7p+r$~$^v+hn>ryPuL|AItcAVKY8p(*c&R3S zDF&Uvvjeg-6dHKjJK*DdB*^Z29Un15&%3ORk{0}JXxj`o7!Fxn6eDL5ezi2KjT;o? zV=OLevqv}DZ2~PWlF1eq#SmIV3?uKul`X>Gv53H{d@n^n50eSwPFwSwCONEAKu7Ez z1W6-}1!ON_e(Z*hDq$z`ShMCu&1`JBM_r_{D^FH%0q0%;JP zkO~rU{8bF||43e-4cT*I4=t@2zoK@Frkd&A`*vurLYP!}1lc;@%1Fs5Z65uFjn7&o zlQcvDkU$X-2xcJ>E7^L|A^(VX#68)1YUOFD+uE3AC~#!avO*4lWai+bKLa1V4Ilm2 zQXjq1MSvN>i??BiLEnq6evE!cM!>^nF~+VtC7%{t~SfISX_?m9iK&tx&+#lQ@?Fo$QmVIh@ z^x^XkjVMp!!R{l2X|5SwoX?zMzIC3Iu-ilC?u_Tc0|lJuur*sKKzSS z++9WaCpcC=h;T=z*8$Kr2$RqkwXL|y7Gk!fekCEMr}>pC00F}y^d#IEKZSI4}s1(`_G#g%6fRv_J!WPeiB>^*g{bhKyQO1iDAI+l7 z*(!_*aMoEPhoQnJ7VLgRogmN61}=6WwL}ZD7xqX4GRO@)5o6jS4JtaswObCDqE=)g zpoW(F^%)9)I~mtP0KBn>YoC57PZb8PgiV#4h8T_nlcXFVZV5vJZ2lqMYp%w8?qt1y z&BY1xxZrT}5j4U3{`q~6Ejhm`G7PAD_962Sbgj)7e~p>uH)x3Hd<0HDMrM7T;Xrs_ zk?ugDdSY%_z;!r#;2?s_2yUG-+;-#eK zXzmVxg^+X?bqqT|1-5vo9PO?J#R|WS@nTU1Ra)(TC~NbZTBY`thzy;~4`6_>fEut? zc9_1A#KpY?I9f8C7V`W)D(Wsa5`p#od%20afO{$7CJ;NK!#1Pi$3Xlp{P?)0@bdq$ ztC$DD4Bw@&-3KXIM`okd#ALvQiXyf!JyPg3OVL0rvL+bC4rBpFS+mW6+Q z3uVc(4NgNwXi!T;kd?edr9>QQYK1vrt&(Of9*g>fiO_=#|A4Ren1~;3p9DXk7nmDG zpOHj}3x*9pngn+$rdz-j35#JK%RKBj*5>iOgd%&C4*^|*gt&_wY>tP&2|T$<^`Ch0 z!EioE07nBa$rkLsEqDDd@rFYt+W{qihDe|>D&V34Vt+p&tKkT@81k?Xr-zRf(Lu+z z-Y_sqIZ`AXu%Zi0)e*nB7%@WjV&os>RPGklpO2gv&&9cjtiD{OW&^iEOo2w3_`(DP=mPl-!j5Q@Ug*%L93}-4_63(^_C6GsM!^uxfh>>SZ?vL2t zM<^YLqkBIDvAA)0+folSY8c;szbp`y~_U_n$~hXOV$d1(FE<6kLPI{!u!W%nGCxFGf@yv;d`5 ztS%q$q2hFFg7iv}dcM#CSp z8jW4C76}O4;Y!9)mj++&Gg)WSLy{D3@*ZyDTzU?^&fifWFMZIaEY@>Kxx z2h5FypX6p))<^PlJP~2FRCTP`6O7uPF{fr=7r;Vzb$WVY`XzW2j?dIwbNZC@sMXYu z&^~eDn58wsh*2`p8oq!O&R0UYk%t*w1{}O#Br%; i;vX~#{mTm^S-w(mooVypg=6K};^Dce*QdOx(*FYI3iC(+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..621b62df8c9fc3f9af638313b95e0257e6f27d9f GIT binary patch literal 17060 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/termui.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/termui.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47ef9fdf56c53c50380a5cab145ba46f700a2aaa GIT binary patch literal 25652 zcmd^nTaX-AnpS1qy1Lcfx>(luqLI=XdDLY~C0XN(rftuREK6g}*e#FMzD!A;uI$R} z?o?M*mQQA>RlU_a%gC`i0bv+m*o7FIkRJ(x0G42Z1(w|fCI}*c7aoWV9*BV0SV8bW z1W$qozVAOLGb{UIYl-EFmg-bi<~jd4=Rg1b{3l#63HTvt2$y3@^Rxt_rFOmjxAYn|Ed{^owUp6ndx9&8?z>nU6xY95m7eYk$4`G{Ok zcMf+SZ9Xd3Gq^s|JYp5R%B`=c-$(DWoyWS5Hy`Jndr!FgKew7sdPkdI#q(p{@m0$^ zzEXU=;MwkhR|@Vy_mKODd)R%{J>q`FeawB_eZqaxJ?ehdJ?0*FZTBhn#HRD->-X*uoXuOi29zML3Wq@^BQUKI1MM=qF`V zrk48+jOlsz1=M)fZKF*cpVQuPfqrb2eaJ7t&+(O#=@l?s%YE_FlKYZ-0d3E?E^2bl zr@bfBu{BI>LeqHAeJA7QH);d_yh1HAFXE8@8V2UstXHq$zUqGK(*y3e-S42^a~Q?N zPc8Q~_YyGpoa>=QUD};TiGMO;J?;ip;B}1nvU>$Bzu~T+F4usg-lL7__sgDhR)q6^ z^Nsa&zx(No`-XcJqk5k6cE1Oj_`drlX7qx)YDP#}(qnxQ-!BP{^(rU*ejT`Y3#+-{ zUIU~H?wYBOx^ku0l(YRNdoj31|J$CTzWW2fdB?pDIPE`{1ElsDIr30Q2~v+eH0WQTJOO=s{NNhI& z?RP_G)w`@zpz!Na<%L1#wzt#{I)Pepy%lHBVYTX|wZLzCxSDPUz1yCOmZD*wzbD^z zl+#_*KgwQvEx^s%o6hF&ir-;{eQ&E^6>!7X92Hyd#gE+fLw~vBE%jBjeqSS+zl{y9jCn>mz3wm z6%4}bHLF9f(+M`>@^WY3H7B~5eJ^sF<@V6&H7grye&od!4A+aA)62?VU5l0kNOQ{k z0<83j203G%XvocdX)|;%YknmCBoC##qyy=7v;5?ZbKQC|u4=@@Rpmtk)oXJp`B%iJ zgwG{>LaG{2LZMUGvPRau!l>{$DWSNa%*vAz`c4?ui|XsBtL9Mrje@G<>%m)>=5M|m zdMdp6rq>H@2RASF`>#8ZbMwuh?R0J~dfoobzTZFN_rl2Obk6iYddX8Sxi8*qcl`Fc zDI-sH2Y#bJj1R5(5Nf^g1wD^$LMXvP!KxM2v-rNUSf7Z?q|LY*4pvtDJMnb57HlL$ z7Ec&zGq*uVAh-}sKw66H-mVfJ{wB;v5aHs-sIXNXL5;3YstcpCx)2pcmB_kV#IGul zRJ>P=N>O=KxmCGa{M`Bll7;Qcn74fO!emTOuyR1?9tc>TlH^Q&aia>33 zVY6t@Z5B`453D*aZ#=L*#FVB$%|uhL?WswOB`)6z{9at@I{ml=o{J}vne1O$2~^jK zk{Q=0)M+$OXIL~?oMmy2#d9oV-MC<~YU&wW#WPFG1Ha=MTwlPga2iFSR<@2<$E<1V zu%+hl8_O=x1aS!k@tcbxh&zc3AgT~qw}76NBG6?6NuVlTjS9Ca*YQ+nDlYe&u2-+B z=g}rE`axX1dhIm_6g0yd6Kf8oj8ZS-SKZPb=f|zSiAQhX6Uri5PgvEW+oqk z^n>{DnrsxF2Rb7BbFEK{zft%NYo+KG-O|U?TT`H=@_J3pMb@Z10y?%TQE^llRYwye zYcx43->q)#8bza}=;p`* z)JcW!t!e&#zc8F0RYudOGxL6-_fEMGmDi`#f3yl)vsPjA`JY9r8Ubu4-V*y=n z?H^4~7lH?){nLf51Ec*vv%>1=fcj&M=8xYmjHXBX*NZ>1)DvtY{b2k_&mReVki)d| z6d3Sr5#FKg*aMJ(4a&A<%^J47xaNm8{yVm)ik|O*H*AV|E~6c-Ig#CVdQ&$3mOZw2 z?I^JID((PicN|EX#*|dQx`O7?MA;5CSSY`xXM1^QhhES1d#kq7!)VY<4f>HC`l~&s za~d`MP@tqk+3-6Z3?*u>*?xpZuB{wD^e~2b?@oKZB}%eo}C}6eX2a0vTR=Z z=M|?wc_ygfAoYA2(xYi%B%E$!e%M0EYz;)%{)*iTG$!per{DK_AuuY_HiIYD#{Yom zUJ%)<{%sGFj%=Be!R4SA`5oLmg~cGYJU2I-jML`XG4aE7gX-gOA~oui=yj}zcvHEXF*7%JEc zhVY*PW$T5@jark)k`|itTm@0em@C*5ggofDM70CWF6_ykb(}k9m;G zwzVYDdKeT)#dU`4cEj`5Pw$ve3R^IqjtVFtpHg;-6vCKJd{+g7KE&Y(&Rh__H#EHx zT54dq)3!Ez?BQt{OMTuxVI*IpVZ-(()d^k9&)XLo=ThLU)-HUGWrDC5QnK5^kcMmb z1o_e!$cvi%uz*-lT8n1lfSR({o`7E50cgE`-3hEbbKv>u8yoNYj~7a#=VkjeGZ!y zdbjjR$%6d}gAAs98P-8mSt-Io_`oXgAKJbd72N`AmT4PA)w>8a{iLXMzf04tvhcvN zufV4$_B!fy^atxqz9z&bR|jxQ(SC%pA^u@}@cZ6yIdGJFHPN4O?eeuNm+2rX+HPiE zv9*FL!cyO1A?BV~sQZj$p_cs^k3x1*fMr@N9WK?ZL*+8AH=i^j;FS(tj__NJu~rL< zn_qdy>w6GHv@6DmYO^jQnTL_#8ErHS1~yzc4}O`w0S<@MbUMDl1h*_23Z`?YC)NeP zHC%)QTzKKg!J0KyELsOjWvd1kjMqh6mGO^d6~Csf1GqX=d<;GV@ALVzHHBwW_$3e% z7ey@dir5g_=OFYgMm_o^ZS%uZn`l72Wb(_*i#- zKBS#py;pQApnLjp6Qq0Cy_LJxz4GUUdzH@%TNAL5ZSX)fnh+l7XdZ}apm{5y`O$=1 zTd%5-JGoWsy@+2^`1NPqDt^t$2qx7%+}*cc#J7dJhaxMQbYX#`*BSEAM<-zmpM))3 zRKFb6!e0{pPpnZ5yfo_!OPSrfoiOdWp%6)Xfjm|>@Fr5V|nqGCm+ zEu^}!jfJ=}0}6GFC7=yDXxg5)3PVY4(m z+uJPtkj3!qg1QXx0@bFj;9D!TVr&iL68LZt8qexM=>>6N^RN-~MlXQP;K?LU>nXSB^@zDyxvXw;*Bl_5z+2 z?-sU-y}77{Fwq3ULa&do1%W$9qDj+6YD-PrXRPgG$j;XbfM1fWtf}t4tum~bax{H! zhVhcmi;Sp1o>raTLI6gB1*t^cG&mY z{)*og((S{gQ?%jW9Kh_~L30^Fex zo(QN83}qr!(rK|7!! ziLf3XS-mRsHz?{o*rXr99>v;P3t&tJ3&m=p{nX~?O0lEn{zyypWXjLQ;Fsm_QOoGY#3j);*rv9ak{9wc=o{h+5_v%gJVz6 zVZdIe9@_Ser{|U(RS!S3?WgDb-bzpp9~5nSbN20Qr{%_bAJz}VH4a$jS?zee)o2Z( zjZos6I8$Eam}omf>}~Lrx!(`Mcot2&OHz&aiznfTci?_u6K6^cQGGp)kpNLZ5yEun z52INMy?$KT@LhCQru(kZb70VSQD>>^_m&W@>4#cO?Z+JXN5Oj#9}!cGU{jcM3S9&( zVGI^WGYpfC_QRaC#GtH5IJSmx>=Xi*#nHae3<9F1PxgcS%FYiS-7Z?%3jPFz3!`Kj zDZ)(*-F2Owh>s*RnS>>Uhhg+cg9t7noL@T(x*jYuFf6uh;L{UD{N*q_A{$*caKfma z4#o)(irzVxl(F$iRWg*wWa zMVL%95T+%@rw|>bnF(t0=&RVzwM6G6W3(nT@8TLzn=dF1zDFP{RiRUeQ8_h!L5g0(;GC zJL~|FGrC9`qi<)j&u(`RrL%+OTYzeB1ie#{?fM}^lwP59-ojs;M1Wm!VGWERuvgGC zG&m?Xt(ne3qSP{qWiLXcjs^#08Bx(eU>O5~fN{)t4RtPXa|5U+Q*;pmGt5ek-%cHA zAP$i#tQFcI)Yj?faRb9p{zFFbWdxT^RB^y~_WZoQNd!rdGZ{PRW=`Y@xHlvf%}Zm} z;~!Uxk6{<@e8>te1bQO!mIzs()pc(d^HvY668eRSd<9aBk>qSN+9=;IcT9UuoUK{k*!-kOk(((`rXzx{!x?Bd` zD8Ecx2_OhN;vp0-fX+!-&#fgZVRQ|HFAb-myVdK(>9;a`rU*p{PP3jU$Ut_xz;+UR zGHW;#nQr(Pp6Fz_7Pa zYpX>-nY{s!K)enZLnH}s*!A3mBE@=6drhXUiAk1f$9hP%0t1VpmB|M=Y?&p}YZIcA ze9&DCrB_eA+uQW}eNphLy@v3^seHBkuwU&s-DMZ93U*W)R9W0OPkY^a?Hvu9tB>xM z*mCFkn@WgQN6KkOb6>dlNoARsZGIW9HLi_t3rt^(b<8Lty_12By#t;>2#Z=5h}7Fy zTxgBFbY`Ty^baepypIN8%=~_%ZlnDt&1n?jM4;Fh+j`B+g;YYMJ?M+EmDO_77$u|} zM74xwG*D0sqD7z`D8}8!tVf3Jjx`^9!ChwkP&(@i&V3_L>lzc|sM>u?R(NR)SwKg+ zSCQ<6kPA3WiYW!vv)2^$z;^3-=aMAopa|G)l44zrBbg>4!#rA%iq55vkn=l*3-pr7 zB?nE57o4v5yh#k>J?B~{UdB93D!L)!l|mKkYc^%D6d`tEgXW@9(;}!vcI-A0TRc`~ zg~05j<)HyWEoi4$BaNu$(k*BFm!ltgyfh-W5vdH>xI=pn+f;zw%?){vuGsIGzilF# zX0);*zzwVdhCa;TgI$+UPoQ-LBnAszv~7MbT8};m_a3>kj10d4m^%^E4>N)B!RyX* z%Zw?EiSBv(V&;Hwg|N6HqI#vhk*|>A z+GE!IL*E%<8yXL@qWzjoj(A~R;0b~Pl1Iom9Z8OA_vW?CDSwFWdO`0@zRNwj6Ct`M ze?!uw&cE&z${CC~wtSo@Fb4{e5P@iKPMCJeUVUmaEft!uAtbeho^Y!rVhH8|%>V+D z-+7&!!&s|@uEy$*PezP!5)WHt6473G#Oma^Cb6XMWUm-EG{zwAbCMtu=6_uR(5(r?eT%|IJq3nXft#dK-zi$3aED2 zj2C+u3F~kDI(1xUC zusovcxGLpj_yoFOV=5sfXo!EE5sYTL0E2}6GXx^lpSN)B|&CvyTQ0%+44jD zr1EYDtZa?;$Utf7?Tc|3_RikWhw-1IEM<&zsv{*kx=p5V-t3r|sJog)bhf@dY{;hruHL-yxnGbB0{BfV;5Mr4w^iD%HSXn{xz|L(@ZV|}>-NJ>= zeaEKeF&EocUnwBzAKRgB=@;eCN?0&#bVW&Cd~;N|S=vHc_f|QrTOMISe^GWT*wobD zWobKswn)?(;nW$SGIa|_2kw)+HcKzR@N#Uq_&)#g1MB4^p}vGrUtEa>kmhl@+uA{ zFcJa1c!q}hIs!Qou2Vduqwy}i;ulW{qVYD@|mOMo61(D=Mg4Dg z5_P7=pj1trhN)9U{S)p!)S4cvHDPKknpzX6^@clxTC-!dYNpnvsZ~R*p1U8l4vf{B zG_~%TS{&ie-GiugXsp(hsr5@!YYMe~*L?)F4v*EsN-=o=Tl@R){6Dd7RON5?(R&l4 zX*rE_#Cd98p>RDK((|X3K*&HmLD{Dc&3$-L+U?V_kRe3v{UHkQS`zt|gJ>cK*^EMr zwu#q)FvPwOcAOxJO!P)3dso`R2tcSpJ zX%91kx3H%N)G^aQ4}R|a3oo3upF7Xbg*ryH`s#Dfy@U}7>aXjBTi{XJ*bIw?X2;?g zAXARm!9JPOAva*&u~(Hd)Tm$$1QS~=fyG~fsj=Vs=v^K_4T&xpAAjJBM!`Y@3C- zYbKMz7W(DnG#iM&!u8Y)K`+Ftop^#{hD7SD`Pe1X%h^Tdx`aKkaOsW@+$_$#4H`-REe&_4ugH;+-V!s^P!H&q_&W3m6^_D)PQ1NIJ4|WXV1Uz;u+I3oHy-P znNHsM?rU&?=xYnRgQJpuC5-R|eWiVvKJD|*OJ_{5&-Er1uLJN}6!pXTvuCkSy5X<; zeb4osMxa*D^4D1kIjx2nW{^fngHI65gZW= zh(w{|RcLdFWkGSyYh8XA2+LrEy&=HP*lQFzNX*E)3F+FjN{~O0tg)E~tdxfbfyx>} z8W%_xngqqaWygijZI*poJUBIm9=^x4Ne*?1DfRGhk`_5I+75eoAi91IgeZ)MhalCV zFmf=A=6HB0NWY}PxC8gZzs~ibTAdrCK24L{vQEi~J`4oau0RmpsDx1Y8Z^Tx2bN1cddJj7jX4VV$r|3=_%iTjKvEq=qcWpDqrChlYQ?$&SHYalPo4#d=-Uy4@JF}C1%D|Ib!OH zM;O;|^ha`~SqM{7g_uz7Jr$=&sqEx7Qe~jw^;mD z7JrQe{X_Vg*oNKiyCT^d>g(UqVSNpi3V7*FtynJdSjrPfg+3xzN9C%9JN!(^=P16n ze|UsN{cS)&8tQ3$X_pkR<&WRQ;d($0AN~f zw#lhOj>57s9K>Og4t8+HIDrYM9ae+5Vi?yL)SR^;Q`7DVLt|X)axu5$6%O;UZGwX!sj33Iiy=2i3*vD%eN80 z(>|eN22qi3DF{y>K2TV}k)1z}*a6>IfQ(Qcyf3@OPw>uyddd0k7>tC(Q*1-xEyG6) z?RnmsZxQ84T7d{KH)J@FWj!DTp=H4u_bwq_okwh6JJQV8LYtwzihUv2s)o#Ps3Xw=Jjplkb+yR8NER^=Xi98_zg{lXMmkLY1I*p34w4Bo`rQ$8O_Ee!*gJh9Vm! z#EKZ?-$j+(TC3mYgKhj?5qiEsZYQ@Ejvld)sQ&kH^`P8{?nLIqU|fYS#1kncoY;t` zO*+t0h*)+!iDkfh4dBznHSRky7NF&TKm;htWL}Gaegzk4E_fC3rfSOXrBBLR6XsxWsb&+JiwMKs269-L3+HQH^`XZVlRVWc?<3oQloJ=1xX{wSxKmOi1flP zLRd`A(jd^0Isw@v zT8rS7!RPgNW+IFA@b$*(lk}Y%XJWSKHfBTK=%s*d-<*VAotkj0bpVQJA(w zh6u}v$-#;00I6m}I~*eReP@qZtszz^@k+GK4LcFKc|SOLcMLIwfuk$Uzqyx>?A}!t zPyz~Q2QYJ8UR= zmxV&0|Na5=g!+dp{t=7cMM1Ub^T$6y5tli$<|Io=u!Sci7VRz#)jv*JHH)6RO$Vxf ziica&fU?K+wdvvk>={qt@RmHOm*dhvb>i}dyHQO_0auC+pFag8(SoGn~G3Ws5AYwHO!9J(6WhCC-yD%E|+^HlE zt4;1cEJ7~|LB%{U5=un&)b>r7r0Lo2@GM>u((42c?CP^5SZsjkRo0s@Uu3Ka_KY9| zk<8m%x3OhQkbos&v?)M#8<#rAzND*p`+byV^-O*eUrB|xSP-Af9@aI%IoV&tPRepR z#Rw_QkeeoDR#TKY@d8N8m=O*x*jIauhal6ICXCia6qv2n9e4E%wJO#EWb~%r8{Ek< z2BdXv&>BHGd7VGs4_Y9f!zj`(a?%smVlT6nwXl|Qj69(H!l3O-8nNszlCX$bph5(D zmKdJmU<{J(3REl7Cpia}0+PFW{K@vYD#?2PO$spz zqrzh_;{OoeaSf-*@xl`vFD>d63=v$6nD7tvv&e~!AAEZr-s|xgvs*e=x430NfLTr! zQ7JpW4ykvAFd?rT7*f4eScU9C=fa9L#3`ryKD30A4PjU)T4f5N^jd05(Wq#=f6lzq zCj&_U;^^9VCnNWUk>+kZuC}k*gRXvEBfWuCp&D?q>mp~k~|5YfqO zU^y*7PTSdJ+%o31Wb}b6^+b?FMu!;lbV9ICnje}@f`i+&=;Q|v6`HC^gER)Y;6r8tXIZmg!f9WYOnF6MSSA@c*mXHY- zFh3R}i+5VnW;sNc8?->}kkJ`mzIgr8RUBbY5HE-Ow!Z~Ma~j2<2tW{(et}%tN{nd? zDa|Ke#^wOS?g36zYKB@gMk9>%{ASy9?5e5?RmlJ#1b;t(Jv!zC4@kAE0AxQ*5Pe6^yEEtJnJY#gM(e)%ZXaX^U z2_P}^7ZRh1?}lZcNSONPU}7yj{spcQrvD!A<~@JK=l_NRgWh@J2;LQh@T}Zz^9KJY zCMY5<;gh_fR-fUyN$;nfP_aL`suVXlc2XPaq3Fz#UAw>dav< zLUV{jLc`$A7Eyp>qgg&J?~$Zoc8f`7UKxaSWcZ2}u{N1Wd$>s>8#2`0baxAzYK^biP#swDLbdu_2w4!U4P=3?5Dm z?+`0v1Ez@0l|%4%@Q$#5g{SrMm4(HH`sBiuD+>$i+qkoccRg3GTrt;t8OZ*H1=P8+ zpn7<$0v3H1AF<%Z6cV%kl;-BdBK)fN5P9Xx zF5-&lYW?oL6*hi}clR%0rw!bvZHuKP_2>BLZ?Slm&yk=R;JqD5V6R!a*czo*u!pD^?-rr^=7$;0Ma-(k669au?z z9kymKG_2WU$?x61Z&|ZHE=!=@eMWB5|@vRenHrUOM~UdJ|P;m26VlB;R-Lbk7VPv{hMU zz`osm`##S-_nhyXbNS-rWYNHH-K=f>=WjGTSPz ztKRn1ZdC=IA1Gu`yy%6&l}@YWwf!1fI{2Zf;E=kZ?fi+C^k=Yk33B-C>%CI5VyLmE1jN&iBcGvm)9X9}%O z2L(`l?!GCM%2dk8n@RIXuS{h&$V!Pb{#m@u3FR)vrK`2A4ybV>^6Tx@B|CQN?QSoM zvz=ZfcNIiE)vno?9)G-BxUS#|7m)PLzEL&$7E;saGdL7$Vy(W6#KZk(@T4E3m5&Rg)-H<23o>ozs>nbEuKgHyUQ&yk}ve<|?Y>HiHOUrPLHYFIj2^ zH+6~$=cJQ4JjD~$>Y!+~dL9{}bYkwEIW(BG5E{4C&O-(yYhW~taF&BQu=?f$)5NOi zq1md;0Zg-R=Z>mJK{C2C%s(_bry7787CEkjP$g?`c6@9s^2z_;M^d$qj?6)IAr%|% z8wWxxJ+24osLru>5-ZMdk0pb;!0hossf);a3|B&`nX%!p_Si~&#_k<9@TG_KPjdX$ zNdM#Hkm~=J0p!_2v))b@<~SNWg8rWz8N)d5rY)FyH7NG@{(sfNW7PAMewgq$As zl036B^(d03lU@vSZ{he}(#dktl;A0aqH!9Tq|b2_Vx?!<5y=Yrl!x^B7U+Ik3qi<+ zghI+i!4pVSxU?CxgS%aI`Ack)6v`NTPmGNn@(IeSS{)%!QVHbG@S_$!Cy++uptSHz z(g)}>&PPcfW8~pzWIGeLXvrr85xIxW+dbOvh`fXJWsz!Ch{d*!=~b5isVET--R3#) zw$}=()wo!#wmN>V$>&nFdb{T}2Vcx6&c7%s``R079<9W77^&EPp}nh4^VPYv3!Na` z8r$`DBvM6jYb)-pO6GNNo3KxuzXmdSQAerA`I%dPL?oq*tw;}w_>ft7bHSOl%h_3* zfAjd0?^v2F+6}zc(Va=}!bb-oooh#sG{HIDipZ0Wpq<4g#4{ zB^Tra2QbFeFa{8>kmlt5f`Go_2VmjK1cqD$q*}%L`D?-5=-L}^E3exP)asHGXK(d3 zHUbrAxQKBEOB=-5?K_^@3^ld5$@rr<;tnNN2wfzRaZeQRhS|^jfZC1}vides;9{-$ zGO-i((355dM|dc9$Uwo8qs7PXpeglLCZv>l4hf)Mp<1mqy)Xpla%C0CDvi8|2dx+F zG6BSeW9Bu)5y!}4N*mcqq&c+pV5Fv6!8_J-C^?56b9mQqiBvGGy)(ykN&=2;+7o;F z-IIGF4ZiW~dJ^)L)DtMDmY7g0sV_2liV20UqMX-c&v#V^YY^=Y$sA7(=vxb#&4k9B zF9>jn6@}hk!P5)4LgKBwRWfHC%PiZLsrY5d7Tg%;YFnNPgJ>LtkX6VsLh4(1pw#k# z*3?%cGqMis$ZBM8IcJgoz`AGdTYbpu?SfkF1JOlUA9?Qq%F32}$+!27_I#A<8&Mu@ zyaPy6pdQ>eqT;~>TA%{Wtcpb0TfWliHGQ|;iCo$duC^mwYOX-JFg{!X#I6kjO7e=uKc}8-^1sXJ0mFlRtSPupKwrhdVJI)5}8aIzs@5H$m zDd?`fF(8qGjcKUku-;6|+YU55ujb1OnzLM z=W&I9g(MLiz6r~;?At*ma2nYl1AESCh`_)bY!u0L8b#b;>EOK(l(gOFXYRu`^0TyY zf~jEI&q2T>;-sAB(DI~JIg{p;{7K1~9n_ifr^UV@IG>5L*MqRvjP{;=wbS%NH`)r^ zn%9L%6ZlvaesVh-uGhx8>~yw~dFAzMZdgLrKJ6^LF#D(B4EDu>5Jl2A4RPVIoJRU*#jZTfL%^&Yn2g0#j?op#k z#G2L5P`LFSq?vvesnZ8XR$=aIahFrCqn_dhR;x_jVDcuDZ!+QHF6Fg|`Sm3aX%*Sb zb+iypAu%Si7XC7lT6@!)!k=C8?LD!E)p!DCT-*1QzvOBg(e*;N*RGRl+$J>RAeEs; zN%Rw>Bzf^qIX+U+u=gehW6~{-iAE|Fp)-*yh42A(dc$hizWKm9$oQ6TKOpO5_P)U3 zC8IleaB&X!r3tsgo;6vF%_6i5S0T>&0q3CCMYiD@vQL=64Sf1@T%qVZd)7>+pyz%3 z6rMs2PQf>U9cCjSdo8#yDQLt7JrJ18f#YX4RN8M?;={`ad3e3D z_Z>gy=ONJxej&*CMR>X<{E~RO&JQ%f(Yi<4^CwY{Qr)Rc1f>Q&VAL&6V+#FF<6g!! zlll+!x1;R>v^HjO%?0!DSh5uEs3jxz%l9+B_|u?U7W|7C@30T2ahjTJFt=g;XX%^0 z&je@Sfy;}J&Z(T0xhxL*@fXq_X4#*A8uO;N&cT?@`8JsM5%n6@!uxOAFu0GYtF%&b z0kn4Neh|7Fy>^Xi#%tE2T{r3s6r1b0&}Fr47nV4km@dujqKltac7jbHcB6so%;8fR?v=?U3YD(9=e@&b5~lr(^1<}9{6Ol89W_r3GVUT za5s#CR_NZTM_UldP`8jIop!CK6rjs41yDV50p{A9=rG#S1KVtNZh1}g4|}W&y$S#Y zX&eR1Md@vYLaD`Cgn%nrwd2LBNyz{R46+T4p#^v{(W##ZaUcG~<=oYYd- zX#oY*Rjt>edaJ?h;<~GyD8R_P2qW9cF2~htCGuA;9#9 z6d$8ZtA3Y+0o9JB%**ikq@>Z)lm*jOTu*71I7AY@f-~SP-T`Zpi`stB4Un`W5Q}y< zrzTuFMy-=5^H#fl_v!9dz1ayn-7PR?w@ZEmQMSCDfPIlg$OeP8;2=+Gtlg=HyDW!E zKjntK+LmrA@bJ{~cHLWn+X}ppSoEYeMkX}aWS=5bvGMeCt1qtsXb@J!Hn=w~lJ=VQ z;^L6l+A^ZH-HSY2^i0_DY8z1qbjgrE4JauAGhc@=G3I6M(UdlqnnoyhPC%Muhe(2p}bVI zb#66+T11f|JgOnN@TDJYc!d05?M(^~8qO){#X8ecEpU^PU>k~%b(UOrX`|I|^{`VQ z1J>6cRh>@s==wVMI!wN_CG2<2{A5sgxKRqYkEVR$Xx_y0AwtEc;PkH!`mJ(=;`+*?VM2v}4PHc!hyvg0pK9HB-;DjTc_B^mH*Nt~?mOraIHN(#Qe9uetZ!b&31v z*^dbQMDh*fpjb^5J6>WmF|xx=qR16-w%3KQ4PcFmbEAR0W3AD=Sfl9Y7bu}Q1x9EF zyfVruNg+Ts`hs*9POZ~~vrc9!SPWli@G|D{d0gR-!9JKR;USy=`-sZzJ23z4{VW{; z`#HJ-_VZD;k=ri-HfF0ZtPb*h3nso56%L9IjQt|&PN?rjrGv?+)R>BS z7Y98~pgg~shz;f$Z~X{kt~$|NA85cojZw@;KrhiLMhibM;n!!pbrQ~u(xA+lW6Cgw z$TE||pFw(Ie>S?G@I5j*XCQ2J3R$A|b%Y%)-KCF_87Y$q}8+9u~>@*a8qIjX%JHQn1gu(wJ&_fU% z04nwM0F?sVP#bn?biq8)tZx&G3`MhsBIDS0X@CPMV-pQO4oCb>o8V8Ty3z`wt(A4{ z2BQbav(2h<;vWSQ2h`d7zw7-m*52-{-41d5b0Q|saV3`^mT!@GRuqEpU zqCmAF=!7!$sJS~risfY&=r%+>jmZ6#75BO2XHw>17whX9*HHJt0s!X1x(Q#cuLJIM zRQUBrc?=_jCmmLR_(z~9$J(G16Mj+p-^fOZ#)Vp?+owjw`fEn@l|!R?!S^u?HnzSl zRKoDYN}%yDT&>kl=oj0|U6NJ29GePCD=$t|sIsA}T484zdwCYaN}${w{elTzj?0Iq z2c>iy<%iYbmlaAd2&5TUD=8uw{)lR*u;y@umytve_jKHJOYlXRrh$m7{lK743aZE) ze5EJD{uy#iUEX;B!6xDU%xXO9l0gV;H`G3XvuIr6T<~F%w%yp-X!gP_pphOv#WviP z@UaysfwW6lV-t=np4@@I8HiVZSitB9F{QFO1uqRW^pital1iyzoN}ys>ck-t(#g~1 zIXZbv(HfZ|h#}I4UA{iT)9=Gc3FHgtOd?&>7g?lt%*g>5P~0FVloj&6+VeX&yvf#4|Jd|;N3pR z=rbGgJX}s|Rrqf(F+{T{yLH@he3DqjchNK=2C#k)gUUS5oAAS9!-XqZ8M9O7*uX!Yvq(&G}w&<2gL%l9}ZA*cAw zXdqQeFTZj9%GH;uZ(n<9?N!xciC37s%0w(6iFduoSGpf1(kpQ(L|?DG`qt`e)f?9; zSH(_}c&nu%sr@ zDP|p6?#e|e$rC4Dbj;@*KZ8=Sy&devjznq_27Ql%6ahh&jteP!{Tp7xzeHl3FCi|* zP`dnCMa0OmFjVFdn_RH7cGj}YSv!NT_+nc4%Sc+Zv*sd<-$f^D&K5HEIYczmR+84t zEOsX9n`H$7~1$duU|F8HuN-OCOg332Iwac(rvnDimgj z9f*GA>FrGp5#58H7qpaKpp( zjzH;i5ha^gQM*(99HS7BdXqrzi$Lz#?V|EEu7;r3m zx<4(kl3!w^e73i375At1CopQ1zh`}HhS{jtm^+w9_+a{;sA2u?=csc1JnQY3Xh~qk zQ}0f_L%ZV=Ms!L>v^E&gg}#HfzVe>I)={gJjPOuRSS-wuJ{Clk7kr$9JvfcoltJq= zuy5W)Pc!XOAC}N<3_{y&hAU?0_x(gUTy*UuBR3NKx2v}N5(LM7sVvdt{={R zMb31rtn0wwx~qLeBjpnm-mDK?$pb$*CaH~vw7)?~?kin%IG?oevU`oTocQ>(eFX4N zvIB_HeV8`pj{X>n15THir~5X&#A#ifoBFh1EDinQL&}aeMt`X1(xV9j0%t9fby{}6 z(NTokFeYGvc|*6=SnU;Rp_TP;s~Ox~4q+xlK;ub?0SS&+OEeFs+8(P+EQ| z=}1EENztrmi|5C&!6neae7&7$&+476!#S*VoaOl$ZM<|8$F=qB!|cUFYH{3j{7lV0 zjD%oNAg+zh5%Q5_X)i*;o`F*KR~wn z5fcXMwN>#OofkQ$K4OKdOa#60ded=Hg(#H@os&_DI@14hQ`gG@e9qkI1fOpff|Dk5~W_6)u5IjN68FR zjH7LsO>730Y#?WKM(hExN+c0HnANQ7fzBcA z1>-3IKL9-Z!JH}r`c2`l3=p>n5SKSyeTWKQ3FQbJ=K!jeFCJwqA#8><=)H@4(>91NnEWP{-p|8O?$zTs2%F=@rRQZ#c8z^oE6I zeq`?3$jkI$N&`F<`}V*&YDup67EsQDCAYpi6*&i4T@ui19zZ7t==NO=-85i>E0aM3 z+xry=bAl_g2FfF}42{G=cK|ha2SB2Or_m^yb~fwkfVnLKU;$kJN891D-y!{fJK~N9jBPr4nA(iez(Xcq7%AUoy zC6PN(G)I9$vKA}u6`87ZdE8uk2v5?#TOW>;+dZ8cpu>jN`x-@Q$|bOibBD)`2Mkrv zf;Vqm`NMnIhF7mH|NG_Pg7vUVZ`65~OlDjNa+v(Vdbcs$RhSqbfW6`@T?}`8&5s*( z98}4*wtcn{JGCv8#1Wq@{s$|#pIX?0`2NNXks0urNnGe>Y{q6AmLDBJKrN%3$0p*|E7BIjHsTiCyEw9e21s|LHoE2JUA7{408=~XzC{9k}36<9#cPO`!Wu$t(?kIf6FKFmmJ^; z|7~tp=1y|N4o^&l`cRU1` z9Vq|ED&i>-dOV9){C_?Gu=LQl_*gUrsf`YkQG78xrmCs+8lR3KRGh!0{};h!@Q@L5 g1#mik?5_lQJ@|uhU$Unjg|sfr&Mune*{PNP1zhqzcmMzZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/types.cpython-37.pyc b/venv/Lib/site-packages/click/__pycache__/types.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e3514bc028250152b1f003d96822d86d1a824a9 GIT binary patch literal 33897 zcmeHwdyrgLdRN~^Kc=VWsnO_RNp8uOt?^2;w%4(DXSGJw*yB}J85v3TdV9Uw)9QO? z)T5s6@ws;-O}n)lR<7(O;E+cpAz3darC?boNFaoS1QPNnAcRnm4G_2#BvdGh5S|r^ zqFmwe`+eu!d%JsD(ipP*K^WSo@#78Tm5-&7M8)KC*iH|hLHzq0*5-%b?S(%jhDB@F(lCIrRF`A z8I)RT?%kNJ%u22?#P?P9NqoGyf8#*qfR%YU<4t&zZ)d#8+jiw3?xwtH+)eujZ#$KT zaKFc!!TpTfAHw}!Zx;8na(@{2`@H?Q-!Jz^aDTu%i2H+b|1jSavaC~ zU8eFO|8a!R_$Ls4lV@GZ%zgB?iB-#UR#fn6p&vFje8lr> zei-^ULngOO{I@M+M8b3x3DuffyI%EM^|se&ts!-^z3I2AL8$!N25w7dYu+n0Ron1G zU*UdYwXHU4VRg09^jks zC%o}@UBT^aWy)izQldA7ah~?};N9tg)ERFtQuo}qyjgD_^2|tE_OgZEew0U?cPq2N zQns#=B)aA-=nn1704ua6Hlgzr4Na*M1SS<)Xi-{J?L8 zK{>qYmqVnN+pFbTc{3i``SNSEW`md$lxr=oTyM9o`wIE5*P2^?P%PtbRkb(d{d#+2 zgPEF*7RpiOSGL2e?N+(b3ftznQhq&@dghDr?&Ws5!BO8pBT#RBD+pN_8gjB6Y+b20 zYk{t~Cs$Z*`n3SXT=jMR?Pjxm18BOS%RGfPT}F2nYGJ4rR)~%(Wm6JT8dtVLzr2B( z%2)hy;D_^43g21;hN2ww6paqTTB|PbNMLiL5ne5?tSq-%{>q9jLiypAYDo!%Mf`9c zEocN~{I4}JWxVaQo4!}RvR(H4)!J6Gr|tzzrK<}o2Ee9tb63W^W4koa%R|A*+S!Mp z<<#nRe=|(pzgh#Zm7lbY9jv!yaFU*I3{uFP3loUdt~7xv?HCm>YSOH7V^s!uWu+e8 z1ayc9D=UIXD=SH2a_E<%8NYS?dQDZEjUcQBo6QDDA8A%jk6oQ~kAIH2 z7V#ULMG$7XncLR7b;tIsyOsyiaLelQ&WZ0rrwej(+g8tXGwbdxyXAJRTXxs#+Ftfu z8&fXV`PVPk0A2-z(j*e(4RFE$)Z1H4pn_lC3jEcrW*LtG%dp*Ume>52uWBKBo^%wbpaxBv|DB(arj>ifb<59nvMFkc|&RE!*-R`SG`6(ToLq9HB4h<=g4C? z8cI(kma=&M9Pw?d4#WlqBrTYqFY_H#S@S&KTUaQ6c>c-cshR-56hT=TOQ<>tjhaT< zoE;Sf6{4HlCS)su`OWR9)C;E%qx_(RAXA*N#+{;7uwA<|D}7_X`hcp&kWVr9oEv3jK15mR zaO7Y*s2Mz|y9oHlU!tkt*+E3QSkA7EsM&7j4&q(A>)drNftdsTSX{aDh78QPirLi> z1`jhRGaw{%a0oHNlPhht`YpH%q|#i$>P)9Ck2B2Kx)f<0mIL|YFNaZD$G3%zushFR z6iTO83LsexQ!1ung1aFJp7fcdpb>J?UT=6Z#34fhGjk7%V2v{t#3NkuC%wf`fN0Upm)wmXUO2( zcNRR|GYcNv%RSNuT@iX41hqB)Q%P^Lox=mY?a$eVLw%#vC9`MM3Jyk2uhBBMHEABU zU?dAvs|{KNFkxM4tS0lBgu&4DAfeOc6HGQ>(vRnQU?WSOEUad|>0h>n@(Cx)wV-^% zZ#MCpR4x@0)9$@aX(pn~b*Z+Eg)B%Gq@Wfrew znPTan(eX+JyeZeg0M#1lnvZp7OGt4*o~3?OdNgza!`rfOB~3i1*Gvs)EPose)Mn

q^&ey~dO9o4oRd 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 LF7Z0war5s0_j;4Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/_compat.py b/venv/Lib/site-packages/click/_compat.py new file mode 100644 index 0000000..9153d15 --- /dev/null +++ b/venv/Lib/site-packages/click/_compat.py @@ -0,0 +1,623 @@ +import codecs +import io +import os +import re +import sys +import typing as t +from weakref import WeakKeyDictionary + +CYGWIN = sys.platform.startswith("cygwin") +WIN = sys.platform.startswith("win") +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 _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[t.Any]) -> 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[t.Any], 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[t.Any], 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.Any]) -> 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.Any]) -> 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[t.Any], + encoding: t.Optional[str], + errors: t.Optional[str], + is_binary: t.Callable[[t.IO[t.Any], bool], bool], + find_binary: t.Callable[[t.IO[t.Any]], 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[t.Any], + 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[t.Any], + 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[str]", int], + mode: str, + encoding: t.Optional[str], + errors: t.Optional[str], +) -> t.IO[t.Any]: + """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: "t.Union[str, os.PathLike[str]]", + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, +) -> t.Tuple[t.IO[t.Any], bool]: + binary = "b" in mode + filename = os.fspath(filename) + + # 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[t.Any], af), True + + +class _AtomicFile: + def __init__(self, f: t.IO[t.Any], 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: t.Optional[t.Type[BaseException]], *_: t.Any) -> None: + 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[t.Any]) -> bool: + while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)): + stream = stream._stream + + return stream.__class__.__module__.startswith("ipykernel.") + + +def should_strip_ansi( + stream: t.Optional[t.IO[t.Any]] = 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 sys.getfilesystemencoding() + + 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[t.Any]) -> bool: + try: + return stream.isatty() + except Exception: + return False + + +def _make_cached_stream_func( + src_func: t.Callable[[], t.Optional[t.TextIO]], + wrapper_func: t.Callable[[], t.TextIO], +) -> t.Callable[[], t.Optional[t.TextIO]]: + cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def func() -> t.Optional[t.TextIO]: + stream = src_func() + + if stream is None: + return None + + 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/venv/Lib/site-packages/click/_termui_impl.py b/venv/Lib/site-packages/click/_termui_impl.py new file mode 100644 index 0000000..ad9f8f6 --- /dev/null +++ b/venv/Lib/site-packages/click/_termui_impl.py @@ -0,0 +1,788 @@ +""" +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 io import StringIO +from shutil import which +from types import TracebackType + +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: str = label or "" + + if file is None: + file = _default_text_stdout() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if file is None: + file = StringIO() + + self.file = file + self.color = color + self.update_min_steps = update_min_steps + self._completed_intervals = 0 + self.width: int = width + self.autowidth: bool = 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: t.Iterable[V] = iter(iterable) + self.length = length + self.pos = 0 + self.avg: t.List[float] = [] + self.last_eta: float + self.start: float + self.start = self.last_eta = time.time() + self.eta_known: bool = False + self.finished: bool = False + self.max_width: t.Optional[int] = None + self.entered: bool = False + self.current_item: t.Optional[V] = None + self.is_hidden: bool = not isatty(self.file) + self._last_line: t.Optional[str] = None + + def __enter__(self) -> "ProgressBar[V]": + self.entered = True + self.render_progress() + return self + + def __exit__( + self, + exc_type: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + 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() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if stdout is None: + stdout = StringIO() + + 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: + if _tempfilepager(generator, pager_cmd, color): + return + elif _pipepager(generator, pager_cmd, color): + return + if os.environ.get("TERM") in ("dumb", "emacs"): + return _nullpager(stdout, generator, color) + if (WIN or sys.platform.startswith("os2")) and _tempfilepager( + generator, "more", color + ): + return + if _pipepager(generator, "less", color): + return + + import tempfile + + fd, filename = tempfile.mkstemp() + os.close(fd) + try: + if _pipepager(generator, "more", color): + return + return _nullpager(stdout, generator, color) + finally: + os.unlink(filename) + + +def _pipepager(generator: t.Iterable[str], cmd: str, color: t.Optional[bool]) -> bool: + """Page through text by feeding it to another program. Invoking a + pager through this might support colors. + + Returns True if the command was found, False otherwise and thus another + pager should be attempted. + """ + cmd_absolute = which(cmd) + if cmd_absolute is None: + return False + + 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_absolute], + shell=True, + stdin=subprocess.PIPE, + env=env, + errors="replace", + text=True, + ) + assert c.stdin is not None + try: + for text in generator: + if not color: + text = strip_ansi(text) + + c.stdin.write(text) + except (OSError, KeyboardInterrupt): + pass + else: + c.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 + + return True + + +def _tempfilepager( + generator: t.Iterable[str], + cmd: str, + color: t.Optional[bool], +) -> bool: + """Page through text by invoking a program on a temporary file. + + Returns True if the command was found, False otherwise and thus another + pager should be attempted. + """ + # Which is necessary for Windows, it is also recommended in the Popen docs. + cmd_absolute = which(cmd) + if cmd_absolute is None: + return False + + import subprocess + 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: + subprocess.call([cmd_absolute, filename]) + except OSError: + # Command not found + pass + finally: + os.close(fd) + os.unlink(filename) + + return True + + +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 which(editor) is not None: + 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) + args = ["explorer", f"/select,{url}"] + else: + args = ["start"] + if wait: + args.append("/WAIT") + args.append("") + args.append(url) + try: + return subprocess.call(args) + except OSError: + # Command not found + return 127 + elif CYGWIN: + if locate: + url = _unquote_file(url) + args = ["cygstart", os.path.dirname(url)] + else: + args = ["cygstart"] + if wait: + args.append("-w") + args.append(url) + try: + return subprocess.call(args) + except OSError: + # Command not found + return 127 + + 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 termios + import tty + + @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/venv/Lib/site-packages/click/_textwrap.py b/venv/Lib/site-packages/click/_textwrap.py new file mode 100644 index 0000000..b47dcbd --- /dev/null +++ b/venv/Lib/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/venv/Lib/site-packages/click/_winconsole.py b/venv/Lib/site-packages/click/_winconsole.py new file mode 100644 index 0000000..6b20df3 --- /dev/null +++ b/venv/Lib/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/venv/Lib/site-packages/click/core.py b/venv/Lib/site-packages/click/core.py new file mode 100644 index 0000000..e630501 --- /dev/null +++ b/venv/Lib/site-packages/click/core.py @@ -0,0 +1,3047 @@ +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 update_wrapper +from gettext import gettext as _ +from gettext import ngettext +from itertools import repeat +from types import TracebackType + +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 .decorators import HelpOption + 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"]: + """Returns all declared parameters in the order they should be processed. + + The declared parameters are re-shuffled depending on the order in which + they were invoked, as well as the eagerness of each parameters. + + The invocation order takes precedence over the declaration order. I.e. the + order in which the user provided them to the CLI is respected. + + This behavior and its effect on callback evaluation is detailed at: + https://click.palletsprojects.com/en/stable/advanced/#callback-evaluation-order + """ + + 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.MutableMapping[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.MutableMapping[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: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + 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) + + @t.overload + def invoke( + __self, + __callback: "t.Callable[..., V]", + *args: t.Any, + **kwargs: t.Any, + ) -> V: ... + + @t.overload + def invoke( + __self, + __callback: "Command", + *args: t.Any, + **kwargs: t.Any, + ) -> t.Any: ... + + def invoke( + __self, + __callback: t.Union["Command", "t.Callable[..., V]"], + *args: t.Any, + **kwargs: t.Any, + ) -> t.Union[t.Any, V]: + """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 = t.cast("t.Callable[..., V]", 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) -> 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.MutableMapping[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.MutableMapping[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'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, # type: ignore[arg-type] + info_name=info_name, + parent=parent, + **extra, + ) + + 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 invocable 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) as e: + echo(file=sys.stderr) + raise Abort() from e + 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.MutableMapping[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``. + + .. versionchanged:: 8.2.0 + Dots (``.``) in ``prog_name`` are replaced with underscores (``_``). + """ + if complete_var is None: + complete_name = prog_name.replace("-", "_").replace(".", "_") + complete_var = f"_{complete_name}_COMPLETE".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.MutableMapping[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._help_option: t.Optional[HelpOption] = None + 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. + + Unless ``add_help_option`` is ``False``. + + .. versionchanged:: 8.1.8 + The help option is now cached to avoid creating it multiple times. + """ + help_options = self.get_help_option_names(ctx) + + if not help_options or not self.add_help_option: + return None + + # Cache the help option object in private _help_option attribute to + # avoid creating it multiple times. Not doing this will break the + # callback odering by iter_params_for_processing(), which relies on + # object comparison. + if self._help_option is None: + # Avoid circular import. + from .decorators import HelpOption + + self._help_option = HelpOption(help_options) + + return self._help_option + + 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.""" + if self.help is not None: + # truncate the help text to the first form feed + text = inspect.cleandoc(self.help).partition("\f")[0] + else: + text = "" + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + if text: + 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. + :param attrs: Other command arguments described in :class:`Command`. + """ + + 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) + return f(inner, *args, **kwargs) + + self._result_callback = rv = update_wrapper(t.cast(F, function), f) + return rv # type: ignore[return-value] + + 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 ``commands`` 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.MutableMapping[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.MutableMapping[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 + + func: t.Optional[t.Callable[..., t.Any]] = None + + if args and callable(args[0]): + assert ( + len(args) == 1 and not kwargs + ), "Use 'command(**kwargs)(callable)' to provide arguments." + (func,) = args + args = () + + if self.command_class and kwargs.get("cls") is None: + kwargs["cls"] = self.command_class + + 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[..., t.Any]] = 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. + + See :class:`MultiCommand` and :class:`Command` for the description of + ``name`` and ``attrs``. + """ + + 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 latter 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: t.Optional[str] + self.opts: t.List[str] + self.secondary_opts: t.List[str] + self.name, self.opts, self.secondary_opts = self._parse_decls( + param_decls or (), expose_value + ) + self.type: types.ParamType = 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[t.Any]: + 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: + + def convert(value: t.Any) -> t.Any: + return self.type(value, param=self, ctx=ctx) + + elif self.nargs == -1: + + def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...] + return tuple(self.type(x, self, ctx) for x in check_iter(value)) + + else: # nargs > 1 + + def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...] + 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. + :param attrs: Other command arguments described in :class:`Parameter`. + + .. 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 + + self.default: t.Union[t.Any, t.Callable[[], t.Any]] + + if is_flag and default_is_missing and not self.required: + if multiple: + self.default = () + else: + self.default = False + + if flag_value is None: + flag_value = not self.default + + self.type: types.ParamType + 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: bool = 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'.") + + 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( + f"Could not determine name for option with declarations {decls!r}" + ) + + 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 default_value else self.secondary_opts)[0] + )[1] + elif self.is_bool_flag and not self.secondary_opts and not default_value: + default_string = "" + elif 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 t.cast(Option, param).flag_value + + 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 constructor of :class:`Parameter`. + """ + + 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("Argument is marked as exposed, but does not have a name.") + 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/venv/Lib/site-packages/click/decorators.py b/venv/Lib/site-packages/click/decorators.py new file mode 100644 index 0000000..bcf8906 --- /dev/null +++ b/venv/Lib/site-packages/click/decorators.py @@ -0,0 +1,562 @@ +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 + +if t.TYPE_CHECKING: + import typing_extensions as te + + P = te.ParamSpec("P") + +R = t.TypeVar("R") +T = t.TypeVar("T") +_AnyCallable = t.Callable[..., t.Any] +FC = t.TypeVar("FC", bound=t.Union[_AnyCallable, Command]) + + +def pass_context(f: "t.Callable[te.Concatenate[Context, P], R]") -> "t.Callable[P, R]": + """Marks a callback as wanting to receive the current context + object as first argument. + """ + + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R": + return f(get_current_context(), *args, **kwargs) + + return update_wrapper(new_func, f) + + +def pass_obj(f: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]": + """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: "P.args", **kwargs: "P.kwargs") -> "R": + return f(get_current_context().obj, *args, **kwargs) + + return update_wrapper(new_func, f) + + +def make_pass_decorator( + object_type: t.Type[T], ensure: bool = False +) -> t.Callable[["t.Callable[te.Concatenate[T, P], R]"], "t.Callable[P, R]"]: + """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: "t.Callable[te.Concatenate[T, P], R]") -> "t.Callable[P, R]": + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R": + ctx = get_current_context() + + obj: t.Optional[T] + 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(new_func, f) + + return decorator + + +def pass_meta_key( + key: str, *, doc_description: t.Optional[str] = None +) -> "t.Callable[[t.Callable[te.Concatenate[t.Any, P], R]], t.Callable[P, R]]": + """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: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]": + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> R: + ctx = get_current_context() + obj = ctx.meta[key] + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(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) + + +# variant: no call, directly as decorator for a function. +@t.overload +def command(name: _AnyCallable) -> Command: ... + + +# variant: with positional name and with positional or keyword cls argument: +# @command(namearg, CommandCls, ...) or @command(namearg, cls=CommandCls, ...) +@t.overload +def command( + name: t.Optional[str], + cls: t.Type[CmdType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], CmdType]: ... + + +# variant: name omitted, cls _must_ be a keyword argument, @command(cls=CommandCls, ...) +@t.overload +def command( + name: None = None, + *, + cls: t.Type[CmdType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], CmdType]: ... + + +# variant: with optional string name, no cls argument provided. +@t.overload +def command( + name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any +) -> t.Callable[[_AnyCallable], Command]: ... + + +def command( + name: t.Union[t.Optional[str], _AnyCallable] = None, + cls: t.Optional[t.Type[CmdType]] = None, + **attrs: t.Any, +) -> t.Union[Command, t.Callable[[_AnyCallable], t.Union[Command, CmdType]]]: + 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[[_AnyCallable], 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 = t.cast(t.Type[CmdType], Command) + + def decorator(f: _AnyCallable) -> CmdType: + 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__ + + if t.TYPE_CHECKING: + assert cls is not None + assert not callable(name) + + cmd = cls( + name=name or f.__name__.lower().replace("_", "-"), + callback=f, + params=params, + **attrs, + ) + cmd.__doc__ = f.__doc__ + return cmd + + if func is not None: + return decorator(func) + + return decorator + + +GrpType = t.TypeVar("GrpType", bound=Group) + + +# variant: no call, directly as decorator for a function. +@t.overload +def group(name: _AnyCallable) -> Group: ... + + +# variant: with positional name and with positional or keyword cls argument: +# @group(namearg, GroupCls, ...) or @group(namearg, cls=GroupCls, ...) +@t.overload +def group( + name: t.Optional[str], + cls: t.Type[GrpType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], GrpType]: ... + + +# variant: name omitted, cls _must_ be a keyword argument, @group(cmd=GroupCls, ...) +@t.overload +def group( + name: None = None, + *, + cls: t.Type[GrpType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], GrpType]: ... + + +# variant: with optional string name, no cls argument provided. +@t.overload +def group( + name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any +) -> t.Callable[[_AnyCallable], Group]: ... + + +def group( + name: t.Union[str, _AnyCallable, None] = None, + cls: t.Optional[t.Type[GrpType]] = None, + **attrs: t.Any, +) -> t.Union[Group, t.Callable[[_AnyCallable], t.Union[Group, GrpType]]]: + """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 cls is None: + cls = t.cast(t.Type[GrpType], Group) + + if callable(name): + return command(cls=cls, **attrs)(name) + + return command(name, cls, **attrs) + + +def _param_memo(f: t.Callable[..., t.Any], 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, cls: t.Optional[t.Type[Argument]] = None, **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. + + For the default argument class, refer to :class:`Argument` and + :class:`Parameter` for descriptions of parameters. + + :param cls: the argument class to instantiate. This defaults to + :class:`Argument`. + :param param_decls: Passed as positional arguments to the constructor of + ``cls``. + :param attrs: Passed as keyword arguments to the constructor of ``cls``. + """ + if cls is None: + cls = Argument + + def decorator(f: FC) -> FC: + _param_memo(f, cls(param_decls, **attrs)) + return f + + return decorator + + +def option( + *param_decls: str, cls: t.Optional[t.Type[Option]] = None, **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. + + For the default option class, refer to :class:`Option` and + :class:`Parameter` for descriptions of parameters. + + :param cls: the option class to instantiate. This defaults to + :class:`Option`. + :param param_decls: Passed as positional arguments to the constructor of + ``cls``. + :param attrs: Passed as keyword arguments to the constructor of ``cls``. + """ + if cls is None: + cls = Option + + def decorator(f: FC) -> FC: + _param_memo(f, cls(param_decls, **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 + 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( + 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) + + +class HelpOption(Option): + """Pre-configured ``--help`` option which immediately prints the help page + and exits the program. + """ + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + **kwargs: t.Any, + ) -> None: + 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.setdefault("callback", self.show_help) + + super().__init__(param_decls, **kwargs) + + @staticmethod + def show_help(ctx: Context, param: Parameter, value: bool) -> None: + """Callback that print the help page on ```` and exits.""" + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + +def help_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Decorator for the pre-configured ``--help`` option defined above. + + :param param_decls: One or more option names. Defaults to the single + value ``"--help"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + kwargs.setdefault("cls", HelpOption) + return option(*param_decls, **kwargs) diff --git a/venv/Lib/site-packages/click/exceptions.py b/venv/Lib/site-packages/click/exceptions.py new file mode 100644 index 0000000..0b83151 --- /dev/null +++ b/venv/Lib/site-packages/click/exceptions.py @@ -0,0 +1,296 @@ +import typing as t +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import get_text_stderr +from .globals import resolve_color_default +from .utils import echo +from .utils import format_filename + +if t.TYPE_CHECKING: + from .core import Command + 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) + # The context will be removed by the time we print the message, so cache + # the color settings here to be used later on (in `show`) + self.show_color: t.Optional[bool] = resolve_color_default() + 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[t.Any]] = None) -> None: + if file is None: + file = get_text_stderr() + + echo( + _("Error: {message}").format(message=self.format_message()), + file=file, + color=self.show_color, + ) + + +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: t.Optional[Command] = self.ctx.command if self.ctx else None + + def show(self, file: t.Optional[t.IO[t.Any]] = 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: str = format_filename(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: int = code diff --git a/venv/Lib/site-packages/click/formatting.py b/venv/Lib/site-packages/click/formatting.py new file mode 100644 index 0000000..ddd2a2f --- /dev/null +++ b/venv/Lib/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/venv/Lib/site-packages/click/globals.py b/venv/Lib/site-packages/click/globals.py new file mode 100644 index 0000000..191e712 --- /dev/null +++ b/venv/Lib/site-packages/click/globals.py @@ -0,0 +1,67 @@ +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/venv/Lib/site-packages/click/parser.py b/venv/Lib/site-packages/click/parser.py new file mode 100644 index 0000000..600b843 --- /dev/null +++ b/venv/Lib/site-packages/click/parser.py @@ -0,0 +1,531 @@ +""" +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: t.Set[str] = 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: t.Any, 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: bool = 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: bool = 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 recombine 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/venv/Lib/site-packages/click/py.typed b/venv/Lib/site-packages/click/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/click/shell_completion.py b/venv/Lib/site-packages/click/shell_completion.py new file mode 100644 index 0000000..07d0f09 --- /dev/null +++ b/venv/Lib/site-packages/click/shell_completion.py @@ -0,0 +1,603 @@ +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.MutableMapping[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: t.Any = value + self.type: str = type + self.help: t.Optional[str] = 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 +} + +if [[ $zsh_eval_context[-1] == loadautofunc ]]; then + # autoload from fpath, call function directly + %(complete_func)s "$@" +else + # eval/source/. command, register function for later + compdef %(complete_func)s %(prog_name)s +fi +""" + +_SOURCE_FISH = """\ +function %(complete_func)s; + set -l response (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \ +COMP_CWORD=(commandline -t) %(prog_name)s); + + 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.MutableMapping[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("-", "_"), flags=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 + + @staticmethod + def _check_version() -> None: + import shutil + import subprocess + + bash_exe = shutil.which("bash") + + if bash_exe is None: + match = None + else: + output = subprocess.run( + [bash_exe, "--norc", "-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": + echo( + _( + "Shell completion is not supported for Bash" + " versions older than 4.4." + ), + err=True, + ) + else: + echo( + _("Couldn't detect Bash version, shell completion is not supported."), + err=True, + ) + + 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}" + + +ShellCompleteType = t.TypeVar("ShellCompleteType", bound=t.Type[ShellComplete]) + + +_available_shells: t.Dict[str, t.Type[ShellComplete]] = { + "bash": BashComplete, + "fish": FishComplete, + "zsh": ZshComplete, +} + + +def add_completion_class( + cls: ShellCompleteType, name: t.Optional[str] = None +) -> ShellCompleteType: + """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 + + return 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 + # Will be None if expose_value is False. + value = ctx.params.get(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.MutableMapping[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: + sub_ctx = ctx + + 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/venv/Lib/site-packages/click/termui.py b/venv/Lib/site-packages/click/termui.py new file mode 100644 index 0000000..c084f19 --- /dev/null +++ b/venv/Lib/site-packages/click/termui.py @@ -0,0 +1,784 @@ +import inspect +import io +import itertools +import sys +import typing as t +from gettext import gettext as _ + +from ._compat import isatty +from ._compat import strip_ansi +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 + + 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) + 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 + + # ANSI escape \033[2J clears the screen, \033[1;1H moves the cursor + echo("\033[2J\033[1;1H", nl=False) + + +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/venv/Lib/site-packages/click/testing.py b/venv/Lib/site-packages/click/testing.py new file mode 100644 index 0000000..772b215 --- /dev/null +++ b/venv/Lib/site-packages/click/testing.py @@ -0,0 +1,483 @@ +import contextlib +import io +import os +import shlex +import shutil +import sys +import tempfile +import typing as t +from types import TracebackType + +from . import _compat +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[t.Any]]], charset: str +) -> t.BinaryIO: + # Is already an input stream. + if hasattr(input, "read"): + rv = _find_binary_reader(t.cast(t.IO[t.Any], 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(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: t.Mapping[str, t.Optional[str]] = 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[t.Any]]] = 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[t.Any]] = 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 + old__compat_should_strip_ansi = _compat.should_strip_ansi + termui.visible_prompt_func = visible_input + termui.hidden_prompt_func = hidden_input + termui._getchar = _getchar + utils.should_strip_ansi = should_strip_ansi # type: ignore + _compat.should_strip_ansi = should_strip_ansi + + 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 + _compat.should_strip_ansi = old__compat_should_strip_ansi + 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[t.Any]]] = 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[str]"]] = 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) + os.chdir(dt) + + try: + yield dt + finally: + os.chdir(cwd) + + if temp_dir is None: + try: + shutil.rmtree(dt) + except OSError: + pass diff --git a/venv/Lib/site-packages/click/types.py b/venv/Lib/site-packages/click/types.py new file mode 100644 index 0000000..a70fd58 --- /dev/null +++ b/venv/Lib/site-packages/click/types.py @@ -0,0 +1,1093 @@ +import os +import stat +import sys +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 open_stream +from .exceptions import BadParameter +from .utils import format_filename +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: str = 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 = sys.getfilesystemencoding() + 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: t.Sequence[str] = 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[t.Any]] + + 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. + + 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. + + .. versionchanged:: 2.0 + Added the ``atomic`` parameter. + """ + + name = "filename" + envvar_list_splitter: t.ClassVar[str] = 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.Union[str, os.PathLike[str]]") -> bool: + if self.lazy is not None: + return self.lazy + if os.fspath(value) == "-": + return False + elif "w" in self.mode: + return True + return False + + def convert( + self, + value: t.Union[str, "os.PathLike[str]", t.IO[t.Any]], + param: t.Optional["Parameter"], + ctx: t.Optional["Context"], + ) -> t.IO[t.Any]: + if _is_file_like(value): + return value + + value = t.cast("t.Union[str, os.PathLike[str]]", value) + + try: + lazy = self.resolve_lazy_flag(value) + + if lazy: + lf = LazyFile( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + + if ctx is not None: + ctx.call_on_close(lf.close_intelligently) + + return t.cast(t.IO[t.Any], lf) + + 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: + self.fail(f"'{format_filename(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")] + + +def _is_file_like(value: t.Any) -> "te.TypeGuard[t.IO[t.Any]]": + return hasattr(value, "read") or hasattr(value, "write") + + +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 ``path_type=pathlib.Path``. + + .. versionchanged:: 6.0 + Added the ``allow_dash`` parameter. + """ + + envvar_list_splitter: t.ClassVar[str] = 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[t.Any]] = 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: str = _("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, value: "t.Union[str, os.PathLike[str]]" + ) -> "t.Union[str, bytes, os.PathLike[str]]": + if self.type is not None and not isinstance(value, self.type): + if self.type is str: + return os.fsdecode(value) + elif self.type is bytes: + return os.fsencode(value) + else: + return t.cast("os.PathLike[str]", self.type(value)) + + return value + + def convert( + self, + value: "t.Union[str, os.PathLike[str]]", + param: t.Optional["Parameter"], + ctx: t.Optional["Context"], + ) -> "t.Union[str, bytes, os.PathLike[str]]": + 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=format_filename(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=format_filename(value) + ), + param, + ctx, + ) + if not self.dir_okay and stat.S_ISDIR(st.st_mode): + self.fail( + _("{name} {filename!r} is a directory.").format( + name=self.name.title(), filename=format_filename(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=format_filename(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=format_filename(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=format_filename(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[t.Any], ParamType]]) -> None: + self.types: t.Sequence[ParamType] = [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/venv/Lib/site-packages/click/utils.py b/venv/Lib/site-packages/click/utils.py new file mode 100644 index 0000000..836c6f2 --- /dev/null +++ b/venv/Lib/site-packages/click/utils.py @@ -0,0 +1,624 @@ +import os +import re +import sys +import typing as t +from functools import update_wrapper +from types import ModuleType +from types import TracebackType + +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 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 + + P = te.ParamSpec("P") + +R = t.TypeVar("R") + + +def _posixify(name: str) -> str: + return "-".join(name.split()).lower() + + +def safecall(func: "t.Callable[P, R]") -> "t.Callable[P, t.Optional[R]]": + """Wraps a function so that it swallows exceptions.""" + + def wrapper(*args: "P.args", **kwargs: "P.kwargs") -> t.Optional[R]: + try: + return func(*args, **kwargs) + except Exception: + pass + return None + + return update_wrapper(wrapper, func) + + +def make_str(value: t.Any) -> str: + """Converts a value into a valid string.""" + if isinstance(value, bytes): + try: + return value.decode(sys.getfilesystemencoding()) + 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: t.Union[str, "os.PathLike[str]"], + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, + ): + self.name: str = os.fspath(filename) + self.mode = mode + self.encoding = encoding + self.errors = errors + self.atomic = atomic + self._f: t.Optional[t.IO[t.Any]] + self.should_close: bool + + if self.name == "-": + 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[t.Any]: + """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: + 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: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + 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[t.Any]) -> None: + self._file: t.IO[t.Any] = file + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._file, name) + + def __enter__(self) -> "KeepOpenFile": + return self + + def __exit__( + self, + exc_type: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + 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() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if file is None: + return + + # 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, color) # 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: t.Union[str, "os.PathLike[str]"], + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: bool = False, + atomic: bool = False, +) -> t.IO[t.Any]: + """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 or Path 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[t.Any], 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[t.Any], KeepOpenFile(f)) + + return f + + +def format_filename( + filename: "t.Union[str, bytes, os.PathLike[str], os.PathLike[bytes]]", + shorten: bool = False, +) -> str: + """Format a filename as a string for display. Ensures the filename can be + displayed by replacing any invalid bytes or surrogate escapes in the name + with the replacement character ``�``. + + Invalid bytes or surrogate escapes will raise an error when written to a + stream with ``errors="strict"``. This will typically happen with ``stdout`` + when the locale is something like ``en_GB.UTF-8``. + + Many scenarios *are* safe to write surrogates though, due to PEP 538 and + PEP 540, including: + + - Writing to ``stderr``, which uses ``errors="backslashreplace"``. + - The system has ``LANG=C.UTF-8``, ``C``, or ``POSIX``. Python opens + stdout and stderr with ``errors="surrogateescape"``. + - None of ``LANG/LC_*`` are set. Python assumes ``LANG=C.UTF-8``. + - Python is started in UTF-8 mode with ``PYTHONUTF8=1`` or ``-X utf8``. + Python opens stdout and stderr with ``errors="surrogateescape"``. + + :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) + else: + filename = os.fspath(filename) + + if isinstance(filename, bytes): + filename = filename.decode(sys.getfilesystemencoding(), "replace") + else: + filename = filename.encode("utf-8", "surrogateescape").decode( + "utf-8", "replace" + ) + + return 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 effect 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[t.Any]) -> 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. + # It is set to "" inside a Shiv or PEX zipapp. + if getattr(_main, "__package__", None) in {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/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER b/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA b/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA new file mode 100644 index 0000000..a1b5c57 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA @@ -0,0 +1,441 @@ +Metadata-Version: 2.1 +Name: colorama +Version: 0.4.6 +Summary: Cross-platform colored terminal text. +Project-URL: Homepage, https://github.com/tartley/colorama +Author-email: Jonathan Hartley +License-File: LICENSE.txt +Keywords: ansi,color,colour,crossplatform,terminal,text,windows,xplatform +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Terminals +Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7 +Description-Content-Type: text/x-rst + +.. image:: https://img.shields.io/pypi/v/colorama.svg + :target: https://pypi.org/project/colorama/ + :alt: Latest Version + +.. image:: https://img.shields.io/pypi/pyversions/colorama.svg + :target: https://pypi.org/project/colorama/ + :alt: Supported Python versions + +.. image:: https://github.com/tartley/colorama/actions/workflows/test.yml/badge.svg + :target: https://github.com/tartley/colorama/actions/workflows/test.yml + :alt: Build Status + +Colorama +======== + +Makes ANSI escape character sequences (for producing colored terminal text and +cursor positioning) work under MS Windows. + +.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif + :target: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2MZ9D2GMLYCUJ&item_name=Colorama¤cy_code=USD + :alt: Donate with Paypal + +`PyPI for releases `_ | +`Github for source `_ | +`Colorama for enterprise on Tidelift `_ + +If you find Colorama useful, please |donate| to the authors. Thank you! + +Installation +------------ + +Tested on CPython 2.7, 3.7, 3.8, 3.9 and 3.10 and Pypy 2.7 and 3.8. + +No requirements other than the standard library. + +.. code-block:: bash + + pip install colorama + # or + conda install -c anaconda colorama + +Description +----------- + +ANSI escape character sequences have long been used to produce colored terminal +text and cursor positioning on Unix and Macs. Colorama makes this work on +Windows, too, by wrapping ``stdout``, stripping ANSI sequences it finds (which +would appear as gobbledygook in the output), and converting them into the +appropriate win32 calls to modify the state of the terminal. On other platforms, +Colorama does nothing. + +This has the upshot of providing a simple cross-platform API for printing +colored terminal text from Python, and has the happy side-effect that existing +applications or libraries which use ANSI sequences to produce colored output on +Linux or Macs can now also work on Windows, simply by calling +``colorama.just_fix_windows_console()`` (since v0.4.6) or ``colorama.init()`` +(all versions, but may have other side-effects – see below). + +An alternative approach is to install ``ansi.sys`` on Windows machines, which +provides the same behaviour for all applications running in terminals. Colorama +is intended for situations where that isn't easy (e.g., maybe your app doesn't +have an installer.) + +Demo scripts in the source code repository print some colored text using +ANSI sequences. Compare their output under Gnome-terminal's built in ANSI +handling, versus on Windows Command-Prompt using Colorama: + +.. image:: https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png + :width: 661 + :height: 357 + :alt: ANSI sequences on Ubuntu under gnome-terminal. + +.. image:: https://github.com/tartley/colorama/raw/master/screenshots/windows-demo.png + :width: 668 + :height: 325 + :alt: Same ANSI sequences on Windows, using Colorama. + +These screenshots show that, on Windows, Colorama does not support ANSI 'dim +text'; it looks the same as 'normal text'. + +Usage +----- + +Initialisation +.............. + +If the only thing you want from Colorama is to get ANSI escapes to work on +Windows, then run: + +.. code-block:: python + + from colorama import just_fix_windows_console + just_fix_windows_console() + +If you're on a recent version of Windows 10 or better, and your stdout/stderr +are pointing to a Windows console, then this will flip the magic configuration +switch to enable Windows' built-in ANSI support. + +If you're on an older version of Windows, and your stdout/stderr are pointing to +a Windows console, then this will wrap ``sys.stdout`` and/or ``sys.stderr`` in a +magic file object that intercepts ANSI escape sequences and issues the +appropriate Win32 calls to emulate them. + +In all other circumstances, it does nothing whatsoever. Basically the idea is +that this makes Windows act like Unix with respect to ANSI escape handling. + +It's safe to call this function multiple times. It's safe to call this function +on non-Windows platforms, but it won't do anything. It's safe to call this +function when one or both of your stdout/stderr are redirected to a file – it +won't do anything to those streams. + +Alternatively, you can use the older interface with more features (but also more +potential footguns): + +.. code-block:: python + + from colorama import init + init() + +This does the same thing as ``just_fix_windows_console``, except for the +following differences: + +- It's not safe to call ``init`` multiple times; you can end up with multiple + layers of wrapping and broken ANSI support. + +- Colorama will apply a heuristic to guess whether stdout/stderr support ANSI, + and if it thinks they don't, then it will wrap ``sys.stdout`` and + ``sys.stderr`` in a magic file object that strips out ANSI escape sequences + before printing them. This happens on all platforms, and can be convenient if + you want to write your code to emit ANSI escape sequences unconditionally, and + let Colorama decide whether they should actually be output. But note that + Colorama's heuristic is not particularly clever. + +- ``init`` also accepts explicit keyword args to enable/disable various + functionality – see below. + +To stop using Colorama before your program exits, simply call ``deinit()``. +This will restore ``stdout`` and ``stderr`` to their original values, so that +Colorama is disabled. To resume using Colorama again, call ``reinit()``; it is +cheaper than calling ``init()`` again (but does the same thing). + +Most users should depend on ``colorama >= 0.4.6``, and use +``just_fix_windows_console``. The old ``init`` interface will be supported +indefinitely for backwards compatibility, but we don't plan to fix any issues +with it, also for backwards compatibility. + +Colored Output +.............. + +Cross-platform printing of colored text can then be done using Colorama's +constant shorthand for ANSI escape sequences. These are deliberately +rudimentary, see below. + +.. code-block:: python + + from colorama import Fore, Back, Style + print(Fore.RED + 'some red text') + print(Back.GREEN + 'and with a green background') + print(Style.DIM + 'and in dim text') + print(Style.RESET_ALL) + print('back to normal now') + +...or simply by manually printing ANSI sequences from your own code: + +.. code-block:: python + + print('\033[31m' + 'some red text') + print('\033[39m') # and reset to default color + +...or, Colorama can be used in conjunction with existing ANSI libraries +such as the venerable `Termcolor `_ +the fabulous `Blessings `_, +or the incredible `_Rich `_. + +If you wish Colorama's Fore, Back and Style constants were more capable, +then consider using one of the above highly capable libraries to generate +colors, etc, and use Colorama just for its primary purpose: to convert +those ANSI sequences to also work on Windows: + +SIMILARLY, do not send PRs adding the generation of new ANSI types to Colorama. +We are only interested in converting ANSI codes to win32 API calls, not +shortcuts like the above to generate ANSI characters. + +.. code-block:: python + + from colorama import just_fix_windows_console + from termcolor import colored + + # use Colorama to make Termcolor work on Windows too + just_fix_windows_console() + + # then use Termcolor for all colored text output + print(colored('Hello, World!', 'green', 'on_red')) + +Available formatting constants are:: + + Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. + Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. + Style: DIM, NORMAL, BRIGHT, RESET_ALL + +``Style.RESET_ALL`` resets foreground, background, and brightness. Colorama will +perform this reset automatically on program exit. + +These are fairly well supported, but not part of the standard:: + + Fore: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX + Back: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX + +Cursor Positioning +.................. + +ANSI codes to reposition the cursor are supported. See ``demos/demo06.py`` for +an example of how to generate them. + +Init Keyword Args +................. + +``init()`` accepts some ``**kwargs`` to override default behaviour. + +init(autoreset=False): + If you find yourself repeatedly sending reset sequences to turn off color + changes at the end of every print, then ``init(autoreset=True)`` will + automate that: + + .. code-block:: python + + from colorama import init + init(autoreset=True) + print(Fore.RED + 'some red text') + print('automatically back to default color again') + +init(strip=None): + Pass ``True`` or ``False`` to override whether ANSI codes should be + stripped from the output. The default behaviour is to strip if on Windows + or if output is redirected (not a tty). + +init(convert=None): + Pass ``True`` or ``False`` to override whether to convert ANSI codes in the + output into win32 calls. The default behaviour is to convert if on Windows + and output is to a tty (terminal). + +init(wrap=True): + On Windows, Colorama works by replacing ``sys.stdout`` and ``sys.stderr`` + with proxy objects, which override the ``.write()`` method to do their work. + If this wrapping causes you problems, then this can be disabled by passing + ``init(wrap=False)``. The default behaviour is to wrap if ``autoreset`` or + ``strip`` or ``convert`` are True. + + When wrapping is disabled, colored printing on non-Windows platforms will + continue to work as normal. To do cross-platform colored output, you can + use Colorama's ``AnsiToWin32`` proxy directly: + + .. code-block:: python + + import sys + from colorama import init, AnsiToWin32 + init(wrap=False) + stream = AnsiToWin32(sys.stderr).stream + + # Python 2 + print >>stream, Fore.BLUE + 'blue text on stderr' + + # Python 3 + print(Fore.BLUE + 'blue text on stderr', file=stream) + +Recognised ANSI Sequences +......................... + +ANSI sequences generally take the form:: + + ESC [ ; ... + +Where ```` is an integer, and ```` is a single letter. Zero or +more params are passed to a ````. If no params are passed, it is +generally synonymous with passing a single zero. No spaces exist in the +sequence; they have been inserted here simply to read more easily. + +The only ANSI sequences that Colorama converts into win32 calls are:: + + ESC [ 0 m # reset all (colors and brightness) + ESC [ 1 m # bright + ESC [ 2 m # dim (looks same as normal brightness) + ESC [ 22 m # normal brightness + + # FOREGROUND: + ESC [ 30 m # black + ESC [ 31 m # red + ESC [ 32 m # green + ESC [ 33 m # yellow + ESC [ 34 m # blue + ESC [ 35 m # magenta + ESC [ 36 m # cyan + ESC [ 37 m # white + ESC [ 39 m # reset + + # BACKGROUND + ESC [ 40 m # black + ESC [ 41 m # red + ESC [ 42 m # green + ESC [ 43 m # yellow + ESC [ 44 m # blue + ESC [ 45 m # magenta + ESC [ 46 m # cyan + ESC [ 47 m # white + ESC [ 49 m # reset + + # cursor positioning + ESC [ y;x H # position cursor at x across, y down + ESC [ y;x f # position cursor at x across, y down + ESC [ n A # move cursor n lines up + ESC [ n B # move cursor n lines down + ESC [ n C # move cursor n characters forward + ESC [ n D # move cursor n characters backward + + # clear the screen + ESC [ mode J # clear the screen + + # clear the line + ESC [ mode K # clear the line + +Multiple numeric params to the ``'m'`` command can be combined into a single +sequence:: + + ESC [ 36 ; 45 ; 1 m # bright cyan text on magenta background + +All other ANSI sequences of the form ``ESC [ ; ... `` +are silently stripped from the output on Windows. + +Any other form of ANSI sequence, such as single-character codes or alternative +initial characters, are not recognised or stripped. It would be cool to add +them though. Let me know if it would be useful for you, via the Issues on +GitHub. + +Status & Known Problems +----------------------- + +I've personally only tested it on Windows XP (CMD, Console2), Ubuntu +(gnome-terminal, xterm), and OS X. + +Some valid ANSI sequences aren't recognised. + +If you're hacking on the code, see `README-hacking.md`_. ESPECIALLY, see the +explanation there of why we do not want PRs that allow Colorama to generate new +types of ANSI codes. + +See outstanding issues and wish-list: +https://github.com/tartley/colorama/issues + +If anything doesn't work for you, or doesn't do what you expected or hoped for, +I'd love to hear about it on that issues list, would be delighted by patches, +and would be happy to grant commit access to anyone who submits a working patch +or two. + +.. _README-hacking.md: README-hacking.md + +License +------- + +Copyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see +LICENSE file. + +Professional support +-------------------- + +.. |tideliftlogo| image:: https://cdn2.hubspot.net/hubfs/4008838/website/logos/logos_for_download/Tidelift_primary-shorthand-logo.png + :alt: Tidelift + :target: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme + +.. list-table:: + :widths: 10 100 + + * - |tideliftlogo| + - Professional support for colorama is available as part of the + `Tidelift Subscription`_. + Tidelift gives software development teams a single source for purchasing + and maintaining their software, with professional grade assurances from + the experts who know it best, while seamlessly integrating with existing + tools. + +.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme + +Thanks +------ + +See the CHANGELOG for more thanks! + +* Marc Schlaich (schlamar) for a ``setup.py`` fix for Python2.5. +* Marc Abramowitz, reported & fixed a crash on exit with closed ``stdout``, + providing a solution to issue #7's setuptools/distutils debate, + and other fixes. +* User 'eryksun', for guidance on correctly instantiating ``ctypes.windll``. +* Matthew McCormick for politely pointing out a longstanding crash on non-Win. +* Ben Hoyt, for a magnificent fix under 64-bit Windows. +* Jesse at Empty Square for submitting a fix for examples in the README. +* User 'jamessp', an observant documentation fix for cursor positioning. +* User 'vaal1239', Dave Mckee & Lackner Kristof for a tiny but much-needed Win7 + fix. +* Julien Stuyck, for wisely suggesting Python3 compatible updates to README. +* Daniel Griffith for multiple fabulous patches. +* Oscar Lesta for a valuable fix to stop ANSI chars being sent to non-tty + output. +* Roger Binns, for many suggestions, valuable feedback, & bug reports. +* Tim Golden for thought and much appreciated feedback on the initial idea. +* User 'Zearin' for updates to the README file. +* John Szakmeister for adding support for light colors +* Charles Merriam for adding documentation to demos +* Jurko for a fix on 64-bit Windows CPython2.5 w/o ctypes +* Florian Bruhin for a fix when stdout or stderr are None +* Thomas Weininger for fixing ValueError on Windows +* Remi Rampin for better Github integration and fixes to the README file +* Simeon Visser for closing a file handle using 'with' and updating classifiers + to include Python 3.3 and 3.4 +* Andy Neff for fixing RESET of LIGHT_EX colors. +* Jonathan Hartley for the initial idea and implementation. diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD b/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD new file mode 100644 index 0000000..609cff6 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD @@ -0,0 +1,31 @@ +colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266 +colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128 +colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325 +colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181 +colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134 +colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75 +colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839 +colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678 +colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741 +colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866 +colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079 +colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709 +colorama-0.4.6.dist-info/METADATA,sha256=e67SnrUMOym9sz_4TjF3vxvAV4T3aF7NyqRHHH3YEMw,17158 +colorama-0.4.6.dist-info/WHEEL,sha256=cdcF4Fbd0FPtw2EMIOwH-3rSOTUdTCeOSXRMD1iLUb8,105 +colorama-0.4.6.dist-info/licenses/LICENSE.txt,sha256=ysNcAmhuXQSlpxQL-zs25zrtSWZW6JEQLkKIhteTAxg,1491 +colorama-0.4.6.dist-info/RECORD,, +colorama-0.4.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +colorama/tests/__pycache__/ansitowin32_test.cpython-37.pyc,, +colorama/tests/__pycache__/ansi_test.cpython-37.pyc,, +colorama/tests/__pycache__/initialise_test.cpython-37.pyc,, +colorama/tests/__pycache__/isatty_test.cpython-37.pyc,, +colorama/tests/__pycache__/utils.cpython-37.pyc,, +colorama/tests/__pycache__/winterm_test.cpython-37.pyc,, +colorama/tests/__pycache__/__init__.cpython-37.pyc,, +colorama/__pycache__/ansi.cpython-37.pyc,, +colorama/__pycache__/ansitowin32.cpython-37.pyc,, +colorama/__pycache__/initialise.cpython-37.pyc,, +colorama/__pycache__/win32.cpython-37.pyc,, +colorama/__pycache__/winterm.cpython-37.pyc,, +colorama/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL b/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL new file mode 100644 index 0000000..d79189f --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: hatchling 1.11.1 +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt b/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt new file mode 100644 index 0000000..3105888 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2010 Jonathan Hartley +All rights reserved. + +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 copyright holders, nor those 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/venv/Lib/site-packages/colorama/__init__.py b/venv/Lib/site-packages/colorama/__init__.py new file mode 100644 index 0000000..383101c --- /dev/null +++ b/venv/Lib/site-packages/colorama/__init__.py @@ -0,0 +1,7 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.6' + diff --git a/venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d31a08e5d676a422ff09d9a06e66d071fd96587 GIT binary patch literal 458 zcmYL_%Sr<=6ox0$%=9iUyYK~O(ITz1AR@LEaZ%i~MF;~S%tVYPlQEgzd?Q~eTUWk< zD|0MjAm6zqIe*Tq+ieAYF_b;GP!N1V@V7$m-1u$pJ@Oz&GEj&h6_QZZNKIjaRYW2L zwNS>YPU@;b8mdW}szv;BK3|h<)gc}4W75r|Wst;QzE6-u4vRumF3$PUnxpMzT57`- zqZQv*uJ^LB6@3zWx)VjNca~q7c58i|Ek)TEg{_#B{qk+X j%_JYEe*^e;CTV)L6ZwN=1 zO)s<5!aoSO;ToK|jGL~>E!W~UPrNoP!beFS6&cbGkvzu7Ngmg7mgGx(g5(J;=fu!~;pRn_a9HFB z3&J5B;ge0HbY<^%XKgzOi#uJu+ZM$w(Gk**L|800nv2EOwlDowBxJGG<_7RQOjo*-&h!WGbuLTvS#V$r4jG z?EPiPBz^GaUUg=3JrpwBtcy&^L*zgh3L{PyOW*y(Ndg5LF@6Gnc!eZBYe zhLAV-kDEF!f5$(0@jGEK)qAOOu z%l?+jY^yDN>4hyRL}!!+9(lz=T+rd&(+(wqI2)qV_ty?O;?jUOcy3WUz7X#$wQ!t3 z7{n@rSVi0-CRyB~qOet_Olwu8pu*#cB3@KP6`#%!y!aua#W-Md#=~o`*gpG%arP$* zoygob_Su2?%8V?$MfSdVzz!^CJasmR%7<0wl@iM0fm99^j*PTO#tKNU9XA z7hZHplq_Y3qWwtO9e+ot#52FW`&PQso)>h2$n&mXf~X|J&NGMZz0u=nrj7BHp4TTXy=Oh|>8{`IYvc!HW+2f>fJ8ybF@np~^rEJjmQSS_`I^OmTLi~x&T-nn zXnV4FUTzZPF`GNeC zs!?L{6H=f5Ftx5fAT2+naq=U;$AHfOUjVKFz5+}GG>=X|Gpa}md=TPLkY@xA98a%>*jgR9p-tr zz=!D+<>-BRZLcT#F{VzW%CW&6`NN{=d7*#3HZqW6_HAA6suOx(p=}qOB_%+$ZKynW%)0QYEYUmvG)ZRr;s? g+2K}#EQCb@+thV#rRjDo$1V&Na)k-HlSzjAA7c4|IRF3v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/ansitowin32.cpython-37.pyc b/venv/Lib/site-packages/colorama/__pycache__/ansitowin32.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6da75ccf7dac171dbec5cab87d07bff3a4414684 GIT binary patch literal 8214 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-37.pyc b/venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f83ef01a17d4cc9648b1e5755d3b900d15b400b5 GIT binary patch literal 2217 zcma)-&u<$=6vt;~e|Wu4+|s6LDFs;tDj87@t<*{tMGb|h2jmN(0n3s#^-PjY*1KkQ z+%%QBkQ}(c-;f^pm*&c;{{j*c-!~gOKL80^^ZU)roA*BN?U&2TDZ@|l(av8>jQv4_ z`7cE02}<=6m12tLtY5dh&;3~Rg%T>rgK^joIa8sEj#xiZv1*`=)v8KW>xlOoYDq0) zCQ)s532jsJ-Bevx?;Np1-fyWZ>MCZJ)QY->c3DS<45#sLS@-%|+|7D#IqEKVt+k@c zHp<3ne@39ZJir#uRb*<85+r!GLa%xWp+8Ec~H*zx3YQA`OOzSOa^{dPdRat0vZ7X{P z(fzDY<$g6Bl|@zN+QqeuOQ(g=+gW9`aZRHuZHF??U3<-1lf9T){k1Wr`JI_IUgoPm zH=jNld{=2x4ZhJu`LZ0WO(tJSD+k|{Bbg62^msCuWRtsDQCXaIck<&yZ62xzgHf56 zMvmoaCo3|W$vms{XOjc>0koXxVOBtyLgsiLlpJoAW@vR~t0ozE1r-w^4+CFpkra#y{1{Q%<@BiEZ&fZ$=1Br4NL$DL%bP4c;>0~qc6=DI_Oj+ z#(2WL==#RUk1<7UjN-5S1)W(?-L!1RW_%{LgF|j^TCQ;U&)kaLK!&Iz8B-ssCFTK8 zX%wqAu_5iizThwdB4QZG2FZG<0i>EMZ5U`bJBU^R$GrQA~#X+aEJKA)l*?zoXrh22>b^)ec`dsGI8UPnm2bGI!8ojCf z0JND1Z#DFC*P>hCHKXO&G-#UQ!cd62WKNm4TQ_t~Iklw+&NZOYOKq%+us55ykj^;; z&X5CKNUVH}UUd@{6IXZ=#XJ@%kAqe2Yao$wa|^5g4nhYjCm^&5grTrx`=+^N1B}8s z5K+y-Rfrqnt$yM)>Mf$+6b%8#?>~KIT2lxdsVN z;QsU8H>+6m{-V^%ypxxFfcTYexZdj_;nYbYMIs=(=h=%I$d<$h*Os2!I!jZUud_78 zx%a7O#I;ZMj%6XYp$2)%kdgd7XSDMAc`%dD$EBL)`U`SmMUjv|vqUTf$@L^kZzYZ7 Jdb^1_{ToQD(f0rV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/win32.cpython-37.pyc b/venv/Lib/site-packages/colorama/__pycache__/win32.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac7c80df2013538fa97827b594834cbb8c8d9482 GIT binary patch literal 4351 zcmai1&2QVt73Yu?CClGV;yBKi*7?|IlW4aI+5n3nU0YTX7mA!p&U%+{LC~79EkzQQ zAr;4l47BT}kB_LBbIkd~dqZYlH4$9tT4^Lrojyf8YNHSqYX zzI9{9F#bh@!)FMc@9>7xreScyH8^t_H(hh5z%6dKEZ0JtYFTaDwV5GoVKr0x%yls9 zU^eZhnXzhg3br9KVravBnU!12pdYs(mFAhZhMVO>x*h(}_zUa&{DXn7v-o<%9choc zqwO(wtUd0IWBqhHoLTpx z9*>KueYR z_DG4jL~<^XyyjlllGx)j+3Shy^+fiDdlNEW;v_c{&dr2#%gyUm4)-xdK9R^L5?{Hu zlYOS4@9l(p+q=L=`52JC!^imq+F@aAFh0qr-ZFQVpW$b<73TOfKaZKKe1>1Z%w0aq zFQUE1FY(K03;YVdiuM-I@h{MR#qFArzt;HAhYueb{|0$)!&lzpH7a?gM$3(L>C2sR z;Bz4{k=br^qMfb?>m))COWr4FL;9E-Sdmr!0iu{EQ<&1^mum6bwHKj~;aXXAg4e;? ze7C#kNB&wlsQaz8718dlbsOEgjZPT(t=8S{s|P|p;J;a`2dzN*ZU3kPE$-hdbazzd zVaso?bN|rRY~4>F3K!m6cL;upPcKXvy#JhL1pmfnYOS6G3NjQ`j3Ow=}gys_9^qLYqeG(ClW) z%_IRe#D@T5R?QZdE4Afv$*UEsrBcOPc=7mgsp>6N9xv~n3AIMKMkfbA>OrTlRZtG! zt~GXrn&8{To(u!|JO~?6Bj~8%?fEE@jrCq6LX`>SYNNx0ZFPokKl9%-+P!u>L0{L& zs`OAhg13k_dgvqRC^ z_{6*_?Rmh>^Ky_0>1+lw*$93%n_;_ir{i5nKCHkj8PDtZZQ*$;>v`>f_gd5+@w`_( zzm;&X5fAE^P8FAztBaC?L)ok7s%-7qe7WpZOT`r|wb2kQ9(r;X0>`w~ZmB(T6pZtD zL&74%Y|~*5%ixzaCGiI4vM``+w7D*!6B+x)9*bbE$n3Lywr}p4k<~Z%nGVvtt-n_n zy(c0n2AwcyiCSF>(OKwiYzVp3*$5=vAj)13f>z#A&X(WdEurjsxZY6duvf2(Fg&I; zDGVUskbbw}!PTM`WwE>B2u{Y$w?@Pw=m~1=vki06fcB)d zRT&%?H=035rbrE^LHfoY#&BGNj`}^E_m!DsBZN9_nm3hM_(rjX8AV>k!;t z_-(Jj0s9*ANeNu>oBZYu>|Loe-mk%t3DvZ%AR7Xl%j<$paG| zO-VYc8Lu|*yA|;!8YHN^C4WT%DIX~-jP?CQ%k!svx<@+?;QTd4D|OO{9?H!FJn1at zDt|_V^jVW}_L7B{&_lL<$z+aPhxp)_Gt`>Y#z;#ZS&_ZZnyEdzZ`qU(?WXg#Zpt3-O(wsa;guFY(?7}h3 zKF;uYCk8FkJxuwI&zrq4Qj>8jxHn*#p*#`RnIl*~Uj0wdASC_Zrsi2@+tWxySvJ8Y zOt|es%-1#Q=ui%zS3AK1I*Ak5Z~}H%_#^-!45zACk-Q|l$~aii5ra@le(>h_`{?rOgt2{|9< zveaw8)f4%2jFzpha;GIao6(j^q4toGMn(;HdTno8Hlj#$P7ajQxB4qo(&?IldW2<> zs!cYriISTrK+0D-MhLQkXQL^e=LX_QiZhfpGXcKzIE>I~xPR&FbS zayRP)UAP)UkjuvwaAFG(=rTuy3LRV_r|%wT zphLVVq$PQUB>#w^9->KIn#e_({3O%T4_Wrv5L|m6;ba~J;slMLreZ0i-okb!DJb9uq7oN0!VL3H&0|7uy=G7 zqfSD~POjp<8O}xaLF%3H6Qv+0Rw=C=I)-)p*v}2ebbjHq3 LWwQ8Lne=}FLkQTU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-37.pyc b/venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a37db01f0436bfc0b8e7ad0fb9bb2806f9175f91 GIT binary patch literal 5174 zcmc&&%~u=O6@PEOH2MGpCV|?ngPp{VQrm5lHcs6(0fbCwK=^=&gUaa~p*Pr)2T6G| zn7|QjPwj28>)tHeMHl@uy67M97Tt8kzmQdb_swVo3Mbo2=iT@H=6?L{eRpPYY%Is{ zYw+f?|6F72ztkE0Tr}oU!WSS%MZp9Q*gmgw&YrN&b&L7N^PIfP8U2MJ%vY?=w^_&d zk_k)Lfw^zhEzXvia75-66B*xrY1SR|U6DmUtNR)Bb0Uv^UiV#55MwwgE5wWdWmk-28JI!v;m5u$zuz^QKzTCgxJCej69UoGIaos;7zVU1u z>puLTNfUz~&CH{OcR_q;RIs`sc-<66-4bTq7FOL6c0D7Ux+^l!lUvV;ETqjT_erZ$ zCSD|+A~PUo^wcwxh(&}rIdh26Y_*hEuIF_c`@ZL?oagO##X&&rg6Dm8&&*FFI1JeQCU)%wT0zMwYH#~?aJ!v`V(bg$+lMNIYLjBSrD>Q zSOjsob>XjPFW1H_mS3(7NN#J%H>0D#*OH$RbkF__QY|@>o+KxUOo1q;y1uctu&SKJ zjg{rkYHBjBy+ug4ys^GjT{_1zsY`0c;T>!SC8S==xTLWQ?2?}6QNnLQhU^LhfHs9G zEYxrf;h?s~oOT2bbKVqrQFz5+)LUXqjHBg>x5b1gqLmfzh)FSpR!&?I)7Y68?}|6X zn;0pG+hRt{qBSP&h^yinTI1q9ab5fvtqE~MyoL2ek%5v*Dg$`bfXWNrLoAnx%trS+|v${#L7k!U^rJe}`YJlmHGA&Laq!Geplk5U`-XhK zkELxRGTYWVOywD!so}^3Thn9MWB1KO(ik{E$1iaz4DueT*eax39fD%3{DS7K*dUg6 z8C!#1Zyb?QKEPrs;W!8b%pL9+7N0Vv_;FzXE;{7@ARz%gc8;Nhb2N5ALh^U{F%6Sq zM&S-`3oS|rz~G*@)=)5=JN zYGU2MMkd)u+vwUru*-H3>gY!aBV9}yf#h6TCSXh!wM>*Pn0@35CwAX%!$PNCtlVr`~nFBr=y4lYwUfFINWR<`?0y^X)&dh$}X?3Z!D>+k6J;H zWQ6MnQSTrsKWoTF6R%2_%%wpn4qDpy+1U6N-c$Uc@s-sKcUx+r=?6iGRL%=^x~Z~k_2;DaXYc|A1_&fv#{bKVw}GHJ;Wqq`YN$U(II~a0ZN5Y|D}km5gwp^zHeW&Y~_L#bKv&b5e5ewyF)dsDO|5r?hb0DdGv~8w9i%32- z)wVgF8u<5cb9x~e*l(g}zoz5}8q*ij@Deq&lxkuaoNKKp@Y7^CqTVQ@`h`Z%`~!!6 zFOR3Vt7qw!Mo@ed69eIKP&k^}Cx`Xq$h)olDb9|)g_3Xi5fMuBB;`Yr@(rCt#c_3s zx+_GshNI*S5AU6k{w7l& zUruwNHH4S?_|U+*f2&emSX`}mU#x7@wiZ^sT4iHxrHaPmjrDS6b91G-EJU4{V;5Gp8gYOgjYcrpW>Eb0J=F`(*`e? zIRY|rbomF&R`JEh*$-bdWh{Wouk81_GSW|0ah9i??rz&}M*7Q2{IWon)cY^9vvPkE ce**f193i9+CI;LG*^gB)i}|8m{1cn`A5@_*8vpg`kf<(sT3~wO)7{q}AMj*ohh>KZ(L<&PNgC?WjN`@kkFoO6M?Q9hjTAW%` z9OILkmtU42<5*DOl30=$lIYq;;_lhPbtkwwF6mN48#loa|the literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/ansi_test.cpython-37.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/ansi_test.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0ad12cf4c73ab55145862bacd47f031efb8ddcc GIT binary patch literal 2520 zcmeHJOK;mo5Z>iW)YGz^I&Gak(zk%xjcqoDilU8dvyM?&0c;s=XaNMHWm+kus4VFQ z7J74jNPFyG+G|g__SjQrcB6=LlcMN36!Zz2a@S! zz|9@_rw;)bVKgEhS}mfn=4r9+>69>?8Icj2o*7%76&JjMY%?P}E_y{uLNY9QWx$G8 z-6zaqg{OoSLhVxbYT*L2A8GtSs9zHBqQ|6Bd7bjO4n|v>eGD+Y(CH5RQwJa<9%aPS7-ia1;^{bb zum&@k1=eH*W`ng@k(Iy}SQ#c%5w;8tlj&0kf)`p`oL%^*p8@rw4r`UGvhan z&RWcA3nLJXb{dvf3(_>?StrTd$LB#LjO=0@3O&6@g_UM3InTHaK_v+}hy08*j2`|@ z_yRQl)!Y55cLD*@UOOBmKPSD`c)S;6L9dl@yCWEZfUI2^drivn+Uk${B49)gc}I&AiRt49>V(w zHxW=7{6mC~5I#ou1mNEUhE;ARurJ{0|0l5dI4>92Iz<2PZ%FxeF**}t^-S%?CKwvy5HL7+)RgNKJ0c9h)l;cN(^^ zeSZ|hq3?^5@5c!{kMO?Y`&eRC4_}0E9IFWb6agzY{~Q79Y7VgM@FD=#sT4nuY|XZ8 z(_XPxWIK+AA0@uusLP7x+2^A{hIw!-h+GE{MgWCX$prD#34XtQ2Q!)4FzzRy2!Rdi`6Q{tc3SIi>&r literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-37.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36996854e0c13cee521b5933a46f4260517be846 GIT binary patch literal 11528 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-37.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3fdf91ebb8ed44d99cbd7d299eb1faee87a3745 GIT binary patch literal 6944 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 ibzWcu;(at1#8(FMH~MtPbj|)pF8v=`0x#+S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/utils.cpython-37.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..783900ecafddaf4fea2596c70e4f35a8ddaaa404 GIT binary patch literal 1593 zcmb_cU2oGc6t$hSP19@?Hb9y{g2xDL5-&_b18r=;K%)azV2dh6S#7pV`I?=*LefR4Kr>C${pT3B_}j+ z0K2?pa1*e{rwn!hPxC7Vx45-M{PuTXKzypF`*~K1Ph}cq(VmdtakfesXL~O;JAGU; zZVbRObTtb`kbrU$Fitr;C4pu3v~?3c6;ayl?(`|F!iI0`tI!qZ&nbjwo$gnRZYz;| zlr?Z0^J9DUVeg$1QuQ`OmLKK4m7-XS%BZ)I_oJlO6=~5c;$l9|R2e17d~vua*q->qcl1PrBJ2n4azuC3&l{^V-=OJ`DiUQYTWJ26p9izp$N3?i{AsKzc1&2^0#lL$dQ3;~4nZvMK?WmQVNd|= z_)N20X&Z~`GdT@kXginj-leMQdaiIy8}~(Ogw-iN5^8Jg$K)ySw+HF zc9F`60U_{Ige+~Tq0)6#@_bO5w~*4e5TUMh3+aVt(~|+LxlGxWqDZ2?2zQ4!kq;&} zrhP^p{r{D`yb3#_YAb$~f&l})F!U{n=T=@va|6xf&>89KnK5HbG0vg{sNaQkzoR|} z{)w#daHDig-CqLW@RJYVURWX}J0ZuUv_^0@eYrzPX&dC>9fxxG0Pi>CE!n<+s&5~` z4Ez(Tqv`!%`t{E0`pVl^;rixQ_vxBnlc;Ik5ZO^I^Gu=&C6-enF`ovFEYCtX?3Z(F z6vO_0B-4AaOqpAnxuBz2I!EPg{M6I#*>#x2yAsu;S)5ChmZ`1@Y)*9*6a{!5+3ay4 irl~NVL+vb8H_2n%Qe6Y%QI9&*vD$Xq_8Ok+xjz96J~kx) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/winterm_test.cpython-37.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/winterm_test.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bd978a5dc211499ceab23dd3dc2cea6873ebbf8 GIT binary patch literal 3336 zcmcIm&2tks6qmH?^{zh>118Y)W0($yx-Dr3TIjS)OA^wMnGiaO8DPgVJBy`&o&7M< znlzbk3WpxrTmOLM*n9sPU3>Ds&`bNC)^-vSARO2oy_NKy-s=6{hcs8MmIyo{Z9jc6 zLC8Ni7(Fg@Zb4JO1L1_zi1_$r5sjJ8V#~K;+qWs%s>7@m6=KJC;-X)qC=rcl{@sD!rTu#@PL+UWG|Cy`L9!L)rhZExs8FU;Cc2Mm_riU*x! zK8;dodTZHMByZM3c~3Y_grr8 zQ(o9*`PPBs4JBRf8OhQy$r3LcPWc$8!mEZ;ImVgblZI0rYOnD#W;`(*pXKMwc#_uv zrt`WyGz?MNo@%4nVI0nEc9IOt#qYJNZ3G4%G#J}FG<63^Ms~>y#_0|VpzY8u3#`nB zIctaP6?Uwy!`VKgWH>5v>(B@x0Ujr?k;2L#1$~1e5(f#!R>PA8_~`QHY?jH+<9;TT zo?aB$e43~<5^HTKL^9W3Ul(#ISx~6DV|U!`8ME(Yp3x2nN98+Ewjh7k{d4#NjU@KLlm}2J_#y?t?njS{6zAJZ;VP zdbh(YY%QnlFlseL+-vnZy(^tWWnmOu={>t4pA!W`;Q7up28+jZC<24WKzjD)oXdbVp)JnMI)P?tc4r<z~WBS9bLg$Nx+Hr=zK7SUlXqFw7yWrDf|mC7J&P_u`Th{dPbDCVJv1Nj*e z3`%WdB{2ZV&td$gI5SE8GlX1|>*SZPj}xrJY|}Ot$ak=A z4#e-m!c$m>qVM0j0oIEXtix$tFm?ZQ=6P5o%q8IAiT0g;wH_GRBgJ4`dY3`N+lv9D zzB5dHD85~{>j8zd-z)Evb=HA4PH&b6>YFmzfun&#s+!0(_4C5o_yBE+UrqHhN2~TQ zk%Le^QQBE+-oAIgDKEi}PnXye2B)!RyeKKGC*#znE+jRU((UPEkR2>LeAO7^_6w*v z4Q_bd;MN~`lD`eRVUjl+RC{RxR{<`hd;^m58`#AGjPhF?UI${pT3B6u2e77&f^{!h zGk=$$?HFj49JEhg587z?N~5OTAV|Vk1c5FEL7eh_g#Aho;Qc4(NW@isj0DT3w$zr= zZZ8TmC}}ZVkh4%`YO|9)m6uWI3nVj0zD9Bl$#+P8Kyq-VnjRjkvJ9jOP2thvvRY|+ zs&;O=jBjnyaB-h_9S?#=P5uN@zT1ae55gib1f+!ox93+!j2XO>Wa=UWJKopK#lYMH^4g6Xk~fi@uwCum%z^q5|7`GgX`L}zhx2EO)va3JrT+sR CdEY1i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/ansi_test.py b/venv/Lib/site-packages/colorama/tests/ansi_test.py new file mode 100644 index 0000000..0a20c80 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/ansi_test.py @@ -0,0 +1,76 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansi import Back, Fore, Style +from ..ansitowin32 import AnsiToWin32 + +stdout_orig = sys.stdout +stderr_orig = sys.stderr + + +class AnsiTest(TestCase): + + def setUp(self): + # sanity check: stdout should be a file or StringIO object. + # It will only be AnsiToWin32 if init() has previously wrapped it + self.assertNotEqual(type(sys.stdout), AnsiToWin32) + self.assertNotEqual(type(sys.stderr), AnsiToWin32) + + def tearDown(self): + sys.stdout = stdout_orig + sys.stderr = stderr_orig + + + def testForeAttributes(self): + self.assertEqual(Fore.BLACK, '\033[30m') + self.assertEqual(Fore.RED, '\033[31m') + self.assertEqual(Fore.GREEN, '\033[32m') + self.assertEqual(Fore.YELLOW, '\033[33m') + self.assertEqual(Fore.BLUE, '\033[34m') + self.assertEqual(Fore.MAGENTA, '\033[35m') + self.assertEqual(Fore.CYAN, '\033[36m') + self.assertEqual(Fore.WHITE, '\033[37m') + self.assertEqual(Fore.RESET, '\033[39m') + + # Check the light, extended versions. + self.assertEqual(Fore.LIGHTBLACK_EX, '\033[90m') + self.assertEqual(Fore.LIGHTRED_EX, '\033[91m') + self.assertEqual(Fore.LIGHTGREEN_EX, '\033[92m') + self.assertEqual(Fore.LIGHTYELLOW_EX, '\033[93m') + self.assertEqual(Fore.LIGHTBLUE_EX, '\033[94m') + self.assertEqual(Fore.LIGHTMAGENTA_EX, '\033[95m') + self.assertEqual(Fore.LIGHTCYAN_EX, '\033[96m') + self.assertEqual(Fore.LIGHTWHITE_EX, '\033[97m') + + + def testBackAttributes(self): + self.assertEqual(Back.BLACK, '\033[40m') + self.assertEqual(Back.RED, '\033[41m') + self.assertEqual(Back.GREEN, '\033[42m') + self.assertEqual(Back.YELLOW, '\033[43m') + self.assertEqual(Back.BLUE, '\033[44m') + self.assertEqual(Back.MAGENTA, '\033[45m') + self.assertEqual(Back.CYAN, '\033[46m') + self.assertEqual(Back.WHITE, '\033[47m') + self.assertEqual(Back.RESET, '\033[49m') + + # Check the light, extended versions. + self.assertEqual(Back.LIGHTBLACK_EX, '\033[100m') + self.assertEqual(Back.LIGHTRED_EX, '\033[101m') + self.assertEqual(Back.LIGHTGREEN_EX, '\033[102m') + self.assertEqual(Back.LIGHTYELLOW_EX, '\033[103m') + self.assertEqual(Back.LIGHTBLUE_EX, '\033[104m') + self.assertEqual(Back.LIGHTMAGENTA_EX, '\033[105m') + self.assertEqual(Back.LIGHTCYAN_EX, '\033[106m') + self.assertEqual(Back.LIGHTWHITE_EX, '\033[107m') + + + def testStyleAttributes(self): + self.assertEqual(Style.DIM, '\033[2m') + self.assertEqual(Style.NORMAL, '\033[22m') + self.assertEqual(Style.BRIGHT, '\033[1m') + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py b/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py new file mode 100644 index 0000000..91ca551 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py @@ -0,0 +1,294 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from io import StringIO, TextIOWrapper +from unittest import TestCase, main +try: + from contextlib import ExitStack +except ImportError: + # python 2 + from contextlib2 import ExitStack + +try: + from unittest.mock import MagicMock, Mock, patch +except ImportError: + from mock import MagicMock, Mock, patch + +from ..ansitowin32 import AnsiToWin32, StreamWrapper +from ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING +from .utils import osname + + +class StreamWrapperTest(TestCase): + + def testIsAProxy(self): + mockStream = Mock() + wrapper = StreamWrapper(mockStream, None) + self.assertTrue( wrapper.random_attr is mockStream.random_attr ) + + def testDelegatesWrite(self): + mockStream = Mock() + mockConverter = Mock() + wrapper = StreamWrapper(mockStream, mockConverter) + wrapper.write('hello') + self.assertTrue(mockConverter.write.call_args, (('hello',), {})) + + def testDelegatesContext(self): + mockConverter = Mock() + s = StringIO() + with StreamWrapper(s, mockConverter) as fp: + fp.write(u'hello') + self.assertTrue(s.closed) + + def testProxyNoContextManager(self): + mockStream = MagicMock() + mockStream.__enter__.side_effect = AttributeError() + mockConverter = Mock() + with self.assertRaises(AttributeError) as excinfo: + with StreamWrapper(mockStream, mockConverter) as wrapper: + wrapper.write('hello') + + def test_closed_shouldnt_raise_on_closed_stream(self): + stream = StringIO() + stream.close() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + + def test_closed_shouldnt_raise_on_detached_stream(self): + stream = TextIOWrapper(StringIO()) + stream.detach() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + +class AnsiToWin32Test(TestCase): + + def testInit(self): + mockStdout = Mock() + auto = Mock() + stream = AnsiToWin32(mockStdout, autoreset=auto) + self.assertEqual(stream.wrapped, mockStdout) + self.assertEqual(stream.autoreset, auto) + + @patch('colorama.ansitowin32.winterm', None) + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + def testStripIsTrueOnWindows(self): + with osname('nt'): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + self.assertTrue(stream.strip) + + def testStripIsFalseOffWindows(self): + with osname('posix'): + mockStdout = Mock(closed=False) + stream = AnsiToWin32(mockStdout) + self.assertFalse(stream.strip) + + def testWriteStripsAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = True + + stream.write('abc') + + self.assertFalse(stream.wrapped.write.called) + self.assertEqual(stream.write_and_convert.call_args, (('abc',), {})) + + def testWriteDoesNotStripAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = False + stream.convert = False + + stream.write('abc') + + self.assertFalse(stream.write_and_convert.called) + self.assertEqual(stream.wrapped.write.call_args, (('abc',), {})) + + def assert_autoresets(self, convert, autoreset=True): + stream = AnsiToWin32(Mock()) + stream.convert = convert + stream.reset_all = Mock() + stream.autoreset = autoreset + stream.winterm = Mock() + + stream.write('abc') + + self.assertEqual(stream.reset_all.called, autoreset) + + def testWriteAutoresets(self): + self.assert_autoresets(convert=True) + self.assert_autoresets(convert=False) + self.assert_autoresets(convert=True, autoreset=False) + self.assert_autoresets(convert=False, autoreset=False) + + def testWriteAndConvertWritesPlainText(self): + stream = AnsiToWin32(Mock()) + stream.write_and_convert( 'abc' ) + self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) ) + + def testWriteAndConvertStripsAllValidAnsi(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + data = [ + 'abc\033[mdef', + 'abc\033[0mdef', + 'abc\033[2mdef', + 'abc\033[02mdef', + 'abc\033[002mdef', + 'abc\033[40mdef', + 'abc\033[040mdef', + 'abc\033[0;1mdef', + 'abc\033[40;50mdef', + 'abc\033[50;30;40mdef', + 'abc\033[Adef', + 'abc\033[0Gdef', + 'abc\033[1;20;128Hdef', + ] + for datum in data: + stream.wrapped.write.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( + [args[0] for args in stream.wrapped.write.call_args_list], + [ ('abc',), ('def',) ] + ) + + def testWriteAndConvertSkipsEmptySnippets(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + stream.write_and_convert( '\033[40m\033[41m' ) + self.assertFalse( stream.wrapped.write.called ) + + def testWriteAndConvertCallsWin32WithParamsAndCommand(self): + stream = AnsiToWin32(Mock()) + stream.convert = True + stream.call_win32 = Mock() + stream.extract_params = Mock(return_value='params') + data = { + 'abc\033[adef': ('a', 'params'), + 'abc\033[;;bdef': ('b', 'params'), + 'abc\033[0cdef': ('c', 'params'), + 'abc\033[;;0;;Gdef': ('G', 'params'), + 'abc\033[1;20;128Hdef': ('H', 'params'), + } + for datum, expected in data.items(): + stream.call_win32.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( stream.call_win32.call_args[0], expected ) + + def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + converter = AnsiToWin32(stream) + stream.close() + + converter.reset_all() + + def test_wrap_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + stream.close() + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(stream) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def test_wrap_shouldnt_raise_on_missing_closed_attr(self): + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(object()) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def testExtractParams(self): + stream = AnsiToWin32(Mock()) + data = { + '': (0,), + ';;': (0,), + '2': (2,), + ';;002;;': (2,), + '0;1': (0, 1), + ';;003;;456;;': (3, 456), + '11;22;33;44;55': (11, 22, 33, 44, 55), + } + for datum, expected in data.items(): + self.assertEqual(stream.extract_params('m', datum), expected) + + def testCallWin32UsesLookup(self): + listener = Mock() + stream = AnsiToWin32(listener) + stream.win32_calls = { + 1: (lambda *_, **__: listener(11),), + 2: (lambda *_, **__: listener(22),), + 3: (lambda *_, **__: listener(33),), + } + stream.call_win32('m', (3, 1, 99, 2)) + self.assertEqual( + [a[0][0] for a in listener.call_args_list], + [33, 11, 22] ) + + def test_osc_codes(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout, convert=True) + with patch('colorama.ansitowin32.winterm') as winterm: + data = [ + '\033]0\x07', # missing arguments + '\033]0;foo\x08', # wrong OSC command + '\033]0;colorama_test_title\x07', # should work + '\033]1;colorama_test_title\x07', # wrong set command + '\033]2;colorama_test_title\x07', # should work + '\033]' + ';' * 64 + '\x08', # see issue #247 + ] + for code in data: + stream.write(code) + self.assertEqual(winterm.set_title.call_count, 2) + + def test_native_windows_ansi(self): + with ExitStack() as stack: + def p(a, b): + stack.enter_context(patch(a, b, create=True)) + # Pretend to be on Windows + p("colorama.ansitowin32.os.name", "nt") + p("colorama.ansitowin32.winapi_test", lambda: True) + p("colorama.win32.winapi_test", lambda: True) + p("colorama.winterm.win32.windll", "non-None") + p("colorama.winterm.get_osfhandle", lambda _: 1234) + + # Pretend that our mock stream has native ANSI support + p( + "colorama.winterm.win32.GetConsoleMode", + lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = True + stdout.fileno.return_value = 1 + + # Our fake console says it has native vt support, so AnsiToWin32 should + # enable that support and do nothing else. + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertFalse(stream.strip) + self.assertFalse(stream.convert) + self.assertFalse(stream.should_wrap()) + + # Now let's pretend we're on an old Windows console, that doesn't have + # native ANSI support. + p("colorama.winterm.win32.GetConsoleMode", lambda _: 0) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertTrue(stream.strip) + self.assertTrue(stream.convert) + self.assertTrue(stream.should_wrap()) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/initialise_test.py b/venv/Lib/site-packages/colorama/tests/initialise_test.py new file mode 100644 index 0000000..89f9b07 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/initialise_test.py @@ -0,0 +1,189 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import patch, Mock +except ImportError: + from mock import patch, Mock + +from ..ansitowin32 import StreamWrapper +from ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests +from .utils import osname, replace_by + +orig_stdout = sys.stdout +orig_stderr = sys.stderr + + +class InitTest(TestCase): + + @skipUnless(sys.stdout.isatty(), "sys.stdout is not a tty") + def setUp(self): + # sanity check + self.assertNotWrapped() + + def tearDown(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def assertWrapped(self): + self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped') + self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped') + self.assertTrue(isinstance(sys.stdout, StreamWrapper), + 'bad stdout wrapper') + self.assertTrue(isinstance(sys.stderr, StreamWrapper), + 'bad stderr wrapper') + + def assertNotWrapped(self): + self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped') + self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped') + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + @patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False) + def testInitWrapsOnWindows(self, _): + with osname("nt"): + init() + self.assertWrapped() + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: False) + def testInitDoesntWrapOnEmulatedWindows(self, _): + with osname("nt"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapOnNonWindows(self): + with osname("posix"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapIfNone(self): + with replace_by(None): + init() + # We can't use assertNotWrapped here because replace_by(None) + # changes stdout/stderr already. + self.assertIsNone(sys.stdout) + self.assertIsNone(sys.stderr) + + def testInitAutoresetOnWrapsOnAllPlatforms(self): + with osname("posix"): + init(autoreset=True) + self.assertWrapped() + + def testInitWrapOffDoesntWrapOnWindows(self): + with osname("nt"): + init(wrap=False) + self.assertNotWrapped() + + def testInitWrapOffIncompatibleWithAutoresetOn(self): + self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False)) + + @patch('colorama.win32.SetConsoleTextAttribute') + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetPassedOn(self, mockATW32, _): + with osname("nt"): + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 2) + self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True) + + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetChangeable(self, mockATW32): + with osname("nt"): + init() + + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 4) + self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True) + + init() + self.assertEqual(len(mockATW32.call_args_list), 6) + self.assertEqual( + mockATW32.call_args_list[4][1]['autoreset'], False) + self.assertEqual( + mockATW32.call_args_list[5][1]['autoreset'], False) + + + @patch('colorama.initialise.atexit.register') + def testAtexitRegisteredOnlyOnce(self, mockRegister): + init() + self.assertTrue(mockRegister.called) + mockRegister.reset_mock() + init() + self.assertFalse(mockRegister.called) + + +class JustFixWindowsConsoleTest(TestCase): + def _reset(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def tearDown(self): + self._reset() + + @patch("colorama.ansitowin32.winapi_test", lambda: True) + def testJustFixWindowsConsole(self): + if sys.platform != "win32": + # just_fix_windows_console should be a no-op + just_fix_windows_console() + self.assertIs(sys.stdout, orig_stdout) + self.assertIs(sys.stderr, orig_stderr) + else: + def fake_std(): + # Emulate stdout=not a tty, stderr=tty + # to check that we handle both cases correctly + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = False + stdout.fileno.return_value = 1 + sys.stdout = stdout + + stderr = Mock() + stderr.closed = False + stderr.isatty.return_value = True + stderr.fileno.return_value = 2 + sys.stderr = stderr + + for native_ansi in [False, True]: + with patch( + 'colorama.ansitowin32.enable_vt_processing', + lambda *_: native_ansi + ): + self._reset() + fake_std() + + # Regular single-call test + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + if native_ansi: + self.assertIs(sys.stderr, prev_stderr) + else: + self.assertIsNot(sys.stderr, prev_stderr) + + # second call without resetting is always a no-op + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + self.assertIs(sys.stderr, prev_stderr) + + self._reset() + fake_std() + + # If init() runs first, just_fix_windows_console should be a no-op + init() + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(prev_stdout, sys.stdout) + self.assertIs(prev_stderr, sys.stderr) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/isatty_test.py b/venv/Lib/site-packages/colorama/tests/isatty_test.py new file mode 100644 index 0000000..0f84e4b --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/isatty_test.py @@ -0,0 +1,57 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansitowin32 import StreamWrapper, AnsiToWin32 +from .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY + + +def is_a_tty(stream): + return StreamWrapper(stream, None).isatty() + +class IsattyTest(TestCase): + + def test_TTY(self): + tty = StreamTTY() + self.assertTrue(is_a_tty(tty)) + with pycharm(): + self.assertTrue(is_a_tty(tty)) + + def test_nonTTY(self): + non_tty = StreamNonTTY() + self.assertFalse(is_a_tty(non_tty)) + with pycharm(): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharm(self): + with pycharm(): + self.assertTrue(is_a_tty(sys.stderr)) + self.assertTrue(is_a_tty(sys.stdout)) + + def test_withPycharmTTYOverride(self): + tty = StreamTTY() + with pycharm(), replace_by(tty): + self.assertTrue(is_a_tty(tty)) + + def test_withPycharmNonTTYOverride(self): + non_tty = StreamNonTTY() + with pycharm(), replace_by(non_tty): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharmNoneOverride(self): + with pycharm(): + with replace_by(None), replace_original_by(None): + self.assertFalse(is_a_tty(None)) + self.assertFalse(is_a_tty(StreamNonTTY())) + self.assertTrue(is_a_tty(StreamTTY())) + + def test_withPycharmStreamWrapped(self): + with pycharm(): + self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty()) + self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty()) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/utils.py b/venv/Lib/site-packages/colorama/tests/utils.py new file mode 100644 index 0000000..472fafb --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/utils.py @@ -0,0 +1,49 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from contextlib import contextmanager +from io import StringIO +import sys +import os + + +class StreamTTY(StringIO): + def isatty(self): + return True + +class StreamNonTTY(StringIO): + def isatty(self): + return False + +@contextmanager +def osname(name): + orig = os.name + os.name = name + yield + os.name = orig + +@contextmanager +def replace_by(stream): + orig_stdout = sys.stdout + orig_stderr = sys.stderr + sys.stdout = stream + sys.stderr = stream + yield + sys.stdout = orig_stdout + sys.stderr = orig_stderr + +@contextmanager +def replace_original_by(stream): + orig_stdout = sys.__stdout__ + orig_stderr = sys.__stderr__ + sys.__stdout__ = stream + sys.__stderr__ = stream + yield + sys.__stdout__ = orig_stdout + sys.__stderr__ = orig_stderr + +@contextmanager +def pycharm(): + os.environ["PYCHARM_HOSTED"] = "1" + non_tty = StreamNonTTY() + with replace_by(non_tty), replace_original_by(non_tty): + yield + del os.environ["PYCHARM_HOSTED"] diff --git a/venv/Lib/site-packages/colorama/tests/winterm_test.py b/venv/Lib/site-packages/colorama/tests/winterm_test.py new file mode 100644 index 0000000..d0955f9 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/winterm_test.py @@ -0,0 +1,131 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import Mock, patch +except ImportError: + from mock import Mock, patch + +from ..winterm import WinColor, WinStyle, WinTerm + + +class WinTermTest(TestCase): + + @patch('colorama.winterm.win32') + def testInit(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 7 + 6 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + self.assertEqual(term._fore, 7) + self.assertEqual(term._back, 6) + self.assertEqual(term._style, 8) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testGetAttrs(self): + term = WinTerm() + + term._fore = 0 + term._back = 0 + term._style = 0 + self.assertEqual(term.get_attrs(), 0) + + term._fore = WinColor.YELLOW + self.assertEqual(term.get_attrs(), WinColor.YELLOW) + + term._back = WinColor.MAGENTA + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16) + + term._style = WinStyle.BRIGHT + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT) + + @patch('colorama.winterm.win32') + def testResetAll(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 1 + 2 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + + term.set_console = Mock() + term._fore = -1 + term._back = -1 + term._style = -1 + + term.reset_all() + + self.assertEqual(term._fore, 1) + self.assertEqual(term._back, 2) + self.assertEqual(term._style, 8) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testFore(self): + term = WinTerm() + term.set_console = Mock() + term._fore = 0 + + term.fore(5) + + self.assertEqual(term._fore, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testBack(self): + term = WinTerm() + term.set_console = Mock() + term._back = 0 + + term.back(5) + + self.assertEqual(term._back, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testStyle(self): + term = WinTerm() + term.set_console = Mock() + term._style = 0 + + term.style(22) + + self.assertEqual(term._style, 22) + self.assertEqual(term.set_console.called, True) + + @patch('colorama.winterm.win32') + def testSetConsole(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console() + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDOUT, term.get_attrs()), {}) + ) + + @patch('colorama.winterm.win32') + def testSetConsoleOnStderr(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console(on_stderr=True) + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDERR, term.get_attrs()), {}) + ) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/win32.py b/venv/Lib/site-packages/colorama/win32.py new file mode 100644 index 0000000..841b0e2 --- /dev/null +++ b/venv/Lib/site-packages/colorama/win32.py @@ -0,0 +1,180 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW + _SetConsoleTitleW.argtypes = [ + wintypes.LPCWSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + _GetConsoleMode = windll.kernel32.GetConsoleMode + _GetConsoleMode.argtypes = [ + wintypes.HANDLE, + POINTER(wintypes.DWORD) + ] + _GetConsoleMode.restype = wintypes.BOOL + + _SetConsoleMode = windll.kernel32.SetConsoleMode + _SetConsoleMode.argtypes = [ + wintypes.HANDLE, + wintypes.DWORD + ] + _SetConsoleMode.restype = wintypes.BOOL + + def _winapi_test(handle): + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def winapi_test(): + return any(_winapi_test(h) for h in + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(stream_id) + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(stream_id) + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = _GetStdHandle(stream_id) + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) + + def GetConsoleMode(handle): + mode = wintypes.DWORD() + success = _GetConsoleMode(handle, byref(mode)) + if not success: + raise ctypes.WinError() + return mode.value + + def SetConsoleMode(handle, mode): + success = _SetConsoleMode(handle, mode) + if not success: + raise ctypes.WinError() diff --git a/venv/Lib/site-packages/colorama/winterm.py b/venv/Lib/site-packages/colorama/winterm.py new file mode 100644 index 0000000..aad867e --- /dev/null +++ b/venv/Lib/site-packages/colorama/winterm.py @@ -0,0 +1,195 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +try: + from msvcrt import get_osfhandle +except ImportError: + def get_osfhandle(_): + raise OSError("This isn't windows!") + + +from . import win32 + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) + + +def enable_vt_processing(fd): + if win32.windll is None or not win32.winapi_test(): + return False + + try: + handle = get_osfhandle(fd) + mode = win32.GetConsoleMode(handle) + win32.SetConsoleMode( + handle, + mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + + mode = win32.GetConsoleMode(handle) + if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING: + return True + # Can get TypeError in testsuite where 'fd' is a Mock() + except (OSError, TypeError): + return False diff --git a/venv/Lib/site-packages/easy_install.py b/venv/Lib/site-packages/easy_install.py new file mode 100644 index 0000000..d87e984 --- /dev/null +++ b/venv/Lib/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/venv/Lib/site-packages/flask/__init__.py b/venv/Lib/site-packages/flask/__init__.py new file mode 100644 index 0000000..1999340 --- /dev/null +++ b/venv/Lib/site-packages/flask/__init__.py @@ -0,0 +1,71 @@ +from markupsafe import escape +from markupsafe import Markup + +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 signals_available as signals_available +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.2.5" + + +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.3.", + 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.3.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + raise AttributeError(name) diff --git a/venv/Lib/site-packages/flask/__main__.py b/venv/Lib/site-packages/flask/__main__.py new file mode 100644 index 0000000..4e28416 --- /dev/null +++ b/venv/Lib/site-packages/flask/__main__.py @@ -0,0 +1,3 @@ +from .cli import main + +main() diff --git a/venv/Lib/site-packages/flask/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d33b9db7817871dedb2c3dbb668392c445351d79 GIT binary patch literal 2374 zcmb`I*>2lL6oyG^p)4=5EL+}f*|9Cli()%X(iTOLt-UDH6o|V30|6{0jwHszB{P)m z1j$X?+dfENNw>YqEA*=W8A*xaTotGY{`mOM;qc6vMUSSZ^9Fv7+3J2bX&8Ug!{}!L z9^h6vkY{+NFandACb0#!m<3LGX^{%jEUh^sGC`JQHD|##vo+h`9Ls6WiHRW3@|q{a zWH801H0Q;1FvDgvPl5}qpm_>B%VsrCgNv-Fc}C0yC05d00MD~|&9mSIwxGEPF0-=c zIk6Zlu_etV@G@K0JP%%BE1DO;t87(s8N9~UG%teJ*}CQ>@CMt^ybRuCo0?a^6;{!_ z3f^K{n%6`+*k;?B*Tt=1hwW(I0PnJ0&70sowx_uQuCl7;E$}|u*Srm`v6|*v-~)D` zc?W#R4mIzBkJypsJ@7F*)?5YGSzYtKxE-9Z6U{a7DLd7C06t@9nh(Ku*d6c@`^-D` z>VFvQu6O&~sGYo{^-(kXS*}`c%!$5tO!zgu zU+B8ZapQQ*Dv>qpVa%Q!b%JQTXwoSIQp@z->m7I?uE*k}hDr!xKk8aL)-4 z=yte*UnW1{K`h*aJ8qIlzu8M@kkf&C!I8!LQRgK0e92qX?}Xx^=d^u6k)^?di~?s6 z5Xo2CP9%2&=gLpIW23NpQaJ5MBEqJ6`)vv?VobxDIB^um+`DP^R9BmeW047WF$*2X zi>_$i%1w@rDe2Ioi5LzGEeoCKL+$x>i^s{JQiWkHMzulg?5Of>KlFzmEsQ*sxH8ds z%#W-aNfede30;9Xy>xxyHg$=Lqg;l$=^oJO%{6gZx!TlJw5|B4I5icxx;#r;{jJKvf3C+NIi&OE9`6A_IlC+og>_1a@ zw$3R&hxlK|;wOX|WZqIc#plQ3Q|CsKePjG?{$_dxcHQJNHZxe>$u$ymTNjcNlav(= z%lWwR^@HliMz!Lriih3CTUeo9#SOj6l`ll4$t#iv(Iq@TtmqwEIji5PzoXM1J?Hhu z1i$2h&3)KSqbv|naz3?RKdF9d{^uNOc0YIJ$`Dhh`gTV|O)Lm`jKunB^80g7h9kl% z{ACa*PpEn3;b;qfBPBLTx}Of+fXh=f>JD_+UxvI7hY`oq~qW~pku&s zC?B;AG0YsUDJyMSxN=t7y7?@>K-9C^J(dsjfvVg#moyJD1?d}-)*nk@=gKU(Hc5`W zd~rwC9>v8 z7D&n@izG`V%Ooo#t0ZeA>kwuScdy(aYm=lxvPDA0khe&7NOno~NU9|J5SAbAPt3fm yk$XULNOAk0lfZ58!1WD51i{eNCoI`uC&*n)5X literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/__main__.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/__main__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d0b3ce1362f9e3959e451da02610e5ada3a6022 GIT binary patch literal 206 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 z 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 JvB6yf{{>e>4nY6_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/blueprints.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/blueprints.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0df573cc7a3a4baef47b046b0086847f63881c35 GIT binary patch literal 25295 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/cli.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/cli.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71b12f7decf3552e669383d96775a909f13ca4e5 GIT binary patch literal 26421 zcmchAdvF{_df&YEfyIL$2vH>U8u4@jArmW#r;~KBPA7^KCF&@M7NMhVPx4~9JpdM1 z>@Ir-Br&&;??j#@*`}=6iJjC*XV5;o{75cNQu)Vm9LI6quS#60vd0&v96O1Xs-&Dh z;zVQKl7*kDU0?n4H!bTAc#-`~;^b*- z(h9%nT9&eu-Ly9Bif!}UX*v~0{<;-c{(2Qp{^lw<`J1ogobQV^Wvb9N(CzOr-VhsqDe?Tyt_`Z)LCC%QvSs_Eq-Dd7(MIaYyA2IWIQ%Z`@hA z6XzqU)I6|puyRn&N1KN>?yB4+=VLg(yK=W}1*Nrn^uI^R@#ei7_f_t*t>-K?q4r$2 z)Sh6^nt#o$+^;6p-s@K7u$of)@b_bCTHS%a52*d>PW=72x}grLL)Y!fgX%7IH}1^f z%_Hib6f?BK4rLxx zGbqDa%4q*#bwtgohw$%v-uKi|HFw>s9FrEx>fsef9aE2>j{AaR>NwhXL`r``Ju0O? zsUAb=<5K!@^ydkbJFY%;!>fE^sMdM)y(ssnlzUQrdd0!nCt0g{>V~5}BlSP3o<{wT zp?@dTGw9zl!Ncg?Mw-c`@4PpH%HJL)<0{PkSrQ|gR*0Z-=f#%I-8ym1z_ zelOm6QoX1a@Z{5Y@{&4-C+FB6o;-!WpHbhZURLLCun$kGMfHmMoVuW1z2V9A=T$|0 zLA}X$9-#e!wwfVlSE~_ioJ-%HzEzhs2t=@RV>Wjgio##~drmeQs8|nwr@A?w@ z{$=$hzH3fh!#qUl`unc>iuyrQlhpQn@VI(Qy{+B>y`4$h`XTkhnE4li&#E6;ciwaL zZwD`2v%n+Hd29AZKP1o3+R13G)oMqzsL^hP3%H)x?5J84RIlh-rxR%0Db=D#uLMyf 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/config.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/config.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..837810606f1f2dd9a12eb3eb994fa7159e198b20 GIT binary patch literal 12335 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 Xwyq+*%T<@ndF;*Tf6iQK;q3navq`iF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/ctx.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/ctx.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fba64c12ce46dab332ae79ff80c963c4e5ca6cbb GIT binary patch literal 14233 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 X-kGw;pIs`{-dTEKX|?8n*)RVuu_dB& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2eda0537e437d20ad65974684fc08d84472849a GIT binary patch literal 5862 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 F{|mklH?aT! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/globals.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/globals.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f847e3d74803b5c8378082a0e0d6f58e6c94bb4 GIT binary patch literal 3256 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 Jjvg;N{|EJL6QTeB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/logging.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/logging.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1e9da097352b2e822a6db9f67341c053dc9f5f8 GIT binary patch literal 2434 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/testing.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/testing.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b596c64457144d9b3fba2fb3056cd65263227f8 GIT binary patch literal 9309 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/typing.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/typing.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8bd68054099e2016964e81a6eabc577f3c804c0 GIT binary patch literal 1639 zcmZ`%+iu%N5am*&L|tPmiXu5q>bB`cZLNnsG(b@lwPnXP;v|MFr|3ecvC@uYIxCV{ zl2zP)DA3n_LVt;`ed;gtsk19mQUz25S2O3FojE()!)mo;;P0A@Z~iD7#$PJQenkv^ zz&HHeGz@NVA`D7^+?w)h%uJD+S=1tm$q9Rwr+FP)qA+u)Lkv_FxeX;KV^qPn+E!Q% z5sW9M&h9}e{V%tTNuh1fEo6&YQ%SjPDDk|~PjblD70(N4rFvTDKIW(cou|r%uB7U1 z!xl7BrHUV{$H-t^?o4c~-bD37j=p*6H{cR5+pJz426YD06uVf<*J&d{|zA1v9u)f{!#50NP&ZRtG;_9AEcN zk9#l9UY*d|HBu1X0PoJjsjCaohjWl`e}#D3}(oPcl z%0shB4)uvWx{DyB*0~!-GPmKR6WSmIp5 zyBNGN&`LUi1)g)gh~Cf6+XuAgEvgg-c%C;*N?VP@c^#+;GC{X-ps(d2HVPzeegSuh z(_=!gk$|LlFlTP0LfSZ(pufIq8%CLc?i|9zm+;(`VYJCTSa2I~Vja2Th(5l&0U>(6 z7s31JLi%F}Ltkcfljq<6_N0 zweQDhJRS0%hHR>b omZcb_K|EhGOT@xx$F#^(eCyu4KU)tTa7ytkO literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/views.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/views.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8df5ce3713d99a5878cb5b8ec11eabf73d4353c GIT binary patch literal 5341 zcmb_gOLN@D5yoquTv8$x$&&3TW5!Xq6>9xRRa{}oie*ZER2U|ums1(}(ShH<@LHx1F? zb>84j-r{XO!#jL-t9fMho1Yqdj-PvK@N-92zlFE+d>(J}qIG2V+uXcobQgZWUdH+l zCi;t+&XgYqf+Yid6Q!X0q1x83Tj8FFH5*@UjdpR#w2HF; zJ7+A!n|JmE9;2froM|?Ge83*uT`OeqW$154BI~vF`#k|Y@FZCANXpD(gGA!QTqr+` zaLla{G*!~}dMrq|xV{-B!OqGGOAoL|T=3EQ(%Sw^L{YNz5Zt;edJFnQPZ)>F6;S@c zMAPg;_K6>5V#MG7fgEB{QMvgshVC)#gdC4k-kdgk8s7oq61u56lRJn zXi7V=VzMc1z_8`QY%5#rvD+1EMw~)WK-8%j!oHw*E#7_zQ;!qHHsKN{Xa>_SgiVM8>$ zJwFQRHA?~FqQ`E*wf812%?2{r)t5K%cI_N6cjiM~DXUT!&{Fo$;pVs2Gvk^0 z%pM@Jar^yPC z&U5?7{MvrB`Go;)w%e>|TX<_t*5J2|_cnfK@Qa3MR`UlCe>I6=80xrJ#&A*?1N2h) zGCosWK|q0jO0fkz5K{2UmI_>#$w*D$oUZ%h1A<$B6scv+|CA?dpRdATjO|WEtBSpr zrHHY#lZN?;gI4j1!d126mC?6w*B<-4h=<2GXX5z!0&may>Pbi`&XvJZrn1wqDmkF8 z5&6X#vCF7OYP$27pjnf69$B5|Ei(%J37``3a^go5AJZ6$q@y@WwH0|Gwt;o>DbOA} zpXa%*K9371EY&cLVFGRFRZaSv|pM7Sob%SqnhjR%r+g$)#f0{ z>GBy7XCo=x>>v*0Wz2Lf`6hnkMH<@@*|i~Qi`=258e`;ZH2E`hTWA@jqK4_1P3!RW zhlB`aQ10D8I)W_XW{*||L`4rlb0zlzUX<~|d~OV_ld{@cK1l~FYDGfA%h6S+!`1NGUWO>$CyQVQv;Jqx))Kb!t~@mz%G57Oe9P z%W9jFzE@U*v5pe-o83e=sd=d45zeqiv4J9mjsUf%oqnBWMPt~cd8+JCskEMfNxuzm zXy)xd=uDjS>;D_hbi1rJ5cJFZWtt6^nOA~ZjsiSKaW@66;_OHd$y+}mjD74=kX~lt zfKhT3PC_>G;r*!mDi8sQLMZ^ent)wd;UFdD$PPU3(>wP;T?#ZwLGSCjsfZ|m$iXPm z2#A0IXn|-xyL;!}eRk_lpO;X1It2y-R;d;)_kaPwSy4Wf*>QO&3PNEFOhh?B$Ey<1 zlJWn)N?A=t$ZaHKUz%RfsnUW95vWnu9;ZH$kY!Q^69+{`xZES^#h_q~GUDBCSsxHN zJ;af!@mH}d`TV8g@g+*6S2Ab6V(*5~* zY%MCHspcjKe2jM`PEjJQPheiBVg$+bP%1`k1}!^8N15}GLI_eV{IkSF5@hW(HI<`~R*jt_ORj;Y zJ$7Eqyfie`8j>(e?v1Un;WoGd2esBUoOL^SEgPjm=JRC;&dUED0JDMKJPZ^@HVim# zxh~l-kSuTD!YK{O>!TFqhtRz8`E8|Aw=iw3vn+3H`%zKDZ_ zslY_=&26OTNVl<##ykL~hBXalzXsWNXc@?-OG|SB$3nS0~0jFPE*=GuwFj4%? z`nz>xer2i}uBC{wxK60pSI_y?M<&kS?HSui`+W%KZjV=6jRSj6ot~(>? zHY7ur7p!4fx~R>H(`vP}P~IIPj}l7$mdGh^>Gj7>U0F)ryiw#CH_7WVqHStJ>DZQe I$(cL+FJi;SQ2+n{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-37.pyc b/venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..297dc993c05b057d6f1cb215444042f045cad994 GIT binary patch literal 5049 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/app.py b/venv/Lib/site-packages/flask/app.py new file mode 100644 index 0000000..d904d6b --- /dev/null +++ b/venv/Lib/site-packages/flask/app.py @@ -0,0 +1,2552 @@ +import functools +import inspect +import json +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 itertools import chain +from threading import Lock +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 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 .helpers import locked_cached_property +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 + import typing_extensions as te + from .blueprints import Blueprint + from .testing import FlaskClient + from .testing import FlaskCliRunner + +T_before_first_request = t.TypeVar( + "T_before_first_request", bound=ft.BeforeFirstRequestCallable +) +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) + +if sys.version_info >= (3, 8): + iscoroutinefunction = inspect.iscoroutinefunction +else: + + def iscoroutinefunction(func: t.Any) -> bool: + while inspect.ismethod(func): + func = func.__func__ + + while isinstance(func, functools.partial): + func = func.func + + return inspect.iscoroutinefunction(func) + + +def _make_timedelta(value: t.Union[timedelta, int, None]) -> t.Optional[timedelta]: + 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") + + @property + def session_cookie_name(self) -> str: + """The name of the cookie set by the session interface. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use ``app.config["SESSION_COOKIE_NAME"]`` + instead. + """ + import warnings + + warnings.warn( + "'session_cookie_name' is deprecated and will be removed in Flask 2.3. Use" + " 'SESSION_COOKIE_NAME' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.config["SESSION_COOKIE_NAME"] + + @session_cookie_name.setter + def session_cookie_name(self, value: str) -> None: + import warnings + + warnings.warn( + "'session_cookie_name' is deprecated and will be removed in Flask 2.3. Use" + " 'SESSION_COOKIE_NAME' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.config["SESSION_COOKIE_NAME"] = value + + #: 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 + ) + + @property + def send_file_max_age_default(self) -> t.Optional[timedelta]: + """The default value for ``max_age`` for :func:`~flask.send_file`. The default + is ``None``, which tells the browser to use conditional requests instead of a + timed cache. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use + ``app.config["SEND_FILE_MAX_AGE_DEFAULT"]`` instead. + + .. versionchanged:: 2.0 + Defaults to ``None`` instead of 12 hours. + """ + import warnings + + warnings.warn( + "'send_file_max_age_default' is deprecated and will be removed in Flask" + " 2.3. Use 'SEND_FILE_MAX_AGE_DEFAULT' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + return _make_timedelta(self.config["SEND_FILE_MAX_AGE_DEFAULT"]) + + @send_file_max_age_default.setter + def send_file_max_age_default(self, value: t.Union[int, timedelta, None]) -> None: + import warnings + + warnings.warn( + "'send_file_max_age_default' is deprecated and will be removed in Flask" + " 2.3. Use 'SEND_FILE_MAX_AGE_DEFAULT' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.config["SEND_FILE_MAX_AGE_DEFAULT"] = _make_timedelta(value) + + @property + def use_x_sendfile(self) -> bool: + """Enable this to use the ``X-Sendfile`` feature, assuming the server supports + it, from :func:`~flask.send_file`. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use ``app.config["USE_X_SENDFILE"]`` instead. + """ + import warnings + + warnings.warn( + "'use_x_sendfile' is deprecated and will be removed in Flask 2.3. Use" + " 'USE_X_SENDFILE' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.config["USE_X_SENDFILE"] + + @use_x_sendfile.setter + def use_x_sendfile(self, value: bool) -> None: + import warnings + + warnings.warn( + "'use_x_sendfile' is deprecated and will be removed in Flask 2.3. Use" + " 'USE_X_SENDFILE' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.config["USE_X_SENDFILE"] = value + + _json_encoder: t.Union[t.Type[json.JSONEncoder], None] = None + _json_decoder: t.Union[t.Type[json.JSONDecoder], None] = None + + @property # type: ignore[override] + def json_encoder(self) -> t.Type[json.JSONEncoder]: + """The JSON encoder class to use. Defaults to + :class:`~flask.json.JSONEncoder`. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Customize + :attr:`json_provider_class` instead. + + .. versionadded:: 0.10 + """ + import warnings + + warnings.warn( + "'app.json_encoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + + if self._json_encoder is None: + from . import json + + return json.JSONEncoder + + return self._json_encoder + + @json_encoder.setter + def json_encoder(self, value: t.Type[json.JSONEncoder]) -> None: + import warnings + + warnings.warn( + "'app.json_encoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + self._json_encoder = value + + @property # type: ignore[override] + def json_decoder(self) -> t.Type[json.JSONDecoder]: + """The JSON decoder class to use. Defaults to + :class:`~flask.json.JSONDecoder`. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Customize + :attr:`json_provider_class` instead. + + .. versionadded:: 0.10 + """ + import warnings + + warnings.warn( + "'app.json_decoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + + if self._json_decoder is None: + from . import json + + return json.JSONDecoder + + return self._json_decoder + + @json_decoder.setter + def json_decoder(self, value: t.Type[json.JSONDecoder]) -> None: + import warnings + + warnings.warn( + "'app.json_decoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + self._json_decoder = value + + json_provider_class: t.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( + { + "ENV": None, + "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", + "JSON_AS_ASCII": None, + "JSON_SORT_KEYS": None, + "JSONIFY_PRETTYPRINT_REGULAR": None, + "JSONIFY_MIMETYPE": None, + "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: t.Optional[t.Type["FlaskClient"]] = 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: t.Optional[t.Type["FlaskCliRunner"]] = 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: t.Optional[str] = None, + static_folder: t.Optional[t.Union[str, os.PathLike]] = "static", + static_host: t.Optional[str] = None, + host_matching: bool = False, + subdomain_matching: bool = False, + template_folder: t.Optional[t.Union[str, os.PathLike]] = "templates", + instance_path: t.Optional[str] = None, + instance_relative_config: bool = False, + root_path: t.Optional[str] = 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: t.List[ + t.Callable[[Exception, str, t.Dict[str, t.Any]], str] + ] = [] + + #: A list of functions that will be called at the beginning of the + #: first request to this instance. To register a function, use the + #: :meth:`before_first_request` decorator. + #: + #: .. deprecated:: 2.2 + #: Will be removed in Flask 2.3. Run setup code when + #: creating the application instead. + #: + #: .. versionadded:: 0.8 + self.before_first_request_funcs: t.List[ft.BeforeFirstRequestCallable] = [] + + #: 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: t.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: t.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: t.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 + self._before_request_lock = Lock() + + # 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." + ) + + @locked_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 + + @property + def propagate_exceptions(self) -> bool: + """Returns the value of the ``PROPAGATE_EXCEPTIONS`` configuration + value in case it's set, otherwise a sensible default is returned. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. + + .. versionadded:: 0.7 + """ + import warnings + + warnings.warn( + "'propagate_exceptions' is deprecated and will be removed in Flask 2.3.", + DeprecationWarning, + stacklevel=2, + ) + rv = self.config["PROPAGATE_EXCEPTIONS"] + if rv is not None: + return rv + return self.testing or self.debug + + @locked_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) + + @locked_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. + + .. versionadded:: 0.8 + """ + 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["ENV"] = os.environ.get("FLASK_ENV") or "production" + 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) + + @property + def templates_auto_reload(self) -> bool: + """Reload templates when they are changed. Used by + :meth:`create_jinja_environment`. It is enabled by default in debug mode. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use ``app.config["TEMPLATES_AUTO_RELOAD"]`` + instead. + + .. versionadded:: 1.0 + This property was added but the underlying config and behavior + already existed. + """ + import warnings + + warnings.warn( + "'templates_auto_reload' is deprecated and will be removed in Flask 2.3." + " Use 'TEMPLATES_AUTO_RELOAD' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + rv = self.config["TEMPLATES_AUTO_RELOAD"] + return rv if rv is not None else self.debug + + @templates_auto_reload.setter + def templates_auto_reload(self, value: bool) -> None: + import warnings + + warnings.warn( + "'templates_auto_reload' is deprecated and will be removed in Flask 2.3." + " Use 'TEMPLATES_AUTO_RELOAD' in 'app.config' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.config["TEMPLATES_AUTO_RELOAD"] = value + + 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[t.Optional[str]] = (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 env(self) -> str: + """What environment the app is running in. This maps to the :data:`ENV` config + key. + + **Do not enable development when deploying in production.** + + Default: ``'production'`` + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. + """ + import warnings + + warnings.warn( + "'app.env' is deprecated and will be removed in Flask 2.3." + " Use 'app.debug' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.config["ENV"] + + @env.setter + def env(self, value: str) -> None: + import warnings + + warnings.warn( + "'app.env' is deprecated and will be removed in Flask 2.3." + " Use 'app.debug' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.config["ENV"] = value + + @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: t.Optional[str] = None, + port: t.Optional[int] = None, + debug: t.Optional[bool] = 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, let env vars override previous values + if "FLASK_ENV" in os.environ: + print( + "'FLASK_ENV' is deprecated and will not be used in" + " Flask 2.3. Use 'FLASK_DEBUG' instead.", + file=sys.stderr, + ) + self.config["ENV"] = os.environ.get("FLASK_ENV") or "production" + self.debug = get_debug_flag() + elif "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: t.Optional[str] = None, + view_func: t.Optional[ft.RouteCallable] = None, + provide_automatic_options: t.Optional[bool] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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 before_first_request(self, f: T_before_first_request) -> T_before_first_request: + """Registers a function to be run before the first request to this + instance of the application. + + The function will be called without any arguments and its return + value is ignored. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Run setup code when creating + the application instead. + + .. versionadded:: 0.8 + """ + import warnings + + warnings.warn( + "'before_first_request' is deprecated and will be removed" + " in Flask 2.3. Run setup code while creating the" + " application instead.", + DeprecationWarning, + stacklevel=2, + ) + self.before_first_request_funcs.append(f) + return 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) -> t.Optional[ft.ErrorHandlerCallable]: + """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 + ) -> t.Union[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 + ) -> t.Union[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 :attr:`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, 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: t.Union[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: t.Union[ + t.Tuple[type, BaseException, TracebackType], t.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) -> "te.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: t.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 + """ + # Run before_first_request functions if this is the thread's first request. + # Inlined to avoid a method call on subsequent requests. + # This is deprecated, will be removed in Flask 2.3. + if not self._got_first_request: + with self._before_request_lock: + if not self._got_first_request: + for func in self.before_first_request_funcs: + self.ensure_sync(func)() + + self._got_first_request = True + + try: + request_started.send(self) + 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: t.Union[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, 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: t.Optional[BaseException]) -> 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: t.Optional[str] = None, + _method: t.Optional[str] = None, + _scheme: t.Optional[str] = None, + _external: t.Optional[bool] = 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) # type: ignore[arg-type] + + return rv + + def create_url_adapter( + self, request: t.Optional[Request] + ) -> t.Optional[MapAdapter]: + """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[t.Optional[str]] = (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: t.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) -> t.Optional[ft.ResponseReturnValue]: + """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: t.Optional[BaseException] = _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, exc=exc) + + def do_teardown_appcontext( + self, exc: t.Optional[BaseException] = _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, 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 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: t.Optional[BaseException] = 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/venv/Lib/site-packages/flask/blueprints.py b/venv/Lib/site-packages/flask/blueprints.py new file mode 100644 index 0000000..eb66423 --- /dev/null +++ b/venv/Lib/site-packages/flask/blueprints.py @@ -0,0 +1,712 @@ +import json +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_first_request = t.TypeVar( + "T_before_first_request", bound=ft.BeforeFirstRequestCallable +) +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: t.Optional[str] = None, + view_func: t.Optional[t.Callable] = 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 + + _json_encoder: t.Union[t.Type[json.JSONEncoder], None] = None + _json_decoder: t.Union[t.Type[json.JSONDecoder], None] = None + + @property + def json_encoder( + self, + ) -> t.Union[t.Type[json.JSONEncoder], None]: + """Blueprint-local JSON encoder class to use. Set to ``None`` to use the app's. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Customize + :attr:`json_provider_class` instead. + + .. versionadded:: 0.10 + """ + import warnings + + warnings.warn( + "'bp.json_encoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self._json_encoder + + @json_encoder.setter + def json_encoder(self, value: t.Union[t.Type[json.JSONEncoder], None]) -> None: + import warnings + + warnings.warn( + "'bp.json_encoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + self._json_encoder = value + + @property + def json_decoder( + self, + ) -> t.Union[t.Type[json.JSONDecoder], None]: + """Blueprint-local JSON decoder class to use. Set to ``None`` to use the app's. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Customize + :attr:`json_provider_class` instead. + + .. versionadded:: 0.10 + """ + import warnings + + warnings.warn( + "'bp.json_decoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self._json_decoder + + @json_decoder.setter + def json_decoder(self, value: t.Union[t.Type[json.JSONDecoder], None]) -> None: + import warnings + + warnings.warn( + "'bp.json_decoder' is deprecated and will be removed in Flask 2.3." + " Customize 'app.json_provider_class' or 'app.json' instead.", + DeprecationWarning, + stacklevel=2, + ) + self._json_decoder = value + + def __init__( + self, + name: str, + import_name: str, + static_folder: t.Optional[t.Union[str, os.PathLike]] = None, + static_url_path: t.Optional[str] = None, + template_folder: t.Optional[t.Union[str, os.PathLike]] = None, + url_prefix: t.Optional[str] = None, + subdomain: t.Optional[str] = None, + url_defaults: t.Optional[dict] = None, + root_path: t.Optional[str] = None, + cli_group: t.Optional[str] = _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 "." 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: t.List[DeferredSetupFunction] = [] + + if url_defaults is None: + url_defaults = {} + + self.url_values_defaults = url_defaults + self.cli_group = cli_group + self._blueprints: t.List[t.Tuple["Blueprint", dict]] = [] + + def _check_setup_finished(self, f_name: str) -> None: + if self._got_registered_once: + import warnings + + warnings.warn( + f"The setup method '{f_name}' can no longer be called on" + f" the blueprint '{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.\n" + "This warning will become an exception in Flask 2.3.", + UserWarning, + stacklevel=3, + ) + + @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.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``. + + .. versionchanged:: 2.0.1 + Registering the same blueprint with the same name multiple + times is deprecated and will become an error in Flask 2.1. + """ + 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") + + 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: t.Optional[str] = None, + view_func: t.Optional[ft.RouteCallable] = None, + provide_automatic_options: t.Optional[bool] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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: t.Optional[str] = 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 before_app_first_request( + self, f: T_before_first_request + ) -> T_before_first_request: + """Register a function to run before the first request to the application is + handled by the worker. Equivalent to :meth:`.Flask.before_first_request`. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Run setup code when creating + the application instead. + """ + import warnings + + warnings.warn( + "'before_app_first_request' is deprecated and will be" + " removed in Flask 2.3. Use 'record_once' instead to run" + " setup code when registering the blueprint.", + DeprecationWarning, + stacklevel=2, + ) + self.record_once(lambda s: s.app.before_first_request_funcs.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: t.Union[t.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/venv/Lib/site-packages/flask/cli.py b/venv/Lib/site-packages/flask/cli.py new file mode 100644 index 0000000..37a15ff --- /dev/null +++ b/venv/Lib/site-packages/flask/cli.py @@ -0,0 +1,1054 @@ +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 attrgetter + +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: t.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", "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")) + + if sort in ("endpoint", "rule"): + rules = sorted(rules, key=attrgetter(sort)) + elif sort == "methods": + rules = sorted(rules, key=lambda rule: sorted(rule.methods)) # type: ignore + + rule_methods = [ + ", ".join(sorted(rule.methods - ignored_methods)) # type: ignore + for rule in rules + ] + + headers = ("Endpoint", "Methods", "Rule") + widths = ( + max(len(rule.endpoint) for rule in rules), + max(len(methods) for methods in rule_methods), + max(len(rule.rule) for rule in rules), + ) + widths = [max(len(h), w) for h, w in zip(headers, widths)] + row = "{{0:<{0}}} {{1:<{1}}} {{2:<{2}}}".format(*widths) + + click.echo(row.format(*headers).strip()) + click.echo(row.format(*("-" * width for width in widths))) + + for rule, methods in zip(rules, rule_methods): + click.echo(row.format(rule.endpoint, methods, rule.rule).rstrip()) + + +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/venv/Lib/site-packages/flask/config.py b/venv/Lib/site-packages/flask/config.py new file mode 100644 index 0000000..d4fc310 --- /dev/null +++ b/venv/Lib/site-packages/flask/config.py @@ -0,0 +1,338 @@ +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.Optional[t.Callable] = 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: t.Optional[dict] = 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: t.Union[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, + ) -> 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 toml + app.config.from_file("config.toml", load=toml.load) + + :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. + :return: ``True`` if the file was loaded successfully. + + .. versionadded:: 2.0 + """ + filename = os.path.join(self.root_path, filename) + + try: + with open(filename) 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.Optional[t.Mapping[str, t.Any]] = 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: t.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 + ) -> t.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/venv/Lib/site-packages/flask/ctx.py b/venv/Lib/site-packages/flask/ctx.py new file mode 100644 index 0000000..c79c26d --- /dev/null +++ b/venv/Lib/site-packages/flask/ctx.py @@ -0,0 +1,438 @@ +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.Optional[t.Any] = 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: t.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) + + def pop(self, exc: t.Optional[BaseException] = _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) + + def __enter__(self) -> "AppContext": + self.push() + return self + + def __exit__( + self, + exc_type: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> 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: t.Optional["Request"] = None, + session: t.Optional["SessionMixin"] = 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: t.Optional[t.List[t.Tuple[str, str]]] = None + self.session: t.Optional["SessionMixin"] = 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: t.List[ft.AfterRequestCallable] = [] + + self._cv_tokens: t.List[t.Tuple[contextvars.Token, t.Optional[AppContext]]] = [] + + 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: t.Optional[BaseException] = _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: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> 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/venv/Lib/site-packages/flask/debughelpers.py b/venv/Lib/site-packages/flask/debughelpers.py new file mode 100644 index 0000000..b063989 --- /dev/null +++ b/venv/Lib/site-packages/flask/debughelpers.py @@ -0,0 +1,158 @@ +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/venv/Lib/site-packages/flask/globals.py b/venv/Lib/site-packages/flask/globals.py new file mode 100644 index 0000000..254da42 --- /dev/null +++ b/venv/Lib/site-packages/flask/globals.py @@ -0,0 +1,107 @@ +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 + + def _warn(self): + import warnings + + warnings.warn( + f"'_{self.name}_ctx_stack' is deprecated and will be" + " removed in Flask 2.3. Use 'g' to store data, or" + f" '{self.name}_ctx' to access the current context.", + DeprecationWarning, + stacklevel=3, + ) + + def push(self, obj: t.Any) -> None: + self._warn() + self.cv.set(obj) + + def pop(self) -> t.Any: + self._warn() + ctx = self.cv.get(None) + self.cv.set(None) + return ctx + + @property + def top(self) -> t.Optional[t.Any]: + self._warn() + 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.3.", + 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.3.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + raise AttributeError(name) diff --git a/venv/Lib/site-packages/flask/helpers.py b/venv/Lib/site-packages/flask/helpers.py new file mode 100644 index 0000000..3833cb8 --- /dev/null +++ b/venv/Lib/site-packages/flask/helpers.py @@ -0,0 +1,705 @@ +import os +import pkgutil +import socket +import sys +import typing as t +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 + import typing_extensions as te + + +def get_env() -> str: + """Get the environment the app is running in, indicated by the + :envvar:`FLASK_ENV` environment variable. The default is + ``'production'``. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. + """ + import warnings + + warnings.warn( + "'FLASK_ENV' and 'get_env' are deprecated and will be removed" + " in Flask 2.3. Use 'FLASK_DEBUG' instead.", + DeprecationWarning, + stacklevel=2, + ) + return os.environ.get("FLASK_ENV") or "production" + + +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") + + if not val: + env = os.environ.get("FLASK_ENV") + + if env is not None: + print( + "'FLASK_ENV' is deprecated and will not be used in" + " Flask 2.3. Use 'FLASK_DEBUG' instead.", + file=sys.stderr, + ) + return env == "development" + + return False + + return 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.Union[ + 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: t.Optional[str] = None, + _method: t.Optional[str] = None, + _scheme: t.Optional[str] = None, + _external: t.Optional[bool] = 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: t.Optional[t.Type["BaseResponse"]] = 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: t.Union[int, "BaseResponse"], *args: t.Any, **kwargs: t.Any +) -> "te.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 + message_flashed.send( + current_app._get_current_object(), # type: ignore + message=message, + category=category, + ) + + +def get_flashed_messages( + with_categories: bool = False, category_filter: t.Iterable[str] = () +) -> t.Union[t.List[str], t.List[t.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) -> t.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: t.Union[os.PathLike, str, t.BinaryIO], + mimetype: t.Optional[str] = None, + as_attachment: bool = False, + download_name: t.Optional[str] = None, + conditional: bool = True, + etag: t.Union[bool, str] = True, + last_modified: t.Optional[t.Union[datetime, int, float]] = None, + max_age: t.Optional[ + t.Union[int, t.Callable[[t.Optional[str]], t.Optional[int]]] + ] = 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: t.Union[os.PathLike, str], + path: t.Union[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. + + .. versionchanged:: 2.0 + Inherits from Werkzeug's ``cached_property`` (and ``property``). + """ + + def __init__( + self, + fget: t.Callable[[t.Any], t.Any], + name: t.Optional[str] = None, + doc: t.Optional[str] = None, + ) -> None: + 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 + """ + 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) -> t.List[str]: + out: t.List[str] = [name] + + if "." in name: + out.extend(_split_blueprint_path(name.rpartition(".")[0])) + + return out diff --git a/venv/Lib/site-packages/flask/json/__init__.py b/venv/Lib/site-packages/flask/json/__init__.py new file mode 100644 index 0000000..65d8829 --- /dev/null +++ b/venv/Lib/site-packages/flask/json/__init__.py @@ -0,0 +1,342 @@ +from __future__ import annotations + +import json as _json +import typing as t + +from jinja2.utils import htmlsafe_json_dumps as _jinja_htmlsafe_dumps + +from ..globals import current_app +from .provider import _default + +if t.TYPE_CHECKING: # pragma: no cover + from ..app import Flask + from ..wrappers import Response + + +class JSONEncoder(_json.JSONEncoder): + """The default JSON encoder. Handles extra types compared to the + built-in :class:`json.JSONEncoder`. + + - :class:`datetime.datetime` and :class:`datetime.date` are + serialized to :rfc:`822` strings. This is the same as the HTTP + date format. + - :class:`decimal.Decimal` is serialized to a string. + - :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. + + Assign a subclass of this to :attr:`flask.Flask.json_encoder` or + :attr:`flask.Blueprint.json_encoder` to override the default. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use ``app.json`` instead. + """ + + def __init__(self, **kwargs) -> None: + import warnings + + warnings.warn( + "'JSONEncoder' is deprecated and will be removed in" + " Flask 2.3. Use 'Flask.json' to provide an alternate" + " JSON implementation instead.", + DeprecationWarning, + stacklevel=3, + ) + super().__init__(**kwargs) + + def default(self, o: t.Any) -> t.Any: + """Convert ``o`` to a JSON serializable type. See + :meth:`json.JSONEncoder.default`. Python does not support + overriding how basic types like ``str`` or ``list`` are + serialized, they are handled before this method. + """ + return _default(o) + + +class JSONDecoder(_json.JSONDecoder): + """The default JSON decoder. + + This does not change any behavior from the built-in + :class:`json.JSONDecoder`. + + Assign a subclass of this to :attr:`flask.Flask.json_decoder` or + :attr:`flask.Blueprint.json_decoder` to override the default. + + .. deprecated:: 2.2 + Will be removed in Flask 2.3. Use ``app.json`` instead. + """ + + def __init__(self, **kwargs) -> None: + import warnings + + warnings.warn( + "'JSONDecoder' is deprecated and will be removed in" + " Flask 2.3. Use 'Flask.json' to provide an alternate" + " JSON implementation instead.", + DeprecationWarning, + stacklevel=3, + ) + super().__init__(**kwargs) + + +def dumps(obj: t.Any, *, app: Flask | None = None, **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.2 + Calls ``current_app.json.dumps``, allowing an app to override + the behavior. + + .. versionchanged:: 2.2 + The ``app`` parameter will be removed in Flask 2.3. + + .. 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 app is not None: + import warnings + + warnings.warn( + "The 'app' parameter is deprecated and will be removed in" + " Flask 2.3. Call 'app.json.dumps' directly instead.", + DeprecationWarning, + stacklevel=2, + ) + else: + app = current_app + + if app: + return app.json.dumps(obj, **kwargs) + + kwargs.setdefault("default", _default) + return _json.dumps(obj, **kwargs) + + +def dump( + obj: t.Any, fp: t.IO[str], *, app: Flask | None = None, **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.2 + Calls ``current_app.json.dump``, allowing an app to override + the behavior. + + .. versionchanged:: 2.2 + The ``app`` parameter will be removed in Flask 2.3. + + .. versionchanged:: 2.0 + Writing to a binary file, and the ``encoding`` argument, will be + removed in Flask 2.1. + """ + if app is not None: + import warnings + + warnings.warn( + "The 'app' parameter is deprecated and will be removed in" + " Flask 2.3. Call 'app.json.dump' directly instead.", + DeprecationWarning, + stacklevel=2, + ) + else: + app = current_app + + if app: + app.json.dump(obj, fp, **kwargs) + else: + kwargs.setdefault("default", _default) + _json.dump(obj, fp, **kwargs) + + +def loads(s: str | bytes, *, app: Flask | None = None, **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.2 + Calls ``current_app.json.loads``, 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 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 app is not None: + import warnings + + warnings.warn( + "The 'app' parameter is deprecated and will be removed in" + " Flask 2.3. Call 'app.json.loads' directly instead.", + DeprecationWarning, + stacklevel=2, + ) + else: + app = current_app + + if app: + return app.json.loads(s, **kwargs) + + return _json.loads(s, **kwargs) + + +def load(fp: t.IO[t.AnyStr], *, app: Flask | None = None, **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.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 app is not None: + import warnings + + warnings.warn( + "The 'app' parameter is deprecated and will be removed in" + " Flask 2.3. Call 'app.json.load' directly instead.", + DeprecationWarning, + stacklevel=2, + ) + else: + app = current_app + + if app: + return app.json.load(fp, **kwargs) + + return _json.load(fp, **kwargs) + + +def htmlsafe_dumps(obj: t.Any, **kwargs: t.Any) -> str: + """Serialize an object to a string of JSON with :func:`dumps`, then + replace HTML-unsafe characters with Unicode escapes and mark the + result safe with :class:`~markupsafe.Markup`. + + This is available in templates as the ``|tojson`` filter. + + The returned string is safe to render in HTML documents and + `` + + + +

+ +
+
+

Console Locked

+

+ The console is locked and needs to be unlocked by entering the PIN. + You can find the PIN printed out on the standard output of your + shell that runs the server. +

+

PIN: + + +

+
+
+ + +""" + +PAGE_HTML = ( + HEADER + + """\ +

%(exception_type)s

+
+

%(exception)s

+
+

Traceback (most recent call last)

+%(summary)s +
+

+ This is the Copy/Paste friendly version of the traceback. +

+ +
+
+ The debugger caught an exception in your WSGI application. You can now + look at the traceback which led to the error. + If you enable JavaScript you can also use additional features such as code + execution (if the evalex feature is enabled), automatic pasting of the + exceptions and much more. +
+""" + + FOOTER + + """ + +""" +) + +CONSOLE_HTML = ( + HEADER + + """\ +

Interactive Console

+
+In this console you can execute Python expressions in the context of the +application. The initial namespace was created by the debugger automatically. +
+
The Console requires JavaScript.
+""" + + FOOTER +) + +SUMMARY_HTML = """\ +
+ %(title)s +
    %(frames)s
+ %(description)s +
+""" + +FRAME_HTML = """\ +
+

File "%(filename)s", + line %(lineno)s, + in %(function_name)s

+
%(lines)s
+
+""" + + +def _process_traceback( + exc: BaseException, + te: t.Optional[traceback.TracebackException] = None, + *, + skip: int = 0, + hide: bool = True, +) -> traceback.TracebackException: + if te is None: + te = traceback.TracebackException.from_exception(exc, lookup_lines=False) + + # Get the frames the same way StackSummary.extract did, in order + # to match each frame with the FrameSummary to augment. + frame_gen = traceback.walk_tb(exc.__traceback__) + limit = getattr(sys, "tracebacklimit", None) + + if limit is not None: + if limit < 0: + limit = 0 + + frame_gen = itertools.islice(frame_gen, limit) + + if skip: + frame_gen = itertools.islice(frame_gen, skip, None) + del te.stack[:skip] + + new_stack: t.List[DebugFrameSummary] = [] + hidden = False + + # Match each frame with the FrameSummary that was generated. + # Hide frames using Paste's __traceback_hide__ rules. Replace + # all visible FrameSummary with DebugFrameSummary. + for (f, _), fs in zip(frame_gen, te.stack): + if hide: + hide_value = f.f_locals.get("__traceback_hide__", False) + + if hide_value in {"before", "before_and_this"}: + new_stack = [] + hidden = False + + if hide_value == "before_and_this": + continue + elif hide_value in {"reset", "reset_and_this"}: + hidden = False + + if hide_value == "reset_and_this": + continue + elif hide_value in {"after", "after_and_this"}: + hidden = True + + if hide_value == "after_and_this": + continue + elif hide_value or hidden: + continue + + frame_args: t.Dict[str, t.Any] = { + "filename": fs.filename, + "lineno": fs.lineno, + "name": fs.name, + "locals": f.f_locals, + "globals": f.f_globals, + } + + if hasattr(fs, "colno"): + frame_args["colno"] = fs.colno + frame_args["end_colno"] = fs.end_colno # type: ignore[attr-defined] + + new_stack.append(DebugFrameSummary(**frame_args)) + + # The codeop module is used to compile code from the interactive + # debugger. Hide any codeop frames from the bottom of the traceback. + while new_stack: + module = new_stack[0].global_ns.get("__name__") + + if module is None: + module = new_stack[0].local_ns.get("__name__") + + if module == "codeop": + del new_stack[0] + else: + break + + te.stack[:] = new_stack + + if te.__context__: + context_exc = t.cast(BaseException, exc.__context__) + te.__context__ = _process_traceback(context_exc, te.__context__, hide=hide) + + if te.__cause__: + cause_exc = t.cast(BaseException, exc.__cause__) + te.__cause__ = _process_traceback(cause_exc, te.__cause__, hide=hide) + + return te + + +class DebugTraceback: + __slots__ = ("_te", "_cache_all_tracebacks", "_cache_all_frames") + + def __init__( + self, + exc: BaseException, + te: t.Optional[traceback.TracebackException] = None, + *, + skip: int = 0, + hide: bool = True, + ) -> None: + self._te = _process_traceback(exc, te, skip=skip, hide=hide) + + def __str__(self) -> str: + return f"<{type(self).__name__} {self._te}>" + + @cached_property + def all_tracebacks( + self, + ) -> t.List[t.Tuple[t.Optional[str], traceback.TracebackException]]: + out = [] + current = self._te + + while current is not None: + if current.__cause__ is not None: + chained_msg = ( + "The above exception was the direct cause of the" + " following exception" + ) + chained_exc = current.__cause__ + elif current.__context__ is not None and not current.__suppress_context__: + chained_msg = ( + "During handling of the above exception, another" + " exception occurred" + ) + chained_exc = current.__context__ + else: + chained_msg = None + chained_exc = None + + out.append((chained_msg, current)) + current = chained_exc + + return out + + @cached_property + def all_frames(self) -> t.List["DebugFrameSummary"]: + return [ + f for _, te in self.all_tracebacks for f in te.stack # type: ignore[misc] + ] + + def render_traceback_text(self) -> str: + return "".join(self._te.format()) + + def render_traceback_html(self, include_title: bool = True) -> str: + library_frames = [f.is_library for f in self.all_frames] + mark_library = 0 < sum(library_frames) < len(library_frames) + rows = [] + + if not library_frames: + classes = "traceback noframe-traceback" + else: + classes = "traceback" + + for msg, current in reversed(self.all_tracebacks): + row_parts = [] + + if msg is not None: + row_parts.append(f'
  • {msg}:
    ') + + for frame in current.stack: + frame = t.cast(DebugFrameSummary, frame) + info = f' title="{escape(frame.info)}"' if frame.info else "" + row_parts.append(f"{frame.render_html(mark_library)}") + + rows.append("\n".join(row_parts)) + + is_syntax_error = issubclass(self._te.exc_type, SyntaxError) + + if include_title: + if is_syntax_error: + title = "Syntax Error" + else: + title = "Traceback (most recent call last):" + else: + title = "" + + exc_full = escape("".join(self._te.format_exception_only())) + + if is_syntax_error: + description = f"
    {exc_full}
    " + else: + description = f"
    {exc_full}
    " + + return SUMMARY_HTML % { + "classes": classes, + "title": f"

    {title}

    ", + "frames": "\n".join(rows), + "description": description, + } + + def render_debugger_html( + self, evalex: bool, secret: str, evalex_trusted: bool + ) -> str: + exc_lines = list(self._te.format_exception_only()) + plaintext = "".join(self._te.format()) + return PAGE_HTML % { + "evalex": "true" if evalex else "false", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "false", + "title": exc_lines[0], + "exception": escape("".join(exc_lines)), + "exception_type": escape(self._te.exc_type.__name__), + "summary": self.render_traceback_html(include_title=False), + "plaintext": escape(plaintext), + "plaintext_cs": re.sub("-{2,}", "-", plaintext), + "secret": secret, + } + + +class DebugFrameSummary(traceback.FrameSummary): + """A :class:`traceback.FrameSummary` that can evaluate code in the + frame's namespace. + """ + + __slots__ = ( + "local_ns", + "global_ns", + "_cache_info", + "_cache_is_library", + "_cache_console", + ) + + def __init__( + self, + *, + locals: t.Dict[str, t.Any], + globals: t.Dict[str, t.Any], + **kwargs: t.Any, + ) -> None: + super().__init__(locals=None, **kwargs) + self.local_ns = locals + self.global_ns = globals + + @cached_property + def info(self) -> t.Optional[str]: + return self.local_ns.get("__traceback_info__") + + @cached_property + def is_library(self) -> bool: + return any( + self.filename.startswith((path, os.path.realpath(path))) + for path in sysconfig.get_paths().values() + ) + + @cached_property + def console(self) -> Console: + return Console(self.global_ns, self.local_ns) + + def eval(self, code: str) -> t.Any: + return self.console.eval(code) + + def render_html(self, mark_library: bool) -> str: + context = 5 + lines = linecache.getlines(self.filename) + line_idx = self.lineno - 1 # type: ignore[operator] + start_idx = max(0, line_idx - context) + stop_idx = min(len(lines), line_idx + context + 1) + rendered_lines = [] + + def render_line(line: str, cls: str) -> None: + line = line.expandtabs().rstrip() + stripped_line = line.strip() + prefix = len(line) - len(stripped_line) + colno = getattr(self, "colno", 0) + end_colno = getattr(self, "end_colno", 0) + + if cls == "current" and colno and end_colno: + arrow = ( + f'\n{" " * prefix}' + f'{" " * (colno - prefix)}{"^" * (end_colno - colno)}' + ) + else: + arrow = "" + + rendered_lines.append( + f'
    {" " * prefix}'
    +                f"{escape(stripped_line) if stripped_line else ' '}"
    +                f"{arrow if arrow else ''}
    " + ) + + if lines: + for line in lines[start_idx:line_idx]: + render_line(line, "before") + + render_line(lines[line_idx], "current") + + for line in lines[line_idx + 1 : stop_idx]: + render_line(line, "after") + + return FRAME_HTML % { + "id": id(self), + "filename": escape(self.filename), + "lineno": self.lineno, + "function_name": escape(self.name), + "lines": "\n".join(rendered_lines), + "library": "library" if mark_library and self.is_library else "", + } + + +def render_console_html(secret: str, evalex_trusted: bool) -> str: + return CONSOLE_HTML % { + "evalex": "true", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "true", + "title": "Console", + "secret": secret, + } diff --git a/venv/Lib/site-packages/werkzeug/exceptions.py b/venv/Lib/site-packages/werkzeug/exceptions.py new file mode 100644 index 0000000..739bd90 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/exceptions.py @@ -0,0 +1,884 @@ +"""Implements a number of Python exceptions which can be raised from within +a view to trigger a standard HTTP non-200 response. + +Usage Example +------------- + +.. code-block:: python + + from werkzeug.wrappers.request import Request + from werkzeug.exceptions import HTTPException, NotFound + + def view(request): + raise NotFound() + + @Request.application + def application(request): + try: + return view(request) + except HTTPException as e: + return e + +As you can see from this example those exceptions are callable WSGI +applications. However, they are not Werkzeug response objects. You +can get a response object by calling ``get_response()`` on a HTTP +exception. + +Keep in mind that you may have to pass an environ (WSGI) or scope +(ASGI) to ``get_response()`` because some errors fetch additional +information relating to the request. + +If you want to hook in a different exception page to say, a 404 status +code, you can add a second except for a specific subclass of an error: + +.. code-block:: python + + @Request.application + def application(request): + try: + return view(request) + except NotFound as e: + return not_found(request) + except HTTPException as e: + return e + +""" +import typing as t +from datetime import datetime + +from markupsafe import escape +from markupsafe import Markup + +from ._internal import _get_environ + +if t.TYPE_CHECKING: + import typing_extensions as te + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIEnvironment + from .datastructures import WWWAuthenticate + from .sansio.response import Response + from .wrappers.request import Request as WSGIRequest # noqa: F401 + from .wrappers.response import Response as WSGIResponse # noqa: F401 + + +class HTTPException(Exception): + """The base class for all HTTP exceptions. This exception can be called as a WSGI + application to render a default error page or you can catch the subclasses + of it independently and render nicer error messages. + + .. versionchanged:: 2.1 + Removed the ``wrap`` class method. + """ + + code: t.Optional[int] = None + description: t.Optional[str] = None + + def __init__( + self, + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + ) -> None: + super().__init__() + if description is not None: + self.description = description + self.response = response + + @property + def name(self) -> str: + """The status name.""" + from .http import HTTP_STATUS_CODES + + return HTTP_STATUS_CODES.get(self.code, "Unknown Error") # type: ignore + + def get_description( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> str: + """Get the description.""" + if self.description is None: + description = "" + elif not isinstance(self.description, str): + description = str(self.description) + else: + description = self.description + + description = escape(description).replace("\n", Markup("
    ")) + return f"

    {description}

    " + + def get_body( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> str: + """Get the HTML body.""" + return ( + "\n" + "\n" + f"{self.code} {escape(self.name)}\n" + f"

    {escape(self.name)}

    \n" + f"{self.get_description(environ)}\n" + ) + + def get_headers( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> t.List[t.Tuple[str, str]]: + """Get a list of headers.""" + return [("Content-Type", "text/html; charset=utf-8")] + + def get_response( + self, + environ: t.Optional[t.Union["WSGIEnvironment", "WSGIRequest"]] = None, + scope: t.Optional[dict] = None, + ) -> "Response": + """Get a response object. If one was passed to the exception + it's returned directly. + + :param environ: the optional environ for the request. This + can be used to modify the response depending + on how the request looked like. + :return: a :class:`Response` object or a subclass thereof. + """ + from .wrappers.response import Response as WSGIResponse # noqa: F811 + + if self.response is not None: + return self.response + if environ is not None: + environ = _get_environ(environ) + headers = self.get_headers(environ, scope) + return WSGIResponse(self.get_body(environ, scope), self.code, headers) + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + """Call the exception as WSGI application. + + :param environ: the WSGI environment. + :param start_response: the response callable provided by the WSGI + server. + """ + response = t.cast("WSGIResponse", self.get_response(environ)) + return response(environ, start_response) + + def __str__(self) -> str: + code = self.code if self.code is not None else "???" + return f"{code} {self.name}: {self.description}" + + def __repr__(self) -> str: + code = self.code if self.code is not None else "???" + return f"<{type(self).__name__} '{code}: {self.name}'>" + + +class BadRequest(HTTPException): + """*400* `Bad Request` + + Raise if the browser sends something to the application the application + or server cannot handle. + """ + + code = 400 + description = ( + "The browser (or proxy) sent a request that this server could " + "not understand." + ) + + +class BadRequestKeyError(BadRequest, KeyError): + """An exception that is used to signal both a :exc:`KeyError` and a + :exc:`BadRequest`. Used by many of the datastructures. + """ + + _description = BadRequest.description + #: Show the KeyError along with the HTTP error message in the + #: response. This should be disabled in production, but can be + #: useful in a debug mode. + show_exception = False + + def __init__(self, arg: t.Optional[str] = None, *args: t.Any, **kwargs: t.Any): + super().__init__(*args, **kwargs) + + if arg is None: + KeyError.__init__(self) + else: + KeyError.__init__(self, arg) + + @property # type: ignore + def description(self) -> str: + if self.show_exception: + return ( + f"{self._description}\n" + f"{KeyError.__name__}: {KeyError.__str__(self)}" + ) + + return self._description + + @description.setter + def description(self, value: str) -> None: + self._description = value + + +class ClientDisconnected(BadRequest): + """Internal exception that is raised if Werkzeug detects a disconnected + client. Since the client is already gone at that point attempting to + send the error message to the client might not work and might ultimately + result in another exception in the server. Mainly this is here so that + it is silenced by default as far as Werkzeug is concerned. + + Since disconnections cannot be reliably detected and are unspecified + by WSGI to a large extent this might or might not be raised if a client + is gone. + + .. versionadded:: 0.8 + """ + + +class SecurityError(BadRequest): + """Raised if something triggers a security error. This is otherwise + exactly like a bad request error. + + .. versionadded:: 0.9 + """ + + +class BadHost(BadRequest): + """Raised if the submitted host is badly formatted. + + .. versionadded:: 0.11.2 + """ + + +class Unauthorized(HTTPException): + """*401* ``Unauthorized`` + + Raise if the user is not authorized to access a resource. + + The ``www_authenticate`` argument should be used to set the + ``WWW-Authenticate`` header. This is used for HTTP basic auth and + other schemes. Use :class:`~werkzeug.datastructures.WWWAuthenticate` + to create correctly formatted values. Strictly speaking a 401 + response is invalid if it doesn't provide at least one value for + this header, although real clients typically don't care. + + :param description: Override the default message used for the body + of the response. + :param www-authenticate: A single value, or list of values, for the + WWW-Authenticate header(s). + + .. versionchanged:: 2.0 + Serialize multiple ``www_authenticate`` items into multiple + ``WWW-Authenticate`` headers, rather than joining them + into a single value, for better interoperability. + + .. versionchanged:: 0.15.3 + If the ``www_authenticate`` argument is not set, the + ``WWW-Authenticate`` header is not set. + + .. versionchanged:: 0.15.3 + The ``response`` argument was restored. + + .. versionchanged:: 0.15.1 + ``description`` was moved back as the first argument, restoring + its previous position. + + .. versionchanged:: 0.15.0 + ``www_authenticate`` was added as the first argument, ahead of + ``description``. + """ + + code = 401 + description = ( + "The server could not verify that you are authorized to access" + " the URL requested. You either supplied the wrong credentials" + " (e.g. a bad password), or your browser doesn't understand" + " how to supply the credentials required." + ) + + def __init__( + self, + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + www_authenticate: t.Optional[ + t.Union["WWWAuthenticate", t.Iterable["WWWAuthenticate"]] + ] = None, + ) -> None: + super().__init__(description, response) + + from .datastructures import WWWAuthenticate + + if isinstance(www_authenticate, WWWAuthenticate): + www_authenticate = (www_authenticate,) + + self.www_authenticate = www_authenticate + + def get_headers( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> t.List[t.Tuple[str, str]]: + headers = super().get_headers(environ, scope) + if self.www_authenticate: + headers.extend(("WWW-Authenticate", str(x)) for x in self.www_authenticate) + return headers + + +class Forbidden(HTTPException): + """*403* `Forbidden` + + Raise if the user doesn't have the permission for the requested resource + but was authenticated. + """ + + code = 403 + description = ( + "You don't have the permission to access the requested" + " resource. It is either read-protected or not readable by the" + " server." + ) + + +class NotFound(HTTPException): + """*404* `Not Found` + + Raise if a resource does not exist and never existed. + """ + + code = 404 + description = ( + "The requested URL was not found on the server. If you entered" + " the URL manually please check your spelling and try again." + ) + + +class MethodNotAllowed(HTTPException): + """*405* `Method Not Allowed` + + Raise if the server used a method the resource does not handle. For + example `POST` if the resource is view only. Especially useful for REST. + + The first argument for this exception should be a list of allowed methods. + Strictly speaking the response would be invalid if you don't provide valid + methods in the header which you can do with that list. + """ + + code = 405 + description = "The method is not allowed for the requested URL." + + def __init__( + self, + valid_methods: t.Optional[t.Iterable[str]] = None, + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + ) -> None: + """Takes an optional list of valid http methods + starting with werkzeug 0.3 the list will be mandatory.""" + super().__init__(description=description, response=response) + self.valid_methods = valid_methods + + def get_headers( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> t.List[t.Tuple[str, str]]: + headers = super().get_headers(environ, scope) + if self.valid_methods: + headers.append(("Allow", ", ".join(self.valid_methods))) + return headers + + +class NotAcceptable(HTTPException): + """*406* `Not Acceptable` + + Raise if the server can't return any content conforming to the + `Accept` headers of the client. + """ + + code = 406 + description = ( + "The resource identified by the request is only capable of" + " generating response entities which have content" + " characteristics not acceptable according to the accept" + " headers sent in the request." + ) + + +class RequestTimeout(HTTPException): + """*408* `Request Timeout` + + Raise to signalize a timeout. + """ + + code = 408 + description = ( + "The server closed the network connection because the browser" + " didn't finish the request within the specified time." + ) + + +class Conflict(HTTPException): + """*409* `Conflict` + + Raise to signal that a request cannot be completed because it conflicts + with the current state on the server. + + .. versionadded:: 0.7 + """ + + code = 409 + description = ( + "A conflict happened while processing the request. The" + " resource might have been modified while the request was being" + " processed." + ) + + +class Gone(HTTPException): + """*410* `Gone` + + Raise if a resource existed previously and went away without new location. + """ + + code = 410 + description = ( + "The requested URL is no longer available on this server and" + " there is no forwarding address. If you followed a link from a" + " foreign page, please contact the author of this page." + ) + + +class LengthRequired(HTTPException): + """*411* `Length Required` + + Raise if the browser submitted data but no ``Content-Length`` header which + is required for the kind of processing the server does. + """ + + code = 411 + description = ( + "A request with this method requires a valid Content-" + "Length header." + ) + + +class PreconditionFailed(HTTPException): + """*412* `Precondition Failed` + + Status code used in combination with ``If-Match``, ``If-None-Match``, or + ``If-Unmodified-Since``. + """ + + code = 412 + description = ( + "The precondition on the request for the URL failed positive evaluation." + ) + + +class RequestEntityTooLarge(HTTPException): + """*413* `Request Entity Too Large` + + The status code one should return if the data submitted exceeded a given + limit. + """ + + code = 413 + description = "The data value transmitted exceeds the capacity limit." + + +class RequestURITooLarge(HTTPException): + """*414* `Request URI Too Large` + + Like *413* but for too long URLs. + """ + + code = 414 + description = ( + "The length of the requested URL exceeds the capacity limit for" + " this server. The request cannot be processed." + ) + + +class UnsupportedMediaType(HTTPException): + """*415* `Unsupported Media Type` + + The status code returned if the server is unable to handle the media type + the client transmitted. + """ + + code = 415 + description = ( + "The server does not support the media type transmitted in the request." + ) + + +class RequestedRangeNotSatisfiable(HTTPException): + """*416* `Requested Range Not Satisfiable` + + The client asked for an invalid part of the file. + + .. versionadded:: 0.7 + """ + + code = 416 + description = "The server cannot provide the requested range." + + def __init__( + self, + length: t.Optional[int] = None, + units: str = "bytes", + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + ) -> None: + """Takes an optional `Content-Range` header value based on ``length`` + parameter. + """ + super().__init__(description=description, response=response) + self.length = length + self.units = units + + def get_headers( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> t.List[t.Tuple[str, str]]: + headers = super().get_headers(environ, scope) + if self.length is not None: + headers.append(("Content-Range", f"{self.units} */{self.length}")) + return headers + + +class ExpectationFailed(HTTPException): + """*417* `Expectation Failed` + + The server cannot meet the requirements of the Expect request-header. + + .. versionadded:: 0.7 + """ + + code = 417 + description = "The server could not meet the requirements of the Expect header" + + +class ImATeapot(HTTPException): + """*418* `I'm a teapot` + + The server should return this if it is a teapot and someone attempted + to brew coffee with it. + + .. versionadded:: 0.7 + """ + + code = 418 + description = "This server is a teapot, not a coffee machine" + + +class UnprocessableEntity(HTTPException): + """*422* `Unprocessable Entity` + + Used if the request is well formed, but the instructions are otherwise + incorrect. + """ + + code = 422 + description = ( + "The request was well-formed but was unable to be followed due" + " to semantic errors." + ) + + +class Locked(HTTPException): + """*423* `Locked` + + Used if the resource that is being accessed is locked. + """ + + code = 423 + description = "The resource that is being accessed is locked." + + +class FailedDependency(HTTPException): + """*424* `Failed Dependency` + + Used if the method could not be performed on the resource + because the requested action depended on another action and that action failed. + """ + + code = 424 + description = ( + "The method could not be performed on the resource because the" + " requested action depended on another action and that action" + " failed." + ) + + +class PreconditionRequired(HTTPException): + """*428* `Precondition Required` + + The server requires this request to be conditional, typically to prevent + the lost update problem, which is a race condition between two or more + clients attempting to update a resource through PUT or DELETE. By requiring + each client to include a conditional header ("If-Match" or "If-Unmodified- + Since") with the proper value retained from a recent GET request, the + server ensures that each client has at least seen the previous revision of + the resource. + """ + + code = 428 + description = ( + "This request is required to be conditional; try using" + ' "If-Match" or "If-Unmodified-Since".' + ) + + +class _RetryAfter(HTTPException): + """Adds an optional ``retry_after`` parameter which will set the + ``Retry-After`` header. May be an :class:`int` number of seconds or + a :class:`~datetime.datetime`. + """ + + def __init__( + self, + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + retry_after: t.Optional[t.Union[datetime, int]] = None, + ) -> None: + super().__init__(description, response) + self.retry_after = retry_after + + def get_headers( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> t.List[t.Tuple[str, str]]: + headers = super().get_headers(environ, scope) + + if self.retry_after: + if isinstance(self.retry_after, datetime): + from .http import http_date + + value = http_date(self.retry_after) + else: + value = str(self.retry_after) + + headers.append(("Retry-After", value)) + + return headers + + +class TooManyRequests(_RetryAfter): + """*429* `Too Many Requests` + + The server is limiting the rate at which this user receives + responses, and this request exceeds that rate. (The server may use + any convenient method to identify users and their request rates). + The server may include a "Retry-After" header to indicate how long + the user should wait before retrying. + + :param retry_after: If given, set the ``Retry-After`` header to this + value. May be an :class:`int` number of seconds or a + :class:`~datetime.datetime`. + + .. versionchanged:: 1.0 + Added ``retry_after`` parameter. + """ + + code = 429 + description = "This user has exceeded an allotted request count. Try again later." + + +class RequestHeaderFieldsTooLarge(HTTPException): + """*431* `Request Header Fields Too Large` + + The server refuses to process the request because the header fields are too + large. One or more individual fields may be too large, or the set of all + headers is too large. + """ + + code = 431 + description = "One or more header fields exceeds the maximum size." + + +class UnavailableForLegalReasons(HTTPException): + """*451* `Unavailable For Legal Reasons` + + This status code indicates that the server is denying access to the + resource as a consequence of a legal demand. + """ + + code = 451 + description = "Unavailable for legal reasons." + + +class InternalServerError(HTTPException): + """*500* `Internal Server Error` + + Raise if an internal server error occurred. This is a good fallback if an + unknown error occurred in the dispatcher. + + .. versionchanged:: 1.0.0 + Added the :attr:`original_exception` attribute. + """ + + code = 500 + description = ( + "The server encountered an internal error and was unable to" + " complete your request. Either the server is overloaded or" + " there is an error in the application." + ) + + def __init__( + self, + description: t.Optional[str] = None, + response: t.Optional["Response"] = None, + original_exception: t.Optional[BaseException] = None, + ) -> None: + #: The original exception that caused this 500 error. Can be + #: used by frameworks to provide context when handling + #: unexpected errors. + self.original_exception = original_exception + super().__init__(description=description, response=response) + + +class NotImplemented(HTTPException): + """*501* `Not Implemented` + + Raise if the application does not support the action requested by the + browser. + """ + + code = 501 + description = "The server does not support the action requested by the browser." + + +class BadGateway(HTTPException): + """*502* `Bad Gateway` + + If you do proxying in your application you should return this status code + if you received an invalid response from the upstream server it accessed + in attempting to fulfill the request. + """ + + code = 502 + description = ( + "The proxy server received an invalid response from an upstream server." + ) + + +class ServiceUnavailable(_RetryAfter): + """*503* `Service Unavailable` + + Status code you should return if a service is temporarily + unavailable. + + :param retry_after: If given, set the ``Retry-After`` header to this + value. May be an :class:`int` number of seconds or a + :class:`~datetime.datetime`. + + .. versionchanged:: 1.0 + Added ``retry_after`` parameter. + """ + + code = 503 + description = ( + "The server is temporarily unable to service your request due" + " to maintenance downtime or capacity problems. Please try" + " again later." + ) + + +class GatewayTimeout(HTTPException): + """*504* `Gateway Timeout` + + Status code you should return if a connection to an upstream server + times out. + """ + + code = 504 + description = "The connection to an upstream server timed out." + + +class HTTPVersionNotSupported(HTTPException): + """*505* `HTTP Version Not Supported` + + The server does not support the HTTP protocol version used in the request. + """ + + code = 505 + description = ( + "The server does not support the HTTP protocol version used in the request." + ) + + +default_exceptions: t.Dict[int, t.Type[HTTPException]] = {} + + +def _find_exceptions() -> None: + for obj in globals().values(): + try: + is_http_exception = issubclass(obj, HTTPException) + except TypeError: + is_http_exception = False + if not is_http_exception or obj.code is None: + continue + old_obj = default_exceptions.get(obj.code, None) + if old_obj is not None and issubclass(obj, old_obj): + continue + default_exceptions[obj.code] = obj + + +_find_exceptions() +del _find_exceptions + + +class Aborter: + """When passed a dict of code -> exception items it can be used as + callable that raises exceptions. If the first argument to the + callable is an integer it will be looked up in the mapping, if it's + a WSGI application it will be raised in a proxy exception. + + The rest of the arguments are forwarded to the exception constructor. + """ + + def __init__( + self, + mapping: t.Optional[t.Dict[int, t.Type[HTTPException]]] = None, + extra: t.Optional[t.Dict[int, t.Type[HTTPException]]] = None, + ) -> None: + if mapping is None: + mapping = default_exceptions + self.mapping = dict(mapping) + if extra is not None: + self.mapping.update(extra) + + def __call__( + self, code: t.Union[int, "Response"], *args: t.Any, **kwargs: t.Any + ) -> "te.NoReturn": + from .sansio.response import Response + + if isinstance(code, Response): + raise HTTPException(response=code) + + if code not in self.mapping: + raise LookupError(f"no exception for {code!r}") + + raise self.mapping[code](*args, **kwargs) + + +def abort( + status: t.Union[int, "Response"], *args: t.Any, **kwargs: t.Any +) -> "te.NoReturn": + """Raises an :py:exc:`HTTPException` for the given status code or WSGI + application. + + If a status code is given, it will be looked up in the list of + exceptions and will raise that exception. If passed a WSGI application, + it will wrap it in a proxy WSGI exception and raise that:: + + abort(404) # 404 Not Found + abort(Response('Hello World')) + + """ + _aborter(status, *args, **kwargs) + + +_aborter: Aborter = Aborter() diff --git a/venv/Lib/site-packages/werkzeug/formparser.py b/venv/Lib/site-packages/werkzeug/formparser.py new file mode 100644 index 0000000..bebb2fc --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/formparser.py @@ -0,0 +1,465 @@ +import typing as t +from functools import update_wrapper +from io import BytesIO +from itertools import chain +from typing import Union + +from . import exceptions +from .datastructures import FileStorage +from .datastructures import Headers +from .datastructures import MultiDict +from .http import parse_options_header +from .sansio.multipart import Data +from .sansio.multipart import Epilogue +from .sansio.multipart import Field +from .sansio.multipart import File +from .sansio.multipart import MultipartDecoder +from .sansio.multipart import NeedData +from .urls import url_decode_stream +from .wsgi import _make_chunk_iter +from .wsgi import get_content_length +from .wsgi import get_input_stream + +# there are some platforms where SpooledTemporaryFile is not available. +# In that case we need to provide a fallback. +try: + from tempfile import SpooledTemporaryFile +except ImportError: + from tempfile import TemporaryFile + + SpooledTemporaryFile = None # type: ignore + +if t.TYPE_CHECKING: + import typing as te + from _typeshed.wsgi import WSGIEnvironment + + t_parse_result = t.Tuple[t.IO[bytes], MultiDict, MultiDict] + + class TStreamFactory(te.Protocol): + def __call__( + self, + total_content_length: t.Optional[int], + content_type: t.Optional[str], + filename: t.Optional[str], + content_length: t.Optional[int] = None, + ) -> t.IO[bytes]: + ... + + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + + +def _exhaust(stream: t.IO[bytes]) -> None: + bts = stream.read(64 * 1024) + while bts: + bts = stream.read(64 * 1024) + + +def default_stream_factory( + total_content_length: t.Optional[int], + content_type: t.Optional[str], + filename: t.Optional[str], + content_length: t.Optional[int] = None, +) -> t.IO[bytes]: + max_size = 1024 * 500 + + if SpooledTemporaryFile is not None: + return t.cast(t.IO[bytes], SpooledTemporaryFile(max_size=max_size, mode="rb+")) + elif total_content_length is None or total_content_length > max_size: + return t.cast(t.IO[bytes], TemporaryFile("rb+")) + + return BytesIO() + + +def parse_form_data( + environ: "WSGIEnvironment", + stream_factory: t.Optional["TStreamFactory"] = None, + charset: str = "utf-8", + errors: str = "replace", + max_form_memory_size: t.Optional[int] = None, + max_content_length: t.Optional[int] = None, + cls: t.Optional[t.Type[MultiDict]] = None, + silent: bool = True, +) -> "t_parse_result": + """Parse the form data in the environ and return it as tuple in the form + ``(stream, form, files)``. You should only call this method if the + transport method is `POST`, `PUT`, or `PATCH`. + + If the mimetype of the data transmitted is `multipart/form-data` the + files multidict will be filled with `FileStorage` objects. If the + mimetype is unknown the input stream is wrapped and returned as first + argument, else the stream is empty. + + This is a shortcut for the common usage of :class:`FormDataParser`. + + Have a look at :doc:`/request_data` for more details. + + .. versionadded:: 0.5 + The `max_form_memory_size`, `max_content_length` and + `cls` parameters were added. + + .. versionadded:: 0.5.1 + The optional `silent` flag was added. + + :param environ: the WSGI environment to be used for parsing. + :param stream_factory: An optional callable that returns a new read and + writeable file descriptor. This callable works + the same as :meth:`Response._get_file_stream`. + :param charset: The character set for URL and url encoded form data. + :param errors: The encoding error behavior. + :param max_form_memory_size: the maximum number of bytes to be accepted for + in-memory stored form data. If the data + exceeds the value specified an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param max_content_length: If this is provided and the transmitted data + is longer than this value an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param silent: If set to False parsing errors will not be caught. + :return: A tuple in the form ``(stream, form, files)``. + """ + return FormDataParser( + stream_factory, + charset, + errors, + max_form_memory_size, + max_content_length, + cls, + silent, + ).parse_from_environ(environ) + + +def exhaust_stream(f: F) -> F: + """Helper decorator for methods that exhausts the stream on return.""" + + def wrapper(self, stream, *args, **kwargs): # type: ignore + try: + return f(self, stream, *args, **kwargs) + finally: + exhaust = getattr(stream, "exhaust", None) + + if exhaust is not None: + exhaust() + else: + while True: + chunk = stream.read(1024 * 64) + + if not chunk: + break + + return update_wrapper(t.cast(F, wrapper), f) + + +class FormDataParser: + """This class implements parsing of form data for Werkzeug. By itself + it can parse multipart and url encoded form data. It can be subclassed + and extended but for most mimetypes it is a better idea to use the + untouched stream and expose it as separate attributes on a request + object. + + .. versionadded:: 0.8 + + :param stream_factory: An optional callable that returns a new read and + writeable file descriptor. This callable works + the same as :meth:`Response._get_file_stream`. + :param charset: The character set for URL and url encoded form data. + :param errors: The encoding error behavior. + :param max_form_memory_size: the maximum number of bytes to be accepted for + in-memory stored form data. If the data + exceeds the value specified an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param max_content_length: If this is provided and the transmitted data + is longer than this value an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param silent: If set to False parsing errors will not be caught. + :param max_form_parts: The maximum number of parts to be parsed. If this is + exceeded, a :exc:`~exceptions.RequestEntityTooLarge` exception is raised. + """ + + def __init__( + self, + stream_factory: t.Optional["TStreamFactory"] = None, + charset: str = "utf-8", + errors: str = "replace", + max_form_memory_size: t.Optional[int] = None, + max_content_length: t.Optional[int] = None, + cls: t.Optional[t.Type[MultiDict]] = None, + silent: bool = True, + *, + max_form_parts: t.Optional[int] = None, + ) -> None: + if stream_factory is None: + stream_factory = default_stream_factory + + self.stream_factory = stream_factory + self.charset = charset + self.errors = errors + self.max_form_memory_size = max_form_memory_size + self.max_content_length = max_content_length + self.max_form_parts = max_form_parts + + if cls is None: + cls = MultiDict + + self.cls = cls + self.silent = silent + + def get_parse_func( + self, mimetype: str, options: t.Dict[str, str] + ) -> t.Optional[ + t.Callable[ + ["FormDataParser", t.IO[bytes], str, t.Optional[int], t.Dict[str, str]], + "t_parse_result", + ] + ]: + return self.parse_functions.get(mimetype) + + def parse_from_environ(self, environ: "WSGIEnvironment") -> "t_parse_result": + """Parses the information from the environment as form data. + + :param environ: the WSGI environment to be used for parsing. + :return: A tuple in the form ``(stream, form, files)``. + """ + content_type = environ.get("CONTENT_TYPE", "") + content_length = get_content_length(environ) + mimetype, options = parse_options_header(content_type) + return self.parse(get_input_stream(environ), mimetype, content_length, options) + + def parse( + self, + stream: t.IO[bytes], + mimetype: str, + content_length: t.Optional[int], + options: t.Optional[t.Dict[str, str]] = None, + ) -> "t_parse_result": + """Parses the information from the given stream, mimetype, + content length and mimetype parameters. + + :param stream: an input stream + :param mimetype: the mimetype of the data + :param content_length: the content length of the incoming data + :param options: optional mimetype parameters (used for + the multipart boundary for instance) + :return: A tuple in the form ``(stream, form, files)``. + """ + if ( + self.max_content_length is not None + and content_length is not None + and content_length > self.max_content_length + ): + # if the input stream is not exhausted, firefox reports Connection Reset + _exhaust(stream) + raise exceptions.RequestEntityTooLarge() + + if options is None: + options = {} + + parse_func = self.get_parse_func(mimetype, options) + + if parse_func is not None: + try: + return parse_func(self, stream, mimetype, content_length, options) + except ValueError: + if not self.silent: + raise + + return stream, self.cls(), self.cls() + + @exhaust_stream + def _parse_multipart( + self, + stream: t.IO[bytes], + mimetype: str, + content_length: t.Optional[int], + options: t.Dict[str, str], + ) -> "t_parse_result": + parser = MultiPartParser( + self.stream_factory, + self.charset, + self.errors, + max_form_memory_size=self.max_form_memory_size, + cls=self.cls, + max_form_parts=self.max_form_parts, + ) + boundary = options.get("boundary", "").encode("ascii") + + if not boundary: + raise ValueError("Missing boundary") + + form, files = parser.parse(stream, boundary, content_length) + return stream, form, files + + @exhaust_stream + def _parse_urlencoded( + self, + stream: t.IO[bytes], + mimetype: str, + content_length: t.Optional[int], + options: t.Dict[str, str], + ) -> "t_parse_result": + if ( + self.max_form_memory_size is not None + and content_length is not None + and content_length > self.max_form_memory_size + ): + # if the input stream is not exhausted, firefox reports Connection Reset + _exhaust(stream) + raise exceptions.RequestEntityTooLarge() + + form = url_decode_stream(stream, self.charset, errors=self.errors, cls=self.cls) + return stream, form, self.cls() + + #: mapping of mimetypes to parsing functions + parse_functions: t.Dict[ + str, + t.Callable[ + ["FormDataParser", t.IO[bytes], str, t.Optional[int], t.Dict[str, str]], + "t_parse_result", + ], + ] = { + "multipart/form-data": _parse_multipart, + "application/x-www-form-urlencoded": _parse_urlencoded, + "application/x-url-encoded": _parse_urlencoded, + } + + +def _line_parse(line: str) -> t.Tuple[str, bool]: + """Removes line ending characters and returns a tuple (`stripped_line`, + `is_terminated`). + """ + if line[-2:] == "\r\n": + return line[:-2], True + + elif line[-1:] in {"\r", "\n"}: + return line[:-1], True + + return line, False + + +class MultiPartParser: + def __init__( + self, + stream_factory: t.Optional["TStreamFactory"] = None, + charset: str = "utf-8", + errors: str = "replace", + max_form_memory_size: t.Optional[int] = None, + cls: t.Optional[t.Type[MultiDict]] = None, + buffer_size: int = 64 * 1024, + max_form_parts: t.Optional[int] = None, + ) -> None: + self.charset = charset + self.errors = errors + self.max_form_memory_size = max_form_memory_size + self.max_form_parts = max_form_parts + + if stream_factory is None: + stream_factory = default_stream_factory + + self.stream_factory = stream_factory + + if cls is None: + cls = MultiDict + + self.cls = cls + + self.buffer_size = buffer_size + + def fail(self, message: str) -> "te.NoReturn": + raise ValueError(message) + + def get_part_charset(self, headers: Headers) -> str: + # Figure out input charset for current part + content_type = headers.get("content-type") + + if content_type: + mimetype, ct_params = parse_options_header(content_type) + return ct_params.get("charset", self.charset) + + return self.charset + + def start_file_streaming( + self, event: File, total_content_length: t.Optional[int] + ) -> t.IO[bytes]: + content_type = event.headers.get("content-type") + + try: + content_length = int(event.headers["content-length"]) + except (KeyError, ValueError): + content_length = 0 + + container = self.stream_factory( + total_content_length=total_content_length, + filename=event.filename, + content_type=content_type, + content_length=content_length, + ) + return container + + def parse( + self, stream: t.IO[bytes], boundary: bytes, content_length: t.Optional[int] + ) -> t.Tuple[MultiDict, MultiDict]: + container: t.Union[t.IO[bytes], t.List[bytes]] + _write: t.Callable[[bytes], t.Any] + + iterator = chain( + _make_chunk_iter( + stream, + limit=content_length, + buffer_size=self.buffer_size, + ), + [None], + ) + + parser = MultipartDecoder( + boundary, self.max_form_memory_size, max_parts=self.max_form_parts + ) + + fields = [] + files = [] + + current_part: Union[Field, File] + for data in iterator: + parser.receive_data(data) + event = parser.next_event() + while not isinstance(event, (Epilogue, NeedData)): + if isinstance(event, Field): + current_part = event + container = [] + _write = container.append + elif isinstance(event, File): + current_part = event + container = self.start_file_streaming(event, content_length) + _write = container.write + elif isinstance(event, Data): + _write(event.data) + if not event.more_data: + if isinstance(current_part, Field): + value = b"".join(container).decode( + self.get_part_charset(current_part.headers), self.errors + ) + fields.append((current_part.name, value)) + else: + container = t.cast(t.IO[bytes], container) + container.seek(0) + files.append( + ( + current_part.name, + FileStorage( + container, + current_part.filename, + current_part.name, + headers=current_part.headers, + ), + ) + ) + + event = parser.next_event() + + return self.cls(fields), self.cls(files) diff --git a/venv/Lib/site-packages/werkzeug/http.py b/venv/Lib/site-packages/werkzeug/http.py new file mode 100644 index 0000000..0a7bc73 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/http.py @@ -0,0 +1,1327 @@ +import base64 +import email.utils +import re +import typing +import typing as t +import warnings +from datetime import date +from datetime import datetime +from datetime import time +from datetime import timedelta +from datetime import timezone +from enum import Enum +from hashlib import sha1 +from time import mktime +from time import struct_time +from urllib.parse import unquote_to_bytes as _unquote +from urllib.request import parse_http_list as _parse_list_header + +from ._internal import _cookie_quote +from ._internal import _dt_as_utc +from ._internal import _make_cookie_domain +from ._internal import _to_bytes +from ._internal import _to_str +from ._internal import _wsgi_decoding_dance + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIEnvironment + +# for explanation of "media-range", etc. see Sections 5.3.{1,2} of RFC 7231 +_accept_re = re.compile( + r""" + ( # media-range capturing-parenthesis + [^\s;,]+ # type/subtype + (?:[ \t]*;[ \t]* # ";" + (?: # parameter non-capturing-parenthesis + [^\s;,q][^\s;,]* # token that doesn't start with "q" + | # or + q[^\s;,=][^\s;,]* # token that is more than just "q" + ) + )* # zero or more parameters + ) # end of media-range + (?:[ \t]*;[ \t]*q= # weight is a "q" parameter + (\d*(?:\.\d+)?) # qvalue capturing-parentheses + [^,]* # "extension" accept params: who cares? + )? # accept params are optional + """, + re.VERBOSE, +) +_token_chars = frozenset( + "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~" +) +_etag_re = re.compile(r'([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)') +_option_header_piece_re = re.compile( + r""" + ;\s*,?\s* # newlines were replaced with commas + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^\s;,=*]+ # token + ) + (?:\*(?P\d+))? # *1, optional continuation index + \s* + (?: # optionally followed by =value + (?: # equals sign, possibly with encoding + \*\s*=\s* # * indicates extended notation + (?: # optional encoding + (?P[^\s]+?) + '(?P[^\s]*?)' + )? + | + =\s* # basic notation + ) + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^;,]+ # token + )? + )? + \s* + """, + flags=re.VERBOSE, +) +_option_header_start_mime_type = re.compile(r",\s*([^;,\s]+)([;,]\s*.+)?") +_entity_headers = frozenset( + [ + "allow", + "content-encoding", + "content-language", + "content-length", + "content-location", + "content-md5", + "content-range", + "content-type", + "expires", + "last-modified", + ] +) +_hop_by_hop_headers = frozenset( + [ + "connection", + "keep-alive", + "proxy-authenticate", + "proxy-authorization", + "te", + "trailer", + "transfer-encoding", + "upgrade", + ] +) +HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 102: "Processing", + 103: "Early Hints", # see RFC 8297 + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi Status", + 208: "Already Reported", # see RFC 5842 + 226: "IM Used", # see RFC 3229 + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 306: "Switch Proxy", # unused + 307: "Temporary Redirect", + 308: "Permanent Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", # unused + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 418: "I'm a teapot", # see RFC 2324 + 421: "Misdirected Request", # see RFC 7540 + 422: "Unprocessable Entity", + 423: "Locked", + 424: "Failed Dependency", + 425: "Too Early", # see RFC 8470 + 426: "Upgrade Required", + 428: "Precondition Required", # see RFC 6585 + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 449: "Retry With", # proprietary MS extension + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 506: "Variant Also Negotiates", # see RFC 2295 + 507: "Insufficient Storage", + 508: "Loop Detected", # see RFC 5842 + 510: "Not Extended", + 511: "Network Authentication Failed", +} + + +class COEP(Enum): + """Cross Origin Embedder Policies""" + + UNSAFE_NONE = "unsafe-none" + REQUIRE_CORP = "require-corp" + + +class COOP(Enum): + """Cross Origin Opener Policies""" + + UNSAFE_NONE = "unsafe-none" + SAME_ORIGIN_ALLOW_POPUPS = "same-origin-allow-popups" + SAME_ORIGIN = "same-origin" + + +def _is_extended_parameter(key: str) -> bool: + """Per RFC 5987/8187, "extended" values may *not* be quoted. + This is in keeping with browser implementations. So we test + using this function to see if the key indicates this parameter + follows the `ext-parameter` syntax (using a trailing '*'). + """ + return key.strip().endswith("*") + + +def quote_header_value( + value: t.Union[str, int], extra_chars: str = "", allow_token: bool = True +) -> str: + """Quote a header value if necessary. + + .. versionadded:: 0.5 + + :param value: the value to quote. + :param extra_chars: a list of extra characters to skip quoting. + :param allow_token: if this is enabled token values are returned + unchanged. + """ + if isinstance(value, bytes): + value = value.decode("latin1") + value = str(value) + if allow_token: + token_chars = _token_chars | set(extra_chars) + if set(value).issubset(token_chars): + return value + value = value.replace("\\", "\\\\").replace('"', '\\"') + return f'"{value}"' + + +def unquote_header_value(value: str, is_filename: bool = False) -> str: + r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). + This does not use the real unquoting but what browsers are actually + using for quoting. + + .. versionadded:: 0.5 + + :param value: the header value to unquote. + :param is_filename: The value represents a filename or path. + """ + if value and value[0] == value[-1] == '"': + # this is not the real unquoting, but fixing this so that the + # RFC is met will result in bugs with internet explorer and + # probably some other browsers as well. IE for example is + # uploading files with "C:\foo\bar.txt" as filename + value = value[1:-1] + + # if this is a filename and the starting characters look like + # a UNC path, then just return the value without quotes. Using the + # replace sequence below on a UNC path has the effect of turning + # the leading double slash into a single slash and then + # _fix_ie_filename() doesn't work correctly. See #458. + if not is_filename or value[:2] != "\\\\": + return value.replace("\\\\", "\\").replace('\\"', '"') + return value + + +def dump_options_header( + header: t.Optional[str], options: t.Mapping[str, t.Optional[t.Union[str, int]]] +) -> str: + """The reverse function to :func:`parse_options_header`. + + :param header: the header to dump + :param options: a dict of options to append. + """ + segments = [] + if header is not None: + segments.append(header) + for key, value in options.items(): + if value is None: + segments.append(key) + elif _is_extended_parameter(key): + segments.append(f"{key}={value}") + else: + segments.append(f"{key}={quote_header_value(value)}") + return "; ".join(segments) + + +def dump_header( + iterable: t.Union[t.Dict[str, t.Union[str, int]], t.Iterable[str]], + allow_token: bool = True, +) -> str: + """Dump an HTTP header again. This is the reversal of + :func:`parse_list_header`, :func:`parse_set_header` and + :func:`parse_dict_header`. This also quotes strings that include an + equals sign unless you pass it as dict of key, value pairs. + + >>> dump_header({'foo': 'bar baz'}) + 'foo="bar baz"' + >>> dump_header(('foo', 'bar baz')) + 'foo, "bar baz"' + + :param iterable: the iterable or dict of values to quote. + :param allow_token: if set to `False` tokens as values are disallowed. + See :func:`quote_header_value` for more details. + """ + if isinstance(iterable, dict): + items = [] + for key, value in iterable.items(): + if value is None: + items.append(key) + elif _is_extended_parameter(key): + items.append(f"{key}={value}") + else: + items.append( + f"{key}={quote_header_value(value, allow_token=allow_token)}" + ) + else: + items = [quote_header_value(x, allow_token=allow_token) for x in iterable] + return ", ".join(items) + + +def dump_csp_header(header: "ds.ContentSecurityPolicy") -> str: + """Dump a Content Security Policy header. + + These are structured into policies such as "default-src 'self'; + script-src 'self'". + + .. versionadded:: 1.0.0 + Support for Content Security Policy headers was added. + + """ + return "; ".join(f"{key} {value}" for key, value in header.items()) + + +def parse_list_header(value: str) -> t.List[str]: + """Parse lists as described by RFC 2068 Section 2. + + In particular, parse comma-separated lists where the elements of + the list may include quoted-strings. A quoted-string could + contain a comma. A non-quoted string could have quotes in the + middle. Quotes are removed automatically after parsing. + + It basically works like :func:`parse_set_header` just that items + may appear multiple times and case sensitivity is preserved. + + The return value is a standard :class:`list`: + + >>> parse_list_header('token, "quoted value"') + ['token', 'quoted value'] + + To create a header from the :class:`list` again, use the + :func:`dump_header` function. + + :param value: a string with a list header. + :return: :class:`list` + """ + result = [] + for item in _parse_list_header(value): + if item[:1] == item[-1:] == '"': + item = unquote_header_value(item[1:-1]) + result.append(item) + return result + + +def parse_dict_header(value: str, cls: t.Type[dict] = dict) -> t.Dict[str, str]: + """Parse lists of key, value pairs as described by RFC 2068 Section 2 and + convert them into a python dict (or any other mapping object created from + the type with a dict like interface provided by the `cls` argument): + + >>> d = parse_dict_header('foo="is a fish", bar="as well"') + >>> type(d) is dict + True + >>> sorted(d.items()) + [('bar', 'as well'), ('foo', 'is a fish')] + + If there is no value for a key it will be `None`: + + >>> parse_dict_header('key_without_value') + {'key_without_value': None} + + To create a header from the :class:`dict` again, use the + :func:`dump_header` function. + + .. versionchanged:: 0.9 + Added support for `cls` argument. + + :param value: a string with a dict header. + :param cls: callable to use for storage of parsed results. + :return: an instance of `cls` + """ + result = cls() + if isinstance(value, bytes): + value = value.decode("latin1") + for item in _parse_list_header(value): + if "=" not in item: + result[item] = None + continue + name, value = item.split("=", 1) + if value[:1] == value[-1:] == '"': + value = unquote_header_value(value[1:-1]) + result[name] = value + return result + + +def parse_options_header(value: t.Optional[str]) -> t.Tuple[str, t.Dict[str, str]]: + """Parse a ``Content-Type``-like header into a tuple with the + value and any options: + + >>> parse_options_header('text/html; charset=utf8') + ('text/html', {'charset': 'utf8'}) + + This should is not for ``Cache-Control``-like headers, which use a + different format. For those, use :func:`parse_dict_header`. + + :param value: The header value to parse. + + .. versionchanged:: 2.2 + Option names are always converted to lowercase. + + .. versionchanged:: 2.1 + The ``multiple`` parameter is deprecated and will be removed in + Werkzeug 2.2. + + .. versionchanged:: 0.15 + :rfc:`2231` parameter continuations are handled. + + .. versionadded:: 0.5 + """ + if not value: + return "", {} + + result: t.List[t.Any] = [] + + value = "," + value.replace("\n", ",") + while value: + match = _option_header_start_mime_type.match(value) + if not match: + break + result.append(match.group(1)) # mimetype + options: t.Dict[str, str] = {} + # Parse options + rest = match.group(2) + encoding: t.Optional[str] + continued_encoding: t.Optional[str] = None + while rest: + optmatch = _option_header_piece_re.match(rest) + if not optmatch: + break + option, count, encoding, language, option_value = optmatch.groups() + # Continuations don't have to supply the encoding after the + # first line. If we're in a continuation, track the current + # encoding to use for subsequent lines. Reset it when the + # continuation ends. + if not count: + continued_encoding = None + else: + if not encoding: + encoding = continued_encoding + continued_encoding = encoding + option = unquote_header_value(option).lower() + + if option_value is not None: + option_value = unquote_header_value(option_value, option == "filename") + + if encoding is not None: + option_value = _unquote(option_value).decode(encoding) + + if count: + # Continuations append to the existing value. For + # simplicity, this ignores the possibility of + # out-of-order indices, which shouldn't happen anyway. + if option_value is not None: + options[option] = options.get(option, "") + option_value + else: + options[option] = option_value # type: ignore[assignment] + + rest = rest[optmatch.end() :] + result.append(options) + return tuple(result) # type: ignore[return-value] + + return tuple(result) if result else ("", {}) # type: ignore[return-value] + + +_TAnyAccept = t.TypeVar("_TAnyAccept", bound="ds.Accept") + + +@typing.overload +def parse_accept_header(value: t.Optional[str]) -> "ds.Accept": + ... + + +@typing.overload +def parse_accept_header( + value: t.Optional[str], cls: t.Type[_TAnyAccept] +) -> _TAnyAccept: + ... + + +def parse_accept_header( + value: t.Optional[str], cls: t.Optional[t.Type[_TAnyAccept]] = None +) -> _TAnyAccept: + """Parses an HTTP Accept-* header. This does not implement a complete + valid algorithm but one that supports at least value and quality + extraction. + + Returns a new :class:`Accept` object (basically a list of ``(value, quality)`` + tuples sorted by the quality with some additional accessor methods). + + The second parameter can be a subclass of :class:`Accept` that is created + with the parsed values and returned. + + :param value: the accept header string to be parsed. + :param cls: the wrapper class for the return value (can be + :class:`Accept` or a subclass thereof) + :return: an instance of `cls`. + """ + if cls is None: + cls = t.cast(t.Type[_TAnyAccept], ds.Accept) + + if not value: + return cls(None) + + result = [] + for match in _accept_re.finditer(value): + quality_match = match.group(2) + if not quality_match: + quality: float = 1 + else: + quality = max(min(float(quality_match), 1), 0) + result.append((match.group(1), quality)) + return cls(result) + + +_TAnyCC = t.TypeVar("_TAnyCC", bound="ds._CacheControl") +_t_cc_update = t.Optional[t.Callable[[_TAnyCC], None]] + + +@typing.overload +def parse_cache_control_header( + value: t.Optional[str], on_update: _t_cc_update, cls: None = None +) -> "ds.RequestCacheControl": + ... + + +@typing.overload +def parse_cache_control_header( + value: t.Optional[str], on_update: _t_cc_update, cls: t.Type[_TAnyCC] +) -> _TAnyCC: + ... + + +def parse_cache_control_header( + value: t.Optional[str], + on_update: _t_cc_update = None, + cls: t.Optional[t.Type[_TAnyCC]] = None, +) -> _TAnyCC: + """Parse a cache control header. The RFC differs between response and + request cache control, this method does not. It's your responsibility + to not use the wrong control statements. + + .. versionadded:: 0.5 + The `cls` was added. If not specified an immutable + :class:`~werkzeug.datastructures.RequestCacheControl` is returned. + + :param value: a cache control header to be parsed. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.CacheControl` + object is changed. + :param cls: the class for the returned object. By default + :class:`~werkzeug.datastructures.RequestCacheControl` is used. + :return: a `cls` object. + """ + if cls is None: + cls = t.cast(t.Type[_TAnyCC], ds.RequestCacheControl) + + if not value: + return cls((), on_update) + + return cls(parse_dict_header(value), on_update) + + +_TAnyCSP = t.TypeVar("_TAnyCSP", bound="ds.ContentSecurityPolicy") +_t_csp_update = t.Optional[t.Callable[[_TAnyCSP], None]] + + +@typing.overload +def parse_csp_header( + value: t.Optional[str], on_update: _t_csp_update, cls: None = None +) -> "ds.ContentSecurityPolicy": + ... + + +@typing.overload +def parse_csp_header( + value: t.Optional[str], on_update: _t_csp_update, cls: t.Type[_TAnyCSP] +) -> _TAnyCSP: + ... + + +def parse_csp_header( + value: t.Optional[str], + on_update: _t_csp_update = None, + cls: t.Optional[t.Type[_TAnyCSP]] = None, +) -> _TAnyCSP: + """Parse a Content Security Policy header. + + .. versionadded:: 1.0.0 + Support for Content Security Policy headers was added. + + :param value: a csp header to be parsed. + :param on_update: an optional callable that is called every time a value + on the object is changed. + :param cls: the class for the returned object. By default + :class:`~werkzeug.datastructures.ContentSecurityPolicy` is used. + :return: a `cls` object. + """ + if cls is None: + cls = t.cast(t.Type[_TAnyCSP], ds.ContentSecurityPolicy) + + if value is None: + return cls((), on_update) + + items = [] + + for policy in value.split(";"): + policy = policy.strip() + + # Ignore badly formatted policies (no space) + if " " in policy: + directive, value = policy.strip().split(" ", 1) + items.append((directive.strip(), value.strip())) + + return cls(items, on_update) + + +def parse_set_header( + value: t.Optional[str], + on_update: t.Optional[t.Callable[["ds.HeaderSet"], None]] = None, +) -> "ds.HeaderSet": + """Parse a set-like header and return a + :class:`~werkzeug.datastructures.HeaderSet` object: + + >>> hs = parse_set_header('token, "quoted value"') + + The return value is an object that treats the items case-insensitively + and keeps the order of the items: + + >>> 'TOKEN' in hs + True + >>> hs.index('quoted value') + 1 + >>> hs + HeaderSet(['token', 'quoted value']) + + To create a header from the :class:`HeaderSet` again, use the + :func:`dump_header` function. + + :param value: a set header to be parsed. + :param on_update: an optional callable that is called every time a + value on the :class:`~werkzeug.datastructures.HeaderSet` + object is changed. + :return: a :class:`~werkzeug.datastructures.HeaderSet` + """ + if not value: + return ds.HeaderSet(None, on_update) + return ds.HeaderSet(parse_list_header(value), on_update) + + +def parse_authorization_header( + value: t.Optional[str], +) -> t.Optional["ds.Authorization"]: + """Parse an HTTP basic/digest authorization header transmitted by the web + browser. The return value is either `None` if the header was invalid or + not given, otherwise an :class:`~werkzeug.datastructures.Authorization` + object. + + :param value: the authorization header to parse. + :return: a :class:`~werkzeug.datastructures.Authorization` object or `None`. + """ + if not value: + return None + value = _wsgi_decoding_dance(value) + try: + auth_type, auth_info = value.split(None, 1) + auth_type = auth_type.lower() + except ValueError: + return None + if auth_type == "basic": + try: + username, password = base64.b64decode(auth_info).split(b":", 1) + except Exception: + return None + try: + return ds.Authorization( + "basic", + { + "username": _to_str(username, "utf-8"), + "password": _to_str(password, "utf-8"), + }, + ) + except UnicodeDecodeError: + return None + elif auth_type == "digest": + auth_map = parse_dict_header(auth_info) + for key in "username", "realm", "nonce", "uri", "response": + if key not in auth_map: + return None + if "qop" in auth_map: + if not auth_map.get("nc") or not auth_map.get("cnonce"): + return None + return ds.Authorization("digest", auth_map) + return None + + +def parse_www_authenticate_header( + value: t.Optional[str], + on_update: t.Optional[t.Callable[["ds.WWWAuthenticate"], None]] = None, +) -> "ds.WWWAuthenticate": + """Parse an HTTP WWW-Authenticate header into a + :class:`~werkzeug.datastructures.WWWAuthenticate` object. + + :param value: a WWW-Authenticate header to parse. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.WWWAuthenticate` + object is changed. + :return: a :class:`~werkzeug.datastructures.WWWAuthenticate` object. + """ + if not value: + return ds.WWWAuthenticate(on_update=on_update) + try: + auth_type, auth_info = value.split(None, 1) + auth_type = auth_type.lower() + except (ValueError, AttributeError): + return ds.WWWAuthenticate(value.strip().lower(), on_update=on_update) + return ds.WWWAuthenticate(auth_type, parse_dict_header(auth_info), on_update) + + +def parse_if_range_header(value: t.Optional[str]) -> "ds.IfRange": + """Parses an if-range header which can be an etag or a date. Returns + a :class:`~werkzeug.datastructures.IfRange` object. + + .. versionchanged:: 2.0 + If the value represents a datetime, it is timezone-aware. + + .. versionadded:: 0.7 + """ + if not value: + return ds.IfRange() + date = parse_date(value) + if date is not None: + return ds.IfRange(date=date) + # drop weakness information + return ds.IfRange(unquote_etag(value)[0]) + + +def parse_range_header( + value: t.Optional[str], make_inclusive: bool = True +) -> t.Optional["ds.Range"]: + """Parses a range header into a :class:`~werkzeug.datastructures.Range` + object. If the header is missing or malformed `None` is returned. + `ranges` is a list of ``(start, stop)`` tuples where the ranges are + non-inclusive. + + .. versionadded:: 0.7 + """ + if not value or "=" not in value: + return None + + ranges = [] + last_end = 0 + units, rng = value.split("=", 1) + units = units.strip().lower() + + for item in rng.split(","): + item = item.strip() + if "-" not in item: + return None + if item.startswith("-"): + if last_end < 0: + return None + try: + begin = int(item) + except ValueError: + return None + end = None + last_end = -1 + elif "-" in item: + begin_str, end_str = item.split("-", 1) + begin_str = begin_str.strip() + end_str = end_str.strip() + + try: + begin = int(begin_str) + except ValueError: + return None + + if begin < last_end or last_end < 0: + return None + if end_str: + try: + end = int(end_str) + 1 + except ValueError: + return None + + if begin >= end: + return None + else: + end = None + last_end = end if end is not None else -1 + ranges.append((begin, end)) + + return ds.Range(units, ranges) + + +def parse_content_range_header( + value: t.Optional[str], + on_update: t.Optional[t.Callable[["ds.ContentRange"], None]] = None, +) -> t.Optional["ds.ContentRange"]: + """Parses a range header into a + :class:`~werkzeug.datastructures.ContentRange` object or `None` if + parsing is not possible. + + .. versionadded:: 0.7 + + :param value: a content range header to be parsed. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.ContentRange` + object is changed. + """ + if value is None: + return None + try: + units, rangedef = (value or "").strip().split(None, 1) + except ValueError: + return None + + if "/" not in rangedef: + return None + rng, length_str = rangedef.split("/", 1) + if length_str == "*": + length = None + else: + try: + length = int(length_str) + except ValueError: + return None + + if rng == "*": + if not is_byte_range_valid(None, None, length): + return None + + return ds.ContentRange(units, None, None, length, on_update=on_update) + elif "-" not in rng: + return None + + start_str, stop_str = rng.split("-", 1) + try: + start = int(start_str) + stop = int(stop_str) + 1 + except ValueError: + return None + + if is_byte_range_valid(start, stop, length): + return ds.ContentRange(units, start, stop, length, on_update=on_update) + + return None + + +def quote_etag(etag: str, weak: bool = False) -> str: + """Quote an etag. + + :param etag: the etag to quote. + :param weak: set to `True` to tag it "weak". + """ + if '"' in etag: + raise ValueError("invalid etag") + etag = f'"{etag}"' + if weak: + etag = f"W/{etag}" + return etag + + +def unquote_etag( + etag: t.Optional[str], +) -> t.Union[t.Tuple[str, bool], t.Tuple[None, None]]: + """Unquote a single etag: + + >>> unquote_etag('W/"bar"') + ('bar', True) + >>> unquote_etag('"bar"') + ('bar', False) + + :param etag: the etag identifier to unquote. + :return: a ``(etag, weak)`` tuple. + """ + if not etag: + return None, None + etag = etag.strip() + weak = False + if etag.startswith(("W/", "w/")): + weak = True + etag = etag[2:] + if etag[:1] == etag[-1:] == '"': + etag = etag[1:-1] + return etag, weak + + +def parse_etags(value: t.Optional[str]) -> "ds.ETags": + """Parse an etag header. + + :param value: the tag header to parse + :return: an :class:`~werkzeug.datastructures.ETags` object. + """ + if not value: + return ds.ETags() + strong = [] + weak = [] + end = len(value) + pos = 0 + while pos < end: + match = _etag_re.match(value, pos) + if match is None: + break + is_weak, quoted, raw = match.groups() + if raw == "*": + return ds.ETags(star_tag=True) + elif quoted: + raw = quoted + if is_weak: + weak.append(raw) + else: + strong.append(raw) + pos = match.end() + return ds.ETags(strong, weak) + + +def generate_etag(data: bytes) -> str: + """Generate an etag for some data. + + .. versionchanged:: 2.0 + Use SHA-1. MD5 may not be available in some environments. + """ + return sha1(data).hexdigest() + + +def parse_date(value: t.Optional[str]) -> t.Optional[datetime]: + """Parse an :rfc:`2822` date into a timezone-aware + :class:`datetime.datetime` object, or ``None`` if parsing fails. + + This is a wrapper for :func:`email.utils.parsedate_to_datetime`. It + returns ``None`` if parsing fails instead of raising an exception, + and always returns a timezone-aware datetime object. If the string + doesn't have timezone information, it is assumed to be UTC. + + :param value: A string with a supported date format. + + .. versionchanged:: 2.0 + Return a timezone-aware datetime object. Use + ``email.utils.parsedate_to_datetime``. + """ + if value is None: + return None + + try: + dt = email.utils.parsedate_to_datetime(value) + except (TypeError, ValueError): + return None + + if dt.tzinfo is None: + return dt.replace(tzinfo=timezone.utc) + + return dt + + +def http_date( + timestamp: t.Optional[t.Union[datetime, date, int, float, struct_time]] = None +) -> str: + """Format a datetime object or timestamp into an :rfc:`2822` date + string. + + This is a wrapper for :func:`email.utils.format_datetime`. It + assumes naive datetime objects are in UTC instead of raising an + exception. + + :param timestamp: The datetime or timestamp to format. Defaults to + the current time. + + .. versionchanged:: 2.0 + Use ``email.utils.format_datetime``. Accept ``date`` objects. + """ + if isinstance(timestamp, date): + if not isinstance(timestamp, datetime): + # Assume plain date is midnight UTC. + timestamp = datetime.combine(timestamp, time(), tzinfo=timezone.utc) + else: + # Ensure datetime is timezone-aware. + timestamp = _dt_as_utc(timestamp) + + return email.utils.format_datetime(timestamp, usegmt=True) + + if isinstance(timestamp, struct_time): + timestamp = mktime(timestamp) + + return email.utils.formatdate(timestamp, usegmt=True) + + +def parse_age(value: t.Optional[str] = None) -> t.Optional[timedelta]: + """Parses a base-10 integer count of seconds into a timedelta. + + If parsing fails, the return value is `None`. + + :param value: a string consisting of an integer represented in base-10 + :return: a :class:`datetime.timedelta` object or `None`. + """ + if not value: + return None + try: + seconds = int(value) + except ValueError: + return None + if seconds < 0: + return None + try: + return timedelta(seconds=seconds) + except OverflowError: + return None + + +def dump_age(age: t.Optional[t.Union[timedelta, int]] = None) -> t.Optional[str]: + """Formats the duration as a base-10 integer. + + :param age: should be an integer number of seconds, + a :class:`datetime.timedelta` object, or, + if the age is unknown, `None` (default). + """ + if age is None: + return None + if isinstance(age, timedelta): + age = int(age.total_seconds()) + else: + age = int(age) + + if age < 0: + raise ValueError("age cannot be negative") + + return str(age) + + +def is_resource_modified( + environ: "WSGIEnvironment", + etag: t.Optional[str] = None, + data: t.Optional[bytes] = None, + last_modified: t.Optional[t.Union[datetime, str]] = None, + ignore_if_range: bool = True, +) -> bool: + """Convenience method for conditional requests. + + :param environ: the WSGI environment of the request to be checked. + :param etag: the etag for the response for comparison. + :param data: or alternatively the data of the response to automatically + generate an etag using :func:`generate_etag`. + :param last_modified: an optional date of the last modification. + :param ignore_if_range: If `False`, `If-Range` header will be taken into + account. + :return: `True` if the resource was modified, otherwise `False`. + + .. versionchanged:: 2.0 + SHA-1 is used to generate an etag value for the data. MD5 may + not be available in some environments. + + .. versionchanged:: 1.0.0 + The check is run for methods other than ``GET`` and ``HEAD``. + """ + return _sansio_http.is_resource_modified( + http_range=environ.get("HTTP_RANGE"), + http_if_range=environ.get("HTTP_IF_RANGE"), + http_if_modified_since=environ.get("HTTP_IF_MODIFIED_SINCE"), + http_if_none_match=environ.get("HTTP_IF_NONE_MATCH"), + http_if_match=environ.get("HTTP_IF_MATCH"), + etag=etag, + data=data, + last_modified=last_modified, + ignore_if_range=ignore_if_range, + ) + + +def remove_entity_headers( + headers: t.Union["ds.Headers", t.List[t.Tuple[str, str]]], + allowed: t.Iterable[str] = ("expires", "content-location"), +) -> None: + """Remove all entity headers from a list or :class:`Headers` object. This + operation works in-place. `Expires` and `Content-Location` headers are + by default not removed. The reason for this is :rfc:`2616` section + 10.3.5 which specifies some entity headers that should be sent. + + .. versionchanged:: 0.5 + added `allowed` parameter. + + :param headers: a list or :class:`Headers` object. + :param allowed: a list of headers that should still be allowed even though + they are entity headers. + """ + allowed = {x.lower() for x in allowed} + headers[:] = [ + (key, value) + for key, value in headers + if not is_entity_header(key) or key.lower() in allowed + ] + + +def remove_hop_by_hop_headers( + headers: t.Union["ds.Headers", t.List[t.Tuple[str, str]]] +) -> None: + """Remove all HTTP/1.1 "Hop-by-Hop" headers from a list or + :class:`Headers` object. This operation works in-place. + + .. versionadded:: 0.5 + + :param headers: a list or :class:`Headers` object. + """ + headers[:] = [ + (key, value) for key, value in headers if not is_hop_by_hop_header(key) + ] + + +def is_entity_header(header: str) -> bool: + """Check if a header is an entity header. + + .. versionadded:: 0.5 + + :param header: the header to test. + :return: `True` if it's an entity header, `False` otherwise. + """ + return header.lower() in _entity_headers + + +def is_hop_by_hop_header(header: str) -> bool: + """Check if a header is an HTTP/1.1 "Hop-by-Hop" header. + + .. versionadded:: 0.5 + + :param header: the header to test. + :return: `True` if it's an HTTP/1.1 "Hop-by-Hop" header, `False` otherwise. + """ + return header.lower() in _hop_by_hop_headers + + +def parse_cookie( + header: t.Union["WSGIEnvironment", str, bytes, None], + charset: str = "utf-8", + errors: str = "replace", + cls: t.Optional[t.Type["ds.MultiDict"]] = None, +) -> "ds.MultiDict[str, str]": + """Parse a cookie from a string or WSGI environ. + + The same key can be provided multiple times, the values are stored + in-order. The default :class:`MultiDict` will have the first value + first, and all values can be retrieved with + :meth:`MultiDict.getlist`. + + :param header: The cookie header as a string, or a WSGI environ dict + with a ``HTTP_COOKIE`` key. + :param charset: The charset for the cookie values. + :param errors: The error behavior for the charset decoding. + :param cls: A dict-like class to store the parsed cookies in. + Defaults to :class:`MultiDict`. + + .. versionchanged:: 1.0.0 + Returns a :class:`MultiDict` instead of a + ``TypeConversionDict``. + + .. versionchanged:: 0.5 + Returns a :class:`TypeConversionDict` instead of a regular dict. + The ``cls`` parameter was added. + """ + if isinstance(header, dict): + cookie = header.get("HTTP_COOKIE", "") + elif header is None: + cookie = "" + else: + cookie = header + + return _sansio_http.parse_cookie( + cookie=cookie, charset=charset, errors=errors, cls=cls + ) + + +def dump_cookie( + key: str, + value: t.Union[bytes, str] = "", + max_age: t.Optional[t.Union[timedelta, int]] = None, + expires: t.Optional[t.Union[str, datetime, int, float]] = None, + path: t.Optional[str] = "/", + domain: t.Optional[str] = None, + secure: bool = False, + httponly: bool = False, + charset: str = "utf-8", + sync_expires: bool = True, + max_size: int = 4093, + samesite: t.Optional[str] = None, +) -> str: + """Create a Set-Cookie header without the ``Set-Cookie`` prefix. + + The return value is usually restricted to ascii as the vast majority + of values are properly escaped, but that is no guarantee. It's + tunneled through latin1 as required by :pep:`3333`. + + The return value is not ASCII safe if the key contains unicode + characters. This is technically against the specification but + happens in the wild. It's strongly recommended to not use + non-ASCII values for the keys. + + :param max_age: should be a number of seconds, or `None` (default) if + the cookie should last only as long as the client's + browser session. Additionally `timedelta` objects + are accepted, too. + :param expires: should be a `datetime` object or unix timestamp. + :param path: limits the cookie to a given path, per default it will + span the whole domain. + :param domain: Use this if you want to set a cross-domain cookie. For + example, ``domain=".example.com"`` will set a cookie + that is readable by the domain ``www.example.com``, + ``foo.example.com`` etc. Otherwise, a cookie will only + be readable by the domain that set it. + :param secure: The cookie will only be available via HTTPS + :param httponly: disallow JavaScript to access the cookie. This is an + extension to the cookie standard and probably not + supported by all browsers. + :param charset: the encoding for string values. + :param sync_expires: automatically set expires if max_age is defined + but expires not. + :param max_size: Warn if the final header value exceeds this size. The + default, 4093, should be safely `supported by most browsers + `_. Set to 0 to disable this check. + :param samesite: Limits the scope of the cookie such that it will + only be attached to requests if those requests are same-site. + + .. _`cookie`: http://browsercookielimits.squawky.net/ + + .. versionchanged:: 1.0.0 + The string ``'None'`` is accepted for ``samesite``. + """ + key = _to_bytes(key, charset) + value = _to_bytes(value, charset) + + if path is not None: + from .urls import iri_to_uri + + path = iri_to_uri(path, charset) + + domain = _make_cookie_domain(domain) + + if isinstance(max_age, timedelta): + max_age = int(max_age.total_seconds()) + + if expires is not None: + if not isinstance(expires, str): + expires = http_date(expires) + elif max_age is not None and sync_expires: + expires = http_date(datetime.now(tz=timezone.utc).timestamp() + max_age) + + if samesite is not None: + samesite = samesite.title() + + if samesite not in {"Strict", "Lax", "None"}: + raise ValueError("SameSite must be 'Strict', 'Lax', or 'None'.") + + buf = [key + b"=" + _cookie_quote(value)] + + # XXX: In theory all of these parameters that are not marked with `None` + # should be quoted. Because stdlib did not quote it before I did not + # want to introduce quoting there now. + for k, v, q in ( + (b"Domain", domain, True), + (b"Expires", expires, False), + (b"Max-Age", max_age, False), + (b"Secure", secure, None), + (b"HttpOnly", httponly, None), + (b"Path", path, False), + (b"SameSite", samesite, False), + ): + if q is None: + if v: + buf.append(k) + continue + + if v is None: + continue + + tmp = bytearray(k) + if not isinstance(v, (bytes, bytearray)): + v = _to_bytes(str(v), charset) + if q: + v = _cookie_quote(v) + tmp += b"=" + v + buf.append(bytes(tmp)) + + # The return value will be an incorrectly encoded latin1 header for + # consistency with the headers object. + rv = b"; ".join(buf) + rv = rv.decode("latin1") + + # Warn if the final value of the cookie is larger than the limit. If the + # cookie is too large, then it may be silently ignored by the browser, + # which can be quite hard to debug. + cookie_size = len(rv) + + if max_size and cookie_size > max_size: + value_size = len(value) + warnings.warn( + f"The {key.decode(charset)!r} cookie is too large: the value was" + f" {value_size} bytes but the" + f" header required {cookie_size - value_size} extra bytes. The final size" + f" was {cookie_size} bytes but the limit is {max_size} bytes. Browsers may" + f" silently ignore cookies larger than this.", + stacklevel=2, + ) + + return rv + + +def is_byte_range_valid( + start: t.Optional[int], stop: t.Optional[int], length: t.Optional[int] +) -> bool: + """Checks if a given byte content range is valid for the given length. + + .. versionadded:: 0.7 + """ + if (start is None) != (stop is None): + return False + elif start is None: + return length is None or length >= 0 + elif length is None: + return 0 <= start < stop # type: ignore + elif start >= stop: # type: ignore + return False + return 0 <= start < length + + +# circular dependencies +from . import datastructures as ds +from .sansio import http as _sansio_http diff --git a/venv/Lib/site-packages/werkzeug/local.py b/venv/Lib/site-packages/werkzeug/local.py new file mode 100644 index 0000000..9927a0a --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/local.py @@ -0,0 +1,648 @@ +import copy +import math +import operator +import typing as t +from contextvars import ContextVar +from functools import partial +from functools import update_wrapper +from operator import attrgetter + +from .wsgi import ClosingIterator + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + +T = t.TypeVar("T") +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + + +def release_local(local: t.Union["Local", "LocalStack"]) -> None: + """Release the data for the current context in a :class:`Local` or + :class:`LocalStack` without using a :class:`LocalManager`. + + This should not be needed for modern use cases, and may be removed + in the future. + + .. versionadded:: 0.6.1 + """ + local.__release_local__() + + +class Local: + """Create a namespace of context-local data. This wraps a + :class:`ContextVar` containing a :class:`dict` value. + + This may incur a performance penalty compared to using individual + context vars, as it has to copy data to avoid mutating the dict + between nested contexts. + + :param context_var: The :class:`~contextvars.ContextVar` to use as + storage for this local. If not given, one will be created. + Context vars not created at the global scope may interfere with + garbage collection. + + .. versionchanged:: 2.0 + Uses ``ContextVar`` instead of a custom storage implementation. + """ + + __slots__ = ("__storage",) + + def __init__( + self, context_var: t.Optional[ContextVar[t.Dict[str, t.Any]]] = None + ) -> None: + if context_var is None: + # A ContextVar not created at global scope interferes with + # Python's garbage collection. However, a local only makes + # sense defined at the global scope as well, in which case + # the GC issue doesn't seem relevant. + context_var = ContextVar(f"werkzeug.Local<{id(self)}>.storage") + + object.__setattr__(self, "_Local__storage", context_var) + + def __iter__(self) -> t.Iterator[t.Tuple[str, t.Any]]: + return iter(self.__storage.get({}).items()) + + def __call__( + self, name: str, *, unbound_message: t.Optional[str] = None + ) -> "LocalProxy": + """Create a :class:`LocalProxy` that access an attribute on this + local namespace. + + :param name: Proxy this attribute. + :param unbound_message: The error message that the proxy will + show if the attribute isn't set. + """ + return LocalProxy(self, name, unbound_message=unbound_message) + + def __release_local__(self) -> None: + self.__storage.set({}) + + def __getattr__(self, name: str) -> t.Any: + values = self.__storage.get({}) + + if name in values: + return values[name] + + raise AttributeError(name) + + def __setattr__(self, name: str, value: t.Any) -> None: + values = self.__storage.get({}).copy() + values[name] = value + self.__storage.set(values) + + def __delattr__(self, name: str) -> None: + values = self.__storage.get({}) + + if name in values: + values = values.copy() + del values[name] + self.__storage.set(values) + else: + raise AttributeError(name) + + +class LocalStack(t.Generic[T]): + """Create a stack of context-local data. This wraps a + :class:`ContextVar` containing a :class:`list` value. + + This may incur a performance penalty compared to using individual + context vars, as it has to copy data to avoid mutating the list + between nested contexts. + + :param context_var: The :class:`~contextvars.ContextVar` to use as + storage for this local. If not given, one will be created. + Context vars not created at the global scope may interfere with + garbage collection. + + .. versionchanged:: 2.0 + Uses ``ContextVar`` instead of a custom storage implementation. + + .. versionadded:: 0.6.1 + """ + + __slots__ = ("_storage",) + + def __init__(self, context_var: t.Optional[ContextVar[t.List[T]]] = None) -> None: + if context_var is None: + # A ContextVar not created at global scope interferes with + # Python's garbage collection. However, a local only makes + # sense defined at the global scope as well, in which case + # the GC issue doesn't seem relevant. + context_var = ContextVar(f"werkzeug.LocalStack<{id(self)}>.storage") + + self._storage = context_var + + def __release_local__(self) -> None: + self._storage.set([]) + + def push(self, obj: T) -> t.List[T]: + """Add a new item to the top of the stack.""" + stack = self._storage.get([]).copy() + stack.append(obj) + self._storage.set(stack) + return stack + + def pop(self) -> t.Optional[T]: + """Remove the top item from the stack and return it. If the + stack is empty, return ``None``. + """ + stack = self._storage.get([]) + + if len(stack) == 0: + return None + + rv = stack[-1] + self._storage.set(stack[:-1]) + return rv + + @property + def top(self) -> t.Optional[T]: + """The topmost item on the stack. If the stack is empty, + `None` is returned. + """ + stack = self._storage.get([]) + + if len(stack) == 0: + return None + + return stack[-1] + + def __call__( + self, name: t.Optional[str] = None, *, unbound_message: t.Optional[str] = None + ) -> "LocalProxy": + """Create a :class:`LocalProxy` that accesses the top of this + local stack. + + :param name: If given, the proxy access this attribute of the + top item, rather than the item itself. + :param unbound_message: The error message that the proxy will + show if the stack is empty. + """ + return LocalProxy(self, name, unbound_message=unbound_message) + + +class LocalManager: + """Manage releasing the data for the current context in one or more + :class:`Local` and :class:`LocalStack` objects. + + This should not be needed for modern use cases, and may be removed + in the future. + + :param locals: A local or list of locals to manage. + + .. versionchanged:: 2.0 + ``ident_func`` is deprecated and will be removed in Werkzeug + 2.1. + + .. versionchanged:: 0.7 + The ``ident_func`` parameter was added. + + .. versionchanged:: 0.6.1 + The :func:`release_local` function can be used instead of a + manager. + """ + + __slots__ = ("locals",) + + def __init__( + self, + locals: t.Optional[ + t.Union[Local, LocalStack, t.Iterable[t.Union[Local, LocalStack]]] + ] = None, + ) -> None: + if locals is None: + self.locals = [] + elif isinstance(locals, Local): + self.locals = [locals] + else: + self.locals = list(locals) # type: ignore[arg-type] + + def cleanup(self) -> None: + """Release the data in the locals for this context. Call this at + the end of each request or use :meth:`make_middleware`. + """ + for local in self.locals: + release_local(local) + + def make_middleware(self, app: "WSGIApplication") -> "WSGIApplication": + """Wrap a WSGI application so that local data is released + automatically after the response has been sent for a request. + """ + + def application( + environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + return ClosingIterator(app(environ, start_response), self.cleanup) + + return application + + def middleware(self, func: "WSGIApplication") -> "WSGIApplication": + """Like :meth:`make_middleware` but used as a decorator on the + WSGI application function. + + .. code-block:: python + + @manager.middleware + def application(environ, start_response): + ... + """ + return update_wrapper(self.make_middleware(func), func) + + def __repr__(self) -> str: + return f"<{type(self).__name__} storages: {len(self.locals)}>" + + +class _ProxyLookup: + """Descriptor that handles proxied attribute lookup for + :class:`LocalProxy`. + + :param f: The built-in function this attribute is accessed through. + Instead of looking up the special method, the function call + is redone on the object. + :param fallback: Return this function if the proxy is unbound + instead of raising a :exc:`RuntimeError`. + :param is_attr: This proxied name is an attribute, not a function. + Call the fallback immediately to get the value. + :param class_value: Value to return when accessed from the + ``LocalProxy`` class directly. Used for ``__doc__`` so building + docs still works. + """ + + __slots__ = ("bind_f", "fallback", "is_attr", "class_value", "name") + + def __init__( + self, + f: t.Optional[t.Callable] = None, + fallback: t.Optional[t.Callable] = None, + class_value: t.Optional[t.Any] = None, + is_attr: bool = False, + ) -> None: + bind_f: t.Optional[t.Callable[["LocalProxy", t.Any], t.Callable]] + + if hasattr(f, "__get__"): + # A Python function, can be turned into a bound method. + + def bind_f(instance: "LocalProxy", obj: t.Any) -> t.Callable: + return f.__get__(obj, type(obj)) # type: ignore + + elif f is not None: + # A C function, use partial to bind the first argument. + + def bind_f(instance: "LocalProxy", obj: t.Any) -> t.Callable: + return partial(f, obj) + + else: + # Use getattr, which will produce a bound method. + bind_f = None + + self.bind_f = bind_f + self.fallback = fallback + self.class_value = class_value + self.is_attr = is_attr + + def __set_name__(self, owner: "LocalProxy", name: str) -> None: + self.name = name + + def __get__(self, instance: "LocalProxy", owner: t.Optional[type] = None) -> t.Any: + if instance is None: + if self.class_value is not None: + return self.class_value + + return self + + try: + obj = instance._get_current_object() + except RuntimeError: + if self.fallback is None: + raise + + fallback = self.fallback.__get__(instance, owner) + + if self.is_attr: + # __class__ and __doc__ are attributes, not methods. + # Call the fallback to get the value. + return fallback() + + return fallback + + if self.bind_f is not None: + return self.bind_f(instance, obj) + + return getattr(obj, self.name) + + def __repr__(self) -> str: + return f"proxy {self.name}" + + def __call__(self, instance: "LocalProxy", *args: t.Any, **kwargs: t.Any) -> t.Any: + """Support calling unbound methods from the class. For example, + this happens with ``copy.copy``, which does + ``type(x).__copy__(x)``. ``type(x)`` can't be proxied, so it + returns the proxy type and descriptor. + """ + return self.__get__(instance, type(instance))(*args, **kwargs) + + +class _ProxyIOp(_ProxyLookup): + """Look up an augmented assignment method on a proxied object. The + method is wrapped to return the proxy instead of the object. + """ + + __slots__ = () + + def __init__( + self, f: t.Optional[t.Callable] = None, fallback: t.Optional[t.Callable] = None + ) -> None: + super().__init__(f, fallback) + + def bind_f(instance: "LocalProxy", obj: t.Any) -> t.Callable: + def i_op(self: t.Any, other: t.Any) -> "LocalProxy": + f(self, other) # type: ignore + return instance + + return i_op.__get__(obj, type(obj)) # type: ignore + + self.bind_f = bind_f + + +def _l_to_r_op(op: F) -> F: + """Swap the argument order to turn an l-op into an r-op.""" + + def r_op(obj: t.Any, other: t.Any) -> t.Any: + return op(other, obj) + + return t.cast(F, r_op) + + +def _identity(o: T) -> T: + return o + + +class LocalProxy(t.Generic[T]): + """A proxy to the object bound to a context-local object. All + operations on the proxy are forwarded to the bound object. If no + object is bound, a ``RuntimeError`` is raised. + + :param local: The context-local object that provides the proxied + object. + :param name: Proxy this attribute from the proxied object. + :param unbound_message: The error message to show if the + context-local object is unbound. + + Proxy a :class:`~contextvars.ContextVar` to make it easier to + access. Pass a name to proxy that attribute. + + .. code-block:: python + + _request_var = ContextVar("request") + request = LocalProxy(_request_var) + session = LocalProxy(_request_var, "session") + + Proxy an attribute on a :class:`Local` namespace by calling the + local with the attribute name: + + .. code-block:: python + + data = Local() + user = data("user") + + Proxy the top item on a :class:`LocalStack` by calling the local. + Pass a name to proxy that attribute. + + .. code-block:: + + app_stack = LocalStack() + current_app = app_stack() + g = app_stack("g") + + Pass a function to proxy the return value from that function. This + was previously used to access attributes of local objects before + that was supported directly. + + .. code-block:: python + + session = LocalProxy(lambda: request.session) + + ``__repr__`` and ``__class__`` are proxied, so ``repr(x)`` and + ``isinstance(x, cls)`` will look like the proxied object. Use + ``issubclass(type(x), LocalProxy)`` to check if an object is a + proxy. + + .. code-block:: python + + repr(user) # + isinstance(user, User) # True + issubclass(type(user), LocalProxy) # True + + .. versionchanged:: 2.2.2 + ``__wrapped__`` is set when wrapping an object, not only when + wrapping a function, to prevent doctest from failing. + + .. versionchanged:: 2.2 + Can proxy a ``ContextVar`` or ``LocalStack`` directly. + + .. versionchanged:: 2.2 + The ``name`` parameter can be used with any proxied object, not + only ``Local``. + + .. versionchanged:: 2.2 + Added the ``unbound_message`` parameter. + + .. versionchanged:: 2.0 + Updated proxied attributes and methods to reflect the current + data model. + + .. versionchanged:: 0.6.1 + The class can be instantiated with a callable. + """ + + __slots__ = ("__wrapped", "_get_current_object") + + _get_current_object: t.Callable[[], T] + """Return the current object this proxy is bound to. If the proxy is + unbound, this raises a ``RuntimeError``. + + This should be used if you need to pass the object to something that + doesn't understand the proxy. It can also be useful for performance + if you are accessing the object multiple times in a function, rather + than going through the proxy multiple times. + """ + + def __init__( + self, + local: t.Union[ContextVar[T], Local, LocalStack[T], t.Callable[[], T]], + name: t.Optional[str] = None, + *, + unbound_message: t.Optional[str] = None, + ) -> None: + if name is None: + get_name = _identity + else: + get_name = attrgetter(name) # type: ignore[assignment] + + if unbound_message is None: + unbound_message = "object is not bound" + + if isinstance(local, Local): + if name is None: + raise TypeError("'name' is required when proxying a 'Local' object.") + + def _get_current_object() -> T: + try: + return get_name(local) # type: ignore[return-value] + except AttributeError: + raise RuntimeError(unbound_message) from None + + elif isinstance(local, LocalStack): + + def _get_current_object() -> T: + obj = local.top # type: ignore[union-attr] + + if obj is None: + raise RuntimeError(unbound_message) + + return get_name(obj) + + elif isinstance(local, ContextVar): + + def _get_current_object() -> T: + try: + obj = local.get() # type: ignore[union-attr] + except LookupError: + raise RuntimeError(unbound_message) from None + + return get_name(obj) + + elif callable(local): + + def _get_current_object() -> T: + return get_name(local()) # type: ignore + + else: + raise TypeError(f"Don't know how to proxy '{type(local)}'.") + + object.__setattr__(self, "_LocalProxy__wrapped", local) + object.__setattr__(self, "_get_current_object", _get_current_object) + + __doc__ = _ProxyLookup( # type: ignore + class_value=__doc__, fallback=lambda self: type(self).__doc__, is_attr=True + ) + __wrapped__ = _ProxyLookup( + fallback=lambda self: self._LocalProxy__wrapped, is_attr=True + ) + # __del__ should only delete the proxy + __repr__ = _ProxyLookup( # type: ignore + repr, fallback=lambda self: f"<{type(self).__name__} unbound>" + ) + __str__ = _ProxyLookup(str) # type: ignore + __bytes__ = _ProxyLookup(bytes) + __format__ = _ProxyLookup() # type: ignore + __lt__ = _ProxyLookup(operator.lt) + __le__ = _ProxyLookup(operator.le) + __eq__ = _ProxyLookup(operator.eq) # type: ignore + __ne__ = _ProxyLookup(operator.ne) # type: ignore + __gt__ = _ProxyLookup(operator.gt) + __ge__ = _ProxyLookup(operator.ge) + __hash__ = _ProxyLookup(hash) # type: ignore + __bool__ = _ProxyLookup(bool, fallback=lambda self: False) + __getattr__ = _ProxyLookup(getattr) + # __getattribute__ triggered through __getattr__ + __setattr__ = _ProxyLookup(setattr) # type: ignore + __delattr__ = _ProxyLookup(delattr) # type: ignore + __dir__ = _ProxyLookup(dir, fallback=lambda self: []) # type: ignore + # __get__ (proxying descriptor not supported) + # __set__ (descriptor) + # __delete__ (descriptor) + # __set_name__ (descriptor) + # __objclass__ (descriptor) + # __slots__ used by proxy itself + # __dict__ (__getattr__) + # __weakref__ (__getattr__) + # __init_subclass__ (proxying metaclass not supported) + # __prepare__ (metaclass) + __class__ = _ProxyLookup( + fallback=lambda self: type(self), is_attr=True + ) # type: ignore + __instancecheck__ = _ProxyLookup(lambda self, other: isinstance(other, self)) + __subclasscheck__ = _ProxyLookup(lambda self, other: issubclass(other, self)) + # __class_getitem__ triggered through __getitem__ + __call__ = _ProxyLookup(lambda self, *args, **kwargs: self(*args, **kwargs)) + __len__ = _ProxyLookup(len) + __length_hint__ = _ProxyLookup(operator.length_hint) + __getitem__ = _ProxyLookup(operator.getitem) + __setitem__ = _ProxyLookup(operator.setitem) + __delitem__ = _ProxyLookup(operator.delitem) + # __missing__ triggered through __getitem__ + __iter__ = _ProxyLookup(iter) + __next__ = _ProxyLookup(next) + __reversed__ = _ProxyLookup(reversed) + __contains__ = _ProxyLookup(operator.contains) + __add__ = _ProxyLookup(operator.add) + __sub__ = _ProxyLookup(operator.sub) + __mul__ = _ProxyLookup(operator.mul) + __matmul__ = _ProxyLookup(operator.matmul) + __truediv__ = _ProxyLookup(operator.truediv) + __floordiv__ = _ProxyLookup(operator.floordiv) + __mod__ = _ProxyLookup(operator.mod) + __divmod__ = _ProxyLookup(divmod) + __pow__ = _ProxyLookup(pow) + __lshift__ = _ProxyLookup(operator.lshift) + __rshift__ = _ProxyLookup(operator.rshift) + __and__ = _ProxyLookup(operator.and_) + __xor__ = _ProxyLookup(operator.xor) + __or__ = _ProxyLookup(operator.or_) + __radd__ = _ProxyLookup(_l_to_r_op(operator.add)) + __rsub__ = _ProxyLookup(_l_to_r_op(operator.sub)) + __rmul__ = _ProxyLookup(_l_to_r_op(operator.mul)) + __rmatmul__ = _ProxyLookup(_l_to_r_op(operator.matmul)) + __rtruediv__ = _ProxyLookup(_l_to_r_op(operator.truediv)) + __rfloordiv__ = _ProxyLookup(_l_to_r_op(operator.floordiv)) + __rmod__ = _ProxyLookup(_l_to_r_op(operator.mod)) + __rdivmod__ = _ProxyLookup(_l_to_r_op(divmod)) + __rpow__ = _ProxyLookup(_l_to_r_op(pow)) + __rlshift__ = _ProxyLookup(_l_to_r_op(operator.lshift)) + __rrshift__ = _ProxyLookup(_l_to_r_op(operator.rshift)) + __rand__ = _ProxyLookup(_l_to_r_op(operator.and_)) + __rxor__ = _ProxyLookup(_l_to_r_op(operator.xor)) + __ror__ = _ProxyLookup(_l_to_r_op(operator.or_)) + __iadd__ = _ProxyIOp(operator.iadd) + __isub__ = _ProxyIOp(operator.isub) + __imul__ = _ProxyIOp(operator.imul) + __imatmul__ = _ProxyIOp(operator.imatmul) + __itruediv__ = _ProxyIOp(operator.itruediv) + __ifloordiv__ = _ProxyIOp(operator.ifloordiv) + __imod__ = _ProxyIOp(operator.imod) + __ipow__ = _ProxyIOp(operator.ipow) + __ilshift__ = _ProxyIOp(operator.ilshift) + __irshift__ = _ProxyIOp(operator.irshift) + __iand__ = _ProxyIOp(operator.iand) + __ixor__ = _ProxyIOp(operator.ixor) + __ior__ = _ProxyIOp(operator.ior) + __neg__ = _ProxyLookup(operator.neg) + __pos__ = _ProxyLookup(operator.pos) + __abs__ = _ProxyLookup(abs) + __invert__ = _ProxyLookup(operator.invert) + __complex__ = _ProxyLookup(complex) + __int__ = _ProxyLookup(int) + __float__ = _ProxyLookup(float) + __index__ = _ProxyLookup(operator.index) + __round__ = _ProxyLookup(round) + __trunc__ = _ProxyLookup(math.trunc) + __floor__ = _ProxyLookup(math.floor) + __ceil__ = _ProxyLookup(math.ceil) + __enter__ = _ProxyLookup() + __exit__ = _ProxyLookup() + __await__ = _ProxyLookup() + __aiter__ = _ProxyLookup() + __anext__ = _ProxyLookup() + __aenter__ = _ProxyLookup() + __aexit__ = _ProxyLookup() + __copy__ = _ProxyLookup(copy.copy) + __deepcopy__ = _ProxyLookup(copy.deepcopy) + # __getnewargs_ex__ (pickle through proxy not supported) + # __getnewargs__ (pickle) + # __getstate__ (pickle) + # __setstate__ (pickle) + # __reduce__ (pickle) + # __reduce_ex__ (pickle) diff --git a/venv/Lib/site-packages/werkzeug/middleware/__init__.py b/venv/Lib/site-packages/werkzeug/middleware/__init__.py new file mode 100644 index 0000000..6ddcf7f --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/__init__.py @@ -0,0 +1,22 @@ +""" +Middleware +========== + +A WSGI middleware is a WSGI application that wraps another application +in order to observe or change its behavior. Werkzeug provides some +middleware for common use cases. + +.. toctree:: + :maxdepth: 1 + + proxy_fix + shared_data + dispatcher + http_proxy + lint + profiler + +The :doc:`interactive debugger ` is also a middleware that can +be applied manually, although it is typically used automatically with +the :doc:`development server `. +""" diff --git a/venv/Lib/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47afb8fe7c572efafca2ef92b1bd7c23663af032 GIT binary patch literal 691 zcmYjP!EV$r5Y6^NWvN%rbFD;!xKJr7D+)*msc>mgB^1f=#rN3&?npG8spn!#f*F5dD;$2{rcTcH=%#p#jy&4T!B zweE4FB8oRpA;cxzUVr=q!;=a&f!dQQgxHl>m-vP+N_GOa-q*X86eMPOj}Xqhz>UEwv(*v9>8FYPt9f4N;IeBg5W0$_u8} zw&zXa#voMMw^hR$M%9w##x$@_QM%No>3eqihO)W(t#Z2Chn8Yk?17|;=9ujf+cg>~JsDaDu5 z#r-oWxo|0e7V(I`L!SON@2mPNZ%p+SIzRdPGK3H8PJQM1qWT7hPzM{%tV_hToP{6f o7|-?V`ti-`&BNo>|NE?^w9b;0W!T*xUkqN4JuaWmACX7#51x78s{jB1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd46a54c88ebc87b05512be11c669885cd54266e GIT binary patch literal 2732 zcmZ`*TW=dh6yBRJ*(L>51ym%YQC~`=G*ncglDUX9DNRZmtR|?!vb2nM#__g$>&!T* zi}OSu`3Hd1KJu6Ll_&lJPkd)KYo}1w+L_robMD_cQDM;9v_RZ z@#N%Mik$5vy5uIFNELqh)+Y>)CW&TQB19@rxsohak{hWRXFAD` zQ^_75-rr;Vf>1NzhKWY9W~KGl6f^GF- zG-l4ms(@-NNgNg|$=L&b!VhDWl!n#b6z~|PGgVAUWr#EMIa0-`hC>QgV#3*+Dfw(F zwKYs6jVmQA)1)f1eBe2eY7@bgOa1U@5!BtIhx^vP2ZwB&z+G#Go)ptmu#sd|fMDZ7 z;nXaoC}CSC0$Q$r!pr13VrEm<#OsZOfT@l^S+Z#^V0z88K?E)`xQC2}3li;ICn5r7 zN$2*E8`iBlf@CQ^$*44~a~+g`QF^+3wL% zzmBeAsXUSCMo4B6%xdr89E3if(T*wJ0DhfS%|=`U%D`$`)OEJWkmzs$xhB3qu+69B zF=dYlS*FDdtfvXm2`tEx16k)KR!iRqDG6k$HmKqF+^Sm85*Q*;GB)Xqjb{IL3&7ai zWPEChIOQ67d22GluooBQOi{dg?9*Gf?yx?RDvb_%Xdg1yvd8Wo?%ce6b35fzEyKUi ztDJ*%w^}xM=m~e= zi&f#v;7JQ_TXuv$_O3bC9N~%JH(#_w`(+EQt|PjjugDOT73_!N(#v3Q$+p0?>guxP zEs@6`xQ?@3WTPaPY|*O#w5Cx49v6!9-yLt$!tqgE_c(`+v#2)Y3LvpH(+FGQgVJbA zHvuNKmC`gqTY5+pp}$8k$OvjZ0@8olC#h%@(mEO2oS#?TqE-Z&SboE>j5_jZ&hP$N@a)QC#P`#4JA2Gqxx)=^9=u3 zNQ50OksKrkiB6;FbA0I!F*yFJ8+f5hKhJyDz2d#=t-7mj_y1E?OCZp#l0ecEMO7F@ z8Lp9()~iwUY|7JfN+*g$5o6mmRrkA+?irp|!A=sJ%GXAzRcqRwk&2H}S+zzp{C86C zVfTXl3nx?ygmt`{wz}P*^}c(#6}a{Oin@l~s%>T^N==cAgSDd{`uC#k-Fw^L?j778 tT#i7LdLqT})aCC?xT3(_3}Fs2%)@;e;lm1Gnq75iI=te*ip4DEt5b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7eb9d3c2311a381dff29c262cd0975897a6c3ac5 GIT binary patch literal 6797 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 z zDBcDRc>%Ql6R#qe5-K1*a=#6{`k@4e82<@gbp^%tU+hf6A`mP#87!1+>;!Dg+;Zi) z%)*w9uZ_rrJsIi(EZ6ustnQ)t01&6}yo7LIQ%qJyNM ze}H015$eB*2MVVKGx3{bWmYh4W}3Ty`Tqnm@liRG+Jt9GB9LcMqz+IoBAz;QhlGC% z)|Wb=PATM%^$4jyQVaJ8sgprSQXEUm1oT5DVbhT$gWiNb7#->>-S0+}*=h*@%^6@M zh2_-6Ro>vJCC^hs5e-=yn7UwUkP%8!j+Ra)Pb3#$cnoZfV(g+OC$<|RyP1$zsllNe zlCGkR+E;Oux|lMg`3Vgu+`;{spTsiFt?wj4RVL&dtu;>t*>H7?a@GVl5|m^NJymVs zseVc{ENrRj4u;|GvO0#dque3cMH>e$i+w3Gp z0#ek%$`(Lo7vL!ipi(xEn`J=G1`TR4SqZHs-jn8JM&B%>l~ye0PL+1&{!gH+ND&VX}sTC528MwAw zALp(;tC!nn@)S}gyGQ4++`iSfmyL&~5Y}~kq+ne!m#W3(tE;zbcb0D6gCHn%%(7{1 zz^+a+72TW2Cb}S8jhX`hlND#PG^Vr+j|NUkzUfY?R{K51sxk`0Dlo@9PU$!Pzb~EP z1jL$gqEB-w6GSNT+oD!W-C7N|Pu-B}rCRM_*AE9h`C5&~jan_!fBs9LnM{NrAWu{A zDT>qzqC{5clXfKq6$Ay@qT+ymT_dxQbY_^wtNmu-bK5bP$I6pato+Dky0`L<3^4$C z`;K0c04Og}LH-Q4@bJn2BkqU0a4DIW%+UlJ2CXvClB%orW3>@ze^eb`{d#$^cK!C^ z^}j)=td?t_EmRA4nR*PJ3iPQzgAwugL(Hdz%bB#U&;&(M+=elhU~GdQOikCU{{^dI B7X$zR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..182a62f43c710b44f1c3b41cf074b550a6dd1295 GIT binary patch literal 12677 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 anW*+@Ecs{eVTMm77ioK;P(hZ!ulRpoJ{rFO literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcf22ec20d5eaae95ad5dca9fe23376965f60837 GIT binary patch literal 9061 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 None: + self.app = app + self.mounts = mounts or {} + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + script = environ.get("PATH_INFO", "") + path_info = "" + + while "/" in script: + if script in self.mounts: + app = self.mounts[script] + break + + script, last_item = script.rsplit("/", 1) + path_info = f"/{last_item}{path_info}" + else: + app = self.mounts.get(script, self.app) + + original_script_name = environ.get("SCRIPT_NAME", "") + environ["SCRIPT_NAME"] = original_script_name + script + environ["PATH_INFO"] = path_info + return app(environ, start_response) diff --git a/venv/Lib/site-packages/werkzeug/middleware/http_proxy.py b/venv/Lib/site-packages/werkzeug/middleware/http_proxy.py new file mode 100644 index 0000000..1cde458 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/http_proxy.py @@ -0,0 +1,230 @@ +""" +Basic HTTP Proxy +================ + +.. autoclass:: ProxyMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import typing as t +from http import client + +from ..datastructures import EnvironHeaders +from ..http import is_hop_by_hop_header +from ..urls import url_parse +from ..urls import url_quote +from ..wsgi import get_input_stream + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class ProxyMiddleware: + """Proxy requests under a path to an external server, routing other + requests to the app. + + This middleware can only proxy HTTP requests, as HTTP is the only + protocol handled by the WSGI server. Other protocols, such as + WebSocket requests, cannot be proxied at this layer. This should + only be used for development, in production a real proxy server + should be used. + + The middleware takes a dict mapping a path prefix to a dict + describing the host to be proxied to:: + + app = ProxyMiddleware(app, { + "/static/": { + "target": "http://127.0.0.1:5001/", + } + }) + + Each host has the following options: + + ``target``: + The target URL to dispatch to. This is required. + ``remove_prefix``: + Whether to remove the prefix from the URL before dispatching it + to the target. The default is ``False``. + ``host``: + ``""`` (default): + The host header is automatically rewritten to the URL of the + target. + ``None``: + The host header is unmodified from the client request. + Any other value: + The host header is overwritten with the value. + ``headers``: + A dictionary of headers to be sent with the request to the + target. The default is ``{}``. + ``ssl_context``: + A :class:`ssl.SSLContext` defining how to verify requests if the + target is HTTPS. The default is ``None``. + + In the example above, everything under ``"/static/"`` is proxied to + the server on port 5001. The host header is rewritten to the target, + and the ``"/static/"`` prefix is removed from the URLs. + + :param app: The WSGI application to wrap. + :param targets: Proxy target configurations. See description above. + :param chunk_size: Size of chunks to read from input stream and + write to target. + :param timeout: Seconds before an operation to a target fails. + + .. versionadded:: 0.14 + """ + + def __init__( + self, + app: "WSGIApplication", + targets: t.Mapping[str, t.Dict[str, t.Any]], + chunk_size: int = 2 << 13, + timeout: int = 10, + ) -> None: + def _set_defaults(opts: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + opts.setdefault("remove_prefix", False) + opts.setdefault("host", "") + opts.setdefault("headers", {}) + opts.setdefault("ssl_context", None) + return opts + + self.app = app + self.targets = { + f"/{k.strip('/')}/": _set_defaults(v) for k, v in targets.items() + } + self.chunk_size = chunk_size + self.timeout = timeout + + def proxy_to( + self, opts: t.Dict[str, t.Any], path: str, prefix: str + ) -> "WSGIApplication": + target = url_parse(opts["target"]) + host = t.cast(str, target.ascii_host) + + def application( + environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + headers = list(EnvironHeaders(environ).items()) + headers[:] = [ + (k, v) + for k, v in headers + if not is_hop_by_hop_header(k) + and k.lower() not in ("content-length", "host") + ] + headers.append(("Connection", "close")) + + if opts["host"] == "": + headers.append(("Host", host)) + elif opts["host"] is None: + headers.append(("Host", environ["HTTP_HOST"])) + else: + headers.append(("Host", opts["host"])) + + headers.extend(opts["headers"].items()) + remote_path = path + + if opts["remove_prefix"]: + remote_path = remote_path[len(prefix) :].lstrip("/") + remote_path = f"{target.path.rstrip('/')}/{remote_path}" + + content_length = environ.get("CONTENT_LENGTH") + chunked = False + + if content_length not in ("", None): + headers.append(("Content-Length", content_length)) # type: ignore + elif content_length is not None: + headers.append(("Transfer-Encoding", "chunked")) + chunked = True + + try: + if target.scheme == "http": + con = client.HTTPConnection( + host, target.port or 80, timeout=self.timeout + ) + elif target.scheme == "https": + con = client.HTTPSConnection( + host, + target.port or 443, + timeout=self.timeout, + context=opts["ssl_context"], + ) + else: + raise RuntimeError( + "Target scheme must be 'http' or 'https', got" + f" {target.scheme!r}." + ) + + con.connect() + remote_url = url_quote(remote_path) + querystring = environ["QUERY_STRING"] + + if querystring: + remote_url = f"{remote_url}?{querystring}" + + con.putrequest(environ["REQUEST_METHOD"], remote_url, skip_host=True) + + for k, v in headers: + if k.lower() == "connection": + v = "close" + + con.putheader(k, v) + + con.endheaders() + stream = get_input_stream(environ) + + while True: + data = stream.read(self.chunk_size) + + if not data: + break + + if chunked: + con.send(b"%x\r\n%s\r\n" % (len(data), data)) + else: + con.send(data) + + resp = con.getresponse() + except OSError: + from ..exceptions import BadGateway + + return BadGateway()(environ, start_response) + + start_response( + f"{resp.status} {resp.reason}", + [ + (k.title(), v) + for k, v in resp.getheaders() + if not is_hop_by_hop_header(k) + ], + ) + + def read() -> t.Iterator[bytes]: + while True: + try: + data = resp.read(self.chunk_size) + except OSError: + break + + if not data: + break + + yield data + + return read() + + return application + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + path = environ["PATH_INFO"] + app = self.app + + for prefix, opts in self.targets.items(): + if path.startswith(prefix): + app = self.proxy_to(opts, path, prefix) + break + + return app(environ, start_response) diff --git a/venv/Lib/site-packages/werkzeug/middleware/lint.py b/venv/Lib/site-packages/werkzeug/middleware/lint.py new file mode 100644 index 0000000..fcf3b41 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/lint.py @@ -0,0 +1,420 @@ +""" +WSGI Protocol Linter +==================== + +This module provides a middleware that performs sanity checks on the +behavior of the WSGI server and application. It checks that the +:pep:`3333` WSGI spec is properly implemented. It also warns on some +common HTTP errors such as non-empty responses for 304 status codes. + +.. autoclass:: LintMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import typing as t +from types import TracebackType +from urllib.parse import urlparse +from warnings import warn + +from ..datastructures import Headers +from ..http import is_entity_header +from ..wsgi import FileWrapper + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class WSGIWarning(Warning): + """Warning class for WSGI warnings.""" + + +class HTTPWarning(Warning): + """Warning class for HTTP warnings.""" + + +def check_type(context: str, obj: object, need: t.Type = str) -> None: + if type(obj) is not need: + warn( + f"{context!r} requires {need.__name__!r}, got {type(obj).__name__!r}.", + WSGIWarning, + stacklevel=3, + ) + + +class InputStream: + def __init__(self, stream: t.IO[bytes]) -> None: + self._stream = stream + + def read(self, *args: t.Any) -> bytes: + if len(args) == 0: + warn( + "WSGI does not guarantee an EOF marker on the input stream, thus making" + " calls to 'wsgi.input.read()' unsafe. Conforming servers may never" + " return from this call.", + WSGIWarning, + stacklevel=2, + ) + elif len(args) != 1: + warn( + "Too many parameters passed to 'wsgi.input.read()'.", + WSGIWarning, + stacklevel=2, + ) + return self._stream.read(*args) + + def readline(self, *args: t.Any) -> bytes: + if len(args) == 0: + warn( + "Calls to 'wsgi.input.readline()' without arguments are unsafe. Use" + " 'wsgi.input.read()' instead.", + WSGIWarning, + stacklevel=2, + ) + elif len(args) == 1: + warn( + "'wsgi.input.readline()' was called with a size hint. WSGI does not" + " support this, although it's available on all major servers.", + WSGIWarning, + stacklevel=2, + ) + else: + raise TypeError("Too many arguments passed to 'wsgi.input.readline()'.") + return self._stream.readline(*args) + + def __iter__(self) -> t.Iterator[bytes]: + try: + return iter(self._stream) + except TypeError: + warn("'wsgi.input' is not iterable.", WSGIWarning, stacklevel=2) + return iter(()) + + def close(self) -> None: + warn("The application closed the input stream!", WSGIWarning, stacklevel=2) + self._stream.close() + + +class ErrorStream: + def __init__(self, stream: t.IO[str]) -> None: + self._stream = stream + + def write(self, s: str) -> None: + check_type("wsgi.error.write()", s, str) + self._stream.write(s) + + def flush(self) -> None: + self._stream.flush() + + def writelines(self, seq: t.Iterable[str]) -> None: + for line in seq: + self.write(line) + + def close(self) -> None: + warn("The application closed the error stream!", WSGIWarning, stacklevel=2) + self._stream.close() + + +class GuardedWrite: + def __init__(self, write: t.Callable[[bytes], object], chunks: t.List[int]) -> None: + self._write = write + self._chunks = chunks + + def __call__(self, s: bytes) -> None: + check_type("write()", s, bytes) + self._write(s) + self._chunks.append(len(s)) + + +class GuardedIterator: + def __init__( + self, + iterator: t.Iterable[bytes], + headers_set: t.Tuple[int, Headers], + chunks: t.List[int], + ) -> None: + self._iterator = iterator + self._next = iter(iterator).__next__ + self.closed = False + self.headers_set = headers_set + self.chunks = chunks + + def __iter__(self) -> "GuardedIterator": + return self + + def __next__(self) -> bytes: + if self.closed: + warn("Iterated over closed 'app_iter'.", WSGIWarning, stacklevel=2) + + rv = self._next() + + if not self.headers_set: + warn( + "The application returned before it started the response.", + WSGIWarning, + stacklevel=2, + ) + + check_type("application iterator items", rv, bytes) + self.chunks.append(len(rv)) + return rv + + def close(self) -> None: + self.closed = True + + if hasattr(self._iterator, "close"): + self._iterator.close() + + if self.headers_set: + status_code, headers = self.headers_set + bytes_sent = sum(self.chunks) + content_length = headers.get("content-length", type=int) + + if status_code == 304: + for key, _value in headers: + key = key.lower() + if key not in ("expires", "content-location") and is_entity_header( + key + ): + warn( + f"Entity header {key!r} found in 304 response.", HTTPWarning + ) + if bytes_sent: + warn("304 responses must not have a body.", HTTPWarning) + elif 100 <= status_code < 200 or status_code == 204: + if content_length != 0: + warn( + f"{status_code} responses must have an empty content length.", + HTTPWarning, + ) + if bytes_sent: + warn(f"{status_code} responses must not have a body.", HTTPWarning) + elif content_length is not None and content_length != bytes_sent: + warn( + "Content-Length and the number of bytes sent to the" + " client do not match.", + WSGIWarning, + ) + + def __del__(self) -> None: + if not self.closed: + try: + warn( + "Iterator was garbage collected before it was closed.", WSGIWarning + ) + except Exception: + pass + + +class LintMiddleware: + """Warns about common errors in the WSGI and HTTP behavior of the + server and wrapped application. Some of the issues it checks are: + + - invalid status codes + - non-bytes sent to the WSGI server + - strings returned from the WSGI application + - non-empty conditional responses + - unquoted etags + - relative URLs in the Location header + - unsafe calls to wsgi.input + - unclosed iterators + + Error information is emitted using the :mod:`warnings` module. + + :param app: The WSGI application to wrap. + + .. code-block:: python + + from werkzeug.middleware.lint import LintMiddleware + app = LintMiddleware(app) + """ + + def __init__(self, app: "WSGIApplication") -> None: + self.app = app + + def check_environ(self, environ: "WSGIEnvironment") -> None: + if type(environ) is not dict: + warn( + "WSGI environment is not a standard Python dict.", + WSGIWarning, + stacklevel=4, + ) + for key in ( + "REQUEST_METHOD", + "SERVER_NAME", + "SERVER_PORT", + "wsgi.version", + "wsgi.input", + "wsgi.errors", + "wsgi.multithread", + "wsgi.multiprocess", + "wsgi.run_once", + ): + if key not in environ: + warn( + f"Required environment key {key!r} not found", + WSGIWarning, + stacklevel=3, + ) + if environ["wsgi.version"] != (1, 0): + warn("Environ is not a WSGI 1.0 environ.", WSGIWarning, stacklevel=3) + + script_name = environ.get("SCRIPT_NAME", "") + path_info = environ.get("PATH_INFO", "") + + if script_name and script_name[0] != "/": + warn( + f"'SCRIPT_NAME' does not start with a slash: {script_name!r}", + WSGIWarning, + stacklevel=3, + ) + + if path_info and path_info[0] != "/": + warn( + f"'PATH_INFO' does not start with a slash: {path_info!r}", + WSGIWarning, + stacklevel=3, + ) + + def check_start_response( + self, + status: str, + headers: t.List[t.Tuple[str, str]], + exc_info: t.Optional[ + t.Tuple[t.Type[BaseException], BaseException, TracebackType] + ], + ) -> t.Tuple[int, Headers]: + check_type("status", status, str) + status_code_str = status.split(None, 1)[0] + + if len(status_code_str) != 3 or not status_code_str.isdecimal(): + warn("Status code must be three digits.", WSGIWarning, stacklevel=3) + + if len(status) < 4 or status[3] != " ": + warn( + f"Invalid value for status {status!r}. Valid status strings are three" + " digits, a space and a status explanation.", + WSGIWarning, + stacklevel=3, + ) + + status_code = int(status_code_str) + + if status_code < 100: + warn("Status code < 100 detected.", WSGIWarning, stacklevel=3) + + if type(headers) is not list: + warn("Header list is not a list.", WSGIWarning, stacklevel=3) + + for item in headers: + if type(item) is not tuple or len(item) != 2: + warn("Header items must be 2-item tuples.", WSGIWarning, stacklevel=3) + name, value = item + if type(name) is not str or type(value) is not str: + warn( + "Header keys and values must be strings.", WSGIWarning, stacklevel=3 + ) + if name.lower() == "status": + warn( + "The status header is not supported due to" + " conflicts with the CGI spec.", + WSGIWarning, + stacklevel=3, + ) + + if exc_info is not None and not isinstance(exc_info, tuple): + warn("Invalid value for exc_info.", WSGIWarning, stacklevel=3) + + headers = Headers(headers) + self.check_headers(headers) + + return status_code, headers + + def check_headers(self, headers: Headers) -> None: + etag = headers.get("etag") + + if etag is not None: + if etag.startswith(("W/", "w/")): + if etag.startswith("w/"): + warn( + "Weak etag indicator should be upper case.", + HTTPWarning, + stacklevel=4, + ) + + etag = etag[2:] + + if not (etag[:1] == etag[-1:] == '"'): + warn("Unquoted etag emitted.", HTTPWarning, stacklevel=4) + + location = headers.get("location") + + if location is not None: + if not urlparse(location).netloc: + warn( + "Absolute URLs required for location header.", + HTTPWarning, + stacklevel=4, + ) + + def check_iterator(self, app_iter: t.Iterable[bytes]) -> None: + if isinstance(app_iter, bytes): + warn( + "The application returned a bytestring. The response will send one" + " character at a time to the client, which will kill performance." + " Return a list or iterable instead.", + WSGIWarning, + stacklevel=3, + ) + + def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Iterable[bytes]: + if len(args) != 2: + warn("A WSGI app takes two arguments.", WSGIWarning, stacklevel=2) + + if kwargs: + warn( + "A WSGI app does not take keyword arguments.", WSGIWarning, stacklevel=2 + ) + + environ: "WSGIEnvironment" = args[0] + start_response: "StartResponse" = args[1] + + self.check_environ(environ) + environ["wsgi.input"] = InputStream(environ["wsgi.input"]) + environ["wsgi.errors"] = ErrorStream(environ["wsgi.errors"]) + + # Hook our own file wrapper in so that applications will always + # iterate to the end and we can check the content length. + environ["wsgi.file_wrapper"] = FileWrapper + + headers_set: t.List[t.Any] = [] + chunks: t.List[int] = [] + + def checking_start_response( + *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[bytes], None]: + if len(args) not in {2, 3}: + warn( + f"Invalid number of arguments: {len(args)}, expected 2 or 3.", + WSGIWarning, + stacklevel=2, + ) + + if kwargs: + warn("'start_response' does not take keyword arguments.", WSGIWarning) + + status: str = args[0] + headers: t.List[t.Tuple[str, str]] = args[1] + exc_info: t.Optional[ + t.Tuple[t.Type[BaseException], BaseException, TracebackType] + ] = (args[2] if len(args) == 3 else None) + + headers_set[:] = self.check_start_response(status, headers, exc_info) + return GuardedWrite(start_response(status, headers, exc_info), chunks) + + app_iter = self.app(environ, t.cast("StartResponse", checking_start_response)) + self.check_iterator(app_iter) + return GuardedIterator( + app_iter, t.cast(t.Tuple[int, Headers], headers_set), chunks + ) diff --git a/venv/Lib/site-packages/werkzeug/middleware/profiler.py b/venv/Lib/site-packages/werkzeug/middleware/profiler.py new file mode 100644 index 0000000..f91e33b --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/profiler.py @@ -0,0 +1,139 @@ +""" +Application Profiler +==================== + +This module provides a middleware that profiles each request with the +:mod:`cProfile` module. This can help identify bottlenecks in your code +that may be slowing down your application. + +.. autoclass:: ProfilerMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import os.path +import sys +import time +import typing as t +from pstats import Stats + +try: + from cProfile import Profile +except ImportError: + from profile import Profile # type: ignore + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class ProfilerMiddleware: + """Wrap a WSGI application and profile the execution of each + request. Responses are buffered so that timings are more exact. + + If ``stream`` is given, :class:`pstats.Stats` are written to it + after each request. If ``profile_dir`` is given, :mod:`cProfile` + data files are saved to that directory, one file per request. + + The filename can be customized by passing ``filename_format``. If + it is a string, it will be formatted using :meth:`str.format` with + the following fields available: + + - ``{method}`` - The request method; GET, POST, etc. + - ``{path}`` - The request path or 'root' should one not exist. + - ``{elapsed}`` - The elapsed time of the request. + - ``{time}`` - The time of the request. + + If it is a callable, it will be called with the WSGI ``environ`` + dict and should return a filename. + + :param app: The WSGI application to wrap. + :param stream: Write stats to this stream. Disable with ``None``. + :param sort_by: A tuple of columns to sort stats by. See + :meth:`pstats.Stats.sort_stats`. + :param restrictions: A tuple of restrictions to filter stats by. See + :meth:`pstats.Stats.print_stats`. + :param profile_dir: Save profile data files to this directory. + :param filename_format: Format string for profile data file names, + or a callable returning a name. See explanation above. + + .. code-block:: python + + from werkzeug.middleware.profiler import ProfilerMiddleware + app = ProfilerMiddleware(app) + + .. versionchanged:: 0.15 + Stats are written even if ``profile_dir`` is given, and can be + disable by passing ``stream=None``. + + .. versionadded:: 0.15 + Added ``filename_format``. + + .. versionadded:: 0.9 + Added ``restrictions`` and ``profile_dir``. + """ + + def __init__( + self, + app: "WSGIApplication", + stream: t.IO[str] = sys.stdout, + sort_by: t.Iterable[str] = ("time", "calls"), + restrictions: t.Iterable[t.Union[str, int, float]] = (), + profile_dir: t.Optional[str] = None, + filename_format: str = "{method}.{path}.{elapsed:.0f}ms.{time:.0f}.prof", + ) -> None: + self._app = app + self._stream = stream + self._sort_by = sort_by + self._restrictions = restrictions + self._profile_dir = profile_dir + self._filename_format = filename_format + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + response_body: t.List[bytes] = [] + + def catching_start_response(status, headers, exc_info=None): # type: ignore + start_response(status, headers, exc_info) + return response_body.append + + def runapp() -> None: + app_iter = self._app( + environ, t.cast("StartResponse", catching_start_response) + ) + response_body.extend(app_iter) + + if hasattr(app_iter, "close"): + app_iter.close() + + profile = Profile() + start = time.time() + profile.runcall(runapp) + body = b"".join(response_body) + elapsed = time.time() - start + + if self._profile_dir is not None: + if callable(self._filename_format): + filename = self._filename_format(environ) + else: + filename = self._filename_format.format( + method=environ["REQUEST_METHOD"], + path=environ["PATH_INFO"].strip("/").replace("/", ".") or "root", + elapsed=elapsed * 1000.0, + time=time.time(), + ) + filename = os.path.join(self._profile_dir, filename) + profile.dump_stats(filename) + + if self._stream is not None: + stats = Stats(profile, stream=self._stream) + stats.sort_stats(*self._sort_by) + print("-" * 80, file=self._stream) + path_info = environ.get("PATH_INFO", "") + print(f"PATH: {path_info!r}", file=self._stream) + stats.print_stats(*self._restrictions) + print(f"{'-' * 80}\n", file=self._stream) + + return [body] diff --git a/venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py b/venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py new file mode 100644 index 0000000..4cef7cc --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py @@ -0,0 +1,187 @@ +""" +X-Forwarded-For Proxy Fix +========================= + +This module provides a middleware that adjusts the WSGI environ based on +``X-Forwarded-`` headers that proxies in front of an application may +set. + +When an application is running behind a proxy server, WSGI may see the +request as coming from that server rather than the real client. Proxies +set various headers to track where the request actually came from. + +This middleware should only be used if the application is actually +behind such a proxy, and should be configured with the number of proxies +that are chained in front of it. Not all proxies set all the headers. +Since incoming headers can be faked, you must set how many proxies are +setting each header so the middleware knows what to trust. + +.. autoclass:: ProxyFix + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import typing as t + +from ..http import parse_list_header + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class ProxyFix: + """Adjust the WSGI environ based on ``X-Forwarded-`` that proxies in + front of the application may set. + + - ``X-Forwarded-For`` sets ``REMOTE_ADDR``. + - ``X-Forwarded-Proto`` sets ``wsgi.url_scheme``. + - ``X-Forwarded-Host`` sets ``HTTP_HOST``, ``SERVER_NAME``, and + ``SERVER_PORT``. + - ``X-Forwarded-Port`` sets ``HTTP_HOST`` and ``SERVER_PORT``. + - ``X-Forwarded-Prefix`` sets ``SCRIPT_NAME``. + + You must tell the middleware how many proxies set each header so it + knows what values to trust. It is a security issue to trust values + that came from the client rather than a proxy. + + The original values of the headers are stored in the WSGI + environ as ``werkzeug.proxy_fix.orig``, a dict. + + :param app: The WSGI application to wrap. + :param x_for: Number of values to trust for ``X-Forwarded-For``. + :param x_proto: Number of values to trust for ``X-Forwarded-Proto``. + :param x_host: Number of values to trust for ``X-Forwarded-Host``. + :param x_port: Number of values to trust for ``X-Forwarded-Port``. + :param x_prefix: Number of values to trust for + ``X-Forwarded-Prefix``. + + .. code-block:: python + + from werkzeug.middleware.proxy_fix import ProxyFix + # App is behind one proxy that sets the -For and -Host headers. + app = ProxyFix(app, x_for=1, x_host=1) + + .. versionchanged:: 1.0 + Deprecated code has been removed: + + * The ``num_proxies`` argument and attribute. + * The ``get_remote_addr`` method. + * The environ keys ``orig_remote_addr``, + ``orig_wsgi_url_scheme``, and ``orig_http_host``. + + .. versionchanged:: 0.15 + All headers support multiple values. The ``num_proxies`` + argument is deprecated. Each header is configured with a + separate number of trusted proxies. + + .. versionchanged:: 0.15 + Original WSGI environ values are stored in the + ``werkzeug.proxy_fix.orig`` dict. ``orig_remote_addr``, + ``orig_wsgi_url_scheme``, and ``orig_http_host`` are deprecated + and will be removed in 1.0. + + .. versionchanged:: 0.15 + Support ``X-Forwarded-Port`` and ``X-Forwarded-Prefix``. + + .. versionchanged:: 0.15 + ``X-Forwarded-Host`` and ``X-Forwarded-Port`` modify + ``SERVER_NAME`` and ``SERVER_PORT``. + """ + + def __init__( + self, + app: "WSGIApplication", + x_for: int = 1, + x_proto: int = 1, + x_host: int = 0, + x_port: int = 0, + x_prefix: int = 0, + ) -> None: + self.app = app + self.x_for = x_for + self.x_proto = x_proto + self.x_host = x_host + self.x_port = x_port + self.x_prefix = x_prefix + + def _get_real_value(self, trusted: int, value: t.Optional[str]) -> t.Optional[str]: + """Get the real value from a list header based on the configured + number of trusted proxies. + + :param trusted: Number of values to trust in the header. + :param value: Comma separated list header value to parse. + :return: The real value, or ``None`` if there are fewer values + than the number of trusted proxies. + + .. versionchanged:: 1.0 + Renamed from ``_get_trusted_comma``. + + .. versionadded:: 0.15 + """ + if not (trusted and value): + return None + values = parse_list_header(value) + if len(values) >= trusted: + return values[-trusted] + return None + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + """Modify the WSGI environ based on the various ``Forwarded`` + headers before calling the wrapped application. Store the + original environ values in ``werkzeug.proxy_fix.orig_{key}``. + """ + environ_get = environ.get + orig_remote_addr = environ_get("REMOTE_ADDR") + orig_wsgi_url_scheme = environ_get("wsgi.url_scheme") + orig_http_host = environ_get("HTTP_HOST") + environ.update( + { + "werkzeug.proxy_fix.orig": { + "REMOTE_ADDR": orig_remote_addr, + "wsgi.url_scheme": orig_wsgi_url_scheme, + "HTTP_HOST": orig_http_host, + "SERVER_NAME": environ_get("SERVER_NAME"), + "SERVER_PORT": environ_get("SERVER_PORT"), + "SCRIPT_NAME": environ_get("SCRIPT_NAME"), + } + } + ) + + x_for = self._get_real_value(self.x_for, environ_get("HTTP_X_FORWARDED_FOR")) + if x_for: + environ["REMOTE_ADDR"] = x_for + + x_proto = self._get_real_value( + self.x_proto, environ_get("HTTP_X_FORWARDED_PROTO") + ) + if x_proto: + environ["wsgi.url_scheme"] = x_proto + + x_host = self._get_real_value(self.x_host, environ_get("HTTP_X_FORWARDED_HOST")) + if x_host: + environ["HTTP_HOST"] = environ["SERVER_NAME"] = x_host + # "]" to check for IPv6 address without port + if ":" in x_host and not x_host.endswith("]"): + environ["SERVER_NAME"], environ["SERVER_PORT"] = x_host.rsplit(":", 1) + + x_port = self._get_real_value(self.x_port, environ_get("HTTP_X_FORWARDED_PORT")) + if x_port: + host = environ.get("HTTP_HOST") + if host: + # "]" to check for IPv6 address without port + if ":" in host and not host.endswith("]"): + host = host.rsplit(":", 1)[0] + environ["HTTP_HOST"] = f"{host}:{x_port}" + environ["SERVER_PORT"] = x_port + + x_prefix = self._get_real_value( + self.x_prefix, environ_get("HTTP_X_FORWARDED_PREFIX") + ) + if x_prefix: + environ["SCRIPT_NAME"] = x_prefix + + return self.app(environ, start_response) diff --git a/venv/Lib/site-packages/werkzeug/middleware/shared_data.py b/venv/Lib/site-packages/werkzeug/middleware/shared_data.py new file mode 100644 index 0000000..2ec396c --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/middleware/shared_data.py @@ -0,0 +1,280 @@ +""" +Serve Shared Static Files +========================= + +.. autoclass:: SharedDataMiddleware + :members: is_allowed + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import mimetypes +import os +import pkgutil +import posixpath +import typing as t +from datetime import datetime +from datetime import timezone +from io import BytesIO +from time import time +from zlib import adler32 + +from ..http import http_date +from ..http import is_resource_modified +from ..security import safe_join +from ..utils import get_content_type +from ..wsgi import get_path_info +from ..wsgi import wrap_file + +_TOpener = t.Callable[[], t.Tuple[t.IO[bytes], datetime, int]] +_TLoader = t.Callable[[t.Optional[str]], t.Tuple[t.Optional[str], t.Optional[_TOpener]]] + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class SharedDataMiddleware: + + """A WSGI middleware which provides static content for development + environments or simple server setups. Its usage is quite simple:: + + import os + from werkzeug.middleware.shared_data import SharedDataMiddleware + + app = SharedDataMiddleware(app, { + '/shared': os.path.join(os.path.dirname(__file__), 'shared') + }) + + The contents of the folder ``./shared`` will now be available on + ``http://example.com/shared/``. This is pretty useful during development + because a standalone media server is not required. Files can also be + mounted on the root folder and still continue to use the application because + the shared data middleware forwards all unhandled requests to the + application, even if the requests are below one of the shared folders. + + If `pkg_resources` is available you can also tell the middleware to serve + files from package data:: + + app = SharedDataMiddleware(app, { + '/static': ('myapplication', 'static') + }) + + This will then serve the ``static`` folder in the `myapplication` + Python package. + + The optional `disallow` parameter can be a list of :func:`~fnmatch.fnmatch` + rules for files that are not accessible from the web. If `cache` is set to + `False` no caching headers are sent. + + Currently the middleware does not support non-ASCII filenames. If the + encoding on the file system happens to match the encoding of the URI it may + work but this could also be by accident. We strongly suggest using ASCII + only file names for static files. + + The middleware will guess the mimetype using the Python `mimetype` + module. If it's unable to figure out the charset it will fall back + to `fallback_mimetype`. + + :param app: the application to wrap. If you don't want to wrap an + application you can pass it :exc:`NotFound`. + :param exports: a list or dict of exported files and folders. + :param disallow: a list of :func:`~fnmatch.fnmatch` rules. + :param cache: enable or disable caching headers. + :param cache_timeout: the cache timeout in seconds for the headers. + :param fallback_mimetype: The fallback mimetype for unknown files. + + .. versionchanged:: 1.0 + The default ``fallback_mimetype`` is + ``application/octet-stream``. If a filename looks like a text + mimetype, the ``utf-8`` charset is added to it. + + .. versionadded:: 0.6 + Added ``fallback_mimetype``. + + .. versionchanged:: 0.5 + Added ``cache_timeout``. + """ + + def __init__( + self, + app: "WSGIApplication", + exports: t.Union[ + t.Dict[str, t.Union[str, t.Tuple[str, str]]], + t.Iterable[t.Tuple[str, t.Union[str, t.Tuple[str, str]]]], + ], + disallow: None = None, + cache: bool = True, + cache_timeout: int = 60 * 60 * 12, + fallback_mimetype: str = "application/octet-stream", + ) -> None: + self.app = app + self.exports: t.List[t.Tuple[str, _TLoader]] = [] + self.cache = cache + self.cache_timeout = cache_timeout + + if isinstance(exports, dict): + exports = exports.items() + + for key, value in exports: + if isinstance(value, tuple): + loader = self.get_package_loader(*value) + elif isinstance(value, str): + if os.path.isfile(value): + loader = self.get_file_loader(value) + else: + loader = self.get_directory_loader(value) + else: + raise TypeError(f"unknown def {value!r}") + + self.exports.append((key, loader)) + + if disallow is not None: + from fnmatch import fnmatch + + self.is_allowed = lambda x: not fnmatch(x, disallow) + + self.fallback_mimetype = fallback_mimetype + + def is_allowed(self, filename: str) -> bool: + """Subclasses can override this method to disallow the access to + certain files. However by providing `disallow` in the constructor + this method is overwritten. + """ + return True + + def _opener(self, filename: str) -> _TOpener: + return lambda: ( + open(filename, "rb"), + datetime.fromtimestamp(os.path.getmtime(filename), tz=timezone.utc), + int(os.path.getsize(filename)), + ) + + def get_file_loader(self, filename: str) -> _TLoader: + return lambda x: (os.path.basename(filename), self._opener(filename)) + + def get_package_loader(self, package: str, package_path: str) -> _TLoader: + load_time = datetime.now(timezone.utc) + provider = pkgutil.get_loader(package) + reader = provider.get_resource_reader(package) # type: ignore + + def loader( + path: t.Optional[str], + ) -> t.Tuple[t.Optional[str], t.Optional[_TOpener]]: + if path is None: + return None, None + + path = safe_join(package_path, path) + + if path is None: + return None, None + + basename = posixpath.basename(path) + + try: + resource = reader.open_resource(path) + except OSError: + return None, None + + if isinstance(resource, BytesIO): + return ( + basename, + lambda: (resource, load_time, len(resource.getvalue())), + ) + + return ( + basename, + lambda: ( + resource, + datetime.fromtimestamp( + os.path.getmtime(resource.name), tz=timezone.utc + ), + os.path.getsize(resource.name), + ), + ) + + return loader + + def get_directory_loader(self, directory: str) -> _TLoader: + def loader( + path: t.Optional[str], + ) -> t.Tuple[t.Optional[str], t.Optional[_TOpener]]: + if path is not None: + path = safe_join(directory, path) + + if path is None: + return None, None + else: + path = directory + + if os.path.isfile(path): + return os.path.basename(path), self._opener(path) + + return None, None + + return loader + + def generate_etag(self, mtime: datetime, file_size: int, real_filename: str) -> str: + real_filename = os.fsencode(real_filename) + timestamp = mtime.timestamp() + checksum = adler32(real_filename) & 0xFFFFFFFF + return f"wzsdm-{timestamp}-{file_size}-{checksum}" + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + path = get_path_info(environ) + file_loader = None + + for search_path, loader in self.exports: + if search_path == path: + real_filename, file_loader = loader(None) + + if file_loader is not None: + break + + if not search_path.endswith("/"): + search_path += "/" + + if path.startswith(search_path): + real_filename, file_loader = loader(path[len(search_path) :]) + + if file_loader is not None: + break + + if file_loader is None or not self.is_allowed(real_filename): # type: ignore + return self.app(environ, start_response) + + guessed_type = mimetypes.guess_type(real_filename) # type: ignore + mime_type = get_content_type(guessed_type[0] or self.fallback_mimetype, "utf-8") + f, mtime, file_size = file_loader() + + headers = [("Date", http_date())] + + if self.cache: + timeout = self.cache_timeout + etag = self.generate_etag(mtime, file_size, real_filename) # type: ignore + headers += [ + ("Etag", f'"{etag}"'), + ("Cache-Control", f"max-age={timeout}, public"), + ] + + if not is_resource_modified(environ, etag, last_modified=mtime): + f.close() + start_response("304 Not Modified", headers) + return [] + + headers.append(("Expires", http_date(time() + timeout))) + else: + headers.append(("Cache-Control", "public")) + + headers.extend( + ( + ("Content-Type", mime_type), + ("Content-Length", str(file_size)), + ("Last-Modified", http_date(mtime)), + ) + ) + start_response("200 OK", headers) + return wrap_file(environ, f) diff --git a/venv/Lib/site-packages/werkzeug/py.typed b/venv/Lib/site-packages/werkzeug/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/werkzeug/routing/__init__.py b/venv/Lib/site-packages/werkzeug/routing/__init__.py new file mode 100644 index 0000000..84b043f --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/__init__.py @@ -0,0 +1,133 @@ +"""When it comes to combining multiple controller or view functions +(however you want to call them) you need a dispatcher. A simple way +would be applying regular expression tests on the ``PATH_INFO`` and +calling registered callback functions that return the value then. + +This module implements a much more powerful system than simple regular +expression matching because it can also convert values in the URLs and +build URLs. + +Here a simple example that creates a URL map for an application with +two subdomains (www and kb) and some URL rules: + +.. code-block:: python + + m = Map([ + # Static URLs + Rule('/', endpoint='static/index'), + Rule('/about', endpoint='static/about'), + Rule('/help', endpoint='static/help'), + # Knowledge Base + Subdomain('kb', [ + Rule('/', endpoint='kb/index'), + Rule('/browse/', endpoint='kb/browse'), + Rule('/browse//', endpoint='kb/browse'), + Rule('/browse//', endpoint='kb/browse') + ]) + ], default_subdomain='www') + +If the application doesn't use subdomains it's perfectly fine to not set +the default subdomain and not use the `Subdomain` rule factory. The +endpoint in the rules can be anything, for example import paths or +unique identifiers. The WSGI application can use those endpoints to get the +handler for that URL. It doesn't have to be a string at all but it's +recommended. + +Now it's possible to create a URL adapter for one of the subdomains and +build URLs: + +.. code-block:: python + + c = m.bind('example.com') + + c.build("kb/browse", dict(id=42)) + 'http://kb.example.com/browse/42/' + + c.build("kb/browse", dict()) + 'http://kb.example.com/browse/' + + c.build("kb/browse", dict(id=42, page=3)) + 'http://kb.example.com/browse/42/3' + + c.build("static/about") + '/about' + + c.build("static/index", force_external=True) + 'http://www.example.com/' + + c = m.bind('example.com', subdomain='kb') + + c.build("static/about") + 'http://www.example.com/about' + +The first argument to bind is the server name *without* the subdomain. +Per default it will assume that the script is mounted on the root, but +often that's not the case so you can provide the real mount point as +second argument: + +.. code-block:: python + + c = m.bind('example.com', '/applications/example') + +The third argument can be the subdomain, if not given the default +subdomain is used. For more details about binding have a look at the +documentation of the `MapAdapter`. + +And here is how you can match URLs: + +.. code-block:: python + + c = m.bind('example.com') + + c.match("/") + ('static/index', {}) + + c.match("/about") + ('static/about', {}) + + c = m.bind('example.com', '/', 'kb') + + c.match("/") + ('kb/index', {}) + + c.match("/browse/42/23") + ('kb/browse', {'id': 42, 'page': 23}) + +If matching fails you get a ``NotFound`` exception, if the rule thinks +it's a good idea to redirect (for example because the URL was defined +to have a slash at the end but the request was missing that slash) it +will raise a ``RequestRedirect`` exception. Both are subclasses of +``HTTPException`` so you can use those errors as responses in the +application. + +If matching succeeded but the URL rule was incompatible to the given +method (for example there were only rules for ``GET`` and ``HEAD`` but +routing tried to match a ``POST`` request) a ``MethodNotAllowed`` +exception is raised. +""" +from .converters import AnyConverter as AnyConverter +from .converters import BaseConverter as BaseConverter +from .converters import FloatConverter as FloatConverter +from .converters import IntegerConverter as IntegerConverter +from .converters import PathConverter as PathConverter +from .converters import UnicodeConverter as UnicodeConverter +from .converters import UUIDConverter as UUIDConverter +from .converters import ValidationError as ValidationError +from .exceptions import BuildError as BuildError +from .exceptions import NoMatch as NoMatch +from .exceptions import RequestAliasRedirect as RequestAliasRedirect +from .exceptions import RequestPath as RequestPath +from .exceptions import RequestRedirect as RequestRedirect +from .exceptions import RoutingException as RoutingException +from .exceptions import WebsocketMismatch as WebsocketMismatch +from .map import Map as Map +from .map import MapAdapter as MapAdapter +from .matcher import StateMachineMatcher as StateMachineMatcher +from .rules import EndpointPrefix as EndpointPrefix +from .rules import parse_converter_args as parse_converter_args +from .rules import Rule as Rule +from .rules import RuleFactory as RuleFactory +from .rules import RuleTemplate as RuleTemplate +from .rules import RuleTemplateFactory as RuleTemplateFactory +from .rules import Subdomain as Subdomain +from .rules import Submount as Submount diff --git a/venv/Lib/site-packages/werkzeug/routing/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/routing/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6539d6356ca604ebbc3583688292671cc4ea8b4d GIT binary patch literal 4621 zcmbtYZBH9X5;g$>4DW%wC%b*w4>l`eBof_9Xo;3=k`3CxB3>@i9Fg6gY1<>l)06Ht zhFjeay5Do(_Z;r~E0#UhMUz{b|P2z%%{~;~C&tf0pqq@SH!#cn)~ppJzM|yx=b| zUI1S77a1?cw|Yzd660II%l;oa(uUU&%ej`Ht>D_KI1#U5Bvv=?*c#c zA2PlN{K$XA_&)Gs|1skSz+d@aF@6aAwf{Bnql3!IWBGBmQhDE1iHMvCbWd5~G=Wx> zL`g^V`mu}BSfML%M#r%-LK|@!sex$slfXqfv0kmK2kI2B&UIf5Wa3zejAP-ts<*=3 ziBh4EB8+S*UC>pgF1Cb?dL(=x&%J@}$DwE`A=5NIr?rjh^kZp+I!leR7Apy-th0hZ zSBYkGZ|m@FV|(|_FU_WqN$3SwGM^b)rwmr4u9gf=F15v6=^)(oO(y45#(hN+le*^} zb|Wi#I_yI&R<5TKEGc1$pobP?S3rmITq=WyrkGkuCrItxkuY2ty(IOeG9R$ zG-k-ylBE;a%?Z}QiYU|QX#X9S#D-e^2u7htsP+~cf+D%i)R|=4@ooa6By5AX7%O@* z6>XdnEdpakfuv&+gUEF~H_*cNTcPgBD6yh87z}77anf4hZwnt_AqEz(8=hCML&;D* zZN)k`+1L>2x$El0^8`LUu_<a4o5dVQ>H>Aw5igzUwq6S^u+KR2HHOT)hrKPP$+tFWWQOKH_`;e)~|wdzR= zk}fwz8~fZAPFkO;UmDvodSKPnU1LhtUEcDibH0a(Hlpyw|2LVXq_U%4Tro^ZhvDWw ztT6nrDniwkAbn%#B%4+ENOi^Yw%bg*vP*?p*`(?Ox%F@Y+}KsENI?=6xcFSOqXhiY zBGFD*&g5gm+QpU1q@&4ea?JL9~wq{ys=vJ)Ek+P!@>!1!o zKuEEXXvd5M59>l~J5iXZD^J-7q@J+OP((l+q9EDoJ2shT6e2GIPN+igeOC{1OKL>F z7A!!anVFswU4}A6nB!G7Y^<{rDxJjDAo2w|2cUDWj>sR@s=3kXP>9Z+Tr{Y2II2Av zI?xliOBA?T6mC9WU&&mk+I247SX(=3)k`vRuU~ttgdL#X;vuzQMID1YO%kIiA5TaD+fL)ESN^k@4oC>8q>u0jaJSs95t-6|2l(`|<;gt&v)L2-cQ z1qjdrX_D#+Vqt3ZDfr6oK!i9Ghm4GPiA6mN0zv&^KY!5QS4DNL6y@w%?#N_xG8$rw zxm=_OI=s)qEUO}F^Da8kDQ{~S@w_2B$s7nPA>zavgbl7OLgi!>Bau`3}nUbR=y)Ch|*40TRXNu6A$W+#zaFbrz_UYA$vIatuyj zl#@=Z$JtSej@BSrs3frtrD}xe??jC2bi4CpG~#*%K=R>nZ-~%W9AO83P;$AV_Xv83b+X5u0SMYLnF2S8+X^r z%E-mcR&xGhb^}lb&$CpJmOJL F#?&%!psXGfWG-|QYrnsUd&Q4&$nUhbPcI@*3! z?wJ3JjH8g_$7?zptna;~`$q9Jv8#9J?t&M~xnpd_k+g+(pnp2=Ck600f6af;wXmO= zaOfZCTYRrt7PkrIb|T9bMdv7D7rwm95Qe9v1KbkSj-(3|zWCmV?zz|bHDb?z4QJ?C zPNlJ`5fsL3AO%?TkL{y!#P>9PzsU+nJkHSLp~3|U;_?f` z#YCfl2;68~c*7;Fq2DIVC^ci$j8k)ynh9zqshL7^ap@G+&@UZknwlAEa2v0fIcnyq zSwM3!+LNhSq(}T1Qt>C)V#=5$dO2>e6Kj^~^=)eIP;-}>d(_;g<^eSi(fp%g{zRCX z|9tpy8)t_`NbG re^dR=F}Re0oF~VP27WehjYd5^znJ_!yGFk_!D99~nz50Y|M~B~LMES} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/routing/__pycache__/converters.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/routing/__pycache__/converters.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a6bf8ffc8038cb309f72349450bcfc051851f26 GIT binary patch literal 8559 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/routing/__pycache__/map.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/routing/__pycache__/map.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07160e1f2b6f0da5d6ab8564a3f61113af3477c7 GIT binary patch literal 30542 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%0AkkBC* z9=@!mD!H5-!*Rt;bkGXSf#E+fbFZP{}rQGEl{=V}(4dEwda9rUd{ME_YdPfe9 z^hAx(AS^=i+(memT-%Ujg&5^Ziap7X0fxS5%|>3{R6zv z%BSpo#tb0Nak2El&r89kt&Dy8z?=gU5?RB_q~l($B#Phw#BS9k`aApVP%?}<^c zZ*0UC@ilh-405Kf)3t!@()L(p0v5qBnh9tZq-!`^z&pC&;0jLX;5#~KABDTPXIG32 zB2C2U`FZ^R09| zpYi`CTJPqtJ(0Z-jNO$d?KZ-sLUlsS02~T9P?Wq=-wTN4}f-Zt9!=2dYwoWdHyG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/routing/__pycache__/matcher.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/routing/__pycache__/matcher.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42c9dff5bf0847c4ced7fff0594fbe13b44eef68 GIT binary patch literal 4613 zcmb7I-H#kc5%2E#*xA{S+dDh9&jhoCfLN0_d zuCDH?uByK8)M_Ea_cPwvc2z)^{fH$V1y(IZ6Yb|~NP1#C|=Vck2xHE{;6o}XDse$}} zV+`2B592`(!@XqmlGcd^skD+@k4Y4mqlpqh{%@rPuAu z1<)I6v6zK9-UTLo99${)R!wZw-k&ZvwHj-csu6G)v6*z6aZ}^en%J*V=fbdw@8(7? zZT3c;!M0Rs(`=~bS>j300*+0ylW52oCnMQ3i5<3+n=uhKloc^f(zJIQa?jFOuXEOp zo|U^W3SmaaqqIjlV1Yu&NbQ)p8l(kWWI?KKyge{cH}053@8+eMfZVeR<$fW3rM0BV zUv!N+GC^L7BAIleNIQhNgI;R%F#@^C-D|*d@8}cpz5-n zDtjHHpRnLnfVl%n4_&H&8pOVcZV4?7(1pG$p5mvtr9R>WB=r)pbt`H|m)vBF>a<1>*tVd-5?lo}06hKr*`i zEVvK#^MQD1R=@iIGS+7ku`|wipI>D^=}w%?=?ncrCi-HZVApt4b|5$-3gOG(->UDt z2;9ev6Ki7PPQ1*`oK2xGW!^-*%C;`uVl)qQaP5~eC-b`EfI|w#x9Yb@S^zpH+Wb_? z`YC9X`_ULtE-id0OqH2=bzbTuBZIqW53le}KOT?ONLv4E`TBF1uRl*hJo0pvyCfqI(yXIAVN$2K-^* zyo}{2tE^}mZXxjARlW5MN?0D*WcTCe8C)2|!`m{x_)QXn#`dl}?&!A1$dKyXg#o3M z^y0awAQVP=NS;f>dd{ZWZMlU5xM`wi;l{rc50FoBx$NmZixqPofxq^M$RiQx>tJ~i z&2Eyx*bNxH!S}xMf9na8k?&g11Z@4#YC*XaoVdzbxUdqha-HZsQ-$4h&sKY7WP zm-{jq#=Q}_v)Rb~p)wnZ%*%Jx?KJ6ZDpR-$U2OU&uTs>sp7(c{i-ORbaFsV*!;R=W z2ABBAuLsySr8%WYqKK~UJ$8@Z6Zf2ZZr8Js7QVWB25!arLB_j06Z>W99q?a^bvAV- z-YqtI+GQr(4D~NLqd!y0#BZ4Nev3Lvve(6r*+~3|=2ze0`b6eQwiys)YWsD>ZiI^i zXCnT`HU9ly*O7yJ^j%EYLzu*lSUuOu_f86;Vg%IrTq7C}6&t_SlzfVD)Z)%_Mu0&3?l3$o$4$Z`ReUeM|PT!iX z;ai%g-!=Y}z0SA5F_YOZf>Oq%gLLB}xfJr>x4s8_8M{FJ&whcGGC{sqSW~~Bd8=&a zUGSH%vv&%+X6^+3I_IC1ajN8Xr=+)ErW7;@*4d=> z!u^E~=k~Dh5sQpY&n<$HoNO`*=I2K;W?|i5xtTK? zvNa{6kN9(_{is^YOGOk(^?6{L!l2E#?K$gY{!H{v_0fTJ$T?Qak-Z7E+mjFHi>mlhh@ z_l+$Q5QTk zD{u%aDulqV5(Q(YAPZH5sEfVUGCf{y7iTWAwooZ!$ zin?X$&Y;VKSH|=phzFV~7F&H61(cVL2R&05j%sV&r0z002;07`DH`O?UT>UNB9v5j zls0(c%j5OtwJeXBqg`eaeUbJzVJHvR~Uc{@?K3bzgo)V_C15{*V z_=ss$icI)CsQLx!4h^GUCe)gr9Dxey6fc+DrB`U~*;H;bb<5LaCH;d(r(Yw~+K~K$ zT6zf`EBUa`694imf}g?ZpAbu;&Sx+zRD~r&*wck21#I1b{j3GW62=0txBQ8AYSlmf zW^!*Q$v{7iRg1$vN07ZuWS_!ZWSYEwecQx%-Caku3RiABmq)vWKOa7|k5na}!4zt? zDhYVQZ7kLo@H{43>sVn&-|UhkyGFZm_#X(BYAW1{M_l;OwuLD}wbN17XHx3}nyjU* yhaA4&iuYalr8#HeMb`aj{Ub%*;VsI83&p<@E>dNfl9vYdQqW-^{y7bIsrDZ(`9=T$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/routing/__pycache__/rules.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/routing/__pycache__/rules.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e82f067099805c2c356f1b1a18f9a2874be998a GIT binary patch literal 27296 zcmd6QYj7M_c3yW+&tNbBh9C$&MNv(N5-=1wq`2A_O_78sQqnF3u}EmSI|4N`m~H?A z3}%MiJpwU1sJIsNuGU^{9LxmxUo3-@%aA6qnq@Ai| z)<+5>5+ACKu8$SQB%Ve*TgW0lY-ehF*2fFuy5=NS_qxA`lo6y%6ei^DXl>v6WMNX* zUefF_J9}TVv&gr9J5e~`B$2kq9!J{vwy~`j4m$eIA$zZ*uO5D26pqN#!~?zXn8fyl z=|^qdp0xMd2i{8*9(Ru6?+ND#``~+~eaJq1-z->2Nvs~Xb!Q51o^*~aB@b)%k@pPy zG5aXqpOE)YArHS#%hU9daaiNmejNFZ*-s$f40>nT$I-jv+eRUWrz!hMJU!{;(EF2k zK4CwF=cnZP89YC2Pvd!7o=@R<#?Ik6htj9?ee%bg^|_oL4BKVD zT&a~k4-e^iXT4b~`wrt*8n!dP*>rwvAS-hg{YG(d(|4FN({gJ?r(QuGzT(r}R>OCG z4BTPnJzpr-s;Ii!s9$y6hKr=J7s{S%EA;(TH^g z<8|PNW7_%!%}K7N@EyW)f-pa
    BYa-zUQN2}w0C01GkBR4{zosV=Yh)%tQ_f4#N7 z=(t7CN53k?4SC@O+5YFk!7y9dU2d&AbwAEHKA19>O9$yMqox*zN*7R&W|gKanJ9`fjZU|z3!evq7RHEYh_(A+~9wgev(uAEE_)}JMO3LPc7Vb+_kpTT3*2H)$mnVP5WbSyHyH`Mz07Rq5p*ZR)(Zf)lN7*XIt1|i z1;`!#ChH4Ql|9RLYSr~>m|8khvNo#ziWC<>)GMe075ghyR7ITb)&vkBz2P~k zw!AgJ;#emu4YX1BPg+$^s&P=C<02#aP~Nb@*H(4OI;pVaq}6cQac9}NXL-IW)i$j4 zvR_dhDKD4Vm#}_?V<)3=wLA>SZ=envtq=~LwXx#VRe97E0wWj-TMm*-)q1%Wq*Uuc z+G{N>Rqr`=kWy6x1>JE>kh_-wr!^QV7VSm_2$n$q+({;xi;YH2rnrk^Dt4H~jv!#f z8%2;AHjOkef`9U+d<+agpfhvny!>*$W-i^h-~q%d7Z=XtnDC*WCjm3b9hUF(*CPaZ z@r^exES$OX%!k$XBw$YB70j{7x^}6s+eyp15I4mB^$tMwm%{+86;HbOM)`Dm_H?0m zCybmu{n_H3lkCuw#08bhB31WQD-|!yu&#(jco*|0FXa|;xl5{@Fzl@+&N@)n!uh@; zk9>I2daLYK%ZoK9rVF>Ps@$c%M|LkN@gXBcdp$J|j`d<(Wlmx$Y!6?UdE?ECn7fPZ z-<5O$1`A(Y*mx$l;GKLP->^ffBej;(t!&=>4$yBf4>zzcfIoi>7w2s~} z9vHVYQ}gw;j0+~nKi}wR+gOXg2uTZU(r7PVtJc9C$d*(i;7WDtq_lg|DlcKtv`(Vg zlM%<1#ywRc%vE#h%l?Y+tGEuYKJ8mejaJ>x%NXY{#3Y(>?gg1Ia8R;92MLtTCETac zZFic%41;({a>*cqWD)$xejQO+J+!2ukLp?7J&lx{p$g{^uTTu&2dqOI##cac50Q@M zYilWY+(+!Nc1ydL_jTV`GG5f~Ol|3#X#h*W0$?Qotn&(3U()U#`69lzQOX9uegVrr zVur0Twr03ZJYng#P1Mb}ZX0~FrTM0+FPEHi*^wXr89pw%*EXi6bID+D@y3_tUw&<_ zc;&UZTl2GX^S9i6cni*3Ym|NW8N}V=2*TkBYbGNY1Wl&c+{6M?ueO~MvU_B_nsCvq zZs0eoXY><*mU|BAIU`5`k;tI?z?H%~N`!WWFP3K3d1q^$ovK-$r_T?L@{QGMUJKDIzgJ~fd$$PlFJZ0 znle}nwb^v)c98Tb=;TuFCorh-7cauu z)J2l{M!R@I+|>|!l9 z8n#unoif*d$N{o~2|X@JtyPFFcvF6>QMD*c0GRMIm){3Q_yqEe^ywQcPyddSMkx59>%Jl5Z|K#M|sH;;J$jE`AURiBYo9LAaA%=Bc{un``*55Z;v19b4%cMqqkQZONTQp9Ya=I3DF! z@z#^EB-;CX0F#e%%;km#1S{8KmHQC{=~u!Ixztp8nh|y>GSwx#_<4Lil5^TL4VNi> zn8-Jm@%4zKy_iV(8mi6^Fww9R?PRpQnA?qY zNT20j#mHuBHDaM>HQmNrz&jD71=0%NHWk)#xdE1_f<#$CLV>;4bSl*)$Xe=U-ns_S z*SS|F#JR!{^Eb+MDM5tpuWG5Ggb}7zTCR&JvTEh}a;v-?&Uh&6hom9Ya{jzh1~~0h zDS>v@^A^;^nKxo|;5*LP%=DS*Qx@1tvjO$$`ROMy?M}rnMvYA8)RNBp{KVjynGOYl z8MRtIe=c{Pg}_{F=OXItZ;NGjYfo0t!A5#AmlvUU_4QDt40Nlf#EMgE_7#u>C897J zKXF{uFqjLehF{fmk~f}Vb*R!4?&950v)|tulmK}uOXWd zq^76z_C$;l`6z?1J@+yzH53bx!lE+_nO8b(`6dr6n}oU>@JOwtwX5w%Uf87u2UVbOvs7J zzyj03;#vXQRv<~6&9c9uP+2G@ z5l%aQ`MrX#cK`uIP>8e-NYM~85kiIsB^VGj&!C=^OKG#|zJ{!Q#2qILqCRo-cUU{| zO9Se+_eS9VsmS_8)N=1)NY>ARtn)o&Z4Hw3s(DZYaYM%5jkuFt;&wlWdeyM5Bi2jb z?&tZ6se@x8$!0_w?Wn_3M7P$Ge&XGn%P*XR#vR_mgm!2sPq#rT=O7HhO9Ez zH4m0yc%@-aWuSrqMuWccaXwUik&`!#y`e-eG914N78XZ4+@IxOp^WsA{H@Bmg z9dY50Pu+jSVfHTCpzcEhgZ*h&?vJ4Hn`runY+h)5L};98yVLjuyy@3bpew_|VnaLW zYRk}|hxoOJprIr}4JBlFl8k%z%U`3V!hm8$!)A#(H=`a++(q->&*uCHlVPalGR#;(U7~k4K_C# zEw|!8x#@+;?pn?X+FSZ{9ZAYlTpv_GLK#7oxd6rJeAVuk4^-I!!jE(b68nJS74>z7 z-FSW)+|os(Fj1%>gvm{)bHB2d|Yt7l*z%~d>8ETgeJRVbl z+POg@lL{k9tqd43x5TJ((9!{`D5s0*Aws}7gw8=%@j~mxWne3H1gZxQ8!lpImBniq zB5CpJRV@OOpjEueP;$6b)Nc$G>G)4jgEA!O%8(FEcFdxJeZ5nBO_`9OviuyoMyl$! z049)<#Fz4pH-UhL(p8v9X+{2~zD;Ex>QBPGjd#+;z_hCsKT?9a)%N$68wHRxbES8sV^PviDj;GO&i2t0M!}kWpm~5$LqN*+>)svOsBFg0d^<6H#=$gThpp zq+Bp48rxnc8ZK@M8kTyeuf%+gi!Hg@X2?R$M=5ICiBm&l3Aga>`9GCzE9mwHs)?pG zPUr!4yjK1hGOD#Q0k!sMZ-+yCi?Q(|6x?Cd#MOwinC8?($Sd`he6yW2 z!adtVyUFL{ia}5e4${$rfz1)%hZkh3UbL$$8vrgzGss{q@nD;60S!1o%IYxB*kuM3 z7`raJm+a!bE=3VBkYN#@v=fgA>M3?WC}Haf;?`rF$3_${XI=7EFUhfB1t zmZ4V2c7s@>mDnqrzSyjXe}GlWm%66| ziMKc1H_`iodG%h?m3a-!jdE=b`;J(|0;6h!=pEz;Oy6~|5m|>}ZD6v4v7+jiIG=b= zaN4<;Y1jf8#UwMF(A@@7+BA$V<-1!a-Wy+rrF8wcyLBfIj~*=dGr4vX23@riqu7|N zs2=1KRaklYz^BD=H;WwJjLNL6k#~`A>e3XA!eKcFJGs`>REEE*LgtAp#hXCC3zdTF zw%4~L>_L|=feXna7>c}H6MU~S~B!c+u#2VK2KfW zv;$Il*g1%HyPjx=!glG6W)==RN1VsvQM0X{vD;JV%aitr``9ro9JMb9{0N=Fd{1Lk z)AkJd{J8!6K#vskdP<--In+xJwq)U$jaiZ2ow84(KTp^f2g*k?nX&UIb;dr6QkL}K zxP!kXZp{&n&)VluehNN%8T%9H&vW)C@qEHI3Qqwl%<(Dv(@1$beEN+2Sv*aPXmCl` zbosjwW@bhB?z#v;Rj50%bq8Y>S9wSR^ROB~L%`RQ4Y;Og4`M73!JriCACN98E7(L( z;_60u6MI&$O>nOZk}WpdSVa>aNh05h?5fJsuLKK2i#v;9;F4pQIh+Bn=@C$<)$0h|9{~2m%hwAl9Pml-HyOJ*EyC{UhHotJPd~%V;>1 za7wCKHB@Q{TrNV<+p`wS9?T_>hh&JWw8_*PE)=Q=k}DzG9FXCqZ>)`SJX9{&8?92Q z>x?rKk1%(hs>emxB;hLsFtR|r^(??eN?cuBO#0K12`kqym9H$JV?70-k6@jx)4Nma5AwR}4rY06EIY{><6LNU?}VmS~X& zq_c}|xem3H+jjA`F7c-35RDXeur7=w-gcI5bfpSz?Qo~mj*MjJI(rum4vHJ5Duz{0 zgQ{C>O&NYw_ppU!VK2xnS8LoRR$Y}nBgit#%UJ6o2P_M8WLI76z;SJ4lO85bhAoRG zQ`V~lR~lh7MZiy1QG#v_v$K>aMUqf=%2+{^+O-FgcKU68 z-TEYums)i(6#!x(t}~{5LoLUzDCQuW4A@2oz=i0EC>&x` zCLY?NQz-+7WDs!=BfO%;fe5nf)UnY`784CIoHwsK#95GYh}0GpKZQn7J{h#Kb#l}p z=@D`=9Z}0&ToOwt`cbwP!LcZzu5HTh2|7!&DAx4ejb7QjZ`G@i1O!ieZ6bu)fbk$6 zKHu>})&UzQkdPLQsMpVbd0Gqz=dEYAdiOGr4Nk`Bl;aH=ItD6Z@iSuYV65Nb(N{}f zk0N^oD+5uLN#!mmdBb`OG97G3rP7M;H_x9r6YhKG;ou>im-e0oO9E&&F$Lhri(MWR zk%D6OkE{e6DAH~z${!2<&@+`oDtl&EJw?*JGyt{(S4hEH+OnkwR5Rcxwj@M|DF;f$ z!+jXFVxw3Ww@5y5vNC>!OOD#pMMH{~gqQkO=pqnuP`--WlfFcINUAibH=OWd+(;=h z`eCbI0fV@Thh6~4sznDjq0pWlDt`v23@<#mB!HiXkm_M6SNe?nyJ9ov99|Nz4$uZ! zM=b!MI4s27>`sQP<(Td6D`DLjA^e!=W&!R8f&pXf?j!t^L;?bdTX}x^0&!Co!oKZ3 zrk+`WY$62oXy*d@&3YfdMwPwmY(PAWsHGHYw_UuMg_;14Kx~8!mn0MV^KkJAkwyW8 z(o7>-jC&BMe_aY25Xgdh8yi?9`rJ>X*8csQ-l>geFh<9S@u^*+(v8<{%_}FU(o0w8 zLo)1b6^JU50jHZ7$?eU!vIwoY$t>uqe3znyGjstbLK1UDK0ur{MH-`(ybxEWlEHk! zEh804>6*+I&^4&A&IaM*NK6GSR!!)NDN2b$QaW_<+xMlp#!+* zSw+4->p&MmS)^;|>DG0N?o`Bo@C14jN3yEotjhJq0T7hPC9AF^Rv@862PpS3a1k3r zl$XXriAD{pXQ`GYIx^1-LxV69ZGgnk0x~U$J)O7#ArB0c00f@clpb;Ff|z~#)=RJS zax!bCMo){-37`J=p%YSf3G*9W0AQI=eij0SXusA`hb$ryi8Mic;TlKIP{$JlB_McL zwv65@Z%RI)kFi_{p#wgToAV(JN~UZD zZ!m?*FHx#g&ed^!(fSsxd7?!7JW++OkzCTJM5*FZX!nft#;L-uUgn4Te zId*aWmLl3~1NroeJ>FOf{C`p{Z)r z0f-h{aAh#S6iUwoirr9SiTA=DDj9-pX&U`L^W|%ehBz&-^&;R_tlBf^`POt-3t*EU zQ;uYnIEFIl1B2ubkr%1SpTU67ppkCrXzp;z?Rn{HSns2kR1veg6?He;daFWLx|6m0 zddl(2jv3KX<{mU1Ehdttj&NDtCj9fT?MP`;R)QW1Dcw|Fb~i&U42qz50>+j}R;182 zp7f}nJ>t^m9S5Qp4kW>`0Js3oz;dJxX%#5E3U^BoRsn8;KAc z8wFc(1Ljs!Ofu^0rDE}Mt6Z{3XJK`KpJ0Z$J3IXzY3#%!O@yZrwpFeM%%Rd`u zzu{odz3!h@)@<9tRtwA;5J}O=r_Pp3C74H)iHFOf?a-rDmO?IraV-$I*$O09WP-JV zHabv}I>;A$0zf+ho(n}dE~p7Y5gBHWp-PR(DZ8=)*XQt$Dcqg-?hlZKhzG z6X6gx9JLb-Wo#Jtx&ZzqX)G~zaiu6k2kcPUjSs^{f z`KRK(P72{OOPA^{pjOBx^9)Uc)sN~?( z3fjLjx&?UeXb-e+8F$TF%FO`BK9Vi?1-aNFH1cNy{ocUN*ayQGphWN-&c%ScVyrr) zwZ-rh?}Fzq)Od~>hcvsHO=>nl0yBDUpxFE^(4r(IU@p_He($Oc^Llk`(M)^!YteHH#8C*?BoYI}HAD}{4$qecq9 zeSbKCjJHOXC%TLY>`|xS*?>R8)F+IzG1Kvwel$e(RecHJ zj`2YICii>w_MgVwPPwB|Flg0rdIR$b$Fxl))nH8}3iOCdvd%tagNRPVxQ<9WlrbQ^ z*s!Teg%kp~jD_+>+%yCOEZw&pD8eP~yvs>|qS|Dom9giz)CQ%pT@)3!E2_k@2g*@E z!$K!R>6(4%vQ688@>duiY!cAC0+b56Ypirf&73eNd7cUNRLa_~gLXwAR5aQvT~)x?;Mn&tbVEQwbW-;U^k_&WwUH;g zQ`BAI4}g`vRHB+8XX^4{55(O2G7kArS(jt~oSUf1c!ZP>AKi~wS$7-?CqRXs(Z~A+ z9OkQJ(xLKIMt`_jKvZH4kuV=43fc?-+C`bTN3p3H@_jVgQ-C~;OrcbRUf{eUHvKSe zx*L#I(3mLMN~Y@8M(GrrB|S&e&^ke}RE76HT?_BFu#;q4IP8o{8}PP*tfkxpyBItN z2bvFOOZ^-vmr>cjNW2z)T4GFCsc=Z)wgY8C?>}j0fSG+ArT-6UK@OmfnqW^EFe>F# zV~T4HL**4HDzBhHNYmnnwd)xpE?8t<6@0}rxTDc^DLgME6p3;|owLX?NTM$y?EvbC zJp8gkqOmhiOr~ri=8uzj0Lk&I^XT+D1{$Q(uGzkO(^-TrNOg(lQkP&@g7cD07kC+X z))gSUBB#&-i%U>&Y!K7eE9?>dsb3_xatJC31pM%q&X$CxS3^J`*gD+MPIL_K1f{-?_HB3_ zGX2}e`*4m3WkBYH+mRf&*2%{p6@r&Z${d`JDD??vlavzOk&psDx08Cn+2qn=wtwRV zrDntN6(%fD9<{rsfI7AT;;NBWt;~~`G}DTw5zRPIE$T5zk$9?gtSitdsPKz-G7}Zp zeUhZq%Cu2m z7hZ^;RFI7~m*siT2bZY84}W9Y_!J%}xUYgXAbcP7G3^}#NMXD$BD#9hfe#U5kS!A5 zF*>Hm7K!%l>y5@5?9NRgn7DOWwKx~bIx22ZbYJe7g@<*zv-!`)6W-3Ubhp0t9+*Nv zmNely_ps3r;(U;a^LW7sJJV{abJ9u0LjE#F=f2C}k&eS-WFB!f=QsmAF`$jm!>~OO z^Oraah&I#p6jKz3Qu5(1OAEyvMTG9x0G!YeLeh-BitC=7-l1Lfv8A;f`a3sU_Slm}SDs!w^$(=&) z@1w>&tfzjXlRzuq!t*$v{k;laBY+xW;OdB(+ve7oKLJvQ12P~sX77C`DJ$^ zbN2^jsk+_Su|qO%#8n{TmAfklte`=#qA&M)w$FPcXaP)wN*g^3U+RfVsk>K(r*I6C5^iDmsP`!q} zg(ih`C6v|*ypQXx#^S1KLqR`_d;x6dP&h zuP8A@iMG24U6g;J96|=emR^3Yo#jl+f-9Q6`_}-oYx6>XA3`Ibrw{Z_J9XyE=T2>1 z5~|AWSAtV^7T%#Q>+^oT2KWXjT|e z+bx3QYUS%E0{5F}WMmNqV)h{KA(Oo9}fl2$j z`$^Q)zrs>9i^VhYAzqAxZvwoWqFQ1*fvLt}0NyXf!%})+I`^CkPG$ZbR>m3&$>myO z(JPoR1bTyFK~}&)2S9+zc7DharBO%|lEVpeIntHy&ovLRC#!rKBe?ZBzJYWd=V!ix#Wjg#F$EREz`ahmrAgiIv}N8s)=9dx zPU>wPX5bp~W6?US?IhmT`HQ6*hT(;SC;s+nqQF6%KthY7@VUo5v2O#OcpCE$ z*c158+TaGO2O+~xzMtr1i-$Vd)x)cYrJWCMyG6XkhV zzx#baDYJ9LKEO2QDn52^sxyXCN4CbLlqNMFwGS!|g);vQr%f_w`Eisy#`LYdoh-QF z-s0o;N=SR6v-bgU;O5qZeW)|BYOPVg_>6tHGf_NlABj`0BX%5VQ}$zV+MD)Kq&#Uq z9;Zwp_9W6yyldQ@LT{hy?B!jx+lei}Vdv@2KJ@YsZ>Y;zbM9{fJ+HORGv_6 zl0(!sd1gc*G))Km0EI zfiB&DfTFm;vVouAQ1Qy__3ONb?F(0L&R@NW*o#+-*Iu0uQcAORmyyj~V{n`W%N z?`;Hv_OKV+$F7ec8%7GP50|ysxQq?Rj%ORkQ4llkeF1Uo6;Uq4BwqvP0?OiGl8(Kf zw-7fd-N( zD;9bfu@5pAxX(kdUi=9`PBeiM_1TXCH-$Q{3;u2`vb4&=DmVCvn29A;uz|N@sQr)M zWsHj+*!(}ikDR#jJ@U8cSde@!#xQoOgmKT6>A(bv-gAjlPtLf<$;6&zt zY1zb2ps#g1D_2-bfA+9Hf|pu*j4oBhncR8!T6!LCG7Y7o^B?FJ+sQmlXYHZ9GL8!- z1}QoX;J61D^B@C(tEduaY^fC+OG_|T$W#VdzU(HpCoV*8QgCCDYnd;)f0w!X zKqAx?QtD)$lHw?Pxa3@2gNHh4Db#6t{<^PjZsI(_Yd$z!eC1m4^S5Vj zzI3Yyi*51hobXk=a=*_^`v+2sbF;5ry;Vr5%`o>Lu{QE&CGd$fMpF^?7v1F`DR6Ox z3aiYt!eEu}M~ZZytingu@!TIW`Cl>k*9`s*0}6}o-$MX3@e1RAA3 z?bcbN2!%vgAdT<{!C*n&zlGG_2cmdOh-eAwYSiS$@rRSM<|s5b#!UTKV#1h6p4!7( zld%;5tu135Nt*fz6Sq(%sPm1(UYP}N;T@Gn^c2$5Np)D0Buil!H>nyBF6BN#p4aRX z(s=`ma#<8ODSiVqmJff4Bm|?}*S%?Bm!E2twgdv9F_J=M6u+(2Crw;Hi~CidQ}?S< z35qYG{SFn8b$DY&x)9ZDTt!J!0{1Ru2g#-O6S+3U9!1^l88}}FA#s0*rb+sL;lhVC zsX@-tVO!LL_lyO% zISVk!71vstyELQNTn3w0dzg};LYBY}e+g58=Q%{kzgOY!(a7W1kP!OCD%4xXJNjBe z(%=iSYOY~PrQXq=yRza`*67~SbwA_gUe^H6jo{D*OnCN~e|H%-mb@u+MeSG#iq7-# zJ^~;vySkfB7VHoA_^@n;H=@w(@-l{}V1X-qxeYJt#u4GnyA}Y930_c+I5za-A9)km zv%rfTf-u2d6pI)b#;Cw^6|r~>lhAC=(4GiU84!gObck2jb`r>O4!<b`aUOT{CDR%+>G|q|IaV4{EvyqbGxwoeMM^|t z4`hS@PK)tV3mpjZ>QWwL!h2K-PKi04W1#8oKSOTsY> z2uex{9Pu`U?8YG?9f;LfqsT1xsl3S^zRlpP>|sbz|CtE`-AomW&fQ|M757bV%k{wU zMPYj1G!PIRsz_&?2GyJ{r1}Ujz#N06s#t9IG@v##!xwQ26z*fb&$Wsz$i4yovlBJg zRRi{PY*pQY$b<_Kp5v5*+ITq!_9U=MybK>J?6-6h$d`Cu=@K(c3-yW_QWNa(Fs|*S zY#7hPn`21!9`5saJl?@;Gu;rF%zC@y{$v-|2DS7@SbKnT)BXD(tyJV?)>)k-#F3%#glS|GE^E(yN-2WBjyP`T-xLrMw6IpfmM`8q5J1TmT$cf+6+or$ljm~m z_!@nXuR;+t*h>@G2@=1hl|3%>AB_u+gxrjyJr{(VhGGn^YM=v5DVP1 z3@C}HxwRP+M7hY=B?i|R%rUsh;B^MK8T?xYBEtVRVud5SD+JUE+<(Wczt7+@gI%UH zNMBI0^F>Un<`ECo{}nO{5n>ebtNNutF`AednwT&rAYf2(9>K3UnwT81#%A_qN5`KS UKQewedt`iiV#LG@LqbmcKSwqw*#H0l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/routing/converters.py b/venv/Lib/site-packages/werkzeug/routing/converters.py new file mode 100644 index 0000000..bbad29d --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/converters.py @@ -0,0 +1,257 @@ +import re +import typing as t +import uuid + +from ..urls import _fast_url_quote + +if t.TYPE_CHECKING: + from .map import Map + + +class ValidationError(ValueError): + """Validation error. If a rule converter raises this exception the rule + does not match the current URL and the next URL is tried. + """ + + +class BaseConverter: + """Base class for all converters.""" + + regex = "[^/]+" + weight = 100 + part_isolating = True + + def __init__(self, map: "Map", *args: t.Any, **kwargs: t.Any) -> None: + self.map = map + + def to_python(self, value: str) -> t.Any: + return value + + def to_url(self, value: t.Any) -> str: + if isinstance(value, (bytes, bytearray)): + return _fast_url_quote(value) + return _fast_url_quote(str(value).encode(self.map.charset)) + + +class UnicodeConverter(BaseConverter): + """This converter is the default converter and accepts any string but + only one path segment. Thus the string can not include a slash. + + This is the default validator. + + Example:: + + Rule('/pages/'), + Rule('/') + + :param map: the :class:`Map`. + :param minlength: the minimum length of the string. Must be greater + or equal 1. + :param maxlength: the maximum length of the string. + :param length: the exact length of the string. + """ + + part_isolating = True + + def __init__( + self, + map: "Map", + minlength: int = 1, + maxlength: t.Optional[int] = None, + length: t.Optional[int] = None, + ) -> None: + super().__init__(map) + if length is not None: + length_regex = f"{{{int(length)}}}" + else: + if maxlength is None: + maxlength_value = "" + else: + maxlength_value = str(int(maxlength)) + length_regex = f"{{{int(minlength)},{maxlength_value}}}" + self.regex = f"[^/]{length_regex}" + + +class AnyConverter(BaseConverter): + """Matches one of the items provided. Items can either be Python + identifiers or strings:: + + Rule('/') + + :param map: the :class:`Map`. + :param items: this function accepts the possible items as positional + arguments. + + .. versionchanged:: 2.2 + Value is validated when building a URL. + """ + + part_isolating = True + + def __init__(self, map: "Map", *items: str) -> None: + super().__init__(map) + self.items = set(items) + self.regex = f"(?:{'|'.join([re.escape(x) for x in items])})" + + def to_url(self, value: t.Any) -> str: + if value in self.items: + return str(value) + + valid_values = ", ".join(f"'{item}'" for item in sorted(self.items)) + raise ValueError(f"'{value}' is not one of {valid_values}") + + +class PathConverter(BaseConverter): + """Like the default :class:`UnicodeConverter`, but it also matches + slashes. This is useful for wikis and similar applications:: + + Rule('/') + Rule('//edit') + + :param map: the :class:`Map`. + """ + + regex = "[^/].*?" + weight = 200 + part_isolating = False + + +class NumberConverter(BaseConverter): + """Baseclass for `IntegerConverter` and `FloatConverter`. + + :internal: + """ + + weight = 50 + num_convert: t.Callable = int + part_isolating = True + + def __init__( + self, + map: "Map", + fixed_digits: int = 0, + min: t.Optional[int] = None, + max: t.Optional[int] = None, + signed: bool = False, + ) -> None: + if signed: + self.regex = self.signed_regex + super().__init__(map) + self.fixed_digits = fixed_digits + self.min = min + self.max = max + self.signed = signed + + def to_python(self, value: str) -> t.Any: + if self.fixed_digits and len(value) != self.fixed_digits: + raise ValidationError() + value = self.num_convert(value) + if (self.min is not None and value < self.min) or ( + self.max is not None and value > self.max + ): + raise ValidationError() + return value + + def to_url(self, value: t.Any) -> str: + value = str(self.num_convert(value)) + if self.fixed_digits: + value = value.zfill(self.fixed_digits) + return value + + @property + def signed_regex(self) -> str: + return f"-?{self.regex}" + + +class IntegerConverter(NumberConverter): + """This converter only accepts integer values:: + + Rule("/page/") + + By default it only accepts unsigned, positive values. The ``signed`` + parameter will enable signed, negative values. :: + + Rule("/page/") + + :param map: The :class:`Map`. + :param fixed_digits: The number of fixed digits in the URL. If you + set this to ``4`` for example, the rule will only match if the + URL looks like ``/0001/``. The default is variable length. + :param min: The minimal value. + :param max: The maximal value. + :param signed: Allow signed (negative) values. + + .. versionadded:: 0.15 + The ``signed`` parameter. + """ + + regex = r"\d+" + part_isolating = True + + +class FloatConverter(NumberConverter): + """This converter only accepts floating point values:: + + Rule("/probability/") + + By default it only accepts unsigned, positive values. The ``signed`` + parameter will enable signed, negative values. :: + + Rule("/offset/") + + :param map: The :class:`Map`. + :param min: The minimal value. + :param max: The maximal value. + :param signed: Allow signed (negative) values. + + .. versionadded:: 0.15 + The ``signed`` parameter. + """ + + regex = r"\d+\.\d+" + num_convert = float + part_isolating = True + + def __init__( + self, + map: "Map", + min: t.Optional[float] = None, + max: t.Optional[float] = None, + signed: bool = False, + ) -> None: + super().__init__(map, min=min, max=max, signed=signed) # type: ignore + + +class UUIDConverter(BaseConverter): + """This converter only accepts UUID strings:: + + Rule('/object/') + + .. versionadded:: 0.10 + + :param map: the :class:`Map`. + """ + + regex = ( + r"[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-" + r"[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}" + ) + part_isolating = True + + def to_python(self, value: str) -> uuid.UUID: + return uuid.UUID(value) + + def to_url(self, value: uuid.UUID) -> str: + return str(value) + + +#: the default converter mapping for the map. +DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] = { + "default": UnicodeConverter, + "string": UnicodeConverter, + "any": AnyConverter, + "path": PathConverter, + "int": IntegerConverter, + "float": FloatConverter, + "uuid": UUIDConverter, +} diff --git a/venv/Lib/site-packages/werkzeug/routing/exceptions.py b/venv/Lib/site-packages/werkzeug/routing/exceptions.py new file mode 100644 index 0000000..7cbe6e9 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/exceptions.py @@ -0,0 +1,146 @@ +import difflib +import typing as t + +from ..exceptions import BadRequest +from ..exceptions import HTTPException +from ..utils import cached_property +from ..utils import redirect + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIEnvironment + from .map import MapAdapter + from .rules import Rule # noqa: F401 + from ..wrappers.request import Request + from ..wrappers.response import Response + + +class RoutingException(Exception): + """Special exceptions that require the application to redirect, notifying + about missing urls, etc. + + :internal: + """ + + +class RequestRedirect(HTTPException, RoutingException): + """Raise if the map requests a redirect. This is for example the case if + `strict_slashes` are activated and an url that requires a trailing slash. + + The attribute `new_url` contains the absolute destination url. + """ + + code = 308 + + def __init__(self, new_url: str) -> None: + super().__init__(new_url) + self.new_url = new_url + + def get_response( + self, + environ: t.Optional[t.Union["WSGIEnvironment", "Request"]] = None, + scope: t.Optional[dict] = None, + ) -> "Response": + return redirect(self.new_url, self.code) + + +class RequestPath(RoutingException): + """Internal exception.""" + + __slots__ = ("path_info",) + + def __init__(self, path_info: str) -> None: + super().__init__() + self.path_info = path_info + + +class RequestAliasRedirect(RoutingException): # noqa: B903 + """This rule is an alias and wants to redirect to the canonical URL.""" + + def __init__(self, matched_values: t.Mapping[str, t.Any], endpoint: str) -> None: + super().__init__() + self.matched_values = matched_values + self.endpoint = endpoint + + +class BuildError(RoutingException, LookupError): + """Raised if the build system cannot find a URL for an endpoint with the + values provided. + """ + + def __init__( + self, + endpoint: str, + values: t.Mapping[str, t.Any], + method: t.Optional[str], + adapter: t.Optional["MapAdapter"] = None, + ) -> None: + super().__init__(endpoint, values, method) + self.endpoint = endpoint + self.values = values + self.method = method + self.adapter = adapter + + @cached_property + def suggested(self) -> t.Optional["Rule"]: + return self.closest_rule(self.adapter) + + def closest_rule(self, adapter: t.Optional["MapAdapter"]) -> t.Optional["Rule"]: + def _score_rule(rule: "Rule") -> float: + return sum( + [ + 0.98 + * difflib.SequenceMatcher( + None, rule.endpoint, self.endpoint + ).ratio(), + 0.01 * bool(set(self.values or ()).issubset(rule.arguments)), + 0.01 * bool(rule.methods and self.method in rule.methods), + ] + ) + + if adapter and adapter.map._rules: + return max(adapter.map._rules, key=_score_rule) + + return None + + def __str__(self) -> str: + message = [f"Could not build url for endpoint {self.endpoint!r}"] + if self.method: + message.append(f" ({self.method!r})") + if self.values: + message.append(f" with values {sorted(self.values)!r}") + message.append(".") + if self.suggested: + if self.endpoint == self.suggested.endpoint: + if ( + self.method + and self.suggested.methods is not None + and self.method not in self.suggested.methods + ): + message.append( + " Did you mean to use methods" + f" {sorted(self.suggested.methods)!r}?" + ) + missing_values = self.suggested.arguments.union( + set(self.suggested.defaults or ()) + ) - set(self.values.keys()) + if missing_values: + message.append( + f" Did you forget to specify values {sorted(missing_values)!r}?" + ) + else: + message.append(f" Did you mean {self.suggested.endpoint!r} instead?") + return "".join(message) + + +class WebsocketMismatch(BadRequest): + """The only matched rule is either a WebSocket and the request is + HTTP, or the rule is HTTP and the request is a WebSocket. + """ + + +class NoMatch(Exception): + __slots__ = ("have_match_for", "websocket_mismatch") + + def __init__(self, have_match_for: t.Set[str], websocket_mismatch: bool) -> None: + self.have_match_for = have_match_for + self.websocket_mismatch = websocket_mismatch diff --git a/venv/Lib/site-packages/werkzeug/routing/map.py b/venv/Lib/site-packages/werkzeug/routing/map.py new file mode 100644 index 0000000..daf94b6 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/map.py @@ -0,0 +1,944 @@ +import posixpath +import typing as t +import warnings +from pprint import pformat +from threading import Lock + +from .._internal import _encode_idna +from .._internal import _get_environ +from .._internal import _to_str +from .._internal import _wsgi_decoding_dance +from ..datastructures import ImmutableDict +from ..datastructures import MultiDict +from ..exceptions import BadHost +from ..exceptions import HTTPException +from ..exceptions import MethodNotAllowed +from ..exceptions import NotFound +from ..urls import url_encode +from ..urls import url_join +from ..urls import url_quote +from ..wsgi import get_host +from .converters import DEFAULT_CONVERTERS +from .exceptions import BuildError +from .exceptions import NoMatch +from .exceptions import RequestAliasRedirect +from .exceptions import RequestPath +from .exceptions import RequestRedirect +from .exceptions import WebsocketMismatch +from .matcher import StateMachineMatcher +from .rules import _simple_rule_re +from .rules import Rule + +if t.TYPE_CHECKING: + import typing_extensions as te + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + from .converters import BaseConverter + from .rules import RuleFactory + from ..wrappers.request import Request + + +class Map: + """The map class stores all the URL rules and some configuration + parameters. Some of the configuration values are only stored on the + `Map` instance since those affect all rules, others are just defaults + and can be overridden for each rule. Note that you have to specify all + arguments besides the `rules` as keyword arguments! + + :param rules: sequence of url rules for this map. + :param default_subdomain: The default subdomain for rules without a + subdomain defined. + :param charset: charset of the url. defaults to ``"utf-8"`` + :param strict_slashes: If a rule ends with a slash but the matched + URL does not, redirect to the URL with a trailing slash. + :param merge_slashes: Merge consecutive slashes when matching or + building URLs. Matches will redirect to the normalized URL. + Slashes in variable parts are not merged. + :param redirect_defaults: This will redirect to the default rule if it + wasn't visited that way. This helps creating + unique URLs. + :param converters: A dict of converters that adds additional converters + to the list of converters. If you redefine one + converter this will override the original one. + :param sort_parameters: If set to `True` the url parameters are sorted. + See `url_encode` for more details. + :param sort_key: The sort key function for `url_encode`. + :param encoding_errors: the error method to use for decoding + :param host_matching: if set to `True` it enables the host matching + feature and disables the subdomain one. If + enabled the `host` parameter to rules is used + instead of the `subdomain` one. + + .. versionchanged:: 1.0 + If ``url_scheme`` is ``ws`` or ``wss``, only WebSocket rules + will match. + + .. versionchanged:: 1.0 + Added ``merge_slashes``. + + .. versionchanged:: 0.7 + Added ``encoding_errors`` and ``host_matching``. + + .. versionchanged:: 0.5 + Added ``sort_parameters`` and ``sort_key``. + """ + + #: A dict of default converters to be used. + default_converters = ImmutableDict(DEFAULT_CONVERTERS) + + #: The type of lock to use when updating. + #: + #: .. versionadded:: 1.0 + lock_class = Lock + + def __init__( + self, + rules: t.Optional[t.Iterable["RuleFactory"]] = None, + default_subdomain: str = "", + charset: str = "utf-8", + strict_slashes: bool = True, + merge_slashes: bool = True, + redirect_defaults: bool = True, + converters: t.Optional[t.Mapping[str, t.Type["BaseConverter"]]] = None, + sort_parameters: bool = False, + sort_key: t.Optional[t.Callable[[t.Any], t.Any]] = None, + encoding_errors: str = "replace", + host_matching: bool = False, + ) -> None: + self._matcher = StateMachineMatcher(merge_slashes) + self._rules_by_endpoint: t.Dict[str, t.List[Rule]] = {} + self._remap = True + self._remap_lock = self.lock_class() + + self.default_subdomain = default_subdomain + self.charset = charset + self.encoding_errors = encoding_errors + self.strict_slashes = strict_slashes + self.merge_slashes = merge_slashes + self.redirect_defaults = redirect_defaults + self.host_matching = host_matching + + self.converters = self.default_converters.copy() + if converters: + self.converters.update(converters) + + self.sort_parameters = sort_parameters + self.sort_key = sort_key + + for rulefactory in rules or (): + self.add(rulefactory) + + def is_endpoint_expecting(self, endpoint: str, *arguments: str) -> bool: + """Iterate over all rules and check if the endpoint expects + the arguments provided. This is for example useful if you have + some URLs that expect a language code and others that do not and + you want to wrap the builder a bit so that the current language + code is automatically added if not provided but endpoints expect + it. + + :param endpoint: the endpoint to check. + :param arguments: this function accepts one or more arguments + as positional arguments. Each one of them is + checked. + """ + self.update() + arguments = set(arguments) + for rule in self._rules_by_endpoint[endpoint]: + if arguments.issubset(rule.arguments): + return True + return False + + @property + def _rules(self) -> t.List[Rule]: + return [rule for rules in self._rules_by_endpoint.values() for rule in rules] + + def iter_rules(self, endpoint: t.Optional[str] = None) -> t.Iterator[Rule]: + """Iterate over all rules or the rules of an endpoint. + + :param endpoint: if provided only the rules for that endpoint + are returned. + :return: an iterator + """ + self.update() + if endpoint is not None: + return iter(self._rules_by_endpoint[endpoint]) + return iter(self._rules) + + def add(self, rulefactory: "RuleFactory") -> None: + """Add a new rule or factory to the map and bind it. Requires that the + rule is not bound to another map. + + :param rulefactory: a :class:`Rule` or :class:`RuleFactory` + """ + for rule in rulefactory.get_rules(self): + rule.bind(self) + if not rule.build_only: + self._matcher.add(rule) + self._rules_by_endpoint.setdefault(rule.endpoint, []).append(rule) + self._remap = True + + def bind( + self, + server_name: str, + script_name: t.Optional[str] = None, + subdomain: t.Optional[str] = None, + url_scheme: str = "http", + default_method: str = "GET", + path_info: t.Optional[str] = None, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + ) -> "MapAdapter": + """Return a new :class:`MapAdapter` with the details specified to the + call. Note that `script_name` will default to ``'/'`` if not further + specified or `None`. The `server_name` at least is a requirement + because the HTTP RFC requires absolute URLs for redirects and so all + redirect exceptions raised by Werkzeug will contain the full canonical + URL. + + If no path_info is passed to :meth:`match` it will use the default path + info passed to bind. While this doesn't really make sense for + manual bind calls, it's useful if you bind a map to a WSGI + environment which already contains the path info. + + `subdomain` will default to the `default_subdomain` for this map if + no defined. If there is no `default_subdomain` you cannot use the + subdomain feature. + + .. versionchanged:: 1.0 + If ``url_scheme`` is ``ws`` or ``wss``, only WebSocket rules + will match. + + .. versionchanged:: 0.15 + ``path_info`` defaults to ``'/'`` if ``None``. + + .. versionchanged:: 0.8 + ``query_args`` can be a string. + + .. versionchanged:: 0.7 + Added ``query_args``. + """ + server_name = server_name.lower() + if self.host_matching: + if subdomain is not None: + raise RuntimeError("host matching enabled and a subdomain was provided") + elif subdomain is None: + subdomain = self.default_subdomain + if script_name is None: + script_name = "/" + if path_info is None: + path_info = "/" + + try: + server_name = _encode_idna(server_name) # type: ignore + except UnicodeError as e: + raise BadHost() from e + + return MapAdapter( + self, + server_name, + script_name, + subdomain, + url_scheme, + path_info, + default_method, + query_args, + ) + + def bind_to_environ( + self, + environ: t.Union["WSGIEnvironment", "Request"], + server_name: t.Optional[str] = None, + subdomain: t.Optional[str] = None, + ) -> "MapAdapter": + """Like :meth:`bind` but you can pass it an WSGI environment and it + will fetch the information from that dictionary. Note that because of + limitations in the protocol there is no way to get the current + subdomain and real `server_name` from the environment. If you don't + provide it, Werkzeug will use `SERVER_NAME` and `SERVER_PORT` (or + `HTTP_HOST` if provided) as used `server_name` with disabled subdomain + feature. + + If `subdomain` is `None` but an environment and a server name is + provided it will calculate the current subdomain automatically. + Example: `server_name` is ``'example.com'`` and the `SERVER_NAME` + in the wsgi `environ` is ``'staging.dev.example.com'`` the calculated + subdomain will be ``'staging.dev'``. + + If the object passed as environ has an environ attribute, the value of + this attribute is used instead. This allows you to pass request + objects. Additionally `PATH_INFO` added as a default of the + :class:`MapAdapter` so that you don't have to pass the path info to + the match method. + + .. versionchanged:: 1.0.0 + If the passed server name specifies port 443, it will match + if the incoming scheme is ``https`` without a port. + + .. versionchanged:: 1.0.0 + A warning is shown when the passed server name does not + match the incoming WSGI server name. + + .. versionchanged:: 0.8 + This will no longer raise a ValueError when an unexpected server + name was passed. + + .. versionchanged:: 0.5 + previously this method accepted a bogus `calculate_subdomain` + parameter that did not have any effect. It was removed because + of that. + + :param environ: a WSGI environment. + :param server_name: an optional server name hint (see above). + :param subdomain: optionally the current subdomain (see above). + """ + env = _get_environ(environ) + wsgi_server_name = get_host(env).lower() + scheme = env["wsgi.url_scheme"] + upgrade = any( + v.strip() == "upgrade" + for v in env.get("HTTP_CONNECTION", "").lower().split(",") + ) + + if upgrade and env.get("HTTP_UPGRADE", "").lower() == "websocket": + scheme = "wss" if scheme == "https" else "ws" + + if server_name is None: + server_name = wsgi_server_name + else: + server_name = server_name.lower() + + # strip standard port to match get_host() + if scheme in {"http", "ws"} and server_name.endswith(":80"): + server_name = server_name[:-3] + elif scheme in {"https", "wss"} and server_name.endswith(":443"): + server_name = server_name[:-4] + + if subdomain is None and not self.host_matching: + cur_server_name = wsgi_server_name.split(".") + real_server_name = server_name.split(".") + offset = -len(real_server_name) + + if cur_server_name[offset:] != real_server_name: + # This can happen even with valid configs if the server was + # accessed directly by IP address under some situations. + # Instead of raising an exception like in Werkzeug 0.7 or + # earlier we go by an invalid subdomain which will result + # in a 404 error on matching. + warnings.warn( + f"Current server name {wsgi_server_name!r} doesn't match configured" + f" server name {server_name!r}", + stacklevel=2, + ) + subdomain = "" + else: + subdomain = ".".join(filter(None, cur_server_name[:offset])) + + def _get_wsgi_string(name: str) -> t.Optional[str]: + val = env.get(name) + if val is not None: + return _wsgi_decoding_dance(val, self.charset) + return None + + script_name = _get_wsgi_string("SCRIPT_NAME") + path_info = _get_wsgi_string("PATH_INFO") + query_args = _get_wsgi_string("QUERY_STRING") + return Map.bind( + self, + server_name, + script_name, + subdomain, + scheme, + env["REQUEST_METHOD"], + path_info, + query_args=query_args, + ) + + def update(self) -> None: + """Called before matching and building to keep the compiled rules + in the correct order after things changed. + """ + if not self._remap: + return + + with self._remap_lock: + if not self._remap: + return + + self._matcher.update() + for rules in self._rules_by_endpoint.values(): + rules.sort(key=lambda x: x.build_compare_key()) + self._remap = False + + def __repr__(self) -> str: + rules = self.iter_rules() + return f"{type(self).__name__}({pformat(list(rules))})" + + +class MapAdapter: + + """Returned by :meth:`Map.bind` or :meth:`Map.bind_to_environ` and does + the URL matching and building based on runtime information. + """ + + def __init__( + self, + map: Map, + server_name: str, + script_name: str, + subdomain: t.Optional[str], + url_scheme: str, + path_info: str, + default_method: str, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + ): + self.map = map + self.server_name = _to_str(server_name) + script_name = _to_str(script_name) + if not script_name.endswith("/"): + script_name += "/" + self.script_name = script_name + self.subdomain = _to_str(subdomain) + self.url_scheme = _to_str(url_scheme) + self.path_info = _to_str(path_info) + self.default_method = _to_str(default_method) + self.query_args = query_args + self.websocket = self.url_scheme in {"ws", "wss"} + + def dispatch( + self, + view_func: t.Callable[[str, t.Mapping[str, t.Any]], "WSGIApplication"], + path_info: t.Optional[str] = None, + method: t.Optional[str] = None, + catch_http_exceptions: bool = False, + ) -> "WSGIApplication": + """Does the complete dispatching process. `view_func` is called with + the endpoint and a dict with the values for the view. It should + look up the view function, call it, and return a response object + or WSGI application. http exceptions are not caught by default + so that applications can display nicer error messages by just + catching them by hand. If you want to stick with the default + error messages you can pass it ``catch_http_exceptions=True`` and + it will catch the http exceptions. + + Here a small example for the dispatch usage:: + + from werkzeug.wrappers import Request, Response + from werkzeug.wsgi import responder + from werkzeug.routing import Map, Rule + + def on_index(request): + return Response('Hello from the index') + + url_map = Map([Rule('/', endpoint='index')]) + views = {'index': on_index} + + @responder + def application(environ, start_response): + request = Request(environ) + urls = url_map.bind_to_environ(environ) + return urls.dispatch(lambda e, v: views[e](request, **v), + catch_http_exceptions=True) + + Keep in mind that this method might return exception objects, too, so + use :class:`Response.force_type` to get a response object. + + :param view_func: a function that is called with the endpoint as + first argument and the value dict as second. Has + to dispatch to the actual view function with this + information. (see above) + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + :param catch_http_exceptions: set to `True` to catch any of the + werkzeug :class:`HTTPException`\\s. + """ + try: + try: + endpoint, args = self.match(path_info, method) + except RequestRedirect as e: + return e + return view_func(endpoint, args) + except HTTPException as e: + if catch_http_exceptions: + return e + raise + + @t.overload + def match( # type: ignore + self, + path_info: t.Optional[str] = None, + method: t.Optional[str] = None, + return_rule: "te.Literal[False]" = False, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + websocket: t.Optional[bool] = None, + ) -> t.Tuple[str, t.Mapping[str, t.Any]]: + ... + + @t.overload + def match( + self, + path_info: t.Optional[str] = None, + method: t.Optional[str] = None, + return_rule: "te.Literal[True]" = True, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + websocket: t.Optional[bool] = None, + ) -> t.Tuple[Rule, t.Mapping[str, t.Any]]: + ... + + def match( + self, + path_info: t.Optional[str] = None, + method: t.Optional[str] = None, + return_rule: bool = False, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + websocket: t.Optional[bool] = None, + ) -> t.Tuple[t.Union[str, Rule], t.Mapping[str, t.Any]]: + """The usage is simple: you just pass the match method the current + path info as well as the method (which defaults to `GET`). The + following things can then happen: + + - you receive a `NotFound` exception that indicates that no URL is + matching. A `NotFound` exception is also a WSGI application you + can call to get a default page not found page (happens to be the + same object as `werkzeug.exceptions.NotFound`) + + - you receive a `MethodNotAllowed` exception that indicates that there + is a match for this URL but not for the current request method. + This is useful for RESTful applications. + + - you receive a `RequestRedirect` exception with a `new_url` + attribute. This exception is used to notify you about a request + Werkzeug requests from your WSGI application. This is for example the + case if you request ``/foo`` although the correct URL is ``/foo/`` + You can use the `RequestRedirect` instance as response-like object + similar to all other subclasses of `HTTPException`. + + - you receive a ``WebsocketMismatch`` exception if the only + match is a WebSocket rule but the bind is an HTTP request, or + if the match is an HTTP rule but the bind is a WebSocket + request. + + - you get a tuple in the form ``(endpoint, arguments)`` if there is + a match (unless `return_rule` is True, in which case you get a tuple + in the form ``(rule, arguments)``) + + If the path info is not passed to the match method the default path + info of the map is used (defaults to the root URL if not defined + explicitly). + + All of the exceptions raised are subclasses of `HTTPException` so they + can be used as WSGI responses. They will all render generic error or + redirect pages. + + Here is a small example for matching: + + >>> m = Map([ + ... Rule('/', endpoint='index'), + ... Rule('/downloads/', endpoint='downloads/index'), + ... Rule('/downloads/', endpoint='downloads/show') + ... ]) + >>> urls = m.bind("example.com", "/") + >>> urls.match("/", "GET") + ('index', {}) + >>> urls.match("/downloads/42") + ('downloads/show', {'id': 42}) + + And here is what happens on redirect and missing URLs: + + >>> urls.match("/downloads") + Traceback (most recent call last): + ... + RequestRedirect: http://example.com/downloads/ + >>> urls.match("/missing") + Traceback (most recent call last): + ... + NotFound: 404 Not Found + + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + :param return_rule: return the rule that matched instead of just the + endpoint (defaults to `False`). + :param query_args: optional query arguments that are used for + automatic redirects as string or dictionary. It's + currently not possible to use the query arguments + for URL matching. + :param websocket: Match WebSocket instead of HTTP requests. A + websocket request has a ``ws`` or ``wss`` + :attr:`url_scheme`. This overrides that detection. + + .. versionadded:: 1.0 + Added ``websocket``. + + .. versionchanged:: 0.8 + ``query_args`` can be a string. + + .. versionadded:: 0.7 + Added ``query_args``. + + .. versionadded:: 0.6 + Added ``return_rule``. + """ + self.map.update() + if path_info is None: + path_info = self.path_info + else: + path_info = _to_str(path_info, self.map.charset) + if query_args is None: + query_args = self.query_args or {} + method = (method or self.default_method).upper() + + if websocket is None: + websocket = self.websocket + + domain_part = self.server_name if self.map.host_matching else self.subdomain + path_part = f"/{path_info.lstrip('/')}" if path_info else "" + + try: + result = self.map._matcher.match(domain_part, path_part, method, websocket) + except RequestPath as e: + raise RequestRedirect( + self.make_redirect_url( + url_quote(e.path_info, self.map.charset, safe="/:|+"), + query_args, + ) + ) from None + except RequestAliasRedirect as e: + raise RequestRedirect( + self.make_alias_redirect_url( + f"{domain_part}|{path_part}", + e.endpoint, + e.matched_values, + method, + query_args, + ) + ) from None + except NoMatch as e: + if e.have_match_for: + raise MethodNotAllowed(valid_methods=list(e.have_match_for)) from None + + if e.websocket_mismatch: + raise WebsocketMismatch() from None + + raise NotFound() from None + else: + rule, rv = result + + if self.map.redirect_defaults: + redirect_url = self.get_default_redirect(rule, method, rv, query_args) + if redirect_url is not None: + raise RequestRedirect(redirect_url) + + if rule.redirect_to is not None: + if isinstance(rule.redirect_to, str): + + def _handle_match(match: t.Match[str]) -> str: + value = rv[match.group(1)] + return rule._converters[match.group(1)].to_url(value) + + redirect_url = _simple_rule_re.sub(_handle_match, rule.redirect_to) + else: + redirect_url = rule.redirect_to(self, **rv) + + if self.subdomain: + netloc = f"{self.subdomain}.{self.server_name}" + else: + netloc = self.server_name + + raise RequestRedirect( + url_join( + f"{self.url_scheme or 'http'}://{netloc}{self.script_name}", + redirect_url, + ) + ) + + if return_rule: + return rule, rv + else: + return rule.endpoint, rv + + def test( + self, path_info: t.Optional[str] = None, method: t.Optional[str] = None + ) -> bool: + """Test if a rule would match. Works like `match` but returns `True` + if the URL matches, or `False` if it does not exist. + + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + """ + try: + self.match(path_info, method) + except RequestRedirect: + pass + except HTTPException: + return False + return True + + def allowed_methods(self, path_info: t.Optional[str] = None) -> t.Iterable[str]: + """Returns the valid methods that match for a given path. + + .. versionadded:: 0.7 + """ + try: + self.match(path_info, method="--") + except MethodNotAllowed as e: + return e.valid_methods # type: ignore + except HTTPException: + pass + return [] + + def get_host(self, domain_part: t.Optional[str]) -> str: + """Figures out the full host name for the given domain part. The + domain part is a subdomain in case host matching is disabled or + a full host name. + """ + if self.map.host_matching: + if domain_part is None: + return self.server_name + return _to_str(domain_part, "ascii") + subdomain = domain_part + if subdomain is None: + subdomain = self.subdomain + else: + subdomain = _to_str(subdomain, "ascii") + + if subdomain: + return f"{subdomain}.{self.server_name}" + else: + return self.server_name + + def get_default_redirect( + self, + rule: Rule, + method: str, + values: t.MutableMapping[str, t.Any], + query_args: t.Union[t.Mapping[str, t.Any], str], + ) -> t.Optional[str]: + """A helper that returns the URL to redirect to if it finds one. + This is used for default redirecting only. + + :internal: + """ + assert self.map.redirect_defaults + for r in self.map._rules_by_endpoint[rule.endpoint]: + # every rule that comes after this one, including ourself + # has a lower priority for the defaults. We order the ones + # with the highest priority up for building. + if r is rule: + break + if r.provides_defaults_for(rule) and r.suitable_for(values, method): + values.update(r.defaults) # type: ignore + domain_part, path = r.build(values) # type: ignore + return self.make_redirect_url(path, query_args, domain_part=domain_part) + return None + + def encode_query_args(self, query_args: t.Union[t.Mapping[str, t.Any], str]) -> str: + if not isinstance(query_args, str): + return url_encode(query_args, self.map.charset) + return query_args + + def make_redirect_url( + self, + path_info: str, + query_args: t.Optional[t.Union[t.Mapping[str, t.Any], str]] = None, + domain_part: t.Optional[str] = None, + ) -> str: + """Creates a redirect URL. + + :internal: + """ + if query_args: + suffix = f"?{self.encode_query_args(query_args)}" + else: + suffix = "" + + scheme = self.url_scheme or "http" + host = self.get_host(domain_part) + path = posixpath.join(self.script_name.strip("/"), path_info.lstrip("/")) + return f"{scheme}://{host}/{path}{suffix}" + + def make_alias_redirect_url( + self, + path: str, + endpoint: str, + values: t.Mapping[str, t.Any], + method: str, + query_args: t.Union[t.Mapping[str, t.Any], str], + ) -> str: + """Internally called to make an alias redirect URL.""" + url = self.build( + endpoint, values, method, append_unknown=False, force_external=True + ) + if query_args: + url += f"?{self.encode_query_args(query_args)}" + assert url != path, "detected invalid alias setting. No canonical URL found" + return url + + def _partial_build( + self, + endpoint: str, + values: t.Mapping[str, t.Any], + method: t.Optional[str], + append_unknown: bool, + ) -> t.Optional[t.Tuple[str, str, bool]]: + """Helper for :meth:`build`. Returns subdomain and path for the + rule that accepts this endpoint, values and method. + + :internal: + """ + # in case the method is none, try with the default method first + if method is None: + rv = self._partial_build( + endpoint, values, self.default_method, append_unknown + ) + if rv is not None: + return rv + + # Default method did not match or a specific method is passed. + # Check all for first match with matching host. If no matching + # host is found, go with first result. + first_match = None + + for rule in self.map._rules_by_endpoint.get(endpoint, ()): + if rule.suitable_for(values, method): + build_rv = rule.build(values, append_unknown) + + if build_rv is not None: + rv = (build_rv[0], build_rv[1], rule.websocket) + if self.map.host_matching: + if rv[0] == self.server_name: + return rv + elif first_match is None: + first_match = rv + else: + return rv + + return first_match + + def build( + self, + endpoint: str, + values: t.Optional[t.Mapping[str, t.Any]] = None, + method: t.Optional[str] = None, + force_external: bool = False, + append_unknown: bool = True, + url_scheme: t.Optional[str] = None, + ) -> str: + """Building URLs works pretty much the other way round. Instead of + `match` you call `build` and pass it the endpoint and a dict of + arguments for the placeholders. + + The `build` function also accepts an argument called `force_external` + which, if you set it to `True` will force external URLs. Per default + external URLs (include the server name) will only be used if the + target URL is on a different subdomain. + + >>> m = Map([ + ... Rule('/', endpoint='index'), + ... Rule('/downloads/', endpoint='downloads/index'), + ... Rule('/downloads/', endpoint='downloads/show') + ... ]) + >>> urls = m.bind("example.com", "/") + >>> urls.build("index", {}) + '/' + >>> urls.build("downloads/show", {'id': 42}) + '/downloads/42' + >>> urls.build("downloads/show", {'id': 42}, force_external=True) + 'http://example.com/downloads/42' + + Because URLs cannot contain non ASCII data you will always get + bytes back. Non ASCII characters are urlencoded with the + charset defined on the map instance. + + Additional values are converted to strings and appended to the URL as + URL querystring parameters: + + >>> urls.build("index", {'q': 'My Searchstring'}) + '/?q=My+Searchstring' + + When processing those additional values, lists are furthermore + interpreted as multiple values (as per + :py:class:`werkzeug.datastructures.MultiDict`): + + >>> urls.build("index", {'q': ['a', 'b', 'c']}) + '/?q=a&q=b&q=c' + + Passing a ``MultiDict`` will also add multiple values: + + >>> urls.build("index", MultiDict((('p', 'z'), ('q', 'a'), ('q', 'b')))) + '/?p=z&q=a&q=b' + + If a rule does not exist when building a `BuildError` exception is + raised. + + The build method accepts an argument called `method` which allows you + to specify the method you want to have an URL built for if you have + different methods for the same endpoint specified. + + :param endpoint: the endpoint of the URL to build. + :param values: the values for the URL to build. Unhandled values are + appended to the URL as query parameters. + :param method: the HTTP method for the rule if there are different + URLs for different methods on the same endpoint. + :param force_external: enforce full canonical external URLs. If the URL + scheme is not provided, this will generate + a protocol-relative URL. + :param append_unknown: unknown parameters are appended to the generated + URL as query string argument. Disable this + if you want the builder to ignore those. + :param url_scheme: Scheme to use in place of the bound + :attr:`url_scheme`. + + .. versionchanged:: 2.0 + Added the ``url_scheme`` parameter. + + .. versionadded:: 0.6 + Added the ``append_unknown`` parameter. + """ + self.map.update() + + if values: + if isinstance(values, MultiDict): + values = { + k: (v[0] if len(v) == 1 else v) + for k, v in dict.items(values) + if len(v) != 0 + } + else: # plain dict + values = {k: v for k, v in values.items() if v is not None} + else: + values = {} + + rv = self._partial_build(endpoint, values, method, append_unknown) + if rv is None: + raise BuildError(endpoint, values, method, self) + + domain_part, path, websocket = rv + host = self.get_host(domain_part) + + if url_scheme is None: + url_scheme = self.url_scheme + + # Always build WebSocket routes with the scheme (browsers + # require full URLs). If bound to a WebSocket, ensure that HTTP + # routes are built with an HTTP scheme. + secure = url_scheme in {"https", "wss"} + + if websocket: + force_external = True + url_scheme = "wss" if secure else "ws" + elif url_scheme: + url_scheme = "https" if secure else "http" + + # shortcut this. + if not force_external and ( + (self.map.host_matching and host == self.server_name) + or (not self.map.host_matching and domain_part == self.subdomain) + ): + return f"{self.script_name.rstrip('/')}/{path.lstrip('/')}" + + scheme = f"{url_scheme}:" if url_scheme else "" + return f"{scheme}//{host}{self.script_name[:-1]}/{path.lstrip('/')}" diff --git a/venv/Lib/site-packages/werkzeug/routing/matcher.py b/venv/Lib/site-packages/werkzeug/routing/matcher.py new file mode 100644 index 0000000..05370c3 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/matcher.py @@ -0,0 +1,192 @@ +import re +import typing as t +from dataclasses import dataclass +from dataclasses import field + +from .converters import ValidationError +from .exceptions import NoMatch +from .exceptions import RequestAliasRedirect +from .exceptions import RequestPath +from .rules import Rule +from .rules import RulePart + + +class SlashRequired(Exception): + pass + + +@dataclass +class State: + """A representation of a rule state. + + This includes the *rules* that correspond to the state and the + possible *static* and *dynamic* transitions to the next state. + """ + + dynamic: t.List[t.Tuple[RulePart, "State"]] = field(default_factory=list) + rules: t.List[Rule] = field(default_factory=list) + static: t.Dict[str, "State"] = field(default_factory=dict) + + +class StateMachineMatcher: + def __init__(self, merge_slashes: bool) -> None: + self._root = State() + self.merge_slashes = merge_slashes + + def add(self, rule: Rule) -> None: + state = self._root + for part in rule._parts: + if part.static: + state.static.setdefault(part.content, State()) + state = state.static[part.content] + else: + for test_part, new_state in state.dynamic: + if test_part == part: + state = new_state + break + else: + new_state = State() + state.dynamic.append((part, new_state)) + state = new_state + state.rules.append(rule) + + def update(self) -> None: + # For every state the dynamic transitions should be sorted by + # the weight of the transition + state = self._root + + def _update_state(state: State) -> None: + state.dynamic.sort(key=lambda entry: entry[0].weight) + for new_state in state.static.values(): + _update_state(new_state) + for _, new_state in state.dynamic: + _update_state(new_state) + + _update_state(state) + + def match( + self, domain: str, path: str, method: str, websocket: bool + ) -> t.Tuple[Rule, t.MutableMapping[str, t.Any]]: + # To match to a rule we need to start at the root state and + # try to follow the transitions until we find a match, or find + # there is no transition to follow. + + have_match_for = set() + websocket_mismatch = False + + def _match( + state: State, parts: t.List[str], values: t.List[str] + ) -> t.Optional[t.Tuple[Rule, t.List[str]]]: + # This function is meant to be called recursively, and will attempt + # to match the head part to the state's transitions. + nonlocal have_match_for, websocket_mismatch + + # The base case is when all parts have been matched via + # transitions. Hence if there is a rule with methods & + # websocket that work return it and the dynamic values + # extracted. + if parts == []: + for rule in state.rules: + if rule.methods is not None and method not in rule.methods: + have_match_for.update(rule.methods) + elif rule.websocket != websocket: + websocket_mismatch = True + else: + return rule, values + + # Test if there is a match with this path with a + # trailing slash, if so raise an exception to report + # that matching is possible with an additional slash + if "" in state.static: + for rule in state.static[""].rules: + if websocket == rule.websocket and ( + rule.methods is None or method in rule.methods + ): + if rule.strict_slashes: + raise SlashRequired() + else: + return rule, values + return None + + part = parts[0] + # To match this part try the static transitions first + if part in state.static: + rv = _match(state.static[part], parts[1:], values) + if rv is not None: + return rv + # No match via the static transitions, so try the dynamic + # ones. + for test_part, new_state in state.dynamic: + target = part + remaining = parts[1:] + # A final part indicates a transition that always + # consumes the remaining parts i.e. transitions to a + # final state. + if test_part.final: + target = "/".join(parts) + remaining = [] + match = re.compile(test_part.content).match(target) + if match is not None: + groups = list(match.groups()) + if test_part.suffixed: + # If a part_isolating=False part has a slash suffix, remove the + # suffix from the match and check for the slash redirect next. + suffix = groups.pop() + if suffix == "/": + remaining = [""] + rv = _match(new_state, remaining, values + groups) + if rv is not None: + return rv + + # If there is no match and the only part left is a + # trailing slash ("") consider rules that aren't + # strict-slashes as these should match if there is a final + # slash part. + if parts == [""]: + for rule in state.rules: + if rule.strict_slashes: + continue + if rule.methods is not None and method not in rule.methods: + have_match_for.update(rule.methods) + elif rule.websocket != websocket: + websocket_mismatch = True + else: + return rule, values + + return None + + try: + rv = _match(self._root, [domain, *path.split("/")], []) + except SlashRequired: + raise RequestPath(f"{path}/") from None + + if self.merge_slashes and rv is None: + # Try to match again, but with slashes merged + path = re.sub("/{2,}?", "/", path) + try: + rv = _match(self._root, [domain, *path.split("/")], []) + except SlashRequired: + raise RequestPath(f"{path}/") from None + if rv is None: + raise NoMatch(have_match_for, websocket_mismatch) + else: + raise RequestPath(f"{path}") + elif rv is not None: + rule, values = rv + + result = {} + for name, value in zip(rule._converters.keys(), values): + try: + value = rule._converters[name].to_python(value) + except ValidationError: + raise NoMatch(have_match_for, websocket_mismatch) from None + result[str(name)] = value + if rule.defaults: + result.update(rule.defaults) + + if rule.alias and rule.map.redirect_defaults: + raise RequestAliasRedirect(result, rule.endpoint) + + return rule, result + + raise NoMatch(have_match_for, websocket_mismatch) diff --git a/venv/Lib/site-packages/werkzeug/routing/rules.py b/venv/Lib/site-packages/werkzeug/routing/rules.py new file mode 100644 index 0000000..7b37890 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/routing/rules.py @@ -0,0 +1,904 @@ +import ast +import re +import typing as t +from dataclasses import dataclass +from string import Template +from types import CodeType + +from .._internal import _to_bytes +from ..urls import url_encode +from ..urls import url_quote +from .converters import ValidationError + +if t.TYPE_CHECKING: + from .converters import BaseConverter + from .map import Map + + +class Weighting(t.NamedTuple): + number_static_weights: int + static_weights: t.List[t.Tuple[int, int]] + number_argument_weights: int + argument_weights: t.List[int] + + +@dataclass +class RulePart: + """A part of a rule. + + Rules can be represented by parts as delimited by `/` with + instances of this class representing those parts. The *content* is + either the raw content if *static* or a regex string to match + against. The *weight* can be used to order parts when matching. + + """ + + content: str + final: bool + static: bool + suffixed: bool + weight: Weighting + + +_part_re = re.compile( + r""" + (?: + (?P\/) # a slash + | + (?P[^<\/]+) # static rule data + | + (?: + < + (?: + (?P[a-zA-Z_][a-zA-Z0-9_]*) # converter name + (?:\((?P.*?)\))? # converter arguments + \: # variable delimiter + )? + (?P[a-zA-Z_][a-zA-Z0-9_]*) # variable name + > + ) + ) + """, + re.VERBOSE, +) + +_simple_rule_re = re.compile(r"<([^>]+)>") +_converter_args_re = re.compile( + r""" + ((?P\w+)\s*=\s*)? + (?P + True|False| + \d+.\d+| + \d+.| + \d+| + [\w\d_.]+| + [urUR]?(?P"[^"]*?"|'[^']*') + )\s*, + """, + re.VERBOSE, +) + + +_PYTHON_CONSTANTS = {"None": None, "True": True, "False": False} + + +def _find(value: str, target: str, pos: int) -> int: + """Find the *target* in *value* after *pos*. + + Returns the *value* length if *target* isn't found. + """ + try: + return value.index(target, pos) + except ValueError: + return len(value) + + +def _pythonize(value: str) -> t.Union[None, bool, int, float, str]: + if value in _PYTHON_CONSTANTS: + return _PYTHON_CONSTANTS[value] + for convert in int, float: + try: + return convert(value) # type: ignore + except ValueError: + pass + if value[:1] == value[-1:] and value[0] in "\"'": + value = value[1:-1] + return str(value) + + +def parse_converter_args(argstr: str) -> t.Tuple[t.Tuple, t.Dict[str, t.Any]]: + argstr += "," + args = [] + kwargs = {} + + for item in _converter_args_re.finditer(argstr): + value = item.group("stringval") + if value is None: + value = item.group("value") + value = _pythonize(value) + if not item.group("name"): + args.append(value) + else: + name = item.group("name") + kwargs[name] = value + + return tuple(args), kwargs + + +class RuleFactory: + """As soon as you have more complex URL setups it's a good idea to use rule + factories to avoid repetitive tasks. Some of them are builtin, others can + be added by subclassing `RuleFactory` and overriding `get_rules`. + """ + + def get_rules(self, map: "Map") -> t.Iterable["Rule"]: + """Subclasses of `RuleFactory` have to override this method and return + an iterable of rules.""" + raise NotImplementedError() + + +class Subdomain(RuleFactory): + """All URLs provided by this factory have the subdomain set to a + specific domain. For example if you want to use the subdomain for + the current language this can be a good setup:: + + url_map = Map([ + Rule('/', endpoint='#select_language'), + Subdomain('', [ + Rule('/', endpoint='index'), + Rule('/about', endpoint='about'), + Rule('/help', endpoint='help') + ]) + ]) + + All the rules except for the ``'#select_language'`` endpoint will now + listen on a two letter long subdomain that holds the language code + for the current request. + """ + + def __init__(self, subdomain: str, rules: t.Iterable[RuleFactory]) -> None: + self.subdomain = subdomain + self.rules = rules + + def get_rules(self, map: "Map") -> t.Iterator["Rule"]: + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.subdomain = self.subdomain + yield rule + + +class Submount(RuleFactory): + """Like `Subdomain` but prefixes the URL rule with a given string:: + + url_map = Map([ + Rule('/', endpoint='index'), + Submount('/blog', [ + Rule('/', endpoint='blog/index'), + Rule('/entry/', endpoint='blog/show') + ]) + ]) + + Now the rule ``'blog/show'`` matches ``/blog/entry/``. + """ + + def __init__(self, path: str, rules: t.Iterable[RuleFactory]) -> None: + self.path = path.rstrip("/") + self.rules = rules + + def get_rules(self, map: "Map") -> t.Iterator["Rule"]: + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.rule = self.path + rule.rule + yield rule + + +class EndpointPrefix(RuleFactory): + """Prefixes all endpoints (which must be strings for this factory) with + another string. This can be useful for sub applications:: + + url_map = Map([ + Rule('/', endpoint='index'), + EndpointPrefix('blog/', [Submount('/blog', [ + Rule('/', endpoint='index'), + Rule('/entry/', endpoint='show') + ])]) + ]) + """ + + def __init__(self, prefix: str, rules: t.Iterable[RuleFactory]) -> None: + self.prefix = prefix + self.rules = rules + + def get_rules(self, map: "Map") -> t.Iterator["Rule"]: + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.endpoint = self.prefix + rule.endpoint + yield rule + + +class RuleTemplate: + """Returns copies of the rules wrapped and expands string templates in + the endpoint, rule, defaults or subdomain sections. + + Here a small example for such a rule template:: + + from werkzeug.routing import Map, Rule, RuleTemplate + + resource = RuleTemplate([ + Rule('/$name/', endpoint='$name.list'), + Rule('/$name/', endpoint='$name.show') + ]) + + url_map = Map([resource(name='user'), resource(name='page')]) + + When a rule template is called the keyword arguments are used to + replace the placeholders in all the string parameters. + """ + + def __init__(self, rules: t.Iterable["Rule"]) -> None: + self.rules = list(rules) + + def __call__(self, *args: t.Any, **kwargs: t.Any) -> "RuleTemplateFactory": + return RuleTemplateFactory(self.rules, dict(*args, **kwargs)) + + +class RuleTemplateFactory(RuleFactory): + """A factory that fills in template variables into rules. Used by + `RuleTemplate` internally. + + :internal: + """ + + def __init__( + self, rules: t.Iterable[RuleFactory], context: t.Dict[str, t.Any] + ) -> None: + self.rules = rules + self.context = context + + def get_rules(self, map: "Map") -> t.Iterator["Rule"]: + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + new_defaults = subdomain = None + if rule.defaults: + new_defaults = {} + for key, value in rule.defaults.items(): + if isinstance(value, str): + value = Template(value).substitute(self.context) + new_defaults[key] = value + if rule.subdomain is not None: + subdomain = Template(rule.subdomain).substitute(self.context) + new_endpoint = rule.endpoint + if isinstance(new_endpoint, str): + new_endpoint = Template(new_endpoint).substitute(self.context) + yield Rule( + Template(rule.rule).substitute(self.context), + new_defaults, + subdomain, + rule.methods, + rule.build_only, + new_endpoint, + rule.strict_slashes, + ) + + +def _prefix_names(src: str) -> ast.stmt: + """ast parse and prefix names with `.` to avoid collision with user vars""" + tree = ast.parse(src).body[0] + if isinstance(tree, ast.Expr): + tree = tree.value # type: ignore + for node in ast.walk(tree): + if isinstance(node, ast.Name): + node.id = f".{node.id}" + return tree + + +_CALL_CONVERTER_CODE_FMT = "self._converters[{elem!r}].to_url()" +_IF_KWARGS_URL_ENCODE_CODE = """\ +if kwargs: + params = self._encode_query_vars(kwargs) + q = "?" if params else "" +else: + q = params = "" +""" +_IF_KWARGS_URL_ENCODE_AST = _prefix_names(_IF_KWARGS_URL_ENCODE_CODE) +_URL_ENCODE_AST_NAMES = (_prefix_names("q"), _prefix_names("params")) + + +class Rule(RuleFactory): + """A Rule represents one URL pattern. There are some options for `Rule` + that change the way it behaves and are passed to the `Rule` constructor. + Note that besides the rule-string all arguments *must* be keyword arguments + in order to not break the application on Werkzeug upgrades. + + `string` + Rule strings basically are just normal URL paths with placeholders in + the format ```` where the converter and the + arguments are optional. If no converter is defined the `default` + converter is used which means `string` in the normal configuration. + + URL rules that end with a slash are branch URLs, others are leaves. + If you have `strict_slashes` enabled (which is the default), all + branch URLs that are matched without a trailing slash will trigger a + redirect to the same URL with the missing slash appended. + + The converters are defined on the `Map`. + + `endpoint` + The endpoint for this rule. This can be anything. A reference to a + function, a string, a number etc. The preferred way is using a string + because the endpoint is used for URL generation. + + `defaults` + An optional dict with defaults for other rules with the same endpoint. + This is a bit tricky but useful if you want to have unique URLs:: + + url_map = Map([ + Rule('/all/', defaults={'page': 1}, endpoint='all_entries'), + Rule('/all/page/', endpoint='all_entries') + ]) + + If a user now visits ``http://example.com/all/page/1`` they will be + redirected to ``http://example.com/all/``. If `redirect_defaults` is + disabled on the `Map` instance this will only affect the URL + generation. + + `subdomain` + The subdomain rule string for this rule. If not specified the rule + only matches for the `default_subdomain` of the map. If the map is + not bound to a subdomain this feature is disabled. + + Can be useful if you want to have user profiles on different subdomains + and all subdomains are forwarded to your application:: + + url_map = Map([ + Rule('/', subdomain='', endpoint='user/homepage'), + Rule('/stats', subdomain='', endpoint='user/stats') + ]) + + `methods` + A sequence of http methods this rule applies to. If not specified, all + methods are allowed. For example this can be useful if you want different + endpoints for `POST` and `GET`. If methods are defined and the path + matches but the method matched against is not in this list or in the + list of another rule for that path the error raised is of the type + `MethodNotAllowed` rather than `NotFound`. If `GET` is present in the + list of methods and `HEAD` is not, `HEAD` is added automatically. + + `strict_slashes` + Override the `Map` setting for `strict_slashes` only for this rule. If + not specified the `Map` setting is used. + + `merge_slashes` + Override :attr:`Map.merge_slashes` for this rule. + + `build_only` + Set this to True and the rule will never match but will create a URL + that can be build. This is useful if you have resources on a subdomain + or folder that are not handled by the WSGI application (like static data) + + `redirect_to` + If given this must be either a string or callable. In case of a + callable it's called with the url adapter that triggered the match and + the values of the URL as keyword arguments and has to return the target + for the redirect, otherwise it has to be a string with placeholders in + rule syntax:: + + def foo_with_slug(adapter, id): + # ask the database for the slug for the old id. this of + # course has nothing to do with werkzeug. + return f'foo/{Foo.get_slug_for_id(id)}' + + url_map = Map([ + Rule('/foo/', endpoint='foo'), + Rule('/some/old/url/', redirect_to='foo/'), + Rule('/other/old/url/', redirect_to=foo_with_slug) + ]) + + When the rule is matched the routing system will raise a + `RequestRedirect` exception with the target for the redirect. + + Keep in mind that the URL will be joined against the URL root of the + script so don't use a leading slash on the target URL unless you + really mean root of that domain. + + `alias` + If enabled this rule serves as an alias for another rule with the same + endpoint and arguments. + + `host` + If provided and the URL map has host matching enabled this can be + used to provide a match rule for the whole host. This also means + that the subdomain feature is disabled. + + `websocket` + If ``True``, this rule is only matches for WebSocket (``ws://``, + ``wss://``) requests. By default, rules will only match for HTTP + requests. + + .. versionchanged:: 2.1 + Percent-encoded newlines (``%0a``), which are decoded by WSGI + servers, are considered when routing instead of terminating the + match early. + + .. versionadded:: 1.0 + Added ``websocket``. + + .. versionadded:: 1.0 + Added ``merge_slashes``. + + .. versionadded:: 0.7 + Added ``alias`` and ``host``. + + .. versionchanged:: 0.6.1 + ``HEAD`` is added to ``methods`` if ``GET`` is present. + """ + + def __init__( + self, + string: str, + defaults: t.Optional[t.Mapping[str, t.Any]] = None, + subdomain: t.Optional[str] = None, + methods: t.Optional[t.Iterable[str]] = None, + build_only: bool = False, + endpoint: t.Optional[str] = None, + strict_slashes: t.Optional[bool] = None, + merge_slashes: t.Optional[bool] = None, + redirect_to: t.Optional[t.Union[str, t.Callable[..., str]]] = None, + alias: bool = False, + host: t.Optional[str] = None, + websocket: bool = False, + ) -> None: + if not string.startswith("/"): + raise ValueError("urls must start with a leading slash") + self.rule = string + self.is_leaf = not string.endswith("/") + self.is_branch = string.endswith("/") + + self.map: "Map" = None # type: ignore + self.strict_slashes = strict_slashes + self.merge_slashes = merge_slashes + self.subdomain = subdomain + self.host = host + self.defaults = defaults + self.build_only = build_only + self.alias = alias + self.websocket = websocket + + if methods is not None: + if isinstance(methods, str): + raise TypeError("'methods' should be a list of strings.") + + methods = {x.upper() for x in methods} + + if "HEAD" not in methods and "GET" in methods: + methods.add("HEAD") + + if websocket and methods - {"GET", "HEAD", "OPTIONS"}: + raise ValueError( + "WebSocket rules can only use 'GET', 'HEAD', and 'OPTIONS' methods." + ) + + self.methods = methods + self.endpoint: str = endpoint # type: ignore + self.redirect_to = redirect_to + + if defaults: + self.arguments = set(map(str, defaults)) + else: + self.arguments = set() + + self._converters: t.Dict[str, "BaseConverter"] = {} + self._trace: t.List[t.Tuple[bool, str]] = [] + self._parts: t.List[RulePart] = [] + + def empty(self) -> "Rule": + """ + Return an unbound copy of this rule. + + This can be useful if want to reuse an already bound URL for another + map. See ``get_empty_kwargs`` to override what keyword arguments are + provided to the new copy. + """ + return type(self)(self.rule, **self.get_empty_kwargs()) + + def get_empty_kwargs(self) -> t.Mapping[str, t.Any]: + """ + Provides kwargs for instantiating empty copy with empty() + + Use this method to provide custom keyword arguments to the subclass of + ``Rule`` when calling ``some_rule.empty()``. Helpful when the subclass + has custom keyword arguments that are needed at instantiation. + + Must return a ``dict`` that will be provided as kwargs to the new + instance of ``Rule``, following the initial ``self.rule`` value which + is always provided as the first, required positional argument. + """ + defaults = None + if self.defaults: + defaults = dict(self.defaults) + return dict( + defaults=defaults, + subdomain=self.subdomain, + methods=self.methods, + build_only=self.build_only, + endpoint=self.endpoint, + strict_slashes=self.strict_slashes, + redirect_to=self.redirect_to, + alias=self.alias, + host=self.host, + ) + + def get_rules(self, map: "Map") -> t.Iterator["Rule"]: + yield self + + def refresh(self) -> None: + """Rebinds and refreshes the URL. Call this if you modified the + rule in place. + + :internal: + """ + self.bind(self.map, rebind=True) + + def bind(self, map: "Map", rebind: bool = False) -> None: + """Bind the url to a map and create a regular expression based on + the information from the rule itself and the defaults from the map. + + :internal: + """ + if self.map is not None and not rebind: + raise RuntimeError(f"url rule {self!r} already bound to map {self.map!r}") + self.map = map + if self.strict_slashes is None: + self.strict_slashes = map.strict_slashes + if self.merge_slashes is None: + self.merge_slashes = map.merge_slashes + if self.subdomain is None: + self.subdomain = map.default_subdomain + self.compile() + + def get_converter( + self, + variable_name: str, + converter_name: str, + args: t.Tuple, + kwargs: t.Mapping[str, t.Any], + ) -> "BaseConverter": + """Looks up the converter for the given parameter. + + .. versionadded:: 0.9 + """ + if converter_name not in self.map.converters: + raise LookupError(f"the converter {converter_name!r} does not exist") + return self.map.converters[converter_name](self.map, *args, **kwargs) + + def _encode_query_vars(self, query_vars: t.Mapping[str, t.Any]) -> str: + return url_encode( + query_vars, + charset=self.map.charset, + sort=self.map.sort_parameters, + key=self.map.sort_key, + ) + + def _parse_rule(self, rule: str) -> t.Iterable[RulePart]: + content = "" + static = True + argument_weights = [] + static_weights: t.List[t.Tuple[int, int]] = [] + final = False + + pos = 0 + while pos < len(rule): + match = _part_re.match(rule, pos) + if match is None: + raise ValueError(f"malformed url rule: {rule!r}") + + data = match.groupdict() + if data["static"] is not None: + static_weights.append((len(static_weights), -len(data["static"]))) + self._trace.append((False, data["static"])) + content += data["static"] if static else re.escape(data["static"]) + + if data["variable"] is not None: + if static: + # Switching content to represent regex, hence the need to escape + content = re.escape(content) + static = False + c_args, c_kwargs = parse_converter_args(data["arguments"] or "") + convobj = self.get_converter( + data["variable"], data["converter"] or "default", c_args, c_kwargs + ) + self._converters[data["variable"]] = convobj + self.arguments.add(data["variable"]) + if not convobj.part_isolating: + final = True + content += f"({convobj.regex})" + argument_weights.append(convobj.weight) + self._trace.append((True, data["variable"])) + + if data["slash"] is not None: + self._trace.append((False, "/")) + if final: + content += "/" + else: + if not static: + content += r"\Z" + weight = Weighting( + -len(static_weights), + static_weights, + -len(argument_weights), + argument_weights, + ) + yield RulePart( + content=content, + final=final, + static=static, + suffixed=False, + weight=weight, + ) + content = "" + static = True + argument_weights = [] + static_weights = [] + final = False + + pos = match.end() + + suffixed = False + if final and content[-1] == "/": + # If a converter is part_isolating=False (matches slashes) and ends with a + # slash, augment the regex to support slash redirects. + suffixed = True + content = content[:-1] + "(? None: + """Compiles the regular expression and stores it.""" + assert self.map is not None, "rule not bound" + + if self.map.host_matching: + domain_rule = self.host or "" + else: + domain_rule = self.subdomain or "" + self._parts = [] + self._trace = [] + self._converters = {} + if domain_rule == "": + self._parts = [ + RulePart( + content="", + final=False, + static=True, + suffixed=False, + weight=Weighting(0, [], 0, []), + ) + ] + else: + self._parts.extend(self._parse_rule(domain_rule)) + self._trace.append((False, "|")) + rule = self.rule + if self.merge_slashes: + rule = re.sub("/{2,}?", "/", self.rule) + self._parts.extend(self._parse_rule(rule)) + + self._build: t.Callable[..., t.Tuple[str, str]] + self._build = self._compile_builder(False).__get__(self, None) + self._build_unknown: t.Callable[..., t.Tuple[str, str]] + self._build_unknown = self._compile_builder(True).__get__(self, None) + + @staticmethod + def _get_func_code(code: CodeType, name: str) -> t.Callable[..., t.Tuple[str, str]]: + globs: t.Dict[str, t.Any] = {} + locs: t.Dict[str, t.Any] = {} + exec(code, globs, locs) + return locs[name] # type: ignore + + def _compile_builder( + self, append_unknown: bool = True + ) -> t.Callable[..., t.Tuple[str, str]]: + defaults = self.defaults or {} + dom_ops: t.List[t.Tuple[bool, str]] = [] + url_ops: t.List[t.Tuple[bool, str]] = [] + + opl = dom_ops + for is_dynamic, data in self._trace: + if data == "|" and opl is dom_ops: + opl = url_ops + continue + # this seems like a silly case to ever come up but: + # if a default is given for a value that appears in the rule, + # resolve it to a constant ahead of time + if is_dynamic and data in defaults: + data = self._converters[data].to_url(defaults[data]) + opl.append((False, data)) + elif not is_dynamic: + opl.append( + (False, url_quote(_to_bytes(data, self.map.charset), safe="/:|+")) + ) + else: + opl.append((True, data)) + + def _convert(elem: str) -> ast.stmt: + ret = _prefix_names(_CALL_CONVERTER_CODE_FMT.format(elem=elem)) + ret.args = [ast.Name(str(elem), ast.Load())] # type: ignore # str for py2 + return ret + + def _parts(ops: t.List[t.Tuple[bool, str]]) -> t.List[ast.AST]: + parts = [ + _convert(elem) if is_dynamic else ast.Str(s=elem) + for is_dynamic, elem in ops + ] + parts = parts or [ast.Str("")] + # constant fold + ret = [parts[0]] + for p in parts[1:]: + if isinstance(p, ast.Str) and isinstance(ret[-1], ast.Str): + ret[-1] = ast.Str(ret[-1].s + p.s) + else: + ret.append(p) + return ret + + dom_parts = _parts(dom_ops) + url_parts = _parts(url_ops) + if not append_unknown: + body = [] + else: + body = [_IF_KWARGS_URL_ENCODE_AST] + url_parts.extend(_URL_ENCODE_AST_NAMES) + + def _join(parts: t.List[ast.AST]) -> ast.AST: + if len(parts) == 1: # shortcut + return parts[0] + return ast.JoinedStr(parts) + + body.append( + ast.Return(ast.Tuple([_join(dom_parts), _join(url_parts)], ast.Load())) + ) + + pargs = [ + elem + for is_dynamic, elem in dom_ops + url_ops + if is_dynamic and elem not in defaults + ] + kargs = [str(k) for k in defaults] + + func_ast: ast.FunctionDef = _prefix_names("def _(): pass") # type: ignore + func_ast.name = f"" + func_ast.args.args.append(ast.arg(".self", None)) + for arg in pargs + kargs: + func_ast.args.args.append(ast.arg(arg, None)) + func_ast.args.kwarg = ast.arg(".kwargs", None) + for _ in kargs: + func_ast.args.defaults.append(ast.Str("")) + func_ast.body = body + + # use `ast.parse` instead of `ast.Module` for better portability + # Python 3.8 changes the signature of `ast.Module` + module = ast.parse("") + module.body = [func_ast] + + # mark everything as on line 1, offset 0 + # less error-prone than `ast.fix_missing_locations` + # bad line numbers cause an assert to fail in debug builds + for node in ast.walk(module): + if "lineno" in node._attributes: + node.lineno = 1 + if "end_lineno" in node._attributes: + node.end_lineno = node.lineno # type: ignore[attr-defined] + if "col_offset" in node._attributes: + node.col_offset = 0 + if "end_col_offset" in node._attributes: + node.end_col_offset = node.col_offset # type: ignore[attr-defined] + + code = compile(module, "", "exec") + return self._get_func_code(code, func_ast.name) + + def build( + self, values: t.Mapping[str, t.Any], append_unknown: bool = True + ) -> t.Optional[t.Tuple[str, str]]: + """Assembles the relative url for that rule and the subdomain. + If building doesn't work for some reasons `None` is returned. + + :internal: + """ + try: + if append_unknown: + return self._build_unknown(**values) + else: + return self._build(**values) + except ValidationError: + return None + + def provides_defaults_for(self, rule: "Rule") -> bool: + """Check if this rule has defaults for a given rule. + + :internal: + """ + return bool( + not self.build_only + and self.defaults + and self.endpoint == rule.endpoint + and self != rule + and self.arguments == rule.arguments + ) + + def suitable_for( + self, values: t.Mapping[str, t.Any], method: t.Optional[str] = None + ) -> bool: + """Check if the dict of values has enough data for url generation. + + :internal: + """ + # if a method was given explicitly and that method is not supported + # by this rule, this rule is not suitable. + if ( + method is not None + and self.methods is not None + and method not in self.methods + ): + return False + + defaults = self.defaults or () + + # all arguments required must be either in the defaults dict or + # the value dictionary otherwise it's not suitable + for key in self.arguments: + if key not in defaults and key not in values: + return False + + # in case defaults are given we ensure that either the value was + # skipped or the value is the same as the default value. + if defaults: + for key, value in defaults.items(): + if key in values and value != values[key]: + return False + + return True + + def build_compare_key(self) -> t.Tuple[int, int, int]: + """The build compare key for sorting. + + :internal: + """ + return (1 if self.alias else 0, -len(self.arguments), -len(self.defaults or ())) + + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and self._trace == other._trace + + __hash__ = None # type: ignore + + def __str__(self) -> str: + return self.rule + + def __repr__(self) -> str: + if self.map is None: + return f"<{type(self).__name__} (unbound)>" + parts = [] + for is_dynamic, data in self._trace: + if is_dynamic: + parts.append(f"<{data}>") + else: + parts.append(data) + parts = "".join(parts).lstrip("|") + methods = f" ({', '.join(self.methods)})" if self.methods is not None else "" + return f"<{type(self).__name__} {parts!r}{methods} -> {self.endpoint}>" diff --git a/venv/Lib/site-packages/werkzeug/sansio/__init__.py b/venv/Lib/site-packages/werkzeug/sansio/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61f0791e94d9f2bb98b47cdb4fa6e6db624ac516 GIT binary patch literal 179 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 XtjOE&Hge%b6cuX(cZB{=|Aqer)mwMM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f029a603bd24962fecf24c015ef8e24147ea33b2 GIT binary patch literal 22897 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/sansio/http.py b/venv/Lib/site-packages/werkzeug/sansio/http.py new file mode 100644 index 0000000..6b22738 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/sansio/http.py @@ -0,0 +1,136 @@ +import re +import typing as t +from datetime import datetime + +from .._internal import _cookie_parse_impl +from .._internal import _dt_as_utc +from .._internal import _to_str +from ..http import generate_etag +from ..http import parse_date +from ..http import parse_etags +from ..http import parse_if_range_header +from ..http import unquote_etag + +_etag_re = re.compile(r'([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)') + + +def is_resource_modified( + http_range: t.Optional[str] = None, + http_if_range: t.Optional[str] = None, + http_if_modified_since: t.Optional[str] = None, + http_if_none_match: t.Optional[str] = None, + http_if_match: t.Optional[str] = None, + etag: t.Optional[str] = None, + data: t.Optional[bytes] = None, + last_modified: t.Optional[t.Union[datetime, str]] = None, + ignore_if_range: bool = True, +) -> bool: + """Convenience method for conditional requests. + :param http_range: Range HTTP header + :param http_if_range: If-Range HTTP header + :param http_if_modified_since: If-Modified-Since HTTP header + :param http_if_none_match: If-None-Match HTTP header + :param http_if_match: If-Match HTTP header + :param etag: the etag for the response for comparison. + :param data: or alternatively the data of the response to automatically + generate an etag using :func:`generate_etag`. + :param last_modified: an optional date of the last modification. + :param ignore_if_range: If `False`, `If-Range` header will be taken into + account. + :return: `True` if the resource was modified, otherwise `False`. + + .. versionadded:: 2.2 + """ + if etag is None and data is not None: + etag = generate_etag(data) + elif data is not None: + raise TypeError("both data and etag given") + + unmodified = False + if isinstance(last_modified, str): + last_modified = parse_date(last_modified) + + # HTTP doesn't use microsecond, remove it to avoid false positive + # comparisons. Mark naive datetimes as UTC. + if last_modified is not None: + last_modified = _dt_as_utc(last_modified.replace(microsecond=0)) + + if_range = None + if not ignore_if_range and http_range is not None: + # https://tools.ietf.org/html/rfc7233#section-3.2 + # A server MUST ignore an If-Range header field received in a request + # that does not contain a Range header field. + if_range = parse_if_range_header(http_if_range) + + if if_range is not None and if_range.date is not None: + modified_since: t.Optional[datetime] = if_range.date + else: + modified_since = parse_date(http_if_modified_since) + + if modified_since and last_modified and last_modified <= modified_since: + unmodified = True + + if etag: + etag, _ = unquote_etag(etag) + etag = t.cast(str, etag) + + if if_range is not None and if_range.etag is not None: + unmodified = parse_etags(if_range.etag).contains(etag) + else: + if_none_match = parse_etags(http_if_none_match) + if if_none_match: + # https://tools.ietf.org/html/rfc7232#section-3.2 + # "A recipient MUST use the weak comparison function when comparing + # entity-tags for If-None-Match" + unmodified = if_none_match.contains_weak(etag) + + # https://tools.ietf.org/html/rfc7232#section-3.1 + # "Origin server MUST use the strong comparison function when + # comparing entity-tags for If-Match" + if_match = parse_etags(http_if_match) + if if_match: + unmodified = not if_match.is_strong(etag) + + return not unmodified + + +def parse_cookie( + cookie: t.Union[bytes, str, None] = "", + charset: str = "utf-8", + errors: str = "replace", + cls: t.Optional[t.Type["ds.MultiDict"]] = None, +) -> "ds.MultiDict[str, str]": + """Parse a cookie from a string. + + The same key can be provided multiple times, the values are stored + in-order. The default :class:`MultiDict` will have the first value + first, and all values can be retrieved with + :meth:`MultiDict.getlist`. + + :param cookie: The cookie header as a string. + :param charset: The charset for the cookie values. + :param errors: The error behavior for the charset decoding. + :param cls: A dict-like class to store the parsed cookies in. + Defaults to :class:`MultiDict`. + + .. versionadded:: 2.2 + """ + # PEP 3333 sends headers through the environ as latin1 decoded + # strings. Encode strings back to bytes for parsing. + if isinstance(cookie, str): + cookie = cookie.encode("latin1", "replace") + + if cls is None: + cls = ds.MultiDict + + def _parse_pairs() -> t.Iterator[t.Tuple[str, str]]: + for key, val in _cookie_parse_impl(cookie): # type: ignore + key_str = _to_str(key, charset, errors, allow_none_charset=True) + val_str = _to_str(val, charset, errors, allow_none_charset=True) + yield key_str, val_str + + return cls(_parse_pairs()) + + +# circular dependencies +from .. import datastructures as ds diff --git a/venv/Lib/site-packages/werkzeug/sansio/multipart.py b/venv/Lib/site-packages/werkzeug/sansio/multipart.py new file mode 100644 index 0000000..2684e5d --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/sansio/multipart.py @@ -0,0 +1,287 @@ +import re +from dataclasses import dataclass +from enum import auto +from enum import Enum +from typing import cast +from typing import List +from typing import Optional +from typing import Tuple + +from .._internal import _to_bytes +from .._internal import _to_str +from ..datastructures import Headers +from ..exceptions import RequestEntityTooLarge +from ..http import parse_options_header + + +class Event: + pass + + +@dataclass(frozen=True) +class Preamble(Event): + data: bytes + + +@dataclass(frozen=True) +class Field(Event): + name: str + headers: Headers + + +@dataclass(frozen=True) +class File(Event): + name: str + filename: str + headers: Headers + + +@dataclass(frozen=True) +class Data(Event): + data: bytes + more_data: bool + + +@dataclass(frozen=True) +class Epilogue(Event): + data: bytes + + +class NeedData(Event): + pass + + +NEED_DATA = NeedData() + + +class State(Enum): + PREAMBLE = auto() + PART = auto() + DATA = auto() + EPILOGUE = auto() + COMPLETE = auto() + + +# Multipart line breaks MUST be CRLF (\r\n) by RFC-7578, except that +# many implementations break this and either use CR or LF alone. +LINE_BREAK = b"(?:\r\n|\n|\r)" +BLANK_LINE_RE = re.compile(b"(?:\r\n\r\n|\r\r|\n\n)", re.MULTILINE) +LINE_BREAK_RE = re.compile(LINE_BREAK, re.MULTILINE) +# Header values can be continued via a space or tab after the linebreak, as +# per RFC2231 +HEADER_CONTINUATION_RE = re.compile(b"%s[ \t]" % LINE_BREAK, re.MULTILINE) +# This must be long enough to contain any line breaks plus any +# additional boundary markers (--) such that they will be found in a +# subsequent search +SEARCH_EXTRA_LENGTH = 8 + + +class MultipartDecoder: + """Decodes a multipart message as bytes into Python events. + + The part data is returned as available to allow the caller to save + the data from memory to disk, if desired. + """ + + def __init__( + self, + boundary: bytes, + max_form_memory_size: Optional[int] = None, + *, + max_parts: Optional[int] = None, + ) -> None: + self.buffer = bytearray() + self.complete = False + self.max_form_memory_size = max_form_memory_size + self.max_parts = max_parts + self.state = State.PREAMBLE + self.boundary = boundary + + # Note in the below \h i.e. horizontal whitespace is used + # as [^\S\n\r] as \h isn't supported in python. + + # The preamble must end with a boundary where the boundary is + # prefixed by a line break, RFC2046. Except that many + # implementations including Werkzeug's tests omit the line + # break prefix. In addition the first boundary could be the + # epilogue boundary (for empty form-data) hence the matching + # group to understand if it is an epilogue boundary. + self.preamble_re = re.compile( + rb"%s?--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)" + % (LINE_BREAK, re.escape(boundary), LINE_BREAK, LINE_BREAK), + re.MULTILINE, + ) + # A boundary must include a line break prefix and suffix, and + # may include trailing whitespace. In addition the boundary + # could be the epilogue boundary hence the matching group to + # understand if it is an epilogue boundary. + self.boundary_re = re.compile( + rb"%s--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)" + % (LINE_BREAK, re.escape(boundary), LINE_BREAK, LINE_BREAK), + re.MULTILINE, + ) + self._search_position = 0 + self._parts_decoded = 0 + + def last_newline(self) -> int: + try: + last_nl = self.buffer.rindex(b"\n") + except ValueError: + last_nl = len(self.buffer) + try: + last_cr = self.buffer.rindex(b"\r") + except ValueError: + last_cr = len(self.buffer) + + return min(last_nl, last_cr) + + def receive_data(self, data: Optional[bytes]) -> None: + if data is None: + self.complete = True + elif ( + self.max_form_memory_size is not None + and len(self.buffer) + len(data) > self.max_form_memory_size + ): + raise RequestEntityTooLarge() + else: + self.buffer.extend(data) + + def next_event(self) -> Event: + event: Event = NEED_DATA + + if self.state == State.PREAMBLE: + match = self.preamble_re.search(self.buffer, self._search_position) + if match is not None: + if match.group(1).startswith(b"--"): + self.state = State.EPILOGUE + else: + self.state = State.PART + data = bytes(self.buffer[: match.start()]) + del self.buffer[: match.end()] + event = Preamble(data=data) + self._search_position = 0 + else: + # Update the search start position to be equal to the + # current buffer length (already searched) minus a + # safe buffer for part of the search target. + self._search_position = max( + 0, len(self.buffer) - len(self.boundary) - SEARCH_EXTRA_LENGTH + ) + + elif self.state == State.PART: + match = BLANK_LINE_RE.search(self.buffer, self._search_position) + if match is not None: + headers = self._parse_headers(self.buffer[: match.start()]) + del self.buffer[: match.end()] + + if "content-disposition" not in headers: + raise ValueError("Missing Content-Disposition header") + + disposition, extra = parse_options_header( + headers["content-disposition"] + ) + name = cast(str, extra.get("name")) + filename = extra.get("filename") + if filename is not None: + event = File( + filename=filename, + headers=headers, + name=name, + ) + else: + event = Field( + headers=headers, + name=name, + ) + self.state = State.DATA + self._search_position = 0 + self._parts_decoded += 1 + + if self.max_parts is not None and self._parts_decoded > self.max_parts: + raise RequestEntityTooLarge() + else: + # Update the search start position to be equal to the + # current buffer length (already searched) minus a + # safe buffer for part of the search target. + self._search_position = max(0, len(self.buffer) - SEARCH_EXTRA_LENGTH) + + elif self.state == State.DATA: + if self.buffer.find(b"--" + self.boundary) == -1: + # No complete boundary in the buffer, but there may be + # a partial boundary at the end. As the boundary + # starts with either a nl or cr find the earliest and + # return up to that as data. + data_length = del_index = self.last_newline() + more_data = True + else: + match = self.boundary_re.search(self.buffer) + if match is not None: + if match.group(1).startswith(b"--"): + self.state = State.EPILOGUE + else: + self.state = State.PART + data_length = match.start() + del_index = match.end() + else: + data_length = del_index = self.last_newline() + more_data = match is None + + data = bytes(self.buffer[:data_length]) + del self.buffer[:del_index] + if data or not more_data: + event = Data(data=data, more_data=more_data) + + elif self.state == State.EPILOGUE and self.complete: + event = Epilogue(data=bytes(self.buffer)) + del self.buffer[:] + self.state = State.COMPLETE + + if self.complete and isinstance(event, NeedData): + raise ValueError(f"Invalid form-data cannot parse beyond {self.state}") + + return event + + def _parse_headers(self, data: bytes) -> Headers: + headers: List[Tuple[str, str]] = [] + # Merge the continued headers into one line + data = HEADER_CONTINUATION_RE.sub(b" ", data) + # Now there is one header per line + for line in data.splitlines(): + if line.strip() != b"": + name, value = _to_str(line).strip().split(":", 1) + headers.append((name.strip(), value.strip())) + return Headers(headers) + + +class MultipartEncoder: + def __init__(self, boundary: bytes) -> None: + self.boundary = boundary + self.state = State.PREAMBLE + + def send_event(self, event: Event) -> bytes: + if isinstance(event, Preamble) and self.state == State.PREAMBLE: + self.state = State.PART + return event.data + elif isinstance(event, (Field, File)) and self.state in { + State.PREAMBLE, + State.PART, + State.DATA, + }: + self.state = State.DATA + data = b"\r\n--" + self.boundary + b"\r\n" + data += b'Content-Disposition: form-data; name="%s"' % _to_bytes(event.name) + if isinstance(event, File): + data += b'; filename="%s"' % _to_bytes(event.filename) + data += b"\r\n" + for name, value in cast(Field, event).headers: + if name.lower() != "content-disposition": + data += _to_bytes(f"{name}: {value}\r\n") + data += b"\r\n" + return data + elif isinstance(event, Data) and self.state == State.DATA: + return event.data + elif isinstance(event, Epilogue): + self.state = State.COMPLETE + return b"\r\n--" + self.boundary + b"--\r\n" + event.data + else: + raise ValueError(f"Cannot generate {event} in state: {self.state}") diff --git a/venv/Lib/site-packages/werkzeug/sansio/request.py b/venv/Lib/site-packages/werkzeug/sansio/request.py new file mode 100644 index 0000000..8832baa --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/sansio/request.py @@ -0,0 +1,547 @@ +import typing as t +from datetime import datetime + +from .._internal import _to_str +from ..datastructures import Accept +from ..datastructures import Authorization +from ..datastructures import CharsetAccept +from ..datastructures import ETags +from ..datastructures import Headers +from ..datastructures import HeaderSet +from ..datastructures import IfRange +from ..datastructures import ImmutableList +from ..datastructures import ImmutableMultiDict +from ..datastructures import LanguageAccept +from ..datastructures import MIMEAccept +from ..datastructures import MultiDict +from ..datastructures import Range +from ..datastructures import RequestCacheControl +from ..http import parse_accept_header +from ..http import parse_authorization_header +from ..http import parse_cache_control_header +from ..http import parse_date +from ..http import parse_etags +from ..http import parse_if_range_header +from ..http import parse_list_header +from ..http import parse_options_header +from ..http import parse_range_header +from ..http import parse_set_header +from ..urls import url_decode +from ..user_agent import UserAgent +from ..utils import cached_property +from ..utils import header_property +from .http import parse_cookie +from .utils import get_current_url +from .utils import get_host + + +class Request: + """Represents the non-IO parts of a HTTP request, including the + method, URL info, and headers. + + This class is not meant for general use. It should only be used when + implementing WSGI, ASGI, or another HTTP application spec. Werkzeug + provides a WSGI implementation at :cls:`werkzeug.wrappers.Request`. + + :param method: The method the request was made with, such as + ``GET``. + :param scheme: The URL scheme of the protocol the request used, such + as ``https`` or ``wss``. + :param server: The address of the server. ``(host, port)``, + ``(path, None)`` for unix sockets, or ``None`` if not known. + :param root_path: The prefix that the application is mounted under. + This is prepended to generated URLs, but is not part of route + matching. + :param path: The path part of the URL after ``root_path``. + :param query_string: The part of the URL after the "?". + :param headers: The headers received with the request. + :param remote_addr: The address of the client sending the request. + + .. versionadded:: 2.0 + """ + + #: The charset used to decode most data in the request. + charset = "utf-8" + + #: the error handling procedure for errors, defaults to 'replace' + encoding_errors = "replace" + + #: the class to use for `args` and `form`. The default is an + #: :class:`~werkzeug.datastructures.ImmutableMultiDict` which supports + #: multiple values per key. alternatively it makes sense to use an + #: :class:`~werkzeug.datastructures.ImmutableOrderedMultiDict` which + #: preserves order or a :class:`~werkzeug.datastructures.ImmutableDict` + #: which is the fastest but only remembers the last key. It is also + #: possible to use mutable structures, but this is not recommended. + #: + #: .. versionadded:: 0.6 + parameter_storage_class: t.Type[MultiDict] = ImmutableMultiDict + + #: The type to be used for dict values from the incoming WSGI + #: environment. (For example for :attr:`cookies`.) By default an + #: :class:`~werkzeug.datastructures.ImmutableMultiDict` is used. + #: + #: .. versionchanged:: 1.0.0 + #: Changed to ``ImmutableMultiDict`` to support multiple values. + #: + #: .. versionadded:: 0.6 + dict_storage_class: t.Type[MultiDict] = ImmutableMultiDict + + #: the type to be used for list values from the incoming WSGI environment. + #: By default an :class:`~werkzeug.datastructures.ImmutableList` is used + #: (for example for :attr:`access_list`). + #: + #: .. versionadded:: 0.6 + list_storage_class: t.Type[t.List] = ImmutableList + + user_agent_class: t.Type[UserAgent] = UserAgent + """The class used and returned by the :attr:`user_agent` property to + parse the header. Defaults to + :class:`~werkzeug.user_agent.UserAgent`, which does no parsing. An + extension can provide a subclass that uses a parser to provide other + data. + + .. versionadded:: 2.0 + """ + + #: Valid host names when handling requests. By default all hosts are + #: trusted, which means that whatever the client says the host is + #: will be accepted. + #: + #: Because ``Host`` and ``X-Forwarded-Host`` headers can be set to + #: any value by a malicious client, it is recommended to either set + #: this property or implement similar validation in the proxy (if + #: the application is being run behind one). + #: + #: .. versionadded:: 0.9 + trusted_hosts: t.Optional[t.List[str]] = None + + def __init__( + self, + method: str, + scheme: str, + server: t.Optional[t.Tuple[str, t.Optional[int]]], + root_path: str, + path: str, + query_string: bytes, + headers: Headers, + remote_addr: t.Optional[str], + ) -> None: + #: The method the request was made with, such as ``GET``. + self.method = method.upper() + #: The URL scheme of the protocol the request used, such as + #: ``https`` or ``wss``. + self.scheme = scheme + #: The address of the server. ``(host, port)``, ``(path, None)`` + #: for unix sockets, or ``None`` if not known. + self.server = server + #: The prefix that the application is mounted under, without a + #: trailing slash. :attr:`path` comes after this. + self.root_path = root_path.rstrip("/") + #: The path part of the URL after :attr:`root_path`. This is the + #: path used for routing within the application. + self.path = "/" + path.lstrip("/") + #: The part of the URL after the "?". This is the raw value, use + #: :attr:`args` for the parsed values. + self.query_string = query_string + #: The headers received with the request. + self.headers = headers + #: The address of the client sending the request. + self.remote_addr = remote_addr + + def __repr__(self) -> str: + try: + url = self.url + except Exception as e: + url = f"(invalid URL: {e})" + + return f"<{type(self).__name__} {url!r} [{self.method}]>" + + @property + def url_charset(self) -> str: + """The charset that is assumed for URLs. Defaults to the value + of :attr:`charset`. + + .. versionadded:: 0.6 + """ + return self.charset + + @cached_property + def args(self) -> "MultiDict[str, str]": + """The parsed URL parameters (the part in the URL after the question + mark). + + By default an + :class:`~werkzeug.datastructures.ImmutableMultiDict` + is returned from this function. This can be changed by setting + :attr:`parameter_storage_class` to a different type. This might + be necessary if the order of the form data is important. + """ + return url_decode( + self.query_string, + self.url_charset, + errors=self.encoding_errors, + cls=self.parameter_storage_class, + ) + + @cached_property + def access_route(self) -> t.List[str]: + """If a forwarded header exists this is a list of all ip addresses + from the client ip to the last proxy server. + """ + if "X-Forwarded-For" in self.headers: + return self.list_storage_class( + parse_list_header(self.headers["X-Forwarded-For"]) + ) + elif self.remote_addr is not None: + return self.list_storage_class([self.remote_addr]) + return self.list_storage_class() + + @cached_property + def full_path(self) -> str: + """Requested path, including the query string.""" + return f"{self.path}?{_to_str(self.query_string, self.url_charset)}" + + @property + def is_secure(self) -> bool: + """``True`` if the request was made with a secure protocol + (HTTPS or WSS). + """ + return self.scheme in {"https", "wss"} + + @cached_property + def url(self) -> str: + """The full request URL with the scheme, host, root path, path, + and query string.""" + return get_current_url( + self.scheme, self.host, self.root_path, self.path, self.query_string + ) + + @cached_property + def base_url(self) -> str: + """Like :attr:`url` but without the query string.""" + return get_current_url(self.scheme, self.host, self.root_path, self.path) + + @cached_property + def root_url(self) -> str: + """The request URL scheme, host, and root path. This is the root + that the application is accessed from. + """ + return get_current_url(self.scheme, self.host, self.root_path) + + @cached_property + def host_url(self) -> str: + """The request URL scheme and host only.""" + return get_current_url(self.scheme, self.host) + + @cached_property + def host(self) -> str: + """The host name the request was made to, including the port if + it's non-standard. Validated with :attr:`trusted_hosts`. + """ + return get_host( + self.scheme, self.headers.get("host"), self.server, self.trusted_hosts + ) + + @cached_property + def cookies(self) -> "ImmutableMultiDict[str, str]": + """A :class:`dict` with the contents of all cookies transmitted with + the request.""" + wsgi_combined_cookie = ";".join(self.headers.getlist("Cookie")) + return parse_cookie( # type: ignore + wsgi_combined_cookie, + self.charset, + self.encoding_errors, + cls=self.dict_storage_class, + ) + + # Common Descriptors + + content_type = header_property[str]( + "Content-Type", + doc="""The Content-Type entity-header field indicates the media + type of the entity-body sent to the recipient or, in the case of + the HEAD method, the media type that would have been sent had + the request been a GET.""", + read_only=True, + ) + + @cached_property + def content_length(self) -> t.Optional[int]: + """The Content-Length entity-header field indicates the size of the + entity-body in bytes or, in the case of the HEAD method, the size of + the entity-body that would have been sent had the request been a + GET. + """ + if self.headers.get("Transfer-Encoding", "") == "chunked": + return None + + content_length = self.headers.get("Content-Length") + if content_length is not None: + try: + return max(0, int(content_length)) + except (ValueError, TypeError): + pass + + return None + + content_encoding = header_property[str]( + "Content-Encoding", + doc="""The Content-Encoding entity-header field is used as a + modifier to the media-type. When present, its value indicates + what additional content codings have been applied to the + entity-body, and thus what decoding mechanisms must be applied + in order to obtain the media-type referenced by the Content-Type + header field. + + .. versionadded:: 0.9""", + read_only=True, + ) + content_md5 = header_property[str]( + "Content-MD5", + doc="""The Content-MD5 entity-header field, as defined in + RFC 1864, is an MD5 digest of the entity-body for the purpose of + providing an end-to-end message integrity check (MIC) of the + entity-body. (Note: a MIC is good for detecting accidental + modification of the entity-body in transit, but is not proof + against malicious attacks.) + + .. versionadded:: 0.9""", + read_only=True, + ) + referrer = header_property[str]( + "Referer", + doc="""The Referer[sic] request-header field allows the client + to specify, for the server's benefit, the address (URI) of the + resource from which the Request-URI was obtained (the + "referrer", although the header field is misspelled).""", + read_only=True, + ) + date = header_property( + "Date", + None, + parse_date, + doc="""The Date general-header field represents the date and + time at which the message was originated, having the same + semantics as orig-date in RFC 822. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """, + read_only=True, + ) + max_forwards = header_property( + "Max-Forwards", + None, + int, + doc="""The Max-Forwards request-header field provides a + mechanism with the TRACE and OPTIONS methods to limit the number + of proxies or gateways that can forward the request to the next + inbound server.""", + read_only=True, + ) + + def _parse_content_type(self) -> None: + if not hasattr(self, "_parsed_content_type"): + self._parsed_content_type = parse_options_header( + self.headers.get("Content-Type", "") + ) + + @property + def mimetype(self) -> str: + """Like :attr:`content_type`, but without parameters (eg, without + charset, type etc.) and always lowercase. For example if the content + type is ``text/HTML; charset=utf-8`` the mimetype would be + ``'text/html'``. + """ + self._parse_content_type() + return self._parsed_content_type[0].lower() + + @property + def mimetype_params(self) -> t.Dict[str, str]: + """The mimetype parameters as dict. For example if the content + type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + """ + self._parse_content_type() + return self._parsed_content_type[1] + + @cached_property + def pragma(self) -> HeaderSet: + """The Pragma general-header field is used to include + implementation-specific directives that might apply to any recipient + along the request/response chain. All pragma directives specify + optional behavior from the viewpoint of the protocol; however, some + systems MAY require that behavior be consistent with the directives. + """ + return parse_set_header(self.headers.get("Pragma", "")) + + # Accept + + @cached_property + def accept_mimetypes(self) -> MIMEAccept: + """List of mimetypes this client supports as + :class:`~werkzeug.datastructures.MIMEAccept` object. + """ + return parse_accept_header(self.headers.get("Accept"), MIMEAccept) + + @cached_property + def accept_charsets(self) -> CharsetAccept: + """List of charsets this client supports as + :class:`~werkzeug.datastructures.CharsetAccept` object. + """ + return parse_accept_header(self.headers.get("Accept-Charset"), CharsetAccept) + + @cached_property + def accept_encodings(self) -> Accept: + """List of encodings this client accepts. Encodings in a HTTP term + are compression encodings such as gzip. For charsets have a look at + :attr:`accept_charset`. + """ + return parse_accept_header(self.headers.get("Accept-Encoding")) + + @cached_property + def accept_languages(self) -> LanguageAccept: + """List of languages this client accepts as + :class:`~werkzeug.datastructures.LanguageAccept` object. + + .. versionchanged 0.5 + In previous versions this was a regular + :class:`~werkzeug.datastructures.Accept` object. + """ + return parse_accept_header(self.headers.get("Accept-Language"), LanguageAccept) + + # ETag + + @cached_property + def cache_control(self) -> RequestCacheControl: + """A :class:`~werkzeug.datastructures.RequestCacheControl` object + for the incoming cache control headers. + """ + cache_control = self.headers.get("Cache-Control") + return parse_cache_control_header(cache_control, None, RequestCacheControl) + + @cached_property + def if_match(self) -> ETags: + """An object containing all the etags in the `If-Match` header. + + :rtype: :class:`~werkzeug.datastructures.ETags` + """ + return parse_etags(self.headers.get("If-Match")) + + @cached_property + def if_none_match(self) -> ETags: + """An object containing all the etags in the `If-None-Match` header. + + :rtype: :class:`~werkzeug.datastructures.ETags` + """ + return parse_etags(self.headers.get("If-None-Match")) + + @cached_property + def if_modified_since(self) -> t.Optional[datetime]: + """The parsed `If-Modified-Since` header as a datetime object. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """ + return parse_date(self.headers.get("If-Modified-Since")) + + @cached_property + def if_unmodified_since(self) -> t.Optional[datetime]: + """The parsed `If-Unmodified-Since` header as a datetime object. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """ + return parse_date(self.headers.get("If-Unmodified-Since")) + + @cached_property + def if_range(self) -> IfRange: + """The parsed ``If-Range`` header. + + .. versionchanged:: 2.0 + ``IfRange.date`` is timezone-aware. + + .. versionadded:: 0.7 + """ + return parse_if_range_header(self.headers.get("If-Range")) + + @cached_property + def range(self) -> t.Optional[Range]: + """The parsed `Range` header. + + .. versionadded:: 0.7 + + :rtype: :class:`~werkzeug.datastructures.Range` + """ + return parse_range_header(self.headers.get("Range")) + + # User Agent + + @cached_property + def user_agent(self) -> UserAgent: + """The user agent. Use ``user_agent.string`` to get the header + value. Set :attr:`user_agent_class` to a subclass of + :class:`~werkzeug.user_agent.UserAgent` to provide parsing for + the other properties or other extended data. + + .. versionchanged:: 2.0 + The built in parser is deprecated and will be removed in + Werkzeug 2.1. A ``UserAgent`` subclass must be set to parse + data from the string. + """ + return self.user_agent_class(self.headers.get("User-Agent", "")) + + # Authorization + + @cached_property + def authorization(self) -> t.Optional[Authorization]: + """The `Authorization` object in parsed form.""" + return parse_authorization_header(self.headers.get("Authorization")) + + # CORS + + origin = header_property[str]( + "Origin", + doc=( + "The host that the request originated from. Set" + " :attr:`~CORSResponseMixin.access_control_allow_origin` on" + " the response to indicate which origins are allowed." + ), + read_only=True, + ) + + access_control_request_headers = header_property( + "Access-Control-Request-Headers", + load_func=parse_set_header, + doc=( + "Sent with a preflight request to indicate which headers" + " will be sent with the cross origin request. Set" + " :attr:`~CORSResponseMixin.access_control_allow_headers`" + " on the response to indicate which headers are allowed." + ), + read_only=True, + ) + + access_control_request_method = header_property[str]( + "Access-Control-Request-Method", + doc=( + "Sent with a preflight request to indicate which method" + " will be used for the cross origin request. Set" + " :attr:`~CORSResponseMixin.access_control_allow_methods`" + " on the response to indicate which methods are allowed." + ), + read_only=True, + ) + + @property + def is_json(self) -> bool: + """Check if the mimetype indicates JSON data, either + :mimetype:`application/json` or :mimetype:`application/*+json`. + """ + mt = self.mimetype + return ( + mt == "application/json" + or mt.startswith("application/") + and mt.endswith("+json") + ) diff --git a/venv/Lib/site-packages/werkzeug/sansio/response.py b/venv/Lib/site-packages/werkzeug/sansio/response.py new file mode 100644 index 0000000..de0bec2 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/sansio/response.py @@ -0,0 +1,704 @@ +import typing as t +from datetime import datetime +from datetime import timedelta +from datetime import timezone +from http import HTTPStatus + +from .._internal import _to_str +from ..datastructures import Headers +from ..datastructures import HeaderSet +from ..http import dump_cookie +from ..http import HTTP_STATUS_CODES +from ..utils import get_content_type +from werkzeug.datastructures import CallbackDict +from werkzeug.datastructures import ContentRange +from werkzeug.datastructures import ContentSecurityPolicy +from werkzeug.datastructures import ResponseCacheControl +from werkzeug.datastructures import WWWAuthenticate +from werkzeug.http import COEP +from werkzeug.http import COOP +from werkzeug.http import dump_age +from werkzeug.http import dump_header +from werkzeug.http import dump_options_header +from werkzeug.http import http_date +from werkzeug.http import parse_age +from werkzeug.http import parse_cache_control_header +from werkzeug.http import parse_content_range_header +from werkzeug.http import parse_csp_header +from werkzeug.http import parse_date +from werkzeug.http import parse_options_header +from werkzeug.http import parse_set_header +from werkzeug.http import parse_www_authenticate_header +from werkzeug.http import quote_etag +from werkzeug.http import unquote_etag +from werkzeug.utils import header_property + + +def _set_property(name: str, doc: t.Optional[str] = None) -> property: + def fget(self: "Response") -> HeaderSet: + def on_update(header_set: HeaderSet) -> None: + if not header_set and name in self.headers: + del self.headers[name] + elif header_set: + self.headers[name] = header_set.to_header() + + return parse_set_header(self.headers.get(name), on_update) + + def fset( + self: "Response", + value: t.Optional[ + t.Union[str, t.Dict[str, t.Union[str, int]], t.Iterable[str]] + ], + ) -> None: + if not value: + del self.headers[name] + elif isinstance(value, str): + self.headers[name] = value + else: + self.headers[name] = dump_header(value) + + return property(fget, fset, doc=doc) + + +class Response: + """Represents the non-IO parts of an HTTP response, specifically the + status and headers but not the body. + + This class is not meant for general use. It should only be used when + implementing WSGI, ASGI, or another HTTP application spec. Werkzeug + provides a WSGI implementation at :cls:`werkzeug.wrappers.Response`. + + :param status: The status code for the response. Either an int, in + which case the default status message is added, or a string in + the form ``{code} {message}``, like ``404 Not Found``. Defaults + to 200. + :param headers: A :class:`~werkzeug.datastructures.Headers` object, + or a list of ``(key, value)`` tuples that will be converted to a + ``Headers`` object. + :param mimetype: The mime type (content type without charset or + other parameters) of the response. If the value starts with + ``text/`` (or matches some other special cases), the charset + will be added to create the ``content_type``. + :param content_type: The full content type of the response. + Overrides building the value from ``mimetype``. + + .. versionadded:: 2.0 + """ + + #: the charset of the response. + charset = "utf-8" + + #: the default status if none is provided. + default_status = 200 + + #: the default mimetype if none is provided. + default_mimetype: t.Optional[str] = "text/plain" + + #: Warn if a cookie header exceeds this size. The default, 4093, should be + #: safely `supported by most browsers `_. A cookie larger than + #: this size will still be sent, but it may be ignored or handled + #: incorrectly by some browsers. Set to 0 to disable this check. + #: + #: .. versionadded:: 0.13 + #: + #: .. _`cookie`: http://browsercookielimits.squawky.net/ + max_cookie_size = 4093 + + # A :class:`Headers` object representing the response headers. + headers: Headers + + def __init__( + self, + status: t.Optional[t.Union[int, str, HTTPStatus]] = None, + headers: t.Optional[ + t.Union[ + t.Mapping[str, t.Union[str, int, t.Iterable[t.Union[str, int]]]], + t.Iterable[t.Tuple[str, t.Union[str, int]]], + ] + ] = None, + mimetype: t.Optional[str] = None, + content_type: t.Optional[str] = None, + ) -> None: + if isinstance(headers, Headers): + self.headers = headers + elif not headers: + self.headers = Headers() + else: + self.headers = Headers(headers) + + if content_type is None: + if mimetype is None and "content-type" not in self.headers: + mimetype = self.default_mimetype + if mimetype is not None: + mimetype = get_content_type(mimetype, self.charset) + content_type = mimetype + if content_type is not None: + self.headers["Content-Type"] = content_type + if status is None: + status = self.default_status + self.status = status # type: ignore + + def __repr__(self) -> str: + return f"<{type(self).__name__} [{self.status}]>" + + @property + def status_code(self) -> int: + """The HTTP status code as a number.""" + return self._status_code + + @status_code.setter + def status_code(self, code: int) -> None: + self.status = code # type: ignore + + @property + def status(self) -> str: + """The HTTP status code as a string.""" + return self._status + + @status.setter + def status(self, value: t.Union[str, int, HTTPStatus]) -> None: + if not isinstance(value, (str, bytes, int, HTTPStatus)): + raise TypeError("Invalid status argument") + + self._status, self._status_code = self._clean_status(value) + + def _clean_status(self, value: t.Union[str, int, HTTPStatus]) -> t.Tuple[str, int]: + if isinstance(value, HTTPStatus): + value = int(value) + status = _to_str(value, self.charset) + split_status = status.split(None, 1) + + if len(split_status) == 0: + raise ValueError("Empty status argument") + + try: + status_code = int(split_status[0]) + except ValueError: + # only message + return f"0 {status}", 0 + + if len(split_status) > 1: + # code and message + return status, status_code + + # only code, look up message + try: + status = f"{status_code} {HTTP_STATUS_CODES[status_code].upper()}" + except KeyError: + status = f"{status_code} UNKNOWN" + + return status, status_code + + def set_cookie( + self, + key: str, + value: str = "", + max_age: t.Optional[t.Union[timedelta, int]] = None, + expires: t.Optional[t.Union[str, datetime, int, float]] = None, + path: t.Optional[str] = "/", + domain: t.Optional[str] = None, + secure: bool = False, + httponly: bool = False, + samesite: t.Optional[str] = None, + ) -> None: + """Sets a cookie. + + A warning is raised if the size of the cookie header exceeds + :attr:`max_cookie_size`, but the header will still be set. + + :param key: the key (name) of the cookie to be set. + :param value: the value of the cookie. + :param max_age: should be a number of seconds, or `None` (default) if + the cookie should last only as long as the client's + browser session. + :param expires: should be a `datetime` object or UNIX timestamp. + :param path: limits the cookie to a given path, per default it will + span the whole domain. + :param domain: if you want to set a cross-domain cookie. For example, + ``domain=".example.com"`` will set a cookie that is + readable by the domain ``www.example.com``, + ``foo.example.com`` etc. Otherwise, a cookie will only + be readable by the domain that set it. + :param secure: If ``True``, the cookie will only be available + via HTTPS. + :param httponly: Disallow JavaScript access to the cookie. + :param samesite: Limit the scope of the cookie to only be + attached to requests that are "same-site". + """ + self.headers.add( + "Set-Cookie", + dump_cookie( + key, + value=value, + max_age=max_age, + expires=expires, + path=path, + domain=domain, + secure=secure, + httponly=httponly, + charset=self.charset, + max_size=self.max_cookie_size, + samesite=samesite, + ), + ) + + def delete_cookie( + self, + key: str, + path: str = "/", + domain: t.Optional[str] = None, + secure: bool = False, + httponly: bool = False, + samesite: t.Optional[str] = None, + ) -> None: + """Delete a cookie. Fails silently if key doesn't exist. + + :param key: the key (name) of the cookie to be deleted. + :param path: if the cookie that should be deleted was limited to a + path, the path has to be defined here. + :param domain: if the cookie that should be deleted was limited to a + domain, that domain has to be defined here. + :param secure: If ``True``, the cookie will only be available + via HTTPS. + :param httponly: Disallow JavaScript access to the cookie. + :param samesite: Limit the scope of the cookie to only be + attached to requests that are "same-site". + """ + self.set_cookie( + key, + expires=0, + max_age=0, + path=path, + domain=domain, + secure=secure, + httponly=httponly, + samesite=samesite, + ) + + @property + def is_json(self) -> bool: + """Check if the mimetype indicates JSON data, either + :mimetype:`application/json` or :mimetype:`application/*+json`. + """ + mt = self.mimetype + return mt is not None and ( + mt == "application/json" + or mt.startswith("application/") + and mt.endswith("+json") + ) + + # Common Descriptors + + @property + def mimetype(self) -> t.Optional[str]: + """The mimetype (content type without charset etc.)""" + ct = self.headers.get("content-type") + + if ct: + return ct.split(";")[0].strip() + else: + return None + + @mimetype.setter + def mimetype(self, value: str) -> None: + self.headers["Content-Type"] = get_content_type(value, self.charset) + + @property + def mimetype_params(self) -> t.Dict[str, str]: + """The mimetype parameters as dict. For example if the + content type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + + .. versionadded:: 0.5 + """ + + def on_update(d: CallbackDict) -> None: + self.headers["Content-Type"] = dump_options_header(self.mimetype, d) + + d = parse_options_header(self.headers.get("content-type", ""))[1] + return CallbackDict(d, on_update) + + location = header_property[str]( + "Location", + doc="""The Location response-header field is used to redirect + the recipient to a location other than the Request-URI for + completion of the request or identification of a new + resource.""", + ) + age = header_property( + "Age", + None, + parse_age, + dump_age, # type: ignore + doc="""The Age response-header field conveys the sender's + estimate of the amount of time since the response (or its + revalidation) was generated at the origin server. + + Age values are non-negative decimal integers, representing time + in seconds.""", + ) + content_type = header_property[str]( + "Content-Type", + doc="""The Content-Type entity-header field indicates the media + type of the entity-body sent to the recipient or, in the case of + the HEAD method, the media type that would have been sent had + the request been a GET.""", + ) + content_length = header_property( + "Content-Length", + None, + int, + str, + doc="""The Content-Length entity-header field indicates the size + of the entity-body, in decimal number of OCTETs, sent to the + recipient or, in the case of the HEAD method, the size of the + entity-body that would have been sent had the request been a + GET.""", + ) + content_location = header_property[str]( + "Content-Location", + doc="""The Content-Location entity-header field MAY be used to + supply the resource location for the entity enclosed in the + message when that entity is accessible from a location separate + from the requested resource's URI.""", + ) + content_encoding = header_property[str]( + "Content-Encoding", + doc="""The Content-Encoding entity-header field is used as a + modifier to the media-type. When present, its value indicates + what additional content codings have been applied to the + entity-body, and thus what decoding mechanisms must be applied + in order to obtain the media-type referenced by the Content-Type + header field.""", + ) + content_md5 = header_property[str]( + "Content-MD5", + doc="""The Content-MD5 entity-header field, as defined in + RFC 1864, is an MD5 digest of the entity-body for the purpose of + providing an end-to-end message integrity check (MIC) of the + entity-body. (Note: a MIC is good for detecting accidental + modification of the entity-body in transit, but is not proof + against malicious attacks.)""", + ) + date = header_property( + "Date", + None, + parse_date, + http_date, + doc="""The Date general-header field represents the date and + time at which the message was originated, having the same + semantics as orig-date in RFC 822. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """, + ) + expires = header_property( + "Expires", + None, + parse_date, + http_date, + doc="""The Expires entity-header field gives the date/time after + which the response is considered stale. A stale cache entry may + not normally be returned by a cache. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """, + ) + last_modified = header_property( + "Last-Modified", + None, + parse_date, + http_date, + doc="""The Last-Modified entity-header field indicates the date + and time at which the origin server believes the variant was + last modified. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """, + ) + + @property + def retry_after(self) -> t.Optional[datetime]: + """The Retry-After response-header field can be used with a + 503 (Service Unavailable) response to indicate how long the + service is expected to be unavailable to the requesting client. + + Time in seconds until expiration or date. + + .. versionchanged:: 2.0 + The datetime object is timezone-aware. + """ + value = self.headers.get("retry-after") + if value is None: + return None + + try: + seconds = int(value) + except ValueError: + return parse_date(value) + + return datetime.now(timezone.utc) + timedelta(seconds=seconds) + + @retry_after.setter + def retry_after(self, value: t.Optional[t.Union[datetime, int, str]]) -> None: + if value is None: + if "retry-after" in self.headers: + del self.headers["retry-after"] + return + elif isinstance(value, datetime): + value = http_date(value) + else: + value = str(value) + self.headers["Retry-After"] = value + + vary = _set_property( + "Vary", + doc="""The Vary field value indicates the set of request-header + fields that fully determines, while the response is fresh, + whether a cache is permitted to use the response to reply to a + subsequent request without revalidation.""", + ) + content_language = _set_property( + "Content-Language", + doc="""The Content-Language entity-header field describes the + natural language(s) of the intended audience for the enclosed + entity. Note that this might not be equivalent to all the + languages used within the entity-body.""", + ) + allow = _set_property( + "Allow", + doc="""The Allow entity-header field lists the set of methods + supported by the resource identified by the Request-URI. The + purpose of this field is strictly to inform the recipient of + valid methods associated with the resource. An Allow header + field MUST be present in a 405 (Method Not Allowed) + response.""", + ) + + # ETag + + @property + def cache_control(self) -> ResponseCacheControl: + """The Cache-Control general-header field is used to specify + directives that MUST be obeyed by all caching mechanisms along the + request/response chain. + """ + + def on_update(cache_control: ResponseCacheControl) -> None: + if not cache_control and "cache-control" in self.headers: + del self.headers["cache-control"] + elif cache_control: + self.headers["Cache-Control"] = cache_control.to_header() + + return parse_cache_control_header( + self.headers.get("cache-control"), on_update, ResponseCacheControl + ) + + def set_etag(self, etag: str, weak: bool = False) -> None: + """Set the etag, and override the old one if there was one.""" + self.headers["ETag"] = quote_etag(etag, weak) + + def get_etag(self) -> t.Union[t.Tuple[str, bool], t.Tuple[None, None]]: + """Return a tuple in the form ``(etag, is_weak)``. If there is no + ETag the return value is ``(None, None)``. + """ + return unquote_etag(self.headers.get("ETag")) + + accept_ranges = header_property[str]( + "Accept-Ranges", + doc="""The `Accept-Ranges` header. Even though the name would + indicate that multiple values are supported, it must be one + string token only. + + The values ``'bytes'`` and ``'none'`` are common. + + .. versionadded:: 0.7""", + ) + + @property + def content_range(self) -> ContentRange: + """The ``Content-Range`` header as a + :class:`~werkzeug.datastructures.ContentRange` object. Available + even if the header is not set. + + .. versionadded:: 0.7 + """ + + def on_update(rng: ContentRange) -> None: + if not rng: + del self.headers["content-range"] + else: + self.headers["Content-Range"] = rng.to_header() + + rv = parse_content_range_header(self.headers.get("content-range"), on_update) + # always provide a content range object to make the descriptor + # more user friendly. It provides an unset() method that can be + # used to remove the header quickly. + if rv is None: + rv = ContentRange(None, None, None, on_update=on_update) + return rv + + @content_range.setter + def content_range(self, value: t.Optional[t.Union[ContentRange, str]]) -> None: + if not value: + del self.headers["content-range"] + elif isinstance(value, str): + self.headers["Content-Range"] = value + else: + self.headers["Content-Range"] = value.to_header() + + # Authorization + + @property + def www_authenticate(self) -> WWWAuthenticate: + """The ``WWW-Authenticate`` header in a parsed form.""" + + def on_update(www_auth: WWWAuthenticate) -> None: + if not www_auth and "www-authenticate" in self.headers: + del self.headers["www-authenticate"] + elif www_auth: + self.headers["WWW-Authenticate"] = www_auth.to_header() + + header = self.headers.get("www-authenticate") + return parse_www_authenticate_header(header, on_update) + + # CSP + + @property + def content_security_policy(self) -> ContentSecurityPolicy: + """The ``Content-Security-Policy`` header as a + :class:`~werkzeug.datastructures.ContentSecurityPolicy` object. Available + even if the header is not set. + + The Content-Security-Policy header adds an additional layer of + security to help detect and mitigate certain types of attacks. + """ + + def on_update(csp: ContentSecurityPolicy) -> None: + if not csp: + del self.headers["content-security-policy"] + else: + self.headers["Content-Security-Policy"] = csp.to_header() + + rv = parse_csp_header(self.headers.get("content-security-policy"), on_update) + if rv is None: + rv = ContentSecurityPolicy(None, on_update=on_update) + return rv + + @content_security_policy.setter + def content_security_policy( + self, value: t.Optional[t.Union[ContentSecurityPolicy, str]] + ) -> None: + if not value: + del self.headers["content-security-policy"] + elif isinstance(value, str): + self.headers["Content-Security-Policy"] = value + else: + self.headers["Content-Security-Policy"] = value.to_header() + + @property + def content_security_policy_report_only(self) -> ContentSecurityPolicy: + """The ``Content-Security-policy-report-only`` header as a + :class:`~werkzeug.datastructures.ContentSecurityPolicy` object. Available + even if the header is not set. + + The Content-Security-Policy-Report-Only header adds a csp policy + that is not enforced but is reported thereby helping detect + certain types of attacks. + """ + + def on_update(csp: ContentSecurityPolicy) -> None: + if not csp: + del self.headers["content-security-policy-report-only"] + else: + self.headers["Content-Security-policy-report-only"] = csp.to_header() + + rv = parse_csp_header( + self.headers.get("content-security-policy-report-only"), on_update + ) + if rv is None: + rv = ContentSecurityPolicy(None, on_update=on_update) + return rv + + @content_security_policy_report_only.setter + def content_security_policy_report_only( + self, value: t.Optional[t.Union[ContentSecurityPolicy, str]] + ) -> None: + if not value: + del self.headers["content-security-policy-report-only"] + elif isinstance(value, str): + self.headers["Content-Security-policy-report-only"] = value + else: + self.headers["Content-Security-policy-report-only"] = value.to_header() + + # CORS + + @property + def access_control_allow_credentials(self) -> bool: + """Whether credentials can be shared by the browser to + JavaScript code. As part of the preflight request it indicates + whether credentials can be used on the cross origin request. + """ + return "Access-Control-Allow-Credentials" in self.headers + + @access_control_allow_credentials.setter + def access_control_allow_credentials(self, value: t.Optional[bool]) -> None: + if value is True: + self.headers["Access-Control-Allow-Credentials"] = "true" + else: + self.headers.pop("Access-Control-Allow-Credentials", None) + + access_control_allow_headers = header_property( + "Access-Control-Allow-Headers", + load_func=parse_set_header, + dump_func=dump_header, + doc="Which headers can be sent with the cross origin request.", + ) + + access_control_allow_methods = header_property( + "Access-Control-Allow-Methods", + load_func=parse_set_header, + dump_func=dump_header, + doc="Which methods can be used for the cross origin request.", + ) + + access_control_allow_origin = header_property[str]( + "Access-Control-Allow-Origin", + doc="The origin or '*' for any origin that may make cross origin requests.", + ) + + access_control_expose_headers = header_property( + "Access-Control-Expose-Headers", + load_func=parse_set_header, + dump_func=dump_header, + doc="Which headers can be shared by the browser to JavaScript code.", + ) + + access_control_max_age = header_property( + "Access-Control-Max-Age", + load_func=int, + dump_func=str, + doc="The maximum age in seconds the access control settings can be cached for.", + ) + + cross_origin_opener_policy = header_property[COOP]( + "Cross-Origin-Opener-Policy", + load_func=lambda value: COOP(value), + dump_func=lambda value: value.value, + default=COOP.UNSAFE_NONE, + doc="""Allows control over sharing of browsing context group with cross-origin + documents. Values must be a member of the :class:`werkzeug.http.COOP` enum.""", + ) + + cross_origin_embedder_policy = header_property[COEP]( + "Cross-Origin-Embedder-Policy", + load_func=lambda value: COEP(value), + dump_func=lambda value: value.value, + default=COEP.UNSAFE_NONE, + doc="""Prevents a document from loading any cross-origin resources that do not + explicitly grant the document permission. Values must be a member of the + :class:`werkzeug.http.COEP` enum.""", + ) diff --git a/venv/Lib/site-packages/werkzeug/sansio/utils.py b/venv/Lib/site-packages/werkzeug/sansio/utils.py new file mode 100644 index 0000000..e639dcb --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/sansio/utils.py @@ -0,0 +1,165 @@ +import typing as t + +from .._internal import _encode_idna +from ..exceptions import SecurityError +from ..urls import uri_to_iri +from ..urls import url_quote + + +def host_is_trusted(hostname: str, trusted_list: t.Iterable[str]) -> bool: + """Check if a host matches a list of trusted names. + + :param hostname: The name to check. + :param trusted_list: A list of valid names to match. If a name + starts with a dot it will match all subdomains. + + .. versionadded:: 0.9 + """ + if not hostname: + return False + + if isinstance(trusted_list, str): + trusted_list = [trusted_list] + + def _normalize(hostname: str) -> bytes: + if ":" in hostname: + hostname = hostname.rsplit(":", 1)[0] + + return _encode_idna(hostname) + + try: + hostname_bytes = _normalize(hostname) + except UnicodeError: + return False + + for ref in trusted_list: + if ref.startswith("."): + ref = ref[1:] + suffix_match = True + else: + suffix_match = False + + try: + ref_bytes = _normalize(ref) + except UnicodeError: + return False + + if ref_bytes == hostname_bytes: + return True + + if suffix_match and hostname_bytes.endswith(b"." + ref_bytes): + return True + + return False + + +def get_host( + scheme: str, + host_header: t.Optional[str], + server: t.Optional[t.Tuple[str, t.Optional[int]]] = None, + trusted_hosts: t.Optional[t.Iterable[str]] = None, +) -> str: + """Return the host for the given parameters. + + This first checks the ``host_header``. If it's not present, then + ``server`` is used. The host will only contain the port if it is + different than the standard port for the protocol. + + Optionally, verify that the host is trusted using + :func:`host_is_trusted` and raise a + :exc:`~werkzeug.exceptions.SecurityError` if it is not. + + :param scheme: The protocol the request used, like ``"https"``. + :param host_header: The ``Host`` header value. + :param server: Address of the server. ``(host, port)``, or + ``(path, None)`` for unix sockets. + :param trusted_hosts: A list of trusted host names. + + :return: Host, with port if necessary. + :raise ~werkzeug.exceptions.SecurityError: If the host is not + trusted. + """ + host = "" + + if host_header is not None: + host = host_header + elif server is not None: + host = server[0] + + if server[1] is not None: + host = f"{host}:{server[1]}" + + if scheme in {"http", "ws"} and host.endswith(":80"): + host = host[:-3] + elif scheme in {"https", "wss"} and host.endswith(":443"): + host = host[:-4] + + if trusted_hosts is not None: + if not host_is_trusted(host, trusted_hosts): + raise SecurityError(f"Host {host!r} is not trusted.") + + return host + + +def get_current_url( + scheme: str, + host: str, + root_path: t.Optional[str] = None, + path: t.Optional[str] = None, + query_string: t.Optional[bytes] = None, +) -> str: + """Recreate the URL for a request. If an optional part isn't + provided, it and subsequent parts are not included in the URL. + + The URL is an IRI, not a URI, so it may contain Unicode characters. + Use :func:`~werkzeug.urls.iri_to_uri` to convert it to ASCII. + + :param scheme: The protocol the request used, like ``"https"``. + :param host: The host the request was made to. See :func:`get_host`. + :param root_path: Prefix that the application is mounted under. This + is prepended to ``path``. + :param path: The path part of the URL after ``root_path``. + :param query_string: The portion of the URL after the "?". + """ + url = [scheme, "://", host] + + if root_path is None: + url.append("/") + return uri_to_iri("".join(url)) + + url.append(url_quote(root_path.rstrip("/"))) + url.append("/") + + if path is None: + return uri_to_iri("".join(url)) + + url.append(url_quote(path.lstrip("/"))) + + if query_string: + url.append("?") + url.append(url_quote(query_string, safe=":&%=+$!*'(),")) + + return uri_to_iri("".join(url)) + + +def get_content_length( + http_content_length: t.Union[str, None] = None, + http_transfer_encoding: t.Union[str, None] = "", +) -> t.Optional[int]: + """Returns the content length as an integer or ``None`` if + unavailable or chunked transfer encoding is used. + + :param http_content_length: The Content-Length HTTP header. + :param http_transfer_encoding: The Transfer-Encoding HTTP header. + + .. versionadded:: 2.2 + """ + if http_transfer_encoding == "chunked": + return None + + if http_content_length is not None: + try: + return max(0, int(http_content_length)) + except (ValueError, TypeError): + pass + return None diff --git a/venv/Lib/site-packages/werkzeug/security.py b/venv/Lib/site-packages/werkzeug/security.py new file mode 100644 index 0000000..4599fb3 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/security.py @@ -0,0 +1,140 @@ +import hashlib +import hmac +import os +import posixpath +import secrets +import typing as t + +if t.TYPE_CHECKING: + pass + +SALT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +DEFAULT_PBKDF2_ITERATIONS = 260000 + +_os_alt_seps: t.List[str] = list( + sep for sep in [os.sep, os.path.altsep] if sep is not None and sep != "/" +) + + +def gen_salt(length: int) -> str: + """Generate a random string of SALT_CHARS with specified ``length``.""" + if length <= 0: + raise ValueError("Salt length must be positive") + + return "".join(secrets.choice(SALT_CHARS) for _ in range(length)) + + +def _hash_internal(method: str, salt: str, password: str) -> t.Tuple[str, str]: + """Internal password hash helper. Supports plaintext without salt, + unsalted and salted passwords. In case salted passwords are used + hmac is used. + """ + if method == "plain": + return password, method + + salt = salt.encode("utf-8") + password = password.encode("utf-8") + + if method.startswith("pbkdf2:"): + if not salt: + raise ValueError("Salt is required for PBKDF2") + + args = method[7:].split(":") + + if len(args) not in (1, 2): + raise ValueError("Invalid number of arguments for PBKDF2") + + method = args.pop(0) + iterations = int(args[0] or 0) if args else DEFAULT_PBKDF2_ITERATIONS + return ( + hashlib.pbkdf2_hmac(method, password, salt, iterations).hex(), + f"pbkdf2:{method}:{iterations}", + ) + + if salt: + return hmac.new(salt, password, method).hexdigest(), method + + return hashlib.new(method, password).hexdigest(), method + + +def generate_password_hash( + password: str, method: str = "pbkdf2:sha256", salt_length: int = 16 +) -> str: + """Hash a password with the given method and salt with a string of + the given length. The format of the string returned includes the method + that was used so that :func:`check_password_hash` can check the hash. + + The format for the hashed string looks like this:: + + method$salt$hash + + This method can **not** generate unsalted passwords but it is possible + to set param method='plain' in order to enforce plaintext passwords. + If a salt is used, hmac is used internally to salt the password. + + If PBKDF2 is wanted it can be enabled by setting the method to + ``pbkdf2:method:iterations`` where iterations is optional:: + + pbkdf2:sha256:80000$salt$hash + pbkdf2:sha256$salt$hash + + :param password: the password to hash. + :param method: the hash method to use (one that hashlib supports). Can + optionally be in the format ``pbkdf2:method:iterations`` + to enable PBKDF2. + :param salt_length: the length of the salt in letters. + """ + salt = gen_salt(salt_length) if method != "plain" else "" + h, actual_method = _hash_internal(method, salt, password) + return f"{actual_method}${salt}${h}" + + +def check_password_hash(pwhash: str, password: str) -> bool: + """Check a password against a given salted and hashed password value. + In order to support unsalted legacy passwords this method supports + plain text passwords, md5 and sha1 hashes (both salted and unsalted). + + Returns `True` if the password matched, `False` otherwise. + + :param pwhash: a hashed string like returned by + :func:`generate_password_hash`. + :param password: the plaintext password to compare against the hash. + """ + if pwhash.count("$") < 2: + return False + + method, salt, hashval = pwhash.split("$", 2) + return hmac.compare_digest(_hash_internal(method, salt, password)[0], hashval) + + +def safe_join(directory: str, *pathnames: str) -> t.Optional[str]: + """Safely join zero or more untrusted path components to a base + directory to avoid escaping the base directory. + + :param directory: The trusted base directory. + :param pathnames: The untrusted path components relative to the + base directory. + :return: A safe path, otherwise ``None``. + """ + if not directory: + # Ensure we end up with ./path if directory="" is given, + # otherwise the first untrusted part could become trusted. + directory = "." + + parts = [directory] + + for filename in pathnames: + if filename != "": + filename = posixpath.normpath(filename) + + if ( + any(sep in filename for sep in _os_alt_seps) + or os.path.isabs(filename) + or filename == ".." + or filename.startswith("../") + ): + return None + + parts.append(filename) + + return posixpath.join(*parts) diff --git a/venv/Lib/site-packages/werkzeug/serving.py b/venv/Lib/site-packages/werkzeug/serving.py new file mode 100644 index 0000000..2a2e74d --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/serving.py @@ -0,0 +1,1069 @@ +"""A WSGI and HTTP server for use **during development only**. This +server is convenient to use, but is not designed to be particularly +stable, secure, or efficient. Use a dedicate WSGI server and HTTP +server when deploying to production. + +It provides features like interactive debugging and code reloading. Use +``run_simple`` to start the server. Put this in a ``run.py`` script: + +.. code-block:: python + + from myapp import create_app + from werkzeug import run_simple +""" +import errno +import io +import os +import socket +import socketserver +import sys +import typing as t +from datetime import datetime as dt +from datetime import timedelta +from datetime import timezone +from http.server import BaseHTTPRequestHandler +from http.server import HTTPServer + +from ._internal import _log +from ._internal import _wsgi_encoding_dance +from .exceptions import InternalServerError +from .urls import uri_to_iri +from .urls import url_parse +from .urls import url_unquote + +try: + import ssl +except ImportError: + + class _SslDummy: + def __getattr__(self, name: str) -> t.Any: + raise RuntimeError( # noqa: B904 + "SSL is unavailable because this Python runtime was not" + " compiled with SSL/TLS support." + ) + + ssl = _SslDummy() # type: ignore + +_log_add_style = True + +if os.name == "nt": + try: + __import__("colorama") + except ImportError: + _log_add_style = False + +can_fork = hasattr(os, "fork") + +if can_fork: + ForkingMixIn = socketserver.ForkingMixIn +else: + + class ForkingMixIn: # type: ignore + pass + + +try: + af_unix = socket.AF_UNIX +except AttributeError: + af_unix = None # type: ignore + +LISTEN_QUEUE = 128 + +_TSSLContextArg = t.Optional[ + t.Union["ssl.SSLContext", t.Tuple[str, t.Optional[str]], "te.Literal['adhoc']"] +] + +if t.TYPE_CHECKING: + import typing_extensions as te # noqa: F401 + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + from cryptography.hazmat.primitives.asymmetric.rsa import ( + RSAPrivateKeyWithSerialization, + ) + from cryptography.x509 import Certificate + + +class DechunkedInput(io.RawIOBase): + """An input stream that handles Transfer-Encoding 'chunked'""" + + def __init__(self, rfile: t.IO[bytes]) -> None: + self._rfile = rfile + self._done = False + self._len = 0 + + def readable(self) -> bool: + return True + + def read_chunk_len(self) -> int: + try: + line = self._rfile.readline().decode("latin1") + _len = int(line.strip(), 16) + except ValueError as e: + raise OSError("Invalid chunk header") from e + if _len < 0: + raise OSError("Negative chunk length not allowed") + return _len + + def readinto(self, buf: bytearray) -> int: # type: ignore + read = 0 + while not self._done and read < len(buf): + if self._len == 0: + # This is the first chunk or we fully consumed the previous + # one. Read the next length of the next chunk + self._len = self.read_chunk_len() + + if self._len == 0: + # Found the final chunk of size 0. The stream is now exhausted, + # but there is still a final newline that should be consumed + self._done = True + + if self._len > 0: + # There is data (left) in this chunk, so append it to the + # buffer. If this operation fully consumes the chunk, this will + # reset self._len to 0. + n = min(len(buf), self._len) + + # If (read + chunk size) becomes more than len(buf), buf will + # grow beyond the original size and read more data than + # required. So only read as much data as can fit in buf. + if read + n > len(buf): + buf[read:] = self._rfile.read(len(buf) - read) + self._len -= len(buf) - read + read = len(buf) + else: + buf[read : read + n] = self._rfile.read(n) + self._len -= n + read += n + + if self._len == 0: + # Skip the terminating newline of a chunk that has been fully + # consumed. This also applies to the 0-sized final chunk + terminator = self._rfile.readline() + if terminator not in (b"\n", b"\r\n", b"\r"): + raise OSError("Missing chunk terminating newline") + + return read + + +class WSGIRequestHandler(BaseHTTPRequestHandler): + """A request handler that implements WSGI dispatching.""" + + server: "BaseWSGIServer" + + @property + def server_version(self) -> str: # type: ignore + from . import __version__ + + return f"Werkzeug/{__version__}" + + def make_environ(self) -> "WSGIEnvironment": + request_url = url_parse(self.path) + url_scheme = "http" if self.server.ssl_context is None else "https" + + if not self.client_address: + self.client_address = ("", 0) + elif isinstance(self.client_address, str): + self.client_address = (self.client_address, 0) + + # If there was no scheme but the path started with two slashes, + # the first segment may have been incorrectly parsed as the + # netloc, prepend it to the path again. + if not request_url.scheme and request_url.netloc: + path_info = f"/{request_url.netloc}{request_url.path}" + else: + path_info = request_url.path + + path_info = url_unquote(path_info) + + environ: "WSGIEnvironment" = { + "wsgi.version": (1, 0), + "wsgi.url_scheme": url_scheme, + "wsgi.input": self.rfile, + "wsgi.errors": sys.stderr, + "wsgi.multithread": self.server.multithread, + "wsgi.multiprocess": self.server.multiprocess, + "wsgi.run_once": False, + "werkzeug.socket": self.connection, + "SERVER_SOFTWARE": self.server_version, + "REQUEST_METHOD": self.command, + "SCRIPT_NAME": "", + "PATH_INFO": _wsgi_encoding_dance(path_info), + "QUERY_STRING": _wsgi_encoding_dance(request_url.query), + # Non-standard, added by mod_wsgi, uWSGI + "REQUEST_URI": _wsgi_encoding_dance(self.path), + # Non-standard, added by gunicorn + "RAW_URI": _wsgi_encoding_dance(self.path), + "REMOTE_ADDR": self.address_string(), + "REMOTE_PORT": self.port_integer(), + "SERVER_NAME": self.server.server_address[0], + "SERVER_PORT": str(self.server.server_address[1]), + "SERVER_PROTOCOL": self.request_version, + } + + for key, value in self.headers.items(): + key = key.upper().replace("-", "_") + value = value.replace("\r\n", "") + if key not in ("CONTENT_TYPE", "CONTENT_LENGTH"): + key = f"HTTP_{key}" + if key in environ: + value = f"{environ[key]},{value}" + environ[key] = value + + if environ.get("HTTP_TRANSFER_ENCODING", "").strip().lower() == "chunked": + environ["wsgi.input_terminated"] = True + environ["wsgi.input"] = DechunkedInput(environ["wsgi.input"]) + + # Per RFC 2616, if the URL is absolute, use that as the host. + # We're using "has a scheme" to indicate an absolute URL. + if request_url.scheme and request_url.netloc: + environ["HTTP_HOST"] = request_url.netloc + + try: + # binary_form=False gives nicer information, but wouldn't be compatible with + # what Nginx or Apache could return. + peer_cert = self.connection.getpeercert(binary_form=True) + if peer_cert is not None: + # Nginx and Apache use PEM format. + environ["SSL_CLIENT_CERT"] = ssl.DER_cert_to_PEM_cert(peer_cert) + except ValueError: + # SSL handshake hasn't finished. + self.server.log("error", "Cannot fetch SSL peer certificate info") + except AttributeError: + # Not using TLS, the socket will not have getpeercert(). + pass + + return environ + + def run_wsgi(self) -> None: + if self.headers.get("Expect", "").lower().strip() == "100-continue": + self.wfile.write(b"HTTP/1.1 100 Continue\r\n\r\n") + + self.environ = environ = self.make_environ() + status_set: t.Optional[str] = None + headers_set: t.Optional[t.List[t.Tuple[str, str]]] = None + status_sent: t.Optional[str] = None + headers_sent: t.Optional[t.List[t.Tuple[str, str]]] = None + chunk_response: bool = False + + def write(data: bytes) -> None: + nonlocal status_sent, headers_sent, chunk_response + assert status_set is not None, "write() before start_response" + assert headers_set is not None, "write() before start_response" + if status_sent is None: + status_sent = status_set + headers_sent = headers_set + try: + code_str, msg = status_sent.split(None, 1) + except ValueError: + code_str, msg = status_sent, "" + code = int(code_str) + self.send_response(code, msg) + header_keys = set() + for key, value in headers_sent: + self.send_header(key, value) + header_keys.add(key.lower()) + + # Use chunked transfer encoding if there is no content + # length. Do not use for 1xx and 204 responses. 304 + # responses and HEAD requests are also excluded, which + # is the more conservative behavior and matches other + # parts of the code. + # https://httpwg.org/specs/rfc7230.html#rfc.section.3.3.1 + if ( + not ( + "content-length" in header_keys + or environ["REQUEST_METHOD"] == "HEAD" + or (100 <= code < 200) + or code in {204, 304} + ) + and self.protocol_version >= "HTTP/1.1" + ): + chunk_response = True + self.send_header("Transfer-Encoding", "chunked") + + # Always close the connection. This disables HTTP/1.1 + # keep-alive connections. They aren't handled well by + # Python's http.server because it doesn't know how to + # drain the stream before the next request line. + self.send_header("Connection", "close") + self.end_headers() + + assert isinstance(data, bytes), "applications must write bytes" + + if data: + if chunk_response: + self.wfile.write(hex(len(data))[2:].encode()) + self.wfile.write(b"\r\n") + + self.wfile.write(data) + + if chunk_response: + self.wfile.write(b"\r\n") + + self.wfile.flush() + + def start_response(status, headers, exc_info=None): # type: ignore + nonlocal status_set, headers_set + if exc_info: + try: + if headers_sent: + raise exc_info[1].with_traceback(exc_info[2]) + finally: + exc_info = None + elif headers_set: + raise AssertionError("Headers already set") + status_set = status + headers_set = headers + return write + + def execute(app: "WSGIApplication") -> None: + application_iter = app(environ, start_response) + try: + for data in application_iter: + write(data) + if not headers_sent: + write(b"") + if chunk_response: + self.wfile.write(b"0\r\n\r\n") + finally: + if hasattr(application_iter, "close"): + application_iter.close() + + try: + execute(self.server.app) + except (ConnectionError, socket.timeout) as e: + self.connection_dropped(e, environ) + except Exception as e: + if self.server.passthrough_errors: + raise + + if status_sent is not None and chunk_response: + self.close_connection = True + + try: + # if we haven't yet sent the headers but they are set + # we roll back to be able to set them again. + if status_sent is None: + status_set = None + headers_set = None + execute(InternalServerError()) + except Exception: + pass + + from .debug.tbtools import DebugTraceback + + msg = DebugTraceback(e).render_traceback_text() + self.server.log("error", f"Error on request:\n{msg}") + + def handle(self) -> None: + """Handles a request ignoring dropped connections.""" + try: + super().handle() + except (ConnectionError, socket.timeout) as e: + self.connection_dropped(e) + except Exception as e: + if self.server.ssl_context is not None and is_ssl_error(e): + self.log_error("SSL error occurred: %s", e) + else: + raise + + def connection_dropped( + self, error: BaseException, environ: t.Optional["WSGIEnvironment"] = None + ) -> None: + """Called if the connection was closed by the client. By default + nothing happens. + """ + + def __getattr__(self, name: str) -> t.Any: + # All HTTP methods are handled by run_wsgi. + if name.startswith("do_"): + return self.run_wsgi + + # All other attributes are forwarded to the base class. + return getattr(super(), name) + + def address_string(self) -> str: + if getattr(self, "environ", None): + return self.environ["REMOTE_ADDR"] # type: ignore + + if not self.client_address: + return "" + + return self.client_address[0] + + def port_integer(self) -> int: + return self.client_address[1] + + def log_request( + self, code: t.Union[int, str] = "-", size: t.Union[int, str] = "-" + ) -> None: + try: + path = uri_to_iri(self.path) + msg = f"{self.command} {path} {self.request_version}" + except AttributeError: + # path isn't set if the requestline was bad + msg = self.requestline + + code = str(code) + + if code[0] == "1": # 1xx - Informational + msg = _ansi_style(msg, "bold") + elif code == "200": # 2xx - Success + pass + elif code == "304": # 304 - Resource Not Modified + msg = _ansi_style(msg, "cyan") + elif code[0] == "3": # 3xx - Redirection + msg = _ansi_style(msg, "green") + elif code == "404": # 404 - Resource Not Found + msg = _ansi_style(msg, "yellow") + elif code[0] == "4": # 4xx - Client Error + msg = _ansi_style(msg, "bold", "red") + else: # 5xx, or any other response + msg = _ansi_style(msg, "bold", "magenta") + + self.log("info", '"%s" %s %s', msg, code, size) + + def log_error(self, format: str, *args: t.Any) -> None: + self.log("error", format, *args) + + def log_message(self, format: str, *args: t.Any) -> None: + self.log("info", format, *args) + + def log(self, type: str, message: str, *args: t.Any) -> None: + _log( + type, + f"{self.address_string()} - - [{self.log_date_time_string()}] {message}\n", + *args, + ) + + +def _ansi_style(value: str, *styles: str) -> str: + if not _log_add_style: + return value + + codes = { + "bold": 1, + "red": 31, + "green": 32, + "yellow": 33, + "magenta": 35, + "cyan": 36, + } + + for style in styles: + value = f"\x1b[{codes[style]}m{value}" + + return f"{value}\x1b[0m" + + +def generate_adhoc_ssl_pair( + cn: t.Optional[str] = None, +) -> t.Tuple["Certificate", "RSAPrivateKeyWithSerialization"]: + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.backends import default_backend + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import rsa + except ImportError: + raise TypeError( + "Using ad-hoc certificates requires the cryptography library." + ) from None + + backend = default_backend() + pkey = rsa.generate_private_key( + public_exponent=65537, key_size=2048, backend=backend + ) + + # pretty damn sure that this is not actually accepted by anyone + if cn is None: + cn = "*" + + subject = x509.Name( + [ + x509.NameAttribute(NameOID.ORGANIZATION_NAME, "Dummy Certificate"), + x509.NameAttribute(NameOID.COMMON_NAME, cn), + ] + ) + + backend = default_backend() + cert = ( + x509.CertificateBuilder() + .subject_name(subject) + .issuer_name(subject) + .public_key(pkey.public_key()) + .serial_number(x509.random_serial_number()) + .not_valid_before(dt.now(timezone.utc)) + .not_valid_after(dt.now(timezone.utc) + timedelta(days=365)) + .add_extension(x509.ExtendedKeyUsage([x509.OID_SERVER_AUTH]), critical=False) + .add_extension(x509.SubjectAlternativeName([x509.DNSName(cn)]), critical=False) + .sign(pkey, hashes.SHA256(), backend) + ) + return cert, pkey + + +def make_ssl_devcert( + base_path: str, host: t.Optional[str] = None, cn: t.Optional[str] = None +) -> t.Tuple[str, str]: + """Creates an SSL key for development. This should be used instead of + the ``'adhoc'`` key which generates a new cert on each server start. + It accepts a path for where it should store the key and cert and + either a host or CN. If a host is given it will use the CN + ``*.host/CN=host``. + + For more information see :func:`run_simple`. + + .. versionadded:: 0.9 + + :param base_path: the path to the certificate and key. The extension + ``.crt`` is added for the certificate, ``.key`` is + added for the key. + :param host: the name of the host. This can be used as an alternative + for the `cn`. + :param cn: the `CN` to use. + """ + + if host is not None: + cn = f"*.{host}/CN={host}" + cert, pkey = generate_adhoc_ssl_pair(cn=cn) + + from cryptography.hazmat.primitives import serialization + + cert_file = f"{base_path}.crt" + pkey_file = f"{base_path}.key" + + with open(cert_file, "wb") as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) + with open(pkey_file, "wb") as f: + f.write( + pkey.private_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PrivateFormat.TraditionalOpenSSL, + encryption_algorithm=serialization.NoEncryption(), + ) + ) + + return cert_file, pkey_file + + +def generate_adhoc_ssl_context() -> "ssl.SSLContext": + """Generates an adhoc SSL context for the development server.""" + import tempfile + import atexit + + cert, pkey = generate_adhoc_ssl_pair() + + from cryptography.hazmat.primitives import serialization + + cert_handle, cert_file = tempfile.mkstemp() + pkey_handle, pkey_file = tempfile.mkstemp() + atexit.register(os.remove, pkey_file) + atexit.register(os.remove, cert_file) + + os.write(cert_handle, cert.public_bytes(serialization.Encoding.PEM)) + os.write( + pkey_handle, + pkey.private_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PrivateFormat.TraditionalOpenSSL, + encryption_algorithm=serialization.NoEncryption(), + ), + ) + + os.close(cert_handle) + os.close(pkey_handle) + ctx = load_ssl_context(cert_file, pkey_file) + return ctx + + +def load_ssl_context( + cert_file: str, pkey_file: t.Optional[str] = None, protocol: t.Optional[int] = None +) -> "ssl.SSLContext": + """Loads SSL context from cert/private key files and optional protocol. + Many parameters are directly taken from the API of + :py:class:`ssl.SSLContext`. + + :param cert_file: Path of the certificate to use. + :param pkey_file: Path of the private key to use. If not given, the key + will be obtained from the certificate file. + :param protocol: A ``PROTOCOL`` constant from the :mod:`ssl` module. + Defaults to :data:`ssl.PROTOCOL_TLS_SERVER`. + """ + if protocol is None: + protocol = ssl.PROTOCOL_TLS_SERVER + + ctx = ssl.SSLContext(protocol) + ctx.load_cert_chain(cert_file, pkey_file) + return ctx + + +def is_ssl_error(error: t.Optional[Exception] = None) -> bool: + """Checks if the given error (or the current one) is an SSL error.""" + if error is None: + error = t.cast(Exception, sys.exc_info()[1]) + return isinstance(error, ssl.SSLError) + + +def select_address_family(host: str, port: int) -> socket.AddressFamily: + """Return ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on + the host and port.""" + if host.startswith("unix://"): + return socket.AF_UNIX + elif ":" in host and hasattr(socket, "AF_INET6"): + return socket.AF_INET6 + return socket.AF_INET + + +def get_sockaddr( + host: str, port: int, family: socket.AddressFamily +) -> t.Union[t.Tuple[str, int], str]: + """Return a fully qualified socket address that can be passed to + :func:`socket.bind`.""" + if family == af_unix: + return host.split("://", 1)[1] + try: + res = socket.getaddrinfo( + host, port, family, socket.SOCK_STREAM, socket.IPPROTO_TCP + ) + except socket.gaierror: + return host, port + return res[0][4] # type: ignore + + +def get_interface_ip(family: socket.AddressFamily) -> str: + """Get the IP address of an external interface. Used when binding to + 0.0.0.0 or ::1 to show a more useful URL. + + :meta private: + """ + # arbitrary private address + host = "fd31:f903:5ab5:1::1" if family == socket.AF_INET6 else "10.253.155.219" + + with socket.socket(family, socket.SOCK_DGRAM) as s: + try: + s.connect((host, 58162)) + except OSError: + return "::1" if family == socket.AF_INET6 else "127.0.0.1" + + return s.getsockname()[0] # type: ignore + + +class BaseWSGIServer(HTTPServer): + """A WSGI server that that handles one request at a time. + + Use :func:`make_server` to create a server instance. + """ + + multithread = False + multiprocess = False + request_queue_size = LISTEN_QUEUE + allow_reuse_address = True + + def __init__( + self, + host: str, + port: int, + app: "WSGIApplication", + handler: t.Optional[t.Type[WSGIRequestHandler]] = None, + passthrough_errors: bool = False, + ssl_context: t.Optional[_TSSLContextArg] = None, + fd: t.Optional[int] = None, + ) -> None: + if handler is None: + handler = WSGIRequestHandler + + # If the handler doesn't directly set a protocol version and + # thread or process workers are used, then allow chunked + # responses and keep-alive connections by enabling HTTP/1.1. + if "protocol_version" not in vars(handler) and ( + self.multithread or self.multiprocess + ): + handler.protocol_version = "HTTP/1.1" + + self.host = host + self.port = port + self.app = app + self.passthrough_errors = passthrough_errors + + self.address_family = address_family = select_address_family(host, port) + server_address = get_sockaddr(host, int(port), address_family) + + # Remove a leftover Unix socket file from a previous run. Don't + # remove a file that was set up by run_simple. + if address_family == af_unix and fd is None: + server_address = t.cast(str, server_address) + + if os.path.exists(server_address): + os.unlink(server_address) + + # Bind and activate will be handled manually, it should only + # happen if we're not using a socket that was already set up. + super().__init__( + server_address, # type: ignore[arg-type] + handler, + bind_and_activate=False, + ) + + if fd is None: + # No existing socket descriptor, do bind_and_activate=True. + try: + self.server_bind() + self.server_activate() + except OSError as e: + # Catch connection issues and show them without the traceback. Show + # extra instructions for address not found, and for macOS. + self.server_close() + print(e.strerror, file=sys.stderr) + + if e.errno == errno.EADDRINUSE: + print( + f"Port {port} is in use by another program. Either identify and" + " stop that program, or start the server with a different" + " port.", + file=sys.stderr, + ) + + if sys.platform == "darwin" and port == 5000: + print( + "On macOS, try disabling the 'AirPlay Receiver' service" + " from System Preferences -> Sharing.", + file=sys.stderr, + ) + + sys.exit(1) + except BaseException: + self.server_close() + raise + else: + # TCPServer automatically opens a socket even if bind_and_activate is False. + # Close it to silence a ResourceWarning. + self.server_close() + + # Use the passed in socket directly. + self.socket = socket.fromfd(fd, address_family, socket.SOCK_STREAM) + self.server_address = self.socket.getsockname() + + if address_family != af_unix: + # If port was 0, this will record the bound port. + self.port = self.server_address[1] + + if ssl_context is not None: + if isinstance(ssl_context, tuple): + ssl_context = load_ssl_context(*ssl_context) + elif ssl_context == "adhoc": + ssl_context = generate_adhoc_ssl_context() + + self.socket = ssl_context.wrap_socket(self.socket, server_side=True) + self.ssl_context: t.Optional["ssl.SSLContext"] = ssl_context + else: + self.ssl_context = None + + def log(self, type: str, message: str, *args: t.Any) -> None: + _log(type, message, *args) + + def serve_forever(self, poll_interval: float = 0.5) -> None: + try: + super().serve_forever(poll_interval=poll_interval) + except KeyboardInterrupt: + pass + finally: + self.server_close() + + def handle_error( + self, request: t.Any, client_address: t.Union[t.Tuple[str, int], str] + ) -> None: + if self.passthrough_errors: + raise + + return super().handle_error(request, client_address) + + def log_startup(self) -> None: + """Show information about the address when starting the server.""" + dev_warning = ( + "WARNING: This is a development server. Do not use it in a production" + " deployment. Use a production WSGI server instead." + ) + dev_warning = _ansi_style(dev_warning, "bold", "red") + messages = [dev_warning] + + if self.address_family == af_unix: + messages.append(f" * Running on {self.host}") + else: + scheme = "http" if self.ssl_context is None else "https" + display_hostname = self.host + + if self.host in {"0.0.0.0", "::"}: + messages.append(f" * Running on all addresses ({self.host})") + + if self.host == "0.0.0.0": + localhost = "127.0.0.1" + display_hostname = get_interface_ip(socket.AF_INET) + else: + localhost = "[::1]" + display_hostname = get_interface_ip(socket.AF_INET6) + + messages.append(f" * Running on {scheme}://{localhost}:{self.port}") + + if ":" in display_hostname: + display_hostname = f"[{display_hostname}]" + + messages.append(f" * Running on {scheme}://{display_hostname}:{self.port}") + + _log("info", "\n".join(messages)) + + +class ThreadedWSGIServer(socketserver.ThreadingMixIn, BaseWSGIServer): + """A WSGI server that handles concurrent requests in separate + threads. + + Use :func:`make_server` to create a server instance. + """ + + multithread = True + daemon_threads = True + + +class ForkingWSGIServer(ForkingMixIn, BaseWSGIServer): + """A WSGI server that handles concurrent requests in separate forked + processes. + + Use :func:`make_server` to create a server instance. + """ + + multiprocess = True + + def __init__( + self, + host: str, + port: int, + app: "WSGIApplication", + processes: int = 40, + handler: t.Optional[t.Type[WSGIRequestHandler]] = None, + passthrough_errors: bool = False, + ssl_context: t.Optional[_TSSLContextArg] = None, + fd: t.Optional[int] = None, + ) -> None: + if not can_fork: + raise ValueError("Your platform does not support forking.") + + super().__init__(host, port, app, handler, passthrough_errors, ssl_context, fd) + self.max_children = processes + + +def make_server( + host: str, + port: int, + app: "WSGIApplication", + threaded: bool = False, + processes: int = 1, + request_handler: t.Optional[t.Type[WSGIRequestHandler]] = None, + passthrough_errors: bool = False, + ssl_context: t.Optional[_TSSLContextArg] = None, + fd: t.Optional[int] = None, +) -> BaseWSGIServer: + """Create an appropriate WSGI server instance based on the value of + ``threaded`` and ``processes``. + + This is called from :func:`run_simple`, but can be used separately + to have access to the server object, such as to run it in a separate + thread. + + See :func:`run_simple` for parameter docs. + """ + if threaded and processes > 1: + raise ValueError("Cannot have a multi-thread and multi-process server.") + + if threaded: + return ThreadedWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + + if processes > 1: + return ForkingWSGIServer( + host, + port, + app, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + + return BaseWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + + +def is_running_from_reloader() -> bool: + """Check if the server is running as a subprocess within the + Werkzeug reloader. + + .. versionadded:: 0.10 + """ + return os.environ.get("WERKZEUG_RUN_MAIN") == "true" + + +def run_simple( + hostname: str, + port: int, + application: "WSGIApplication", + use_reloader: bool = False, + use_debugger: bool = False, + use_evalex: bool = True, + extra_files: t.Optional[t.Iterable[str]] = None, + exclude_patterns: t.Optional[t.Iterable[str]] = None, + reloader_interval: int = 1, + reloader_type: str = "auto", + threaded: bool = False, + processes: int = 1, + request_handler: t.Optional[t.Type[WSGIRequestHandler]] = None, + static_files: t.Optional[t.Dict[str, t.Union[str, t.Tuple[str, str]]]] = None, + passthrough_errors: bool = False, + ssl_context: t.Optional[_TSSLContextArg] = None, +) -> None: + """Start a development server for a WSGI application. Various + optional features can be enabled. + + .. warning:: + + Do not use the development server when deploying to production. + It is intended for use only during local development. It is not + designed to be particularly efficient, stable, or secure. + + :param hostname: The host to bind to, for example ``'localhost'``. + Can be a domain, IPv4 or IPv6 address, or file path starting + with ``unix://`` for a Unix socket. + :param port: The port to bind to, for example ``8080``. Using ``0`` + tells the OS to pick a random free port. + :param application: The WSGI application to run. + :param use_reloader: Use a reloader process to restart the server + process when files are changed. + :param use_debugger: Use Werkzeug's debugger, which will show + formatted tracebacks on unhandled exceptions. + :param use_evalex: Make the debugger interactive. A Python terminal + can be opened for any frame in the traceback. Some protection is + provided by requiring a PIN, but this should never be enabled + on a publicly visible server. + :param extra_files: The reloader will watch these files for changes + in addition to Python modules. For example, watch a + configuration file. + :param exclude_patterns: The reloader will ignore changes to any + files matching these :mod:`fnmatch` patterns. For example, + ignore cache files. + :param reloader_interval: How often the reloader tries to check for + changes. + :param reloader_type: The reloader to use. The ``'stat'`` reloader + is built in, but may require significant CPU to watch files. The + ``'watchdog'`` reloader is much more efficient but requires + installing the ``watchdog`` package first. + :param threaded: Handle concurrent requests using threads. Cannot be + used with ``processes``. + :param processes: Handle concurrent requests using up to this number + of processes. Cannot be used with ``threaded``. + :param request_handler: Use a different + :class:`~BaseHTTPServer.BaseHTTPRequestHandler` subclass to + handle requests. + :param static_files: A dict mapping URL prefixes to directories to + serve static files from using + :class:`~werkzeug.middleware.SharedDataMiddleware`. + :param passthrough_errors: Don't catch unhandled exceptions at the + server level, let the serve crash instead. If ``use_debugger`` + is enabled, the debugger will still catch such errors. + :param ssl_context: Configure TLS to serve over HTTPS. Can be an + :class:`ssl.SSLContext` object, a ``(cert_file, key_file)`` + tuple to create a typical context, or the string ``'adhoc'`` to + generate a temporary self-signed certificate. + + .. versionchanged:: 2.1 + Instructions are shown for dealing with an "address already in + use" error. + + .. versionchanged:: 2.1 + Running on ``0.0.0.0`` or ``::`` shows the loopback IP in + addition to a real IP. + + .. versionchanged:: 2.1 + The command-line interface was removed. + + .. versionchanged:: 2.0 + Running on ``0.0.0.0`` or ``::`` shows a real IP address that + was bound as well as a warning not to run the development server + in production. + + .. versionchanged:: 2.0 + The ``exclude_patterns`` parameter was added. + + .. versionchanged:: 0.15 + Bind to a Unix socket by passing a ``hostname`` that starts with + ``unix://``. + + .. versionchanged:: 0.10 + Improved the reloader and added support for changing the backend + through the ``reloader_type`` parameter. + + .. versionchanged:: 0.9 + A command-line interface was added. + + .. versionchanged:: 0.8 + ``ssl_context`` can be a tuple of paths to the certificate and + private key files. + + .. versionchanged:: 0.6 + The ``ssl_context`` parameter was added. + + .. versionchanged:: 0.5 + The ``static_files`` and ``passthrough_errors`` parameters were + added. + """ + if not isinstance(port, int): + raise TypeError("port must be an integer") + + if static_files: + from .middleware.shared_data import SharedDataMiddleware + + application = SharedDataMiddleware(application, static_files) + + if use_debugger: + from .debug import DebuggedApplication + + application = DebuggedApplication(application, evalex=use_evalex) + + if not is_running_from_reloader(): + fd = None + else: + fd = int(os.environ["WERKZEUG_SERVER_FD"]) + + srv = make_server( + hostname, + port, + application, + threaded, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + srv.socket.set_inheritable(True) + os.environ["WERKZEUG_SERVER_FD"] = str(srv.fileno()) + + if not is_running_from_reloader(): + srv.log_startup() + _log("info", _ansi_style("Press CTRL+C to quit", "yellow")) + + if use_reloader: + from ._reloader import run_with_reloader + + try: + run_with_reloader( + srv.serve_forever, + extra_files=extra_files, + exclude_patterns=exclude_patterns, + interval=reloader_interval, + reloader_type=reloader_type, + ) + finally: + srv.server_close() + else: + srv.serve_forever() diff --git a/venv/Lib/site-packages/werkzeug/test.py b/venv/Lib/site-packages/werkzeug/test.py new file mode 100644 index 0000000..996f438 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/test.py @@ -0,0 +1,1338 @@ +import mimetypes +import sys +import typing as t +from collections import defaultdict +from datetime import datetime +from datetime import timedelta +from http.cookiejar import CookieJar +from io import BytesIO +from itertools import chain +from random import random +from tempfile import TemporaryFile +from time import time +from urllib.request import Request as _UrllibRequest + +from ._internal import _get_environ +from ._internal import _make_encode_wrapper +from ._internal import _wsgi_decoding_dance +from ._internal import _wsgi_encoding_dance +from .datastructures import Authorization +from .datastructures import CallbackDict +from .datastructures import CombinedMultiDict +from .datastructures import EnvironHeaders +from .datastructures import FileMultiDict +from .datastructures import Headers +from .datastructures import MultiDict +from .http import dump_cookie +from .http import dump_options_header +from .http import parse_options_header +from .sansio.multipart import Data +from .sansio.multipart import Epilogue +from .sansio.multipart import Field +from .sansio.multipart import File +from .sansio.multipart import MultipartEncoder +from .sansio.multipart import Preamble +from .urls import iri_to_uri +from .urls import url_encode +from .urls import url_fix +from .urls import url_parse +from .urls import url_unparse +from .urls import url_unquote +from .utils import cached_property +from .utils import get_content_type +from .wrappers.request import Request +from .wrappers.response import Response +from .wsgi import ClosingIterator +from .wsgi import get_current_url + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +def stream_encode_multipart( + data: t.Mapping[str, t.Any], + use_tempfile: bool = True, + threshold: int = 1024 * 500, + boundary: t.Optional[str] = None, + charset: str = "utf-8", +) -> t.Tuple[t.IO[bytes], int, str]: + """Encode a dict of values (either strings or file descriptors or + :class:`FileStorage` objects.) into a multipart encoded string stored + in a file descriptor. + """ + if boundary is None: + boundary = f"---------------WerkzeugFormPart_{time()}{random()}" + + stream: t.IO[bytes] = BytesIO() + total_length = 0 + on_disk = False + write_binary: t.Callable[[bytes], int] + + if use_tempfile: + + def write_binary(s: bytes) -> int: + nonlocal stream, total_length, on_disk + + if on_disk: + return stream.write(s) + else: + length = len(s) + + if length + total_length <= threshold: + stream.write(s) + else: + new_stream = t.cast(t.IO[bytes], TemporaryFile("wb+")) + new_stream.write(stream.getvalue()) # type: ignore + new_stream.write(s) + stream = new_stream + on_disk = True + + total_length += length + return length + + else: + write_binary = stream.write + + encoder = MultipartEncoder(boundary.encode()) + write_binary(encoder.send_event(Preamble(data=b""))) + for key, value in _iter_data(data): + reader = getattr(value, "read", None) + if reader is not None: + filename = getattr(value, "filename", getattr(value, "name", None)) + content_type = getattr(value, "content_type", None) + if content_type is None: + content_type = ( + filename + and mimetypes.guess_type(filename)[0] + or "application/octet-stream" + ) + headers = value.headers + headers.update([("Content-Type", content_type)]) + if filename is None: + write_binary(encoder.send_event(Field(name=key, headers=headers))) + else: + write_binary( + encoder.send_event( + File(name=key, filename=filename, headers=headers) + ) + ) + while True: + chunk = reader(16384) + + if not chunk: + break + + write_binary(encoder.send_event(Data(data=chunk, more_data=True))) + else: + if not isinstance(value, str): + value = str(value) + write_binary(encoder.send_event(Field(name=key, headers=Headers()))) + write_binary( + encoder.send_event(Data(data=value.encode(charset), more_data=False)) + ) + + write_binary(encoder.send_event(Epilogue(data=b""))) + + length = stream.tell() + stream.seek(0) + return stream, length, boundary + + +def encode_multipart( + values: t.Mapping[str, t.Any], + boundary: t.Optional[str] = None, + charset: str = "utf-8", +) -> t.Tuple[str, bytes]: + """Like `stream_encode_multipart` but returns a tuple in the form + (``boundary``, ``data``) where data is bytes. + """ + stream, length, boundary = stream_encode_multipart( + values, use_tempfile=False, boundary=boundary, charset=charset + ) + return boundary, stream.read() + + +class _TestCookieHeaders: + """A headers adapter for cookielib""" + + def __init__(self, headers: t.Union[Headers, t.List[t.Tuple[str, str]]]) -> None: + self.headers = headers + + def getheaders(self, name: str) -> t.Iterable[str]: + headers = [] + name = name.lower() + for k, v in self.headers: + if k.lower() == name: + headers.append(v) + return headers + + def get_all( + self, name: str, default: t.Optional[t.Iterable[str]] = None + ) -> t.Iterable[str]: + headers = self.getheaders(name) + + if not headers: + return default # type: ignore + + return headers + + +class _TestCookieResponse: + """Something that looks like a httplib.HTTPResponse, but is actually just an + adapter for our test responses to make them available for cookielib. + """ + + def __init__(self, headers: t.Union[Headers, t.List[t.Tuple[str, str]]]) -> None: + self.headers = _TestCookieHeaders(headers) + + def info(self) -> _TestCookieHeaders: + return self.headers + + +class _TestCookieJar(CookieJar): + """A cookielib.CookieJar modified to inject and read cookie headers from + and to wsgi environments, and wsgi application responses. + """ + + def inject_wsgi(self, environ: "WSGIEnvironment") -> None: + """Inject the cookies as client headers into the server's wsgi + environment. + """ + cvals = [f"{c.name}={c.value}" for c in self] + + if cvals: + environ["HTTP_COOKIE"] = "; ".join(cvals) + else: + environ.pop("HTTP_COOKIE", None) + + def extract_wsgi( + self, + environ: "WSGIEnvironment", + headers: t.Union[Headers, t.List[t.Tuple[str, str]]], + ) -> None: + """Extract the server's set-cookie headers as cookies into the + cookie jar. + """ + self.extract_cookies( + _TestCookieResponse(headers), # type: ignore + _UrllibRequest(get_current_url(environ)), + ) + + +def _iter_data(data: t.Mapping[str, t.Any]) -> t.Iterator[t.Tuple[str, t.Any]]: + """Iterate over a mapping that might have a list of values, yielding + all key, value pairs. Almost like iter_multi_items but only allows + lists, not tuples, of values so tuples can be used for files. + """ + if isinstance(data, MultiDict): + yield from data.items(multi=True) + else: + for key, value in data.items(): + if isinstance(value, list): + for v in value: + yield key, v + else: + yield key, value + + +_TAnyMultiDict = t.TypeVar("_TAnyMultiDict", bound=MultiDict) + + +class EnvironBuilder: + """This class can be used to conveniently create a WSGI environment + for testing purposes. It can be used to quickly create WSGI environments + or request objects from arbitrary data. + + The signature of this class is also used in some other places as of + Werkzeug 0.5 (:func:`create_environ`, :meth:`Response.from_values`, + :meth:`Client.open`). Because of this most of the functionality is + available through the constructor alone. + + Files and regular form data can be manipulated independently of each + other with the :attr:`form` and :attr:`files` attributes, but are + passed with the same argument to the constructor: `data`. + + `data` can be any of these values: + + - a `str` or `bytes` object: The object is converted into an + :attr:`input_stream`, the :attr:`content_length` is set and you have to + provide a :attr:`content_type`. + - a `dict` or :class:`MultiDict`: The keys have to be strings. The values + have to be either any of the following objects, or a list of any of the + following objects: + + - a :class:`file`-like object: These are converted into + :class:`FileStorage` objects automatically. + - a `tuple`: The :meth:`~FileMultiDict.add_file` method is called + with the key and the unpacked `tuple` items as positional + arguments. + - a `str`: The string is set as form data for the associated key. + - a file-like object: The object content is loaded in memory and then + handled like a regular `str` or a `bytes`. + + :param path: the path of the request. In the WSGI environment this will + end up as `PATH_INFO`. If the `query_string` is not defined + and there is a question mark in the `path` everything after + it is used as query string. + :param base_url: the base URL is a URL that is used to extract the WSGI + URL scheme, host (server name + server port) and the + script root (`SCRIPT_NAME`). + :param query_string: an optional string or dict with URL parameters. + :param method: the HTTP method to use, defaults to `GET`. + :param input_stream: an optional input stream. Do not specify this and + `data`. As soon as an input stream is set you can't + modify :attr:`args` and :attr:`files` unless you + set the :attr:`input_stream` to `None` again. + :param content_type: The content type for the request. As of 0.5 you + don't have to provide this when specifying files + and form data via `data`. + :param content_length: The content length for the request. You don't + have to specify this when providing data via + `data`. + :param errors_stream: an optional error stream that is used for + `wsgi.errors`. Defaults to :data:`stderr`. + :param multithread: controls `wsgi.multithread`. Defaults to `False`. + :param multiprocess: controls `wsgi.multiprocess`. Defaults to `False`. + :param run_once: controls `wsgi.run_once`. Defaults to `False`. + :param headers: an optional list or :class:`Headers` object of headers. + :param data: a string or dict of form data or a file-object. + See explanation above. + :param json: An object to be serialized and assigned to ``data``. + Defaults the content type to ``"application/json"``. + Serialized with the function assigned to :attr:`json_dumps`. + :param environ_base: an optional dict of environment defaults. + :param environ_overrides: an optional dict of environment overrides. + :param charset: the charset used to encode string data. + :param auth: An authorization object to use for the + ``Authorization`` header value. A ``(username, password)`` tuple + is a shortcut for ``Basic`` authorization. + + .. versionchanged:: 2.1 + ``CONTENT_TYPE`` and ``CONTENT_LENGTH`` are not duplicated as + header keys in the environ. + + .. versionchanged:: 2.0 + ``REQUEST_URI`` and ``RAW_URI`` is the full raw URI including + the query string, not only the path. + + .. versionchanged:: 2.0 + The default :attr:`request_class` is ``Request`` instead of + ``BaseRequest``. + + .. versionadded:: 2.0 + Added the ``auth`` parameter. + + .. versionadded:: 0.15 + The ``json`` param and :meth:`json_dumps` method. + + .. versionadded:: 0.15 + The environ has keys ``REQUEST_URI`` and ``RAW_URI`` containing + the path before percent-decoding. This is not part of the WSGI + PEP, but many WSGI servers include it. + + .. versionchanged:: 0.6 + ``path`` and ``base_url`` can now be unicode strings that are + encoded with :func:`iri_to_uri`. + """ + + #: the server protocol to use. defaults to HTTP/1.1 + server_protocol = "HTTP/1.1" + + #: the wsgi version to use. defaults to (1, 0) + wsgi_version = (1, 0) + + #: The default request class used by :meth:`get_request`. + request_class = Request + + import json + + #: The serialization function used when ``json`` is passed. + json_dumps = staticmethod(json.dumps) + del json + + _args: t.Optional[MultiDict] + _query_string: t.Optional[str] + _input_stream: t.Optional[t.IO[bytes]] + _form: t.Optional[MultiDict] + _files: t.Optional[FileMultiDict] + + def __init__( + self, + path: str = "/", + base_url: t.Optional[str] = None, + query_string: t.Optional[t.Union[t.Mapping[str, str], str]] = None, + method: str = "GET", + input_stream: t.Optional[t.IO[bytes]] = None, + content_type: t.Optional[str] = None, + content_length: t.Optional[int] = None, + errors_stream: t.Optional[t.IO[str]] = None, + multithread: bool = False, + multiprocess: bool = False, + run_once: bool = False, + headers: t.Optional[t.Union[Headers, t.Iterable[t.Tuple[str, str]]]] = None, + data: t.Optional[ + t.Union[t.IO[bytes], str, bytes, t.Mapping[str, t.Any]] + ] = None, + environ_base: t.Optional[t.Mapping[str, t.Any]] = None, + environ_overrides: t.Optional[t.Mapping[str, t.Any]] = None, + charset: str = "utf-8", + mimetype: t.Optional[str] = None, + json: t.Optional[t.Mapping[str, t.Any]] = None, + auth: t.Optional[t.Union[Authorization, t.Tuple[str, str]]] = None, + ) -> None: + path_s = _make_encode_wrapper(path) + if query_string is not None and path_s("?") in path: + raise ValueError("Query string is defined in the path and as an argument") + request_uri = url_parse(path) + if query_string is None and path_s("?") in path: + query_string = request_uri.query + self.charset = charset + self.path = iri_to_uri(request_uri.path) + self.request_uri = path + if base_url is not None: + base_url = url_fix(iri_to_uri(base_url, charset), charset) + self.base_url = base_url # type: ignore + if isinstance(query_string, (bytes, str)): + self.query_string = query_string + else: + if query_string is None: + query_string = MultiDict() + elif not isinstance(query_string, MultiDict): + query_string = MultiDict(query_string) + self.args = query_string + self.method = method + if headers is None: + headers = Headers() + elif not isinstance(headers, Headers): + headers = Headers(headers) + self.headers = headers + if content_type is not None: + self.content_type = content_type + if errors_stream is None: + errors_stream = sys.stderr + self.errors_stream = errors_stream + self.multithread = multithread + self.multiprocess = multiprocess + self.run_once = run_once + self.environ_base = environ_base + self.environ_overrides = environ_overrides + self.input_stream = input_stream + self.content_length = content_length + self.closed = False + + if auth is not None: + if isinstance(auth, tuple): + auth = Authorization( + "basic", {"username": auth[0], "password": auth[1]} + ) + + self.headers.set("Authorization", auth.to_header()) + + if json is not None: + if data is not None: + raise TypeError("can't provide both json and data") + + data = self.json_dumps(json) + + if self.content_type is None: + self.content_type = "application/json" + + if data: + if input_stream is not None: + raise TypeError("can't provide input stream and data") + if hasattr(data, "read"): + data = data.read() + if isinstance(data, str): + data = data.encode(self.charset) + if isinstance(data, bytes): + self.input_stream = BytesIO(data) + if self.content_length is None: + self.content_length = len(data) + else: + for key, value in _iter_data(data): + if isinstance(value, (tuple, dict)) or hasattr(value, "read"): + self._add_file_from_data(key, value) + else: + self.form.setlistdefault(key).append(value) + + if mimetype is not None: + self.mimetype = mimetype + + @classmethod + def from_environ( + cls, environ: "WSGIEnvironment", **kwargs: t.Any + ) -> "EnvironBuilder": + """Turn an environ dict back into a builder. Any extra kwargs + override the args extracted from the environ. + + .. versionchanged:: 2.0 + Path and query values are passed through the WSGI decoding + dance to avoid double encoding. + + .. versionadded:: 0.15 + """ + headers = Headers(EnvironHeaders(environ)) + out = { + "path": _wsgi_decoding_dance(environ["PATH_INFO"]), + "base_url": cls._make_base_url( + environ["wsgi.url_scheme"], + headers.pop("Host"), + _wsgi_decoding_dance(environ["SCRIPT_NAME"]), + ), + "query_string": _wsgi_decoding_dance(environ["QUERY_STRING"]), + "method": environ["REQUEST_METHOD"], + "input_stream": environ["wsgi.input"], + "content_type": headers.pop("Content-Type", None), + "content_length": headers.pop("Content-Length", None), + "errors_stream": environ["wsgi.errors"], + "multithread": environ["wsgi.multithread"], + "multiprocess": environ["wsgi.multiprocess"], + "run_once": environ["wsgi.run_once"], + "headers": headers, + } + out.update(kwargs) + return cls(**out) + + def _add_file_from_data( + self, + key: str, + value: t.Union[ + t.IO[bytes], t.Tuple[t.IO[bytes], str], t.Tuple[t.IO[bytes], str, str] + ], + ) -> None: + """Called in the EnvironBuilder to add files from the data dict.""" + if isinstance(value, tuple): + self.files.add_file(key, *value) + else: + self.files.add_file(key, value) + + @staticmethod + def _make_base_url(scheme: str, host: str, script_root: str) -> str: + return url_unparse((scheme, host, script_root, "", "")).rstrip("/") + "/" + + @property + def base_url(self) -> str: + """The base URL is used to extract the URL scheme, host name, + port, and root path. + """ + return self._make_base_url(self.url_scheme, self.host, self.script_root) + + @base_url.setter + def base_url(self, value: t.Optional[str]) -> None: + if value is None: + scheme = "http" + netloc = "localhost" + script_root = "" + else: + scheme, netloc, script_root, qs, anchor = url_parse(value) + if qs or anchor: + raise ValueError("base url must not contain a query string or fragment") + self.script_root = script_root.rstrip("/") + self.host = netloc + self.url_scheme = scheme + + @property + def content_type(self) -> t.Optional[str]: + """The content type for the request. Reflected from and to + the :attr:`headers`. Do not set if you set :attr:`files` or + :attr:`form` for auto detection. + """ + ct = self.headers.get("Content-Type") + if ct is None and not self._input_stream: + if self._files: + return "multipart/form-data" + if self._form: + return "application/x-www-form-urlencoded" + return None + return ct + + @content_type.setter + def content_type(self, value: t.Optional[str]) -> None: + if value is None: + self.headers.pop("Content-Type", None) + else: + self.headers["Content-Type"] = value + + @property + def mimetype(self) -> t.Optional[str]: + """The mimetype (content type without charset etc.) + + .. versionadded:: 0.14 + """ + ct = self.content_type + return ct.split(";")[0].strip() if ct else None + + @mimetype.setter + def mimetype(self, value: str) -> None: + self.content_type = get_content_type(value, self.charset) + + @property + def mimetype_params(self) -> t.Mapping[str, str]: + """The mimetype parameters as dict. For example if the + content type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + + .. versionadded:: 0.14 + """ + + def on_update(d: CallbackDict) -> None: + self.headers["Content-Type"] = dump_options_header(self.mimetype, d) + + d = parse_options_header(self.headers.get("content-type", ""))[1] + return CallbackDict(d, on_update) + + @property + def content_length(self) -> t.Optional[int]: + """The content length as integer. Reflected from and to the + :attr:`headers`. Do not set if you set :attr:`files` or + :attr:`form` for auto detection. + """ + return self.headers.get("Content-Length", type=int) + + @content_length.setter + def content_length(self, value: t.Optional[int]) -> None: + if value is None: + self.headers.pop("Content-Length", None) + else: + self.headers["Content-Length"] = str(value) + + def _get_form(self, name: str, storage: t.Type[_TAnyMultiDict]) -> _TAnyMultiDict: + """Common behavior for getting the :attr:`form` and + :attr:`files` properties. + + :param name: Name of the internal cached attribute. + :param storage: Storage class used for the data. + """ + if self.input_stream is not None: + raise AttributeError("an input stream is defined") + + rv = getattr(self, name) + + if rv is None: + rv = storage() + setattr(self, name, rv) + + return rv # type: ignore + + def _set_form(self, name: str, value: MultiDict) -> None: + """Common behavior for setting the :attr:`form` and + :attr:`files` properties. + + :param name: Name of the internal cached attribute. + :param value: Value to assign to the attribute. + """ + self._input_stream = None + setattr(self, name, value) + + @property + def form(self) -> MultiDict: + """A :class:`MultiDict` of form values.""" + return self._get_form("_form", MultiDict) + + @form.setter + def form(self, value: MultiDict) -> None: + self._set_form("_form", value) + + @property + def files(self) -> FileMultiDict: + """A :class:`FileMultiDict` of uploaded files. Use + :meth:`~FileMultiDict.add_file` to add new files. + """ + return self._get_form("_files", FileMultiDict) + + @files.setter + def files(self, value: FileMultiDict) -> None: + self._set_form("_files", value) + + @property + def input_stream(self) -> t.Optional[t.IO[bytes]]: + """An optional input stream. This is mutually exclusive with + setting :attr:`form` and :attr:`files`, setting it will clear + those. Do not provide this if the method is not ``POST`` or + another method that has a body. + """ + return self._input_stream + + @input_stream.setter + def input_stream(self, value: t.Optional[t.IO[bytes]]) -> None: + self._input_stream = value + self._form = None + self._files = None + + @property + def query_string(self) -> str: + """The query string. If you set this to a string + :attr:`args` will no longer be available. + """ + if self._query_string is None: + if self._args is not None: + return url_encode(self._args, charset=self.charset) + return "" + return self._query_string + + @query_string.setter + def query_string(self, value: t.Optional[str]) -> None: + self._query_string = value + self._args = None + + @property + def args(self) -> MultiDict: + """The URL arguments as :class:`MultiDict`.""" + if self._query_string is not None: + raise AttributeError("a query string is defined") + if self._args is None: + self._args = MultiDict() + return self._args + + @args.setter + def args(self, value: t.Optional[MultiDict]) -> None: + self._query_string = None + self._args = value + + @property + def server_name(self) -> str: + """The server name (read-only, use :attr:`host` to set)""" + return self.host.split(":", 1)[0] + + @property + def server_port(self) -> int: + """The server port as integer (read-only, use :attr:`host` to set)""" + pieces = self.host.split(":", 1) + + if len(pieces) == 2: + try: + return int(pieces[1]) + except ValueError: + pass + + if self.url_scheme == "https": + return 443 + return 80 + + def __del__(self) -> None: + try: + self.close() + except Exception: + pass + + def close(self) -> None: + """Closes all files. If you put real :class:`file` objects into the + :attr:`files` dict you can call this method to automatically close + them all in one go. + """ + if self.closed: + return + try: + files = self.files.values() + except AttributeError: + files = () # type: ignore + for f in files: + try: + f.close() + except Exception: + pass + self.closed = True + + def get_environ(self) -> "WSGIEnvironment": + """Return the built environ. + + .. versionchanged:: 0.15 + The content type and length headers are set based on + input stream detection. Previously this only set the WSGI + keys. + """ + input_stream = self.input_stream + content_length = self.content_length + + mimetype = self.mimetype + content_type = self.content_type + + if input_stream is not None: + start_pos = input_stream.tell() + input_stream.seek(0, 2) + end_pos = input_stream.tell() + input_stream.seek(start_pos) + content_length = end_pos - start_pos + elif mimetype == "multipart/form-data": + input_stream, content_length, boundary = stream_encode_multipart( + CombinedMultiDict([self.form, self.files]), charset=self.charset + ) + content_type = f'{mimetype}; boundary="{boundary}"' + elif mimetype == "application/x-www-form-urlencoded": + form_encoded = url_encode(self.form, charset=self.charset).encode("ascii") + content_length = len(form_encoded) + input_stream = BytesIO(form_encoded) + else: + input_stream = BytesIO() + + result: "WSGIEnvironment" = {} + if self.environ_base: + result.update(self.environ_base) + + def _path_encode(x: str) -> str: + return _wsgi_encoding_dance(url_unquote(x, self.charset), self.charset) + + raw_uri = _wsgi_encoding_dance(self.request_uri, self.charset) + result.update( + { + "REQUEST_METHOD": self.method, + "SCRIPT_NAME": _path_encode(self.script_root), + "PATH_INFO": _path_encode(self.path), + "QUERY_STRING": _wsgi_encoding_dance(self.query_string, self.charset), + # Non-standard, added by mod_wsgi, uWSGI + "REQUEST_URI": raw_uri, + # Non-standard, added by gunicorn + "RAW_URI": raw_uri, + "SERVER_NAME": self.server_name, + "SERVER_PORT": str(self.server_port), + "HTTP_HOST": self.host, + "SERVER_PROTOCOL": self.server_protocol, + "wsgi.version": self.wsgi_version, + "wsgi.url_scheme": self.url_scheme, + "wsgi.input": input_stream, + "wsgi.errors": self.errors_stream, + "wsgi.multithread": self.multithread, + "wsgi.multiprocess": self.multiprocess, + "wsgi.run_once": self.run_once, + } + ) + + headers = self.headers.copy() + # Don't send these as headers, they're part of the environ. + headers.remove("Content-Type") + headers.remove("Content-Length") + + if content_type is not None: + result["CONTENT_TYPE"] = content_type + + if content_length is not None: + result["CONTENT_LENGTH"] = str(content_length) + + combined_headers = defaultdict(list) + + for key, value in headers.to_wsgi_list(): + combined_headers[f"HTTP_{key.upper().replace('-', '_')}"].append(value) + + for key, values in combined_headers.items(): + result[key] = ", ".join(values) + + if self.environ_overrides: + result.update(self.environ_overrides) + + return result + + def get_request(self, cls: t.Optional[t.Type[Request]] = None) -> Request: + """Returns a request with the data. If the request class is not + specified :attr:`request_class` is used. + + :param cls: The request wrapper to use. + """ + if cls is None: + cls = self.request_class + + return cls(self.get_environ()) + + +class ClientRedirectError(Exception): + """If a redirect loop is detected when using follow_redirects=True with + the :cls:`Client`, then this exception is raised. + """ + + +class Client: + """This class allows you to send requests to a wrapped application. + + The use_cookies parameter indicates whether cookies should be stored and + sent for subsequent requests. This is True by default, but passing False + will disable this behaviour. + + If you want to request some subdomain of your application you may set + `allow_subdomain_redirects` to `True` as if not no external redirects + are allowed. + + .. versionchanged:: 2.1 + Removed deprecated behavior of treating the response as a + tuple. All data is available as properties on the returned + response object. + + .. versionchanged:: 2.0 + ``response_wrapper`` is always a subclass of + :class:``TestResponse``. + + .. versionchanged:: 0.5 + Added the ``use_cookies`` parameter. + """ + + def __init__( + self, + application: "WSGIApplication", + response_wrapper: t.Optional[t.Type["Response"]] = None, + use_cookies: bool = True, + allow_subdomain_redirects: bool = False, + ) -> None: + self.application = application + + if response_wrapper in {None, Response}: + response_wrapper = TestResponse + elif not isinstance(response_wrapper, TestResponse): + response_wrapper = type( + "WrapperTestResponse", + (TestResponse, response_wrapper), # type: ignore + {}, + ) + + self.response_wrapper = t.cast(t.Type["TestResponse"], response_wrapper) + + if use_cookies: + self.cookie_jar: t.Optional[_TestCookieJar] = _TestCookieJar() + else: + self.cookie_jar = None + + self.allow_subdomain_redirects = allow_subdomain_redirects + + def set_cookie( + self, + server_name: str, + key: str, + value: str = "", + max_age: t.Optional[t.Union[timedelta, int]] = None, + expires: t.Optional[t.Union[str, datetime, int, float]] = None, + path: str = "/", + domain: t.Optional[str] = None, + secure: bool = False, + httponly: bool = False, + samesite: t.Optional[str] = None, + charset: str = "utf-8", + ) -> None: + """Sets a cookie in the client's cookie jar. The server name + is required and has to match the one that is also passed to + the open call. + """ + assert self.cookie_jar is not None, "cookies disabled" + header = dump_cookie( + key, + value, + max_age, + expires, + path, + domain, + secure, + httponly, + charset, + samesite=samesite, + ) + environ = create_environ(path, base_url=f"http://{server_name}") + headers = [("Set-Cookie", header)] + self.cookie_jar.extract_wsgi(environ, headers) + + def delete_cookie( + self, + server_name: str, + key: str, + path: str = "/", + domain: t.Optional[str] = None, + secure: bool = False, + httponly: bool = False, + samesite: t.Optional[str] = None, + ) -> None: + """Deletes a cookie in the test client.""" + self.set_cookie( + server_name, + key, + expires=0, + max_age=0, + path=path, + domain=domain, + secure=secure, + httponly=httponly, + samesite=samesite, + ) + + def run_wsgi_app( + self, environ: "WSGIEnvironment", buffered: bool = False + ) -> t.Tuple[t.Iterable[bytes], str, Headers]: + """Runs the wrapped WSGI app with the given environment. + + :meta private: + """ + if self.cookie_jar is not None: + self.cookie_jar.inject_wsgi(environ) + + rv = run_wsgi_app(self.application, environ, buffered=buffered) + + if self.cookie_jar is not None: + self.cookie_jar.extract_wsgi(environ, rv[2]) + + return rv + + def resolve_redirect( + self, response: "TestResponse", buffered: bool = False + ) -> "TestResponse": + """Perform a new request to the location given by the redirect + response to the previous request. + + :meta private: + """ + scheme, netloc, path, qs, anchor = url_parse(response.location) + builder = EnvironBuilder.from_environ( + response.request.environ, path=path, query_string=qs + ) + + to_name_parts = netloc.split(":", 1)[0].split(".") + from_name_parts = builder.server_name.split(".") + + if to_name_parts != [""]: + # The new location has a host, use it for the base URL. + builder.url_scheme = scheme + builder.host = netloc + else: + # A local redirect with autocorrect_location_header=False + # doesn't have a host, so use the request's host. + to_name_parts = from_name_parts + + # Explain why a redirect to a different server name won't be followed. + if to_name_parts != from_name_parts: + if to_name_parts[-len(from_name_parts) :] == from_name_parts: + if not self.allow_subdomain_redirects: + raise RuntimeError("Following subdomain redirects is not enabled.") + else: + raise RuntimeError("Following external redirects is not supported.") + + path_parts = path.split("/") + root_parts = builder.script_root.split("/") + + if path_parts[: len(root_parts)] == root_parts: + # Strip the script root from the path. + builder.path = path[len(builder.script_root) :] + else: + # The new location is not under the script root, so use the + # whole path and clear the previous root. + builder.path = path + builder.script_root = "" + + # Only 307 and 308 preserve all of the original request. + if response.status_code not in {307, 308}: + # HEAD is preserved, everything else becomes GET. + if builder.method != "HEAD": + builder.method = "GET" + + # Clear the body and the headers that describe it. + + if builder.input_stream is not None: + builder.input_stream.close() + builder.input_stream = None + + builder.content_type = None + builder.content_length = None + builder.headers.pop("Transfer-Encoding", None) + + return self.open(builder, buffered=buffered) + + def open( + self, + *args: t.Any, + buffered: bool = False, + follow_redirects: bool = False, + **kwargs: t.Any, + ) -> "TestResponse": + """Generate an environ dict from the given arguments, make a + request to the application using it, and return the response. + + :param args: Passed to :class:`EnvironBuilder` to create the + environ for the request. If a single arg is passed, it can + be an existing :class:`EnvironBuilder` or an environ dict. + :param buffered: Convert the iterator returned by the app into + a list. If the iterator has a ``close()`` method, it is + called automatically. + :param follow_redirects: Make additional requests to follow HTTP + redirects until a non-redirect status is returned. + :attr:`TestResponse.history` lists the intermediate + responses. + + .. versionchanged:: 2.1 + Removed the ``as_tuple`` parameter. + + .. versionchanged:: 2.0 + ``as_tuple`` is deprecated and will be removed in Werkzeug + 2.1. Use :attr:`TestResponse.request` and + ``request.environ`` instead. + + .. versionchanged:: 2.0 + The request input stream is closed when calling + ``response.close()``. Input streams for redirects are + automatically closed. + + .. versionchanged:: 0.5 + If a dict is provided as file in the dict for the ``data`` + parameter the content type has to be called ``content_type`` + instead of ``mimetype``. This change was made for + consistency with :class:`werkzeug.FileWrapper`. + + .. versionchanged:: 0.5 + Added the ``follow_redirects`` parameter. + """ + request: t.Optional["Request"] = None + + if not kwargs and len(args) == 1: + arg = args[0] + + if isinstance(arg, EnvironBuilder): + request = arg.get_request() + elif isinstance(arg, dict): + request = EnvironBuilder.from_environ(arg).get_request() + elif isinstance(arg, Request): + request = arg + + if request is None: + builder = EnvironBuilder(*args, **kwargs) + + try: + request = builder.get_request() + finally: + builder.close() + + response = self.run_wsgi_app(request.environ, buffered=buffered) + response = self.response_wrapper(*response, request=request) + + redirects = set() + history: t.List["TestResponse"] = [] + + if not follow_redirects: + return response + + while response.status_code in { + 301, + 302, + 303, + 305, + 307, + 308, + }: + # Exhaust intermediate response bodies to ensure middleware + # that returns an iterator runs any cleanup code. + if not buffered: + response.make_sequence() + response.close() + + new_redirect_entry = (response.location, response.status_code) + + if new_redirect_entry in redirects: + raise ClientRedirectError( + f"Loop detected: A {response.status_code} redirect" + f" to {response.location} was already made." + ) + + redirects.add(new_redirect_entry) + response.history = tuple(history) + history.append(response) + response = self.resolve_redirect(response, buffered=buffered) + else: + # This is the final request after redirects. + response.history = tuple(history) + # Close the input stream when closing the response, in case + # the input is an open temporary file. + response.call_on_close(request.input_stream.close) + return response + + def get(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``GET``.""" + kw["method"] = "GET" + return self.open(*args, **kw) + + def post(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``POST``.""" + kw["method"] = "POST" + return self.open(*args, **kw) + + def put(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``PUT``.""" + kw["method"] = "PUT" + return self.open(*args, **kw) + + def delete(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``DELETE``.""" + kw["method"] = "DELETE" + return self.open(*args, **kw) + + def patch(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``PATCH``.""" + kw["method"] = "PATCH" + return self.open(*args, **kw) + + def options(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``OPTIONS``.""" + kw["method"] = "OPTIONS" + return self.open(*args, **kw) + + def head(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``HEAD``.""" + kw["method"] = "HEAD" + return self.open(*args, **kw) + + def trace(self, *args: t.Any, **kw: t.Any) -> "TestResponse": + """Call :meth:`open` with ``method`` set to ``TRACE``.""" + kw["method"] = "TRACE" + return self.open(*args, **kw) + + def __repr__(self) -> str: + return f"<{type(self).__name__} {self.application!r}>" + + +def create_environ(*args: t.Any, **kwargs: t.Any) -> "WSGIEnvironment": + """Create a new WSGI environ dict based on the values passed. The first + parameter should be the path of the request which defaults to '/'. The + second one can either be an absolute path (in that case the host is + localhost:80) or a full path to the request with scheme, netloc port and + the path to the script. + + This accepts the same arguments as the :class:`EnvironBuilder` + constructor. + + .. versionchanged:: 0.5 + This function is now a thin wrapper over :class:`EnvironBuilder` which + was added in 0.5. The `headers`, `environ_base`, `environ_overrides` + and `charset` parameters were added. + """ + builder = EnvironBuilder(*args, **kwargs) + + try: + return builder.get_environ() + finally: + builder.close() + + +def run_wsgi_app( + app: "WSGIApplication", environ: "WSGIEnvironment", buffered: bool = False +) -> t.Tuple[t.Iterable[bytes], str, Headers]: + """Return a tuple in the form (app_iter, status, headers) of the + application output. This works best if you pass it an application that + returns an iterator all the time. + + Sometimes applications may use the `write()` callable returned + by the `start_response` function. This tries to resolve such edge + cases automatically. But if you don't get the expected output you + should set `buffered` to `True` which enforces buffering. + + If passed an invalid WSGI application the behavior of this function is + undefined. Never pass non-conforming WSGI applications to this function. + + :param app: the application to execute. + :param buffered: set to `True` to enforce buffering. + :return: tuple in the form ``(app_iter, status, headers)`` + """ + # Copy environ to ensure any mutations by the app (ProxyFix, for + # example) don't affect subsequent requests (such as redirects). + environ = _get_environ(environ).copy() + status: str + response: t.Optional[t.Tuple[str, t.List[t.Tuple[str, str]]]] = None + buffer: t.List[bytes] = [] + + def start_response(status, headers, exc_info=None): # type: ignore + nonlocal response + + if exc_info: + try: + raise exc_info[1].with_traceback(exc_info[2]) + finally: + exc_info = None + + response = (status, headers) + return buffer.append + + app_rv = app(environ, start_response) + close_func = getattr(app_rv, "close", None) + app_iter: t.Iterable[bytes] = iter(app_rv) + + # when buffering we emit the close call early and convert the + # application iterator into a regular list + if buffered: + try: + app_iter = list(app_iter) + finally: + if close_func is not None: + close_func() + + # otherwise we iterate the application iter until we have a response, chain + # the already received data with the already collected data and wrap it in + # a new `ClosingIterator` if we need to restore a `close` callable from the + # original return value. + else: + for item in app_iter: + buffer.append(item) + + if response is not None: + break + + if buffer: + app_iter = chain(buffer, app_iter) + + if close_func is not None and app_iter is not app_rv: + app_iter = ClosingIterator(app_iter, close_func) + + status, headers = response # type: ignore + return app_iter, status, Headers(headers) + + +class TestResponse(Response): + """:class:`~werkzeug.wrappers.Response` subclass that provides extra + information about requests made with the test :class:`Client`. + + Test client requests will always return an instance of this class. + If a custom response class is passed to the client, it is + subclassed along with this to support test information. + + If the test request included large files, or if the application is + serving a file, call :meth:`close` to close any open files and + prevent Python showing a ``ResourceWarning``. + + .. versionchanged:: 2.2 + Set the ``default_mimetype`` to None to prevent a mimetype being + assumed if missing. + + .. versionchanged:: 2.1 + Removed deprecated behavior for treating the response instance + as a tuple. + + .. versionadded:: 2.0 + Test client methods always return instances of this class. + """ + + default_mimetype = None + # Don't assume a mimetype, instead use whatever the response provides + + request: Request + """A request object with the environ used to make the request that + resulted in this response. + """ + + history: t.Tuple["TestResponse", ...] + """A list of intermediate responses. Populated when the test request + is made with ``follow_redirects`` enabled. + """ + + # Tell Pytest to ignore this, it's not a test class. + __test__ = False + + def __init__( + self, + response: t.Iterable[bytes], + status: str, + headers: Headers, + request: Request, + history: t.Tuple["TestResponse"] = (), # type: ignore + **kwargs: t.Any, + ) -> None: + super().__init__(response, status, headers, **kwargs) + self.request = request + self.history = history + self._compat_tuple = response, status, headers + + @cached_property + def text(self) -> str: + """The response data as text. A shortcut for + ``response.get_data(as_text=True)``. + + .. versionadded:: 2.1 + """ + return self.get_data(as_text=True) diff --git a/venv/Lib/site-packages/werkzeug/testapp.py b/venv/Lib/site-packages/werkzeug/testapp.py new file mode 100644 index 0000000..0d7ffbb --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/testapp.py @@ -0,0 +1,241 @@ +"""A small application that can be used to test a WSGI server and check +it for WSGI compliance. +""" +import base64 +import os +import sys +import typing as t +from textwrap import wrap + +from markupsafe import escape + +from . import __version__ as _werkzeug_version +from .wrappers.request import Request +from .wrappers.response import Response + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIEnvironment + + +logo = Response( + base64.b64decode( + """ +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 +=""" + ), + mimetype="image/png", +) + + +TEMPLATE = """\ + + +WSGI Information + +
    + +

    WSGI Information

    +

    + This page displays all available information about the WSGI server and + the underlying Python interpreter. +

    Python Interpreter

    + + + + + + +
    Python Version + %(python_version)s +
    Platform + %(platform)s [%(os)s] +
    API Version + %(api_version)s +
    Byteorder + %(byteorder)s +
    Werkzeug Version + %(werkzeug_version)s +
    +

    WSGI Environment

    + %(wsgi_env)s
    +

    Installed Eggs

    +

    + The following python packages were installed on the system as + Python eggs: +

      %(python_eggs)s
    +

    System Path

    +

    + The following paths are the current contents of the load path. The + following entries are looked up for Python packages. Note that not + all items in this path are folders. Gray and underlined items are + entries pointing to invalid resources or used by custom import hooks + such as the zip importer. +

    + Items with a bright background were expanded for display from a relative + path. If you encounter such paths in the output you might want to check + your setup as relative paths are usually problematic in multithreaded + environments. +

      %(sys_path)s
    +
    +""" + + +def iter_sys_path() -> t.Iterator[t.Tuple[str, bool, bool]]: + if os.name == "posix": + + def strip(x: str) -> str: + prefix = os.path.expanduser("~") + if x.startswith(prefix): + x = f"~{x[len(prefix) :]}" + return x + + else: + + def strip(x: str) -> str: + return x + + cwd = os.path.abspath(os.getcwd()) + for item in sys.path: + path = os.path.join(cwd, item or os.path.curdir) + yield strip(os.path.normpath(path)), not os.path.isdir(path), path != item + + +def render_testapp(req: Request) -> bytes: + try: + import pkg_resources + except ImportError: + eggs: t.Iterable[t.Any] = () + else: + eggs = sorted( + pkg_resources.working_set, + key=lambda x: x.project_name.lower(), # type: ignore + ) + python_eggs = [] + for egg in eggs: + try: + version = egg.version + except (ValueError, AttributeError): + version = "unknown" + python_eggs.append( + f"
  • {escape(egg.project_name)} [{escape(version)}]" + ) + + wsgi_env = [] + sorted_environ = sorted(req.environ.items(), key=lambda x: repr(x[0]).lower()) + for key, value in sorted_environ: + value = "".join(wrap(str(escape(repr(value))))) + wsgi_env.append(f"{escape(key)}{value}") + + sys_path = [] + for item, virtual, expanded in iter_sys_path(): + class_ = [] + if virtual: + class_.append("virtual") + if expanded: + class_.append("exp") + class_ = f' class="{" ".join(class_)}"' if class_ else "" + sys_path.append(f"{escape(item)}") + + return ( + TEMPLATE + % { + "python_version": "
    ".join(escape(sys.version).splitlines()), + "platform": escape(sys.platform), + "os": escape(os.name), + "api_version": sys.api_version, + "byteorder": sys.byteorder, + "werkzeug_version": _werkzeug_version, + "python_eggs": "\n".join(python_eggs), + "wsgi_env": "\n".join(wsgi_env), + "sys_path": "\n".join(sys_path), + } + ).encode("utf-8") + + +def test_app( + environ: "WSGIEnvironment", start_response: "StartResponse" +) -> t.Iterable[bytes]: + """Simple test application that dumps the environment. You can use + it to check if Werkzeug is working properly: + + .. sourcecode:: pycon + + >>> from werkzeug.serving import run_simple + >>> from werkzeug.testapp import test_app + >>> run_simple('localhost', 3000, test_app) + * Running on http://localhost:3000/ + + The application displays important information from the WSGI environment, + the Python interpreter and the installed libraries. + """ + req = Request(environ, populate_request=False) + if req.args.get("resource") == "logo": + response = logo + else: + response = Response(render_testapp(req), mimetype="text/html") + return response(environ, start_response) + + +if __name__ == "__main__": + from .serving import run_simple + + run_simple("localhost", 5000, test_app, use_reloader=True) diff --git a/venv/Lib/site-packages/werkzeug/urls.py b/venv/Lib/site-packages/werkzeug/urls.py new file mode 100644 index 0000000..67c08b0 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/urls.py @@ -0,0 +1,1067 @@ +"""Functions for working with URLs. + +Contains implementations of functions from :mod:`urllib.parse` that +handle bytes and strings. +""" +import codecs +import os +import re +import typing as t + +from ._internal import _check_str_tuple +from ._internal import _decode_idna +from ._internal import _encode_idna +from ._internal import _make_encode_wrapper +from ._internal import _to_str + +if t.TYPE_CHECKING: + from . import datastructures as ds + +# A regular expression for what a valid schema looks like +_scheme_re = re.compile(r"^[a-zA-Z0-9+-.]+$") + +# Characters that are safe in any part of an URL. +_always_safe = frozenset( + bytearray( + b"abcdefghijklmnopqrstuvwxyz" + b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + b"0123456789" + b"-._~" + b"$!'()*+,;" # RFC3986 sub-delims set, not including query string delimiters &= + ) +) + +_hexdigits = "0123456789ABCDEFabcdef" +_hextobyte = { + f"{a}{b}".encode("ascii"): int(f"{a}{b}", 16) + for a in _hexdigits + for b in _hexdigits +} +_bytetohex = [f"%{char:02X}".encode("ascii") for char in range(256)] + + +class _URLTuple(t.NamedTuple): + scheme: str + netloc: str + path: str + query: str + fragment: str + + +class BaseURL(_URLTuple): + """Superclass of :py:class:`URL` and :py:class:`BytesURL`.""" + + __slots__ = () + _at: str + _colon: str + _lbracket: str + _rbracket: str + + def __str__(self) -> str: + return self.to_url() + + def replace(self, **kwargs: t.Any) -> "BaseURL": + """Return an URL with the same values, except for those parameters + given new values by whichever keyword arguments are specified.""" + return self._replace(**kwargs) + + @property + def host(self) -> t.Optional[str]: + """The host part of the URL if available, otherwise `None`. The + host is either the hostname or the IP address mentioned in the + URL. It will not contain the port. + """ + return self._split_host()[0] + + @property + def ascii_host(self) -> t.Optional[str]: + """Works exactly like :attr:`host` but will return a result that + is restricted to ASCII. If it finds a netloc that is not ASCII + it will attempt to idna decode it. This is useful for socket + operations when the URL might include internationalized characters. + """ + rv = self.host + if rv is not None and isinstance(rv, str): + try: + rv = _encode_idna(rv) # type: ignore + except UnicodeError: + rv = rv.encode("ascii", "ignore") # type: ignore + return _to_str(rv, "ascii", "ignore") + + @property + def port(self) -> t.Optional[int]: + """The port in the URL as an integer if it was present, `None` + otherwise. This does not fill in default ports. + """ + try: + rv = int(_to_str(self._split_host()[1])) + if 0 <= rv <= 65535: + return rv + except (ValueError, TypeError): + pass + return None + + @property + def auth(self) -> t.Optional[str]: + """The authentication part in the URL if available, `None` + otherwise. + """ + return self._split_netloc()[0] + + @property + def username(self) -> t.Optional[str]: + """The username if it was part of the URL, `None` otherwise. + This undergoes URL decoding and will always be a string. + """ + rv = self._split_auth()[0] + if rv is not None: + return _url_unquote_legacy(rv) + return None + + @property + def raw_username(self) -> t.Optional[str]: + """The username if it was part of the URL, `None` otherwise. + Unlike :attr:`username` this one is not being decoded. + """ + return self._split_auth()[0] + + @property + def password(self) -> t.Optional[str]: + """The password if it was part of the URL, `None` otherwise. + This undergoes URL decoding and will always be a string. + """ + rv = self._split_auth()[1] + if rv is not None: + return _url_unquote_legacy(rv) + return None + + @property + def raw_password(self) -> t.Optional[str]: + """The password if it was part of the URL, `None` otherwise. + Unlike :attr:`password` this one is not being decoded. + """ + return self._split_auth()[1] + + def decode_query(self, *args: t.Any, **kwargs: t.Any) -> "ds.MultiDict[str, str]": + """Decodes the query part of the URL. Ths is a shortcut for + calling :func:`url_decode` on the query argument. The arguments and + keyword arguments are forwarded to :func:`url_decode` unchanged. + """ + return url_decode(self.query, *args, **kwargs) + + def join(self, *args: t.Any, **kwargs: t.Any) -> "BaseURL": + """Joins this URL with another one. This is just a convenience + function for calling into :meth:`url_join` and then parsing the + return value again. + """ + return url_parse(url_join(self, *args, **kwargs)) + + def to_url(self) -> str: + """Returns a URL string or bytes depending on the type of the + information stored. This is just a convenience function + for calling :meth:`url_unparse` for this URL. + """ + return url_unparse(self) + + def encode_netloc(self) -> str: + """Encodes the netloc part to an ASCII safe URL as bytes.""" + rv = self.ascii_host or "" + if ":" in rv: + rv = f"[{rv}]" + port = self.port + if port is not None: + rv = f"{rv}:{port}" + auth = ":".join( + filter( + None, + [ + url_quote(self.raw_username or "", "utf-8", "strict", "/:%"), + url_quote(self.raw_password or "", "utf-8", "strict", "/:%"), + ], + ) + ) + if auth: + rv = f"{auth}@{rv}" + return rv + + def decode_netloc(self) -> str: + """Decodes the netloc part into a string.""" + rv = _decode_idna(self.host or "") + + if ":" in rv: + rv = f"[{rv}]" + port = self.port + if port is not None: + rv = f"{rv}:{port}" + auth = ":".join( + filter( + None, + [ + _url_unquote_legacy(self.raw_username or "", "/:%@"), + _url_unquote_legacy(self.raw_password or "", "/:%@"), + ], + ) + ) + if auth: + rv = f"{auth}@{rv}" + return rv + + def to_uri_tuple(self) -> "BaseURL": + """Returns a :class:`BytesURL` tuple that holds a URI. This will + encode all the information in the URL properly to ASCII using the + rules a web browser would follow. + + It's usually more interesting to directly call :meth:`iri_to_uri` which + will return a string. + """ + return url_parse(iri_to_uri(self)) + + def to_iri_tuple(self) -> "BaseURL": + """Returns a :class:`URL` tuple that holds a IRI. This will try + to decode as much information as possible in the URL without + losing information similar to how a web browser does it for the + URL bar. + + It's usually more interesting to directly call :meth:`uri_to_iri` which + will return a string. + """ + return url_parse(uri_to_iri(self)) + + def get_file_location( + self, pathformat: t.Optional[str] = None + ) -> t.Tuple[t.Optional[str], t.Optional[str]]: + """Returns a tuple with the location of the file in the form + ``(server, location)``. If the netloc is empty in the URL or + points to localhost, it's represented as ``None``. + + The `pathformat` by default is autodetection but needs to be set + when working with URLs of a specific system. The supported values + are ``'windows'`` when working with Windows or DOS paths and + ``'posix'`` when working with posix paths. + + If the URL does not point to a local file, the server and location + are both represented as ``None``. + + :param pathformat: The expected format of the path component. + Currently ``'windows'`` and ``'posix'`` are + supported. Defaults to ``None`` which is + autodetect. + """ + if self.scheme != "file": + return None, None + + path = url_unquote(self.path) + host = self.netloc or None + + if pathformat is None: + if os.name == "nt": + pathformat = "windows" + else: + pathformat = "posix" + + if pathformat == "windows": + if path[:1] == "/" and path[1:2].isalpha() and path[2:3] in "|:": + path = f"{path[1:2]}:{path[3:]}" + windows_share = path[:3] in ("\\" * 3, "/" * 3) + import ntpath + + path = ntpath.normpath(path) + # Windows shared drives are represented as ``\\host\\directory``. + # That results in a URL like ``file://///host/directory``, and a + # path like ``///host/directory``. We need to special-case this + # because the path contains the hostname. + if windows_share and host is None: + parts = path.lstrip("\\").split("\\", 1) + if len(parts) == 2: + host, path = parts + else: + host = parts[0] + path = "" + elif pathformat == "posix": + import posixpath + + path = posixpath.normpath(path) + else: + raise TypeError(f"Invalid path format {pathformat!r}") + + if host in ("127.0.0.1", "::1", "localhost"): + host = None + + return host, path + + def _split_netloc(self) -> t.Tuple[t.Optional[str], str]: + if self._at in self.netloc: + auth, _, netloc = self.netloc.partition(self._at) + return auth, netloc + return None, self.netloc + + def _split_auth(self) -> t.Tuple[t.Optional[str], t.Optional[str]]: + auth = self._split_netloc()[0] + if not auth: + return None, None + if self._colon not in auth: + return auth, None + + username, _, password = auth.partition(self._colon) + return username, password + + def _split_host(self) -> t.Tuple[t.Optional[str], t.Optional[str]]: + rv = self._split_netloc()[1] + if not rv: + return None, None + + if not rv.startswith(self._lbracket): + if self._colon in rv: + host, _, port = rv.partition(self._colon) + return host, port + return rv, None + + idx = rv.find(self._rbracket) + if idx < 0: + return rv, None + + host = rv[1:idx] + rest = rv[idx + 1 :] + if rest.startswith(self._colon): + return host, rest[1:] + return host, None + + +class URL(BaseURL): + """Represents a parsed URL. This behaves like a regular tuple but + also has some extra attributes that give further insight into the + URL. + """ + + __slots__ = () + _at = "@" + _colon = ":" + _lbracket = "[" + _rbracket = "]" + + def encode(self, charset: str = "utf-8", errors: str = "replace") -> "BytesURL": + """Encodes the URL to a tuple made out of bytes. The charset is + only being used for the path, query and fragment. + """ + return BytesURL( + self.scheme.encode("ascii"), # type: ignore + self.encode_netloc(), + self.path.encode(charset, errors), # type: ignore + self.query.encode(charset, errors), # type: ignore + self.fragment.encode(charset, errors), # type: ignore + ) + + +class BytesURL(BaseURL): + """Represents a parsed URL in bytes.""" + + __slots__ = () + _at = b"@" # type: ignore + _colon = b":" # type: ignore + _lbracket = b"[" # type: ignore + _rbracket = b"]" # type: ignore + + def __str__(self) -> str: + return self.to_url().decode("utf-8", "replace") # type: ignore + + def encode_netloc(self) -> bytes: # type: ignore + """Returns the netloc unchanged as bytes.""" + return self.netloc # type: ignore + + def decode(self, charset: str = "utf-8", errors: str = "replace") -> "URL": + """Decodes the URL to a tuple made out of strings. The charset is + only being used for the path, query and fragment. + """ + return URL( + self.scheme.decode("ascii"), # type: ignore + self.decode_netloc(), + self.path.decode(charset, errors), # type: ignore + self.query.decode(charset, errors), # type: ignore + self.fragment.decode(charset, errors), # type: ignore + ) + + +_unquote_maps: t.Dict[t.FrozenSet[int], t.Dict[bytes, int]] = {frozenset(): _hextobyte} + + +def _unquote_to_bytes( + string: t.Union[str, bytes], unsafe: t.Union[str, bytes] = "" +) -> bytes: + if isinstance(string, str): + string = string.encode("utf-8") + + if isinstance(unsafe, str): + unsafe = unsafe.encode("utf-8") + + unsafe = frozenset(bytearray(unsafe)) + groups = iter(string.split(b"%")) + result = bytearray(next(groups, b"")) + + try: + hex_to_byte = _unquote_maps[unsafe] + except KeyError: + hex_to_byte = _unquote_maps[unsafe] = { + h: b for h, b in _hextobyte.items() if b not in unsafe + } + + for group in groups: + code = group[:2] + + if code in hex_to_byte: + result.append(hex_to_byte[code]) + result.extend(group[2:]) + else: + result.append(37) # % + result.extend(group) + + return bytes(result) + + +def _url_encode_impl( + obj: t.Union[t.Mapping[str, str], t.Iterable[t.Tuple[str, str]]], + charset: str, + sort: bool, + key: t.Optional[t.Callable[[t.Tuple[str, str]], t.Any]], +) -> t.Iterator[str]: + from .datastructures import iter_multi_items + + iterable: t.Iterable[t.Tuple[str, str]] = iter_multi_items(obj) + + if sort: + iterable = sorted(iterable, key=key) + + for key_str, value_str in iterable: + if value_str is None: + continue + + if not isinstance(key_str, bytes): + key_bytes = str(key_str).encode(charset) + else: + key_bytes = key_str + + if not isinstance(value_str, bytes): + value_bytes = str(value_str).encode(charset) + else: + value_bytes = value_str + + yield f"{_fast_url_quote_plus(key_bytes)}={_fast_url_quote_plus(value_bytes)}" + + +def _url_unquote_legacy(value: str, unsafe: str = "") -> str: + try: + return url_unquote(value, charset="utf-8", errors="strict", unsafe=unsafe) + except UnicodeError: + return url_unquote(value, charset="latin1", unsafe=unsafe) + + +def url_parse( + url: str, scheme: t.Optional[str] = None, allow_fragments: bool = True +) -> BaseURL: + """Parses a URL from a string into a :class:`URL` tuple. If the URL + is lacking a scheme it can be provided as second argument. Otherwise, + it is ignored. Optionally fragments can be stripped from the URL + by setting `allow_fragments` to `False`. + + The inverse of this function is :func:`url_unparse`. + + :param url: the URL to parse. + :param scheme: the default schema to use if the URL is schemaless. + :param allow_fragments: if set to `False` a fragment will be removed + from the URL. + """ + s = _make_encode_wrapper(url) + is_text_based = isinstance(url, str) + + if scheme is None: + scheme = s("") + netloc = query = fragment = s("") + i = url.find(s(":")) + if i > 0 and _scheme_re.match(_to_str(url[:i], errors="replace")): + # make sure "iri" is not actually a port number (in which case + # "scheme" is really part of the path) + rest = url[i + 1 :] + if not rest or any(c not in s("0123456789") for c in rest): + # not a port number + scheme, url = url[:i].lower(), rest + + if url[:2] == s("//"): + delim = len(url) + for c in s("/?#"): + wdelim = url.find(c, 2) + if wdelim >= 0: + delim = min(delim, wdelim) + netloc, url = url[2:delim], url[delim:] + if (s("[") in netloc and s("]") not in netloc) or ( + s("]") in netloc and s("[") not in netloc + ): + raise ValueError("Invalid IPv6 URL") + + if allow_fragments and s("#") in url: + url, fragment = url.split(s("#"), 1) + if s("?") in url: + url, query = url.split(s("?"), 1) + + result_type = URL if is_text_based else BytesURL + return result_type(scheme, netloc, url, query, fragment) + + +def _make_fast_url_quote( + charset: str = "utf-8", + errors: str = "strict", + safe: t.Union[str, bytes] = "/:", + unsafe: t.Union[str, bytes] = "", +) -> t.Callable[[bytes], str]: + """Precompile the translation table for a URL encoding function. + + Unlike :func:`url_quote`, the generated function only takes the + string to quote. + + :param charset: The charset to encode the result with. + :param errors: How to handle encoding errors. + :param safe: An optional sequence of safe characters to never encode. + :param unsafe: An optional sequence of unsafe characters to always encode. + """ + if isinstance(safe, str): + safe = safe.encode(charset, errors) + + if isinstance(unsafe, str): + unsafe = unsafe.encode(charset, errors) + + safe = (frozenset(bytearray(safe)) | _always_safe) - frozenset(bytearray(unsafe)) + table = [chr(c) if c in safe else f"%{c:02X}" for c in range(256)] + + def quote(string: bytes) -> str: + return "".join([table[c] for c in string]) + + return quote + + +_fast_url_quote = _make_fast_url_quote() +_fast_quote_plus = _make_fast_url_quote(safe=" ", unsafe="+") + + +def _fast_url_quote_plus(string: bytes) -> str: + return _fast_quote_plus(string).replace(" ", "+") + + +def url_quote( + string: t.Union[str, bytes], + charset: str = "utf-8", + errors: str = "strict", + safe: t.Union[str, bytes] = "/:", + unsafe: t.Union[str, bytes] = "", +) -> str: + """URL encode a single string with a given encoding. + + :param s: the string to quote. + :param charset: the charset to be used. + :param safe: an optional sequence of safe characters. + :param unsafe: an optional sequence of unsafe characters. + + .. versionadded:: 0.9.2 + The `unsafe` parameter was added. + """ + if not isinstance(string, (str, bytes, bytearray)): + string = str(string) + if isinstance(string, str): + string = string.encode(charset, errors) + if isinstance(safe, str): + safe = safe.encode(charset, errors) + if isinstance(unsafe, str): + unsafe = unsafe.encode(charset, errors) + safe = (frozenset(bytearray(safe)) | _always_safe) - frozenset(bytearray(unsafe)) + rv = bytearray() + for char in bytearray(string): + if char in safe: + rv.append(char) + else: + rv.extend(_bytetohex[char]) + return bytes(rv).decode(charset) + + +def url_quote_plus( + string: str, charset: str = "utf-8", errors: str = "strict", safe: str = "" +) -> str: + """URL encode a single string with the given encoding and convert + whitespace to "+". + + :param s: The string to quote. + :param charset: The charset to be used. + :param safe: An optional sequence of safe characters. + """ + return url_quote(string, charset, errors, safe + " ", "+").replace(" ", "+") + + +def url_unparse(components: t.Tuple[str, str, str, str, str]) -> str: + """The reverse operation to :meth:`url_parse`. This accepts arbitrary + as well as :class:`URL` tuples and returns a URL as a string. + + :param components: the parsed URL as tuple which should be converted + into a URL string. + """ + _check_str_tuple(components) + scheme, netloc, path, query, fragment = components + s = _make_encode_wrapper(scheme) + url = s("") + + # We generally treat file:///x and file:/x the same which is also + # what browsers seem to do. This also allows us to ignore a schema + # register for netloc utilization or having to differentiate between + # empty and missing netloc. + if netloc or (scheme and path.startswith(s("/"))): + if path and path[:1] != s("/"): + path = s("/") + path + url = s("//") + (netloc or s("")) + path + elif path: + url += path + if scheme: + url = scheme + s(":") + url + if query: + url = url + s("?") + query + if fragment: + url = url + s("#") + fragment + return url + + +def url_unquote( + s: t.Union[str, bytes], + charset: str = "utf-8", + errors: str = "replace", + unsafe: str = "", +) -> str: + """URL decode a single string with a given encoding. If the charset + is set to `None` no decoding is performed and raw bytes are + returned. + + :param s: the string to unquote. + :param charset: the charset of the query string. If set to `None` + no decoding will take place. + :param errors: the error handling for the charset decoding. + """ + rv = _unquote_to_bytes(s, unsafe) + if charset is None: + return rv + return rv.decode(charset, errors) + + +def url_unquote_plus( + s: t.Union[str, bytes], charset: str = "utf-8", errors: str = "replace" +) -> str: + """URL decode a single string with the given `charset` and decode "+" to + whitespace. + + Per default encoding errors are ignored. If you want a different behavior + you can set `errors` to ``'replace'`` or ``'strict'``. + + :param s: The string to unquote. + :param charset: the charset of the query string. If set to `None` + no decoding will take place. + :param errors: The error handling for the `charset` decoding. + """ + if isinstance(s, str): + s = s.replace("+", " ") + else: + s = s.replace(b"+", b" ") + return url_unquote(s, charset, errors) + + +def url_fix(s: str, charset: str = "utf-8") -> str: + r"""Sometimes you get an URL by a user that just isn't a real URL because + it contains unsafe characters like ' ' and so on. This function can fix + some of the problems in a similar way browsers handle data entered by the + user: + + >>> url_fix('http://de.wikipedia.org/wiki/Elf (Begriffskl\xe4rung)') + 'http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)' + + :param s: the string with the URL to fix. + :param charset: The target charset for the URL if the url was given + as a string. + """ + # First step is to switch to text processing and to convert + # backslashes (which are invalid in URLs anyways) to slashes. This is + # consistent with what Chrome does. + s = _to_str(s, charset, "replace").replace("\\", "/") + + # For the specific case that we look like a malformed windows URL + # we want to fix this up manually: + if s.startswith("file://") and s[7:8].isalpha() and s[8:10] in (":/", "|/"): + s = f"file:///{s[7:]}" + + url = url_parse(s) + path = url_quote(url.path, charset, safe="/%+$!*'(),") + qs = url_quote_plus(url.query, charset, safe=":&%=+$!*'(),") + anchor = url_quote_plus(url.fragment, charset, safe=":&%=+$!*'(),") + return url_unparse((url.scheme, url.encode_netloc(), path, qs, anchor)) + + +# not-unreserved characters remain quoted when unquoting to IRI +_to_iri_unsafe = "".join([chr(c) for c in range(128) if c not in _always_safe]) + + +def _codec_error_url_quote(e: UnicodeError) -> t.Tuple[str, int]: + """Used in :func:`uri_to_iri` after unquoting to re-quote any + invalid bytes. + """ + # the docs state that UnicodeError does have these attributes, + # but mypy isn't picking them up + out = _fast_url_quote(e.object[e.start : e.end]) # type: ignore + return out, e.end # type: ignore + + +codecs.register_error("werkzeug.url_quote", _codec_error_url_quote) + + +def uri_to_iri( + uri: t.Union[str, t.Tuple[str, str, str, str, str]], + charset: str = "utf-8", + errors: str = "werkzeug.url_quote", +) -> str: + """Convert a URI to an IRI. All valid UTF-8 characters are unquoted, + leaving all reserved and invalid characters quoted. If the URL has + a domain, it is decoded from Punycode. + + >>> uri_to_iri("http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF") + 'http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF' + + :param uri: The URI to convert. + :param charset: The encoding to encode unquoted bytes with. + :param errors: Error handler to use during ``bytes.encode``. By + default, invalid bytes are left quoted. + + .. versionchanged:: 0.15 + All reserved and invalid characters remain quoted. Previously, + only some reserved characters were preserved, and invalid bytes + were replaced instead of left quoted. + + .. versionadded:: 0.6 + """ + if isinstance(uri, tuple): + uri = url_unparse(uri) + + uri = url_parse(_to_str(uri, charset)) + path = url_unquote(uri.path, charset, errors, _to_iri_unsafe) + query = url_unquote(uri.query, charset, errors, _to_iri_unsafe) + fragment = url_unquote(uri.fragment, charset, errors, _to_iri_unsafe) + return url_unparse((uri.scheme, uri.decode_netloc(), path, query, fragment)) + + +# reserved characters remain unquoted when quoting to URI +_to_uri_safe = ":/?#[]@!$&'()*+,;=%" + + +def iri_to_uri( + iri: t.Union[str, t.Tuple[str, str, str, str, str]], + charset: str = "utf-8", + errors: str = "strict", + safe_conversion: bool = False, +) -> str: + """Convert an IRI to a URI. All non-ASCII and unsafe characters are + quoted. If the URL has a domain, it is encoded to Punycode. + + >>> iri_to_uri('http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF') + 'http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF' + + :param iri: The IRI to convert. + :param charset: The encoding of the IRI. + :param errors: Error handler to use during ``bytes.encode``. + :param safe_conversion: Return the URL unchanged if it only contains + ASCII characters and no whitespace. See the explanation below. + + There is a general problem with IRI conversion with some protocols + that are in violation of the URI specification. Consider the + following two IRIs:: + + magnet:?xt=uri:whatever + itms-services://?action=download-manifest + + After parsing, we don't know if the scheme requires the ``//``, + which is dropped if empty, but conveys different meanings in the + final URL if it's present or not. In this case, you can use + ``safe_conversion``, which will return the URL unchanged if it only + contains ASCII characters and no whitespace. This can result in a + URI with unquoted characters if it was not already quoted correctly, + but preserves the URL's semantics. Werkzeug uses this for the + ``Location`` header for redirects. + + .. versionchanged:: 0.15 + All reserved characters remain unquoted. Previously, only some + reserved characters were left unquoted. + + .. versionchanged:: 0.9.6 + The ``safe_conversion`` parameter was added. + + .. versionadded:: 0.6 + """ + if isinstance(iri, tuple): + iri = url_unparse(iri) + + if safe_conversion: + # If we're not sure if it's safe to convert the URL, and it only + # contains ASCII characters, return it unconverted. + try: + native_iri = _to_str(iri) + ascii_iri = native_iri.encode("ascii") + + # Only return if it doesn't have whitespace. (Why?) + if len(ascii_iri.split()) == 1: + return native_iri + except UnicodeError: + pass + + iri = url_parse(_to_str(iri, charset, errors)) + path = url_quote(iri.path, charset, errors, _to_uri_safe) + query = url_quote(iri.query, charset, errors, _to_uri_safe) + fragment = url_quote(iri.fragment, charset, errors, _to_uri_safe) + return url_unparse((iri.scheme, iri.encode_netloc(), path, query, fragment)) + + +def url_decode( + s: t.AnyStr, + charset: str = "utf-8", + include_empty: bool = True, + errors: str = "replace", + separator: str = "&", + cls: t.Optional[t.Type["ds.MultiDict"]] = None, +) -> "ds.MultiDict[str, str]": + """Parse a query string and return it as a :class:`MultiDict`. + + :param s: The query string to parse. + :param charset: Decode bytes to string with this charset. If not + given, bytes are returned as-is. + :param include_empty: Include keys with empty values in the dict. + :param errors: Error handling behavior when decoding bytes. + :param separator: Separator character between pairs. + :param cls: Container to hold result instead of :class:`MultiDict`. + + .. versionchanged:: 2.0 + The ``decode_keys`` parameter is deprecated and will be removed + in Werkzeug 2.1. + + .. versionchanged:: 0.5 + In previous versions ";" and "&" could be used for url decoding. + Now only "&" is supported. If you want to use ";", a different + ``separator`` can be provided. + + .. versionchanged:: 0.5 + The ``cls`` parameter was added. + """ + if cls is None: + from .datastructures import MultiDict # noqa: F811 + + cls = MultiDict + if isinstance(s, str) and not isinstance(separator, str): + separator = separator.decode(charset or "ascii") + elif isinstance(s, bytes) and not isinstance(separator, bytes): + separator = separator.encode(charset or "ascii") # type: ignore + return cls( + _url_decode_impl( + s.split(separator), charset, include_empty, errors # type: ignore + ) + ) + + +def url_decode_stream( + stream: t.IO[bytes], + charset: str = "utf-8", + include_empty: bool = True, + errors: str = "replace", + separator: bytes = b"&", + cls: t.Optional[t.Type["ds.MultiDict"]] = None, + limit: t.Optional[int] = None, +) -> "ds.MultiDict[str, str]": + """Works like :func:`url_decode` but decodes a stream. The behavior + of stream and limit follows functions like + :func:`~werkzeug.wsgi.make_line_iter`. The generator of pairs is + directly fed to the `cls` so you can consume the data while it's + parsed. + + :param stream: a stream with the encoded querystring + :param charset: the charset of the query string. If set to `None` + no decoding will take place. + :param include_empty: Set to `False` if you don't want empty values to + appear in the dict. + :param errors: the decoding error behavior. + :param separator: the pair separator to be used, defaults to ``&`` + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param limit: the content length of the URL data. Not necessary if + a limited stream is provided. + + .. versionchanged:: 2.0 + The ``decode_keys`` and ``return_iterator`` parameters are + deprecated and will be removed in Werkzeug 2.1. + + .. versionadded:: 0.8 + """ + from .wsgi import make_chunk_iter + + pair_iter = make_chunk_iter(stream, separator, limit) + decoder = _url_decode_impl(pair_iter, charset, include_empty, errors) + + if cls is None: + from .datastructures import MultiDict # noqa: F811 + + cls = MultiDict + + return cls(decoder) + + +def _url_decode_impl( + pair_iter: t.Iterable[t.AnyStr], charset: str, include_empty: bool, errors: str +) -> t.Iterator[t.Tuple[str, str]]: + for pair in pair_iter: + if not pair: + continue + s = _make_encode_wrapper(pair) + equal = s("=") + if equal in pair: + key, value = pair.split(equal, 1) + else: + if not include_empty: + continue + key = pair + value = s("") + yield ( + url_unquote_plus(key, charset, errors), + url_unquote_plus(value, charset, errors), + ) + + +def url_encode( + obj: t.Union[t.Mapping[str, str], t.Iterable[t.Tuple[str, str]]], + charset: str = "utf-8", + sort: bool = False, + key: t.Optional[t.Callable[[t.Tuple[str, str]], t.Any]] = None, + separator: str = "&", +) -> str: + """URL encode a dict/`MultiDict`. If a value is `None` it will not appear + in the result string. Per default only values are encoded into the target + charset strings. + + :param obj: the object to encode into a query string. + :param charset: the charset of the query string. + :param sort: set to `True` if you want parameters to be sorted by `key`. + :param separator: the separator to be used for the pairs. + :param key: an optional function to be used for sorting. For more details + check out the :func:`sorted` documentation. + + .. versionchanged:: 2.0 + The ``encode_keys`` parameter is deprecated and will be removed + in Werkzeug 2.1. + + .. versionchanged:: 0.5 + Added the ``sort``, ``key``, and ``separator`` parameters. + """ + separator = _to_str(separator, "ascii") + return separator.join(_url_encode_impl(obj, charset, sort, key)) + + +def url_encode_stream( + obj: t.Union[t.Mapping[str, str], t.Iterable[t.Tuple[str, str]]], + stream: t.Optional[t.IO[str]] = None, + charset: str = "utf-8", + sort: bool = False, + key: t.Optional[t.Callable[[t.Tuple[str, str]], t.Any]] = None, + separator: str = "&", +) -> None: + """Like :meth:`url_encode` but writes the results to a stream + object. If the stream is `None` a generator over all encoded + pairs is returned. + + :param obj: the object to encode into a query string. + :param stream: a stream to write the encoded object into or `None` if + an iterator over the encoded pairs should be returned. In + that case the separator argument is ignored. + :param charset: the charset of the query string. + :param sort: set to `True` if you want parameters to be sorted by `key`. + :param separator: the separator to be used for the pairs. + :param key: an optional function to be used for sorting. For more details + check out the :func:`sorted` documentation. + + .. versionchanged:: 2.0 + The ``encode_keys`` parameter is deprecated and will be removed + in Werkzeug 2.1. + + .. versionadded:: 0.8 + """ + separator = _to_str(separator, "ascii") + gen = _url_encode_impl(obj, charset, sort, key) + if stream is None: + return gen # type: ignore + for idx, chunk in enumerate(gen): + if idx: + stream.write(separator) + stream.write(chunk) + return None + + +def url_join( + base: t.Union[str, t.Tuple[str, str, str, str, str]], + url: t.Union[str, t.Tuple[str, str, str, str, str]], + allow_fragments: bool = True, +) -> str: + """Join a base URL and a possibly relative URL to form an absolute + interpretation of the latter. + + :param base: the base URL for the join operation. + :param url: the URL to join. + :param allow_fragments: indicates whether fragments should be allowed. + """ + if isinstance(base, tuple): + base = url_unparse(base) + if isinstance(url, tuple): + url = url_unparse(url) + + _check_str_tuple((base, url)) + s = _make_encode_wrapper(base) + + if not base: + return url + if not url: + return base + + bscheme, bnetloc, bpath, bquery, bfragment = url_parse( + base, allow_fragments=allow_fragments + ) + scheme, netloc, path, query, fragment = url_parse(url, bscheme, allow_fragments) + if scheme != bscheme: + return url + if netloc: + return url_unparse((scheme, netloc, path, query, fragment)) + netloc = bnetloc + + if path[:1] == s("/"): + segments = path.split(s("/")) + elif not path: + segments = bpath.split(s("/")) + if not query: + query = bquery + else: + segments = bpath.split(s("/"))[:-1] + path.split(s("/")) + + # If the rightmost part is "./" we want to keep the slash but + # remove the dot. + if segments[-1] == s("."): + segments[-1] = s("") + + # Resolve ".." and "." + segments = [segment for segment in segments if segment != s(".")] + while True: + i = 1 + n = len(segments) - 1 + while i < n: + if segments[i] == s("..") and segments[i - 1] not in (s(""), s("..")): + del segments[i - 1 : i + 1] + break + i += 1 + else: + break + + # Remove trailing ".." if the URL is absolute + unwanted_marker = [s(""), s("..")] + while segments[:2] == unwanted_marker: + del segments[1] + + path = s("/").join(segments) + return url_unparse((scheme, netloc, path, query, fragment)) diff --git a/venv/Lib/site-packages/werkzeug/user_agent.py b/venv/Lib/site-packages/werkzeug/user_agent.py new file mode 100644 index 0000000..66ffcbe --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/user_agent.py @@ -0,0 +1,47 @@ +import typing as t + + +class UserAgent: + """Represents a parsed user agent header value. + + The default implementation does no parsing, only the :attr:`string` + attribute is set. A subclass may parse the string to set the + common attributes or expose other information. Set + :attr:`werkzeug.wrappers.Request.user_agent_class` to use a + subclass. + + :param string: The header value to parse. + + .. versionadded:: 2.0 + This replaces the previous ``useragents`` module, but does not + provide a built-in parser. + """ + + platform: t.Optional[str] = None + """The OS name, if it could be parsed from the string.""" + + browser: t.Optional[str] = None + """The browser name, if it could be parsed from the string.""" + + version: t.Optional[str] = None + """The browser version, if it could be parsed from the string.""" + + language: t.Optional[str] = None + """The browser language, if it could be parsed from the string.""" + + def __init__(self, string: str) -> None: + self.string: str = string + """The original header value.""" + + def __repr__(self) -> str: + return f"<{type(self).__name__} {self.browser}/{self.version}>" + + def __str__(self) -> str: + return self.string + + def __bool__(self) -> bool: + return bool(self.browser) + + def to_header(self) -> str: + """Convert to a header value.""" + return self.string diff --git a/venv/Lib/site-packages/werkzeug/utils.py b/venv/Lib/site-packages/werkzeug/utils.py new file mode 100644 index 0000000..4ef5837 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/utils.py @@ -0,0 +1,706 @@ +import io +import mimetypes +import os +import pkgutil +import re +import sys +import typing as t +import unicodedata +from datetime import datetime +from time import time +from zlib import adler32 + +from markupsafe import escape + +from ._internal import _DictAccessorProperty +from ._internal import _missing +from ._internal import _TAccessorValue +from .datastructures import Headers +from .exceptions import NotFound +from .exceptions import RequestedRangeNotSatisfiable +from .security import safe_join +from .urls import url_quote +from .wsgi import wrap_file + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIEnvironment + from .wrappers.request import Request + from .wrappers.response import Response + +_T = t.TypeVar("_T") + +_entity_re = re.compile(r"&([^;]+);") +_filename_ascii_strip_re = re.compile(r"[^A-Za-z0-9_.-]") +_windows_device_files = ( + "CON", + "AUX", + "COM1", + "COM2", + "COM3", + "COM4", + "LPT1", + "LPT2", + "LPT3", + "PRN", + "NUL", +) + + +class cached_property(property, t.Generic[_T]): + """A :func:`property` that is only evaluated once. Subsequent access + returns the cached value. Setting the property sets the cached + value. Deleting the property clears the cached value, accessing it + again will evaluate it again. + + .. code-block:: python + + class Example: + @cached_property + def value(self): + # calculate something important here + return 42 + + e = Example() + e.value # evaluates + e.value # uses cache + e.value = 16 # sets cache + del e.value # clears cache + + If the class defines ``__slots__``, it must add ``_cache_{name}`` as + a slot. Alternatively, it can add ``__dict__``, but that's usually + not desirable. + + .. versionchanged:: 2.1 + Works with ``__slots__``. + + .. versionchanged:: 2.0 + ``del obj.name`` clears the cached value. + """ + + def __init__( + self, + fget: t.Callable[[t.Any], _T], + name: t.Optional[str] = None, + doc: t.Optional[str] = None, + ) -> None: + super().__init__(fget, doc=doc) + self.__name__ = name or fget.__name__ + self.slot_name = f"_cache_{self.__name__}" + self.__module__ = fget.__module__ + + def __set__(self, obj: object, value: _T) -> None: + if hasattr(obj, "__dict__"): + obj.__dict__[self.__name__] = value + else: + setattr(obj, self.slot_name, value) + + def __get__(self, obj: object, type: type = None) -> _T: # type: ignore + if obj is None: + return self # type: ignore + + obj_dict = getattr(obj, "__dict__", None) + + if obj_dict is not None: + value: _T = obj_dict.get(self.__name__, _missing) + else: + value = getattr(obj, self.slot_name, _missing) # type: ignore[arg-type] + + if value is _missing: + value = self.fget(obj) # type: ignore + + if obj_dict is not None: + obj.__dict__[self.__name__] = value + else: + setattr(obj, self.slot_name, value) + + return value + + def __delete__(self, obj: object) -> None: + if hasattr(obj, "__dict__"): + del obj.__dict__[self.__name__] + else: + setattr(obj, self.slot_name, _missing) + + +class environ_property(_DictAccessorProperty[_TAccessorValue]): + """Maps request attributes to environment variables. This works not only + for the Werkzeug request object, but also any other class with an + environ attribute: + + >>> class Test(object): + ... environ = {'key': 'value'} + ... test = environ_property('key') + >>> var = Test() + >>> var.test + 'value' + + If you pass it a second value it's used as default if the key does not + exist, the third one can be a converter that takes a value and converts + it. If it raises :exc:`ValueError` or :exc:`TypeError` the default value + is used. If no default value is provided `None` is used. + + Per default the property is read only. You have to explicitly enable it + by passing ``read_only=False`` to the constructor. + """ + + read_only = True + + def lookup(self, obj: "Request") -> "WSGIEnvironment": + return obj.environ + + +class header_property(_DictAccessorProperty[_TAccessorValue]): + """Like `environ_property` but for headers.""" + + def lookup(self, obj: t.Union["Request", "Response"]) -> Headers: + return obj.headers + + +# https://cgit.freedesktop.org/xdg/shared-mime-info/tree/freedesktop.org.xml.in +# https://www.iana.org/assignments/media-types/media-types.xhtml +# Types listed in the XDG mime info that have a charset in the IANA registration. +_charset_mimetypes = { + "application/ecmascript", + "application/javascript", + "application/sql", + "application/xml", + "application/xml-dtd", + "application/xml-external-parsed-entity", +} + + +def get_content_type(mimetype: str, charset: str) -> str: + """Returns the full content type string with charset for a mimetype. + + If the mimetype represents text, the charset parameter will be + appended, otherwise the mimetype is returned unchanged. + + :param mimetype: The mimetype to be used as content type. + :param charset: The charset to be appended for text mimetypes. + :return: The content type. + + .. versionchanged:: 0.15 + Any type that ends with ``+xml`` gets a charset, not just those + that start with ``application/``. Known text types such as + ``application/javascript`` are also given charsets. + """ + if ( + mimetype.startswith("text/") + or mimetype in _charset_mimetypes + or mimetype.endswith("+xml") + ): + mimetype += f"; charset={charset}" + + return mimetype + + +def secure_filename(filename: str) -> str: + r"""Pass it a filename and it will return a secure version of it. This + filename can then safely be stored on a regular file system and passed + to :func:`os.path.join`. The filename returned is an ASCII only string + for maximum portability. + + On windows systems the function also makes sure that the file is not + named after one of the special device files. + + >>> secure_filename("My cool movie.mov") + 'My_cool_movie.mov' + >>> secure_filename("../../../etc/passwd") + 'etc_passwd' + >>> secure_filename('i contain cool \xfcml\xe4uts.txt') + 'i_contain_cool_umlauts.txt' + + The function might return an empty filename. It's your responsibility + to ensure that the filename is unique and that you abort or + generate a random filename if the function returned an empty one. + + .. versionadded:: 0.5 + + :param filename: the filename to secure + """ + filename = unicodedata.normalize("NFKD", filename) + filename = filename.encode("ascii", "ignore").decode("ascii") + + for sep in os.sep, os.path.altsep: + if sep: + filename = filename.replace(sep, " ") + filename = str(_filename_ascii_strip_re.sub("", "_".join(filename.split()))).strip( + "._" + ) + + # on nt a couple of special files are present in each folder. We + # have to ensure that the target file is not such a filename. In + # this case we prepend an underline + if ( + os.name == "nt" + and filename + and filename.split(".")[0].upper() in _windows_device_files + ): + filename = f"_{filename}" + + return filename + + +def redirect( + location: str, code: int = 302, Response: t.Optional[t.Type["Response"]] = None +) -> "Response": + """Returns a response object (a WSGI application) that, if called, + redirects the client to the target location. Supported codes are + 301, 302, 303, 305, 307, and 308. 300 is not supported because + it's not a real redirect and 304 because it's the answer for a + request with a request with defined If-Modified-Since headers. + + .. versionadded:: 0.6 + The location can now be a unicode string that is encoded using + the :func:`iri_to_uri` function. + + .. versionadded:: 0.10 + The class used for the Response object can now be passed in. + + :param location: the location the response should redirect to. + :param code: the redirect status code. defaults to 302. + :param class Response: a Response class to use when instantiating a + response. The default is :class:`werkzeug.wrappers.Response` if + unspecified. + """ + if Response is None: + from .wrappers import Response # type: ignore + + display_location = escape(location) + if isinstance(location, str): + # Safe conversion is necessary here as we might redirect + # to a broken URI scheme (for instance itms-services). + from .urls import iri_to_uri + + location = iri_to_uri(location, safe_conversion=True) + + response = Response( # type: ignore + "\n" + "\n" + "Redirecting...\n" + "

    Redirecting...

    \n" + "

    You should be redirected automatically to the target URL: " + f'{display_location}. If' + " not, click the link.\n", + code, + mimetype="text/html", + ) + response.headers["Location"] = location + return response + + +def append_slash_redirect(environ: "WSGIEnvironment", code: int = 308) -> "Response": + """Redirect to the current URL with a slash appended. + + If the current URL is ``/user/42``, the redirect URL will be + ``42/``. When joined to the current URL during response + processing or by the browser, this will produce ``/user/42/``. + + The behavior is undefined if the path ends with a slash already. If + called unconditionally on a URL, it may produce a redirect loop. + + :param environ: Use the path and query from this WSGI environment + to produce the redirect URL. + :param code: the status code for the redirect. + + .. versionchanged:: 2.1 + Produce a relative URL that only modifies the last segment. + Relevant when the current path has multiple segments. + + .. versionchanged:: 2.1 + The default status code is 308 instead of 301. This preserves + the request method and body. + """ + tail = environ["PATH_INFO"].rpartition("/")[2] + + if not tail: + new_path = "./" + else: + new_path = f"{tail}/" + + query_string = environ.get("QUERY_STRING") + + if query_string: + new_path = f"{new_path}?{query_string}" + + return redirect(new_path, code) + + +def send_file( + path_or_file: t.Union[os.PathLike, str, t.IO[bytes]], + environ: "WSGIEnvironment", + mimetype: t.Optional[str] = None, + as_attachment: bool = False, + download_name: t.Optional[str] = None, + conditional: bool = True, + etag: t.Union[bool, str] = True, + last_modified: t.Optional[t.Union[datetime, int, float]] = None, + max_age: t.Optional[ + t.Union[int, t.Callable[[t.Optional[str]], t.Optional[int]]] + ] = None, + use_x_sendfile: bool = False, + response_class: t.Optional[t.Type["Response"]] = None, + _root_path: t.Optional[t.Union[os.PathLike, str]] = 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-provided paths. + + 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``, ``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 environ: The WSGI environ for the current request. + :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. + :param use_x_sendfile: Set the ``X-Sendfile`` header to let the + server to efficiently send the file. Requires support from the + HTTP server. Requires passing a file path. + :param response_class: Build the response using this class. Defaults + to :class:`~werkzeug.wrappers.Response`. + :param _root_path: Do not use. For internal use only. Use + :func:`send_from_directory` to safely send files under a path. + + .. versionchanged:: 2.0.2 + ``send_file`` only sets a detected ``Content-Encoding`` if + ``as_attachment`` is disabled. + + .. versionadded:: 2.0 + Adapted from Flask's implementation. + + .. versionchanged:: 2.0 + ``download_name`` replaces Flask's ``attachment_filename`` + parameter. If ``as_attachment=False``, it is passed with + ``Content-Disposition: inline`` instead. + + .. versionchanged:: 2.0 + ``max_age`` replaces Flask's ``cache_timeout`` parameter. + ``conditional`` is enabled and ``max_age`` is not set by + default. + + .. versionchanged:: 2.0 + ``etag`` replaces Flask's ``add_etags`` parameter. It can be a + string to use instead of generating one. + + .. versionchanged:: 2.0 + If an encoding is returned when guessing ``mimetype`` from + ``download_name``, set the ``Content-Encoding`` header. + """ + if response_class is None: + from .wrappers import Response + + response_class = Response + + path: t.Optional[str] = None + file: t.Optional[t.IO[bytes]] = None + size: t.Optional[int] = None + mtime: t.Optional[float] = None + headers = Headers() + + if isinstance(path_or_file, (os.PathLike, str)) or hasattr( + path_or_file, "__fspath__" + ): + path_or_file = t.cast(t.Union[os.PathLike, str], path_or_file) + + # Flask will pass app.root_path, allowing its send_file wrapper + # to not have to deal with paths. + if _root_path is not None: + path = os.path.join(_root_path, path_or_file) + else: + path = os.path.abspath(path_or_file) + + stat = os.stat(path) + size = stat.st_size + mtime = stat.st_mtime + else: + file = path_or_file + + if download_name is None and path is not None: + download_name = os.path.basename(path) + + if mimetype is None: + if download_name is None: + raise TypeError( + "Unable to detect the MIME type because a file name is" + " not available. Either set 'download_name', pass a" + " path instead of a file, or set 'mimetype'." + ) + + mimetype, encoding = mimetypes.guess_type(download_name) + + if mimetype is None: + mimetype = "application/octet-stream" + + # Don't send encoding for attachments, it causes browsers to + # save decompress tar.gz files. + if encoding is not None and not as_attachment: + headers.set("Content-Encoding", encoding) + + if download_name is not None: + try: + download_name.encode("ascii") + except UnicodeEncodeError: + simple = unicodedata.normalize("NFKD", download_name) + simple = simple.encode("ascii", "ignore").decode("ascii") + quoted = url_quote(download_name, safe="") + names = {"filename": simple, "filename*": f"UTF-8''{quoted}"} + else: + names = {"filename": download_name} + + value = "attachment" if as_attachment else "inline" + headers.set("Content-Disposition", value, **names) + elif as_attachment: + raise TypeError( + "No name provided for attachment. Either set" + " 'download_name' or pass a path instead of a file." + ) + + if use_x_sendfile and path is not None: + headers["X-Sendfile"] = path + data = None + else: + if file is None: + file = open(path, "rb") # type: ignore + elif isinstance(file, io.BytesIO): + size = file.getbuffer().nbytes + elif isinstance(file, io.TextIOBase): + raise ValueError("Files must be opened in binary mode or use BytesIO.") + + data = wrap_file(environ, file) + + rv = response_class( + data, mimetype=mimetype, headers=headers, direct_passthrough=True + ) + + if size is not None: + rv.content_length = size + + if last_modified is not None: + rv.last_modified = last_modified # type: ignore + elif mtime is not None: + rv.last_modified = mtime # type: ignore + + rv.cache_control.no_cache = True + + # Flask will pass app.get_send_file_max_age, allowing its send_file + # wrapper to not have to deal with paths. + if callable(max_age): + max_age = max_age(path) + + if max_age is not None: + if max_age > 0: + rv.cache_control.no_cache = None + rv.cache_control.public = True + + rv.cache_control.max_age = max_age + rv.expires = int(time() + max_age) # type: ignore + + if isinstance(etag, str): + rv.set_etag(etag) + elif etag and path is not None: + check = adler32(path.encode("utf-8")) & 0xFFFFFFFF + rv.set_etag(f"{mtime}-{size}-{check}") + + if conditional: + try: + rv = rv.make_conditional(environ, accept_ranges=True, complete_length=size) + except RequestedRangeNotSatisfiable: + if file is not None: + file.close() + + raise + + # Some x-sendfile implementations incorrectly ignore the 304 + # status code and send the file anyway. + if rv.status_code == 304: + rv.headers.pop("x-sendfile", None) + + return rv + + +def send_from_directory( + directory: t.Union[os.PathLike, str], + path: t.Union[os.PathLike, str], + environ: "WSGIEnvironment", + **kwargs: t.Any, +) -> "Response": + """Send a file from within a directory using :func:`send_file`. + + 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, + returns a 404 :exc:`~werkzeug.exceptions.NotFound` error. + + :param directory: The directory that ``path`` must be located under. This *must not* + be a value provided by the client, otherwise it becomes insecure. + :param path: The path to the file to send, relative to ``directory``. This is the + part of the path provided by the client, which is checked for security. + :param environ: The WSGI environ for the current request. + :param kwargs: Arguments to pass to :func:`send_file`. + + .. versionadded:: 2.0 + Adapted from Flask's implementation. + """ + path = safe_join(os.fspath(directory), os.fspath(path)) + + if path is None: + raise NotFound() + + # Flask will pass app.root_path, allowing its send_from_directory + # wrapper to not have to deal with paths. + if "_root_path" in kwargs: + path = os.path.join(kwargs["_root_path"], path) + + try: + if not os.path.isfile(path): + raise NotFound() + except ValueError: + # path contains null byte on Python < 3.8 + raise NotFound() from None + + return send_file(path, environ, **kwargs) + + +def import_string(import_name: str, silent: bool = False) -> t.Any: + """Imports an object based on a string. This is useful if you want to + use import paths as endpoints or something similar. An import path can + be specified either in dotted notation (``xml.sax.saxutils.escape``) + or with a colon as object delimiter (``xml.sax.saxutils:escape``). + + If `silent` is True the return value will be `None` if the import fails. + + :param import_name: the dotted name for the object to import. + :param silent: if set to `True` import errors are ignored and + `None` is returned instead. + :return: imported object + """ + import_name = import_name.replace(":", ".") + try: + try: + __import__(import_name) + except ImportError: + if "." not in import_name: + raise + else: + return sys.modules[import_name] + + module_name, obj_name = import_name.rsplit(".", 1) + module = __import__(module_name, globals(), locals(), [obj_name]) + try: + return getattr(module, obj_name) + except AttributeError as e: + raise ImportError(e) from None + + except ImportError as e: + if not silent: + raise ImportStringError(import_name, e).with_traceback( + sys.exc_info()[2] + ) from None + + return None + + +def find_modules( + import_path: str, include_packages: bool = False, recursive: bool = False +) -> t.Iterator[str]: + """Finds all the modules below a package. This can be useful to + automatically import all views / controllers so that their metaclasses / + function decorators have a chance to register themselves on the + application. + + Packages are not returned unless `include_packages` is `True`. This can + also recursively list modules but in that case it will import all the + packages to get the correct load path of that module. + + :param import_path: the dotted name for the package to find child modules. + :param include_packages: set to `True` if packages should be returned, too. + :param recursive: set to `True` if recursion should happen. + :return: generator + """ + module = import_string(import_path) + path = getattr(module, "__path__", None) + if path is None: + raise ValueError(f"{import_path!r} is not a package") + basename = f"{module.__name__}." + for _importer, modname, ispkg in pkgutil.iter_modules(path): + modname = basename + modname + if ispkg: + if include_packages: + yield modname + if recursive: + yield from find_modules(modname, include_packages, True) + else: + yield modname + + +class ImportStringError(ImportError): + """Provides information about a failed :func:`import_string` attempt.""" + + #: String in dotted notation that failed to be imported. + import_name: str + #: Wrapped exception. + exception: BaseException + + def __init__(self, import_name: str, exception: BaseException) -> None: + self.import_name = import_name + self.exception = exception + msg = import_name + name = "" + tracked = [] + for part in import_name.replace(":", ".").split("."): + name = f"{name}.{part}" if name else part + imported = import_string(name, silent=True) + if imported: + tracked.append((name, getattr(imported, "__file__", None))) + else: + track = [f"- {n!r} found in {i!r}." for n, i in tracked] + track.append(f"- {name!r} not found.") + track_str = "\n".join(track) + msg = ( + f"import_string() failed for {import_name!r}. Possible reasons" + f" are:\n\n" + "- missing __init__.py in a package;\n" + "- package or module path not included in sys.path;\n" + "- duplicated package or module name taking precedence in" + " sys.path;\n" + "- missing module, class, function or variable;\n\n" + f"Debugged import:\n\n{track_str}\n\n" + f"Original exception:\n\n{type(exception).__name__}: {exception}" + ) + break + + super().__init__(msg) + + def __repr__(self) -> str: + return f"<{type(self).__name__}({self.import_name!r}, {self.exception!r})>" diff --git a/venv/Lib/site-packages/werkzeug/wrappers/__init__.py b/venv/Lib/site-packages/werkzeug/wrappers/__init__.py new file mode 100644 index 0000000..b8c45d7 --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/wrappers/__init__.py @@ -0,0 +1,3 @@ +from .request import Request as Request +from .response import Response as Response +from .response import ResponseStream diff --git a/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc52d58257b9d27ad1ca0f7c34e911da67ecb2f9 GIT binary patch literal 298 zcmX}n%}T^D5C`z2?b0Hy63>A?qPu>g;*^T6KUc^L?_y)H*XPQOWt8;64a!j$qz8Mm#VJUX_oyUSyB z)A$b`*N^2`egid6P}l$f literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8d148e96780831f3b6258f6d23d7f30460a5db6 GIT binary patch literal 20250 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc b/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a64f23866ea1f252199a040e056c146aa1271ac GIT binary patch literal 29245 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 None: + super().__init__( + method=environ.get("REQUEST_METHOD", "GET"), + scheme=environ.get("wsgi.url_scheme", "http"), + server=_get_server(environ), + root_path=_wsgi_decoding_dance( + environ.get("SCRIPT_NAME") or "", self.charset, self.encoding_errors + ), + path=_wsgi_decoding_dance( + environ.get("PATH_INFO") or "", self.charset, self.encoding_errors + ), + query_string=environ.get("QUERY_STRING", "").encode("latin1"), + headers=EnvironHeaders(environ), + remote_addr=environ.get("REMOTE_ADDR"), + ) + self.environ = environ + self.shallow = shallow + + if populate_request and not shallow: + self.environ["werkzeug.request"] = self + + @classmethod + def from_values(cls, *args: t.Any, **kwargs: t.Any) -> "Request": + """Create a new request object based on the values provided. If + environ is given missing values are filled from there. This method is + useful for small scripts when you need to simulate a request from an URL. + Do not use this method for unittesting, there is a full featured client + object (:class:`Client`) that allows to create multipart requests, + support for cookies etc. + + This accepts the same options as the + :class:`~werkzeug.test.EnvironBuilder`. + + .. versionchanged:: 0.5 + This method now accepts the same arguments as + :class:`~werkzeug.test.EnvironBuilder`. Because of this the + `environ` parameter is now called `environ_overrides`. + + :return: request object + """ + from ..test import EnvironBuilder + + charset = kwargs.pop("charset", cls.charset) + kwargs["charset"] = charset + builder = EnvironBuilder(*args, **kwargs) + try: + return builder.get_request(cls) + finally: + builder.close() + + @classmethod + def application( + cls, f: t.Callable[["Request"], "WSGIApplication"] + ) -> "WSGIApplication": + """Decorate a function as responder that accepts the request as + the last argument. This works like the :func:`responder` + decorator but the function is passed the request object as the + last argument and the request object will be closed + automatically:: + + @Request.application + def my_wsgi_app(request): + return Response('Hello World!') + + As of Werkzeug 0.14 HTTP exceptions are automatically caught and + converted to responses instead of failing. + + :param f: the WSGI callable to decorate + :return: a new WSGI callable + """ + #: return a callable that wraps the -2nd argument with the request + #: and calls the function with all the arguments up to that one and + #: the request. The return value is then called with the latest + #: two arguments. This makes it possible to use this decorator for + #: both standalone WSGI functions as well as bound methods and + #: partially applied functions. + from ..exceptions import HTTPException + + @functools.wraps(f) + def application(*args): # type: ignore + request = cls(args[-2]) + with request: + try: + resp = f(*args[:-2] + (request,)) + except HTTPException as e: + resp = e.get_response(args[-2]) + return resp(*args[-2:]) + + return t.cast("WSGIApplication", application) + + def _get_file_stream( + self, + total_content_length: t.Optional[int], + content_type: t.Optional[str], + filename: t.Optional[str] = None, + content_length: t.Optional[int] = None, + ) -> t.IO[bytes]: + """Called to get a stream for the file upload. + + This must provide a file-like class with `read()`, `readline()` + and `seek()` methods that is both writeable and readable. + + The default implementation returns a temporary file if the total + content length is higher than 500KB. Because many browsers do not + provide a content length for the files only the total content + length matters. + + :param total_content_length: the total content length of all the + data in the request combined. This value + is guaranteed to be there. + :param content_type: the mimetype of the uploaded file. + :param filename: the filename of the uploaded file. May be `None`. + :param content_length: the length of this file. This value is usually + not provided because webbrowsers do not provide + this value. + """ + return default_stream_factory( + total_content_length=total_content_length, + filename=filename, + content_type=content_type, + content_length=content_length, + ) + + @property + def want_form_data_parsed(self) -> bool: + """``True`` if the request method carries content. By default + this is true if a ``Content-Type`` is sent. + + .. versionadded:: 0.8 + """ + return bool(self.environ.get("CONTENT_TYPE")) + + def make_form_data_parser(self) -> FormDataParser: + """Creates the form data parser. Instantiates the + :attr:`form_data_parser_class` with some parameters. + + .. versionadded:: 0.8 + """ + return self.form_data_parser_class( + self._get_file_stream, + self.charset, + self.encoding_errors, + self.max_form_memory_size, + self.max_content_length, + self.parameter_storage_class, + max_form_parts=self.max_form_parts, + ) + + def _load_form_data(self) -> None: + """Method used internally to retrieve submitted data. After calling + this sets `form` and `files` on the request object to multi dicts + filled with the incoming form data. As a matter of fact the input + stream will be empty afterwards. You can also call this method to + force the parsing of the form data. + + .. versionadded:: 0.8 + """ + # abort early if we have already consumed the stream + if "form" in self.__dict__: + return + + if self.want_form_data_parsed: + parser = self.make_form_data_parser() + data = parser.parse( + self._get_stream_for_parsing(), + self.mimetype, + self.content_length, + self.mimetype_params, + ) + else: + data = ( + self.stream, + self.parameter_storage_class(), + self.parameter_storage_class(), + ) + + # inject the values into the instance dict so that we bypass + # our cached_property non-data descriptor. + d = self.__dict__ + d["stream"], d["form"], d["files"] = data + + def _get_stream_for_parsing(self) -> t.IO[bytes]: + """This is the same as accessing :attr:`stream` with the difference + that if it finds cached data from calling :meth:`get_data` first it + will create a new stream out of the cached data. + + .. versionadded:: 0.9.3 + """ + cached_data = getattr(self, "_cached_data", None) + if cached_data is not None: + return BytesIO(cached_data) + return self.stream + + def close(self) -> None: + """Closes associated resources of this request object. This + closes all file handles explicitly. You can also use the request + object in a with statement which will automatically close it. + + .. versionadded:: 0.9 + """ + files = self.__dict__.get("files") + for _key, value in iter_multi_items(files or ()): + value.close() + + def __enter__(self) -> "Request": + return self + + def __exit__(self, exc_type, exc_value, tb) -> None: # type: ignore + self.close() + + @cached_property + def stream(self) -> t.IO[bytes]: + """ + If the incoming form data was not encoded with a known mimetype + the data is stored unmodified in this stream for consumption. Most + of the time it is a better idea to use :attr:`data` which will give + you that data as a string. The stream only returns the data once. + + Unlike :attr:`input_stream` this stream is properly guarded that you + can't accidentally read past the length of the input. Werkzeug will + internally always refer to this stream to read data which makes it + possible to wrap this object with a stream that does filtering. + + .. versionchanged:: 0.9 + This stream is now always available but might be consumed by the + form parser later on. Previously the stream was only set if no + parsing happened. + """ + if self.shallow: + raise RuntimeError( + "This request was created with 'shallow=True', reading" + " from the input stream is disabled." + ) + + return get_input_stream(self.environ) + + input_stream = environ_property[t.IO[bytes]]( + "wsgi.input", + doc="""The WSGI input stream. + + In general it's a bad idea to use this one because you can + easily read past the boundary. Use the :attr:`stream` + instead.""", + ) + + @cached_property + def data(self) -> bytes: + """ + Contains the incoming request data as string in case it came with + a mimetype Werkzeug does not handle. + """ + return self.get_data(parse_form_data=True) + + @typing.overload + def get_data( # type: ignore + self, + cache: bool = True, + as_text: "te.Literal[False]" = False, + parse_form_data: bool = False, + ) -> bytes: + ... + + @typing.overload + def get_data( + self, + cache: bool = True, + as_text: "te.Literal[True]" = ..., + parse_form_data: bool = False, + ) -> str: + ... + + def get_data( + self, cache: bool = True, as_text: bool = False, parse_form_data: bool = False + ) -> t.Union[bytes, str]: + """This reads the buffered incoming data from the client into one + bytes object. By default this is cached but that behavior can be + changed by setting `cache` to `False`. + + Usually it's a bad idea to call this method without checking the + content length first as a client could send dozens of megabytes or more + to cause memory problems on the server. + + Note that if the form data was already parsed this method will not + return anything as form data parsing does not cache the data like + this method does. To implicitly invoke form data parsing function + set `parse_form_data` to `True`. When this is done the return value + of this method will be an empty string if the form parser handles + the data. This generally is not necessary as if the whole data is + cached (which is the default) the form parser will used the cached + data to parse the form data. Please be generally aware of checking + the content length first in any case before calling this method + to avoid exhausting server memory. + + If `as_text` is set to `True` the return value will be a decoded + string. + + .. versionadded:: 0.9 + """ + rv = getattr(self, "_cached_data", None) + if rv is None: + if parse_form_data: + self._load_form_data() + rv = self.stream.read() + if cache: + self._cached_data = rv + if as_text: + rv = rv.decode(self.charset, self.encoding_errors) + return rv + + @cached_property + def form(self) -> "ImmutableMultiDict[str, str]": + """The form parameters. By default an + :class:`~werkzeug.datastructures.ImmutableMultiDict` + is returned from this function. This can be changed by setting + :attr:`parameter_storage_class` to a different type. This might + be necessary if the order of the form data is important. + + Please keep in mind that file uploads will not end up here, but instead + in the :attr:`files` attribute. + + .. versionchanged:: 0.9 + + Previous to Werkzeug 0.9 this would only contain form data for POST + and PUT requests. + """ + self._load_form_data() + return self.form + + @cached_property + def values(self) -> "CombinedMultiDict[str, str]": + """A :class:`werkzeug.datastructures.CombinedMultiDict` that + combines :attr:`args` and :attr:`form`. + + For GET requests, only ``args`` are present, not ``form``. + + .. versionchanged:: 2.0 + For GET requests, only ``args`` are present, not ``form``. + """ + sources = [self.args] + + if self.method != "GET": + # GET requests can have a body, and some caching proxies + # might not treat that differently than a normal GET + # request, allowing form data to "invisibly" affect the + # cache without indication in the query string / URL. + sources.append(self.form) + + args = [] + + for d in sources: + if not isinstance(d, MultiDict): + d = MultiDict(d) + + args.append(d) + + return CombinedMultiDict(args) + + @cached_property + def files(self) -> "ImmutableMultiDict[str, FileStorage]": + """:class:`~werkzeug.datastructures.MultiDict` object containing + all uploaded files. Each key in :attr:`files` is the name from the + ````. Each value in :attr:`files` is a + Werkzeug :class:`~werkzeug.datastructures.FileStorage` object. + + It basically behaves like a standard file object you know from Python, + with the difference that it also has a + :meth:`~werkzeug.datastructures.FileStorage.save` function that can + store the file on the filesystem. + + Note that :attr:`files` will only contain data if the request method was + POST, PUT or PATCH and the ``

    `` that posted to the request had + ``enctype="multipart/form-data"``. It will be empty otherwise. + + See the :class:`~werkzeug.datastructures.MultiDict` / + :class:`~werkzeug.datastructures.FileStorage` documentation for + more details about the used data structure. + """ + self._load_form_data() + return self.files + + @property + def script_root(self) -> str: + """Alias for :attr:`self.root_path`. ``environ["SCRIPT_ROOT"]`` + without a trailing slash. + """ + return self.root_path + + @cached_property + def url_root(self) -> str: + """Alias for :attr:`root_url`. The URL with scheme, host, and + root path. For example, ``https://example.com/app/``. + """ + return self.root_url + + remote_user = environ_property[str]( + "REMOTE_USER", + doc="""If the server supports user authentication, and the + script is protected, this attribute contains the username the + user has authenticated as.""", + ) + is_multithread = environ_property[bool]( + "wsgi.multithread", + doc="""boolean that is `True` if the application is served by a + multithreaded WSGI server.""", + ) + is_multiprocess = environ_property[bool]( + "wsgi.multiprocess", + doc="""boolean that is `True` if the application is served by a + WSGI server that spawns multiple processes.""", + ) + is_run_once = environ_property[bool]( + "wsgi.run_once", + doc="""boolean that is `True` if the application will be + executed only once in a process lifetime. This is the case for + CGI for example, but it's not guaranteed that the execution only + happens one time.""", + ) + + # JSON + + #: A module or other object that has ``dumps`` and ``loads`` + #: functions that match the API of the built-in :mod:`json` module. + json_module = json + + @property + def json(self) -> t.Optional[t.Any]: + """The parsed JSON data if :attr:`mimetype` indicates JSON + (:mimetype:`application/json`, see :attr:`is_json`). + + Calls :meth:`get_json` with default arguments. + + If the request content type is not ``application/json``, this + will raise a 400 Bad Request error. + + .. versionchanged:: 2.1 + Raise a 400 error if the content type is incorrect. + """ + return self.get_json() + + # Cached values for ``(silent=False, silent=True)``. Initialized + # with sentinel values. + _cached_json: t.Tuple[t.Any, t.Any] = (Ellipsis, Ellipsis) + + @t.overload + def get_json( + self, force: bool = ..., silent: "te.Literal[False]" = ..., cache: bool = ... + ) -> t.Any: + ... + + @t.overload + def get_json( + self, force: bool = ..., silent: bool = ..., cache: bool = ... + ) -> t.Optional[t.Any]: + ... + + def get_json( + self, force: bool = False, silent: bool = False, cache: bool = True + ) -> t.Optional[t.Any]: + """Parse :attr:`data` as JSON. + + If the mimetype does not indicate JSON + (:mimetype:`application/json`, see :attr:`is_json`), or parsing + fails, :meth:`on_json_loading_failed` is called and + its return value is used as the return value. By default this + raises a 400 Bad Request error. + + :param force: Ignore the mimetype and always try to parse JSON. + :param silent: Silence mimetype and parsing errors, and + return ``None`` instead. + :param cache: Store the parsed JSON to return for subsequent + calls. + + .. versionchanged:: 2.1 + Raise a 400 error if the content type is incorrect. + """ + if cache and self._cached_json[silent] is not Ellipsis: + return self._cached_json[silent] + + if not (force or self.is_json): + if not silent: + return self.on_json_loading_failed(None) + else: + return None + + data = self.get_data(cache=cache) + + try: + rv = self.json_module.loads(data) + except ValueError as e: + if silent: + rv = None + + if cache: + normal_rv, _ = self._cached_json + self._cached_json = (normal_rv, rv) + else: + rv = self.on_json_loading_failed(e) + + if cache: + _, silent_rv = self._cached_json + self._cached_json = (rv, silent_rv) + else: + if cache: + self._cached_json = (rv, rv) + + return rv + + def on_json_loading_failed(self, e: t.Optional[ValueError]) -> t.Any: + """Called if :meth:`get_json` fails and isn't silenced. + + If this method returns a value, it is used as the return value + for :meth:`get_json`. The default implementation raises + :exc:`~werkzeug.exceptions.BadRequest`. + + :param e: If parsing failed, this is the exception. It will be + ``None`` if the content type wasn't ``application/json``. + """ + if e is not None: + raise BadRequest(f"Failed to decode JSON object: {e}") + + raise BadRequest( + "Did not attempt to load JSON data because the request" + " Content-Type was not 'application/json'." + ) diff --git a/venv/Lib/site-packages/werkzeug/wrappers/response.py b/venv/Lib/site-packages/werkzeug/wrappers/response.py new file mode 100644 index 0000000..454208c --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/wrappers/response.py @@ -0,0 +1,885 @@ +import json +import typing +import typing as t +import warnings +from http import HTTPStatus + +from .._internal import _to_bytes +from ..datastructures import Headers +from ..http import remove_entity_headers +from ..sansio.response import Response as _SansIOResponse +from ..urls import iri_to_uri +from ..urls import url_join +from ..utils import cached_property +from ..wsgi import ClosingIterator +from ..wsgi import get_current_url +from werkzeug._internal import _get_environ +from werkzeug.http import generate_etag +from werkzeug.http import http_date +from werkzeug.http import is_resource_modified +from werkzeug.http import parse_etags +from werkzeug.http import parse_range_header +from werkzeug.wsgi import _RangeWrapper + +if t.TYPE_CHECKING: + import typing_extensions as te + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + from .request import Request + + +def _warn_if_string(iterable: t.Iterable) -> None: + """Helper for the response objects to check if the iterable returned + to the WSGI server is not a string. + """ + if isinstance(iterable, str): + warnings.warn( + "Response iterable was set to a string. This will appear to" + " work but means that the server will send the data to the" + " client one character at a time. This is almost never" + " intended behavior, use 'response.data' to assign strings" + " to the response object.", + stacklevel=2, + ) + + +def _iter_encoded( + iterable: t.Iterable[t.Union[str, bytes]], charset: str +) -> t.Iterator[bytes]: + for item in iterable: + if isinstance(item, str): + yield item.encode(charset) + else: + yield item + + +def _clean_accept_ranges(accept_ranges: t.Union[bool, str]) -> str: + if accept_ranges is True: + return "bytes" + elif accept_ranges is False: + return "none" + elif isinstance(accept_ranges, str): + return accept_ranges + raise ValueError("Invalid accept_ranges value") + + +class Response(_SansIOResponse): + """Represents an outgoing WSGI HTTP response with body, status, and + headers. Has properties and methods for using the functionality + defined by various HTTP specs. + + The response body is flexible to support different use cases. The + simple form is passing bytes, or a string which will be encoded as + UTF-8. Passing an iterable of bytes or strings makes this a + streaming response. A generator is particularly useful for building + a CSV file in memory or using SSE (Server Sent Events). A file-like + object is also iterable, although the + :func:`~werkzeug.utils.send_file` helper should be used in that + case. + + The response object is itself a WSGI application callable. When + called (:meth:`__call__`) with ``environ`` and ``start_response``, + it will pass its status and headers to ``start_response`` then + return its body as an iterable. + + .. code-block:: python + + from werkzeug.wrappers.response import Response + + def index(): + return Response("Hello, World!") + + def application(environ, start_response): + path = environ.get("PATH_INFO") or "/" + + if path == "/": + response = index() + else: + response = Response("Not Found", status=404) + + return response(environ, start_response) + + :param response: The data for the body of the response. A string or + bytes, or tuple or list of strings or bytes, for a fixed-length + response, or any other iterable of strings or bytes for a + streaming response. Defaults to an empty body. + :param status: The status code for the response. Either an int, in + which case the default status message is added, or a string in + the form ``{code} {message}``, like ``404 Not Found``. Defaults + to 200. + :param headers: A :class:`~werkzeug.datastructures.Headers` object, + or a list of ``(key, value)`` tuples that will be converted to a + ``Headers`` object. + :param mimetype: The mime type (content type without charset or + other parameters) of the response. If the value starts with + ``text/`` (or matches some other special cases), the charset + will be added to create the ``content_type``. + :param content_type: The full content type of the response. + Overrides building the value from ``mimetype``. + :param direct_passthrough: Pass the response body directly through + as the WSGI iterable. This can be used when the body is a binary + file or other iterator of bytes, to skip some unnecessary + checks. Use :func:`~werkzeug.utils.send_file` instead of setting + this manually. + + .. versionchanged:: 2.0 + Combine ``BaseResponse`` and mixins into a single ``Response`` + class. Using the old classes is deprecated and will be removed + in Werkzeug 2.1. + + .. versionchanged:: 0.5 + The ``direct_passthrough`` parameter was added. + """ + + #: if set to `False` accessing properties on the response object will + #: not try to consume the response iterator and convert it into a list. + #: + #: .. versionadded:: 0.6.2 + #: + #: That attribute was previously called `implicit_seqence_conversion`. + #: (Notice the typo). If you did use this feature, you have to adapt + #: your code to the name change. + implicit_sequence_conversion = True + + #: If a redirect ``Location`` header is a relative URL, make it an + #: absolute URL, including scheme and domain. + #: + #: .. versionchanged:: 2.1 + #: This is disabled by default, so responses will send relative + #: redirects. + #: + #: .. versionadded:: 0.8 + autocorrect_location_header = False + + #: Should this response object automatically set the content-length + #: header if possible? This is true by default. + #: + #: .. versionadded:: 0.8 + automatically_set_content_length = True + + #: The response body to send as the WSGI iterable. A list of strings + #: or bytes represents a fixed-length response, any other iterable + #: is a streaming response. Strings are encoded to bytes as UTF-8. + #: + #: Do not set to a plain string or bytes, that will cause sending + #: the response to be very inefficient as it will iterate one byte + #: at a time. + response: t.Union[t.Iterable[str], t.Iterable[bytes]] + + def __init__( + self, + response: t.Optional[ + t.Union[t.Iterable[bytes], bytes, t.Iterable[str], str] + ] = None, + status: t.Optional[t.Union[int, str, HTTPStatus]] = None, + headers: t.Optional[ + t.Union[ + t.Mapping[str, t.Union[str, int, t.Iterable[t.Union[str, int]]]], + t.Iterable[t.Tuple[str, t.Union[str, int]]], + ] + ] = None, + mimetype: t.Optional[str] = None, + content_type: t.Optional[str] = None, + direct_passthrough: bool = False, + ) -> None: + super().__init__( + status=status, + headers=headers, + mimetype=mimetype, + content_type=content_type, + ) + + #: Pass the response body directly through as the WSGI iterable. + #: This can be used when the body is a binary file or other + #: iterator of bytes, to skip some unnecessary checks. Use + #: :func:`~werkzeug.utils.send_file` instead of setting this + #: manually. + self.direct_passthrough = direct_passthrough + self._on_close: t.List[t.Callable[[], t.Any]] = [] + + # we set the response after the headers so that if a class changes + # the charset attribute, the data is set in the correct charset. + if response is None: + self.response = [] + elif isinstance(response, (str, bytes, bytearray)): + self.set_data(response) + else: + self.response = response + + def call_on_close(self, func: t.Callable[[], t.Any]) -> t.Callable[[], t.Any]: + """Adds a function to the internal list of functions that should + be called as part of closing down the response. Since 0.7 this + function also returns the function that was passed so that this + can be used as a decorator. + + .. versionadded:: 0.6 + """ + self._on_close.append(func) + return func + + def __repr__(self) -> str: + if self.is_sequence: + body_info = f"{sum(map(len, self.iter_encoded()))} bytes" + else: + body_info = "streamed" if self.is_streamed else "likely-streamed" + return f"<{type(self).__name__} {body_info} [{self.status}]>" + + @classmethod + def force_type( + cls, response: "Response", environ: t.Optional["WSGIEnvironment"] = None + ) -> "Response": + """Enforce that the WSGI response is a response object of the current + type. Werkzeug will use the :class:`Response` internally in many + situations like the exceptions. If you call :meth:`get_response` on an + exception you will get back a regular :class:`Response` object, even + if you are using a custom subclass. + + This method can enforce a given response type, and it will also + convert arbitrary WSGI callables into response objects if an environ + is provided:: + + # convert a Werkzeug response object into an instance of the + # MyResponseClass subclass. + response = MyResponseClass.force_type(response) + + # convert any WSGI application into a response object + response = MyResponseClass.force_type(response, environ) + + This is especially useful if you want to post-process responses in + the main dispatcher and use functionality provided by your subclass. + + Keep in mind that this will modify response objects in place if + possible! + + :param response: a response object or wsgi application. + :param environ: a WSGI environment object. + :return: a response object. + """ + if not isinstance(response, Response): + if environ is None: + raise TypeError( + "cannot convert WSGI application into response" + " objects without an environ" + ) + + from ..test import run_wsgi_app + + response = Response(*run_wsgi_app(response, environ)) + + response.__class__ = cls + return response + + @classmethod + def from_app( + cls, app: "WSGIApplication", environ: "WSGIEnvironment", buffered: bool = False + ) -> "Response": + """Create a new response object from an application output. This + works best if you pass it an application that returns a generator all + the time. Sometimes applications may use the `write()` callable + returned by the `start_response` function. This tries to resolve such + edge cases automatically. But if you don't get the expected output + you should set `buffered` to `True` which enforces buffering. + + :param app: the WSGI application to execute. + :param environ: the WSGI environment to execute against. + :param buffered: set to `True` to enforce buffering. + :return: a response object. + """ + from ..test import run_wsgi_app + + return cls(*run_wsgi_app(app, environ, buffered)) + + @typing.overload + def get_data(self, as_text: "te.Literal[False]" = False) -> bytes: + ... + + @typing.overload + def get_data(self, as_text: "te.Literal[True]") -> str: + ... + + def get_data(self, as_text: bool = False) -> t.Union[bytes, str]: + """The string representation of the response body. Whenever you call + this property the response iterable is encoded and flattened. This + can lead to unwanted behavior if you stream big data. + + This behavior can be disabled by setting + :attr:`implicit_sequence_conversion` to `False`. + + If `as_text` is set to `True` the return value will be a decoded + string. + + .. versionadded:: 0.9 + """ + self._ensure_sequence() + rv = b"".join(self.iter_encoded()) + + if as_text: + return rv.decode(self.charset) + + return rv + + def set_data(self, value: t.Union[bytes, str]) -> None: + """Sets a new string as response. The value must be a string or + bytes. If a string is set it's encoded to the charset of the + response (utf-8 by default). + + .. versionadded:: 0.9 + """ + # if a string is set, it's encoded directly so that we + # can set the content length + if isinstance(value, str): + value = value.encode(self.charset) + else: + value = bytes(value) + self.response = [value] + if self.automatically_set_content_length: + self.headers["Content-Length"] = str(len(value)) + + data = property( + get_data, + set_data, + doc="A descriptor that calls :meth:`get_data` and :meth:`set_data`.", + ) + + def calculate_content_length(self) -> t.Optional[int]: + """Returns the content length if available or `None` otherwise.""" + try: + self._ensure_sequence() + except RuntimeError: + return None + return sum(len(x) for x in self.iter_encoded()) + + def _ensure_sequence(self, mutable: bool = False) -> None: + """This method can be called by methods that need a sequence. If + `mutable` is true, it will also ensure that the response sequence + is a standard Python list. + + .. versionadded:: 0.6 + """ + if self.is_sequence: + # if we need a mutable object, we ensure it's a list. + if mutable and not isinstance(self.response, list): + self.response = list(self.response) # type: ignore + return + if self.direct_passthrough: + raise RuntimeError( + "Attempted implicit sequence conversion but the" + " response object is in direct passthrough mode." + ) + if not self.implicit_sequence_conversion: + raise RuntimeError( + "The response object required the iterable to be a" + " sequence, but the implicit conversion was disabled." + " Call make_sequence() yourself." + ) + self.make_sequence() + + def make_sequence(self) -> None: + """Converts the response iterator in a list. By default this happens + automatically if required. If `implicit_sequence_conversion` is + disabled, this method is not automatically called and some properties + might raise exceptions. This also encodes all the items. + + .. versionadded:: 0.6 + """ + if not self.is_sequence: + # if we consume an iterable we have to ensure that the close + # method of the iterable is called if available when we tear + # down the response + close = getattr(self.response, "close", None) + self.response = list(self.iter_encoded()) + if close is not None: + self.call_on_close(close) + + def iter_encoded(self) -> t.Iterator[bytes]: + """Iter the response encoded with the encoding of the response. + If the response object is invoked as WSGI application the return + value of this method is used as application iterator unless + :attr:`direct_passthrough` was activated. + """ + if __debug__: + _warn_if_string(self.response) + # Encode in a separate function so that self.response is fetched + # early. This allows us to wrap the response with the return + # value from get_app_iter or iter_encoded. + return _iter_encoded(self.response, self.charset) + + @property + def is_streamed(self) -> bool: + """If the response is streamed (the response is not an iterable with + a length information) this property is `True`. In this case streamed + means that there is no information about the number of iterations. + This is usually `True` if a generator is passed to the response object. + + This is useful for checking before applying some sort of post + filtering that should not take place for streamed responses. + """ + try: + len(self.response) # type: ignore + except (TypeError, AttributeError): + return True + return False + + @property + def is_sequence(self) -> bool: + """If the iterator is buffered, this property will be `True`. A + response object will consider an iterator to be buffered if the + response attribute is a list or tuple. + + .. versionadded:: 0.6 + """ + return isinstance(self.response, (tuple, list)) + + def close(self) -> None: + """Close the wrapped response if possible. You can also use the object + in a with statement which will automatically close it. + + .. versionadded:: 0.9 + Can now be used in a with statement. + """ + if hasattr(self.response, "close"): + self.response.close() + for func in self._on_close: + func() + + def __enter__(self) -> "Response": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.close() + + def freeze(self) -> None: + """Make the response object ready to be pickled. Does the + following: + + * Buffer the response into a list, ignoring + :attr:`implicity_sequence_conversion` and + :attr:`direct_passthrough`. + * Set the ``Content-Length`` header. + * Generate an ``ETag`` header if one is not already set. + + .. versionchanged:: 2.1 + Removed the ``no_etag`` parameter. + + .. versionchanged:: 2.0 + An ``ETag`` header is added, the ``no_etag`` parameter is + deprecated and will be removed in Werkzeug 2.1. + + .. versionchanged:: 0.6 + The ``Content-Length`` header is set. + """ + # Always freeze the encoded response body, ignore + # implicit_sequence_conversion and direct_passthrough. + self.response = list(self.iter_encoded()) + self.headers["Content-Length"] = str(sum(map(len, self.response))) + self.add_etag() + + def get_wsgi_headers(self, environ: "WSGIEnvironment") -> Headers: + """This is automatically called right before the response is started + and returns headers modified for the given environment. It returns a + copy of the headers from the response with some modifications applied + if necessary. + + For example the location header (if present) is joined with the root + URL of the environment. Also the content length is automatically set + to zero here for certain status codes. + + .. versionchanged:: 0.6 + Previously that function was called `fix_headers` and modified + the response object in place. Also since 0.6, IRIs in location + and content-location headers are handled properly. + + Also starting with 0.6, Werkzeug will attempt to set the content + length if it is able to figure it out on its own. This is the + case if all the strings in the response iterable are already + encoded and the iterable is buffered. + + :param environ: the WSGI environment of the request. + :return: returns a new :class:`~werkzeug.datastructures.Headers` + object. + """ + headers = Headers(self.headers) + location: t.Optional[str] = None + content_location: t.Optional[str] = None + content_length: t.Optional[t.Union[str, int]] = None + status = self.status_code + + # iterate over the headers to find all values in one go. Because + # get_wsgi_headers is used each response that gives us a tiny + # speedup. + for key, value in headers: + ikey = key.lower() + if ikey == "location": + location = value + elif ikey == "content-location": + content_location = value + elif ikey == "content-length": + content_length = value + + # make sure the location header is an absolute URL + if location is not None: + old_location = location + if isinstance(location, str): + # Safe conversion is necessary here as we might redirect + # to a broken URI scheme (for instance itms-services). + location = iri_to_uri(location, safe_conversion=True) + + if self.autocorrect_location_header: + current_url = get_current_url(environ, strip_querystring=True) + if isinstance(current_url, str): + current_url = iri_to_uri(current_url) + location = url_join(current_url, location) + if location != old_location: + headers["Location"] = location + + # make sure the content location is a URL + if content_location is not None and isinstance(content_location, str): + headers["Content-Location"] = iri_to_uri(content_location) + + if 100 <= status < 200 or status == 204: + # Per section 3.3.2 of RFC 7230, "a server MUST NOT send a + # Content-Length header field in any response with a status + # code of 1xx (Informational) or 204 (No Content)." + headers.remove("Content-Length") + elif status == 304: + remove_entity_headers(headers) + + # if we can determine the content length automatically, we + # should try to do that. But only if this does not involve + # flattening the iterator or encoding of strings in the + # response. We however should not do that if we have a 304 + # response. + if ( + self.automatically_set_content_length + and self.is_sequence + and content_length is None + and status not in (204, 304) + and not (100 <= status < 200) + ): + try: + content_length = sum(len(_to_bytes(x, "ascii")) for x in self.response) + except UnicodeError: + # Something other than bytes, can't safely figure out + # the length of the response. + pass + else: + headers["Content-Length"] = str(content_length) + + return headers + + def get_app_iter(self, environ: "WSGIEnvironment") -> t.Iterable[bytes]: + """Returns the application iterator for the given environ. Depending + on the request method and the current status code the return value + might be an empty response rather than the one from the response. + + If the request method is `HEAD` or the status code is in a range + where the HTTP specification requires an empty response, an empty + iterable is returned. + + .. versionadded:: 0.6 + + :param environ: the WSGI environment of the request. + :return: a response iterable. + """ + status = self.status_code + if ( + environ["REQUEST_METHOD"] == "HEAD" + or 100 <= status < 200 + or status in (204, 304) + ): + iterable: t.Iterable[bytes] = () + elif self.direct_passthrough: + if __debug__: + _warn_if_string(self.response) + return self.response # type: ignore + else: + iterable = self.iter_encoded() + return ClosingIterator(iterable, self.close) + + def get_wsgi_response( + self, environ: "WSGIEnvironment" + ) -> t.Tuple[t.Iterable[bytes], str, t.List[t.Tuple[str, str]]]: + """Returns the final WSGI response as tuple. The first item in + the tuple is the application iterator, the second the status and + the third the list of headers. The response returned is created + specially for the given environment. For example if the request + method in the WSGI environment is ``'HEAD'`` the response will + be empty and only the headers and status code will be present. + + .. versionadded:: 0.6 + + :param environ: the WSGI environment of the request. + :return: an ``(app_iter, status, headers)`` tuple. + """ + headers = self.get_wsgi_headers(environ) + app_iter = self.get_app_iter(environ) + return app_iter, self.status, headers.to_wsgi_list() + + def __call__( + self, environ: "WSGIEnvironment", start_response: "StartResponse" + ) -> t.Iterable[bytes]: + """Process this response as WSGI application. + + :param environ: the WSGI environment. + :param start_response: the response callable provided by the WSGI + server. + :return: an application iterator + """ + app_iter, status, headers = self.get_wsgi_response(environ) + start_response(status, headers) + return app_iter + + # JSON + + #: A module or other object that has ``dumps`` and ``loads`` + #: functions that match the API of the built-in :mod:`json` module. + json_module = json + + @property + def json(self) -> t.Optional[t.Any]: + """The parsed JSON data if :attr:`mimetype` indicates JSON + (:mimetype:`application/json`, see :attr:`is_json`). + + Calls :meth:`get_json` with default arguments. + """ + return self.get_json() + + @t.overload + def get_json(self, force: bool = ..., silent: "te.Literal[False]" = ...) -> t.Any: + ... + + @t.overload + def get_json(self, force: bool = ..., silent: bool = ...) -> t.Optional[t.Any]: + ... + + def get_json(self, force: bool = False, silent: bool = False) -> t.Optional[t.Any]: + """Parse :attr:`data` as JSON. Useful during testing. + + If the mimetype does not indicate JSON + (:mimetype:`application/json`, see :attr:`is_json`), this + returns ``None``. + + Unlike :meth:`Request.get_json`, the result is not cached. + + :param force: Ignore the mimetype and always try to parse JSON. + :param silent: Silence parsing errors and return ``None`` + instead. + """ + if not (force or self.is_json): + return None + + data = self.get_data() + + try: + return self.json_module.loads(data) + except ValueError: + if not silent: + raise + + return None + + # Stream + + @cached_property + def stream(self) -> "ResponseStream": + """The response iterable as write-only stream.""" + return ResponseStream(self) + + def _wrap_range_response(self, start: int, length: int) -> None: + """Wrap existing Response in case of Range Request context.""" + if self.status_code == 206: + self.response = _RangeWrapper(self.response, start, length) # type: ignore + + def _is_range_request_processable(self, environ: "WSGIEnvironment") -> bool: + """Return ``True`` if `Range` header is present and if underlying + resource is considered unchanged when compared with `If-Range` header. + """ + return ( + "HTTP_IF_RANGE" not in environ + or not is_resource_modified( + environ, + self.headers.get("etag"), + None, + self.headers.get("last-modified"), + ignore_if_range=False, + ) + ) and "HTTP_RANGE" in environ + + def _process_range_request( + self, + environ: "WSGIEnvironment", + complete_length: t.Optional[int] = None, + accept_ranges: t.Optional[t.Union[bool, str]] = None, + ) -> bool: + """Handle Range Request related headers (RFC7233). If `Accept-Ranges` + header is valid, and Range Request is processable, we set the headers + as described by the RFC, and wrap the underlying response in a + RangeWrapper. + + Returns ``True`` if Range Request can be fulfilled, ``False`` otherwise. + + :raises: :class:`~werkzeug.exceptions.RequestedRangeNotSatisfiable` + if `Range` header could not be parsed or satisfied. + + .. versionchanged:: 2.0 + Returns ``False`` if the length is 0. + """ + from ..exceptions import RequestedRangeNotSatisfiable + + if ( + accept_ranges is None + or complete_length is None + or complete_length == 0 + or not self._is_range_request_processable(environ) + ): + return False + + parsed_range = parse_range_header(environ.get("HTTP_RANGE")) + + if parsed_range is None: + raise RequestedRangeNotSatisfiable(complete_length) + + range_tuple = parsed_range.range_for_length(complete_length) + content_range_header = parsed_range.to_content_range_header(complete_length) + + if range_tuple is None or content_range_header is None: + raise RequestedRangeNotSatisfiable(complete_length) + + content_length = range_tuple[1] - range_tuple[0] + self.headers["Content-Length"] = content_length + self.headers["Accept-Ranges"] = accept_ranges + self.content_range = content_range_header # type: ignore + self.status_code = 206 + self._wrap_range_response(range_tuple[0], content_length) + return True + + def make_conditional( + self, + request_or_environ: t.Union["WSGIEnvironment", "Request"], + accept_ranges: t.Union[bool, str] = False, + complete_length: t.Optional[int] = None, + ) -> "Response": + """Make the response conditional to the request. This method works + best if an etag was defined for the response already. The `add_etag` + method can be used to do that. If called without etag just the date + header is set. + + This does nothing if the request method in the request or environ is + anything but GET or HEAD. + + For optimal performance when handling range requests, it's recommended + that your response data object implements `seekable`, `seek` and `tell` + methods as described by :py:class:`io.IOBase`. Objects returned by + :meth:`~werkzeug.wsgi.wrap_file` automatically implement those methods. + + It does not remove the body of the response because that's something + the :meth:`__call__` function does for us automatically. + + Returns self so that you can do ``return resp.make_conditional(req)`` + but modifies the object in-place. + + :param request_or_environ: a request object or WSGI environment to be + used to make the response conditional + against. + :param accept_ranges: This parameter dictates the value of + `Accept-Ranges` header. If ``False`` (default), + the header is not set. If ``True``, it will be set + to ``"bytes"``. If ``None``, it will be set to + ``"none"``. If it's a string, it will use this + value. + :param complete_length: Will be used only in valid Range Requests. + It will set `Content-Range` complete length + value and compute `Content-Length` real value. + This parameter is mandatory for successful + Range Requests completion. + :raises: :class:`~werkzeug.exceptions.RequestedRangeNotSatisfiable` + if `Range` header could not be parsed or satisfied. + + .. versionchanged:: 2.0 + Range processing is skipped if length is 0 instead of + raising a 416 Range Not Satisfiable error. + """ + environ = _get_environ(request_or_environ) + if environ["REQUEST_METHOD"] in ("GET", "HEAD"): + # if the date is not in the headers, add it now. We however + # will not override an already existing header. Unfortunately + # this header will be overridden by many WSGI servers including + # wsgiref. + if "date" not in self.headers: + self.headers["Date"] = http_date() + accept_ranges = _clean_accept_ranges(accept_ranges) + is206 = self._process_range_request(environ, complete_length, accept_ranges) + if not is206 and not is_resource_modified( + environ, + self.headers.get("etag"), + None, + self.headers.get("last-modified"), + ): + if parse_etags(environ.get("HTTP_IF_MATCH")): + self.status_code = 412 + else: + self.status_code = 304 + if ( + self.automatically_set_content_length + and "content-length" not in self.headers + ): + length = self.calculate_content_length() + if length is not None: + self.headers["Content-Length"] = length + return self + + def add_etag(self, overwrite: bool = False, weak: bool = False) -> None: + """Add an etag for the current response if there is none yet. + + .. versionchanged:: 2.0 + SHA-1 is used to generate the value. MD5 may not be + available in some environments. + """ + if overwrite or "etag" not in self.headers: + self.set_etag(generate_etag(self.get_data()), weak) + + +class ResponseStream: + """A file descriptor like object used by :meth:`Response.stream` to + represent the body of the stream. It directly pushes into the + response iterable of the response object. + """ + + mode = "wb+" + + def __init__(self, response: Response): + self.response = response + self.closed = False + + def write(self, value: bytes) -> int: + if self.closed: + raise ValueError("I/O operation on closed file") + self.response._ensure_sequence(mutable=True) + self.response.response.append(value) # type: ignore + self.response.headers.pop("Content-Length", None) + return len(value) + + def writelines(self, seq: t.Iterable[bytes]) -> None: + for item in seq: + self.write(item) + + def close(self) -> None: + self.closed = True + + def flush(self) -> None: + if self.closed: + raise ValueError("I/O operation on closed file") + + def isatty(self) -> bool: + if self.closed: + raise ValueError("I/O operation on closed file") + return False + + def tell(self) -> int: + self.response._ensure_sequence() + return sum(map(len, self.response.response)) + + @property + def encoding(self) -> str: + return self.response.charset diff --git a/venv/Lib/site-packages/werkzeug/wsgi.py b/venv/Lib/site-packages/werkzeug/wsgi.py new file mode 100644 index 0000000..d74430d --- /dev/null +++ b/venv/Lib/site-packages/werkzeug/wsgi.py @@ -0,0 +1,1058 @@ +import io +import re +import typing as t +import warnings +from functools import partial +from functools import update_wrapper +from itertools import chain + +from ._internal import _make_encode_wrapper +from ._internal import _to_bytes +from ._internal import _to_str +from .sansio import utils as _sansio_utils +from .sansio.utils import host_is_trusted # noqa: F401 # Imported as part of API +from .urls import _URLTuple +from .urls import uri_to_iri +from .urls import url_join +from .urls import url_parse +from .urls import url_quote + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +def responder(f: t.Callable[..., "WSGIApplication"]) -> "WSGIApplication": + """Marks a function as responder. Decorate a function with it and it + will automatically call the return value as WSGI application. + + Example:: + + @responder + def application(environ, start_response): + return Response('Hello World!') + """ + return update_wrapper(lambda *a: f(*a)(*a[-2:]), f) + + +def get_current_url( + environ: "WSGIEnvironment", + root_only: bool = False, + strip_querystring: bool = False, + host_only: bool = False, + trusted_hosts: t.Optional[t.Iterable[str]] = None, +) -> str: + """Recreate the URL for a request from the parts in a WSGI + environment. + + The URL is an IRI, not a URI, so it may contain Unicode characters. + Use :func:`~werkzeug.urls.iri_to_uri` to convert it to ASCII. + + :param environ: The WSGI environment to get the URL parts from. + :param root_only: Only build the root path, don't include the + remaining path or query string. + :param strip_querystring: Don't include the query string. + :param host_only: Only build the scheme and host. + :param trusted_hosts: A list of trusted host names to validate the + host against. + """ + parts = { + "scheme": environ["wsgi.url_scheme"], + "host": get_host(environ, trusted_hosts), + } + + if not host_only: + parts["root_path"] = environ.get("SCRIPT_NAME", "") + + if not root_only: + parts["path"] = environ.get("PATH_INFO", "") + + if not strip_querystring: + parts["query_string"] = environ.get("QUERY_STRING", "").encode("latin1") + + return _sansio_utils.get_current_url(**parts) + + +def _get_server( + environ: "WSGIEnvironment", +) -> t.Optional[t.Tuple[str, t.Optional[int]]]: + name = environ.get("SERVER_NAME") + + if name is None: + return None + + try: + port: t.Optional[int] = int(environ.get("SERVER_PORT", None)) + except (TypeError, ValueError): + # unix socket + port = None + + return name, port + + +def get_host( + environ: "WSGIEnvironment", trusted_hosts: t.Optional[t.Iterable[str]] = None +) -> str: + """Return the host for the given WSGI environment. + + The ``Host`` header is preferred, then ``SERVER_NAME`` if it's not + set. The returned host will only contain the port if it is different + than the standard port for the protocol. + + Optionally, verify that the host is trusted using + :func:`host_is_trusted` and raise a + :exc:`~werkzeug.exceptions.SecurityError` if it is not. + + :param environ: A WSGI environment dict. + :param trusted_hosts: A list of trusted host names. + + :return: Host, with port if necessary. + :raise ~werkzeug.exceptions.SecurityError: If the host is not + trusted. + """ + return _sansio_utils.get_host( + environ["wsgi.url_scheme"], + environ.get("HTTP_HOST"), + _get_server(environ), + trusted_hosts, + ) + + +def get_content_length(environ: "WSGIEnvironment") -> t.Optional[int]: + """Returns the content length from the WSGI environment as + integer. If it's not available or chunked transfer encoding is used, + ``None`` is returned. + + .. versionadded:: 0.9 + + :param environ: the WSGI environ to fetch the content length from. + """ + return _sansio_utils.get_content_length( + http_content_length=environ.get("CONTENT_LENGTH"), + http_transfer_encoding=environ.get("HTTP_TRANSFER_ENCODING", ""), + ) + + +def get_input_stream( + environ: "WSGIEnvironment", safe_fallback: bool = True +) -> t.IO[bytes]: + """Returns the input stream from the WSGI environment and wraps it + in the most sensible way possible. The stream returned is not the + raw WSGI stream in most cases but one that is safe to read from + without taking into account the content length. + + If content length is not set, the stream will be empty for safety reasons. + If the WSGI server supports chunked or infinite streams, it should set + the ``wsgi.input_terminated`` value in the WSGI environ to indicate that. + + .. versionadded:: 0.9 + + :param environ: the WSGI environ to fetch the stream from. + :param safe_fallback: use an empty stream as a safe fallback when the + content length is not set. Disabling this allows infinite streams, + which can be a denial-of-service risk. + """ + stream = t.cast(t.IO[bytes], environ["wsgi.input"]) + content_length = get_content_length(environ) + + # A wsgi extension that tells us if the input is terminated. In + # that case we return the stream unchanged as we know we can safely + # read it until the end. + if environ.get("wsgi.input_terminated"): + return stream + + # If the request doesn't specify a content length, returning the stream is + # potentially dangerous because it could be infinite, malicious or not. If + # safe_fallback is true, return an empty stream instead for safety. + if content_length is None: + return io.BytesIO() if safe_fallback else stream + + # Otherwise limit the stream to the content length + return t.cast(t.IO[bytes], LimitedStream(stream, content_length)) + + +def get_query_string(environ: "WSGIEnvironment") -> str: + """Returns the ``QUERY_STRING`` from the WSGI environment. This also + takes care of the WSGI decoding dance. The string returned will be + restricted to ASCII characters. + + :param environ: WSGI environment to get the query string from. + + .. deprecated:: 2.2 + Will be removed in Werkzeug 2.3. + + .. versionadded:: 0.9 + """ + warnings.warn( + "'get_query_string' is deprecated and will be removed in Werkzeug 2.3.", + DeprecationWarning, + stacklevel=2, + ) + qs = environ.get("QUERY_STRING", "").encode("latin1") + # QUERY_STRING really should be ascii safe but some browsers + # will send us some unicode stuff (I am looking at you IE). + # In that case we want to urllib quote it badly. + return url_quote(qs, safe=":&%=+$!*'(),") + + +def get_path_info( + environ: "WSGIEnvironment", charset: str = "utf-8", errors: str = "replace" +) -> str: + """Return the ``PATH_INFO`` from the WSGI environment and decode it + unless ``charset`` is ``None``. + + :param environ: WSGI environment to get the path from. + :param charset: The charset for the path info, or ``None`` if no + decoding should be performed. + :param errors: The decoding error handling. + + .. versionadded:: 0.9 + """ + path = environ.get("PATH_INFO", "").encode("latin1") + return _to_str(path, charset, errors, allow_none_charset=True) # type: ignore + + +def get_script_name( + environ: "WSGIEnvironment", charset: str = "utf-8", errors: str = "replace" +) -> str: + """Return the ``SCRIPT_NAME`` from the WSGI environment and decode + it unless `charset` is set to ``None``. + + :param environ: WSGI environment to get the path from. + :param charset: The charset for the path, or ``None`` if no decoding + should be performed. + :param errors: The decoding error handling. + + .. deprecated:: 2.2 + Will be removed in Werkzeug 2.3. + + .. versionadded:: 0.9 + """ + warnings.warn( + "'get_script_name' is deprecated and will be removed in Werkzeug 2.3.", + DeprecationWarning, + stacklevel=2, + ) + path = environ.get("SCRIPT_NAME", "").encode("latin1") + return _to_str(path, charset, errors, allow_none_charset=True) # type: ignore + + +def pop_path_info( + environ: "WSGIEnvironment", charset: str = "utf-8", errors: str = "replace" +) -> t.Optional[str]: + """Removes and returns the next segment of `PATH_INFO`, pushing it onto + `SCRIPT_NAME`. Returns `None` if there is nothing left on `PATH_INFO`. + + If the `charset` is set to `None` bytes are returned. + + If there are empty segments (``'/foo//bar``) these are ignored but + properly pushed to the `SCRIPT_NAME`: + + >>> env = {'SCRIPT_NAME': '/foo', 'PATH_INFO': '/a/b'} + >>> pop_path_info(env) + 'a' + >>> env['SCRIPT_NAME'] + '/foo/a' + >>> pop_path_info(env) + 'b' + >>> env['SCRIPT_NAME'] + '/foo/a/b' + + .. deprecated:: 2.2 + Will be removed in Werkzeug 2.3. + + .. versionadded:: 0.5 + + .. versionchanged:: 0.9 + The path is now decoded and a charset and encoding + parameter can be provided. + + :param environ: the WSGI environment that is modified. + :param charset: The ``encoding`` parameter passed to + :func:`bytes.decode`. + :param errors: The ``errors`` paramater passed to + :func:`bytes.decode`. + """ + warnings.warn( + "'pop_path_info' is deprecated and will be removed in Werkzeug 2.3.", + DeprecationWarning, + stacklevel=2, + ) + + path = environ.get("PATH_INFO") + if not path: + return None + + script_name = environ.get("SCRIPT_NAME", "") + + # shift multiple leading slashes over + old_path = path + path = path.lstrip("/") + if path != old_path: + script_name += "/" * (len(old_path) - len(path)) + + if "/" not in path: + environ["PATH_INFO"] = "" + environ["SCRIPT_NAME"] = script_name + path + rv = path.encode("latin1") + else: + segment, path = path.split("/", 1) + environ["PATH_INFO"] = f"/{path}" + environ["SCRIPT_NAME"] = script_name + segment + rv = segment.encode("latin1") + + return _to_str(rv, charset, errors, allow_none_charset=True) # type: ignore + + +def peek_path_info( + environ: "WSGIEnvironment", charset: str = "utf-8", errors: str = "replace" +) -> t.Optional[str]: + """Returns the next segment on the `PATH_INFO` or `None` if there + is none. Works like :func:`pop_path_info` without modifying the + environment: + + >>> env = {'SCRIPT_NAME': '/foo', 'PATH_INFO': '/a/b'} + >>> peek_path_info(env) + 'a' + >>> peek_path_info(env) + 'a' + + If the `charset` is set to `None` bytes are returned. + + .. deprecated:: 2.2 + Will be removed in Werkzeug 2.3. + + .. versionadded:: 0.5 + + .. versionchanged:: 0.9 + The path is now decoded and a charset and encoding + parameter can be provided. + + :param environ: the WSGI environment that is checked. + """ + warnings.warn( + "'peek_path_info' is deprecated and will be removed in Werkzeug 2.3.", + DeprecationWarning, + stacklevel=2, + ) + + segments = environ.get("PATH_INFO", "").lstrip("/").split("/", 1) + if segments: + return _to_str( # type: ignore + segments[0].encode("latin1"), charset, errors, allow_none_charset=True + ) + return None + + +def extract_path_info( + environ_or_baseurl: t.Union[str, "WSGIEnvironment"], + path_or_url: t.Union[str, _URLTuple], + charset: str = "utf-8", + errors: str = "werkzeug.url_quote", + collapse_http_schemes: bool = True, +) -> t.Optional[str]: + """Extracts the path info from the given URL (or WSGI environment) and + path. The path info returned is a string. The URLs might also be IRIs. + + If the path info could not be determined, `None` is returned. + + Some examples: + + >>> extract_path_info('http://example.com/app', '/app/hello') + '/hello' + >>> extract_path_info('http://example.com/app', + ... 'https://example.com/app/hello') + '/hello' + >>> extract_path_info('http://example.com/app', + ... 'https://example.com/app/hello', + ... collapse_http_schemes=False) is None + True + + Instead of providing a base URL you can also pass a WSGI environment. + + :param environ_or_baseurl: a WSGI environment dict, a base URL or + base IRI. This is the root of the + application. + :param path_or_url: an absolute path from the server root, a + relative path (in which case it's the path info) + or a full URL. + :param charset: the charset for byte data in URLs + :param errors: the error handling on decode + :param collapse_http_schemes: if set to `False` the algorithm does + not assume that http and https on the + same server point to the same + resource. + + .. deprecated:: 2.2 + Will be removed in Werkzeug 2.3. + + .. versionchanged:: 0.15 + The ``errors`` parameter defaults to leaving invalid bytes + quoted instead of replacing them. + + .. versionadded:: 0.6 + + """ + warnings.warn( + "'extract_path_info' is deprecated and will be removed in Werkzeug 2.3.", + DeprecationWarning, + stacklevel=2, + ) + + def _normalize_netloc(scheme: str, netloc: str) -> str: + parts = netloc.split("@", 1)[-1].split(":", 1) + port: t.Optional[str] + + if len(parts) == 2: + netloc, port = parts + if (scheme == "http" and port == "80") or ( + scheme == "https" and port == "443" + ): + port = None + else: + netloc = parts[0] + port = None + + if port is not None: + netloc += f":{port}" + + return netloc + + # make sure whatever we are working on is a IRI and parse it + path = uri_to_iri(path_or_url, charset, errors) + if isinstance(environ_or_baseurl, dict): + environ_or_baseurl = get_current_url(environ_or_baseurl, root_only=True) + base_iri = uri_to_iri(environ_or_baseurl, charset, errors) + base_scheme, base_netloc, base_path = url_parse(base_iri)[:3] + cur_scheme, cur_netloc, cur_path = url_parse(url_join(base_iri, path))[:3] + + # normalize the network location + base_netloc = _normalize_netloc(base_scheme, base_netloc) + cur_netloc = _normalize_netloc(cur_scheme, cur_netloc) + + # is that IRI even on a known HTTP scheme? + if collapse_http_schemes: + for scheme in base_scheme, cur_scheme: + if scheme not in ("http", "https"): + return None + else: + if not (base_scheme in ("http", "https") and base_scheme == cur_scheme): + return None + + # are the netlocs compatible? + if base_netloc != cur_netloc: + return None + + # are we below the application path? + base_path = base_path.rstrip("/") + if not cur_path.startswith(base_path): + return None + + return f"/{cur_path[len(base_path) :].lstrip('/')}" + + +class ClosingIterator: + """The WSGI specification requires that all middlewares and gateways + respect the `close` callback of the iterable returned by the application. + Because it is useful to add another close action to a returned iterable + and adding a custom iterable is a boring task this class can be used for + that:: + + return ClosingIterator(app(environ, start_response), [cleanup_session, + cleanup_locals]) + + If there is just one close function it can be passed instead of the list. + + A closing iterator is not needed if the application uses response objects + and finishes the processing if the response is started:: + + try: + return response(environ, start_response) + finally: + cleanup_session() + cleanup_locals() + """ + + def __init__( + self, + iterable: t.Iterable[bytes], + callbacks: t.Optional[ + t.Union[t.Callable[[], None], t.Iterable[t.Callable[[], None]]] + ] = None, + ) -> None: + iterator = iter(iterable) + self._next = t.cast(t.Callable[[], bytes], partial(next, iterator)) + if callbacks is None: + callbacks = [] + elif callable(callbacks): + callbacks = [callbacks] + else: + callbacks = list(callbacks) + iterable_close = getattr(iterable, "close", None) + if iterable_close: + callbacks.insert(0, iterable_close) + self._callbacks = callbacks + + def __iter__(self) -> "ClosingIterator": + return self + + def __next__(self) -> bytes: + return self._next() + + def close(self) -> None: + for callback in self._callbacks: + callback() + + +def wrap_file( + environ: "WSGIEnvironment", file: t.IO[bytes], buffer_size: int = 8192 +) -> t.Iterable[bytes]: + """Wraps a file. This uses the WSGI server's file wrapper if available + or otherwise the generic :class:`FileWrapper`. + + .. versionadded:: 0.5 + + If the file wrapper from the WSGI server is used it's important to not + iterate over it from inside the application but to pass it through + unchanged. If you want to pass out a file wrapper inside a response + object you have to set :attr:`Response.direct_passthrough` to `True`. + + More information about file wrappers are available in :pep:`333`. + + :param file: a :class:`file`-like object with a :meth:`~file.read` method. + :param buffer_size: number of bytes for one iteration. + """ + return environ.get("wsgi.file_wrapper", FileWrapper)( # type: ignore + file, buffer_size + ) + + +class FileWrapper: + """This class can be used to convert a :class:`file`-like object into + an iterable. It yields `buffer_size` blocks until the file is fully + read. + + You should not use this class directly but rather use the + :func:`wrap_file` function that uses the WSGI server's file wrapper + support if it's available. + + .. versionadded:: 0.5 + + If you're using this object together with a :class:`Response` you have + to use the `direct_passthrough` mode. + + :param file: a :class:`file`-like object with a :meth:`~file.read` method. + :param buffer_size: number of bytes for one iteration. + """ + + def __init__(self, file: t.IO[bytes], buffer_size: int = 8192) -> None: + self.file = file + self.buffer_size = buffer_size + + def close(self) -> None: + if hasattr(self.file, "close"): + self.file.close() + + def seekable(self) -> bool: + if hasattr(self.file, "seekable"): + return self.file.seekable() + if hasattr(self.file, "seek"): + return True + return False + + def seek(self, *args: t.Any) -> None: + if hasattr(self.file, "seek"): + self.file.seek(*args) + + def tell(self) -> t.Optional[int]: + if hasattr(self.file, "tell"): + return self.file.tell() + return None + + def __iter__(self) -> "FileWrapper": + return self + + def __next__(self) -> bytes: + data = self.file.read(self.buffer_size) + if data: + return data + raise StopIteration() + + +class _RangeWrapper: + # private for now, but should we make it public in the future ? + + """This class can be used to convert an iterable object into + an iterable that will only yield a piece of the underlying content. + It yields blocks until the underlying stream range is fully read. + The yielded blocks will have a size that can't exceed the original + iterator defined block size, but that can be smaller. + + If you're using this object together with a :class:`Response` you have + to use the `direct_passthrough` mode. + + :param iterable: an iterable object with a :meth:`__next__` method. + :param start_byte: byte from which read will start. + :param byte_range: how many bytes to read. + """ + + def __init__( + self, + iterable: t.Union[t.Iterable[bytes], t.IO[bytes]], + start_byte: int = 0, + byte_range: t.Optional[int] = None, + ): + self.iterable = iter(iterable) + self.byte_range = byte_range + self.start_byte = start_byte + self.end_byte = None + + if byte_range is not None: + self.end_byte = start_byte + byte_range + + self.read_length = 0 + self.seekable = hasattr(iterable, "seekable") and iterable.seekable() + self.end_reached = False + + def __iter__(self) -> "_RangeWrapper": + return self + + def _next_chunk(self) -> bytes: + try: + chunk = next(self.iterable) + self.read_length += len(chunk) + return chunk + except StopIteration: + self.end_reached = True + raise + + def _first_iteration(self) -> t.Tuple[t.Optional[bytes], int]: + chunk = None + if self.seekable: + self.iterable.seek(self.start_byte) # type: ignore + self.read_length = self.iterable.tell() # type: ignore + contextual_read_length = self.read_length + else: + while self.read_length <= self.start_byte: + chunk = self._next_chunk() + if chunk is not None: + chunk = chunk[self.start_byte - self.read_length :] + contextual_read_length = self.start_byte + return chunk, contextual_read_length + + def _next(self) -> bytes: + if self.end_reached: + raise StopIteration() + chunk = None + contextual_read_length = self.read_length + if self.read_length == 0: + chunk, contextual_read_length = self._first_iteration() + if chunk is None: + chunk = self._next_chunk() + if self.end_byte is not None and self.read_length >= self.end_byte: + self.end_reached = True + return chunk[: self.end_byte - contextual_read_length] + return chunk + + def __next__(self) -> bytes: + chunk = self._next() + if chunk: + return chunk + self.end_reached = True + raise StopIteration() + + def close(self) -> None: + if hasattr(self.iterable, "close"): + self.iterable.close() + + +def _make_chunk_iter( + stream: t.Union[t.Iterable[bytes], t.IO[bytes]], + limit: t.Optional[int], + buffer_size: int, +) -> t.Iterator[bytes]: + """Helper for the line and chunk iter functions.""" + if isinstance(stream, (bytes, bytearray, str)): + raise TypeError( + "Passed a string or byte object instead of true iterator or stream." + ) + if not hasattr(stream, "read"): + for item in stream: + if item: + yield item + return + stream = t.cast(t.IO[bytes], stream) + if not isinstance(stream, LimitedStream) and limit is not None: + stream = t.cast(t.IO[bytes], LimitedStream(stream, limit)) + _read = stream.read + while True: + item = _read(buffer_size) + if not item: + break + yield item + + +def make_line_iter( + stream: t.Union[t.Iterable[bytes], t.IO[bytes]], + limit: t.Optional[int] = None, + buffer_size: int = 10 * 1024, + cap_at_buffer: bool = False, +) -> t.Iterator[bytes]: + """Safely iterates line-based over an input stream. If the input stream + is not a :class:`LimitedStream` the `limit` parameter is mandatory. + + This uses the stream's :meth:`~file.read` method internally as opposite + to the :meth:`~file.readline` method that is unsafe and can only be used + in violation of the WSGI specification. The same problem applies to the + `__iter__` function of the input stream which calls :meth:`~file.readline` + without arguments. + + If you need line-by-line processing it's strongly recommended to iterate + over the input stream using this helper function. + + .. versionchanged:: 0.8 + This function now ensures that the limit was reached. + + .. versionadded:: 0.9 + added support for iterators as input stream. + + .. versionadded:: 0.11.10 + added support for the `cap_at_buffer` parameter. + + :param stream: the stream or iterate to iterate over. + :param limit: the limit in bytes for the stream. (Usually + content length. Not necessary if the `stream` + is a :class:`LimitedStream`. + :param buffer_size: The optional buffer size. + :param cap_at_buffer: if this is set chunks are split if they are longer + than the buffer size. Internally this is implemented + that the buffer size might be exhausted by a factor + of two however. + """ + _iter = _make_chunk_iter(stream, limit, buffer_size) + + first_item = next(_iter, "") + if not first_item: + return + + s = _make_encode_wrapper(first_item) + empty = t.cast(bytes, s("")) + cr = t.cast(bytes, s("\r")) + lf = t.cast(bytes, s("\n")) + crlf = t.cast(bytes, s("\r\n")) + + _iter = t.cast(t.Iterator[bytes], chain((first_item,), _iter)) + + def _iter_basic_lines() -> t.Iterator[bytes]: + _join = empty.join + buffer: t.List[bytes] = [] + while True: + new_data = next(_iter, "") + if not new_data: + break + new_buf: t.List[bytes] = [] + buf_size = 0 + for item in t.cast( + t.Iterator[bytes], chain(buffer, new_data.splitlines(True)) + ): + new_buf.append(item) + buf_size += len(item) + if item and item[-1:] in crlf: + yield _join(new_buf) + new_buf = [] + elif cap_at_buffer and buf_size >= buffer_size: + rv = _join(new_buf) + while len(rv) >= buffer_size: + yield rv[:buffer_size] + rv = rv[buffer_size:] + new_buf = [rv] + buffer = new_buf + if buffer: + yield _join(buffer) + + # This hackery is necessary to merge 'foo\r' and '\n' into one item + # of 'foo\r\n' if we were unlucky and we hit a chunk boundary. + previous = empty + for item in _iter_basic_lines(): + if item == lf and previous[-1:] == cr: + previous += item + item = empty + if previous: + yield previous + previous = item + if previous: + yield previous + + +def make_chunk_iter( + stream: t.Union[t.Iterable[bytes], t.IO[bytes]], + separator: bytes, + limit: t.Optional[int] = None, + buffer_size: int = 10 * 1024, + cap_at_buffer: bool = False, +) -> t.Iterator[bytes]: + """Works like :func:`make_line_iter` but accepts a separator + which divides chunks. If you want newline based processing + you should use :func:`make_line_iter` instead as it + supports arbitrary newline markers. + + .. versionadded:: 0.8 + + .. versionadded:: 0.9 + added support for iterators as input stream. + + .. versionadded:: 0.11.10 + added support for the `cap_at_buffer` parameter. + + :param stream: the stream or iterate to iterate over. + :param separator: the separator that divides chunks. + :param limit: the limit in bytes for the stream. (Usually + content length. Not necessary if the `stream` + is otherwise already limited). + :param buffer_size: The optional buffer size. + :param cap_at_buffer: if this is set chunks are split if they are longer + than the buffer size. Internally this is implemented + that the buffer size might be exhausted by a factor + of two however. + """ + _iter = _make_chunk_iter(stream, limit, buffer_size) + + first_item = next(_iter, b"") + if not first_item: + return + + _iter = t.cast(t.Iterator[bytes], chain((first_item,), _iter)) + if isinstance(first_item, str): + separator = _to_str(separator) + _split = re.compile(f"({re.escape(separator)})").split + _join = "".join + else: + separator = _to_bytes(separator) + _split = re.compile(b"(" + re.escape(separator) + b")").split + _join = b"".join + + buffer: t.List[bytes] = [] + while True: + new_data = next(_iter, b"") + if not new_data: + break + chunks = _split(new_data) + new_buf: t.List[bytes] = [] + buf_size = 0 + for item in chain(buffer, chunks): + if item == separator: + yield _join(new_buf) + new_buf = [] + buf_size = 0 + else: + buf_size += len(item) + new_buf.append(item) + + if cap_at_buffer and buf_size >= buffer_size: + rv = _join(new_buf) + while len(rv) >= buffer_size: + yield rv[:buffer_size] + rv = rv[buffer_size:] + new_buf = [rv] + buf_size = len(rv) + + buffer = new_buf + if buffer: + yield _join(buffer) + + +class LimitedStream(io.IOBase): + """Wraps a stream so that it doesn't read more than n bytes. If the + stream is exhausted and the caller tries to get more bytes from it + :func:`on_exhausted` is called which by default returns an empty + string. The return value of that function is forwarded + to the reader function. So if it returns an empty string + :meth:`read` will return an empty string as well. + + The limit however must never be higher than what the stream can + output. Otherwise :meth:`readlines` will try to read past the + limit. + + .. admonition:: Note on WSGI compliance + + calls to :meth:`readline` and :meth:`readlines` are not + WSGI compliant because it passes a size argument to the + readline methods. Unfortunately the WSGI PEP is not safely + implementable without a size argument to :meth:`readline` + because there is no EOF marker in the stream. As a result + of that the use of :meth:`readline` is discouraged. + + For the same reason iterating over the :class:`LimitedStream` + is not portable. It internally calls :meth:`readline`. + + We strongly suggest using :meth:`read` only or using the + :func:`make_line_iter` which safely iterates line-based + over a WSGI input stream. + + :param stream: the stream to wrap. + :param limit: the limit for the stream, must not be longer than + what the string can provide if the stream does not + end with `EOF` (like `wsgi.input`) + """ + + def __init__(self, stream: t.IO[bytes], limit: int) -> None: + self._read = stream.read + self._readline = stream.readline + self._pos = 0 + self.limit = limit + + def __iter__(self) -> "LimitedStream": + return self + + @property + def is_exhausted(self) -> bool: + """If the stream is exhausted this attribute is `True`.""" + return self._pos >= self.limit + + def on_exhausted(self) -> bytes: + """This is called when the stream tries to read past the limit. + The return value of this function is returned from the reading + function. + """ + # Read null bytes from the stream so that we get the + # correct end of stream marker. + return self._read(0) + + def on_disconnect(self) -> bytes: + """What should happen if a disconnect is detected? The return + value of this function is returned from read functions in case + the client went away. By default a + :exc:`~werkzeug.exceptions.ClientDisconnected` exception is raised. + """ + from .exceptions import ClientDisconnected + + raise ClientDisconnected() + + def _exhaust_chunks(self, chunk_size: int = 1024 * 64) -> t.Iterator[bytes]: + """Exhaust the stream by reading until the limit is reached or the client + disconnects, yielding each chunk. + + :param chunk_size: How many bytes to read at a time. + + :meta private: + + .. versionadded:: 2.2.3 + """ + to_read = self.limit - self._pos + + while to_read > 0: + chunk = self.read(min(to_read, chunk_size)) + yield chunk + to_read -= len(chunk) + + def exhaust(self, chunk_size: int = 1024 * 64) -> None: + """Exhaust the stream by reading until the limit is reached or the client + disconnects, discarding the data. + + :param chunk_size: How many bytes to read at a time. + + .. versionchanged:: 2.2.3 + Handle case where wrapped stream returns fewer bytes than requested. + """ + for _ in self._exhaust_chunks(chunk_size): + pass + + def read(self, size: t.Optional[int] = None) -> bytes: + """Read up to ``size`` bytes from the underlying stream. If size is not + provided, read until the limit. + + If the limit is reached, :meth:`on_exhausted` is called, which returns empty + bytes. + + If no bytes are read and the limit is not reached, or if an error occurs during + the read, :meth:`on_disconnect` is called, which raises + :exc:`.ClientDisconnected`. + + :param size: The number of bytes to read. ``None``, default, reads until the + limit is reached. + + .. versionchanged:: 2.2.3 + Handle case where wrapped stream returns fewer bytes than requested. + """ + if self._pos >= self.limit: + return self.on_exhausted() + + if size is None or size == -1: # -1 is for consistency with file + # Keep reading from the wrapped stream until the limit is reached. Can't + # rely on stream.read(size) because it's not guaranteed to return size. + buf = bytearray() + + for chunk in self._exhaust_chunks(): + buf.extend(chunk) + + return bytes(buf) + + to_read = min(self.limit - self._pos, size) + + try: + read = self._read(to_read) + except (OSError, ValueError): + return self.on_disconnect() + + if to_read and not len(read): + # If no data was read, treat it as a disconnect. As long as some data was + # read, a subsequent call can still return more before reaching the limit. + return self.on_disconnect() + + self._pos += len(read) + return read + + def readline(self, size: t.Optional[int] = None) -> bytes: + """Reads one line from the stream.""" + if self._pos >= self.limit: + return self.on_exhausted() + if size is None: + size = self.limit - self._pos + else: + size = min(size, self.limit - self._pos) + try: + line = self._readline(size) + except (ValueError, OSError): + return self.on_disconnect() + if size and not line: + return self.on_disconnect() + self._pos += len(line) + return line + + def readlines(self, size: t.Optional[int] = None) -> t.List[bytes]: + """Reads a file into a list of strings. It calls :meth:`readline` + until the file is read to the end. It does support the optional + `size` argument if the underlying stream supports it for + `readline`. + """ + last_pos = self._pos + result = [] + if size is not None: + end = min(self.limit, last_pos + size) + else: + end = self.limit + while True: + if size is not None: + size -= last_pos - self._pos + if self._pos >= end: + break + result.append(self.readline(size)) + if size is not None: + last_pos = self._pos + return result + + def tell(self) -> int: + """Returns the position of the stream. + + .. versionadded:: 0.9 + """ + return self._pos + + def __next__(self) -> bytes: + line = self.readline() + if not line: + raise StopIteration() + return line + + def readable(self) -> bool: + return True diff --git a/venv/Lib/site-packages/zipp-3.15.0.dist-info/INSTALLER b/venv/Lib/site-packages/zipp-3.15.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/zipp-3.15.0.dist-info/LICENSE b/venv/Lib/site-packages/zipp-3.15.0.dist-info/LICENSE new file mode 100644 index 0000000..353924b --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright Jason R. Coombs + +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/venv/Lib/site-packages/zipp-3.15.0.dist-info/METADATA b/venv/Lib/site-packages/zipp-3.15.0.dist-info/METADATA new file mode 100644 index 0000000..0a5976b --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/METADATA @@ -0,0 +1,106 @@ +Metadata-Version: 2.1 +Name: zipp +Version: 3.15.0 +Summary: Backport of pathlib-compatible object wrapper for zip files +Home-page: https://github.com/jaraco/zipp +Author: Jason R. Coombs +Author-email: jaraco@jaraco.com +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Requires-Python: >=3.7 +License-File: LICENSE +Provides-Extra: docs +Requires-Dist: sphinx (>=3.5) ; extra == 'docs' +Requires-Dist: jaraco.packaging (>=9) ; extra == 'docs' +Requires-Dist: rst.linker (>=1.9) ; extra == 'docs' +Requires-Dist: furo ; extra == 'docs' +Requires-Dist: sphinx-lint ; extra == 'docs' +Requires-Dist: jaraco.tidelift (>=1.4) ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest (>=6) ; extra == 'testing' +Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing' +Requires-Dist: flake8 (<5) ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler (>=1.3) ; extra == 'testing' +Requires-Dist: jaraco.itertools ; extra == 'testing' +Requires-Dist: jaraco.functools ; extra == 'testing' +Requires-Dist: more-itertools ; extra == 'testing' +Requires-Dist: big-O ; extra == 'testing' +Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-flake8 ; (python_version < "3.12") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/zipp.svg + :target: https://pypi.org/project/zipp + +.. image:: https://img.shields.io/pypi/pyversions/zipp.svg + +.. image:: https://github.com/jaraco/zipp/workflows/tests/badge.svg + :target: https://github.com/jaraco/zipp/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + +.. .. image:: https://readthedocs.org/projects/skeleton/badge/?version=latest +.. :target: https://skeleton.readthedocs.io/en/latest/?badge=latest + +.. image:: https://img.shields.io/badge/skeleton-2023-informational + :target: https://blog.jaraco.com/skeleton + +.. image:: https://tidelift.com/badges/package/pypi/zipp + :target: https://tidelift.com/subscription/pkg/pypi-zipp?utm_source=pypi-zipp&utm_medium=readme + + +A pathlib-compatible Zipfile object wrapper. Official backport of the standard library +`Path object `_. + + +Compatibility +============= + +New features are introduced in this third-party library and later merged +into CPython. The following table indicates which versions of this library +were contributed to different versions in the standard library: + +.. list-table:: + :header-rows: 1 + + * - zipp + - stdlib + * - 3.9 + - 3.12 + * - 3.5 + - 3.11 + * - 3.2 + - 3.10 + * - 3.3 ?? + - 3.9 + * - 1.0 + - 3.8 + + +Usage +===== + +Use ``zipp.Path`` in place of ``zipfile.Path`` on any Python. + +For Enterprise +============== + +Available as part of the Tidelift Subscription. + +This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. + +`Learn more `_. + +Security Contact +================ + +To report a security vulnerability, please use the +`Tidelift security contact `_. +Tidelift will coordinate the fix and disclosure. diff --git a/venv/Lib/site-packages/zipp-3.15.0.dist-info/RECORD b/venv/Lib/site-packages/zipp-3.15.0.dist-info/RECORD new file mode 100644 index 0000000..f3fdcce --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/RECORD @@ -0,0 +1,10 @@ +zipp/__init__.py,sha256=ZNjHuOKaFmgrSPvtIlHYFNCvENHqSYuqEVktBgj9cu8,10676 +zipp/py310compat.py,sha256=HQG4If-eI5v4RT82Uagk7PuLsbnJ7HKgj0aQKGRAp8M,309 +zipp-3.15.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +zipp-3.15.0.dist-info/METADATA,sha256=el77dlVTqXoMRoTxqwIdoMNmNAkERCn9v9-XlKjJfAU,3735 +zipp-3.15.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 +zipp-3.15.0.dist-info/top_level.txt,sha256=iAbdoSHfaGqBfVb2XuR9JqSQHCoOsOtG6y9C_LSpqFw,5 +zipp-3.15.0.dist-info/RECORD,, +zipp-3.15.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +zipp/__pycache__/py310compat.cpython-37.pyc,, +zipp/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/Lib/site-packages/zipp-3.15.0.dist-info/WHEEL b/venv/Lib/site-packages/zipp-3.15.0.dist-info/WHEEL new file mode 100644 index 0000000..57e3d84 --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.38.4) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/zipp-3.15.0.dist-info/top_level.txt b/venv/Lib/site-packages/zipp-3.15.0.dist-info/top_level.txt new file mode 100644 index 0000000..e82f676 --- /dev/null +++ b/venv/Lib/site-packages/zipp-3.15.0.dist-info/top_level.txt @@ -0,0 +1 @@ +zipp diff --git a/venv/Lib/site-packages/zipp/__init__.py b/venv/Lib/site-packages/zipp/__init__.py new file mode 100644 index 0000000..ddfa0a6 --- /dev/null +++ b/venv/Lib/site-packages/zipp/__init__.py @@ -0,0 +1,402 @@ +import io +import posixpath +import zipfile +import itertools +import contextlib +import pathlib +import re +import fnmatch + +from .py310compat import text_encoding + + +__all__ = ['Path'] + + +def _parents(path): + """ + Given a path with elements separated by + posixpath.sep, generate all parents of that path. + + >>> list(_parents('b/d')) + ['b'] + >>> list(_parents('/b/d/')) + ['/b'] + >>> list(_parents('b/d/f/')) + ['b/d', 'b'] + >>> list(_parents('b')) + [] + >>> list(_parents('')) + [] + """ + return itertools.islice(_ancestry(path), 1, None) + + +def _ancestry(path): + """ + Given a path with elements separated by + posixpath.sep, generate all elements of that path + + >>> list(_ancestry('b/d')) + ['b/d', 'b'] + >>> list(_ancestry('/b/d/')) + ['/b/d', '/b'] + >>> list(_ancestry('b/d/f/')) + ['b/d/f', 'b/d', 'b'] + >>> list(_ancestry('b')) + ['b'] + >>> list(_ancestry('')) + [] + """ + path = path.rstrip(posixpath.sep) + while path and path != posixpath.sep: + yield path + path, tail = posixpath.split(path) + + +_dedupe = dict.fromkeys +"""Deduplicate an iterable in original order""" + + +def _difference(minuend, subtrahend): + """ + Return items in minuend not in subtrahend, retaining order + with O(1) lookup. + """ + return itertools.filterfalse(set(subtrahend).__contains__, minuend) + + +class InitializedState: + """ + Mix-in to save the initialization state for pickling. + """ + + def __init__(self, *args, **kwargs): + self.__args = args + self.__kwargs = kwargs + super().__init__(*args, **kwargs) + + def __getstate__(self): + return self.__args, self.__kwargs + + def __setstate__(self, state): + args, kwargs = state + super().__init__(*args, **kwargs) + + +class CompleteDirs(InitializedState, zipfile.ZipFile): + """ + A ZipFile subclass that ensures that implied directories + are always included in the namelist. + + >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt'])) + ['foo/', 'foo/bar/'] + >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt', 'foo/bar/'])) + ['foo/'] + """ + + @staticmethod + def _implied_dirs(names): + parents = itertools.chain.from_iterable(map(_parents, names)) + as_dirs = (p + posixpath.sep for p in parents) + return _dedupe(_difference(as_dirs, names)) + + def namelist(self): + names = super().namelist() + return names + list(self._implied_dirs(names)) + + def _name_set(self): + return set(self.namelist()) + + def resolve_dir(self, name): + """ + If the name represents a directory, return that name + as a directory (with the trailing slash). + """ + names = self._name_set() + dirname = name + '/' + dir_match = name not in names and dirname in names + return dirname if dir_match else name + + def getinfo(self, name): + """ + Supplement getinfo for implied dirs. + """ + try: + return super().getinfo(name) + except KeyError: + if not name.endswith('/') or name not in self._name_set(): + raise + return zipfile.ZipInfo(filename=name) + + @classmethod + def make(cls, source): + """ + Given a source (filename or zipfile), return an + appropriate CompleteDirs subclass. + """ + if isinstance(source, CompleteDirs): + return source + + if not isinstance(source, zipfile.ZipFile): + return cls(source) + + # Only allow for FastLookup when supplied zipfile is read-only + if 'r' not in source.mode: + cls = CompleteDirs + + source.__class__ = cls + return source + + +class FastLookup(CompleteDirs): + """ + ZipFile subclass to ensure implicit + dirs exist and are resolved rapidly. + """ + + def namelist(self): + with contextlib.suppress(AttributeError): + return self.__names + self.__names = super().namelist() + return self.__names + + def _name_set(self): + with contextlib.suppress(AttributeError): + return self.__lookup + self.__lookup = super()._name_set() + return self.__lookup + + +def _extract_text_encoding(encoding=None, *args, **kwargs): + # stacklevel=3 so that the caller of the caller see any warning. + return text_encoding(encoding, 3), args, kwargs + + +class Path: + """ + A pathlib-compatible interface for zip files. + + Consider a zip file with this structure:: + + . + ├── a.txt + └── b + ├── c.txt + └── d + └── e.txt + + >>> data = io.BytesIO() + >>> zf = zipfile.ZipFile(data, 'w') + >>> zf.writestr('a.txt', 'content of a') + >>> zf.writestr('b/c.txt', 'content of c') + >>> zf.writestr('b/d/e.txt', 'content of e') + >>> zf.filename = 'mem/abcde.zip' + + Path accepts the zipfile object itself or a filename + + >>> root = Path(zf) + + From there, several path operations are available. + + Directory iteration (including the zip file itself): + + >>> a, b = root.iterdir() + >>> a + Path('mem/abcde.zip', 'a.txt') + >>> b + Path('mem/abcde.zip', 'b/') + + name property: + + >>> b.name + 'b' + + join with divide operator: + + >>> c = b / 'c.txt' + >>> c + Path('mem/abcde.zip', 'b/c.txt') + >>> c.name + 'c.txt' + + Read text: + + >>> c.read_text(encoding='utf-8') + 'content of c' + + existence: + + >>> c.exists() + True + >>> (b / 'missing.txt').exists() + False + + Coercion to string: + + >>> import os + >>> str(c).replace(os.sep, posixpath.sep) + 'mem/abcde.zip/b/c.txt' + + At the root, ``name``, ``filename``, and ``parent`` + resolve to the zipfile. Note these attributes are not + valid and will raise a ``ValueError`` if the zipfile + has no filename. + + >>> root.name + 'abcde.zip' + >>> str(root.filename).replace(os.sep, posixpath.sep) + 'mem/abcde.zip' + >>> str(root.parent) + 'mem' + """ + + __repr = "{self.__class__.__name__}({self.root.filename!r}, {self.at!r})" + + def __init__(self, root, at=""): + """ + Construct a Path from a ZipFile or filename. + + Note: When the source is an existing ZipFile object, + its type (__class__) will be mutated to a + specialized type. If the caller wishes to retain the + original type, the caller should either create a + separate ZipFile object or pass a filename. + """ + self.root = FastLookup.make(root) + self.at = at + + def __eq__(self, other): + """ + >>> Path(zipfile.ZipFile(io.BytesIO(), 'w')) == 'foo' + False + """ + if self.__class__ is not other.__class__: + return NotImplemented + return (self.root, self.at) == (other.root, other.at) + + def __hash__(self): + return hash((self.root, self.at)) + + def open(self, mode='r', *args, pwd=None, **kwargs): + """ + Open this entry as text or binary following the semantics + of ``pathlib.Path.open()`` by passing arguments through + to io.TextIOWrapper(). + """ + if self.is_dir(): + raise IsADirectoryError(self) + zip_mode = mode[0] + if not self.exists() and zip_mode == 'r': + raise FileNotFoundError(self) + stream = self.root.open(self.at, zip_mode, pwd=pwd) + if 'b' in mode: + if args or kwargs: + raise ValueError("encoding args invalid for binary operation") + return stream + # Text mode: + encoding, args, kwargs = _extract_text_encoding(*args, **kwargs) + return io.TextIOWrapper(stream, encoding, *args, **kwargs) + + @property + def name(self): + return pathlib.Path(self.at).name or self.filename.name + + @property + def suffix(self): + return pathlib.Path(self.at).suffix or self.filename.suffix + + @property + def suffixes(self): + return pathlib.Path(self.at).suffixes or self.filename.suffixes + + @property + def stem(self): + return pathlib.Path(self.at).stem or self.filename.stem + + @property + def filename(self): + return pathlib.Path(self.root.filename).joinpath(self.at) + + def read_text(self, *args, **kwargs): + encoding, args, kwargs = _extract_text_encoding(*args, **kwargs) + with self.open('r', encoding, *args, **kwargs) as strm: + return strm.read() + + def read_bytes(self): + with self.open('rb') as strm: + return strm.read() + + def _is_child(self, path): + return posixpath.dirname(path.at.rstrip("/")) == self.at.rstrip("/") + + def _next(self, at): + return self.__class__(self.root, at) + + def is_dir(self): + return not self.at or self.at.endswith("/") + + def is_file(self): + return self.exists() and not self.is_dir() + + def exists(self): + return self.at in self.root._name_set() + + def iterdir(self): + if not self.is_dir(): + raise ValueError("Can't listdir a file") + subs = map(self._next, self.root.namelist()) + return filter(self._is_child, subs) + + def match(self, path_pattern): + return pathlib.Path(self.at).match(path_pattern) + + def is_symlink(self): + """ + Return whether this path is a symlink. Always false (python/cpython#82102). + """ + return False + + def _descendants(self): + for child in self.iterdir(): + yield child + if child.is_dir(): + yield from child._descendants() + + def glob(self, pattern): + if not pattern: + raise ValueError(f"Unacceptable pattern: {pattern!r}") + + matches = re.compile(fnmatch.translate(pattern)).fullmatch + return ( + child + for child in self._descendants() + if matches(str(child.relative_to(self))) + ) + + def rglob(self, pattern): + return self.glob(f'**/{pattern}') + + def relative_to(self, other, *extra): + return posixpath.relpath(str(self), str(other.joinpath(*extra))) + + def __str__(self): + return posixpath.join(self.root.filename, self.at) + + def __repr__(self): + return self.__repr.format(self=self) + + def joinpath(self, *other): + next = posixpath.join(self.at, *other) + return self._next(self.root.resolve_dir(next)) + + __truediv__ = joinpath + + @property + def parent(self): + if not self.at: + return self.filename.parent + parent_at = posixpath.dirname(self.at.rstrip('/')) + if parent_at: + parent_at += '/' + return self._next(parent_at) diff --git a/venv/Lib/site-packages/zipp/__pycache__/__init__.cpython-37.pyc b/venv/Lib/site-packages/zipp/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e68322960020d0bbe18a7a7bc54f0547390d9155 GIT binary patch literal 12934 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 C8NSE> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/zipp/__pycache__/py310compat.cpython-37.pyc b/venv/Lib/site-packages/zipp/__pycache__/py310compat.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..467c4f5d8ee4eb9729e8ea3b9742417d753664c9 GIT binary patch literal 422 zcmY*W%TB{E5VW1N38m!&IQ1IT@@NH>DnPtWs6vRx#flV}cmcPLZITetUi%|(F1ng*NtQft)&v!6 zF4R-2ndK}VNhm-bbz04x{+~2)EGh{Wd0cj?*iiCR9r3(dwhW=Dhr zP`c3JsWBHUXW>A{Oon%mn9vB*7Rp+YvTa^^koNdNI1$Dy!Hm0myRl9T%eT$A^bZrw VUnLydUqIR1jE{ZC#dW;t{s79Ub!Gqn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/zipp/py310compat.py b/venv/Lib/site-packages/zipp/py310compat.py new file mode 100644 index 0000000..8244124 --- /dev/null +++ b/venv/Lib/site-packages/zipp/py310compat.py @@ -0,0 +1,12 @@ +import sys +import io + + +te_impl = 'lambda encoding, stacklevel=2, /: encoding' +te_impl_37 = te_impl.replace(', /', '') +_text_encoding = eval(te_impl) if sys.version_info > (3, 8) else eval(te_impl_37) + + +text_encoding = ( + io.text_encoding if sys.version_info > (3, 10) else _text_encoding # type: ignore +) diff --git a/venv/Lib/tcl8.6/init.tcl b/venv/Lib/tcl8.6/init.tcl new file mode 100644 index 0000000..b3990df --- /dev/null +++ b/venv/Lib/tcl8.6/init.tcl @@ -0,0 +1,819 @@ +# init.tcl -- +# +# Default system startup file for Tcl-based applications. Defines +# "unknown" procedure and auto-load facilities. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 Scriptics Corporation. +# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# This test intentionally written in pre-7.5 Tcl +if {[info commands package] == ""} { + error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]" +} +package require -exact Tcl 8.6.8 + +# Compute the auto path to use in this interpreter. +# The values on the path come from several locations: +# +# The environment variable TCLLIBPATH +# +# tcl_library, which is the directory containing this init.tcl script. +# [tclInit] (Tcl_Init()) searches around for the directory containing this +# init.tcl and defines tcl_library to that location before sourcing it. +# +# The parent directory of tcl_library. Adding the parent +# means that packages in peer directories will be found automatically. +# +# Also add the directory ../lib relative to the directory where the +# executable is located. This is meant to find binary packages for the +# same architecture as the current executable. +# +# tcl_pkgPath, which is set by the platform-specific initialization routines +# On UNIX it is compiled in +# On Windows, it is not used + +if {![info exists auto_path]} { + if {[info exists env(TCLLIBPATH)]} { + set auto_path $env(TCLLIBPATH) + } else { + set auto_path "" + } +} +namespace eval tcl { + variable Dir + foreach Dir [list $::tcl_library [file dirname $::tcl_library]] { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + set Dir [file join [file dirname [file dirname \ + [info nameofexecutable]]] lib] + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + catch { + foreach Dir $::tcl_pkgPath { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + } + + if {![interp issafe]} { + variable Path [encoding dirs] + set Dir [file join $::tcl_library encoding] + if {$Dir ni $Path} { + lappend Path $Dir + encoding dirs $Path + } + } + + # TIP #255 min and max functions + namespace eval mathfunc { + proc min {args} { + if {![llength $args]} { + return -code error \ + "too few arguments to math function \"min\"" + } + set val Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg < $val} {set val $arg} + } + return $val + } + proc max {args} { + if {![llength $args]} { + return -code error \ + "too few arguments to math function \"max\"" + } + set val -Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg > $val} {set val $arg} + } + return $val + } + namespace export min max + } +} + +# Windows specific end of initialization + +if {(![interp issafe]) && ($tcl_platform(platform) eq "windows")} { + namespace eval tcl { + proc EnvTraceProc {lo n1 n2 op} { + global env + set x $env($n2) + set env($lo) $x + set env([string toupper $lo]) $x + } + proc InitWinEnv {} { + global env tcl_platform + foreach p [array names env] { + set u [string toupper $p] + if {$u ne $p} { + switch -- $u { + COMSPEC - + PATH { + set temp $env($p) + unset env($p) + set env($u) $temp + trace add variable env($p) write \ + [namespace code [list EnvTraceProc $p]] + trace add variable env($u) write \ + [namespace code [list EnvTraceProc $p]] + } + } + } + } + if {![info exists env(COMSPEC)]} { + set env(COMSPEC) cmd.exe + } + } + InitWinEnv + } +} + +# Setup the unknown package handler + + +if {[interp issafe]} { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} +} else { + # Set up search for Tcl Modules (TIP #189). + # and setup platform specific unknown package handlers + if {$tcl_platform(os) eq "Darwin" + && $tcl_platform(platform) eq "unix"} { + package unknown {::tcl::tm::UnknownHandler \ + {::tcl::MacOSXPkgUnknown ::tclPkgUnknown}} + } else { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} + } + + # Set up the 'clock' ensemble + + namespace eval ::tcl::clock [list variable TclLibDir $::tcl_library] + + proc ::tcl::initClock {} { + # Auto-loading stubs for 'clock.tcl' + + foreach cmd {add format scan} { + proc ::tcl::clock::$cmd args { + variable TclLibDir + source -encoding utf-8 [file join $TclLibDir clock.tcl] + return [uplevel 1 [info level 0]] + } + } + + rename ::tcl::initClock {} + } + ::tcl::initClock +} + +# Conditionalize for presence of exec. + +if {[namespace which -command exec] eq ""} { + + # Some machines do not have exec. Also, on all + # platforms, safe interpreters do not have exec. + + set auto_noexec 1 +} + +# Define a log command (which can be overwitten to log errors +# differently, specially when stderr is not available) + +if {[namespace which -command tclLog] eq ""} { + proc tclLog {string} { + catch {puts stderr $string} + } +} + +# unknown -- +# This procedure is called when a Tcl command is invoked that doesn't +# exist in the interpreter. It takes the following steps to make the +# command available: +# +# 1. See if the autoload facility can locate the command in a +# Tcl script file. If so, load it and execute it. +# 2. If the command was invoked interactively at top-level: +# (a) see if the command exists as an executable UNIX program. +# If so, "exec" the command. +# (b) see if the command requests csh-like history substitution +# in one of the common forms !!, !, or ^old^new. If +# so, emulate csh's history substitution. +# (c) see if the command is a unique abbreviation for another +# command. If so, invoke the command. +# +# Arguments: +# args - A list whose elements are the words of the original +# command, including the command name. + +proc unknown args { + variable ::tcl::UnknownPending + global auto_noexec auto_noload env tcl_interactive errorInfo errorCode + + if {[info exists errorInfo]} { + set savedErrorInfo $errorInfo + } + if {[info exists errorCode]} { + set savedErrorCode $errorCode + } + + set name [lindex $args 0] + if {![info exists auto_noload]} { + # + # Make sure we're not trying to load the same proc twice. + # + if {[info exists UnknownPending($name)]} { + return -code error "self-referential recursion\ + in \"unknown\" for command \"$name\"" + } + set UnknownPending($name) pending + set ret [catch { + auto_load $name [uplevel 1 {::namespace current}] + } msg opts] + unset UnknownPending($name) + if {$ret != 0} { + dict append opts -errorinfo "\n (autoloading \"$name\")" + return -options $opts $msg + } + if {![array size UnknownPending]} { + unset UnknownPending + } + if {$msg} { + if {[info exists savedErrorCode]} { + set ::errorCode $savedErrorCode + } else { + unset -nocomplain ::errorCode + } + if {[info exists savedErrorInfo]} { + set errorInfo $savedErrorInfo + } else { + unset -nocomplain errorInfo + } + set code [catch {uplevel 1 $args} msg opts] + if {$code == 1} { + # + # Compute stack trace contribution from the [uplevel]. + # Note the dependence on how Tcl_AddErrorInfo, etc. + # construct the stack trace. + # + set errInfo [dict get $opts -errorinfo] + set errCode [dict get $opts -errorcode] + set cinfo $args + if {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 150] + while {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 end-1] + } + append cinfo ... + } + set tail "\n (\"uplevel\" body line 1)\n invoked\ + from within\n\"uplevel 1 \$args\"" + set expect "$msg\n while executing\n\"$cinfo\"$tail" + if {$errInfo eq $expect} { + # + # The stack has only the eval from the expanded command + # Do not generate any stack trace here. + # + dict unset opts -errorinfo + dict incr opts -level + return -options $opts $msg + } + # + # Stack trace is nested, trim off just the contribution + # from the extra "eval" of $args due to the "catch" above. + # + set last [string last $tail $errInfo] + if {$last + [string length $tail] != [string length $errInfo]} { + # Very likely cannot happen + return -options $opts $msg + } + set errInfo [string range $errInfo 0 $last-1] + set tail "\"$cinfo\"" + set last [string last $tail $errInfo] + if {$last + [string length $tail] != [string length $errInfo]} { + return -code error -errorcode $errCode \ + -errorinfo $errInfo $msg + } + set errInfo [string range $errInfo 0 $last-1] + set tail "\n invoked from within\n" + set last [string last $tail $errInfo] + if {$last + [string length $tail] == [string length $errInfo]} { + return -code error -errorcode $errCode \ + -errorinfo [string range $errInfo 0 $last-1] $msg + } + set tail "\n while executing\n" + set last [string last $tail $errInfo] + if {$last + [string length $tail] == [string length $errInfo]} { + return -code error -errorcode $errCode \ + -errorinfo [string range $errInfo 0 $last-1] $msg + } + return -options $opts $msg + } else { + dict incr opts -level + return -options $opts $msg + } + } + } + + if {([info level] == 1) && ([info script] eq "") + && [info exists tcl_interactive] && $tcl_interactive} { + if {![info exists auto_noexec]} { + set new [auto_execok $name] + if {$new ne ""} { + set redir "" + if {[namespace which -command console] eq ""} { + set redir ">&@stdout <@stdin" + } + uplevel 1 [list ::catch \ + [concat exec $redir $new [lrange $args 1 end]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + } + if {$name eq "!!"} { + set newcmd [history event] + } elseif {[regexp {^!(.+)$} $name -> event]} { + set newcmd [history event $event] + } elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $name -> old new]} { + set newcmd [history event -1] + catch {regsub -all -- $old $newcmd $new newcmd} + } + if {[info exists newcmd]} { + tclLog $newcmd + history change $newcmd 0 + uplevel 1 [list ::catch $newcmd \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + + set ret [catch {set candidates [info commands $name*]} msg] + if {$name eq "::"} { + set name "" + } + if {$ret != 0} { + dict append opts -errorinfo \ + "\n (expanding command prefix \"$name\" in unknown)" + return -options $opts $msg + } + # Filter out bogus matches when $name contained + # a glob-special char [Bug 946952] + if {$name eq ""} { + # Handle empty $name separately due to strangeness + # in [string first] (See RFE 1243354) + set cmds $candidates + } else { + set cmds [list] + foreach x $candidates { + if {[string first $name $x] == 0} { + lappend cmds $x + } + } + } + if {[llength $cmds] == 1} { + uplevel 1 [list ::catch [lreplace $args 0 0 [lindex $cmds 0]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + if {[llength $cmds]} { + return -code error "ambiguous command name \"$name\": [lsort $cmds]" + } + } + return -code error -errorcode [list TCL LOOKUP COMMAND $name] \ + "invalid command name \"$name\"" +} + +# auto_load -- +# Checks a collection of library directories to see if a procedure +# is defined in one of them. If so, it sources the appropriate +# library file to create the procedure. Returns 1 if it successfully +# loaded the procedure, 0 otherwise. +# +# Arguments: +# cmd - Name of the command to find and load. +# namespace (optional) The namespace where the command is being used - must be +# a canonical namespace as returned [namespace current] +# for instance. If not given, namespace current is used. + +proc auto_load {cmd {namespace {}}} { + global auto_index auto_path + + if {$namespace eq ""} { + set namespace [uplevel 1 [list ::namespace current]] + } + set nameList [auto_qualify $cmd $namespace] + # workaround non canonical auto_index entries that might be around + # from older auto_mkindex versions + lappend nameList $cmd + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + # There's a couple of ways to look for a command of a given + # name. One is to use + # info commands $name + # Unfortunately, if the name has glob-magic chars in it like * + # or [], it may not match. For our purposes here, a better + # route is to use + # namespace which -command $name + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + if {![info exists auto_path]} { + return 0 + } + + if {![auto_load_index]} { + return 0 + } + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + return 0 +} + +# auto_load_index -- +# Loads the contents of tclIndex files on the auto_path directory +# list. This is usually invoked within auto_load to load the index +# of available commands. Returns 1 if the index is loaded, and 0 if +# the index is already loaded and up to date. +# +# Arguments: +# None. + +proc auto_load_index {} { + variable ::tcl::auto_oldpath + global auto_index auto_path + + if {[info exists auto_oldpath] && ($auto_oldpath eq $auto_path)} { + return 0 + } + set auto_oldpath $auto_path + + # Check if we are a safe interpreter. In that case, we support only + # newer format tclIndex files. + + set issafe [interp issafe] + for {set i [expr {[llength $auto_path] - 1}]} {$i >= 0} {incr i -1} { + set dir [lindex $auto_path $i] + set f "" + if {$issafe} { + catch {source [file join $dir tclIndex]} + } elseif {[catch {set f [open [file join $dir tclIndex]]}]} { + continue + } else { + set error [catch { + set id [gets $f] + if {$id eq "# Tcl autoload index file, version 2.0"} { + eval [read $f] + } elseif {$id eq "# Tcl autoload index file: each line identifies a Tcl"} { + while {[gets $f line] >= 0} { + if {([string index $line 0] eq "#") \ + || ([llength $line] != 2)} { + continue + } + set name [lindex $line 0] + set auto_index($name) \ + "source [file join $dir [lindex $line 1]]" + } + } else { + error "[file join $dir tclIndex] isn't a proper Tcl index file" + } + } msg opts] + if {$f ne ""} { + close $f + } + if {$error} { + return -options $opts $msg + } + } + } + return 1 +} + +# auto_qualify -- +# +# Compute a fully qualified names list for use in the auto_index array. +# For historical reasons, commands in the global namespace do not have leading +# :: in the index key. The list has two elements when the command name is +# relative (no leading ::) and the namespace is not the global one. Otherwise +# only one name is returned (and searched in the auto_index). +# +# Arguments - +# cmd The command name. Can be any name accepted for command +# invocations (Like "foo::::bar"). +# namespace The namespace where the command is being used - must be +# a canonical namespace as returned by [namespace current] +# for instance. + +proc auto_qualify {cmd namespace} { + + # count separators and clean them up + # (making sure that foo:::::bar will be treated as foo::bar) + set n [regsub -all {::+} $cmd :: cmd] + + # Ignore namespace if the name starts with :: + # Handle special case of only leading :: + + # Before each return case we give an example of which category it is + # with the following form : + # (inputCmd, inputNameSpace) -> output + + if {[string match ::* $cmd]} { + if {$n > 1} { + # (::foo::bar , *) -> ::foo::bar + return [list $cmd] + } else { + # (::global , *) -> global + return [list [string range $cmd 2 end]] + } + } + + # Potentially returning 2 elements to try : + # (if the current namespace is not the global one) + + if {$n == 0} { + if {$namespace eq "::"} { + # (nocolons , ::) -> nocolons + return [list $cmd] + } else { + # (nocolons , ::sub) -> ::sub::nocolons nocolons + return [list ${namespace}::$cmd $cmd] + } + } elseif {$namespace eq "::"} { + # (foo::bar , ::) -> ::foo::bar + return [list ::$cmd] + } else { + # (foo::bar , ::sub) -> ::sub::foo::bar ::foo::bar + return [list ${namespace}::$cmd ::$cmd] + } +} + +# auto_import -- +# +# Invoked during "namespace import" to make see if the imported commands +# reside in an autoloaded library. If so, the commands are loaded so +# that they will be available for the import links. If not, then this +# procedure does nothing. +# +# Arguments - +# pattern The pattern of commands being imported (like "foo::*") +# a canonical namespace as returned by [namespace current] + +proc auto_import {pattern} { + global auto_index + + # If no namespace is specified, this will be an error case + + if {![string match *::* $pattern]} { + return + } + + set ns [uplevel 1 [list ::namespace current]] + set patternList [auto_qualify $pattern $ns] + + auto_load_index + + foreach pattern $patternList { + foreach name [array names auto_index $pattern] { + if {([namespace which -command $name] eq "") + && ([namespace qualifiers $pattern] eq [namespace qualifiers $name])} { + namespace eval :: $auto_index($name) + } + } + } +} + +# auto_execok -- +# +# Returns string that indicates name of program to execute if +# name corresponds to a shell builtin or an executable in the +# Windows search path, or "" otherwise. Builds an associative +# array auto_execs that caches information about previous checks, +# for speed. +# +# Arguments: +# name - Name of a command. + +if {$tcl_platform(platform) eq "windows"} { +# Windows version. +# +# Note that file executable doesn't work under Windows, so we have to +# look for files with .exe, .com, or .bat extensions. Also, the path +# may be in the Path or PATH environment variables, and path +# components are separated with semicolons, not colons as under Unix. +# +proc auto_execok name { + global auto_execs env tcl_platform + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + + set shellBuiltins [list assoc cls copy date del dir echo erase ftype \ + md mkdir mklink move rd ren rename rmdir start time type ver vol] + if {[info exists env(PATHEXT)]} { + # Add an initial ; to have the {} extension check first. + set execExtensions [split ";$env(PATHEXT)" ";"] + } else { + set execExtensions [list {} .com .exe .bat .cmd] + } + + if {[string tolower $name] in $shellBuiltins} { + # When this is command.com for some reason on Win2K, Tcl won't + # exec it unless the case is right, which this corrects. COMSPEC + # may not point to a real file, so do the check. + set cmd $env(COMSPEC) + if {[file exists $cmd]} { + set cmd [file attributes $cmd -shortname] + } + return [set auto_execs($name) [list $cmd /c $name]] + } + + if {[llength [file split $name]] != 1} { + foreach ext $execExtensions { + set file ${name}${ext} + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + return "" + } + + set path "[file dirname [info nameof]];.;" + if {[info exists env(WINDIR)]} { + set windir $env(WINDIR) + } + if {[info exists windir]} { + if {$tcl_platform(os) eq "Windows NT"} { + append path "$windir/system32;" + } + append path "$windir/system;$windir;" + } + + foreach var {PATH Path path} { + if {[info exists env($var)]} { + append path ";$env($var)" + } + } + + foreach ext $execExtensions { + unset -nocomplain checked + foreach dir [split $path {;}] { + # Skip already checked directories + if {[info exists checked($dir)] || ($dir eq "")} { + continue + } + set checked($dir) {} + set file [file join $dir ${name}${ext}] + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + } + return "" +} + +} else { +# Unix version. +# +proc auto_execok name { + global auto_execs env + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + if {[llength [file split $name]] != 1} { + if {[file executable $name] && ![file isdirectory $name]} { + set auto_execs($name) [list $name] + } + return $auto_execs($name) + } + foreach dir [split $env(PATH) :] { + if {$dir eq ""} { + set dir . + } + set file [file join $dir $name] + if {[file executable $file] && ![file isdirectory $file]} { + set auto_execs($name) [list $file] + return $auto_execs($name) + } + } + return "" +} + +} + +# ::tcl::CopyDirectory -- +# +# This procedure is called by Tcl's core when attempts to call the +# filesystem's copydirectory function fail. The semantics of the call +# are that 'dest' does not yet exist, i.e. dest should become the exact +# image of src. If dest does exist, we throw an error. +# +# Note that making changes to this procedure can change the results +# of running Tcl's tests. +# +# Arguments: +# action - "renaming" or "copying" +# src - source directory +# dest - destination directory +proc tcl::CopyDirectory {action src dest} { + set nsrc [file normalize $src] + set ndest [file normalize $dest] + + if {$action eq "renaming"} { + # Can't rename volumes. We could give a more precise + # error message here, but that would break the test suite. + if {$nsrc in [file volumes]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + if {[file exists $dest]} { + if {$nsrc eq $ndest} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + if {$action eq "copying"} { + # We used to throw an error here, but, looking more closely + # at the core copy code in tclFCmd.c, if the destination + # exists, then we should only call this function if -force + # is true, which means we just want to over-write. So, + # the following code is now commented out. + # + # return -code error "error $action \"$src\" to\ + # \"$dest\": file already exists" + } else { + # Depending on the platform, and on the current + # working directory, the directories '.', '..' + # can be returned in various combinations. Anyway, + # if any other file is returned, we must signal an error. + set existing [glob -nocomplain -directory $dest * .*] + lappend existing {*}[glob -nocomplain -directory $dest \ + -type hidden * .*] + foreach s $existing { + if {[file tail $s] ni {. ..}} { + return -code error "error $action \"$src\" to\ + \"$dest\": file already exists" + } + } + } + } else { + if {[string first $nsrc $ndest] != -1} { + set srclen [expr {[llength [file split $nsrc]] - 1}] + set ndest [lindex [file split $ndest] $srclen] + if {$ndest eq [file tail $nsrc]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + file mkdir $dest + } + # Have to be careful to capture both visible and hidden files. + # We will also be more generous to the file system and not + # assume the hidden and non-hidden lists are non-overlapping. + # + # On Unix 'hidden' files begin with '.'. On other platforms + # or filesystems hidden files may have other interpretations. + set filelist [concat [glob -nocomplain -directory $src *] \ + [glob -nocomplain -directory $src -types hidden *]] + + foreach s [lsort -unique $filelist] { + if {[file tail $s] ni {. ..}} { + file copy -force -- $s [file join $dest [file tail $s]] + } + } + return +} diff --git a/venv/Scripts/Activate.ps1 b/venv/Scripts/Activate.ps1 new file mode 100644 index 0000000..811c514 --- /dev/null +++ b/venv/Scripts/Activate.ps1 @@ -0,0 +1,51 @@ +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + if (Test-Path function:_OLD_VIRTUAL_PROMPT) { + copy-item function:_OLD_VIRTUAL_PROMPT function:prompt + remove-item function:_OLD_VIRTUAL_PROMPT + } + + if (Test-Path env:_OLD_VIRTUAL_PYTHONHOME) { + copy-item env:_OLD_VIRTUAL_PYTHONHOME env:PYTHONHOME + remove-item env:_OLD_VIRTUAL_PYTHONHOME + } + + if (Test-Path env:_OLD_VIRTUAL_PATH) { + copy-item env:_OLD_VIRTUAL_PATH env:PATH + remove-item env:_OLD_VIRTUAL_PATH + } + + if (Test-Path env:VIRTUAL_ENV) { + remove-item env:VIRTUAL_ENV + } + + if (!$NonDestructive) { + # Self destruct! + remove-item function:deactivate + } +} + +deactivate -nondestructive + +$env:VIRTUAL_ENV="C:\Users\Lenovo\Desktop\stage 2025\flask\venv" + +if (! $env:VIRTUAL_ENV_DISABLE_PROMPT) { + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT {""} + copy-item function:prompt function:_OLD_VIRTUAL_PROMPT + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green '(venv) ' + _OLD_VIRTUAL_PROMPT + } +} + +# Clear PYTHONHOME +if (Test-Path env:PYTHONHOME) { + copy-item env:PYTHONHOME env:_OLD_VIRTUAL_PYTHONHOME + remove-item env:PYTHONHOME +} + +# Add the venv to the PATH +copy-item env:PATH env:_OLD_VIRTUAL_PATH +$env:PATH = "$env:VIRTUAL_ENV\Scripts;$env:PATH" diff --git a/venv/Scripts/_asyncio.pyd b/venv/Scripts/_asyncio.pyd new file mode 100644 index 0000000000000000000000000000000000000000..c3cf56b7030ff9c5eeee034dc28d71c0a9d89b42 GIT binary patch literal 71320 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 B&Y1E9X=O5JYGK9PdJ5|@qdu7` zeC*b(MBy1c08o|A^O9=gMU+8)MIla0p&_9EE=X%`eQi}kbwHRgg**+NhkJR@iV7kE z72zsy=S0di+*lW=phS0QOa<7NKfs!yU!=Jfr)cdK?I#6V7?ddY`WvcCs*zL>T-;>% zn2)!L^2%Tn>Ordt>Z_-#{Z`PnJJ}-53Kyx;7_swyS-6pPqG85c8ut7kw(RHD2XT~B zPClKcc`dBh2hrAOSk+d;ctYAL=eTrZuLVRQ4gyqAk&Rj#f&RSp;Js~ z@?Sxf>JSwWf?^81jU-O!N)e6=J!-d>>S(~#wi!r~Owrrjwn&V5j(i*?2=ZLwtiU2j z<4y^3&{UP1}#6t&_`&?LQq5#!S&g@rh!77Adk?4J&u(7g+7nP~HG7SGNaMop3m z4P^I)pRzoA*K8hedPujekfa*7+O-$pI0=7K1gW+DY0c zhp1&T5HwqphYsJ?X#10Csp4lPfeXt3tI={6C^*2 z0+2^Tl`%iP7Kg12Cd-#JmFT0a#`hG>6)CpHSPpvF&v6C-{k^fJP#qdJZb@=5lu|-l zrv=G6ph3#k40QB6HgBx1k=;WzKa?z0(ljTCgR?=vP*Bo^jBe>;%&_gr0n(xSGAa_T z^*GX!Y-9iaF6G5RYBH>Z#<@vwmNaQLimkjL!9D1H+DP*k2lgqIO(E7GLO1SB(`{SZ z{(6WKN&7Se98Q=oF^!;;B~lX|HjTAne%S&$Sf78!xN44aSvVV2Si#e~wTo)2k|)SU z^UPGJx`Nh3&fem@S`$B2sHnquV;JAZ8M7r#7~YNZ3TMroF{h-g_>@!g6wcEPl&B41 zFkNDtk$kTR80X+bSD>Z>$MKL^K>|kNY*<76qT0p$Y@xmq$9I=jR0bDcfltL$N%h5n zofW9RqBhu2&(qHs>r)^wSTtjD6H-S`&*B*~eUeY-*oS6}<8W?Cofof2DfDg7g3%tP z0*H)b>{!L+;aW&t5{)B}s@@hGY#{m&4!Kn}){b4$GgTm*npGiO~#F`IX3lnlF`<`q)A5_f>U5JL2Efq>XF$c zndgQB!Itts5T8#h;eoZn2DB0f&yGGAJGzX|k*X{m`_X=;&Thf^$|ZBapaOKBx&Yq{ zUq+D{GZk=Y?ZRMXu!Vi3$ynT<(^jPjvuWT>*lFV`P+P<^l#2sFo6463f2b0SYb?Qm z@$-!)o6P0tQp0n`Qw$g+HeJ75U#w&9~FjLoCP1-k_oW+qv_ARL7=t~$6gj13|CggU3zCBG`+dpDuk^{T0BiVCu4`#( zc{~5>!tA%cS-G#n`|swj)$*+QhVopX%ir=1%jeyo_>z6&H{(xV`m{#t)5tUiVJ|vG z{%P6&cJyD>r#q&8H615uy~N(P(A)WkuZI7(3IA_G;M4Lf|AzX|mps$S^K1NT_b9$_ zT;reb)vx9g_M=kd-&cLTedy1c|7LrHGgc||{Hyx2LhBFy&9#*B>3sTsE#8+rR&}a& zu1asv|7Cw;fwt?|BNsVz<)_MHfu=Xz-&hb$g}X!J@pq-Br#IL3H*l6CMehII{szv% z3jQqJpPRp7f9}@f!`5$D{tjK<_=e-d3SEB9H>|%eeY{2MWBT~gSd=Q4bou?e@jmSX z&-46$^f%Pji?lYEYJE*hHoE#qzvI7{KC+K`*Y<%Ydi|mGVL~5xYWl#lrVl)geZZ%G z-(&N`-$%WB`oPoKM|yW3^knOPVb^DeJNv-X7vFOGpfjrv{6-(}^ZKaQ-$(k2KGOT* zPx^OdxjE`%sFQprpCn)Aj~P66?BKyzQP*oZzDh|RH+b-@0G21}n|$0PzzI_IchIM# zxjFps?-@Nx0}h7A4PSIfWhT*Fal^r3QWx%a5w@c{P@Bd`oKrxVi#&1*lIa zk&KUH@mUtXa0CT&c#D8t3O5n(9hX!$#lgeLcZ7)o+Q4@wE1wdYO-RUj|-x{+C@&vc*#hj zRD!QIe^pKzvO@WM(TM~LEk2vB1dE!$vXYd#(%Xx>6B1RQ#7j;fVD*9fIG=AO8XjDV zD>6Oii?&lEDGhw}m&~9%P+qRtP((x0atAbhEe70XZIW>RH zyDFZi^Kq6{;O+8_x_!F3J_Gd`dM-Nv*yvFDIkW|GDGVilLS@~OhNjR7P;XwoP>V}5 z)G&g1TgCL}CX=RH& zcIx`Cs0Dd6rHQM7*z@gyts*2Fr%jcM0_dK0t5X@u>#EXuNsRoYUUR0hNv^u63*gqE z+%dZ5C2~dps;>HhE*s1rI z?EHQERJuKH!M9{7_Hd21r`ftZzL}DIySz`^b9>%-$0(I=)1Up4is$O`je0-G&hP40 z`KRjqE`M5iZLj^hefwso=67oP?fF=Dd1`)C*KhN=uW+kfzsBDe+`pPmk>}EuJUvb>(ELw_x99&0G=I|b?YL>z zd*oNwJ5R&md+e{IZ-IvMYrV7UNe>$}9PWM)eE25eka$;UxNg0VnU2Sfo1LnBr^eUS z$G*Y>4R^=a@TF11t@s+aW(}A3HE=eaUl(GAki1IA9)J>~H*BOb=E-|&zSekR0?Szo z>=H&J+DuGcVC_?^CJdd!TBZX2ulBwKDvD!my9WkjRTLLw(Qy<+W$9rZ6cq#)6cq&p z5tRXkMcITwK*b?;2K;Kaf`U4CI-D2N#gQ7H9a#l>W#Vo z{qOnybN-9x^?AFxs=BJW>aD7`d!A<7PL`P@Q@+|xetO@fT+1jo@$EOSiYbZVVU)D( ztdKjn2+1o8AMQ8*`CbSM7ec}F!Cpv@S#@Fg!IT6u9AQwzeu$^0H&gA5cpvVJ$d>B8 z4ZdPOMOJ2{FzuFDXm7H+$3&vOab!YOY`avvhGe=Xlbz}of7l|dwk8e4mA>+lHeCXc1&|993Ut>HuSnEXei1#;<=s;v1XDBIE>qwM`S!$7z zG1H=|8TCGF#{%lI%@Is$ON!y5)*Rv5Gp+MzI?vagj>d85J%C z^=`i1?PT*Yu~u@-?t|@6!)rz;1eRq=f=y<_M>tC{#z|L?1HoVlmR`)NjVw&C!~?*W z5Q{gLu{ulm>zyIflK-8bn11$tzxuoL)BEW@bf6pwEn~vo>7Up<+UfFxlEmdn1wQq)Tc43=>mp^&o>EW?Vnv^KU z6;?G#%v3Ce_*&uO zNw;S#r+p-Ovo$sym6{SC8-wkxa>c|nkJ8Gj=`W*Fz_^M5K}x9{X^I9)jltB1`l`p; zU{XNVP>qX;ie@-rMW`FGgb{jRO~o=TB{3o11_g~3rIVs5b6{A3RURpF4^Sn{R%9E3 zXnO6Uk?kwloT3_x3rbNY!WIk0PtfNw-cb?56N`-W6cYt(N*iyodLBVT_{7DDBVzEb zBDO-JNHY2rJ>f$uOh&n#y2{urlV;E(dluy-6_(CAB_0%JWRr$gBQ+s@N|mKorzYMr zPrY`H8HcF^4TRY0SgJ_@+jHeASKTA@P*CO-OSs1fceLpJE~%~~&sxzr;6G(D#-5&( zN#O}l?7IfQRQ`M0UDReWae|^0lUYBWP4lMq}zns5)3CAci@Y+q?$~hYylnlCmeaVM%%$^Wcf)1P9M2su_VZ z@C6fASF&h>(_WkkO_?e|@i_^wd@@g@qVS_grlI0QX)$praV+1k@&b|s<l4L!yYavS*W>uk}`p2e#gkZCP+k%Rcfz8||#TZvtm)tB>Zp_k& zsfp@p#JQkM$aV|ZC_aUOeD#z~psa@?dRyk~Bq*!3V#Za_`!fxq7bXU!ehi9)gyeR# zC1tFd-2gqkQ8tN~W?|y=1Z-(RIE)^IpJ61#V)sSJ*2(6L)xFu(VtgX3t&+N1 zGb8^4e%&^!PPXytX}}-*Xi~M3y4KrIME^ZvTEGb0f)K)a3ZJ~1tCMhc za>0=qgm8jAA+gX220#`m&jzUPAm^ah12xUSPXpZu z7zVjX@&u|lDG6>c$8U=ePB0f@w3WeY(0S0=T#Rh)M>a1c;foCJ1A#A1Mu;&c>$#`rEegy2xs&A5iY=`kk1iLun>|9oz2%r`28je zkRQSc&Vn>SCwK@#?PTyibR*~lJ363#&5bT+3R-i4=LKy>m@4(B!=y}r=5Kui!$a0kQ&Izhsj=MJ6Corm9O zQBJP-)iT1_9Cd8|IySc*oA-|J;XQ<$L|TG<+`#_=o!|gS6Lf-hkXGmfy&yVL1~)-B zflhD-goaLV7sL-bn_sSeFxqGc#wo%H5{@{7dXE^G$3;h77;&Wqjw^5$3 zNf1B8VRNk!j!>;sftO3hWyBVqq@d@Ht7gYnD;8Su8 zoy~PdxY05o^#~`p0@4JXpcFzCGFS-R2s)eJj2hd!E?04Ic?9tigX9)_4euLTNbfOiSH6EF|r4P6TK zoryjGonQjQ7y5SKen3Tf!81#5q=YB6pFqHouDP89=bKq57G>spcv8$ zJsMaCIRu?xE2I%RK?4!$3!UH;NFnqfARPw#2%X?*NG$Yoz-GvH=mgEeVH=^F1Lr^@ zpceuULPAJ8ahFI!;f-@E(K1D#{Gd# z_(R2zOd0A0JON3Aj_>>_xaUFQo&&rFsfT_Y_z2Ppy$SdV5|oEyAeD@?QU-mYOP~|XfMi1_ zxD8STonVv%V+DFNkZ_T{hR)_BC0wO@Ap!Xe9)}(co!}+N73c)-Kw6>S1zM-T&g^1v zFmw;-1jj<^pc4#+gcdLu3q2D$!Agh}I>93lYuGe`edeKGL+1leLn5G`0p5o!gif#p zB7<&{igb{h&p4YS91jn_S8;4ebCOzlWpTAu{M}K0Lycw-j;(;RLfG zP0$JMgS0{?co<@U@l^|a45>wUKsrU8hnORr&4oue^1L862q!oe;sM>4=nF7!B5fK_ z3dx2}@H|8Uy&m`m5(^zvBh*01Lg-FFIm8e7)Br6rP!H(Vz!*p(^jP3VNCe^&9J~lR z!rg&SKf@Ryd4BXylhQ`GHExj+&;w`!3<3gJe;n{!;94IE=OBFfN5VA_F8xTjE*JH{ zx%PkHphS3G`#>Bq;SJE5dU7Z$)_Gxf4ppw%7C^pXF;c7TSf#lSPm7D?;S;0DcosaA zFR-KeJaIhenc(ml%AXQ2%2voHzL59`5gr4Jhw{_K$^7BN4E5Z}+t6`g@RlHh_~fB{ zyt+S_yni1jO16!Q2~SE$PKcD)!ZkNolpJR_Pr&DaL?R{gHY^f>+BfjX6xkSB(Mz=xrN(CxVS|)iJU|(Vn^X$=OBo5adioIb+HxF zVu7ubgQJ_Rn{!y0t4TW7Wdl{{7Z6wuPTa6788v z9G=R-6)lk@4z{;fjxRg)__9N(?ET04*yA?4*ax=HlRpeyPwZ~rE=N`OvHw^BK2mRd z>6N?_5+AM_VeYCBiKo&6v~@p~P4Gbi3F+SCh25ciT*}db&m&(T9?BoDvJH01;@Wv7 z#Kk4V+j=oR*knGj2p|7b+bI`2n*8IFUxSb#nvmp~6dnyKws1mWGn79NXHvp2KER$7 zfYA)o=HiSl z06We>eiAB)ilO4EDC8DH#ZqGA9FIjYmT^=Q5^*S6{m+RCgHB3hhHx*$iNpLPLi}`; zMua1=;u3y1mQc|+A5ZacjRfR}ufifm5@PUhr35Mk=OPe-ue~bbk%S(U0rFLq!y9pv zsc=R465GXVpFb%F$roz?%&cwcry?u~Ike^PNZEl&%8n8st_!7)xTLNUMZ9>FC6-l- z_Sf*HeDRO`(VS&S=ZiE^iWKDPiKs7W#VFJn%QZ#Iv=8G^rKq=qq9p}zV-Zb&GVt)t ztAD+%?2zum>$0ywBgP1naU#klMjh?Yj^u9rRZ0QnhJVh=(vk9!t4u(z^Z6U;NUc;k zkb6EJY01-z5tJd?YofA!NKYf}th&eKi0L)6pe3U%;!#p^$LtiX8bO*IdI#j;hddI{ zXHpPD!n#vfr?J|Q#HSVgpnd%Jdjq>Kcq0u5y_)n-Rms{$0rt^~5fp&4q^~EV{O$WK zR=s41eekDAF<1HE#D4?+|7w9u?4eNOrh?`IqcW2+opN5ebvXjE75f0nFFzg>n!17!BMHi(NWfm<*Ii*E1Wmy}F z8jG5W;PWchDK;rilV{6w*80>PUIZn#zpIP0FR^vhup}`f^hK)^Zcnz@uUeYLHlwjXFpxYAR|` zi>8X^3Y|)$O1e^rnuJ!O+>P+z0J3qv$lW5X?}7G?E=Vj$E66U$EvPA|EodxgD$pr3 zDx?dAg&u`LxC^1OXjz&pQ?^`|E0fA(vKm>ftWMT|_HL53D%#wnlviq9DlGLV9a9>l zxC3dWnTmTL#a*Z=tu3v?ooK|p0GGO4M{XiVG5-7a|9A`JnxcRj8Wf#nx>{Rz;Ic8x zUKw&aXh^e6GZ2)n!Qlux(T3W(q07c_#F|_Ujuu6SXzLBq2GM_(s|JTFok082Jy;=~ zXkASXCFSnY$fRh&duh46r|%4`%O-UZ4L@+bFz?$Vqf@;%tsPUgMR@M6sYN-Gu~qFxK}@NeUBzXA?h%P}B~gddAuT(V|p| zSYSb$k!bqHU6}x$mpDm6s6!Q7PeE_mf}GYg?yfvd$Q|J@h)X1|jCgs{y?Pi590U#y z0$TAG+`|xi6$eM!!4V5`w_tiEtFTl2RhQE<-{(yKcE?#Py={R>V=&hf8SZ=^I{jsN9n z^?vVubI#8iIpm`E1+Om2J+fBCR1Z44wO4tPnbr8Yz4r)i{W(db;a@C&>0_gnHnPZm z#f3*(AH7|DH*omSZ*y*rZC&7aKV9$7=9J~0+uxnioU~PbH8yWU%opMTOO_rF?Rv8A z^pLLCYZo{7HkAC7!!JAY>QBkS{tsV`HT$gO#7^7Fl~0Nv%KLZE5WUKs+xgI4zx;6z zX8iG>V~I_kT+F-Nu(_#jVbO#!-tT(e_3n_Pe>M8^%o(%OB1WDM9knRnnDN3>>CaCe zo2!A|$thU;2fg@};#OL83*_^@PuJq$ z#4PO@uCt0K=XGE6#5_mWJN{+d)1ZZP)9*2B`X=jlNf=#P>DIY*;GQq5Oi!$RI&Cvm zalv5x-g-f?PRPLdukX&c2=tYSO&+IvgjsHm|L!~2*-QH9to3|y>ssJ&i&UR426oq; zSuC8*?@}-@Mox59tuvBF_`)y%EIvK`ib9eX_6 zd_y#38T}$t4jRdmgsTywh}vUsV5%#{B%$ z4b#OZp7oF%@?19XrjGCGoYm`Xccyyxj{Z?5Nxji=y2Gles~its3$OFpG5FM}Cyx4; zo)?(4tU7Y-tH4!5e&UwQ=kM)TY4=^?sUs7XSn2$!f4FqwR-HRW)=Bd7%s9^C1fr$< zX#>*v6~j&gPJ!;^$dU|=zZfzdGU;U1aKZqOqQ&$;)iDNmFXb4OB-<*+cq%92k>MA>Er4qc7Kl?w(_pk#U#R^(uP#8 zA4vH&uM4AH(+WQC-yy+d?@yLDrB^m;%9l;B%-iOnX@2X%z4WtvqP4H@bEu9x+G1lB z?s(rPBF^yPiKvdRvA*XXr*dUfW4@|c!4+xHoC zAN2gQ>AFL|oPM|a8RNz9BnS;<1J>Ex+1nCa%Gup*yN$h%*$w`|6K~TtPCBt{PuB7o z%|ojv<)=FivRiQACQsLR?$g;lr+?p6LNbcXmczz z3}KCvBya=rd?gWffVkCG2wr%Bs2_L2bD-6K^x<84mX-t*? zOeSs7$nV=cQ^0;so)9QjBFw5uj1Nc4^w{`Us!bbCtsbrQ(wmT^7=(oRUf_nhg(8(>|h6*`<=p@11c{5 zR(5xe_r+`R4L`3;of|6u=#dRbsGZi_1=lSi)%Vx(&EB{!1&}5y?&p&Y6 znW+i-znT_$OfTvY^96mzDcY;vv+@PAxZ*L3D{bx+3m!$=v>9>@PIr|dPfbm2UyQ^A zILy=E8?>5PSh4B%PHisS_b^B6<>=><}UP z*T>EOhe^57oZ80U{Eq~6&OLmsvh$<7UoZC^e=cfJ+RW*jz8qU{(AR17odM~iMxQ=) z*}5{t?0ER$-`^aZRI*oNgNOgj`8#5Mf9qt|V!A3;e+0GSPJesZQoTpNEVXK>sk>ac zcuRq+jqt&ZE&i63+1>NaqUyVy`sVbPyI0S>^Q@$HRp^VOA%nZ!ooRmgU3F_vipDo_ zU6we$J82NICH&o<&XJ3~Jx=tk{mpz+LjN-oYMI~c%jdQGEZ{V(^V#GXt`n$zH0tM@ z9m}T;dBYv4lS7Em$NHxSDIwglAZt9zj@l3%FYctzpNQ+aJM1-Q;G96AQt6Tw}S z5HILL8{)^NM$kx}~`y7gN2aMt>fx^DZg zPK~VjE-g%>CS?55}`Sl@`-)=Tu4E0!uEuSZW*o!Zq+g zMts49H#$?}s=q3mKke*2kG(yA&AK!A+3zdNo*t_8jTHi4EuXbiR<}w@5#SB zD1AL@oYUaz9`8b8U)L_!IAKlV#$kSr4X0DAFS|8fa|&Is=WSlMm*Y(bv;^oM%Wo_^ zCHl;>bCGaYmsLN|0fJ6LZkO!Pa<9g)DtFs|-Q|M;jE|I712LvQp<%C$B+mg#~ zJ-X+cAFpObb_hND`-P3O%#QV+Yt@vY@n~YTb+L|p>!3+%E??4&{;{j>;nXeO`zr)X zzpOd2ecaFo(R~^ox&H9o)hTN-WA8vO^83RZBgZ6gj%mcStT?zk*}Y{$-%I>n{rbqY3?GuL#vx~p6dTe5C$;5{)ujei;ANkoz(cbz=?PidVPBC$+ISVtLh@SN~XS$EA z|NqHMrpr%l!K z?*~&F?MEWyKb`)prjAea!5~GfWnran7~M>9=B1ORC7Ty3ssgXd{_O6i`)*$0>`dL6vU15w-*Z<(js6_*53|jSJOx== zvoJkO*T8aX@rwT?^RHp_v1y6rr*MHXQ z`19j4LNgA?ZSIt@Cr~&jxmg;Ncl|TdcU8ltw(7nN*jhQ6*D+`J%I5R8J)JjsUw#~E zniFw#=&*~!YIBDC_~vEB-q}~=w)$S3vjY3&>aQ%(zcBiDeY?|(gKlotKJ$@?bap-1vuew`w>$35{(9^lx9q9)kLqqD#)nOs zJt6qi!IUIjTeAUMA9Oj&H8~lBD-TOQNvLC7X;!zreWx$v!K;=r;1jwM5TdeuIPO^*dGM&IMkR%agzFZ?)f!5x0{2g89wW%qjB zWIEe9+vnT8yqRBb|C*aR@E=EuuSV(a%8K0EY0h3tpFLjMm9#D za8A^cU!M&)ZQ--y;c?UO@$rkrliy^R2H(&rUpk~|wz&B1`ZryDEx+BkxH0FRPt2fr zqxBVu%_)1rs~6cE?=fZ1>m#NP$@krB#?Jfm!eZMp)8EbBg-kPEcy{)QISYb?p$*gC zghd=*`;#ueYWVJMRtCmiIy)wJUb(H~CD)bp;jd@pyFVyhJ!+KY(8uzK;@ze8zmA!I z-Yxg`sZ*PNDUlV*AH3KuJpZcOnTt_t%b!~5RxO&IvQba})NMc4I$!An*IKi{1&IZ4(xCCz%bivcVuepn%54Qm9m;>}n_> zB@f9$Hd_kjl<47tAl1J}dh2V7Gha7j0hbN%?i`+jiE zz=8eUM%GVU|Fc1FPwbv#{@!)pKk0qIbB7erJKcXRl}#J#w_ ziFAbj{SA8hwj4f!?#SWnnGost%enTi{-w@`dFSR*)YLO zbI5YJYe2>z!SWt3lXdJ{dvVR?_w`_hexG5n^x>$UtA(C|$yfBruw+;&0q8H8m(yV# zQ+cV?A|tOCaD9#P#H)_}xK>y#%N)3tSS`<9glo0cvH+Jw1Fe=@aXstbAQa6BHBub1 zSPp^Sv;AEY`aw+y56^oS|A=I&I|)n5p9@r7^YDH5hVHdkYK!pzd0Ix`w;#WhKOe;E z8a3r8bJpJJ+JmNedwq^ksex`Ik znD!tN5|4;iXap2=TDlT?{QsvvIr34yD)x(X4;1F^LB)e=X4fa0CO<2(1@+m3EtY_7 ztG2(eS&ppEZ4rG^d0%UPf#*6L^3?0=JpqinIip^XJGQFrde($R)SA~AHAk&cQ{k}}kx*8HZkOhK=Y5L> z?>7FKPz)$p69nwx1o%4eHXzX!br23NC6fr|#KzWz2Fj7Et>L~P)}d7tpl>j+GKhcGLB_e;!|shi z_U;{Mt7@6G29)X9Xs>d$^o7E8$b2j^7w%{-)FunF(OLmz^fLUK@$0~ED}KB1+lOBq zze8wE&G{`(Y-l#>Kc#TH=G+8zj8^)#tSofbgQ1%9I56~7y~8TAU7GVH4sXz$L->uJ zthlZ+bRnu)M>y5_J+qpR08ZovndC0;gGP2M3DM^GT<{c}r))Lnb@Wc8)}4=HUUN61 z(9i&bm9t?CW!4UPtG=gA7uc?!!&sP|16Ns@=*}jNpxHAux7E^)vicztnH`haZn;== zgfA(NHHUHoY^$se9J!Awbq&fSdE1DDK^1SH$wBwG`NJnrDn0xQ9-3Afjbh50D&IbBlK!XK-w60QG!FI+w zzlYpA;v0{Vc!e&P*=X?MJy=D(i?)|e;W@C0?jqFRbx#|~MG`>4Lx>R7=|RC)mf#BA}a8&cj%RNxnVWY zZc3vre-2p*C57-i{UL+_${fP?kRyDN9NQjpLh`7;XwDFdB1YJ)$gg-hgj0@bp2mA)Pg@Kts6Rsgu`6a*#+Im_qvnT)IpeV3hVA4OiOCCI+eoNpo%veXs2r52)Zl9b`4@!UeI zk7fsz`^ZXPqdb@^E2Hw;M{)bijX1Z^#Si9^iPp$O9~W6Wnaxo!(cQ%l7KCp{eX?cN z67Z}Ii@3__*goWrz$nY!ZNg(YR2q7Jh352w5{P*t4e7|vRgh5**w#{^WR#JGVU$Oq z)t*7>AbT)B$o9#x!(oSd_o=S`L8V}*3*^|IaQ~I3psKp&a@2XUcSoo%$0TZ4sUs4% zhVI9|a1JYTD5crUXf)AY>Yz(vKRqpvbX!Aqwl@)AC640K?C?lZ0wqNjOSCyuP<(&( zqwa>86D=ThdS>zcm9x)hrJ>@|n%Y6g1xU+Eo>kUL8|9eE`Go$FA7C2;o;5++AC7+(ZY6 z*~W<(Sc1gm%m)<&y8ah{;hgKQ1gqA^w%2^qkL<22+#aavka>?qbIg{Hd>Zt2JUYlP z{G}sMwGNKwulU<(Jwj&d@!*ZOO`}cy)WPkwTB30ionl*mi1&3xq}x^wtIlc=%5Cd| zDE17t^;w|PZ0n;1Tt`)Zo@!g?fCgRLq}bMiRNHC*Xs#tl3l43e{zPnfnPAd$dIsDc z>-_PJj%`5-cv$!As%p4fXUgi_h@){FU1l&T-O&pUKU2}fRcISGDF1w)`^iqw-y51 zNZ+ZWpk11~5OSj4_D?)S^JSAbQS*I5@M*ox@V0s1;+>9K7@Bf*zIgXNcTZ{)*Opa6 zOH=mVn(WX{Zlk$&`=L?zOZ;i#^^^wX@-1Uf1fvylL&>7!()dc$eN;9hyPSOxV26Ub zdm7V(=pwK{W-r!rPBiE|UK3;w)dW1vq{uy60=CVvckOgh_H+fbL{&%Prm(r|A&5l4a|)fQMz(d!%1e}cB1iUao_-$cfn4J2Hc+uM;R?(| zb2BP82+L;M5`cI5dwOW)?t*WLH8Cit%s_=+p+vsx4hLx9v?1;@+<4H?4<%)H9mnJP znU%;VLMcO~@GmTIzJ(~<6%;laL%OXpn+|K5L&S5R<1qOg*KnVs3_WEt`5cj%Q!JrJ zyI#Oscs)EYh}_9n=_2`}OnuSALQLVAqK0sw^Ml2adce~!;^P{18`XwW0fkY62hiNa zEGa<4o*VF(^9C3<*msIxl9ZEl)5`-YY))KhJ2J z7_!OaA5_pVj>O3&-b15hT`l$&4H|g6Os7U6j|f_p#mTi1K?~>`X1F#Fa~kJS64SdG z%2Dth9@|QUKtK744EN@F!l+J_R0mb;Bfz?Q14r0!Zz_2E9g-Q(RCB(-bD0K5PWNz7 z7x==w21z$3#eO`&Wo}>w-b&h!Fn~1sLBt#5GqziE#&{9jo4pcz=X9&id8YK1;W36= zR25^?WB82Jncxa=-*)*HlyR=U?VpfXm$S3^wpYtZ-}e1NZa0b!ax;!5r9x9_IfG}* zwTMBb=DdU#m+IN3XR)!zUa$ZJmse=tW@@X^+3^QUskQV%oRHfoB)6suom!Cb;$P@R zxIq8TzUcNz9r&TsiqXW=cmt-q8iS4RUqFbcj<{#V7w~R?&Em=Gc*eV^WBFw*^AA8G zkhcgI$kb8ZhUi7rluFCI5E zCm5&QeBl0Ryc4RNVg`^O^bho{9Wrxh&fq4hGVf<0E}I2CV=+?0vT~~%UasWM4bl*F z-0g-peoR(F@O;_s_)pA?Lq^7(Jmb$13jmD;_uLICd;TEr4vdEV-WDN>qPZPL;0R;s zX&90~K|?TIvNF;gsES9rZFQqX_0AK)s?MPI?b;h7ZT6e0hCjhN18Rv~WFub{y}M^$ zEHQgSsdr@Lk-?H8H5`hx+ToqsMenw{ziS(mP{W~swjQs~T8*qUBdZdv4JKW(Sd#f! z&HOG*<|j~oC$v^sYo^@($#XklEBoz#-V2Aln|qsD2+(>GaZ&r3k4D0+CZy zf?9+JT1PmqhwR)+WNyMotxx?*4+h6z$;m zCWPqA8RP`m>TVa+nPB>sa_^?vnFeI{o|=6xrPSI>m|f8}QyM%jQF0WJpLi+OT=zZ7c;|eiQq25v zkoXl*+k(^zlD>jwP1vDbaI;R^Oc`%W{7!2}MqQK9=_K!Qq3JN%j(y@uh@QRPy+Zlk z*q*xKtbL4Xf6>#1ng%>?2i2^nk;srAk!5QeN}1g%Dwa|u$6BuX?6Ezw;~1NYY>#KH z=y~6}ODNxkd`1SVfNL}I**ZqeY6z9aknEmxO?qW84)ZySgc2=Kck6jE*WEBsJ+5>D?dDRDSHzdRX zpjNwNWq}^PL;sx*M%7-l98wCq@TYdlrvnQ8e=z!r{|;fw!h_U17vZs5o^6gVWF=o# zrXT_~1yN3)57%Az?ZYpQ-y!_Eu%!1L~B@iwCUbqI58;`*#aSYp3c)>^b^ zlyVMuH`ab6E~6PiSzW*jlhr2oV!-hsEf&jiD-sDqefULj2U&_X(GbEKZCa#5bOH3d z4$%b=Ig&_87eIf)1;aJF+;G&2{AyQ9Yz-0hEt#DpdcH?RE}}$LISn$zNY>i@iuCje z3|U33S+NGZCu(TEj(Igt;B%6L^)b0S=mcJAw!5uiB6y8*V^k1$F`z_Yp>8Zrasp-(w`m#fTj&%5N7 zAo#GF9;jQtE`+~=7p%r} zyk+fofx&SDN2!i%AFbMR@sb+II76Jv*%?s;@6Evv2QbD6yb(Kgx5MRqe$C)z^=|*{}DTo%``_zWEk%=-M^Urf{Y*NrzT|%tJ@EV^DutuXgK~ z6EQeFnCC+!Bk`w3{+vaK5kpLmY`^RRWNknZdu z{fo1aJ_XbqJ|pRrPrnOL`UM8jM~s}Q*lHu|^s>8C8yRn2$m@5sciE__&KAn41_T^K zHmA!wFZ^Po@Z-tC;ntzYow58AM)@fE5;Fm2dpY+`8r zcEm41gjHgj*vTMUgHUmu#LG_6uca&)gWhf@(qcIgcnN~kB6_w+tV2}oSwf&iYnPve zOR}xiuVg(I^scSl_y(L4O&Cf%u&86Ka#ai4#;dk}D6>a|-)^0L5$15t*IG`0^6)=^ zqqJ;f1S);sP~o@j(?>@%EquQ2|AHSzipa=_7CLl#7Sr=|zP56EsI_csHC_Pu;X~>S zP4u1+R1CdPt=@z^d{)Ayn}lI>pi?FaziocF0)gD{#VPzsqt9|C`X2r_^o0(o4}rda z&6?poB0S!VShvJZX=@}8uA3#+j*xVKZ4zyt#GgkjR$NYuM$~WK&ybRB@ncfYsJmQ+ z`PY#uwLrjjlJ)g7`(u7@2d2hZiyv+XI86PXa|c$9#4EhJ>t~#%HqS)4$u_e{V9>Dzm>4la|!?Q{Wguupx=99_5g?|LUXYP5Fz3D znQqb3$WeETIxz~4KaQ-(aU-_|WAeJY*edR;$n0%Ho?=?~;#7Y{TO(JkiL8o}M`HR`mD`q3L4uP#%D)iOcHsZ@tMiiwFTqw*q1--^e}U+4FJ0^R8!PgXq=jzHJtbg%(8;D->;S^Ws3zGGu^~slaREKja05U!}qd zXgq>|If(D6oj&{$wRWR*WUUS576l?}?3^Kr{YAaHV5Q8ta{-1p%${0Tq(?O&8#*^Q zAynNIV&d;%SW7kkDX9B5HBV{pWc^`l%9P<(e6{-XV!z({Lpywh`XBwu^b@A4H_+}D#AWB>5@h>HxOwv3z`3YToFX+63{vP8N!sxi^avgp@im&D ztbs0)>827lk{r>#FQ^MiduedWjI67MFOyaKGR`bSZ-J)VgH?G+H0Bia%-OIcZafd& zt|e9Di*)A*O}p??-WJ>-x>?BeAmS$FtWDl_G{8$Dth8h;88JdZBEaIAZ%FgZv}bgM-_NufnLUezpUQKj3GZ5gPTg&!MdY?DK%P zdG>W&e@QGaBC1&)%JwqRvnf21WvztHSF$2d<&u)O647(Sd+u$g}|%A=?N+{osgvasQg?Szy5+BAr(tSaR*xN|w+3DRj>pY4MACuTt)Wpvc z65GYr@`VCI`N!a?99au`iwINgM_`h;4Gz<_20ve!vLH$wDxlV6lqn0NB6aK7%tK7$~;fK}6}%pwh%?Kx9}#>Dj>Y#h(*N2X>L}Kuq^m zQV&=T8aZjNbsJ-I_6lW80pd^FKuPp(G^j%AAS}5I4Qz$;^tZ|LCB;2ghL)Xi7#;LH zKZdjARYzL(I|A%5S@Q9i7P1LV&w&f&nAHxn9LT_WX06<|HmHt1A+pw+)vSk(?DDI_ zAJfOvll{uQb_DIak)2Gl0Vi6HIa)q&3|NoRam!JMW}iz*`r~nh9pwzzCRep0iGg>} zYqrzV_o4I|W_l#%Bg`jxjmoRm`eTP{zQOeeYn@!CxJyf+K5|>Ssbscoz*dyO-$6a! zLryjzi3C`xQi{QZo59aXY1P>v22#4JSpGWX{9KMR+ z9D;K=oKLWmU?+#aN$~jupU>f81Ybb#1suMH;9P=pIb1;Sg#=S`+&B61YgSGkpvGVcqoT&AlOB)i^D#GFC+Le4wq0T z8ftW+vX{+HG`ty|=*ACdJ_!9sR&RE!u=p&N`AqD#iYJ(O!fIt!t7vB;rotSuiiMaI z1KH;nmJIN-os&gKA{JhuFJao<63{k?>OH4|w)gP76y0RP38d(9;NL#SWd8sRtCm8) z=gh_I##|ud4oqz*R=;xV(ameT1=tB-XC29_H!^Due7d_9Fzgh&X)TZkM={ z9IMImVYeoTTASE#oZhQDwCwiVZo5r90+aHN*pe73+1{Zk*oNcumM{-%2rPlB1Qz3( z_7P*6KanXx8)3o-Yj4m1Fs!(zn`ha=c{JDM$(t*)HCPlYu_&iWWF4rST(ylF4682L zf@gTToO#~PN5+WibTeMb^g8%Goh3?BlkNp}NZuWFSD#~UkG>99yG(hWzl-@`v4OU2 zT7<_-z?}>Gb$O&)T!mgEF8qdguXcmW@(i(CsK` z_RGW`q!Yc(q4Q$vgxEdk*OC_=pb)zix6A5L!=CaRuus%wY4|A-%o|#L(!#lqiP{fk z2w(-Ns3~hL)_|b|)Yp)Zp49jYx3j18ru@t)F{0?(CTuwF>d>nLB$v+5a*v*H!m=$^41(`E@qtJ8! z5UT3qz0$K+b1HwJZU%Q5ozlO8>fC|XU6`JUKk^Qi>o3O(@ea_uarr0YtZoB$H!eRw zw`=+B$8<}2mV2)HKg8?C(UPqxGP@HV^wA(23kP&cHhXbCoNZaD&Seix3o13cf^0@U z3yg0#mHiF$l_ndq31ZQK_&RQISG`XyyF9Yb8fm^9zGPK%xvf>inx0INZA$cCb|2Ds zJA|7%v~^seAL)|SsJkB6a)x-o~NrWL0U6e6du?tOjtKrc%WIB(EPb@cZYD-r&!1Kdt%<^ z&xFA|eo21xwadv&tc@4%Mpw^ACg4341BaaN13(v__1(zHjN}>(2lCKe@JsP(+=};P zb_W_@Gqwukma}%Q=ib?icDs36VKZq1XwBDntbk%0jmWzl`!Dc^f$Wvszm0e;p)8Dm zv2@MbQu}E_P(~HdI_tieE|_u;7NI1l(Xg4#Xf%C2Bin5_G~wToavOLG(Lrcsow(%~ z4aD!;rD+YvNe;s1TuK0G^%QqNdg3KWu^i8__~gj*X7(HT(uibqWaCCr_zS#k+EZ{B zPei+`uv>``A`q}X&Fu}15EZJGq=?gGwV@uF1{EZc`8*9A_FoY#Z z!d^RQndksy2A_m)cF-WAV#Cp6AWNA08362vDe}j#)^VD9{OgwjEed`t&7o)$rt1b^ z&15EOBP${n#m?|q2s6;eF=Kq#L@BS>g*7@NXO*^sn!lYD+`1JNVMV3ckrFwq1z+oxgUoi*o=Ia2V+#*xEri%FRAe^&eD5Rf}rSji~M) zh~2U}w;oU1M`Z!P#X%Q5Yr<7hmOjfbZ;~cZ9vm+#cYy96qPROiW*sUvISW6x+&+r8 zk)-?(n&O9{_PM4!2t(2MRB^O_rP2PCX#YyIeS=Snt-I7^lZ|SzjpFm$Xn!mg;4`t>cb!%&PQ&6-beYHu2WI}T5RhgAi)8gXKZB+f zXze-#-WsWKScGVd_gjl^sa0ZuiNcax2CjN{hf1;8EF3hN4Wkv<=B?B`a^Y6;<(d6w zVqvr1CSv2Ne)W`R3J*Yg;)?6Zg$(t@QZunKkqcEpV~^>X@%JG-?P4VWi*n~gkRoeD zkS051ENd*u!vDxmvMgbnR+7!eRu_+*CNzyEL4(~c@Ci#0Qm6VvXgjeXKgs&ggimBf zHfjb}8@c|!ty$*3shL&tp=Mw^ubD4f3uL3csIi)EFe}F^#%stcm(riuVE=XNB0q6i zLgnOd$yH*FR}9Va$?TR~?5Be4Rfw-x(NK0vV+Ju(tkGl_Ze$HphJbyTL<3vhmT(`f z1mgnSyDZ_Q)U;6iBqk10+}R{6xyCM^I}5N&1`<_xkdz+($-$ewRJd;O2%fS4e_1bG_4e#mFO4g#(4>RCcBmXkx(Ua7-nXPz= zLx|D*Ft!MV`}v|;*p9j2jK$z8b!h1DA`%v#-V2QV7(p!PCo6q33W4KEn@)u&PQrof zH6ZB4AmO{XXQLgH=fjT{qL%=|P52I|{Na3|w#a-A^`;E$1HztBa$*uYXc9Sg3b$#` zi1UdR*n|{sg~&&nSAbGYU)Ad0hFCbncS0NT4o!<3wT2vpv`m9Alo^x|G81VFs}Q4* zDP=R0XCp*uGgM?|w&l@$lcjwkGb=5#FElo@4(5d@qaCVf)AL+Lbeh>)!=sI?!zGlh z8`<*gu1?SHA|tyYs3+P#dGrcsTt={wH7Z5sjj&Wf{g&%v>Muqw*$tkD?v~jM@LLPr zCKn6g3Ru!y!*T{>Z5+C3(z1>=VAHZ1@HjLozXh+_OA9~)nvj~BYXW|oq~V@6qraN_ z^+ncAJ{nOXL}_1vNWFC~`9D~QCd`FPiQM3K8GhKTFHo5@KWrw)j0T~jMew)my1nF1?@fu9YchL2`;5EgrT*pjK-SW(QaR3%`jPMtmLT1@%p6# z7ey{ms)wVdx-ciROsQs%iZ}TU)kM2KXy`&)JNVQ<{fr!_`VKT%P`z^03!28qP1sh& z1{Xi<5~5Itmg0x9LwAs#g!Rs9%z#a+1_=bfra=p*m^G0_7gQfX<;k{DsuTsvwJBF% z*5Yb+_!pWlKk+PUr~t1drbsAAQY)-}?|LEX10c-1f&MQMeN$)TlRw%hW-)Q3GBw-V zE<`TJvmjeeypWif>u1B~`q_I3#W^J9&XKgbEf3~2&rkFmCzl(3OWyS~;Tg6m59ML1 z3cG5sUSG^ro};2g?>j=YFGN)GVtQ!_0&oxc*bb;2m}~4acPL|hU2%wTyO>SlEqUJ; zBELk(!Nle$miH?^rkxO1m6X6am94e)Dp^I=ddY3QOMO@`l{%^9-6BNtafc%3VUF)V zE%k!4mwE#Io)Rt&46>SBiA~KXPY)Z|#NS~Ye6VgL>HaCC;ZH)bH(PPaNDK%zG4h2+@o1-#>K?2{Pz8f)JDtnFJh7 z)oQJNmK8;=EyQBB)!U9^3c3@ecs+E(>m+YH`8CPpqgYmxnViaq`XRZ(l4iVE!n(V@ zN2*r+Rt+eiN<6F6eiq8HEaK@TGyWMWx1vvY-Yeg}0@Gwp8@CMDIgLh`cprysO9B!_ZHo5L(DB zC*!uMV|7zMIxwGJxJTcrfw}5jaoe##RjW5|j$a72;@632ydUv?&wAM8FisAG3B%MR z&#JfoXX;lPRrm`rf3Z#~nvo+!?<2jXerxY@J>>9lDdeKrjhf z)+(|mNP0PhuE*7E7e)^qE&EYuRHY^>Y!!7a8_?ZUT;Q|Pf1exwrQ#ZQ_&HLu3q)Pd ziflQFzob@MMcQ?rg_4DN8C3q%d%2SJvpZ=f3nMgWI>?(vgxd9c-xVV7BG^N-7knqn z{8BY1d)qP0clx~x8)V88JQ9WAb~GOr(0N*E`14MHy-2nzz}m`L1DUS?>y)>}#mI+N zvE@UW0^NWDVOR1ny|>g}(V2*RD71W-Jz$r}wfLU!rGcsdwD>}mYjF`%O{N;R`;{5c z;~TIc%dgy-D=M#WMc_RwM1Mol$fo*e+5)E%pqN%+K}%r=B7dQNq7v|R%|HsOA@wbh zYIiD=Bwf>MhxmY~<`nVzi7E9Hf|$H%X2=(qA{n=DAX~0%L*Kd2mS5lP_=i9vq3W6>C>6vS$K7hKu$g8AI(7=vd(fhFw zZ6<&0xRr)Ds9CRC{T2_YR(k(^3$_Ba^0W8#TA|5ujV4==+GG%GG}${wlToDtY&kU> z+|X@twqCEBuw*!P4e>_o{5bLtq2(XEUIPw^%0p00d$9ZR?WIDm#4j|F8;6 zMizrNn*;0>61V0LGCDtr{8K;++}`rf>;c`PGJ}ZaQYD^MsxWH`)uxk5q#5mC@Ea2@ zkfCf^jvr|Ut4*@D#Ft{|0s-|QN&{AL7H$D`Y^SgOpH>Kmo!V^+5d*@+PV|F)5RiS@ z(tu{aBAx?bSP}sqp=+U(T&xR1`$Ge8At_wX1^W*M39w@`eyQOIIAecYQrTPxivO?5 zrtv>fHqbSsYJQEbCd_*V|HY|O&#r1D>;{cIgj7jYqp$ZkH+@sieob7LpcBg3izETy z!$ZFyUE6lL>Y;VSF6bRhmT<-6*HuVT|45`u+DKEtUmzs{$20b;6wN`jt|7aAS{F;z z8qkWTcQMeldm)54RekW)ZaO_F+5?&cQ;J-9==5>2h7lR)GDK3AK@xR)ES44`*QU~x zGZ} zfE|DtKnWu+FGXAUExgC-y%jvCE%E5IU;$)4+h`*1$>|klo?GHR-6oA3w8GQ!h{015> zz6@?Bg9X1Ppm=}~dlolzBm<)Nm^gt4Nn1>N<`Y>54~bCRwSML>yuTsTH@+0>!V;PB z3LK(?)yT2$P!h70K-iD&qTT#xq~QHWU+g&l}pan{JJlMb)B8h8jSNAdV$%J^PCB+p-XSY&ZJNs31{LN-acmJ1}d z%n8w*;D?Ce6rYP)Pt3ugJIz?Sf#FY(QNkeL+8=7TpZIt#_W=w zj0PC(HuQI`OQn2bd#I>FS#5k4FG$MbI4l*({n)2#~sc~RSMSDFTkxe zs4U)!D=xeA%RXG(YNUJ;%jw9!2%A^vr&j*;?+Vou|>F{GoQwEk%n1L{J|6>Qv3!F7|;EB%6|Gc z5%7GI?mXSJjI|0g2AeeJALc?Kbcf3jch;N_13;LiSSsdZ3bDJ5>Viu*NXkm8Fio0a zq>YLa{|&v$Rq8#MGXrb-wD%$DYL8HAx=U;Xp`rewcVh^1^ji{HoQsJ}POHgGMyV6O z(KFz!Obx!UeGcKNQi=H(cgb;#YpBP|7@_&b>Bp2i(13BObrHfkXkld|DEI8*n>&M5aKUh(^7ms9qFv!) znF%;|7yyK57#2h7>&rOy0v$Vs0~Z0{H&%`f6`h&c2|sVFL_ZwUmB|CWl+Gq9eROS+ zxU#U>#K`JA-oJQD#UDavpfgULjwqGHg%$0kFOwi)C6OTgaAy6AW1`QjU-uH15j&bo zeUj_e8&N<~x2^-$(5-La*3hj@5lYKv?seTtJ=4&w&rm*wZpBd*hF&e)Zs=4)-9nuj zsug(BL}%8j$Kz+ys#cJYxQ5Lo?X1k@s#V1)u*zKG*;m!Fx;-Oh{0>F?(VwU$LA_HI z%^^BN7t<4{ZR&J-U#2_iMHAYJ=8$R+Wy$JKiHvv9*pfkwC=&C?c{z_dOETHbKIWI>Q$Pl!lm9bu4*Q(*WWLC&!XB-~W z0-OL&z#{AK0SqNgW&ygH_b_o8bvMoFB4*$b!-=FD8+ZqM2&e4gner-cPUR)ulq%z_ zycRPTRPgUeyo}QRj@PI(?7QZry$(1r#3TxFtCd9iqc<5hq4C@#+`|hKqBl~rah~-} z*Y3m-GZd#=1nOU$dq#T9RT|cS?h=~`jn=x+Feo@JKCud}rG8v;hSFE^yh@Y+uiFr= zjQ)q-!b63dm4u?_oir5vdkh690#qf*;LaEM1F#NRBq~#MH=-@Vt-U=&CgXHrXoK{G z@^KJ<=nCY9OVVJlImB|DG9cNsmYx@kH~`V|^P3`v_*OT4J~1 zAQmht^2;Lo6bDFhV+PwlHiJ3=*4xPZ2F}EdxM8>X%mqgU05P$J`K+txuHhJl7Fc?8 zA%Ma?vRb|vE39Q@Qe1b{aCgWr_}Amw9Urzw7ZO^gB(lD;GHbESX6*|q;SMFdO!038 zkHcB~G+x%$wGpXg=HEwo%EgY5ad0m!u?({CKAa}%;1j5{E{P^koyw!xd@@>WFXIRH zvhcFRUY_JCN^%so>T;fEUnV<>Z^pbQO>|TC@j3f+dvy|ZDZVFLnA?P#hS~b^tjywj zDreWRQK8~dHMNgW?syHP-L{W`WW;i>?n}=4ZL;bIp&8+z%u3*BHirhuth^f&^4e{O zC^hEgU1vsP7V-?K%e(O+&flcYtiKPn_undK8FZnRn6MK6p%Z8ABXO7X8ubl(Q)W^* zRVg#6CTz~68ZcFt-?BEtlm=Do0}8MSt^k{k0O!nt0Q-=-?WCm8_L5g}Ze6#@y1;_Z z?6x8(V169Bz7CE=k-O60zztWum*NI8U7*jrQe>9Ty!OQnx)ceL;*aBZ2*2+5$o;xJ z9z=UG8$Bi&B&mc%N)XBTU579%L=)b&kCfYf-VpB;`?o&wV`_=J%@zldbM%qj8JaPo z5Ae?PL?7p!;R)y5GSXgMwAcUtMPbzbT_2)`_!vd#N8H5z*K5ey6Cw1Wt1%wqqWxcH zXws`QMKK$qm_}xnC1K7FyG`a zJP1L2}_QPj*qaT{;8xSnUZ3kp_<4yJTwJmCczH<|H- z7n1RW7s$oI`JhTsGM@0lR-l5)3%m5oK3wAWzNM>qp%PMt( zoKF9o!N<@`xhfra`xHIdc6WN0%*lj}VOCthGXil~m&x>^uO+eiQ}fo&^X*Yz@? z(*8*QyY#42WH~jD-A^A(*c~23#nV(hL32&Dzl_N;uXVn z<|WMmoX9rlaTIfR^--684Graf^EY@YLUa`L_%a>^xsDrwFkT7-b*HA3T+xT#-GZDa`xdLodob?IRVG|Jep-YAEVf|`|oNJrK~Taq~vxq${S z6yG{6w#5S;i>O#Lw)GSN6x%}J)1t?=LNgIA3QwW9#ZPvm#k4{{{_=R%&Jd4h-NGB; zHvrI%{s<3eS%lb+P#b+vf#RV3*Cr&2P4%PLl)Z3WdT2`FF{#+P@Wqty;*@|^f1Nkv z>>G`P%`?6ijpuAt;;HIRh;!RZ8oDO5iAVhD4*`e5Efx&kg&7$97JW091<-+=Y z`bq@)l`F`Kv62mK#Dgwtrt59-01(AI?4ieuaGWW^PJbbJPK`J%0>_s|o;JmoK{3-QEPT}+En)nU$kQ8qu$TFU zjl|*0B2Nfy#~XH{K`w$RcHu*$CAc4#hfM@QH@F~v{N!xL zdwJnH^z1R%gp@f9`Vz-D;By`=AK2*N2iD_Dk${q?)KCw3G{iKrJPN>4H{4iHj?D!j zVM#*-NSTeT5F72;niy*NHNE19G*IGhdj#_`ud|9x{ z7m`^;g|MWN@)R4hve|sfEK<+&(tII_HPUU%euu)JP!_Y=6Mfhdly12Ta>WU`sq3ErF^1=J<$I zti!~*fyHAzHISr>3#iZE(?#=PraIn;G_5?xuFs$;h`)+hTffR$k1{QxLBf);wT%lL z_2_h(Sd0D1`u^qGy(ZB_uQ7j-Tzb^-5v|~Xm-{Gobr`2U&<+A@nJdB`AbeWFM+=_W zL$ajYTMI8vR#v%XB!GYEFM8fVWrqgC)AZGrG)ApdxTyJ%a0)1BVJC5JE@fBSDXBlU zvQ7Tj!5U{kUA73^E^HRna_i?WiA=6#NB!(Ad}9xLow2=a2)3HLC(p;~b~v*dR;=N? zEGADA*}Kqik6(xU%GpMdyUDap-_$R(v6hXTi;n_eM`|W6wifwWOd4kuV3Kzsr%fu# zbBFtCtzGc@EjSA01`W%mTE*zwp+PvSVb~Z^tA8G(C9>$`27-uCEU2y()RI%rd0Mx1 zW7&q*l2{K~aTS)-Vowx2a4TGGcOy1PNh975<(m5?v=&-}BP=OyBz*W2?5f3b-H~n& zj&o_ne%Q%4Xk`qt!EqF#7Ud;VJ+(IPZlUQKk_s>lRF-P%vB>OA)Emrgl~vj5i|z~! zoUDv2>meBDM-X%dg3(nHn4Hnu4H;pp=P>LlSd%OhD_=#Wej%z#TbZf7$PpYk4q~7# zbd!K!T<;68`(}bB6smn7KC*m1%D`x_3vz{dj*z=r zxO$bFj6dypo>Du^n9IHE$287YIYp}TdCVeV)Q`PC9n4=#gRi(qD~SBH;xa5avqYLR zf>rx~uawnT@F~hH>Rv>dvaK|YHr{BDa-7?YVCAu8*oKW7ZT$R?azkqd)sCh@K9JZi zs6c)Ikw3O)_W8?~4}c~uYo{exDUUGc*KoW8S>sOeK%$h9k3pFiB8hTOi_>i!$MPh1>iZHM5BpEj``Uq*c9f$j&`s`C9%-fqhBre zzB6lxWSff9o?Gl%8;&oMyz$xt@cw1*ZX6BdJskQb&Q!35+}N&L!5z3+eYK8A$0@BD z^FiT(lIKsa^V~Mz%%{lfyhUptz@Am!T)Y8kBkLOMV8vcm;jTl%T`ivpcOLmnxErzN z`umA;st(TC#LO6N3PwP!gKuudq{K9LK8+IMmA|9|9iqIZbbK9gLPA}zTM9-C_K6zv zih#GHwx8_XGTVOL_C&^Cg_~4+Kd7C?1^G8UiDtzC;d?dIf{vfi))Ny04PC@)3CGj~ z{hqxhk8v73Z}y-%3KPtFsfcq5^In9aC97GDu1mX~EJD66uUL8{GfXm5UP8e{~G zA(J}7;37&%A%3uuIOLOVTe>o2_36e}NbP<8Qh?!128bZ91r|iK^7%YaE-BbT=Cc#! zpQ33XpA_oE*Nga8MCv6B|oJ)(#XE$ zgX{qv%FQ1MOXk=h0C++t3K-Z!!1hJ%!1l{DuwY<@a`V3e-qp3QP=R_MG)@exfk;s; zgMOGZ5i)u&2F6SUPP~masH5Y7i#1gryTlWtZEU zaX{p>GJM>24{q)&!$%u7;U=d{wync;Vp&GH4JSY?tu1qu^CY3N{-S=ehN2%XPczR` zWLvXr;~%1U0rb%3%_$-~CEL*FaV*&LtCxYd<+gQLPP>NKEZU-*jO*LR^(0;Ww&yod zQdxa`Ay#()e4B%y#rFJ3x@Fy?Y|pQuJ6w6%Qrjw?C$2nC;Q31;yLA&bp9S4MJmIBa zX)qq{rI(Q%zv9teodEp`scj^Nsxc}bwUSWFdSJ@g-vjKRXuEX{mRLPT4|RdIH5<6O z#tR&z6E27ma%OMrv!`Kc8QPeP^pqTzt>bV&iMyWOGK#`8`xyKSjv12v5*!S)rY*|3 zBN|+h)dnH~>%D?wa?C8gH0Al{oHF;EQ(kn=Df7-b<)!DG(sj-$FF)s$?sG|rG@SWY zal!a^oHtYEe`!jd;Wy8vbe?k9Ij6kloKqH@bIR+^Ipy$kPWjz)PFZv=DUpUVYQ&dv z-b^|2OH=X;Z#b9Ic}m|orz|<=l+rn;gtpi9*uRrcPN#g%DQ`OGl)-aJi8P#mF<;7g zGiAk>rsNskaxSIwl((L9%G=L5<@j?>dDl6ooOsSD?>^_0mFJxD`$%b?dBV?xqSIhI zV8G1gfa{4*B%aMu;R*bjC_n!gv4HH!aMa(z+by4D^9<-1&5FtRh|VrT9>DVj?sssD zMTGpl?YO6RcHo-0!|&ZN`xbaUew>o!!SJv-ppGo#?q$-y6qfci+(7!&J$4?D|Mw*M zev_@ypzdC^;4_Z3|Bxf?8GMklafP<-f4t%fj4iSI1;?FgDdz)W3lVD;mM*BJSH0VC zf@UiY%tX<_s;%UV!V7)3M2jvUhgPy3fM*@VDK}E%0?!K=hGBjRpTm~=kPlx$L&F*& zHUi!zMkS_4=K&~B-A)wZ)I;tL$hKB38Y91$dkz`BV0$kZ-dK=1ctkIFWG@(IB`rOSM;Z(hkp{yMq`^@4X)u&} z8VuE)217xo!DD*C6}@1n)U@215mzaN@h9 z09!cD{@WCyZdR0VCe| zIPH$njNr`cJV|sFsR5+>tDY|YG7=eDVuz9PDWv3sVCNG^6mLQb31hBG3|V=YM*RhK z{2=>SpN|ul4@Q=Lwi=7q5eAKa^j*B((8fo=4egu@k%QJS=G##db3jgmxbcXJ(U4v? zhT`-Y4xwolE$+Z*wLu$Kh6rT;H=N2BPwHz*BdkFIOkTJW%Wf& ztE&{2=qZA#dMrp}?$p(9Qvc#;oragO_85Btr4g;6JPn~f94(9g3+!Yz8k_h9&%%Eb z8;cR>Yt(b(C+^@lW7<5T{(@K$XkXL+DPnSa&~uR17fhj3md3y7;tXlW)L7kvnApWP zQd0Ca;=%YJX#m^dAi>qLtxdTVb0Vz> zT2Qp&L)&)jd-rzNZKdPvrqH;)p^ci1R|aEzq3PSY%>lQJcw7KxC2}lVh+G>1%(MYe6iF^D0D0b>aSHhv&fcK|ji(w^O*@zC-z<_}SvgVI5$41{<$8n8uC~_(rpQS zJHSq!HNUB8`BBx!<6uV|L7z>8Qr*XgmzkaJ8*EmH_Y4mXe?}=-A3vUYTRVDD&2&^3 z8&#$-w9ll_3YxE?2Emb&n~Vrb{KP+WfnGuJOL`5b=f#18uznwMqzmcagPsp1_6dn< zy%)w;djy9O>+vX)6PT@tFUEU_+DG%~Ev?<#UHbv{TM(OYzC!#-Jmp8}qq{9PoFKCn zmnUm+Tyws1hgpH0m|vm_{Nbk{(jN+{zvFVv-Zz?rKABJnF{e-&mvJ}<^!ZN;E0oh2 zs6JY+GSa;Qp(wL*13(5AqzI3{2;69O_%NEa91ndFVDFZDJ__2fFvjNXo^_?(Uizo& z*e0sq*1u~SLjO?@QK8q5cA|IJeRGWJ{%+9rA>vWV^oW1Qe}xx_A;b6!TOj%SQW(;J zr(lR2L8r8a71K+knVOm)KD4n21k!h^c#s6&AZS?4)m6jCdKchz)l~ZyNF;syE}qL}P9@SsZ;xXR)Mk7DKpX_B4g8Db%}Nc>H>>4tytP zjK>pkXxg>jR`n)L2;y8`Oi++L!0DCJ!-JN;LB0O|#mERaIdTf&Hx;o!OsaX-@aWrY zKzJ$3El>TFS7PdJQpAC(lMoWQVJ)#qwtYcPTphal_~!`Ri_Oh_Bz#3GUV#lc_7I5qc6KhY!x=n1KRO}!Vi+Qr19J)U=^2I@ZJ=pyw7KcCeU^kjrEY$45E-|r~ zl_RW9?;;aBBo+Hp6N{xaJ!wNG7E{1I*t<<^ZYowbu@~uBoe$TU*gTUpcpA?$v6rT% z?PFqHsn|nU+sOHQc`EiD6AQ`csqtzPdsQm-WfO}T;hwb5n%HlqV&|CHVX4?@Cia?C z?CmDDAQkH~vDc+yziDEJr($zV>~~YKr*PmkuW?Z-Hf~}^q+++5*paE&RVMa^RP66f ztS=Qi-^7-rVt-;{NiCaA7r)QMV$)L(c8rOYQ?W%R_NG+qQ0kCieDJ>@Q91_*878iM=Zo`>=_{!E!yNO*FAMr>O^9 zW@0N-u>~gf`>EKAfHie%;#SGqHG5p3Y7N_sF91WSngd|do^hQfPwgP}L}Ou0_fokF z@<}%#_#7jp6kq#3H~IK7Dop-HQg^!2l+>x16~Y&XS4-XlLemy3zmU9e7eoD*ze&n* z%u7ifUF%NTJm_c5xw67k$^EA3D*2TN5#Hq92VG8cr`x_msyI1!ic=Bp$E4Nt)cMnU z+TuIm;3jAH`TjF3+$o}!I%wP7Y$}eV#I{7ZdBzUBr?lbLKT8xmot;%}6|rpOJn0{k#e&$;GEU*2e!f zhbprnz7R(}kyS#&p-j1I^fX$M1kw<$FLgy$Qi^mPyIk$Rx$53fsV$%uI1 zJx$Y}al|e0qI5)M{2M?BOCoe!Cr@aH+Sq_9H^&F!2^&3)=9dm4%am-cj(>_pktvAc z_`Y<+*!Y%o#HH~!(h;NMe@;h?jV}a(tt8I!thtAUBb(y6@j3LQon!fG4xPYhsaRMk z9eX>lpkGf-Z1e-cT?w4C58vv$^qiFztjN{*6u%M(N;e7hrR(p|3H(uT9&Il~>GN(W zH5KBA-%YFfkK%t%M_eC&D;-e~Z%aqW@xPh~aoK!>ieCZ6R+5DEu6&H1oL2bc2k{;uQ*>7RFOcA!=rSv9R9}`p?YO^5e4K?^bU#u^(V3BOq z69hFz`!`|MQsa*hUDKNRY5%qF^yJaAUM6*ELo;Vs<|qcT3;9=4mH~sK_JZoY;6pJs zRMXe1U*O4hwO9?@KP%oBmQ6o1X0ddfsPI_M$Dp#e8!6OyBfxbZAePB zVa%tagN(`g-F=J^5Ao6z#>VSO>v_^j9azKx;w3VnnlV;Qz^$|d^C{vg@KjUAh||cZ z7R3{r>1#Johffi&WhA1$B*85QD;IE{QG)T2W_-RT=&qJ9+F8g`Omt79)g0XbBHj7I z+#^@uebxEVcqo8p-^iw-n&wn)1k$!%`+$vhi|uxIe@czjYGab|haj{0i>n<%bOYWG zFbf;!!ooIu^deH~#>Z@wajpQJ`D){5zT#L=IL9`rxH=1GzWTC}D=nW}iA_t9mhR3t zP7)kh62hhf91f#(%|MPuxv+)2+_L$}@+N#u<=qvYZxn(K$qN}v<3Q8CC(BD*{`J&v ziV({~?Tj+f`+1o->y_ji-OS|Y%&(z5VaZmoR2i2aId-iu=Xa-|+>R9sa~I-9E!isa z1GtsaeB9#zb~(syE|Q9-4-1t|-Rc`?!!oaJQ^)ZWaP*Y2qHi-o(rw2yI>S0bn~Q?Q zua3thl!^Th;j6_rPEy;wewoEGb!+`aeJB?sG`c3Ds96vQ}-JRf&`J>`qxMyjeZoJ4(=KiR%N|C;i@ zQ;4~Huca^D6i7lGX_U;3<{0?R>}5$38#vD z4f2f7FzQF;;4DWhtKz5L7$rN6lFzKaJpc9b&;PgOzjVoeyZ#sa+wwjC_40Fh`PNxy z=Ko7jLSL!pJ6ZE3|oIX^x~!FEZL3>)6iH-@RY8ymWg^@>W`;3)^V3)QgN# zM@{ar#~UvGiuF5(@{l#JWomg7{u|}tgP+(CJGGQsy-0I^9DX`)EiiDG6VnZrgRdaQ zI_oArK1lZO4PeSwZr^b(Z51MX&LSg${~rN8()?YQBSc zK}Lt=(=Nv7_-;5U%^7fDLk7R0w?MkBH@_!9^uH3nZRk(q;BTJnJb*bz@{cfShn4l% zwD!m#-9^A=+Aa(7Hzd4UeAFQG-R# z(@j664kb`4)}wfymXp)h#i=<>{wlsIJw5sbG`wI9UykrpB^tK|%>_Yh%Dwal5X1ws z@@Yg?+4U$n8)#a+fkp3ILeqUf8NSteC}Em1lCN7wUuJb;zODsRkTili)k5b6dz))N zLZz^w0P|dtjc8nk^YykT#}kOB&A$axrSvH>dJCfujOF`9w}*0gf5VZl8sC$l)wgQl zPyLM!jGCoJJu#otd>zGyu;aCy{j-Zc)?_pyoIW&SW{L-PA!z+dEtpxmQsN?XoK}|- zm8g+^65>$s&>VOX9p1R07J>+oA8m1-Ft-MWm>3kn!RLMQ%=Tg?%;{I6u2*{s(RnCG z7aa_lc!@Xntk+NKuL1vgdEmG%LfL#STpxaRSxGvy^(I%kK7}_ItkU@wnA*(eb*kRR zT&}i8YFv;}{Svl0w;&DXSLG^nOOQorWW(HD5Wo2pc z|334+3yaz1oZmUW&;RrPA9VJadFJ-a%rno-JM+v8)v+r10QPU;L5l#4HJmqS$LT8k z=;q?Gw*r1)+fX>VNr}|s%%7a2MtDz3L7bm~A+fOc5q74V%TF3h1EC&7n(E28tK>74 zWaRnepC#!(GhL;cG~FppnUm5}n<|M`jp;P)L1{dzz`vKSplXqWx@`4p(2IuDlHs`R zY$z14S9EDT6AyW%d7er0JYM?-Mh->kLyE@3X(dO**uG*#hc-*{Nj1M>QUer5{`1sM3t*b&8 z+)sPhiaqo-q(VKofB!E^!j8-E;f7=UxJ01n>(tVAX|6Zh zK7jt!OjPzqZ2bm{O9VCZf|vjkgv48z#Y=Xrrp}MLrP@-P_%jA&Z&8h6;bIw);#|0z zniN&7_H3XvjoE51s%AQh0;L(8{h=jcRL4rHD`)Ldta`-3S|3c>8FCE-Sq2@|z=j3_ z3cW5I0qA8l4MdI#X*oR=`~x`;p$`6LhiiJ;h0;tuHTxZvbA%L+b1Tl)@!!-yJ5Qah zX{=Ipud3tA0)p3)3MWn>20StUXSxz}Mkwu`%W+K1 z8N3)gpNC;nUzhBGVC=J6gM&m+y<_cMcM;#AJh~Zo063N(F*+qLG)NE12@Nvhp7xl9 z@c%~n|FS)riZ5AF{|(e#_|i+3(_{%XfJ+&vQtlzLCp@XChBmj)Cqe%feSG`S1nO)p zwNDLA_`t(_`&89EO5)PJ;w4Y0Kql&)Zbx|789bjVo~|K?#~wT83zCJsU{UKzmZ3l4 z=~s;o%|zlSKMmSKyOxEruBu}yHB}f(7j~dE=b@s>B`Uhn)jk;K%;s8M>rZLPrzK@) zZ_+LRTkXN_6z(p^s9ePk+OTwur2!exQKIu{)%A%KJ%L4gj*mubJ@<=N8n9A`b(;7G zT~wdEhKVxC!VIA-iw8k}K$U!3QZ@>SLB5b`&g-arjczq7UzxZq%J3X36kgq(K1o$J z{4Vb5_eg~go~6gzlO+f6CUC`Fl+@n|DYXOz1|a8B=44oMmhw)*l5+{~By1Ywnqw!f z-|4L=3up^nj;8quE}B4CCjNwkoyXZoaXod(a|~UVf3Q`yrl}~!-2}(% zk!d=5PWUb!2&FecOL0s~N5qG&W5jo$0wdhK^J<-wvPYm&Mu%$2bIh}3FQIX3z|-i{ z!Wd9OV*oGyS0Xt)SBU#rn$slW-O20%=Kkol_eVc{fAmxLM?ZOg^qTvlSKlAK z>i+0|+#kL2{^%9=M=!rWy6paFsycytp!P$|hUTSam6Xn=nGf!nPSc_9@?Eu2#rIT~ z8-0=PyJOvxx?(-lP}l-1Iv7*eLg!6w>^EN;Fmc2zIGGQ>; z$-r|pt|Ovs52C(3diiW%`5g)8je0L8T?Nq}i5y7uyPY3xmant0=>OlA|F{wb@?Tvh zUIa=YcLI_m%S(tTi~}tw?FHn$@*kTa{|0?b{?q3}<1u_PUB~J_h#jbJKH6An##yg-s;2O6S?3Oh)8(}gV?OBY}>stxu z;ZitG%1O%V=yuIB4lkAGc|3mhi^$=dTGm;~VlY6v3VV1AvUkWK*v~#pV~3z(ctx#-!eTXjz5eE!Yzt;@!mP)R;l8a zbI9#d#ck)1yQPY|Y+Sjd*u&=A&SO|lP&gsXMHp}@a2Ohc4isi@DxB{(jW;ykT2n#< zV8~xGkdgSYWJMg2Sm~@&Bp;i5iCseA#B7MmRW04dUF{J-+=%I|);#v?)79b01H~>q^uBuJKNgV>rV> zZ+2%4FT>R0^e;msZ!cU&c^Hwh=W5z!!c*N0gVEnZ@nfaP5m5PakfOMzLE%?bFL72@ z{v1$wJ3tX%5iW_ZTH*(ZH>8nIBMnoPzvD4n4t z$WM9B*5lz9Jb3YW5ati`BGm4mPg!J2#Fi)cqYEJv%+kZ2W> zl7EWm>*#&OJH&N(pP~(WT*bMJag{2$5;tZ^G?gm6iGz6w-U(tSWkik-h4P@9RHY;2 z#PFwYG`$~#*H2xwRi`Mqg4()5wG}Kss_cwxIFDdzHTGr1taUh zd&u%*WT}!D@^sM?Jrd1n(4%r57v6knq6nnam5!Bz7Xt8bPL)6kPaHnNh#=NV_^DWRI&s;C&f zH@V8{$E0`N0#J*%h=UA}IK^zP&P;@5U%UM07L$aynFj9!){&$V2HM`JdD<3q+duCF z-@iG0{po(aRkCOkbR~t1qJ)fozyJ8E=YJ-@RLP>m=KP}nFu&ygP<~00MTejRDU>hf z5A!=gbE^M<{zHajQD$>~5W}qDeqW!H{zLh#lq|XiWiPNSy;C6+vyYIi8^6?}yZ#5t zNBc?a4Gdxb(k)Y&km>!`L#O`N^N;(}{OjTS-z`5)zp0ZdFb5``8vEn_W`6Iv^l23A z<}pkzTh=;__9Tl-omBhv!Fx7HFveen?%ST1$aWq!CP?_jn-(iqY*7s}&TM>E6qc4S zr7C`XwzMP~UkdQDmzI#O6l^m~OGrZsQ_i)NT?r{k0j)1BA-yQr@=8lIye+@9gtV}P z*(o$lc*jB(kJPl_vz|FfV+xLC%t1<0NM|-)c!7;Bj-Zt#Y>N|~*QA2>3F%4Uy1UX> zNfS&}x{(yPRHf_W0Hu4GDp)D67*@)3z)&yn(Udw#?@C?z7E`Tq^14!_V7nVxkb-R? zz5qzUwgT?^Tuwx9R&zZ!bKHwC;w>CE6Q*b@bY@}n+c>TYCJ8IcTVRI2#&L&WRNDbz zR6FoiEllj|9QOiDR5{08fmw$ywJvXR+-8`oZ$a&5C&zsW^U>QJmkYwodpNG$I~+Id zJ&x-H!ah4fvjL<96IsP^YhfhEIBp?~_&6YpyTT&7Ps#oM*|OKdi@(B^fW=U3sJ+<* zsYTV`s;-kcR0mK!TvUkFT-?%?t~*bk4N|(25ucio3g_L_vixu#`fynO0%|A~k1Q>C z5*DnsN3`O&V*W~>+l>`QiKWZ6!AP&HEE7^2b1S;M=L=O-1@`5F)KSOX)x)qKe2P~^*eYH(s~ z_7)tOOLKm&K?!6EcF9#*^1(Sna97a+926v~)KS0C%Un^__ssWcrY~Mpp^&KPdCgMQ zfV*i?A3JJY^IH`?p_1zSURC;X1}od4ql>cr`PV;P;_tU%(d}76=x~X$6gR)R!ve-xfngNXp8PKD+9A`4zY| zWzp;kqNe$~M%PJQHt8-cI;z-%%Isr*GH#F3)u_tUP-m~0J!+_P&GSSjcK_ydRqLwM zy4lNAxLjtL+_|QVJO-@UPhbumekAYAWpY*WnkNZ2yA6(M(}Gz=DX>Uk?mkq4X;HSj26VoEx+bmx9T zN``(wSIW(=;n1W*jxLNLBsDLieEyeYS9#*NW+k>UOA{3S6}S{^Na?~DN<7_pC{1@n zXyi1UNxi3$dl^^$EA4AX`T|QZqv)txDq$0U;QJNdo;-5V zv7&~OU)o@jU9luHxiM8T3Tw-i{CVBEyHe>&%^#3t8eYQ0Ylf0#ufhSFk7U6HvN_Mr zzbeR$<0Z#$H)2uN(&e>e@;L}=OeL&Q2h_T1k{%z@&zHuPkOT`^lQLm(6>*FtEKV3D zzX4u72{CXS_EQiA%UC!TAsdzdcOpON!)TESrGsgLy{1#{*M<>sU<6K z`>>n)8Y@Uh@Hje2n*9FU%XR0W?y7c{kszgEr2}T>bop@=B(8e?Aridq_aE;$jY_CZ zEW+)Jd(M!x7g=3@B)@$$I<#ME!Wqco)a1%}vGk(M#krjsUAqGCB4m}Lm8vwj1lzPY zBnwG58(R@)AZQSJE@B}Gmj*gZk4}RG(RyDfEz#imWW@yP@VK1uqFR?vD$1Ww=Yt06 zw^)BsCI31vN#VT1)(6lwI5*ra%?a^L>jjcscr)p^qm`mmyc;dgA9g-6yOws0lRunW zP3J%F>>*Vyx|Hz*;>NUCFThtbyIu{8qGGyM;v44(v3q@c`lmU66OHh3Dt$!C0H-oQ zqzrN@gG9<;r!rWi40S3)Mas@je55L+m?nvo;Z9|^NEzu=Mv9ctPGz)6DZ{}Ckuni4 z&xw>t`0^Gh2RW64L`u0+DHkd6Ev^zN)lQ{aq|`W-8j&)?smu^5Go8vzk@8{OhdDwl z(64s>szF^0#5d;fvf#ZM=V49MiS#HO_rZ`S==(Z{h@)u9NQ@OY1)j}J^}INwRON@2 zBAhY4io5+p^ny-Q1+M5r`y?NhtoVlYirYbw1z*6X(P1CD^Q&d4*deOI@zi&5Fxr_` z7Q9@Yd|-yJ1_wP$-lYihYcR7bo`ZFfDn&_E1Ja`2GdBq=RyHC?5mk$om(n!n5jD2r zqYgH&cc42c8t@KsP+Cc45F8qxukf4cg9mQXU)Ua5_QyV zunx~pL!7F(yEFusiBoAzh*I$DPTz9~-Tgk2=9Jj~}Q#CH=a_hzR!k0Q>c2zjvUQ))?_M`~8^x?qR>L zvft;~?@{(Ujs5D_Z#w%O%zjPyb#-R}Hn)d5IdJqN9QU20t-7)@$oNxbW8-%YkM9nu zD~|=$^+yFDM$?;obnp6V=rKXf3g^6GX$+aooK^4min$7$SCLM_qeR(+!<@~BPJS`o zt?dd~gnNNovC}fAaKb;ZyAh)16Pl%9z75@PFTY&k9kQ2H;39ahXAuAs!|w@{dg%>( zNIC3zKppjZ2pG!ss8u~y4aST%4OARLv7Q&yvMp9)BOGl(M9KvspF%pdm#I)fW6U9<+!`a0C(=lu z)azp%5xF0~Jdtn1MnpnaL(NUcH38VV;T%5DpHKtK(5dx#%WU?-)#(sEzX8qpkbxd#p;?t`KwFWPaTY4Us2+QSfi%L>r(8sY?jPFbE zPZv0dYii382rr6^s(l(Wy;?spetO{t?Ro?QHyZM7fZ8doiESOdYSa1PQusf``#(Yc zN$@}FRfTRuJzXB(xb#GATl7}>!bZuWN$AG4x8R~@EJ|=>4op~8I|0)jWE`q-9%1(; z;E6~aC(<|rW04>ZnlyT)BRPKAv=dU;gYaDKek8M!1Zh*Iq8RWgf1Sy*UkY_ zzVw6IG~}FcM!xj@S{*v61t`0-TKdna5ZUnu5* zQD>q(0+or73A<25I`s{LEq-t?+*rw6GkYozJ~*b`EN)Cra9J>W_FA*JrrW2JZthzX;n{G49)(eT|H|I%kM z&qTqNe9&QcqhdLRf@Ug~z~!Q1A#ZP@Vm7(|1{He}nzK?%RFxPlzRjRaCPOIvR1N1R ztfET9fRWM;UnQKwyD{YZAfd-048~XV{tG#X&=_$B9_VvrfydykyWtCDnb(J~ z;|7zjB5OCQNY49+>GBw|;A}jL@AR6+@;?pXop7M!%3$@`Dh%ctr`ID4kB{r>J#u7T za&>Ujad@V&Cn(g|(Ib~@+^?O043PxM#Tr;~&;KC0vA`!dy)3{7LwP9F3K_y1Q%X|I zIhLMWWq(lNObbvapSJodaGKT=A86H9Z%ln7>#w9aD-ZIoUDQ2^1c}d}kkfN_`b2#0 z4iMp`KV*UP|MQbFQc*Rn_xPjV7ze0B9iHW)gYkGL!=QGGBV-^QM6x>A3qgQ^t6P(Y z8n4Dd@c@JbCsZ`3C2s`o)FQ2$?D^!#gLwM;C(4)VZyq1FRqdPJ==dFKbK!=FB$vuV+iT@(Xjb2<^>qb zSx?NT;mD2&1?!GsAfJ_WHA{rvfC}81O*k}acX-wwXQf52?#Y6Jfhau6xm|GAZGwfL z4@-7=SrB>AvArZJC8~oOf@`yRhcD96!dic0DUzkfJyBkkmb^G6 z98o#v1<9gvKk4S6he1K=ns1y6C{6f-#viIfBhHW}`1$BahO#_QEARK$G)veoXP-dPs%A>8OE zLGuSN=FZy9Gq)ntk*SF~AbDF6tS%dkiwLV>WgSXW7JvsCgTtX1Xb*J`56~o6TK({Z zuVc^ z;YCL)^%EgaO<~-Crs3PTIK>GJxAcNtyzq>pHD(m+(I5cN0I*V1E4sdqLRx7M9hY1j zS0{u_LPREQj;l+4X>>rR>O}2fxg$TggBaoCQAaMk)KqKxSL1QF| zpoEZKEmQKr&UxK@M5I|;S)f0B>$2e#`mu$?-%sZ|Rs3`w%2T`yEc5b0sDmXDKRk-k zus05T@bu$r;c{9jn*UV=qB}3}pD+&Cslz)@oa(g)vk|WLFj7R#mZdi+c30En%+4lf z>A3lRIVNms=kv7)hFd$&6W)1(O``8&4nvdZL9R({Sq<}Lftn|_(33B#B@fK2BPk2A zNa;KCASK{jRK@b59$mVKvLQkkQn7n2<;uPl7cC(=FN0cF3@~ywW-%EU$mM{U)I}RZ zojQw}E^3alpqRQ|r_i2dadw(yh6xw8uj-NTK!gz>+=mUBTJKV0NC-F?7;c z83-)K&QFnQb3SUPXnvB;R#4;UTrx9M>}c;)OUvfh{E~mYh}Fx_taZEuhM3FZ`OOu#gpWJ> zp15?8-~HkqpuC+TOxwr=mQk>>5E|n_9@cZ7MBTCa!?+Pd<3^}3=M73YcGPRJn*SO| zs5t619d;(EUs5?wLkDF3w>m|-YW{Zyv)$yZ$I|2c9~2II9`1(p#|fea|2oC|Z%t-H znqq##FoW5F#WYdEF~$7v%yvV*wJHpPzzrS^6uRnntg z9&n-wgIUg#9M6-yUvw zKW4v+s%nhzX7)(-+nfC^WWUSVZxsvk82kMS)zBDmll>+!%y9NQi2cU0Uy><}5p9`W z%zl4lm|FJx3Hv?Ce&1!k^xfPT@e+Pdp2U>!cg7`G(wz!SgN|d(yq4qvt8RW|p!r9t zGZgFX&``UL7a0^ka$=41w7nhl2z}CZ8RDPLYe==cO4I#xn(p9mXK)afs)I1C1n~J$ zCGwQm{h{O}@+_%opfgMf$mZCjx|i$S_7F~;&^S9s1cAcz?*L z(1}%pz%|YJHP+zktK=)G+IeGXI&q!!(Ym`(@uZJ39$nkv$HvB`=}Ej_O_LvZ{RX6t z6H*0Z6PRDBDGPiarwBC8)I#StEYYNA*QVq6-AcriVJx7}Jc^NUYYf;Bx{D7vMG_|4_m0BH>K|zfXXN1o*xH=L)b!fPMnK-wEzu!R;-idtSh=6rd}g zyZ5*om}V2l)d=vU0QU*-H32>=K(P?tEVw5NaHIf}1ZWK7>$ivCZZE*O0`w4I1KpK| zzmEi1A;2vHTqVE-0yGP7vH(>Aj1^#K0eT4Vl0Zk50Cx-UB>^rM;4A@V2+&nu8DDb6 zMB&PM9=h=VE-W9!-n8Q~Qh4Y}C*PElGs{#MFP)*aNzE3!RA(tDH02xguvo1Iojt#Z z1x>^B%xc!=OAS`5#VU=Fn#|L+`6j)zP;1o|7~pAx)n-FPyG80s6(3VVFum5UmD=o9 zgSLRBH_klOY?)z}ru7-cC+Q+cfJ%^IHL&!IAV+F2>ydPh!Dz7>r1m_6G~beI(h)so zeT>Bz!zay3p$9cOyFq_{x?Kd>4AUG2v(6y37^%z!TC?6JwPDiQlKydKRDvbfY?_7a z`LY|WmV%}d4wOc)jK-O@IUo~d*XHM2bXvPXn&U7U4OCSYhrQ52>7rt^)?5P-R@8eS z)if26(K%#dysO9-D=@Q71Mfv~REI1uehRcRv+@n*TzejmDe67jJWvl(g)|Xa)#O5o z&529%(9$^ugIQ|Kci8fTdKzOWG=OL{JLsokFwe+duKaXbGjWH_U^SuHXBnhDBWyjT zmYl~>)fC2+alT=?AzxbHu-TCZ{@Z6zPH|FHuXF&y-KU;VT~nLlQ(7!*vfwW(E7xGR z*+E(sRz%>=nH3-VyPARG3(`kR3T&Xw2czkWr1;hGC3LGA&R{We4zmNin$=XLW`jX* z%QBhKP?SwmJ}oLyz>~lD2fkkh36OB^f7EyJiOtc(FcOA(Q9h8VKvoAp@2>~PWuobS zeMH3F4is~By#ly>bHWjd|BLkJ`>9NTasg%tFk66y0$d`%wF2BCz}*6@`WGQl@phL= zu{n8x?}Z-9z)RD`?WRsW{J@*(i#vK{40~|**FHTY4adSh`eeQ{jj#0d}JtV7B`MF64o_cz`!#RFTRlg38&5Js3 zekE|7u1(Oy++cZ^qK%JUnltP17Yk1rr`T(DbzeK-)vM1fFWc~s0V}hg98}TM>AZY> z#h5!UFZklRe(}STqTc;x=#6*!Wp90Z{+ztG7RL11o*=uq^+x;cn;!MgU%#>-{#?(( z@2h_sUw%1l#Iy^VPW_JF@&4&xm~`j+Po_AIM-~tK?#1Wt{5W*)?mOSUQq*|s$A_*c z>l?p#_SC-GnCdxS%_v-)SWz%c)?tJ=Wyko#177uB(6e(VW%t7=T&z`E+53a%m$#i+ zJgWVMR{}b<-+QWSyZWV~O+SwCnp5rLbNtk?fL54*ai`k&-q07P_)MBI@${T76O7rH#_DA2($B?AObhhypn9kMdHK^vUVcq_ zQNQKqUwghhvgZ1R5#<}+ySqJmZ-le^u2oN6eX~#0_N8n4Qs{ zwO`LU5O?CC4;Fvac%o$S?hg~!6`lTi|G-NV*WWpRvnIgw$giggiZ3qD?tf&IKK?16 zS&N*<=1$(e)K*_UV#fGD@u(|7hess!TRe0{)UY8-ALk~g7%LyXCSNda?4!!jFC=$~ z=+)y=w+8OT=wV%^L=H*s(C>$g^YPKs*9~4bbz*Xlk3u~EapGJn_191PH8zZI{mc3` zLFxOegV(HE-J$#9FOdC7q?8>xvJ|>$5S2K$1mCL|NSz1O!@qSvT2K+ zS-JGl*s>9i{Pe0%rhM12jMVGPM}Bu_)bOaw0mGiFIHl}1XTjr7Wh>{68p>I3PpX{$ ztN-G>;q8azua=3m;W38|btBfbnKFK2$P z%If~t_l`*z{Ct~-mK0YHEUSJxeBi0^($DKdVlsa`*Q=<<*2C{7=T$z?CF#MC~Y&7OYqV&#bqpHKfN`^(oGy59)>`s&Rt`(JL@wqAeBwz%idht^&H z)%VxkrSH}hmE|58SX_Pa&cY9!`<~5tYR(IL%O6@Du)Xo=H-gGv_YR!)>Ss~$ujKXn z{-pxr&V8Re?%3`5Xup5%l>hX`RBVb=!_0#mAcfM6Scj0o#K6=6*AIR_0bYRn9PFoH zKZ0;saMKZlFM#_FxPQX^5#VLGC&5lCiHBe>fO!Ze4Su9kOByTZDIb`fFzsO)V04Ic z24Pmfz6D`w02AOg1AiKJdM0Qq+y=mn@YlhRG7QCw1Dpc*I^Z3I?F4fbWCJS~Sm`(8i81NFp{}XU4AXLG*Ct#;? z&4QuwwuPJCQ=kRRw_*PocsdK{2|KCn(xxsc%03PIV=$k<&kA@8a18KznE5cYV0Z~} zUxG=1{X9%M@T7wC4Z?PXdjtF?!%dHvhX9iD$x8SwfT22}$7fpu&V`$ve}4h+RfG}4 zJ_Gh`fL{QvK$u{_9QgGDZX;k0+|R=PGW@o{J`RTRFv9&g{HYBu0{0H=tpKSWI>79J zp?qtA{}6Z;pa%5RdqT!e;}{1$+efeK1D2sm~LAvw^m|d{b zF`pX5>jm>A+*^QuANFz>;-jyCO9YPEy&h%(%r3a8KT^3KMwkfLFTs2czec!M0LH>S z5_ak%)Ia9Ky%%OJ>>mP_0#1V;<#ht#<^W!U`wiGrVJBV$kbI%ABsYi` zzk}%k|J#6H1HT&PMVO^9uLHLa=1us&07$n{=fGTrSpt8GL;Z|+kJ{`EAkGDIa@b8U z)K)*jJs0@Ruz!y{XwM#&l!N{;3hd$0z2uWq`?sX zXbBJa4e;Lr4uts_X-@~FzPTP|8NyKiB>6^t{2XvKls4d}a8vv^7~($5dV@Do7dtH*#h15&z#x5M5a@C@LaFeFE4d|L!N zy#Eg&ug~uXlle8TQ-2uZ6uF_DUGy0qW1bz@LCS9_BgVsQoFQ zPvJ-L55xT%!Wdwv-;V))A`G?F7Qnd(BNhH~9J;9neD_(bc9S_*8XFtyhuF>jdPAW- zPa4rr&psEl`{8HjSWSYa_c3UaV|5TTFt%cMf!zZOdhxd9Pwx+cYDHam6e)Q#!`Zn96S$tcb z#gVVaDu~VEB8D{rk&a~rTDs9r_W78bNRodfMcOD?%WrZy=SBFuIN8lgyvs$t7gd8XVvgVk>uuqJyE z8pdcx#TbxnW}enO)dtION4^R9j%76#Esc{&u>xRVO%X4X^^f)A*@N@z-MhC`A+;46 zbYM{d4K}-tuLLbyhq9Ql1cPd()eKWC zXrq{ZXnpEcpp90U3Je7nYmpS|a2C|36xExWSHm3HAs2RBe$QB5iO?J`pf|H8qjNKDF=MF;>Jv$j-@PZF7oWn zb3N7)*%Bu8cC2V&l?tq7wdfr>k^?AQAJnU>y1<)y6D{L`m;9u>=wSIY(P%OAd|#j~ zLagcF0?KbH2;>{dRb=oOil!CNF|2lkzD50!k4tM((sV-s`6l&4hLJO7%!oxwJR%mk z_Cja{dIai)dH~fhH4N1QIz9NrXf+t5k;5`H`d+a}p(!;frD1cCRp3Bx1{cv{s>Nz? zl=>#e(cL*vvic_pNWC zva!$zHm23N=6YxS+D*nGb0+2ZOw%BSNvcdYpbi=7`6dVmFms+kYjt%zJF144ABdfg zQ47^WtIRBoXsJnWAZZXSweiiQvlOBakpvQ0jQX9xb5wS#1%0hR8WY2~iMlo~13`=l zYouTtN7JG&R>M(4rd$$2CMrA|L}+|?9D|Z9i65K*X%0`{3CKW7jGhBk2)$G}Mrj*} zj)V5lOH*hZV^N679JDCwLSb$dD~s(HE$tUG76Wfgyev+JIUUlo!sNh=8i61DjZGar zE_I|bH7j+@m{FJ*Whlld(p?Vtr>DBRFz;7nD%`x?+*#?0VQEU1D1OpLxrf3x;KdZILc8Yho%i{jx%`hV3rgWUrGZo4QDh7U}LP- zh%r!_o;g(7LmC$oj|$SGLC7mAUTP~UU|kQL#5JA^a|3BEIJgj@qNS6NWNa*~k4B?Q z(b&(&i;PH&jWb3>^b%Tz&!2WI5Cm0EOWI&RN+Q=<$d7Xv8l*%l(%@VT%E!woLWdYA zEx_nW3`4OfApUHIe5{CDup7c7Q3C8$u!VXTiiIOQA>7mDCqqPz&Z=u_^XL|A;)Z54 zrwC~fUFen=irks1DKxPg%a`#TDrq2Oz0nv|U^hxRt3Aq^Pm{~0zenVl3UclSQ$o(& zwD6>W_ai ztmS@~E8T|g`1SqU0(9Y<;D3ppru6Tzj2WvM+v}5t&!7431Cc*ie0zB5hXIpx5~ zSu{nR+;_5Va)vU;VanG}))wgdB~E5rC58GNmQrW@lA%AUe{S5c3@!-YOBeB7X*bNY zhZmR$U0jcK3P2YwTqfgI0XM%1HH=vzjO|*Ry-k0K`z9=~^RwmOKb78@UFO-D1 zSmhX~4l5O~ay~6_6A2g80++_Zg|@`8aMBjI3>Gf3C60xYwZLVva7it3ESwy;icX-< zDr^CP=jdCXcZbiKHA|mE#aP)!#FxWr*M+AkSbA$);3l&4*1O{}`EXlW;P`Omz?GvD z#LndN&Bn*18u`Q;c=r~#*OQyC+jv+xbypD=+KfveTsClSZ9q#c9PJ@Tw`z*pk8t#X z&+-$BiG5(s#~WdCgpJ1x5j!dtTPOs`M!JX=YqeQ*;j%bNq5-&2-zFTRiSU2+ClZS| z@ep)>7n~5lO}N#X8)*;VQqKi)0b_h>yeq`no*5o85f)Q@&WH=Ui9I;6z73b%4(m%W zmrz&T$S*O7xsL*Ojc~}A{N3H|aYQ)k z2a|*aIfly&VeaVm7zbUr#9)rxN|=WUhdl3fQyNWi;P0NUNaD>&^sP8aB4E6Kp(x0k z3$pugLBIvY2h?=)^5DGSN7up6gsBknaCeJ*#GKCJpBsqyeGxAv(Vz1h;#~u3vpq7gvHNl%dce$9Tu6MIruvYA=&>*-1^V6HEotG~m(`;lbsL7YC71v#0(YYk z=pLNNMY9XC_VGpg_;8XjXrK0CuKk#{g>ABfWGo*f(XE3I*TIgpSG|}E%=AQid2rR? zSnq<#XZc|L$j#khxIZ`i+-$7#S~>p)-p89Fl-H+i*VU3lyexe~i%-4q4pmc2B26 zFMsZV#GS}%8yD2jx+b97ufnIWRkk;HfXXB%c4cM$=Y7k(5^Tr%=mFFf(Hi2-h1~Mv zTI<_#;>tz&xy|kFx+h5YY9(%DNoFi+XM4oaeJQbd)<^yQyi4b zJ?$p`AU+@C-5{><$nMro%(a8O^2$V?NJo9ZoNv5Wjb|Z^2^d?@SNuSa7wB2} z81zl1qK>dIPW{&1E&3zcUGlKCH`f~Uw~qH~z{o7{44-Z>W`>~_%sE)P#5155`L)DD zzPW`Hb@Jmn*@L-G`gUBW#I{_gGr)^+Az!(*bF;0STehBA}HJ zdvP5zqqvTVy|Hf>#~Lu8F<4t_au6-F&zj zl#R_nW=gn<63DKF*e@ZPXs(hM#N3iakbjI$%oE(gh+27at#XJHkVcT03%cbEKJep$ zHb5-E1Y^Uy8;xt%__+b$`oc&Fk9=FY(Vq~%MO=h&cXx>PN13~!%uHWi~yJz1TJ zkhaJNbJrn&m;<)S0d&nRvEkuMZZ<~=9vQ!zPeNxb5Pcvp-aA9&>j9a7Fs}Nz z7Ycpcm+)cWYauVm=h&Bqxr4k2iabOdo4dKW2|d?S>l;TrI*$-EjH9RS?cCk7a~I+$6VfJAgZnaP*Dn z`kP1_#=!m2-~aUM`MUa_em!3g|6kXy?Y#J-fdRJyH+I)#NmQ@zE zF_?;Z7E_&u{#iy5(#sm7osrJGxCdP+je(hbdxrWBN@aJvE0c7UtB#*n%YHTP_q?g3E(MSv5Dx@jMx6-Jwd@>0L!4oqS%Kv;Np^1o8 zE=CATe8Y$SR7f2}QA2ST1h>#Q(B0uvAIo+_`8XF{akMiSQJpDAc7OooXY~l39HNuB z4mCnsMFQh-g+g`h$}D@*bK0ZSB@DsGBYhbH7-%cr-{)nORKZmvrLwpEThA$<2?D) zOqML{H()O|Yr3%zo3VByH;yyRG$EDg9JWnaADF`#EzmN+K9x~W?YDDAUB1PJx}V7z zq2RCMmU2e6zl<*pjv5LYXVB4SUR)k$vgu8^NVJ6f(APTP`~$06t{;c8nC#d#D&YDz z+p`SZU@psM$jid!F+8)VYC<^>Yc`s4v2B@U)`GYhSvZd|oixK(D*Vv~mzTjj-DI_x z3$XPI$!|NDqP*)F;@O zDyxgjm4$Apn~Eq@gYALkZMhs35ZgO;1J{G2G8xPk=zgJu_5$oAVg3)Sp4GCp&=gZ( zi@|n!406E17`@37lOGoo7sEH^J^of+T>VK1Y_S%)dvo`s04BmF*q?=fyvS?ee?mOQ zp0Csv+R+k93ls=u+PO1?(^xE19fd=M+DkP<9RNDUJiOdX>6pb$K0 zPXy{X*rH~NP)tW8mLxUwGn>roas^E zJYJp!TkAGprE#FkY z>$zYcptD^}9m(jhqE1mY{7E~$#r#n5f>uv&YNuGYGhV%$bT}YENslBudni=a4B6Sp z3Fa2svkwkCk-g3!t?t&jV4_& zSBw_k?AWK!I=!O({<@;5BY}DahTH;3UGM|S*-S3qWn8?-&TUc=F-G9zCvk(T*{oV< zbb=4eey+({EEJo}MSKEAh|^}4Zc2taPIFSGTr*Rcfh3cXP7f)Q_)!qI!+l^h3{N>2 zfBAmvk_eg~`ThOY0wP<0F1eANB%GHO!UYNbSjuI8u5fFGaM|~yS9ni2`5)*R2*G{_ zS{!kVbagm(x-w-zlf>aC!cwL=$fQZLc)-BaBx9(R7;Bl#I;(*uG~m1Qkh9Dk!AhbEFfA;DbPlX-^C^Kl$Usg5ZlLxzs||MfQ@qCPru~%$Kwz zn%Lhx=T#$lIn-3XW(I3n!e;y*mazqSZsAFB&qZJ}`j1F-wSY@{Qgt>p1EvYA|Fb$q zcOV{gMQEZIHRY23XsRy-$F(x88Q_|$R5NcLBfBjqu1^>SbYJ~XM$7kvL2oa0>@#%l%@(*sA{z{==x$}DmXy3Bj|E>0L z+*{%Isfqug{ts#Z6EJlf=p|t9F9UEZ%x>7r0kfbBRsp-a4w$=s80m@q2y+`@2o4Q~ zo={s6gA-xz3_I;XE+>61*xmKG+;zO%^}k3j%mI^+@B}MiieV>67oe|%onS4@df35- zTq^Xu%3*ic@gm)?4KUTf6Z{V58tm>mSnfJpq}w&R6IRKfA4PByOd{+A3t?2S6MPyb z6LyS;+;NzhuuD60+zpsw*dd>}@Gdyd2fGaLhX*-s4eVT3tbTR_ofIB$EDY&l5u688 z13SSBFt=dGc+dG^Pf-k=BzGMw(#5(26AC=RuGlw=h8=QeEo%YhYhNE3!mjT*g zGGH$TJPeZ!ySsi>4RG5d5Ds{PZ^EpBy#mnK3ug*pF9ckYfH%8fch`p^y{RSrumuJ@ z!DTQ(AqWFV`c0%0MbM@9MDWT$&;vZdI+&TT6Z{Tl3GDJ@tTjQMeJ$+8fc>Cfw2$zB zE}bQJog;UBB+^sTz;uSr5W#F18SDfrVC1k9tcS^fy#a8z2H{|L*9&sjF(TcfHX~6s zgdunlW(({Dzk#WMonTMs4OPQVupdkV?C$zQq*t^S#s_*f1eaxiPS{rhz77)&ySsi6 z=@XTY#yTkB0cVdv`C%ux7$zU~2Ef-d;YVQrJC8>nfn5r?9%e1<1eak&Y7^`$0XIy> zIv<4x{0gQT_6EQY^*H+uySu&)=>_#PLgxT@f{8Fe(6=F|fC-14U>Qsj>;#{O(ZEh{ z3rsfb<$wdA_*)3O9MA$Y8}>rLSMc$-kir1E^mzydJ%;iFPp~^o73>7{Fy~<>SPatu zJHh2Jba>TWKZo>oj$-vb7j?KfcyX)GJZcbbwXa=5O8O##c z3GRkj54(ICWRVSY!rlOAn+`f*UkUgoR{LrQ54iSm&<0(T^?(U;(0^ff*MlLQnWghk zhrkou4l@~cf;(UeVXr7gTg(TouonW7&dM^v1Bw^&`Yi-qdMyNN7NdR;hM@NbgoEBl z5a0taq{l+grMp6K2TT(11W&+Zz)rB&MzkaB1jlZItbpBJ7lm|E#HY~Szy|?Vok5?4 zy&AB?S=J73>7-E<%RG{uSV?OK3;fX9K=|8R1|*2iWFQ z(9=c41q055=?r@@VDx9;Mc4_Bf(eJ+4!8m)8uoL5wJ_&lpIHN46PSG1cLLVJl*3N& zSC}oZb60R5156d{1XEzDVV480hgkzV!D^V@uoJunQvo}{n5*bJu*(2_J_irLPH+Q^ z3ieHaRWNqg34RZ=5cXSu%4?`+*k=Q-hDoIGfH%JYpTOP#*!w!#3-%k1g&FcuFnZP@h0xzr-T4UCm;+{2=uKErC7j-4(XeQxq} z_fBQ|r6{(B-6hAbd4_3ixVg`Qm6$N8!=%vBj!H@x&e+=wVSSpC8Pw;GGa1yU1xbVY zG?k4-A4DrP*rdoYv9sZSS$QpjQ#A@i48obfeB4Y(8JG5QqBNvOke!~ zq+ra^$0Qlz^)cG`#6($qd|%^$1nr-vkf@C}#wQsPV)`cJ42VfgOpJ@k(GJkX==%-O zCu$S5{R|07f1W~|v0wjwy8iuQl4ORsn8f&m0Wkym=H$dACFo_wetMZ++y5_8NHWNb z{k3uNF*(MZ1eC&%6oWGLjY&*0>if#HaecJ|+)6R1&%L!fs85TA;G5Dd(7(*Lw7qPZ zVZ#nGZEiGk=pb~n+zf1FE9j)XE7?4|y>MWkK0^PBZR%fiQoGOC^t3)`=6-!9v`jPX zA+VldP@fhly4a`B{Rp^ExpDCZ9lJN{Ts>@%3u9LZ5}=v=TrwdI5pYWdj(S50Bqa=4 zCB%nG&A7lbB`n<~8)5}=W0g#^BZfBUt(JUS7)gZt|24^}emI_te_^goPm5Jy)#c&d z03B_gr-b!}k0S^D1KLfQ=*lA9ok$zxT|vy>U00{ zHRD-Lpr)Ej4`I5=6CZxucy270h2Kk{ z=ZamB#t-^~nCED0aQ_oSj^oQ1$8fB;8_dk*A~h3kTQMMIGj1Njw4B|IgBeiMzeJqU zmH|JW>x8&Ugek!Iq(%55P@{#*z_Q4I+YZea3w)%=!-Dke(4f&GFX#s#Cky9*pB@-H za;0$eC+7l?u8R&8!rE{j713ANB3#S#i4IB^^F)lS&GE+rXGIFl=_hcp(6fo<;t;kU z=Z~;dRyzx41}*t+rD&Oliqqg9{mDd&5l@3Sxhw|dUWoD%mANRh9btZtlj0sWDeknP zx{Tvum@N)8NV%5z{Jpx0MZ7=HLxvDTK;tOTWx_>98KSo^mOe=irf^MDF*MBrxPOBY4W+>dV%)^jr9OFV7^-7WbQ zUmeu7e)s1Ioh;(C|NZ^123QR=kPaTc{a(8Ll6<3jw0={?rsB;@ zHm}{he)E>iHJfWU-`>n^@!1l(MY<(&%k3@lt?I37x0Y{}ZOhxXW!vs;k*~^Mt$6kJ ztK4fzuc=={LjU{wzg7clJ0dGwC?{LcahbPo@5SoHKLv_fd8}X1aSl*L9wJekL>B1n zo4r^qGI)wTL|&Y1vbSH9Hx7L)=$M@Bw!W5lyF&UxQWrZfdgMP8t1zBA5W=IiY_PVC*zW1=E1MAnWRKJ5Y~(07s5 zELCa?4ROJ;wuElg&R^xQ=4hdXnxAiAr32Qloj2~PnqfD@b&++VVE*lbd4yC+_dP-7 zmwkG~b(M7?Z_jq^1#eO;#0Mj8cZW8JQXzZrfxx)&nirUGUf_Y=J1uy@JqSo(n`0G_c6eV}VG-z46*xX_+IQ?%dYzd_>Vd!Y1^#T-x2^kkU5w zz;^tetwKPwVH6HdH{mizH^Iu$Tdcx4FWYK}_;6qi%l7l~~nBUMf(EjPF zuvd@&bjLos=k=e4cbd2P;0rN3mfm>f`nI0!=V*UgJFU&Ws~H~K}pYL)-Tc?*jleQc&a^;GuIxtW#iW*;v4_E_aK4{)bw9(y*N1Q*&oc4PoA_td+zd_Zw6odN>dzrSr+f@14j4qY9$hhd&t6NVJwsR# z7&V9zWc-4AjS`b$Sf6z3Kc4gFbDqBIRup|R?-ALyZ}R^6%jdpb_KsTM{b>KJSH`^9 zzU)TlRlX|o4+ZrP&z9BxY%1$+^KWYzwspsVHn)4fv97%1!R7UjJjHE)KOp_h>bO^Y zCik9o_v)-J6Es^4p>;*_oQS8)N00V@tfZUIa>b3y7bXnuG9&GY-tE1oypr@-Slf-G zJCw}bC0iigh#v10dVK2-ZY5Ry_FiAJ`21sQJ9W%(XK3p2|Ls1+_hDIFQj0zuKfu+8 zbN;11jAaA9C8GYS508cF9du&Qj}!m0AHSsYAE4U3xBF&Q+TPZU8yd8JV^^22y|_JE zGW@W)aq*zB<0K*Piw8&jy7j52F1)KP@}G1}vv~R!HOdiTPu@HbrL27MeBRFG@=-Sz zCGBZ*xchhdhZ{oTEh8sv*s)}j$H%=NJT>CVW!;All*UggpYqJaEzd`0w0_{`Qx~<# zsiV7m(0084s$q9u-SML_W!P(l)-P9mnRO~?&!H0inhyITim%k3346Kv9gkTXW~`oM zIC%2``##0u-j{qd%T_J>N6ZT|R9*8v+G3w^vGt^Q=Xhtr{tLRQwC4vNK71p=|ID`= zJKb`=d*Q7K&g4(Un`ec+8NMU-XyM^^N0#*Px#Pco>!@dZt^`F|x1Hkq@dD8V)YMp6 z05L!7b{_bUX-}>Q>KcF2Wm*->Y_9Hv4xTGB$a=fn=->|uebjD?VSRjtEfzOrF$v8& zdjF=d9*d)z!)i_1*n5KZvD3YP+L+wBm>o}Dkh|9R1gZh79H?26x6@ZPQH z9=e2UY5Ib|>j!gN|Kzo)Z~pAk_DAa8{OrxT%hDs$B&VLVU)nYK)BXLsDra7w`Oj04 zV(G?h-;Ox6q}M-M7oTo(_wwZF=225xrw&z^1IuqDJ^RMMPkg5Z-R)eov-t7XOt*f0 zZdXA2sBh;@@=aMc>1zAq?dIc4GAVFNuNBc(-n=z&tLXKR=c4Bci9&Je3IeJ4;LR9SIdoD?R+fA!~tiz-aYG0O3h%QYVyyt^?$KHD=EKfJ~+5IN_ zYlpiGnzyRv;J(i1#SYm5uWJxfCj~JzGfcT*>}QdFU4OYUxjIs_*j-HdLrl$a6BB8g zxc0JO)H$Xafsn>lJC=c@8oNF=E=tym@c!+>#?s=hL8_udIof=;nFj`Zhz86s;(Ez? zQee+^GzH)jX)!^O(xZTMA8HYsiS)%>q#veXGFe~DM8I*)PMPEHktgKn|JOOjb(eMH ziR;)*Ts{_#qzO{~Xc|qB{%V49K0l&guzqsUDeYR17rmYwy{}4cJU(GU{A$DcaeEKU z`t0@Jz8Du7pL<=`=fF3HipuLVzE0ot^8QaXK3B*8VA4p#_2oO?`{b7amWKR+@zK{L zx`xc{r+<9)>QvR~3+C(k{&%)adU0xYndOzbt+>t8!w{>7HF&%V?5 z+T2`I!PntM&n}%UYxrtltK3M*4>y94i4C)Q1Wvv7n|15d35Oa!Jz_k0_l@^% zZ&yeDiHjX3J-5t2U!er)6^vqbq&L#)-0r z@rt4_8G>vK6{0i2=pJ7tYYOGDI9v!tBGEliA4oyFtq;q`?k1*;vtBs$oNe)Aru931 zS++NHh0j+Xid%@Ok^bLw+$5j$@&l$PWXBWpl+}tI-|>?xDL=XL7LV&9SX4xf$O;plWgxBur~_m1BDrpIde*eSD~H~suuV(hJs&V2tNTv`Qj ze`n5l&H3Z}zVFZH^ZR|z$vM2UDqZjr*6WeLy{3+WpC~7u&z91YiF0=dngYKb#r1C1 zE<1$4oBa9WR5sf%gdC5}>%5+^2D+`%^hI1&ploL_%NZ-*-Ulej2-rZHNtT`mn?34| z*KfmIm5%Z-?ESo#3L%_s(nyNUlijx>tgSMN3yVp?S#i{N_1TV{RlEb#f(BE}-B%i_ zc+aUTp+jw(;IB0Wdm}HrYmKa8RdtmR^%z!J>aY(AtugVGJM_yPZ^Lc7M0Y2%$%1dYh?)gdUK39K&Lt5Y6B6*3NWprV#nO zY?o$zRcT`6^)l}Fb21m-F6oNS(>i#}fZ=10>TGz`I@X=-WSSFidyMKMPlQ`0&poVc zU1W^qukH>a>#LH_#N4Zjf``u&xjIFGY{vHaS7v$pY7nUkR!eyvF{f)5u+5E_{d+ox zpS>?hC2$2rXYyMrV>fAOgph>`G=~m=jKV^-9`Uix`;>0eJIj6ij<=4QXMgGB{J%Uh ze^()8s#H}#8FCc>wA#h2@1Vw(ArQHxzC%uv>Ej`CuwhV^P+MhS0LTaMFb|+H?E2qB zZ5}6sp<^E__%@7))ram^iNhaX<}6{vY#sT-lzuAn|L!D!4FB4P!kIo44*5`Mj?r%9 zwpXAs4IKCdV-ECQj_c;2_|Bdh7!__d`dL{(?98O=IYV}h`e#Qx8}5_b;SB`y_`4$T zDT^O3_~=*%w>WvBCa6)WNuti98P!D^_N5Q!;&*w>soB4X3MjF7&vwMW_C`gxW7oKD zjqn@tbIsY6MC{Bhx`CglY46S4@bUy=dAn0tq{4v0#u1w_y&{dnGcyVGg(I+&Ev)TY ztl?Pe*9IcR!UtC=`Iy+Ln2=D&w?6<>m4C=3e@dXX77Y=E^@Rl5SsrK~#GrN=+zi}^I^Q@7nI+iqaxg5DO zH%x$xco(BW7)%#(nbv6GKnKwH+s;nxAM-R0gtfqZ<`ZxJ^uxaS^U_bG#CAxQvtq#W zT6F4|_~Aa2d*XbPjF*JIE@df`wsUD$<{KU@iVYt-S69+89qo_CnFGzRPne@Zn9Kh& z<{)MMA2G+wdqnw>OtsGpWd3mR42o$Gz0`72b^SzqrQxY0x0*-Reap;KtM!-RqFf#nWBFbJ?9m2C5Z*xVty z1WWa7VOFi-WXgek_Bui&{TTm{vXn#0$sxA$-WKSishKV_BZ|L|^5=Pmu9t9>Pq3Jz zX&1TeJ#A-#jBV7;2-+U*D=6~wa372sMh!`dTQKW>M&w!3e}~PE)&t3`t`Hua;gH;l zP5hh6Kb+@VSlW`)7RBZQ!k?2;b_9s|tP`Q!7Qk&8ae!QqgZ`503IK{*Mi@{Gz!ix= zdx5sDYDs)tNrKia0i`d0g9N3J5<^bB?Qbml0zd)zE>hM&7CK~7tk~p7YGmKR9fEOH z#H|2@0!kzq65)y$EY^*a`yR*~udevV_ArpNycnEXcc5S!&Sfd7IMAtg)94KNs!=v~ z|Mpbx3C=;D=Z8p(%SAOf1vyT8^Wd^x{aaIktPIM8Rxt7O_iHTCeQ6#-Hs=%q9;={e zjdp6|hhis@~%R*N3t@lwi)2hCsAEt?ke%NrBtX<149{{G4Oj%v$Oi2K8j zwF7BHi{$0go|(2UI9V2{Z5wUWS0ep&(}r2sb=A#L(2;pyLPbn9);d-VU*f4VjU^3uqWI~#yw*%1=~O4-hxUOe%-#f)TA~Mo;o6Q zd!u6g#n>v;3(R<$)8|}rs$F!ZYr$K&s)hWIsMZwjbuZbBp233MfEH$X`-(|!G1@gCfwLaiS zDXiS|FfflJE#o6#2e@@p!y6YkaN6DFi-O4!_*(gKV$<2Cla&d^s1Z)1P3K?T4QGcb z`=i%zm&kAqNE@KPJV_{!3|ofaFwdN3C;#7>ADri_(2*U*s=$SSi?Fg3xd1|6ZVUl( zd>)`-&_w#Q8o|yAazi3a9fVXEvFse^Vp7*(!j&o%ui zcd4H7g&7`S7l*F&R{SExFXT!4+UUbFI{zwZ{>i)D+`LVC1>R?bW#!ZP;t!gkDiUbN z`np^cH9XSazJ@+?AT)gpHW_pCyF8fQo{IwA;)PS8c-Lfv8SD76lczBDh`8c=!{*-c zpSygob_c|;qy2jZwJTHfXFcX9&NWi6V6v#aiI&+IcJ@FbzNAACJRl=D=N}Dcb2w~! zcGdc(&s{3bEEUv=QoQ`MtYF5O+;aW9EH$KQew4P-wpAOo95c&b=)93xZ_xZiQ-}^n+-h0lRIcMg~ z%sFSy+#8xOelcZ1Q4|NaUQbcgfaDS}&%b%FD9W+xen)Dz&8cqHtoT#ilC$M1e!em< zODW0aOC<_Lo|>O7<0~}^zFfhN8Ii=#&C8GlI5^n)7@KCN#Vj4n>RoHPM-=U=jX~K} z-lxU@dl_M1O*}&ns2L8}7xl4#AyNb1U{;^nG=|=@W(Wg&8{zl0hO!@19wnD%lfFzN zON^zcj5(In%(qWWFwvSRZ@wMdkw>|M(%V4Ib_H}|@L~+xfU_yek|DK0su%=J=A?@h z#ir80Y7jDkKbMV^aEclS(Q$woq|G#n@~{O=q^Mx@Lk*;;Ri1$P6xA2trhuZ70sra} z1)+vf)W|`jDf9Acf&pq-p&GOSZg>!t$=ERt^NSCy0+bmNwS=P9I-&+`GQ31Dvr7c? z2{5oxepaXe0h7@>m%x}yL{T*X`36R2jENwVKFI*hE)i)@sZvToW9B3ch&^u7zu6^X z_+&YGU}T!eM_$;1O_wN1Ty~GY{}Ez>xYD5uW?1h= zfkCXjBrdPv&7O^^5^K5F`J~=$8dGyZtf%6&+y>C}ZddUHjzEb>i9vr^XW)HN-Fje&y%X;bnJOYCrODFMG~X z+g7uPeA!{YI$bC{vx%#-0^sebVQ6vMGXysBz?6UqSW(Lqy&xp6Nb#{2SEzlQ#1%7q z_)%lX6pOVFpx5hlTj6)a7RtgXwU1a^ zud_onI`)Xy9^FrTElzt{thI>OIy~<}QBnG{dTv7iwiTjeV<)t*j|2qWR5Y`gtWfLR zc#I{pBAWj|%UuNl;nnh*_gu{8L`0?|wN77O!7W6+&cYgM&3}q%2`h`_5{)$>I(H09 z*MOL;D@J^(=zL!YQ~;uA{&%`RFww$uqWPzFZ!tRaR@7yp3nq%wHfx__$;!`Zc;Rj>{uK3|m9VC<8N;c3TVM8+RS*k%&%vnS zC>q;iF+MaIbd#&z?f1?UrM*-E3UMK_a+odcMNE}$@gI79Th(gws#9E(RGFTo2}7g7 z5EGswVmndST8Kv*==uSALDy1EcZx)&t(8YDF~mE%~j zRl3R5#H)7`w(8zwDZEN*wROZ$3$Y%es7a}l>M&CnN3p8nN`jZwz+<^%NLkDMf`AGxAMAuv1l$LtW8CL`D2nuYjN1Z?EcY?) zDZX!a^7qh5CVy4Hq!s^I8 zA~x+KE$c|;0jgi!N#ij648t4<%f~RSp(w4bXU6#i-RnxB9?{+p+W$yKf^qs8$EjdO z#yv(r1vd=r$GBbaG>pvym|<+*M$Dux8Jj0)+GGT-3Rf12Dong?I2O&ITRg1ZqaxYI zsr_24c4$>nWK?n#+RM9DHlPHLKy z7%-92Si=p)pfY5~X|`xuj1Yn+gVj`UlOSh4oM9+qI9Ov>7KHgkxQWQ|^)-;=6S;6e zl{cYj<3X?0HXx3=KrkM(#5gUdMqI%;-gF$(k%8PuH;6c>VF5|J;}aJU!It%Ik37hj z4m?FC;>u*7M6vd}SYeIc?R!GUDh7$mGJL{N7w~ppQFXvdnB5R%h0a4GQmUdb{H-w*2a2>D`K7WZkCYK)`$fJ zpN<;fl?i-9c>^iO@Rl7>=U+iCFaG{!hLr3AVW>T2L9v> zifc%bQI_~F33xEh$Y{&}rLokzZA8aynZ-$%Oh*!J^uDF2fWKEd*r42a7n_*4lIsAx zt`(v^-LIGsahWwocgKLR(HCL@9Hked$5|MR@KD)LgT&|Su{g-noEds;l=jR%5tJyq zHK@;VRK^KwP%qZjYDtN#Bhgnk79FDrG}<^DXuLEkB8s;+#@aQZ(jLLJ#v|UMo*`I@ zEA5LDDme`a1M1aXqO@`L;sIxsc2U|WYl~X(fHO+VxUyQmrk~=pwaDH``;Fmfkn~gD zpzc|nFrK0^!&#cnVss(4s4WR2XETlCK08Fs%y6-X#$pGnE(nq`v6kaYa(|*P(eVHR zBAlgLYlT=Vwr=8zp@^%nrdiC}>2MF$pt&DJ_6NVZ9jvA&rt!UJkhRk7vV@~|)McTJ zv}Too%n7P#veGR;|o~bPhj0dS45pvNzh7bx?x(7g-?wQH! zZh)e@($*-EhaF?b$sswS+Q*O##c7|Bqyzh8qwW&YCS(BaWiMD7XJ&&JYfp)_$MkMX zabhE`Iu5Z2@q^htb4UuQMi7JDr8XWVi6EJ$WlSS#Cm7W|L@Q=dkAbEe4_(kYS9gM8 z#T1#wi3)}-7>HpH=I!BbfpB@l0TOO`F?I8}@1v|!A|=uN0eRyLxayh>1slxQ1E5WJ z=NprEjF)LkR2-QCQA&H6SH6Ro;xiU+?iWCGjaUqtV<+eldyLYo)e-d&zbvkFO2Yw z49*T0QP;|Njwv`hTmd}F-GnELSyR!3x_uZrrTYl;LF^H!aIMjrxgXuq>orAUDfbKz zY!a0Wuy-m6XN)_w+F;yK9-8F%K8JXFqg=(6BR#|xXMi#e6<=w899xl3+<>!c5A9I< z_yM&_TkYF$srUgkN;u#lzor|)b7Ewr#Oz$lru$Gc31$l;w*+J}Ht#|F&9Hv+FYC0> zS9lKdYd8C<#!5Wb?X(}W%s5vWc#0$IK%wSeR&!>b(>UT3Kx07wdI2z_2CK0>O#Qdr zAg;ZPz#(*720o{$Fqb~%>NvqN!8nula6pb+;kA%M`mpauvxuj>p722!hMuMxZ%-0_P zag+GiXmRCdKB5<3F1c3&aqVS8+GGVBGs4lHIMr((&ViKf2wKF{KH z6!mTcaZVCzKhl9sT)E;Bp=(bt8@Cs!K|2wqjkNM6Q_C>5ZKjCfl{!*Ewr|oVLHH!M zJ?}&sE3aqzA|72)PP!qAFvO_pRisxYKP{g}^!%Qj)r}G`u21z{oq*~Te=ut%~B z7~+iHZ3ZOBy!GE_*axgNv{)*}K2UFTm2PdW;$F6IHd=6;=1{ipDG*A{fw3D59a|sS zGm&1BJ#-pcZRY?Irm%i(Q^wX3b*_{7>BLcbjC16ZxK_9^mvdrhLa z%;6M{fqLKOL3&J~+F>hn7$~8vI zUFd`N1!eWDm_ z6gKcSK(iPvIiqrjUPLS2{-14BM1T!}z7XK;zvHS>9OHUGQ!+!xxGumD)ksYzRWhDl zs^Msibw*r!i!Zi2BSt%TD}&RNk7b0VCP>S@jYC;kz4bBfc_1WIRB+D%i+WtgS9d6@ z=O5$lM-h&KifUlQB*L(4+8ky_b~2orPo6ZKm5F_Zb2ovHEUMo3xjmUf4lG#j`TPk$Jw&JcF5M59aB? zJg?XhO_CY>6@xc3&s)s%0`nyAi1fbIcp^nR`TA|h_TccXSKIqI{Y}wm!~nindv|_< zh-?HC8)?rQV!aKCEe#B5L5V zB_U0>`LSNV7?Lz%7FuK^gbgKOSezQ(@>*>z6U(#?4j5jO6CABCL9Bpu0wON!#p0DO zX(ACY%37aDFK(Po3VPpPFx3AQ*N>5gVayn4fRl}Ij1h{A(8maEjqtEhZmSV4H^O2g zOgF;8Mi^v-9!AJ9!WJVmP3DIK4A=!D+--!W`X3?;*f=8$HNrhcXlsNojdIOKc+yDU zYJ^@!xY!8QMri71hEXoV2osI4zY+Qvp_37s{26+leiwn)5-!JUS;qG_EC9Hu&0JLQUd6Y4g-R)=sx z9foi<>Z*-(25CIWVE+x5wdl?BmnbmM#~IbkYpf!FUtgg*-+NNhIIiYJf7|?tF6cY1&*Ab*SF~K|_5mF(WD;dmxcF(R^r{ zDg~{yl~zb`d<~!03_R0|h+HseWUn>SrV|?Z{zkqj2FS@bJf9Fk!ul|u1OsSVnwbSV zL)jYifap;;qDDs%p6vECocp0yJ6asWSJT+S3@m#qDUx4Bx8uG={GV zv?><#Gk(_;!N&Q}$51A-WAGO~_IV?1`t<1;=@=SS9BLe!QZ4m~i!$iajyB$)i#aXX zz_+R$&A?X$S{nQ;pwRg7)c8#}KxQbDZ^Ma1H^Y1f0j0Kr=Fvuj_E>kqN5*8}!?zKv z3F6d3G6n+;J>e2D|52uIwIY=BL1xN^p;J3RD{iIbE6Ie=80k~&paJPB6{;Ae$oE^* zw_GZXqMAWwzS;WFm|>Jb^RsECF}f4_-(4&uj+Q}ex*Hfto_!EEnI{a7a(1((+|)Ld zTZR?o7Hmnm1v%eb+})7Z?Qo{3t}t|B+vJ)Ge1=)s*lwaT&ywP0SW`U6^MdU1P4b7q zdkgn!qddCtiAAA$8Nv_l{x zH;SFeV*0ge?U!ZEqO8#l%b7(vrvn<>W!bPO8&bCAP`1Gil&#V-pJmOVtd*R6i!?TE znje+}hjIwEp&WuN6InKF$|eYXnA&(98t2r8(7o~9%c$#E#P(abo1iO!EH;Z`Cz|PE zlxywNysU&SuGW+*=F&CUigLw#x&}Gr|D_JE>-2iricMLuI<(D$8y9Q5pK@bWQeTkJ_fmhtYq%D|_dMVQiDtAPL0e42-^^&Ykb~?1jrgzW zT1@gS(EjTBPyS|@ng6c*tq9B6mTRRZ7v;++bsLRI#|+dKR$@^?UWO(|mKv3jF(Q4k zOsd9Pk2Y$wQYKN$f)IDw6TxN2a7GU(i+Rj8rw0OO-1!^HMWpDz!4NC^bi}f(`?zTv@J425e09 zsL{id;}T*8!L*^xPzn-qwOXdkrTVqusWNI1m8z0ur)J7?P?<^;@L;l;OnH_@DN9vI zl*+tVtIBt1t)evXr>lx0Cx z^kb~a)F`BCd7gsurcz~vGO0!_GgTRcx7C)NG45m9dbg91O#Pu8B&SicEGKXQW1^EJ~Cq zGxLVrtq8$sWkY9msFr z)9d@^>*e;`ZKXt^;oP>vc&;P;kn7A}ob%cw+ha!m8 z-suhJ;@3o(qWO8w&j-I&MSSne5A0>@?{7=qW&dxx%ya5yq57WFg0 znJ&n^K`#b$L{5v%gK`3lcExKl;Nu|3Eei$&- zoucLePXkoEg?tEjKHzoSTY=vM9ErotZs5s)-{QUiyaq6*BSqB%CvXw&YrqczUc`MH zxR)o=Cftj|zz_HgH-1P#y(IKb&=)v?vAENKivja-7Xv4-9QQonH=QS2^@es0(bf#iG=hJFcb!krJCKntAvy}(c236OUHTfzUI>woJESWx6kh#yP^p@0$r zdH{|C1Tec;$QEHEZ=kb4$5+W>GiIPTN8(xa20DJcMOC+FX7~xc{x9g4KyQ{)R1dTI zuuQ}Wi#9@Y8ho4ERyJV~g9>wV_|s%c6;iZFZ$SX<&6g>pc^Ps=R;2gn4+o;xoM<#kxb=1XrO~_ghZv1<)-Hp@zH=n73r-}D*CIW*|J=T%0E{wRpzPkGS&Xl zyxjg0Rc^pEfj1wim^>4i`55!w&=j8^p;l^CYLW&0i>(R0897L*kQ^)J>LOzq6s2sc z2EE8K5|#34$l0=Fs@6*L>R2YP#<1gM(_}gP9P*6xmZ;(s)9{j6>CM;3qogDOjr7ix z~SqX#MxYZO2Zg(Wpd(BtJh#E=5au ziZ;Den*97cCB}|FEs4vB^nOk!9r<>za%76=17byH%y6OPpSKV!3Cau#lL`Gp zgz4e_!NI`-|8z;X)ITFMJR?{VED4nf!~S^-g3Qon&W`xiZL5L*WY!nfJug`8o zV7rAdETtLK-!CNN1#Naq4oZ0iDx8JXaJ4oIjewhFB}&xUQ3VpE%+zeQTAklNFwp2< z0j>TO0IdR(65;}}%%Oo}+qdaG5T+-K2yEA)$$SFeq`(`-ogvGYDKZceOdb|tqNt;c z5unZdOfex20%~I3e#l+tXu8t)u%5RCNhjT%il{9~A`h!Bjf)nrsZ!3G`_2Mfps3L+;Ukv_e{jTV)guPHDoV=em*0-BefvZY(k}8o?5u6_ zV?a})g|_yEQ~*-y01B@OsZh!eykx9uhED-qa?D22zK<9x9{s1nE5= z<0Z40g)yta^Jf~L`UK++VrEi6`7@XRI`HwW;lDmt0g(IWebC@|8#<1FZZeE90P{#z z>z_#qsBruXF=|I+mPjwdVRdo;f*cu@sRgp;36KrITnwe0F<&E$^Fu6+%(KbXNXcL| zsf>n()hNU)PD2e@y#Qu*Gsx5fw?bQqpy$DMG>}l6tr*S%W^+mSX~rJf^S^Et<~9)n z85TT^^lZ|w%^PsGVLT}rwZ!IC7)N{i#p#Q<+Mg~9yvrk&_n+(k(;2|G1(M?@t{=C) ze*KyCt2XS|P`v>Jk>U3M*;V;f#Z_mjE>-EOK>g44zibAWzbR(3DZ12ifu&9FIpR4_ z99UNDs#4FHAQiD$ECG*pu(U~=BWB4gIBXV|qEjqw`&i<`UTHrzi&Hh6j;G%;qwr`O z3l>$y*}yKQXu)f;9R7-gur;41HGDs7+0N~n@`GC<0vF}V?H#%eRgPOUMHsQ7s?@cL zF15Iidu){jo5f~3&05yrr?6*%K@ZKqoyn_^eNE_>}VTHi_sj*4(#z! z0ynw?DOh)~A4|?fN(Db!k}ngu(k_H-)xj=CqfD3JYei0uj2RuMwjC^!vn2&;nV>V> ziLlvqa5WJ4(K4l)e1Kt&9)hlPXHsp^!QEI*UXkO#n46EZmLDBOcX`V}5F`i+641;w z{w)XOszE|JNQi_id^|nLOxe*%rtWMzxF!|hz=({FADySfp~lc1O$Qjd>)BdOI^-vr zdQ6fjr^%5LqHDfCe@GBr%JMd!AS{?gDT{{%X4$e!SuASjXJ5u84}0Is#rBeK(Gu^m zz4NYB_c$D_nsVsdfW+}HTn|lK7|rsH-o5@-Y>RI1yLIZ5-WPW-r`S&te*1R!-WZ=L zr&41FoQ*jh?V@_CR4d=z=fvtRpD8=_NSNAnr{MaFkrH;&$J-vo_2m}EZVs$C{p;#q zUoE&bc2MNerPqc&eOGw9$o56EW?s~X`Xd%2S8uzRvu>GuuB=yC`Jpt|!}SdVT(8uW zGm*pd9rG%^TAt*>xca^@%b-~ zTl%isCgY#Kv{F|;WAkuvjK1To7^|gr7qe#^!*hR)?$u~?iQv=8lV zDkIZ!Hy%;)q^kS?HDfyDaKhMF=MF5Eo?}g00^l1uJqSzKxhp4(4yA*uf~x2_0Y+h| zGRI6d&|p#K1{EC@03ODkJNt6%XIX% zLvx%I+#Vm%JgLY!7#S+I!~*J3Q+aHodcw`uwzg!mcxdkF8UB zPk(u9dgrn6TV)=NMWS@ym5O7>`b{qDX1y@#?)A%K2X!upo7>yna?;0Plf7Lwj_g=A zYY$z@*$9u<8a>|eyOyx}SKo#xIF}}`>g1VdZqUTz|J^=h@L^gI*3O56!c9J${$KK8 zyf!ebM4!L&;UsyMLZ&2s9Q?O_yg_Og9#egw`<9rv1CILj%@W(BWjj_~{k$)4=n;i} zPDIjZp4(~8pgw@O#9_#^f2!g_Yd`nu3dL2d-p=oi2LPX`<#z- zf0!|@*)1q<_}KN^=WSwN?A_(mu%E6=zkjPDXu^(3tH*Es$S=|Ht@|slN(RJ^?EIa} z7`vrIUVgg$ac1O@&+?VOF8ww2l+(V$Wf{vme(hWQlkS}N<}>@*)7KX)n;@&Z|Cah- z)STYetm79fU9iM|Z9z=e>>swO3$8j&2-1$x3ctQAt&jVt|B)kig?8s2Z0yvc{pRwQ zW3>Z*rY0kw*JYV=+@nv^_C?#_iZR z61tO;FL8~3;xbmnw94d8aPTZzM)x+A;ox12KB`vvGd^CR3Q!p%G~?*~T6x)X`n2&% z?;hl=Q7ZlR^(V+@ZS?HM(;=X!qhbN5A&FEH)7qRXAYxlHOE&^P+URU*X2t zJ+1OQcKzskt?I&Zi*0j;`>tCfvhcco`sbn(-LfsO>>xa%NPxA8p)qV^`yK{?VztQ!CWh_N4syb-%9Bg?9?SI_1aVZ`}4^*x`A-mN*ul zb$)q0Wtw8dB*)mnQ3{70cf;1~?0>~(s?$raqTR*sekO1EohZ={D12`&Psa+V|ai4c`v*&Xy*v`C6|2>`3Q`_my3A059k^&eSX_uhz$scp% zkvGIlCK7^NBot{FO@|;8fyK2IY0bZ;p0P)}zwc4do$h8(&a+Lq9K1N<3;Bj0$dCl- z?-GfWB0dLo`>f(=kyQidz&Y1PX7Gt<4(vZO-ZZF`?&FwzFQ+c-od6=d8b^fK0ChSm#yd5><_s;D@&gHn@`c2`7`L|d;P7l z{CJP<&(98T*?eOC^d1gVZog7~GG*-H<{yt{o_x9U+ozw4{gzzI+qLoBafc7x+*+is zu84X#i`Jh#Tz6r|N1vC+R>&=qFPB|EBNqL5VExYtT}3_*YHluc8QjS_aOwSyGRXng zN98j=2}oZWC|^YR7EHfr3T&B}sq{bX@{HU161O$Q9}A1t>^qXhdSe1Y_8){C7#iKP z%D1ZfoNi_bh>F;eN|nRBTUBMMq!K3Q$TYQ&*f^dZhrfO?CPRpg9!7B{Fq+HLbSoEo zj*pRxghX?uKtw^cDv;?%Z5F07r>{Nrp=!=#dDZsk3l4ZJvcC5{r(KvDZuh(ACeeh= zZ^`G<$Ahz@&qQs1Xh^R3hUChUGrBXMqWiW5ayHA|6vzt-3filYpNAKwMXx!nMJX~i zyRHSzoA%sU%6&BCfm*dW&2#ViRonL$uYORy^1}1(jmM?jQfumqlnM2R?Ni>D z>UTP4mc)qay4O7RT9McDxSE=iIQjf3%Wm(oE-i{%5hb-AYx!-~y=#u2z0;f3>DcOD z`)C{_-8l!Y5c=urz|p51zACi1J@1naCzZL=>mL^s zRS*5Hyi1p%PXmSoj1O%JcuRj(Q!{gUcDztCE!z8RF*SDXtPZu!qlZ3hTF3cmtAGE! z+qYEA*twPW$HN{UH9rw`ZrRk}6i;8vIP=vg=Y9<@Cyeg#O~u#J8*g)_P9LFtc>1%t z$5(Hzc^;5o`gUmPoZ=(fXR@caq&Xh%Os~A^+MZISaC`I$=!%gEF=u*p0i1il6I4|E~8#RwN<=gCm{W5>p za;N1rllh+tq$EoXrGs#)pz*bf#CJisS&^P$7Tc?-L(dSa1S7S!q zjH(JxYHFIhcinZCvX)yvfIGd@$lqcnx?4!;-U~ghZk+a!=fZne6kiYhqfB_E``Mbp zUMVME#g;zVFn(^@SoPIeR_j)kU-v9`>AS$MCTzy0j2}|FIrJ2b&h7YB*HORy^2y7= z!-D%?5$RKMUe>(3e0XL4@_~uMOAQ*o^Wiry2dBNe^VK@HM+u(2T9WN**WcW9MDkvg z^X9M(F52(uWC3r$jV&K>L;TjuyDj>%$BC5O(R6dXOXiW=$;rwdOH+EBe1Dbq({Fd~ z|KVb3rd8UBXQ!8^cB<_;wTEsd`_~b>{XVu1eA;JZ<@s|K*+012d|mK<%-+uhm`pn}l*D{uTwXxyutXwOv1o|76X`5S%ZEj8bZ4R0F-)?i{eNX2O z9Fpym7cz!Z{M7|R^J}(@xD)zvYWZie@6DI&Iy17}4)Vq=CfBrQVW*SOssG|m_on>+ zFLpX+OU3{AP>79HO@|V7yK(|)f4Waqud1GNeE)JY#-RZ}Oc?Vp{vWqT90MAPc`FmQ<=x#CcFF5z z*yHAeymt$I=k~X_uszASz;%iJ_*X8y&fGklA}@9neBS@CWyD8<&4~}YU;V0p_DXh+ zJ3MaE<@aMmr$1l2`n3H@|H~b+(!)ko_ju>Kz1#N9+Lqem)zW2g`Dqmct=#F{L!Vq9 zJ#^d6%6UaiT}b@sL$LmiknTY$=dL?Y`-i7u(Q@r?9x1!paw}O!%N= z)s-4Pwd4M}6}w~aR7OXP9q3W`c5$v|Yvr&YttPo8d$`r4h07;4UGMwgMu*jz(_U`0 z+jg6ZTNGI(37I`Qj#IKPa%sNn^vUj?d#+tztu0uqnP2uO{^Z3prx$PkqtnV+QG!x# zDz=9SY@}Ny75_uwpY8OfZOQCCZB@xCx?}5`QX30_eQTbG_qMc`S;xLun=I|9=bXUGz)@nG?SW3x^c9r>i( z>H4s(ht6F8`K14$Sn~}OFDN;sY-)Ye!+_0yR9bhNvC?W>Oa7A6jxSPwxYMg(!ugWs zU-RV+?uiP)A8R#V@2NhzDf^>s^*>!K7A?I|nmEEGcSiGyF~j?vcOKTY+<(Xdwqm4L z-v>=C6EBoB_AK2t|KY&lo{^2y%05``QqxntB*cHho+IUr{S{fEP3J|QZR!`6ec zMOPp7u8E&BaPZW$lXuxRE8cg1v1&u#cdAcuwhT)Oag#QTd*UdXGv~|qs|GZT=yNgA zg=hDV1^0h+`-FSUN%}JE-SGWvzjtV{@z5=KD#%EPOHGR_wE| z;xCu?jVPG$>-5|?pX{?9H$FAWFZ0kO{eUgD@BJ9FsBg`t3B#zfm!u&dUc1fuzU6wf zTbGZ9QyZkuZPswDzht?rRh_l*O}XXwsl(u*-MdYAQn!CZ@E88m?>5wB_nbmUywhjs zH_8@|YwR1g&;0xsJvx!cf7j>6W5Kk*s(HMF-8TGYlW}FiS7%F0_b#0ma{i=O7pt8! z7BueoZG8FoAFl+@{o%ux>^z5(&~K7sXMbINt@BFB?%#OxuZ%z9c|L6K!*HLU7hDzf z)ePlQBMv1uS)cyUcmFMMK%P{;dPz9z;ps&l^@Rr)h4QX=K0U6V>oI4l)Z)v%hjQ1K zvh9!?ShZP_rJ$7c6q`c}aWmz=`<)-#=}#{mZ7jKc94*+MT&ij!?a`)~g}|=0V8wzX znZ8EYa0NUhVPOJfVfYbJ7|z^?+O4%50bVq})7xR_-Pm7-K6*cO*ylTwzFWzEJo!)V zz@o+#ExFH{b?ow|Tkb!5mfSUNXZNU{)yWGB`@gmE%Ru)vewTQ%s9VbmqvcDu-_ct2%GvgttQ9lF zouyM2I2X8&TJiI=ueL57vu2U~mHziedJbOyUjKI&utY9f>Q}6*j~6bV>9*(ojWYLJ zoY`}G+~n7e8R94Z*vcd&}gbQ^G>ye$Lza-sXeXsfvJa?tJ|F@}8NVo5qDK8=Uon+B*0A#^QsA U9v}NW`u#gv@#5wEojt$&KYf`wh5!Hn literal 0 HcmV?d00001 diff --git a/venv/Scripts/_ctypes.pyd b/venv/Scripts/_ctypes.pyd new file mode 100644 index 0000000000000000000000000000000000000000..2800f637588a09486cce3b53815bbd3a0167c58f GIT binary patch literal 132760 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_ctypes_test.pyd b/venv/Scripts/_ctypes_test.pyd new file mode 100644 index 0000000000000000000000000000000000000000..1dc22b76c1d3cdb5600923d794455cacc8706b9d GIT binary patch literal 32408 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 z%0A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 Ovp;D4hruTw=>8Wa&>t@V literal 0 HcmV?d00001 diff --git a/venv/Scripts/_distutils_findvs.pyd b/venv/Scripts/_distutils_findvs.pyd new file mode 100644 index 0000000000000000000000000000000000000000..4eff367e6ed56a981c278256664eeac29c23ab28 GIT binary patch literal 24728 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ⅈ_oA_Z^m9r$J6)#3LnNE+uJ7rD_m~w7nai% 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_hashlib.pyd b/venv/Scripts/_hashlib.pyd new file mode 100644 index 0000000000000000000000000000000000000000..408f2d7a707e7f5b5fda888137e97d5432cc1fb6 GIT binary patch literal 39064 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

    ~n-T3FSzs7QgK{iLm(XV$Ut?S ze#@Q>?D+$GUS!YREqE-^j@-lVL>@qC;qCf_s_+o$+cvmffNL`@ldCT)wThWv0z zIEaeERRoT2~a6OYpEqddZhqg72r+*9ueRb0XhqO`wB2ZfD;6mD!|7D zXl-XrHXqv}z*isV)73)ym;f&b@S*^33$UY5-baAp0-Pwoe4$*1kS-M93IXmG;I{%S z70T}y(pEli=khUEp}%G!eNKS;1h`XxRRUZhz{dqRLxAH1C>3A_0p7^r+xb?2Cj_`l zfUgR0sQ~8*Fjat41UOcJy#(kiz#DUU`j-WGN`N&2+#^K^?%Jj_?=^#xj;n&|6QIR=8HG93a9ge*NLHF<<+kvt%E{E~ zvJF|eQo;rb@<`EV&*zJz;oIJGTa#Rb-&CnGGEpfN7*)V#9E@L8DU{&_ki3o)nh@ zV))p zQd!_VUr^RGL3j%JW28 z;^p7YG#DN};U4pVb>*tV;9KxOT%V;1=GX%@_;g4}DB{5Jkyd=zFaggZEqHmjP@a#p z;KPDL`0^}5)R9*eRrU39!0dK9#fnMhxwL6$n+y2sD}CW6kS;xEDeL@*3LZ zxdX32Y0rl>JtZ+ZapS<9@n<9> zB1?X&{=y+%Y9;`ei= z@IQ?cD3hgUU`^zlh(L9srr;VODw4{0w#DIYhU2{3;9^-hX}Q&YpG8x?K^+|e03VS!G)&?{m>cGePbhedTnqs z89k*fE{QLf&<4ksn*rPm91R5)^1tn4{cWQ_4WFjpIHFlqkS$FqoEkXNoq&@Qt`ImI z9fT5&_EY5Kio5S_(Xe{<;Ma-sb+y`JS)@xP&D{jDMTZKY;pu-_E&l?79o zX5geuR`{JEUm4?x@c;A?b#vmn83u9PLjAdJq5+&+0>^dl?ZA16266VOb_vxn97pf7 z^mDf3oI{6l#hvgS9T;B@WW;a=f0jN9TruI$Am!VpZR>~>&YS`-EsaWY=3GNvIoBzU z`65>b#2q=;5X8M4IjQE zL>`WuhuVqr06mWoxBT|$?%k=aPMqs0$9(ErD)_x0j?p`1m(Taxlgsyp&+ZQWp#t^M zHZ5`xaSmf~+G>RoXHJ4XO3+71s1qj%>D16qY{&YL--F}m1@#?PI&IQ0ZuHZ(jL1Wb zzIZ_&ojK=xv{5SNN|X9?ZXzk?Ks1a2A9egy*<>(nP1F9`f7JrXS9t!%8~%G$4+)x%=@&p6ze*9si~- z^w6%K-TR6;caaz8m?}(SypTc|$;@!2+MYklk3ap~d6 z^$7Lgdg!_~c;$CVB|0Ls`yA>l#4J`0Is{q0DRv3%$F~UI19TpX{7xdS6UodvCS63F z3#FN_apzohkfE~!=d5$cho6%Pe8_mYx^V6xjtL?cJI*BpZCGivhl0;>A-oUPO9HR2 zKY~7w;kdovm7vHDzonO8!;95d-4E)(ix+&K8X?IEeh~gJ#54baJhbPjecH*6a}srF zm4ieK9e>D4MAe+5El;*S*f!qTnd=Nc)){`RbLWl?9rE2$$qq;-tY5GqD{q9i{ovBd zLg^oHFu}?rPVfxU7Z4f{6hR#K8=%bzM}Co-ODKxP)+xohM8a63iC*|L<809z_tfE8 zRt$c|4=bY@;GAvB(Jz#(L?8WaaPx3}x)V5>o2?(;ClCYfexLuGJM&Wc&$%-%hyN?* z&RTKIlqo6cIU1ENMWfScb=)||m}vPV@!WlDbGsBpd&NrDNoRxI7EuW#&XgE8D;ai?6oD09m zYUgV-b5n9udV|3AdgnCWReOYq?QQ#CfL1ARI=g74b))-ECW<;~{Q^ zOTwd3iDBsXqtW9+QW&GRZTdY9Ct*2UA!{4QvuzpYBCPb-dGAJ6ia+UYTkyEkq_GoH zCPv1`q^PwiI6C4$i{~{UI3+lsa9C)d8rXpjDG5c9y3CXWl}@ioNyNcY635+!yNoGJ zPvOt3W0CqQa@EVwWK6|Hy34fx|B)j=|&wp?!HDC9P*_ks^)2uvcR62 z`@mXzoKBm|>h){Wa-u<%J~uK?{ivphE(`QlPF(C0ig* i!#c2nqpo9^4edCEj> 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_lzma.pyd b/venv/Scripts/_lzma.pyd new file mode 100644 index 0000000000000000000000000000000000000000..bcb415680e260828f053b6469bb562301f74478d GIT binary patch literal 257176 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_msi.pyd b/venv/Scripts/_msi.pyd new file mode 100644 index 0000000000000000000000000000000000000000..87c64b523cb3a8e0eaff4b1efbec3ecc134d87ab GIT binary patch literal 39576 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 BR6qa# literal 0 HcmV?d00001 diff --git a/venv/Scripts/_overlapped.pyd b/venv/Scripts/_overlapped.pyd new file mode 100644 index 0000000000000000000000000000000000000000..33bdbf5eeb8b6e9715f8e34ddb96a3736bb2df5a GIT binary patch literal 44184 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 z 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_socket.pyd b/venv/Scripts/_socket.pyd new file mode 100644 index 0000000000000000000000000000000000000000..a4d4667d1cfddd7e256c6f84a1f630a79e8a60a8 GIT binary patch literal 75928 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 aJ${M3@?4%e+40lUsa~7>0vq2l&H8_oRz0@> literal 0 HcmV?d00001 diff --git a/venv/Scripts/_ssl.pyd b/venv/Scripts/_ssl.pyd new file mode 100644 index 0000000000000000000000000000000000000000..8dc7577ff5fc1c533d1fb5889e74c4b3a64f28fb GIT binary patch literal 123544 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_testbuffer.pyd b/venv/Scripts/_testbuffer.pyd new file mode 100644 index 0000000000000000000000000000000000000000..6de32618631c717076ecb93aa4cbe7aff737a4e5 GIT binary patch literal 52888 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 ONY~bOT7fcTP5&Rr+jnyS literal 0 HcmV?d00001 diff --git a/venv/Scripts/_testcapi.pyd b/venv/Scripts/_testcapi.pyd new file mode 100644 index 0000000000000000000000000000000000000000..05e07d1380afd2e16a037da34b4378a216f42eba GIT binary patch literal 97432 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�QxzLnlTRzzpLTOD%smy=)U+NHRz&*7>w)7$fsjj9*C3eK%R zxYrVQ?w%3HLx+wW-ssyc@}8+JkF*cVIGJ)}Snto?|2*sDt5KmThwt97+ zzx(lRN58zWsLSBFn&(vVH1`Omxd)u5IjqbtInB{|&yYSowA!Zw8EF^){vESTE%oz1 zn|R^6TX)aA={DWIwgpZzh}$WqNS?DW)9EzYzc|ymTmO5Q>G+h250yk?Vzp`}Qg(;= zjMs!~#@fc%E?Yaw<7A9Y1AU^0!WC*pP`KVcgEa%~^KYjqO_N5R)IKSiD>eRpe#_T% z!#SO1s$W-rV7KP+Nh&X&|K{|FZNSlro}1GejbHAIJvF#J_UDed#_P*Qt()R~vMHli zY4F|Mmj2OuOk4Zmtb&Rjk$a{b_KSNsa(mhjBi?_!R5LiUSIXff*SvdQQvBvGLqo38%q^tkUo>T`eI$_v}NHlATA8>ZQG z6K+|U;?frG-jUtx>qMN}Y6dH8T_by72kki3?W-B5uyu2w5=YZKhh>AmYwiGv1MmPh_Z%`m-ClBt5q#uJ64Kw`cXr?K?Go*^Q;qZ%_2U zKY!|kUxu%URZgHdp!BKqVhdQ|*?VA+R`+UZxIm&zO4m zu?zhk42YXsy*B9@zxGL0!}NM>@2x41_C0yWd!K)MzG6%B4JXfLe3!QREvAc|_tHHl zZ@NF|?Rg7kK6JpRy5OOfqY>vn-SO1Q*L$=*J@7*BFB`@!S~m6I(T_Lu`+Z6JlIu@> z|H=4k+pfr8)Blqv-l@BJ^t#^$e!ArKBlV3NmR6bLmZrVl<$=2!zWpkqI4bPeQ`u3k zo$L14x*Z42M`zA3t$Epd-S5E_S?8}Aef+k|9xguBa#P{&`>&YPRQ=A7=f7?Yd8g;_ z?SNdKS@zMP$^`-0g}dL%dUkbJ?a$WWF~{!SJEeYh--RbntoUW- z(alHuFF4Y?r?GAE`UF+_m)fKIdzGE~D5BQedgG`&dQN+xP&IK*?7r5$1H(pIpNJ?6 zKJw3l*DinImd!(&hg3wDMBY*olfU4=j;F4BmmMrQfAQ_d1JB>{bH>p7gPO|9rhLBP z8+Q1!_XbY+Iq&_V&vsVq{`O+Y+|&ifzZ_w?qx#7YZoTQNh2Nj9sb13&81Q?0@UzJ$ zwtjKE;>&K8C0}Je+BA3RwXG-fug!nu@~`_mSTc9oke`Y+6drqY^Nd4(Ottno6uhqN zxZi}P7qgzd`*is6Id9ZfdUeIxpo@c({30t==P@~)qi$yYPoMdD1$8=f4DjKz*s_-f2TXjBC`RB%ocOTkuA$ZgBeVVM;Z@Pc7Zmr>!4}V%?>$dk$a(Jov zySYsxFXlb&v+bJFo&7)ju=LLBf?5N|>|PeI?*8`13;Nb-TX5pkCqk1gN3N;*v2tve z^asAZY=^-dyguslXZpUKJo=@*+Gk%FeE7P-)qQ-H$8Wo{?yZ;S9l86hd(|5r^*w&) zvYT#vG5@(c>#{c7{o^;krS|-B+V{WScy`EF$q}jRwCjW4%zn1v=8F3_N1e9*8r0o% v?7jJwTgJ|=K2g>3dBc?(^(CVlEo0_C(dR_aq5LkNFW>x)f3Nxx`QHBrKoXo! literal 0 HcmV?d00001 diff --git a/venv/Scripts/_testconsole.pyd b/venv/Scripts/_testconsole.pyd new file mode 100644 index 0000000000000000000000000000000000000000..bf51c930b0739cc50e72e948b00624de4044352d GIT binary patch literal 24216 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 K9nuemr~WVUkPZ<5 literal 0 HcmV?d00001 diff --git a/venv/Scripts/_testimportmultiple.pyd b/venv/Scripts/_testimportmultiple.pyd new file mode 100644 index 0000000000000000000000000000000000000000..bce5bc12d2007b2b807f20486105839b9018e2c0 GIT binary patch literal 22680 zcmeHv30PA{*YG4H><~ae6w!#FxBxc^ASh@M(2E8|L9vQLNCHGdf>~ryD~qTYvF^n# zigmY^sk`CT^u@Jm{xdfTgw`(q|9#){JJAcPo@^m>H$1H=!XdjHLfhLB^AgN|sA&6%G2X@WC76EmeMcD7QHp%iAZ zMMAk;p=PH^*h-C@EtRvQ$0V?`6kzt&w$l+0_a5L3t-rWJRKoR3e^r#0U%&92R%oKj#8ni zp_2*xv24Ipgc|04Vi?GSX{I8?wgniEP&eR%h9Fel6<{_(0|4;32qgmiv!?>;5hbXx z1%Z&CdHHu81JsgSHQ4^&3os{(ANiGB zP=^&iq^bSz%f0wDO>Mg$t1nr6+^_d=RwNEIio$W(H ze|F^58eJC~gce;{812L7@1qq*yb1;mtdc$Ou4Ohs0gI&*L!)_B>M^=eAb@T!Xua+x zyvQ=QhdnTGxDG(K*BPObDotM<&Cr|;^#=|0U*h_uP+!Yj2}H5l^11p&r*$XoAU99X zDw(X;>vdZ}?@8?yvN#l}eMoJc&JL=9v4=o=@*wUMt369Iqe_qer2J=nL zU6UtJIDidOHv`Bl#p~QQHy%lNR``paXqmatfp@*6YOagfobd5qO-crl+3JE zHQJiywFZG20fhx3wa3ZQiEKeB-=j1h){C^BkVGvQKUUkKeGN-iazVoibGsCP&|E8C zRZ|NLr)-$M_$4hThSV~5bcgwYDYmVR_95`fG`s5EMgUTKr4%rr81wMT!E9+S!&K>( zzSZm7tJauTone}K73*o5P#_uv-FO#pw_Q-zRuBLUV9hbGRy&$1^loRpV7>KfX0hHv z!*Ao+&5WnIFZ6r?&9KlmWfN(jt3EO3YOGD*MKD_00!o>>FYOoz4U_a6N~+XW2e6u+=?gY-)F05-ph#*#jmT2wW>{6S4Cjlhz+#ypxU6M!@*F2KKrl?1=#B2hx9sM*`#YGmdjKH8SQF3`&_E(7cxU4rDWo?Iq+4W23)kY_FkK zn+T4p)RhJje*+V*8x4zQkWBzu?@^lQG^=fyaY zylV0Q7y>*%sTbZ|*;Byx;Q4Ihr)BQx1GR^^U)=Iv0}DwGuF@eipq}Yhd|3HcZymnS3E4mu=mV-qAFGi9t&Oxy&E>gl`+r0zXY#$qR}h6_SUNG-z`;yr}r#WEfOhX}^fv#o;ElGe>k5(IJORke_; zT@DT4JT#BFcz^J#*-2}DVH)3DLtiW1Zg8m0U33{xhOnmGfM#&3nyqxppsPjuF*9 zhF~aG`w9mguunGWu0YrXJG6W8Z#0cFwZW6xGo-dw@Al9QFLR>LMDRu6Kd9YP1`ZVB zNIr-RTj)vXOU=^?iip|?l&S$+2VT@#!09G|EI^&9J54o(DKd={DyU{bkTLARti8+y z(7B}k5Z)75(KQR1IZ)OqAtcegh5p7FaMiUK3N|obPaxa;a1oG&?HTJ9MT=h$5e{9E z_A0AnCsxH*G}eNzA){-8#efy{E4i-m0cpEq2F^eOgv8SK#$_5+R;ysPb4jh+!CnYa z3avd>+&Hv9sBE1c6d9DC#C{vU{8&!L9PyOp1YVTo%&ehy+xInacGw4XZ4Gx*1!sqY z08cXK!J9^{DSvX!0T?>ceGc=1^$|khYNIwYy?)l~HF>0n84nrQBpfJU?^GB@DR;_# zgK|fDXc7hekFoYex{_sMJxGglkfjVtP-cG$wj!U{!ROT;+L88x!PQDz?JzJY!Qd(- z7~nC#=3BfABt)fH?OcoVeb5}7vjru$1W2cJ-lJ{K*^92~v>-3<0?e=7yz3e(a)DcA zUuv0QX$)&z5U~L;Xwg+QW8MXgBb)*VSP%ex0Z^mHt7wYJ+=hBXckNYh96UD_bfmn^ zDYE#rUSkV!nobJ*npq^ocV!L{;z2bM9tpjAz=uLA(^o7l$2lVv-6 z_`gBp!bermU3=9KHd#R)W`v2)z}q*bi8E{*+fJrPm()?b zutk@aU^Z9~3K_Y-9CM}O(~^Z)&L8jzT5IS5N}dW)OFZ}lKEOn5qI$P2POv5~Av%K^ zYzKU@ET)CE5+($K8O-!YXn?nOzTWL3WWmbpK{Kq&NDJLj9Li}w^En6eLlz##QwG~^ z1I!+l1B(TMN0$xD)Wu;ra0%jaAo4ugCz-b278<3qVn8hDjC(-ers)8|2jE@6;Aix1 zZy-3w^ET*!VIQ#85TuBNeW1>0Dm~jx#l85zJfPq>)1mmlOUNKK1C-sM=&<$SJ<|cO zu!p__s_lG8Ev+zAq{?d4bSuvFU})U6B)hDz@wM!J@k{zlR^cneUqe&Fp$>bz8r=!l zcMN`+IQqqV0BpNJykq6?o&LEPNuB zOJXAnTSiFan#i&!8m~UG@Tpuak+Hsrv8yg+_{7*91HKIH6VO^~?MsO7?KSaau|pj2 z()+dy)w3e1ENMvX7m;d7N9vvt*%)+X?tJwIPRi^YAMyYVgu-HxtPRyF*Jv$M?hE$? z#dWmkQl<#9%~pV$1euawG+hcGAXW>jP>-Bb5rh=Qbqr_~0hRk<4?xj_TW0s+)w8|; z$)dIRjLN`rVX0ULf3{KK4s_^X4;@$s@4Kqxwajujp5hs*WiE#tcr{$(sY--*H`Qn$ zMmtAV-(iz>=SZLfw=!^=^05rJ)Nr*-G4v>|v#w?0GcI-&rOdIAi+ozTXqUwF~L3j1O^QiYs>Rm;>cT?|; z)cdR%-q2n~VWv{=a_T*edatD3>D1eadef~2n9yS zH9~hIq#NPma0A_QM!3faD~xcy5h{()G=AH`hTJeC^fp3M{X1j%juD!votcbG+QR2c)SPC7Ar*PJ@}M#h2qcfR3A+6ef`pe%0I)m^)nx^>Dw9h=c6E1 z@E~~^TA1pkD%_+@9MxIB0la6x5Wr{unrG3=^ZftEd^`-``6KrW55$e_y=bH zL-PEAj}b90Av$4iVC6y5UMkpcasA8kAhZgL5H%<{B}bv0o*bO4N{)|8(@16FWMP&# zBq;ekOA24v(hLOgXH1;%;{s_!RH6WX!)pN~^$pM`OOESWdKv0XI3I#QbRUEYq0WHI zrM|!6Z;Am@{0+}1825wuqdo}+5QHc_1EEkT!_gH5M2&+Za#SR4!|#ZLdk5H~JK$oe zcJUo?RJ(~CaPd^T)Q&i+U1kSdBGoP%a4=M(EQwUR0>H6B_e|e4Dcx-=`{d{6i_>5j zh#z7chf*!_iH)S_ksWZ8D0=bcxI{y{i5+l;cBz2lV?Mct@1LgczX1|M8Gi?k$Fdsc z7Jtn}TLI_Mjsr`AT@-L;Yk(~XVc+EgagnhvaDs;q-&bgWGmuA1VFWK>7Y;~Msi=Bj zhQGm@zQ>|e&;h8RzPtK>HNevXIKrk4N6CcofAs)MBkSf-I36*SXON z^b6P_!Wp4;kg#sy=LzKBn3ZV|xLR`Q@y;wu#1dO07W8Lv?Xpe%qd|$&AaybJFM@oT zS=rQ|#-Jg_Ft}0gYKgiAu~1i~d!uW1r&LS_%Xk9%d<8ZT40JH0`i-N<(K9+m9^GWuoTA64`QLUd;0@ z*2pChQjisLadB+4&$dg&dVtr&^uVDD?wk?2A8No`Kpv+$C|`oq2nicD9}*kVJ1BPn zy9kAZd(hvvn+0U&iBWuBtX!&2d5_2Zi>eg7KmK`7YTHFuzy?jv8_0Wbz@E);0*E)3 z67X{lGh95xBs&3zZQAs_i+~*9{_Ocr{AQS$zl-0V)8g~u6k?4`k`kqq2-OlU%zd6Z zQz7RK3=qp?*t@5sM5U;*B_e6MRFsk_l#68&B|^S{SEbz`8id3GiND)J5rc~sm z$fPPY{$Wm*BugcM+=Qrc<3}gP#>H@g2m{R!1U;l`wM3bP2Dax@Bxoo~QAsjW(xoz} zOu+(ppcIipo-WPMC?zR!p;D>HNf9bDX2LCkp{GcSsa^#ItB)JliMlCT_89H?bS(NG&m?j{E zyiBE(85*f*I&=Xf{6Hv0WXNS8JV2=&nj>Mh)IUq*pCgs~0|kHh6+}}M%iNIYGocmS8>e*sZy;G%ErrqtQes^ z%<*!=@`z({MUrehl;PAwBBWv_NYsB??MWXYQAcT%N|?2Hr9vcu&2Kp~(ImYIh2~kr zs*DANayY09$QrMdsPJURGRA5o%Di}qGF_p}63Rs|3K%7*O1D2!j}=37(atk56Le1u zNc0F}6Y^kHvJzo}B2_Q|3CjQIan0|`9b31T%8lo#okocH;HSOCKg<17 zeu!&0$9Wi`f!qHazdGZ%8vl#q`)9N8-`6S|;-zJf@OfkR5#VEY zh|wV50&q%ah>swj3h+FnWXN9vIMf57*^uW0d;}>Q@)+WuQp|&VIKU)Giy{9Rz@3mn zL!o_Fgz_LY0Dd;WosgUWkKqYO){w6Q*aFE9@)$BbK{m)+1I&cf3VkswhvWfx40k|c zLmtCtkZwSmmjKT}O#TS+7)l`~-w1gbz@?BbK_0_HknTeMFhD!F=lBfr(EukyT8Y~O z+zY?jiwFAq0X~Jqhdg2qhQ*MML;gR{zuOF0P+wyFKy|?U5g(ujz=;3> zm_0OzU%?jNgQo!=zKRx@HHIucgMr??2M@n+Yx|pn_C9cy27FyR!k9DQuR!Ug6rtW` z^`Yr-Zo-E`B}{Qe0anwuqK&y*-t5Hv=3a{>r&wnQ#ch^6w32=DQU!~H|O z*(x;zNJ1Gz%Mspr5|#JRAr7|TLX}FAl_tw$0|B`z!ds)14^oLTC0Rn1f0k6FRHzi` zYJZU;YmiWt6)=6qzAWwN;u|$54?z3|kd_#NRbRK?0?DyB=6-fWFDQiMa| z2=8>EOeOISY$FpM_~%T*13QQm9@sWEs(U!hNVZTdO_Rz%>c1auhvs-1jY5PAv$JJV z5l~Xd+vQSevhfwUL=1mg5-X1Io+aTD98OU1Kz~kfP>6pJPZaDg3{IE$6GW(3B9ZXK zymVrY`N;l2ffvl-g{FlG{e#6}Kp{O%>>n!Oiv5M$pdf{$07w;>5EmN=%N!Dz)RCt55Kuiycwh&LCiMw?p8)R}w^))bk&D44m@F*Zgi%Kt zJwUtqnS4SlbWmgU#+L*U-oT2-^=8Y3Sx|^G`Gx?axB*d$tSp7xA0K{|3Yp3qdxZBt zZGI{wfWZH}@gG-V6ICc9m7+|kS|Y+n(+KZ=P@_o$`xqt3O9X2M*A@~CDiadK2?`R4 z(mCREZ?;S*&(H`n49!i(9Ul1p@wMZrnShyUA3ZqLDvKa^Pe2JM1>P}e9OPor7&IEn zvG5)adHft<{Q3_2e=B5xo>_dzFhRV3;0N41wKq@&bT zD9cegQb4;mu%Xc4V$Ad}2&GZiWD}4l;G>{T7VJ+#XrBkt2%!X5A@IaQS&cHGUXIwn zLjm;ECW_DUb&0#DGx)SKJOieE5SSTALiv&{l;+lziD8+I6Il<-m0D-y>O? z^`8JZB~WOm&qD!lLll7Enh=E`J7|l?s;1h>K^B?WC_3_pMgsVUAA&X?`U#*<2Gs*| z&xY~hSk^?`n$2ktj!2W-ls{rWt*E|SlF$`oJ1F}hAi~%r@ zc(wkjCkKVWzhI+uSU${UG-zGyKj?=?Wuk!BJP!H>z+6m(J2x80VVEDRX?UJZx`s;z ztx2KQK}D@I)+)TFYN*pdYpf&Llx_x4b1eqC0if+Pm^~%56hkW!wE8n0gyt~cST{Ph z|GkEo>qj*7p@G$5oi$0@ZW%b_$5xdHwOIdEAYDgYhEou3(BZLwTSlyb|9Sq+W`KZm z9}L-VJ+Xe_`lah%e&MviV*?=ghVS*671%7pA^Y)BRb)Nbtn5Id@fST*-^r53CERi!Dy>acF`JTnh?I9$Yc^~bbz((WSN*L z%u!1?UW6xZX4lEpfM7>SlxqA*h&p<3dJtZ?+M<)Yu^M06!+|j?8^T(4R3y>8vjd0A z;c__y^-SvQ0I@2UM{s!%kcCYmrkV*mKEcG!wv%f@9vm1UqGLxXlyImqup@{71G_$L z)tDhW!Nf5^qMRv(kPuk2{n;b9L=nx~e1c%XEQ)9>SYVnhy@*CbyLNmNn>gy@ZZ5W0 zeDjuhC-qa@*x&njlxq61qXF@geseuGb4e7aA4 z*#~PLyjy%HX=udBj4!^G-Nvrptbsjr?v z2koS7D11#6zMz)U%aP&Ea83E-nLN3nLH)_4n{$30di{~0AmAp!wX_CBXELp5G)8a2 zhwwI)A<}X;9#Iq`Rd#@yQXPCap>)iv6OE>4SQC~2;M+Vg6qeAd2P2dSA%ZHn6~z1i zV`q_4X4W^*pi$-u6%`o(Z76;A@@3c)wk8QItO-X@%^u?b`1cmxjHfd%*7KMe#!sgSD@_wEB0kQqp%x_=+Y~yukOp)c3fhn8E zt#dDX*loE@wES6C^TgSN?v=Exm&(pXF=AU~nDfhiyFT67wPs242dmLnXYJ#5pW|${ zPVSfg=1#s>l3=UEqbZM{=DS*6TRU)CaZl?dkq>WPO&aQz6T6_FyXDl)q0_uwHjM33 z{NY}rh_L}IUTd^?$M0K1>)ss=mNTwQEBEXgZ?4eT;{T^@$Y8?+C$xhNbHhwFoc4cZ z!*Fe2Sc(3BXTu5747o&!?KtRf?f46kU0C$~L%p^{#~yOjuWu3BCal<5e*LQftdS?= z`uX7r<5_NJ8AJQO-L`u5)$fFPc9ZJ`^Jm^`j2h*=>hZDuQPu0NWbRqQAM>~*^nmk; zUQfjnTim#c(Mjto7jC3q?$`aysM|M1KXfkTPTo0n&7`fL`^7tUe!Tj+aB$36ukT$Z z*exIN=F7_G=@BD#WGf#me~@y<>A>+~@yaeod<$;tE_iP`caWaHK4-;bNzLQV>cf%q z``xe>EMC5Nng80H=pLCrZdK=8cbv@CPSEm>Tou*Dem>~LiHAJ93r{w9wran-`c0B{ z@K1~_`QE#IDg$b>PkcAJxVQChc1O02Sz~?M$xpfcjKPkJXh|?r34}dXe#-3Va3plc zC0}eBe_=9K1%%3EPGH~}goNm4DuaP{H`=ILf|ifch=I8q=Jl~s zc>n3E!gI&9gt}o$i@wd2KIuPu9`a0lh`MyRqUdhx;`djxU%S zgJrWz-A^{{zO}pQCi~c%Z-+s2&-o5{mxsz=oKAn8W{Zywy zI7x;&Z0-BefZMxUCvBsB?e^J#z*x`g-iK=5<*poCGk;gn!YM5gd&aKMIfu zrqhh(XIN=pOcX?yY;cizL8ls4K7u-~X z(M{!gN3Bn|1dybr5L{EcoUE76|!Nn1q#~zb54KAy2fb@3( z$`zS!h^sg`?~JgVzK*$S?BP0o`l+NO?g~l8_(R9?Z+-pl-grN5#(h!Xv0o)s)%SCL ziQBm8$WH?6I}@Hs1#BPj&OJx3y$(~f$Odr-++~Sc62ChC{L4Gjqt9QJ-xm-3ZR_N9 z(^Jb7o13-`*c!fhCmqogXIv|GoZ5MB>%~tF2H*WKLz?xAPu?esW)m%s23ckJv7S9% zlo{5#>Gb;i-VW36zEf_So^-tBr<3UoZ+0Dh`4#E6?1p0Zh6|@0K67(x6}`L0@9oTA zfBtyQrJbLDRT5JwwMe{LeDfU1|LM^BpW}M)eV$Y`E^!&|X&t!yaTkg3kn6LOIokr# zmIq2dLcTfqmraf>9cC)+54${Nw!YYGP5#HiqAmK4pwZqNfZ+WHTn;E2(Wk<yb(&qwZE!=_-+siaF9v^uaeyA|}FL-xz}-@QohE?v!IR?@thIt?2W8jIFRs zG;b6LUQn$Hr1+@K+*Er0+B2W2=1-GWRK8w($m1jHM?Ww+xT(>0zjocopS-EFbOCWH zC^PC@WaU#saK$zRSC)+NUTj1RXm{jvn!Cx7=j7yc6eC*!7p8f?Gg^xxh}i6U*dWI$ZFt$9CR@L}C;k${> z&0Gi4H^A&r%qn=>BtR-1VJNi_sttVqW;81ze@8@wKBV5sPuN9z^x^=4}K}>-MYW-VrAjS8wL&ty?6cN1mDV~?(01> z&bgg9SpVtQi)Y+^yroK;`t)e>Ah$bHyIs`pc{x!-KbYlG%+nvYPySe>-{qWM7|pNg zRrS2vDn*}DYBWE7+Ql=LJ!jFbd=$GXQe>TEc{JnE4aXfH^rLy!u6fX3;~?zCSUm1R zz~NbAlgb<6mXPn*{FixwS#O{A z{=DS{->Y?Fy_0~rAwKu*IOl=&ZzhlL{axu1(XC;O8Tn(hPtWeCd49d|lh*;+MZ-dh z<`lv?3n%G z%1&drp8Aa+C2O92wsB%TQDo@}zTU#<=cQY0BNwu!AI%&xF#X3Z_gjCbGXGnS6i2Bc z1Q$*f1bpqn{+$zMRwQPd`FA*J;&VLg9M<-hW8epY3OUDxaKZ>Hdz)brA$)331J3Bd zZSA|pQ@@U6C%{)t>dVY<_>~*{cpN^znHpLARU@K^{>O7D9iKz#a1I3<+xSg+-Itat zqbGK9FNnIhskp&z@wCTtuiWbL-SE9!x9;=rr!0%H3EOvhLi+yN+%)?Bd{u7W-J} zef>kLb>$^DyOy{NSnO97I(wt|$CRE9efZ9ABaQ_Yw)ct zpEHB~)=PVS^iA*6$ywux7J*CpiMxr3%HGS9dpCSs?)~!Uu7f{bE=spbJ^kwJ$`sG) zJ~Mjj=FlIE+2gm_I`C!xv1J!8SY-a_YI7v#qDrnVo zX=~}BuT|l#D|%hk#vTcmVo&sNxqtmZ@}<*U@7UwZKHA*6|J?KL zH^j@n-BADV!z`Avjwz*F_ZgUWs|Lr!1?|ZyDF>thxFJug-`0I;DW>;+) zb3f$GjFKHOa~BDBpBvj@2YK%nlV#eoV5bujDgSV%dtdzjCp#UrrNV!F$b*elO@v@^ zdoThCf1-ay--7VG=b_TBYNR}E{twO*S7ul4_g`$j~lTWvBU_%+R`$k z&>rsTh{2Y2)P-H)w*zT(#(!~pgkwN`0c&;qcE!Wpp;x*!hCXkJQ_RZsT`+R=$7aldwk;5s~<=6&wjOb%~|`^ z{#QF?q=k;#-}{5__iaD$;r5i?@0PEK%}y;HV&zU`9ou$u{K)N%>AhAg9~nM#PdGWP zX^KbTso?V7%Y916w&n;U_cV4>#MFDTECb2bhwAIulE2lKy9Ps2;r#0y_-)ykkeiy}l6j31zo;N<0QFtI? zdA4i*H21E1Z(O3S%~`8iRQycPa5>fKw_*SCT>W7rr-+#X+rwl!gjD zmqqt1mBrg(dZ zU}tXkq8B6jr03roc;Zkp;rVlqQoq!`t@D14lPuZjd4J6Fppjim`UEL$iq400IbGZ1 z*B5pVDrf%sVph4s`Vam!e9_E`bFs;!`I9HxF8(oQeff?Cw+83e)AK&Q zm(26|@o-S##)jUn!b)}xlI`Jnro2;L$^JQ2%l}*xFFCeGWJ!h(8X6!P89nHne%GQ= zaXlXl-_@`8)aTwumVM*GJ~4LOFt;Ak&oZm>$It3xoprZ4YOwP)KevyZPLBNWU!U#M zyyFKf8WJf@kgwUpIA`N0~%BxXdX{rF!$G|;}&g*jb=RD zd8=aO1=*~)0i%Asu#ov`41N8o1=G(?oO^YSLY@81&117}%&466e9|x1HwSZ`Lc zYc340R$WAovpa`w4v)RGzu0~TD{y`O{qkuSMp_Ne^0FN#OFFWx@^RIWBQ`d-<}cgm zNcVlRbYfP)fF;XLtQQRHb@cL2J~xPWr+1xLUqrWq*ubh?lPoz!w3o0sv|=+;{!ice z(VhNq>1bog?C)qn@5)3KQwWcC!7Mm-Z3QbD7?SC0gbkC!f*>rE15p_M5mNBLN#M2H zY8f23Xx=@sZ|$8sX9c}xw{HAa{zLjv`RKcUFb5h+$;=pYM={Z5#+BorH=m%*I&uDG zwZ7!xDj_?ZEgnL=W!rR_c}DcRlLo$k{u|^TDQtqlkldf2?e!KMY+m+^5IFfXb_9&v;#y#nq-OCax$6zo*|j?D5Om ud=zQDo7m3S+vVnp8qU6YrS3P&rVPIDahKvXGyV_u7YVEY literal 0 HcmV?d00001 diff --git a/venv/Scripts/_testmultiphase.pyd b/venv/Scripts/_testmultiphase.pyd new file mode 100644 index 0000000000000000000000000000000000000000..ffbcecdda09cbfd81d3e3044db20d8c22855e4c4 GIT binary patch literal 31384 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 ZO{X`1?Yipn?~`3mZh9;&`^E9r{{o$X=}G_q literal 0 HcmV?d00001 diff --git a/venv/Scripts/_tkinter.pyd b/venv/Scripts/_tkinter.pyd new file mode 100644 index 0000000000000000000000000000000000000000..e881fb64b15674171b50e897b83c2c3b4b1ca4b1 GIT binary patch literal 67224 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/activate b/venv/Scripts/activate new file mode 100644 index 0000000..74a1ae0 --- /dev/null +++ b/venv/Scripts/activate @@ -0,0 +1,76 @@ +# 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 + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="C:\Users\Lenovo\Desktop\stage 2025\flask\venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$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:-}" + if [ "x(venv) " != x ] ; then + PS1="(venv) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +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 +fi diff --git a/venv/Scripts/activate.bat b/venv/Scripts/activate.bat new file mode 100644 index 0000000..a530a43 --- /dev/null +++ b/venv/Scripts/activate.bat @@ -0,0 +1,45 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:" %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set "_OLD_CODEPAGE=%%a" +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set "VIRTUAL_ENV=C:\Users\Lenovo\Desktop\stage 2025\flask\venv" + +if not defined PROMPT ( + set "PROMPT=$P$G" +) + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" +) + +set "_OLD_VIRTUAL_PROMPT=%PROMPT%" +set "PROMPT=(venv) %PROMPT%" + +if defined PYTHONHOME ( + set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" + set PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) else ( + set "_OLD_VIRTUAL_PATH=%PATH%" +) + +set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%" + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set "_OLD_CODEPAGE=" +) diff --git a/venv/Scripts/alembic.exe b/venv/Scripts/alembic.exe new file mode 100644 index 0000000000000000000000000000000000000000..6b0a646e57afccf82cced1ed90e73bfe0944f7ac GIT binary patch literal 108417 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�?dYNUd4WaURX_A__M4W}D0!0n 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�?dYNUd4WaURX_A__M4W}D0!0n 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�?dYNUd4WaURX_A__M4W}D0!0n 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 GZu@T)?KsK+ literal 0 HcmV?d00001 diff --git a/venv/Scripts/libcrypto-1_1-x64.dll b/venv/Scripts/libcrypto-1_1-x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..98bc522cc1637382c964b3f34d8e8a8b1c206eac GIT binary patch literal 2477224 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%0A|PT8bqu4meK;>Nsovtc-YeWd7@w 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≶5l^@@Pa$)plWZIRbhpTk_)C-y>71wUMes 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�CdwTCx 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�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
    9M|5UoIxUo?W01J+{e_SDiWn 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 z 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

    +DprHg*3W!=pS0yT#ByI2nl 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

    _r-=U3CgHdLm|QWZR+QIp0=%) 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

    hkdV3@Ii1!}k}w{>C5fmm$xio;Y2_ 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%0DmHvn3r~#xP%rhtaD=Ef>t)vW3 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%0A^3*2d|2g|(xUWzGyv5s_${Wx#{tG+X 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 z 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 F{SN@|61o5Y literal 0 HcmV?d00001 diff --git a/venv/Scripts/mako-render.exe b/venv/Scripts/mako-render.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8031990d79a538f07900ad5a806111ccdc01aef GIT binary patch literal 108417 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/pip.exe b/venv/Scripts/pip.exe new file mode 100644 index 0000000000000000000000000000000000000000..a44e97eba0bf379b9504c660dc3b99aeadfcb01b GIT binary patch literal 108428 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 r)3uk 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 r)3uk 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 r)3uk zDk#k~{i~yk?|JX1Bd28lkG=4tDesa#KJ3?1I@I&=Dc@7ibyGgz`N6)QPkD>ydq35t zw5a^YGUb1mdHz5>zj9mcQfc#FjbLurNVL)nYxs88p%GSZYD=wU2mVCNzLw{@99Q)S$;kf8bu9yca(9kvVm9ml^vrR!I-q`G>GNZ^tcvmFj1Tw`fDZD% z5W|pvewS(+{hSy`MGklppb3cC_!< z@h|$MW%{fb(kD6pOP~L^oj#w3zJ~Vs2kG-#R!FALiJ3n2#KKaqo`{tee@!>``%TYZ zAvWDSs+)%@UX7YtqsdvvwN2d-bF206snTti-qaeKWO__hZf7u%6VXC1N9?vp8HGbt z$J5=q87r;S&34^f$e4|1{5Q7m80e=&PpmHW&kxQE&JTVy_%+?!PrubsGZjsG&H_mA zQ+};HYAVAOZ$}fiR9ee5mn&%QXlmtKAw{$wwpraLZCf`f17340_E;ehEotl68O}?z z_Fyo%={Uuj?4YI}4_CCBFIkf)7FE?&m*#BB1OGwurHJ`#$n3Cu6PQBtS>5cm-c_yd zm7$&vBt6p082K;-_NUj{k+KuI`&jBbOy5(mhdgt;_4`wte(4luajXgG4i5JF>$9DH zLuPx#d`UNVTE7`D<#$S>tLTmKF}kZpFmlFe?$sV{v-Y20jP$OX&jnkAUs(V7XVtyb zD?14U)*?`&hGB*eDs)t|y2JbRvVO)oJ=15@?4VCZW>wIq(@~Mrk@WIydI@Ul!>+o3 z=M=Kzo*MI=be*)8{ISB{9>(!J__N-a=8R&n#W%-gTYRcuDCpB^^s3~-GP@@5&-(G& zdQS_V>w;D8SV2wM8)U9HoOaik`_z>Ep^Rpe3rnjb<}(rV`tpdmg4g@>h`BF#WAKLH zqTs?sEDwi<=6_WPwY&oS9!h@ge4(br)-Q{|OY*#YAspuHyx;~|kASS3FIH@oGSl?L zvQoe8yKukD)zqprHiFKlW%;G=hwx4l;FI%8m&(#zU|j&_bW@ThNpr9D0V}xa)%aIb zI$i2CA2mPU{0nJmK0dxe)dY-`z>ln($ z;r!UXuLDDi42|Zd3Erx&m8GqlFWbIX0V<*Gn6lVNq%gD>gw}da}r}ZQB~ns?p8uy4i0%1Ti$Vt|~OUth4=+yEmPu8{3(w zUDkd@?w?`_J9HBkx&ZF8v{+9phcT@3J8VI~wN7Ez)oJS6^dhb2N;;{RTXB`K*E$64 z3rDqRtY&&*}9yq2oUcvD7K)=@bWqC1X%l0jk)W<5-WBYC(#rn4H5)gp#eHMmwlLJq=^%|*gMQ*pq4VV(QhHA4CGj<;!d8i*#Z8CaN#*>VcCnj~;kkeUa{LUoKxFCaoQ) z(Lz++&x3Lwz;=6UnhwM!MvN17>{Qmb?dwgsTmzkLB~jD#wiGz73hc0bFE|C9KA#|= zH}%FQ>c&Y5z*TJD-<$$Y*WZx>5NNe-E-TfAt1!)%Wc@I;ZuNwxDGGasDIMyUNiVvG zq;Q70PYHcLO=Xgv2698@cJrkun-^>P2}|fMHlm7xaZmE<{&cQtb`{N9zj0bRmpW^T zzQV7oTs0ENHe&mxQ6DI7qd0SU4;3o*2qRd`X1>(=ew})X5Dx zx$lyzZM^emtdsbk^u+xwdSX$lp7h*2CkHCqDohShL)V4hM9k+UQLP(GN-H7!C8gyq zex`xuPQ(!g4}S>0r+CyH+xIAMP9Z&+?BT1!*kA<}dqRn*FwJPGe}l-sw(lGYN1b8} zWQQjQN`9tdtF?#aqMN?wu4E3)qGxzOhwr*vb;kX_%&U*-=KLr0raiGc^x8|=Wqt`N z?L0luR(~BF;DS@~yKDN7|*TJkj*-B%s1{65$`jY_(C#P&^rVi0?Ro4iaFbR)Z2NLxS0 zTL;%Kt22(A8JiL`U$i!iR&zLxx^E%H=*c-=+h@sisygu-_#m4J4LQqB?~vXvP4@yQo0-^oki(PiH+=FZl}&W)S-qI zk>W;2Zl-vl6rbe4X6feZb)l-Mv2oh^5t8q5@(Y-SPoUZ;N<5Tdl!h|=x!1}5)E;}=RcAXJ8(<$^13IV==^rU>wwq$hX3V4iuA0>h< zuxK^)myr=p7a)oeZ+g4u^9(OmpFl8J@{{UJfy=DjAf8lTTD00iSF3Kb9|GdM-PQp)0<* zZkW*V-TPpIXEKDks>&FQ?qoV&Tfa*;TJyB^yJa8xcch+*-cYj6E7HdBX!5)TIXSNM z4C2L57KVd0rioelfI{ELMrb&Y}?h%mk5iSTXrmJ zwlk6qsS{}3<}Uc!G}Wr;Tek1Tym8$SrWokvCzU(FVIAWTEa1pwE zBJ6JdS@$4RFBV*~g^Eo9MAFafx2rt|uRsR%xpNVyj8!g>2u0v=>eO zS~4nHBgR%cVxB-_OwP@%JN(CpY3qHvqsbt-TUGivY2Dr$b+=`6PJSkbWF)!Jn=iZJ zMt}mOG~-m{)L*SV+yRH!c@XR%)K^BqVRh zq&wib)2#d0V3BD*|F5o2J6$vbdJGh`O-30SrMI;e*Y&m8c0Bi^cD-$Daq1haK*i4o zS^0dLE!U;Du-W5i&*6##L30bjy7q7@lQPyCc8<%{>0)|vQlrFG_D_+v^1uh+p+bhA?!)dFEqi$(hoT?=hJt20DQXmOiJ``9LY)@=HE zO1esvSjV70vmITir9t{Om5D&<%?UTa#`5Sp-x@^?6JCK@(Y_-+ye_agHcB_zSUEYe zay}#@o~N5_?G>%q2t<~g3s!Y+G*Mj=P3Zn>mA2=HCm`lzap|)*f|(31R{)36WvAyz zfea$wK&B|2YxO{n>twI{fk3f0YVK4T;XDy#cUe=*$V6#=30zz**pkdJOUUdHcyGKx z={=%tU83}-sM&@LFz=EaBy8m5*VS4ZYhB<>lI{BnIk4cD&H_E|%!spiL(( z$1W0V$;KX^P(?<}XYHqoplpQo7H>!m)d{bdPaLde+h7(tf+ZB(6MxWZnoX6&>|)(q z*DB~wjMmL&u~F-ZIbJ>BJ5ZM6ik)gUbdlBM`Quqove#M~lf*ebB4nBg}NN8q8e!? zVj>HOMJZ@LQzOdvHUSih8gCt%IxvyHLmO^Ea(*!Nd-Zuw>`f87{SkAwbrcIp6hiff zt7^x@FVoBVwDl9eTxT2$))(-5-O9W=qunp;*yvYT{VJ=~FI-x;pN&=5ArA%W0()Z} z=?f87g#Y@j2_ct@T|gzY^?R)mq?NdksZ}7gJW^{18>hCuy{s)%iDWGzC?-DRKLl?l zlnO5zQf3*!v6nJ;)xm`Sjm!6zf=o%-07p#e5?cL}gBtB`Nq!dTtt@<7#(o8m8xm*XOvN65AL(=C_D} zJM9UyYteSSwriu8{DkKl6tSk&09e8kMrjh@N|SS;@9l|6^W@_Q=i{`@$NUzI6|VF> zN{Rev95oVSa&%)ew#+uKZf{3cFg?f64ASokLt$^COgO2#BW71L>H7~o2Zg;=Z|nCM zZ=N18^ET^uY+VpF$K*teqc&2xaTF!LhIKrwGne_WBX+B_9vi@rt2GKHy|kQxSUJ18@{fEswY{>va~$3%JGyYfr29k%@bck16c zdf9Hh?|r@PC`@3R-j=#7868z@m3)O|u0`Iw|bd&(6~U$UMGD@Vncn>Lm}{NqU9US&{gYu`~lU+m1n zi1g$#vC1#v|9B;ObTzhRor!#90$^5b(Gy`buihHrRfjV>-l^6#?Dg3lZ}@PRD|I(> zVcp1Kiyr8xABHMWk$xp&hFzvUhIKbDi1339ve8Ac5ON73NDM}^^I8O?+8zk+GVA0S zG|7G=o9JQQO;-x!z=zz5c@^<{-AWi)tG`b65v40t#CwnzKA}>?+z|q4`eNlNfRXZK%L4$WHQ)8Sgo0 zwE~@9)+4fUIf8fW?9TihJ6Hgttrta)MqB{FTBqxu|CDLzEKWn{Cn*>&wx$DtvzSvC z(4Jr-g8~qe!NL-;BVhBlx}Y;!It5;VT~^q_HdZcH!a^(MA3%zpy!zmpD(NfkvF=9= z6p^lmDSFnrRVn4npverH%%I5(CT}SgTNGB)0sCY%@`7%@lG#4Gt*2;3c3;0E8(QyS zoo-l-h2)DEIh-3t!@^Gefe~>Aq|Sbf{goW=Op7FDAB-5amdpAhatG_BQh1V>p|DF2 zoM~XblmiX(kl0U_veatKBQ+uz9@Z1{N|y`0j<11Sd^JtI@w2S`$mW?%;MWLc4%=HL zi!p2d7Nf9k{=Kw;xt19k$vh+UMEX9C2D?jRP0wn3ihvj zIKqjR_QyB+t|%#l=^@PkY$HlM{<4z$Jve9n{#ZUhYv#%_q#uJnen z7S7e0{d|oCJ_u>EJ_(yUqk*m3cisoGsENRi9?F=l*A~&-*(<$4vm*-sUaFT_dJdnX zrOQM7ERMPl>SbN2|4`NV9yZ$|0jqv#7_|5qM&SK>FdA$Qn}>sahte?IEg|!hNZ-Lw z+2M47yawJ6YgZhmd7`)o7cpN%77HvCf^&@h2FBhy;L2rI>K+Cp6&?pq zlFhyiSR(126>L@rL1c*79q1?uBeI5<%2ZP3K!*8bJ8n5Vkdy&9Re{a#rI- z6fv$Y@#|&(1pg>!eIKW$IeEqD_akO!YCNey`?q5Uh$a^MgG!T#n1>V}I*O@Oh-I-5 z%k{Du%Iw6?)MXzjh?<)@`1%M|Z2fN100q^u)YBKp;(8NX!a7BpNWL}bB60|{!@3IM z&!_-j!}^5^fVs3)8n2d}7M6&L95t6HGcO7O>k8tJiY2gy{mtC0V*s z;mM4hWAvYlP0?$+)i!p-gT`AH%yAiSovz=pXFBCU*-y1#y_wmwf!PgMrEDEyp_Y+h-3$ZW$Ny$8H)g+M&odOm3D+qCuDCyTVF4s8_v zmEyLRLz)cEXCoqszT`H8*!|T3k)9}efv(zxR?xmMPtJ#z>B&Eo77PE!jE`0XJbxM^ zJEbz?Lu5g--#l!-Y#gzXP3G6p>XOps?99>9SjC=T%MY0{>#J9bVPGK(CmAlr@LDVu zdtE8Cwy$lsu#8`O8L={lK%5}c`pb6GjOmh$5gX((WMNF8jU#kU?6HQLb+0+w?hE$3nE@wxIvFA6~zB7QMVyoEeHQuBH-S!>tRw89F zyIi51ALX;4mfyl>Gbw7NUa`Y^`9s-NepV{j;n;E-$Ceyj?qimR?nQpJ7Zt@YCfL5$ zX%(74|FeDDa8Ol;N-078H81eqW|LX(_9$cc`%a*!#=7{V2=)|lNG5a40)v6g4t z01XUUv68UZ2|@vkl?ceW7{YVw!nCy? z+sAnJ?mvd`Ab`J#GpRgV_N#doE}<~&Z?VHb%c3L;ua)NW2qzfhmeh>}dH zGKiE|U&0iVSyyQ$NO;+GkhAqI3{1v-UXl6k&ogShm<+H}bDWf8ZLbv`!7=F`^V*WW z%|fH`g0dA}vmj?dt{;}&QQW)P9h)H{A4EQ&PP7V>>J53l4KOcs^mIW( zWkEdG-lC&N1l;w9;87FIEh#42)wpNXA?u;BStwK2f%x9dIa=c%`6v*^^D7Rdeo3P2 zK9dB;uN>7oyTltCA%$60W`E3W-dBpg zuqcq@x{}^i&v~(2yR)n>8M=s-@@eAy%xR>v4&Y%h*z7^|kj=+ut-*SgnXpUQ2Za%i zw_32)!m77h`9S6v$7W)#c5Gu%xh%>rSYMFAD@|Kh-5MzR0ebF=8}-^F_#pg>cMe^Q z_fFTrqJD?X&Jg+pQE^7T9S;~YZ`N{LIq@lM=%?CSV`D_iRT3c{J=yaikxU5%rHT=TI9ln9_p;9*QY6sX)@dJei;QU6QC|w1dx9PPU z-k*1jcMjN$eZXl0=c@we30H5Z#G4Zf18#{O`?4|fubhbI#LpT6?u0J@S5*J&gl|g| zx>4w6bp!F}L5Qb)5yTF=Q~b_2auNe$u2af-1--x-Y8ugJ)$~A7xqyDQUb~z9yjp?2 zS$2CCh3xpcnb+1EDhBdlycVY?TH-GQhOBi1Em;xS%mih!zz5d%5ZTK)kgI(;YVM1) z9Y?6R=*3Ee3NQqA=9m}0tBfPY>WV^F{KDkb!>u=FvBx{<@$4HF#Ty?(D_|c16@7ar z?3sMj4pkIxD3B@pYY^(UW7-_E@LkG|E4F$T>^}02mQUF3kyHzn_+N+p{xB`ffEMeA9vW5-D%{ zZltI*4Xan_uaQoJoSn85x~zjwdZGe`c|L&8DFe`!Uzz7`w0>!xulJ>+=37i-p5mR> zWl?vJ+1b|P3AuYhVyI7#LAPEYZ87i$tRpmE}@el^F1lN0erixJ1-N#3v0fp0!puf z11^VLsS9qh<=8A zl(KovC21r`^>K0LV;-uDR<&qv-K@mIx|7<^+mo|TDsK^_F=k^064`x9BFi|CeU^vI zA`v->wGlB>5s}S`2Vld*+LS4GWdW#Z9=Ld+EhF-ng5iU)X7A68`i# zO|AEyO~DJK*d*(2vK_TGJ;J(KCFF$1nt-h(v%kz8V%#2jMxD`gWt|!-@k5${77Q@!{4z;ze=7&BScC z{l96Ke7GeU{#P5P(1-)>pb!x>_limI(??L33;=E&UU`S^Xg(o6V~Xzp2+b869oyFB~+oK91m(zDG}-Ce|yro;clXhx0fm zqA!a1;w8|CgOIS{tHtHPM)Qnv&@IQrVjZ>Cz6}8;hEX6s#`+#jXAT>_&8rE)U3h@u(3Rj2wHPF8HLr_+u|u2h!@v|soMqnSEk8Zd`9UErc zRN_h>v@U-yBXM8Ej^Rk$+sR6^P!=M|4(TT&#@8NU-8`?Hjo1~wjxi#DFXslCbHj#H zR5!NB>1Vtka3nsdw|a3-Y^?Qbif>?ajCQZ}h|~?V$4;Z2hvePt!VjWV5kP_Mdzd#2 z(Ya9OE~}OG95vq%MZN6^iVy-|(zl&p4c#oK!g~#g9ul0wCtz5||XBmlcb|@y+~5^oMA2 z%2&t|Z30b#v!su;P0>oP@n%l!68gTFk*t&4-cTiC(g?CTh0XM*M_NA`XrI~P!(S-N zL`<-L&IbV?K2X3qpYwnLW)JqoQsvmwRaiiIOAWlUuFCW7CR}XuDqc-j>a`x<)1Wa~ zw1+(1-L|GuLWkn}HjH3W>Zkjq4e-!WA;hn0iSIXW`S*t~{JgUpYShtg%LoE=slzv~<=K*WA*ElMAxu<+e5ER>PXppG$|uZeA(Temu%&q(p;3AFN2!kq zm=?vfxfpqDEN!LF)Xm0H1wg{HMEXo-l13}ryyuWqH$7J>Xgp69ORBMSo%EOR{GE@T zp6`=69Ftb3=ONylwdwgfFVgK&D$mcnFSmVb{~?FB$0_H`z~O7eOlSLUCm#&_o;kIB z^GO&pU!)Lg-zm3^a<;FL4;!T`wb1X9I%}R0*ioufT+j91NaBu?NMeOwVtj_4-Bj0@ z_j+s0>1Gh!;oi!cvc4Mg&8Yc4=Cmj3w59_z5~=-$9!bpUA~dL*qwByWnz05DbT{~4 z*jZ@K?vDlzYTtT-qUP-5@^1W$cjLZ1m)7`wc?;yk#>sw)Ni$-;5OH_f-AMb*3BElL zTXVmwcEz1Nab&8Q-#V9uW2Z6VdwH||2KhpVBR4w8!{_^EvduYpj=@m1wadC|nCyj2 zt$A%;w3fp&nPJJ87ID86l?_lyq<-5M`#ZFGH^n*bFxrb{B4*!>glHD=IX zaR4E?rmXV`e=Jb3r)umy9O_=}HG_<;wLag>;c-u)&Cx(xabWC&VP!^jmFM&Ib z$EM)|j1Ueju0pu}b54-q=pis$~y&T*+xHtN5ij^Dv z^%7mNlKsbrMJuxz??mDQn__!^I>*gYDhiq>gCh>6y-yP!!np!os_nT!v)geY)f(H$ zMdxVz82saUVjQ{l!Fyx32g`P8jl0P*QX^tlU_Sb?kt&IuWuyvXIfW6 zvj(<2h5p+D2H`EwSwH=TECv*ISR}=U4K0jI?@X;}rSnDnja37_hg1U|)xdV^hSx;N zR_l)tW>JcPb8F@5C~uO{c@SQX_Wc-vx12+X_zdyQjX9DVg;djzhq7W0o z))<;YTY1Kqwi$lJ9G%8d#&=Y2g-5J9EDiLvQu;DVkGayNG;o{qwO{JmzR6Uh$UG@x zPCO=Jtf)bg*6_lp#3+w^Tg=a7c|p*fGtm(jE${gPmO7HD77SR?ytQ3_Bxr`(@-qAT zWfSOxaSdnVed(w}=&i-FC`!Pi=?<=yrTgx#ws#DU@R`1IyXR+k0R7~IY6mXQnIYJ=|Dqf4+{O?83Q*D35 zm~q?{FH`;v)-R{BFDCMi3*t-k>{7fQ)8nw?9TyWqG3`Ursw{KR7s%pMMe3iM)dT*M`1?|}%AZgc@ zX30+IPfbP!7X!AEjBUyvWF0|-nESBQh0Mtj(=rdU9mNVG#;RgmWP&-P(zBuAracc- zp+(j}^q7=iuyEi?+-C&NiI3TU^)U0@n#|Xx-UoNc*6NmU3HqR;Wl%dL zkIaY`kZ}eU*h+@_w{SA-$LNPRs?I`9&yRXRk~$gghBqUHqL4xmtMtVD2F!n`DBU&Y zA@L!Y3w6XoW)F{rN=O!R5%FX>|1Ypcy+BCeYqX6PttY}QV(d8A+D=AhCvAj2I9Ci+ zE_xz1LN~*Y8IN@_s1s-}DbcJjI5vpO#CDDjrv=T!AxN@1Y#t5bfti^9CyoyfXpL_T z2V8Sei{e7KzA*ct9Fu(Nld9;CL z?d=gOO0=h4Y+4Jb!Gh3(cScOi?2L8L!@ zXRz-XiI$JM!z1>gk%aITI}Ha2`#~+lD$VpAZrrCeDp|VeRi;hXLX+MU&wulyCi{V@ zp~_QZXJ}92zB_-Nbp#$k+W_m_M`OPZC+5?&W-o>zKXw6;Mw zPZVMo6>O;(y{(rJ))j>Jj--v{g0^&C9d>R#xu`p+I!;{+20Fvd@~tlHPH#Z}#D#80 zwJKsBYO=M&SD3rt(@+KWTkw{8Sk2`v+CyWht11NA9@xI&HVQx{ji8>XzDsLtBV)te zncQFSH2RmvZZP^+XpO58RW`&kpI(%5tDHnrJ71E)Kc>S>es<7(F(N@%94gfc zt}u%Qr8lQ*gBzd@RpP2l;SukoBN6k<1H@t7b$bS(TH|}1=7p2j`DH3Rgr=l(6PIL> zoLb8o5hMoHL6p-P+JoNWY5<8%Jy_)&dQZbMH@;n1k5gZVSDG59CRwN@mS3YieR+R+ zBAkSWPvs4(spUN{Y+l|!Sg;6&bFUYtQyI6H=HmrUtM0Jb+GO9GuVy+uB51tb7Yv*T zYFD3tL}TJ3oc#GNW=rR=aO>o4-~yYIy{l>KgSZEC^?)4Dv_{}AeTN7(PtHQSsCppR z-O&ueZ%;ojbgn0xqy?c1=D}`fMTVQ+(Hf7#GMidk%E4&NTj|ys)55Ur?JSdKcj|Q# z@lkkIq~gI09sUQhXE1Oi`1G%+0*FVX$zZ^K;H)*Biv-5nT~_VsJQLwR!63B8U?hW)?=-Hdlqq`a)%WG*cKqMfqu&U6`6B@bTa*hHb`MGTvKIJRjs3NL+*6oUu`f zPz-+a;yzVqgUnl|_Ft%7(MqVuf;hXE{lHCF2ZJV3dw8A0ZK9=1GTeu=CHDQBU?IYD zYb`v2rzovi+{2bQ@h4?87jd5uw$%IJMg@8LZ1vzM6o{&c7{V%n5d_#@0$C223kja0 zjv%e6ch#8!Yiyzet6(Ps>o6M6;8nan=LVmWkAUisOgL8(UDj`QAml+b0wtTWQz})) zSJ`rn{zz=D(Z4h{djmEwSX!(^ZPaMhTGKdHXyg77DUCNG*u3gne57pNGR1|dUZ|DD zUz|F?3wuqfM>2#Z)dh{pi{q#ASe1LBs*PR_05B!hk@A>Ki}d9}v5yvdfiOihrQ8wUSumgQPT z^#CeUufkXX@5DLrvx5#hRD)I=NS3K=5*W_V>qWl{rNnBGEPPs!nOv=RtGrjq3z|oz z%TQ`338%qxgAOAc(jbx<>pSsBsbK8L>)Xq6SeSZ@BwFdhWMPA9H$=OVZ%8pZ3SwOU zve7>|_N5K7hM2X<8_siH#wcItPcL%K1u0ta&UGs3R;U zDFUi^?@j0u_Vu&Ua)bjE8WCg%lxXp`R{m?P8%2g!!Sm&i8ysliZz-Pe)W~iKi$2@- z%_3*UuodHBQkRe`Gg%(oKyxZiY$9Kkf}%9HjO|Gs??vP=@Th3JlaO^YUi*R06`J)L zM<&jp6-PabbnTBvoEC@yMN~q%Hte32CG^+Hq!Y-3#Bck`o&Ye^n)8gAcjrS3G3;f# ztlv78_U$6c{iV}g2vq6cNn)6j5UD?NVll)n<{W@3DD~vmQD0afGzl}{o*aCRADki_ z=2bm;e{nE5XBgAp9!e}Kj3yT4)qV7PJvnnErUkw1#M->mWvgOe+8O_dh*2zSE)^88 zHm|BVM?!u%g)5yXB(SvQ%{h1(*lmIK`cKw|O268HNamNIhp(p3)}H)Y zPDp#QH5Ayq^3-4%J5cMD$!OkkaoPKe-}-JTT@VzuHovho{+xMvA)b$wYN|zTDK{_A z!=;ipwz8(>5Q?(SiryT8!!Lqar~p8UnO`j=uM&6I*a>7SB%*^ANS&jk`adDWz7Sx2zfof8}0FuZtes9;}u zB+1-Zal>$baBaxDuX&9iE1ln=o-T=^!RCgr5bsJ~CbW6gB=GQPFj?(4`p2#G(oAxe zKV8Tn{kWAQX$9i_OdFVjLG*L=sG>-tI9wRH1Q$&*H~5=?sf z00n0WnNK)qk3fD%dRC{TQE?y+baCD^r9)P~=SLLO6W>vFO;58*F`ox*%F>k6!x3eP zc{T1$&hc9d;0GDo(7-vRvd2`T@-mUcE?7|-H>ONK0Yq}-H>J~aChwpa{&C^2T`ni| zz*%QM45LVV0&)-tQ>Q{NTp92^7BAbrnT{X= z{9VAVs&sD53A%Sg-2258V;u3+r`FgO<8l;^HMYd#YmI#r=S~9KckScO`lDlr5YJ*H zTi?`7<`$KC)kJX=7tUgxcLwDBKwjd8!cf(cQor`?hg6AB>D0=FrBh?)RW8VhP1ByN z)SlFH0!LQ*%68G_C6fTCp&&2fem+vRBmRkKB$Xxc=k(;|r)@Y%0}Wnp#Qlu=W?q%I zCiOVHU(Drsu?a?sn+Gsw=b_S!Z^?s&q(`@$B9FqBJoJ#Xr)3nW#N~ydM4dP7PTb(t zlMfWb={ATW2Afk+3ssZm9Am&uE$q-@f_UMx1Dod;oX)$GpGoCu2*2&EynoQJ>*{3a zoZ^Vt6|5|YO|SfVPV8Lm$x+&q!JI(%%5kuSFHH)rbqC$g2l1>Ux5m8#4#{F8PY=8VI@V4ed8Ja-K;lqb{X!#!&;aj>ZKK?0ZXiqsqd&(KwQ!=z@*^8i? z#a%onx%!-sH_EUGHPGr3#5%U+M#`Q?w}Uk52@(;DP87;v74K_x_RR*0!>X&5ktlO# zmEzeP1rG74R6Zc)k)ZLcZFSRy+?rG@s)+duS#@ktn@C|03e3*a8spHy20vtI^`9bT z_u`f)O#Ei@b@NBgI_(O!s3JdE!u(*Tcut&)y=WsL6Nwiyyej-%DU2D=c!%rQ?BN9R zn<^_3*dgnGGaw`s2nTI<@3*@soU1iqFLm{L9%O65oe^%}+Em03Ncf~gPHAW7B|LXy z0XAoQ6Q0}EOJTxui@bz$6>16rPWHPuQ*dpY}NlQP&(W~Yj6k}hp_|woF2JBV+Dt3<`-hr%Ezr=pxxW7j1 zQwQya#XN8`!r~?-DhW$G7|LP$7=SE~H0T%rEt}55mQ81YbJ9bhyDkeI2OSDJDZ<&H zfCpc7z{})0@Nt=f179eoSpdWVRPk$8P4*5(N=#E;;=Ie`upgiM9uKzS z@x}&0gFt?wmMqhh0#=h0PTsd*lS2lcL+|pf>WYJ00cC2+LrF&Ku@*@=<3Z4k@6y#! z1HMbnm)Yt|r(a~xO`^ssNf!ar*|t-Y`Oe|QKy0%RQc&v8h?=9KfjzMc^aKlRn{_^f zPOx^2NbYUce~}0pm&&~$NzXK7ifEu4c5>-SK}EYd6hM6C<_M=<>z^`Oj3k*G7N#-` zxyvde%Z#-Cp}s%T3I@_;8$>*}*5a{_4bhZ5PS`}wwZ3Xg`+J=Nw~gilc5$!BBVGAY zD&t7Tcn~`6DR*<+%e&|>X3_gVDM4CAw(lkKjiS9|fHYi7ehib9a)?dYa0xv1kYhY| zK1s8QHID&!cPqsnt$usgt_PNiBC$i=EUeC-oJTG8+^^rP-j9@t9;JJwN>$ z4<-AaP5#qrU)yC(0;$ZBDYK-ka?;jB*)PXZ=Ze?K%?i!Ktb-ew40db_8Q7VV*EtTO zdUh6LWukK?5E%5p%-dPvF~TA|IkI*G{jrh8Wn3>JB}N<@nAM*td3w9`L)w-lniZ-u zc$M{GEz?Alj4g%}{#i}WSxk1qGl~wxM_gCa>p1@eM+n3+@v-S<(TCEr%<+pqQ7xQ? zGQ;jyC|j5B74kB3+(IwtKkA%G?O`f>Qqfnj3f7$OTvI!j;|gTIK$q6|JB8Jn9_vO0 z_@W-;zA>)&S=##f=tfTy!#_^$B-!k5xF6oc-c@rjBk6M~M|wHubj3;$=AMofQ<_AOs>}JJ5>u%(%)41kNIq1IvFKc1K))za8*eVg&hY`m|wpzYQxnde<~ z0>F0FV=72u2bV~!IPY^z3hyaE&K20W0xTUoB(F?-BcLgo=QC)WAQ$vR`^$PY!pZ4@cA({mL4nip57 zdCG^p;&{{ayb!lpWN|AY_dYVga-|DRmxFPw@mJ2*&FX8R`r5DPFlu7wmpdZSrh4hXG*R{@B@?OJgoIBda|NU)=bHI zoUCH*`Sx;vs` zPpS@9wL>DBnYNtN0#XtqD+Z<19QA2O#!3`2H>av3C%Z1K->_Y=GO9r|_0?TF(ug(M zsfVgD>2Z;^IabF9Wh7QDV{@_5e`@_9uF=vT!SfDZzgBP77YHt~taOO48%DIb^uUh$ z`infoEYMh5Eqxxb9)of#dL0(3HGTkLB(HK?r`|5C7LpMKO)@-WK;T8j%OIznZiwbB>UnP8=V#ywX^ z#w%pd#G^D3+yFp;7Y+X%**j9Ug~Lnk%jW3BS_}vJqIQ=_yHuY?brm}Bto2{Fs__T8 z>m`%(QzwTF&)35W3APj?m@{JQo40Vp&ghxSY@oCQu1}i%Y^G~yrc>?!%GwSUbZPtE z`JSM$UpOC{HJjhnCYC-NJ=cy1Hhb%;Dq^GT&FVg(_S`i`KL)?`?}%Bdy1Myqr4=Ft z)m|;AP?7ZW#NlI?Tw^Wh|f_hvJC4dygPAxw|6lgr!oKdcOn%DRBs|th9xAZWd^SbKBpPvt@oi4p4n^m-7BH#T&!dE0YfwmPv zJvr9_xZ&mt8a@SddBG5X^FI&lR@2vs84pvpH}Kr*=JYUg(t6T3t2Vv*z-nBnO6}NE zd7O;h6zmPVa$?uX!^?4*Sy;-w*#D+hP*|`1P)`;;LRIC&r<+@dCU=5$4=m8#=W_95 z9$r6TS8#2ZQPdPShq=FYud1yz-Ugeq!-aNd#NHAyp792bt!@mP??z0FA2Vkw_-1e$ zFc%5V;5y)fhG@XskZJ;5K~{qJfOyyR?QP)%$eys(X!`_~u7!y9`0aNY8C#Pqn;O9) zHV(3XM>dH7)_*;5Za{8E&zB~v(*;JqJMNKpY=6-}Hh^_{2F%S6Fae{5=^|BJ@5~Db z;0P59g7!1|nqyvOS9?e&k39|Qw|(EGD!0KUe^x5=>4YiXF%YJxZn}qQ55!Upy%(K@ z<~L{lgng+3LFW)>Wk^rl5&0K-bTpl5L`;>+E#Q^(V$QsaqM_u^Eyz6-cq3@0gW47Q zgMs~Vq_Bar7K}V#VNjuQ?ySq&@jlx>);I}-OG)PvYaoGb&st}{GXTOlRh~YW`8{XK zCi!O&8%jRv05ItdVe*_@YgZf(29C$6{J#S6FL59%7jaI(AhDDH&{8WCD?)$#0*U1U zif=ejaG`mbg5nn$D88S>9m1==H>n7{S z-m<4;{-#Kz1XZOyO--#9yrgMw?PQ#+F}XR?6Uq7(IU_p z*UZ@^jji`;M$ZZU{z^LEm{a1HU~O|wvH0%FS+3Y}66jWgl5kevkUa$Fb1ZQfV^SBg z)~s7uhAeXr{66iM`zERZg8MVJTQ8v1(eKDRRM39wpb=*f=Yuiz3j0JdaH)}79jJ^bPd-8#dQb7oZ4CAoR2{*B&Yq;uo2y@+8FZ| z&34nQ-JV*`uQN$pq=D`8L=KVU&RjtdF$wI!^$qlh=Qw+LyDFS2pxOY(1!G1jS^{~Dde#<9}X zTh;FEOqiNIfN*GhA@?=5i`;6IJ_CnLzdCeZm;2I%{XJa@R#BtYy#(Fi08_?wT%6?G zN8}q53FEtj9)%%X@jGF|;@92I{Rlhb&r_+EN)QjC6Sr;n9EP5^1?f3rtY%N+B&s8Q?}lkqvyO=}aXDxXS++z+i%7g{o)&7W4e~2kZ8xiz11ICtT@a)-*m*yU3z*{=Nj2(#97} ziWm#jI2HEQwIMUdP)B#a3U7HsY_^}U<6QPH`N6RFKJh_Az5^He)_fo?j;zw zh@gUt2+okp1-!bth#+0e5xU$yV6&)&Ps#-YBe`H;R`bHC_W$92fq$`YA~b*Ib^&%F zE>!r`?E){8MTpQlJRni6ajSa4eYlkuxm}>fdS;i%iRaJzu` zVoHGjGV8n4Qnw3;Kxs9QN|dA@uvYS-CyNe3N`qGm&={u?;>Uo9I@p-VH65YTZICi} zv%tkpyYUL^T;4+5EO0h%kkdNyRjEnVspJk^EHGRpP8A3?|BsqLp_1yMJD&4*Matnt zEF})9GZ#)x%iJsQC@{dU(;I~T8|sCze8 zyG1AOj?}ipd5hImMY>ma&++yK-CC@WV^ufTU+RxU-Cfa&ZQMofY!^9?!vuk08i8-X z!H3;e0@8Arm(o~<@<_EKL~0Rf_nJq|Lj*lNz@F4CYw!}rE4LjkRbiCiR@v?34oJWG zQpoHQk>Cdit{Gem*+P}w0L6@Rhf`1;E(NGG$tfH&5ybcVbQndp_T|1j6XbW!L{L z5{)Z8}}E{XmeqjG2}{hcnqYd6KY8b0_hg z==3`dGPXA}I?Psdn8MBJeAdt7-HbEn^~c8I9Jv$g4tHbS&8T1>TH}X8vj{AB8kt=EsIb%i8orF&A`kcVoopxh&F_8Wyi|68R+Du~Bt( zb?es2VHdX>%N@iYi|=tk^C42IYA$M>dxn28V4+DGYHJ2m)ms_?Q`QmPV9OA-g=r$63(u%WQjm72$7 ze0Ht*G8#Mw+($ej>mYBcEOevu~(tx*WziE6D$ESpc{vf+36xm6@}2>cse zIlMZgm2b_sODzAo8N^7&sr4?a^S{NB;0ipkzgCP?*q_f)!xi4F-BV2~rw=afrTkX> zMyc>4D#&IrLlOydA|~`vLP_yH{^J=CSHj2YcmO0l7;c>Yn&|Iv?+l z>vkfjt)1;H{nm_c#XZ`_yGx4JJg6=*iBF(6Z_Ec&+{x-f=vUE9TBt1{aBB9|UhPTc zPM6TqWAG(!HF}DT*5ct;lo+>qhujjDJ^YmQ4HGKH`Pw_5EA~aH8T?~>3-sDHt~}`s z_dt|(V$s{e^~YItTQS?&iArlGFPV!AwhUv_ve~YhALlLLS&Po88ISOe#h9QEBIf@3 z0M`O@!p0Spjmg(R%Tr-_{P2I?6 zE)41(~C3dM|P)!0etmm?S)~ig9%2R3(F^1wW{Mn8njlaS1+%r9>fqN3|z(K z{=R=hJz-d{-7od_&M_O+kYKyz)!77>&jwoxgh)c=(0e0?hOV{I^5MZtIXFTc6&riw zw|NGeM`r5;xl}diekGFpYEC%0xG&TkDjyzhJP^A%TYv_tXdreCUTrna1=(!s==Nr+ z^h=ehU<3NY`Pq-uxm4;*qRzO%I!=WnRFyiHW~T*j^4D-fM1-5JtoF9gen2=YQAFTa zubuxI(M-*&d8bgITl>y8c*QKbdo?S@{T7|}%k0Xa8??rY_y{z)TH`}VQ_NRUu;I%E zVp=Kp=A}IiOUk{+BDK$8)R8}k=I+oFVM_(da~(Hk<03&1#-SPGwZ`}5{nBS*Mar2J zqflxGImm35Zg+7SuwrZ^8P1VQ5DC}WlAC^j!+_MUD8k4TNHQ`+y9F{dCsvzAGGm;e z#u(=gkngQl`$%2Y{jbGtVq8b=v+bdS(qrQr?q5(4J3Z7qIotBu@Pg*h^x^41gumG~ zLO#bm9qxj383g0>q;AW-ZYj=ae5BQ1(P~VS74Lb3SK7isHX69o(!N#5GDx#Z2Ju+! z;43#hTyUX=A2Roa%ie9ce=#0PyTPnjw;JVq8-LAScSGDubE!Wwcy+pv){LWh4~_-8 z`co)iZ`Pi4&#L^pYxy-?9`v^Mj?mr6@zd()%APv0vU4At(j zlsp@LJ8IrJH(2)iZVPwX8nZ(rQU08rcoxcEdcl^v<(t9}dPH=#eLW;#(FgD=6>zsf zIDvL^Q4b2+%x~KEl^H~G;ZtYW{dQt?xt{t@$~5iSD2p>zgd_f`|0_W*Rs?y=AVG4t z%HK8XhbGS_vo08TCdL7=8yzxNC@&@Q3Us*`VdbO{=6DE`KPprlAI|5z)PK>f(B?mR zX0er_&Akq7f^qc0Ex8%ueBeGsk|S;3$M?#c*7PF^K%kCr0}ai)_p?MAP@}7>n!lI7 zdO=|4+Av(oSqDO@Yr`)ONmgZNw0U0nrRk_paq&R?IB`{@)0Z$+dgo@@3t)h5>$|r= zTY^A(e{mIo3DVQ4>B4N@X33L)Qjh{&FV?;#!cF?jY)`@;2I#sF-*HgtpwJ<0CQ!(r zCh$qj8$mw%=D#z&$4+AIcnuGmuiL)VD#)|n6Q5xHmBSKeC$hTKE1cSu3SyTv`tOYA znQx^32l{xHPpNas#I7*jdXyA<%&Nhv(|=2ObuHwAfkV6-uFu@zi&%j9K{m?4T@p<{ zDBIin-1uqOvNv8yYZb2&czwn|v#CwMQt_(njX&otF!Qc=WpCs_0}^;IYWB$`tI_1l z6=V|_hAi+lcTDE>u^^*V8{WZjl>Hmc~ zud4Qj{MbT9;iS(A8eio8K7#Ij)>>6V0jP_R@5p5JLX8(S|R^)bin<3&Qf2Q-fdM;3B zw|UX(z7!dZ8;RvQ^HOdplAFr5@OL~{6k5CSHg&GO+N5IX1s-JNK|#jR1+l7Cqko|# z8Q)Yv(Y7l+#lF(J3MahWW>{jb_GDYyt8Ln9O~y)rxE9YF?oQ|0EL|rSp781D7ulSM zx@KVJE7fbc&mV907pvDkYj3xjm=@zQECfxjKKNb+r~yl|V>ud-TmRo;y1(qibYB=; zJ0zrgB;B%g(R2J1iRd2X*q#4;ne{PijDW7)|A%mHWz)&}hbyr!`G?YS>T@pKEgOmH z>1g3m!MSi#7aUD2{VJY&xk!ymv8psU0p0NDB{<#kSTGRF9VNAp|L0lZA7gh`7jv*A0o~-iX{SMpf8n=K!@o0r=sbuuu`oJEe|29ViRx#awqL9&lx8u_+ z@!Yj4o;zRoQGeXIi`3{}r8TwFP|I1APS3TwFd@mG$H9KYK0?Iyc76Aev>!wW0@k!E ze5MQRt`L7kCm+3^Qisd7v+L=p`)DT{)O}zesC$VM)QyI6@4~!mh@_fZ9!y?yn2`8u z(pP5#xewf19UhTJHg;kbtv{WcK^UYUo;1B%{6j;x6$VrC2PFkTPUyBduQZwo+P32P zLLY@I24c6*S5qskaR29)fq?C?PQZ4t${P}}t2&wPgk`pVIM41Y*2O-h)C~|XSs)#>ramEx4ajCWvW0r@? zme6R~dlbpWX){LLlK$+s`iXI78+uHIHOn%e%O{D`4wd??3y`I#f>bf<52 z4x;$**dbn0)ln)#D3V@-my3;s=YC4t$DD5SPBmf>P&mty~Xa~TEJa`D33TGJJrR1s&Z z_V1c?L*r~ka1bY=zdj^L{aLA>bxoYD2pEG>_M&#^BND6RcWLZwewT@v;P}e;ql%TM z9|<;8E{hkiHA=cL-3(_aPJfGEzq&>$xK{Rz1KNy>yCkG(g6kFvTN|L83hX(Ot6G8mRfCXYg@Ff(rQ~?S8!`sgy0Ie;ZjYlZJ!vmu~op0{J-bk z=b21Gu=ag_{q^(y{vEhE=ehemcR%;sa~WJG3uH(gFOV^Gq`*~lOM&Q4@c?B8DwJ03 z^E~v7o{p^5r?NCU4B22Yb6441;okU+RW3_dY|64Xj)v8u*Gzi8M>!<(SESc-@M_mV z+jm)kQTEeDaavkCyd7 zcv*PIk9h4jBY0cePdGc}9;KX&9d}2j_*L`%%+uBrKZV?~qEEJdrX%T#f3_~|^BKsH zQV}5)#C$R<7*~#pKO~Jr#z4;bWzeO`-$S@|jy#?gxeMg?IOlfW1F~Q5t1EH4zcAZ{>yl zn!Do*d3B%=tMID>F(0rYOw}909JXxPlvXx-9~{;XHOO9%?u>)z2w<-_*!s!+;Z5=V zpd@TId-oBN?HBrAjja{z@;FKM*v@W`?Tb++FFIgPyuTW3Z5a(G+DOFj2*%c!I6gm&sPu)rv`%3$%p8J;WdZ_xb#PsWZ%U97u#ii?3=^c9SA|t1)zbi1= zR^vw6lx8C(oErmNGnh9hBVC$heh%Td?&{Hy~(g(7P z8mdwFWBuQZSWDA|mt;46eN?WafeJ?JQQEO6R*2L+!KbW-h*{wX@CWN9fnspe^& zRJUt)wh5y_vN-|E*1B6{0Z`#tf0^t{v<|1qFnJhi-a&`c;TV{342w&{bAMY3u03^G z&2aV@={iOUoKQQM{YG|E)r&unHz=}gWmfIq5lvQ%P%<)Qi&VsjV%Z9_E}1aa-q{^( zyPU=vsV54_PIQc(K$q15N<-_hby=n8*ksv%(@YT z`^ywm-NQ`d>}6~PRc0SUpRayGHsLu<<+89@y+-s?!Nsf?yHxfyLf)^pU+HXY-dTN- z_MM&ZXLzQO3aXwRX;akGP)Cbpp3RC-QWb}isyJ5S70^JnZKBf%Da}qtN9cQ;J*{Gi z;B0#SJ({Zeil(Z}W1e|DJ`xyP-J7DSZkr#J9`vH9iree9rm7dTG9Z6gRh6g=)2gbn z*Z-OJ&t6a_;_QqG=n~+Ag9_ACWp9|!_VH(7Jyqx0daAxp9cCUiYN|Z*j?(-6J+xFk z{vuI0TB^$MuD3vd;ma1=P zPcKAz(&N%`TB^30#)O8d_E<9(%Ba}(?x&0d-L+LMZTr+%Mrx~CYP415X>C<`+q|?a zsZPBQ>P=gf-pssg&1R#+u+gQh3iVduUC<&p#-!bgwkkVx4539>@kFYs3cIPQdI(tp zVVCt#RaL0h(pDWilrB|O!u4I%K2ZY>OJy2u9}~`~PTr`ik{!^m@6}T`Jt=Gb!Bv-Q zbyb(>ZPj+6gPqyMB%qrnc`!<-Bmi;BZphQHfB`{vL`T=La-#J}PMN@&uEm?JwQ4$^ zB6MA~?~pnBOI29)Cj@iQdkJlEV4@AmC`Rfhv%febwtc_=!O)Q0_9qZgVRc9>aPo+j zs$NxCJ%o=Fs<8S2ju9%XHp*u?bTCS(zA2w<%I!}Xow}>Ax*VG(pV#=F&xd5%=$({_ zQj0gOGW#E+!b)=~tY&sM(5&q_hI6BBimj{O+UNp1>Z=g(^E4t|tU|{)Yw>F#jqcj3 z{B5j=S-a>hj=$|`omEkX)vNX@z1v|SC=@i>tCqCM5lnc~gH|kO(^Dtj{u%96i;2|T zevw4oK9|3)_AIHFI9M{Gy=tnXx~f75<7{}|HYGEQieza@v>`1RCd))kj4stxM}=w# zsrF&j78jg#ycVmS{w^(6i`GhKz5PU5tgP>F=3=i{&%a4(v@<*Xu3alFDHqJ@ygTo2yml~HLyoN zi`qP4NBeo%JU|@U`-m$U#u|4IzHmkPN+?rb4zm^~w@>OpvOs|-EHhf}gz zVR>kJ5Cm<`uy(rWkvHKW?JZ`&@x_imzSujX5WtEk_LEMrO~l0BmQCN{9-HT3WUA!l zn1jKO{D^#Ur>(O^;^oMCeRPs=HaFl82l+K3mKgzOurL9Q@horcg_$yhIQ#Isxp zle>zYDHmUguVSBeTdmXpNL@+6XqXZI93pA@MAEIZ{^duL_x(md=SX3igA4Y&y^N2zwh!*J33~ ziMY+t82jA)*pPFs297w$X+3=NF@XgV!EG{zp;Er7+7+1OFaAK&LS)UKe@4g=C!ye$ z!oqw>ri>52ujQgIlABaW$@`mz&yl!-4-m1|Pf3(_ApVipIPMD4;qjrpv87L$JEw*+ zS-s1~cHI}uYoxZU{f#258cG^O&aHVSMmKodVKQvjKT>+(Ge}`ibf%m`1);yqTqMj} zK4T;YveJBJqy~>T$OjYlV&yNkq?F}P3yC_Ul$<%DCWfiD#Tqg~8WFd$xb5@DuL(~1 z^#Sd1XQ4J9fyanAOAL(WDuY|}V&^7XKfI>16UEp^Sn5%7Bmo-dBqN|nn~+=h(%<|c z*SZY-AjX9HRjDz-aiJ{lEHCQC11Ymc3FtR#w1Bu-D(eRb_FI49+~XM{lkO)pkT}pC zKu_mB&?WjnQ};|G!{3cITyWwR?46IxSc$y9Tq;6>i7C$?+O%2POX#T?Gq{h~bbYgY z@!o}8@_Wzu=H=!X+@nR9SoYa6S>}a&Zdd_mALaw;%-CR3USqBsb!wk$Fd?$c(z*ZgJO4CKn1LyvCd zE9lu1~A_lJqhsi*}FsNpRhl#m^Aa2vrXxGMQ6#e}ra*+570)b|b_`z@SL`P^QwqFoi zU8V{Y$Qa=!bX~*{L2XiF&sz6NP%}i-b`23%jn;G215qjF~p89@W=ICI5n5pk)Jv7>LOEX)$ zki~kaGY5aXoV_u6L!7^Jujiqu;_{sJQm&pI2KMxTYgWVIz%X_Xzs{;V<_+}WZ{Oe@ z5=q}Z=ONMoPvq&Thar=v;g95^E|c@ay3D>o9!uNR{-L&)wV~V$;dP&xVag&`kP$ z_QWlv43cHmF747h0`quh**()6IB#a(z#Is2mgfof3VxwZC#B$#o{eO9moB^nwCT{E zfD;7SC3czy2<%-V)nU>>kWZ)6HV8X?$%RW%WATY@# zgvUbDp9A9=t(>>9Trv0TWoUb4PwYncChS);7D;;>F$&-Q##yfk4;6t?D2uLk7}N4b zlwa?i;HJY4bxxTcm#uYifH@l`u>OtoXMR|_)L+cGu^*K~wHKil|3iP~ff}ayr>t>L z;@?a;8F@{-AsdcYPbc=-)e2(G)&*^xHIl6OsPg9Q#t|Oy_Gr4SP=W3y8(H1xPrNqB z;(e%vdTC&i^)%?76gtFI%$cz)EA^y&IE=j~lWGP6iUQO92R_p)p={nyL30CEX?oJ_ zOzB6o%#2jzMbg19KmyU89ep|m9bAI3G}UXPityU#g$26XC&=a9pVo@7%13(s{2BIK zHE73y+4NSv%qT}uD;yClb`E6}I!o@z$lN8>?B#CTw*rK1npFqrU9X6ql$lUjzea|; z+=N^56~mcZc>YlA-M5e)V@kbr|-c!U+6=&ZF_U9RBW=FR=671 z9?IIVc8R}nZAVVSvjKPG+M~XQliTC68%vL7Z)9x9KV&^JR~n{g{i(3}waCT#j$rbU zJt`}XA!J6*p+Iy_{1>6;jQ$MR*s9q#W*({j_BWW z*U8zFY*btD&oOWvAo3VEJJiuWH0$slcfd`OiX`9ni2!9*J8~Hvq5MLgL2C9rP8IR? zRdQgW{23#EhRPpL{U=$$hMdff&?}x>c5?n7I)HZC&`a%coQ<_dgF19Xj+6|+v?ogovVvn4w9_vgQoKGHGtTB|qdh>e}B%|#|&{rSa#^c6@@d6V~_LoKT zJllS5)g7{4BMwU6+L`hWR;=}YX?+W;y()>)wBPQ_d@|U_SND8YdtXuU5CiJ=hZePl z60AXWgwz>+jXk8vuq~#}Tk|>bM5XB7Fy_6}V&bM*zSpSBc{hsx* z49{tR#q|rCny=yGKrob$gF=j_I<4^t>NMuGNUaXF`jEkO8R9#TPewX9fozitWN52u zTJ)mH!}7+pFIql!oDgKl^7^$eo)k>xVnz%8zndlJDxHDd#4gjc^;9d24J__AL3I{J zlZ8j5M{ienU;npYQYh!pn4Q6xgb&-J5;~~#oiz73vt*SSIF;=bU^HJ*x;tb6M)4J+ z^j0fI1xI9W$XU`pWV^g+XSbMmZs06wkCEZV^kjs+XhS|8pUV!dZEjrK;#vPwu|PtP zvNn&|L5wQP(;#Akg4PA9IrdpEOi6vWp+=C*KV6mVtN%Ras)_uKY_0zn>GhUb$C#XgCs79%uo<^bz9l^Fg+6P0 zkzCA@`~*kpv>BDG^tbF3Qb<9_rMF{F)&>~Y_F0rZu!@pzK|h&4)t8 znnHOR{%$OFt#?c}1q+_jCK|6GhUD7!xD+jvkXyW)u-rh5ZONIi+sZsuw;49LvgnF# z&B=W4y4Tv#WxlrAZu7+n*&9naF_1Ryt9$1`PHihPR$HW4OMwAJ^|yYtp<*SF4w>HypQ?1Xw6K*2b{e%eZ(gGp%9@*K#HV|)tS9v38 z6?#p5M|NCC1S!lD|lnbb=G&6jm9m2FO z|1J4Hi0IFlx*AaeiTaCu510{lIxBQ*GfpBn4s+^x>$~C)sY&~WX9J%sWt|(I z`O(AQXphbd{hr&M8Dp=T$(1-6>m=aUbS#|#9c6xGlv&-QJmbrwr)avT&b;tHG?u8DGWYjHP3}*Pi2Vsu(+#OQ@>`a~W0csd14u&hrowoz1X4+WRq3 zleJf@EnEf(wTLd-$C35yd@_^JYxa5`-qW7tFPd>+=# z$Mg-{RW#$c<&Ek7`Z(CQdZ+XX*|W}=DJ7@*i@0HSi4;;R=HpEsvsrT9vJUT;e)~OS zni0MsSORjdIUxE55;=Z8*e=0IM63T0*6Q|e>AhI}K9_$+QVFX&dLe6Bn|IQs>wJ-| zBotP(xeKGU&>Rd56gi-N*)SN!(YXULh!u=7d%Hr}#+K>PArA>v$u1f?S&g^KiAn5o zIWf7cHD^Zgpx_wUlK1gE1OcM6GfI!@3lkmoA%Z+hlDhBNvOp%jXDb@>}V@1N_D7B(R?s zdU<|rg)86f-V+^Gk0$Gi}*&?0`6a2LTD zJI}x4-DL0?;FE296!;Kh9p7*`xE-d7i_XR0WBTtG`tRrZ?`Qh&r~2yHO~#8%uPK1HsL%_q6bS${OZwaRKaA&}0M`Jw0AF+etMWz42&;qb&| zAE{LkPg^VWqTnk`!Tm>ITv2co4(6SioSWHlHIH(eLdW~Vgwkby^HIC(!a$UHo&iwp zjdsdkEMuk|bp-l3<=>SI=izl3bSfir6Fy=^e=-CRHJ*W)p`2=RM8;v@a2N}ZiNTm! zOOUeYt+begR$1P3&}{+ye^Atu?V5*E8p#(`m9y< zb;&1akruWdkk}f=%1SC5Rzx#UJ7+W8 zWRbxP9OV!KG~Exr1w7AiJJa~w%%`X*dl`4H)&cJVs0qWhQ%12|Oi_Q6urY=k4K4ZstiwB^m>oh`)LT*Z%PWU>!~~LzRg8X%B}UY>>}ZP(USyDH zc-Od#!V+6$3(r@!#>sM<8`HbAz82EZ35W)lzl$XbT;%5&$#BjO)Y0eSWpzDUBFqad zjF(lI*Wc)C%@Z{)q3n3>IWL6kA$nbW9atU>zDQyt+rGgl92wsx&LZWpw3-LE5ux&= z#>9J4v*WY;>vq)fO*UXrwuz5zS$yY(5>0w}o?U%0GXLkrCre_feC8&LU8>l5#V(C( zWr=;O*jr+6GKK;OY&*pEXz*9L>nuqD=@S8-ddZ~GB(t5$Jih$UU{h{1igCJEkiT=E zQ%Aaj{Pk^75tXDX2)meYB{>yT&{aY8ZEm5dCY&o6uAn$mK^*dgllY4DlO2ClDA7T} zQbDQIMY2>7gd1d%@gdCEKlqZa9v1iA%d6{$+4E{sKh%X(OSqa${p^USpFBG~q3=br=F%riMN739XU|CiOzBh-&#iTr zmeq48*KJ+%HR=5qBwODwNUBw45U+K)LDH;?4U%rtyF`QSssIASbYpqZGCZxPJEU1kw!v7Gs`mg2EpGj_$I;k8(hX0Yq!BS3%7<|9r)doK#c!|MV1z%!tOYl5{cL<(k@S}oH zGq`Yrtu%wX1s`s3{Qyj|!BfRP#^7GTk1i1+m?vf4Gq`@yrPbgW;^#$!%fj1gF}U1; zwH`CLJP2cLHF&k)KR5U)!EZBoo!~bbe1qV12Hzxjz~HwDUS{wz!Iv6*i{J$Y-zs>v z!M6#XVen?bPd9jr;9i687krSxHw*4I_#weRU#!dCDtL#%Ey3S0c!%JJ41QGbXABO< zR9VdimuI`J2MnGp_!fhw3Vyr6y@GEtc$(l122U4!mBBLvuP`{QSY;I&+%Nb-gBJ+y zH~134XBxav@N|Qh2|m`~)q#8tO_fHx-Y=jmH!d)QimkV-sy`(y(zG zn-3RBu`l2S!K7n1=xn}aY%;L<$k;q-j?C1ieG>kSq|d7-Cd4K!?{Yxc%Leb3$*yqKHjM77v|WJerfgMZ%CwH-dc zX;9zg>)!74EMNEOQP0&+vj|3sBTZyy@OQb7INRsE=!5?H4hn|mx~V&J*Y67KZTI+x zvEe(^xeLytta8{ek7tuS#@;XwlMS}Dio_aWRp#ELByibxJkiatelP`ak)V~`YSWy3NOkh&|yL|$KJD&j$KjJV1E{YqKx(^^OzN!8*cc6d$ zX9M8|1H0p*>bEuoQ~p zj8IY|M?0Yd@EE+I*mdC1Etv<_p2nk!T2u24n+brBN{gG97m>yHhLV=xsr?1(RnC8M z8)L?jvp8~g5`x>mbK^PlEsjIKCuxPAM@MjbY=~<}FJ->P!&PLtFIo1iPo)XvHR}9k zzU9$u$?Qg*%eF6M19?>Mfc>7?`~A`TQ2|)fU;JD|-i1}v96U+$jG8WH8hyDYSKOvcxr9gL-+`{B zrr}5Rk^b`&iM26S6l0;`t20F|H~HbfH}T?H%6-PMSUbKcFR z81cflrNl=)>t7PGG$sAaFZ9dT^pfu7Y51;mt)`S~aL}c>LozH5*XTaSUGu-5u6_8m z4>)+S*Ai)G$|~_FchR3W?#W^I<=TCTohiwVzZDWsV{9s(&}|)x^$5}rqz?!>{o^Dwa$C!grV3o9vo=$Lgp%IBNkB(u z%IP|(R#C|{QxZC>^JM|BSK;yb^eb?3@h3yG`C#LJOf0_67x5Bzm^%VUW1|%yg#(^Y z(mIJV^ZCFu-pvw$G5nm0T(4m~j>JQm?O|YN%7eBC_R#YB7=A)YBI4Yc@*~?NnQI5I znNW15z0gjY9ahiv48usxvYph53A*~8(9C(zhxUuAG_s-p91ME#!0Q$JSe%fv0pf`Iy`k-vUY&tiPqL?X zvbdHFYS-%QRTNw0a;_E}ofZE#A@+KUZ!$4dp*1|c4o(ssj&>wkjNm~aX$iNMcV14@ZI|{H zteO#9yn&@U{r+j|$KTficN6^epS51~xY&fSu_`(9-m4Oc$sEe1%lMrkgUjW+tc!5e zgK{8^X`#jX1dbAKLcU~WI1ZN@hgR(%0-TSU^Zzg(+AFW7aED6TPGE$v?$2xWANhN3 zW^=8_`jB8w;_b6g-wYRiU%+k67$s$3wB$Xs=d4%s)FPu#V6f=L>+hd{RBmFN6nK~Q zA^ONfNwq$`Yr+CA|pKr0h>E5yX|AZ((`Y_fSPl*yW&O<`6hpr$o84=fePl5_C zaAEblI|_9p=={%tjKW&}Qy)B05hJb3$n&TS>r9<>y=?g_8$~(U+kv0F5JIzmL=C|Y zZ)J4f@p-JT{x2itfeVp|Ey%yJbBS+bz>^`fePLGA;jI0~kn)bwvfi#>U*yiT&fXvT z4rhDNs-1*Z?WeU??I8oHfTyh&-;zr7G(5#-l0>GH$oZj|R=mf_>Gl0sTV>q8Vl3wn zdnv2JW@#f$u?hH`amgUb2{IfW&n>$;Q@%~zNn~pY1t+^N;^&?Q*%BichZ7V)-sAVM z`bpKsGH=pT&i!vuH0x=%)GL8)31qNbEr*FT7eaVPc5%> zpSU6JKHQejp@j%9+xp|%wukSC2Lw+t^xt&FptzLtz_Eqqf~G!ooqABDH)4e{92UxX zMrX>|0LWzQKOtB?ny+XZb^=4+M+5=f4>c;9Ej z7tu5vdBuH+=f+sr}mV#cafb!(7!3=m#mFD z_fnX*eH*epc{IzneS5Rx3ZQ|aZ|1dqqFdH!WBEMP_8uSFwjBftUrA^ogl_n>2W*^$!WUD&UoL(n6bH?yJyA+6E+Oy7Cl-d z*t+q5LmxrcebPxks(H>oiW7E!(|QSy3YqK)OrF`)cT>_IS*7|zi958qAz7j8nwEO^ z`gOEPNKGP&=L73boh(8E8x%Eb4b zzCsCqKgN_WpON=OB|MFS^ekbfl(0Vzx?I)bW1CPw`Y4B_T@^LCdx;WhZE~8UMWaMK z%03I?P-P1wuh|pXqop@jPoOUXq#rLL1;pD$P4W*WphWe+QQnqt>cn*J%P0?e1f6Rp^+8hqunvz;&Sx6HQKa3hu^Pxm{_Jlp?Umh)V2_!_b2+z(u zcHOpiR_segNsE@x6z*V}0y7Ty&>(SrGz8JD28qn_-zOuCpD~#2Ct1kRYrW2tIXVZ7^q;c=qU}w6z5VCR3nEV6wuJZbuMb_Fh^uaF_0jc?m?bbGyY)f%N3*m#X-rb81yl(n$b5OyH4h^jj z?;S>*F8#NTsyxwu`zS6w^xr;oqkHS{Nd33A(yL}}@yzu+)X;Z7uD%@>8n5(9>nI8; zWWMo*T3Et*8j8u8h>G9nHgK8^|8CpAX~WxX*gzIUq%yV^w8t3upxNUace9#R_-3US>Dy7DPR zH-)(8{clrsI!>Z{|SY-y7{zE zl2~;tT?%o}JK8P^aRFh4xZp84q4Rh&3#GaLe^7{f&ql_}6Dq_-9x>@zw!oTrkqU9s zhtdxIM+$LoB3j;6PL+6iQ;54@oX!^J)DhX;)xaF))?PH z#uF>V{p6=%Li-~X;(l_LPRdb;YgD_+(m1RU_xThA%r=hJ8gZwykYvIM#QW-x#-WCr zrP-G&$h~>GS!8~hg4|gsU@Z$w;;*A1cN5oL-cM+6tUJ4cI~AQfkN}=GnIX}UEB2_!we3-nJ4x(IQ1C9W+|zKfKvd)o z7Kn=6egaXE+eaX(9OYh;s5dHBKPasgRLU>A}1PDexrbo}5QDqzeS^fby<-qp+v|cr^tiSI#wx0<1w^RUtBPDx8gX9O_ES7s zPhJ*YIbNG>tH}N4;mG?&EYL;JRWuG~upaoiA1cE%;+@V$9agpqUSN2^Q-L6iU zbJBmXKT0Ncwkei{jHg-6x4{Sz-MCj}&dMaM+RARaakH`NZGR*eT+%3S#Qtc2eh0L$EcL`h|cCwTyo7meir45qW_ypeM~7y_JZ z!o4-OO5no44Mw7whm8*g&6N^i6-SLi^G4f7iHoo3`o5hAKhi0$yDG)Hg>ww&z#wln z-Dp=k3PBe!lIOQtcTY99OMLa;9Hcz!g{{VA#ti*NEh@III$w@_28a+m&$Pf=7e4g2 zzD+Ychgi++4r?lC-P)rnq~tnE_!fw4nd>A+^}7o%mwhrZr4v)|RLez(rprgOeS6d= zO?WMLNMwkL2;H`bZ@5+L_4@3MX8XmI5|qfxsj}$AfKM?%H|l})Yttw(<>zSf^}rqQ^MA}coYYVK(Q7>GhiUuc z${xCjvd`w&MIU}pfKRhb;XMsMXINmy2i-}^sUw=|1pn$$98FRi2rB9+R;a;6~fxl?~TJ;rMl$xRda5T${3Oy zd3HcHr@kNhl%wU)@8x_Z#hQLecs%;xTy`Fx5_w)|6e>%MdX`6KVIhaWG3nCOEP4Zc zd-0UnYP0|^pHUX&4^3ZECd?_G@4IEMKXdwgzJgU;s0@9;twqtX(*89#du}e1&FB~W zxU)H|w`<`#p%2|cPDbPn;=b1QYjjo68JYvb{1g7l*k-L~rzh%nWP=ro;f$?0Xia_J z-#8hPuJSide|3d)9@zT7Aa5Lph|XG?eXhijZ9Vz`F*e5TE`nKf_5H%GU%lG8>pso5 zueQ!u;?O`358-y-b@osD&mp!Lj`!Y@q{lS*-PTEUI?{PM<>mmKq%`PIU@{W)YAs0C z$Jc33XWO2BVmwWd&(H_br*8Cz`s7b|&mTILd*BOsAgwyT7?G^zK+Y3F`h3yTwO=aW zy#Hbv=Bh?;sNA5NJ!4v#r{NBKfF^>lzq zb$pN|ZU^7_g)Bk$*;kFFs=e0BnN0oS?Gody?T2{karT%c2aoy=41CE?U`<+E@hn+O zlbdqBhBeV6f+J~4DPrg4v@DAOSKpi)vqz59DP*iZW$o<_9b-s=3?DLb$R**>0pE6R zH?fFs=9V4@q$r^4b<9J@lzrO!?$l0sSMxj<5-Zb>m|=n?NT2|_D0xvAH7I0QtdNQO zJ(_tKvOPELAeGLPRQL_P-^s+nJ=g@#ux^GYXpUE{ZwY%4mtMy` zdD-kT#=b{X9jwOZtT&0DvoK!6%*}kuA9^XrlfM`1d(0Ud7u{|%Ik|RN`|DOdG1q6r z1{16?I=LhQ`+2%b^zuJvamYnhSH{cONPldZdayI)YQEYRt-cIG5jmdDW*H}iH2NvA zXgf!$iFMgbydF8^ABJ4ZTij0d*P{@5ob|{8DVHQnpw}3AsEltK@!{1nR%n)CuKi>d2T@PY-k9ymfU~yL<&J9ht@~pg zsbzbf*zY^=DK|Z`I8|Q)#5N!|KM<`AqzObvgjXQiA^fxJ@?7pZ4#J-1X1&T-$G6IG zwWs&6zh2u%wWs3C<-V>x*>NWm*ksh9a3>h2b<*&_(vjDOHIGxx3MDOMLMqg4%m2u< zG{pMJd}m0u7SG_YTUf2_@uAq!aCI78P`uu`56<9JF*em1t$8(4-nZr^QMU)K7yX6e z$OG3;c^em`w#}qp_VU1WdywMw^1$`3MHICA1J`3eavIco(vn!eGQfG;himmbayZOd zF+21mmL+5T*2{mEFA5+U{qO65&=u9G-(S%t(!U9u$k=_u#4Agc&UD^ zGa+fiXkX27H zll;60td$0~ShuqcVcI}V-QM<8lXBOjVC{hjqV&=bm-9K2MXRc$TmK#(B`Ad84-00! zBIKOUPopJ*M<^S2;j|FIWpNa_G4`${Qu5t?qnCl{`BrVg&HY3nNT5$=N+?!)N!!&q z&I0Wm_pbgc>~fOi&LgRM{h@bR*%w$JOb}s2b~jwpjC9GeUhL@tStLxM^@#0~9vNmk z!=bWPtm!2>Ct{ZaWhL_dg=sbxtI`?UY(s{cWdi36hm`YjV#_nu1YR2SRS^ z!Fzhk4da8dp7>^OPI}yycYu#0iI%6cHuUPGL#>Q(>QOw_6w1nva1Rr@{_#58*rSS#BR!2%5`H^JUW8LYM5t6CBi-t*er=)B!pCRzmQ8EXmAzy>l%Hj7up{f%TBR9RMK}mW|MUBQmIAG3NCQ{u z0~@L-=DVK_(`hN3LD;F!`p258yoJnVXF-f+t5AL#Gh)z(``7@hIuwzYQrmR zc)bmOXu~vFnD85H!#*~A?<`~gk?l`SGvA3e9BadwHoVY=SJ-fa4R5#MRvSKL!#8dC zfenw@aKLnv&M7v$(1wLJth8Z+4R5yLW*gpX!-s6R(}pkF@NFA**zi*u#-C}@_1f@s z8=hms`8NEz4XbUq!G@b`xY>sH+VBY*9d$J8PZ0NV)*KN4UhBw&odp7*J z4Ii-K9vi-9!)bOs>dNKMGj=^bWWz&Fy*eIF05^{lrEW?MDl)L}pn=caZD7w}?$3;U z-6_4hNBVaqeXvZvWhs-7X+5lf9K$B+5tt0KOO70fdIn~UFN*aWqGWIRR0(`9SQqm;?N zf}WCJu0`s6O4%h}PJRrmb5 z_^R#UZ!!5O(IxNhvJl^;5x(=Gab-l<1-N(rmV7wrDq5MOr<93bz9l{>hr}cKmhh~6 z{AaIRd3J5ML6z`3-J8$PE68eo_##~X9U$&QBAml&o8Rf zpQNiuOA)`st%y_N!&DM}wIVKwN6jr=rU;`J6a|7cB{=Y#TT^ah(4{O`Qycz*UZo|K zr4bejgXSy0s#5z}5VT=YK;n_`5=P-q;YZ;vNhnuTbWCiYICtOpgv6wNp5*=m1`bLY zJS27KNyCPZIC-RZ)aWr|$DJ}h?bOpIoIY{Vz5Z6Eh{c5UB05M{E90pR#sM3f1{>0 z5WMQ@RjaT0=9;zFUZ>_%)#R)y4;0i?6_-lwuB0s$Q};Erf>Je!mQ1^kQj$ap5>jf{=b z56da_3cf0J|1H;JTV!0~UQU|jxL5G^8rz@ro_O86O#I@n1ovX?Ek%|D6Jgeb?QlKSvM87ZZSbtSekQhK$|E6Kmfdw^aorI%W)CB_Qvr%Ely zPU4d~bxJ1VQx}~kYC5eXZ5dN#%<-x;W`ttCYSgKGEhoN8zNO5PC$W*1AoP?H9Z#uB zokwXwW)6_@Nehb%nXU6Aqp9R;lCE88PfmSL3DqbeZN0_i)ooDPv6H7R z`c6@2h2wMb^VRC}YSQXG#op`G&|wOrhLiuVo}Tn9>9hZx^rnZ?tEP>bHgFYj)extw zIx3*r@jc1un_U!h@;@yc-&fE7<>Xw}N~=gWKpz$gIbYHuom%Wl&8hD*)QoU?z14RW zwJP;xMndV|ReH3LQL~gWQbw&(9fQ-39B9gOMvwL+xsn)Vd@y5MC@_T%IE1|lKfkF|&gSBdxJJjbsld zzrtj*-;$G6{j?eC%Xx7YqY$^PD&X#8`vLjSVtZ@HWyzm5ds&J_Ut+hTu@w7*;9jl0+WuC~8N z+23_;()`k9?#x3GPbjc&-~JeK}L)U`k?&MDuWdjps?}#aHhxMYIGmf zCn`B6CnqOXe$&&5OFVir3YNsV)miE3iwoeNd%e1exeLn*`6;!kdKEu6K6rV-?FP8{ zC!hcMK>_b^|I!!-&A;Q_j<@ksGhgz_+~wSSQ@T(7$RMZxp=D*v4D z-v6|L>tB@XtNnArAK#+?S(|^<10RkcF}imB>egLf-?09MZ*6GY7`n0Prf+Zh&duMw z<<{?g|F$3e@JF}*_$NQze8-(X`}r^Kx_iqne|68jzy8f{xBl0C_doF9Ll1A;{>Y<` zJ^sY+ns@Bnwfo6Edt3HB_4G5(KKK0o0|#Gt@uinvIrQplufOs8H{WXg!`pv+=TCqB zi`DjS`+M(y@YjwH|MvHfK0bWp=qI0k_BpC+{>KcO6Ek4G5`*U7UH*S}`u}74|04$3 ziQP4W?B8AfSk8mxfZq9y;9F$LoF6iZ-M*Xnj$BLJ)Z?4mzunw7_4wuvcsKW(dwhSl z$G1FL8JV6uYZ>`1(kHT}ZpO$-{CTAguW@mCWl7c53j#%fa`>UxFRCrAnYZkU(&9jF z*`q0Mc+_&!}WE8Vq;m+tzW+$!l$R#71V7|Zk0AZqhN6z z>opd21qB-j>P@TLP)8`mvaYPG%X6^@^t?zN?XK!meeS#+g*)&@!_eR(BCFW1F#!gsk>1p~c#u=CgD4_bbS zzeUuG!zXcg%f-};a3_RUA-hr8K?uJ?ILLQ+pNIj<;)4aPup!stnXrRd~ya zDoZL#YrH+n*;RilN&{41dB9s-RZ{A$TJEiOc=Zy~B+^}laek9&Kegm&GVMTeF&Q`6 z)jPkORn>Gb(=trW6Yt8E6X0`$Usb$wOqb8}>qxrm+(r5?Db-CO(vLS-D}-6JaPCBN zVjSsTr#yblcyEzi3TZ`=p-JI*|D(o3+KP&*t0iIy-J>}eq8%5mdyV!;rI&PyYE}fL z!fU;0rB^Xhl`r>}uB;BMKJ_1`w~VG{4`M}Rw77`Y;524wu-=uWE351y!O?b49IZ!G z>4#o*ydC_r1=$O3T{GeF-?yBX^Mk`lj~;vLYw0eEI_K=AGC$QWy_iP0dMW2+GEvno ztu0?!T~T_uGY&5;DX$GI4V*b`Qgw+Lhz*%e_*dfYKhUiPmL#fy(-PFc`JVkr%?Z_S z%rWu;cY2k25|bqY{rsNtD)lDD`R;#Gj5=w`;OdmZLFp1k;@dY$slQ{sW`}VNjaNeh zNopu*3|*L@hEC(VCZ&1k#H8sXcYD;ZKtDC4B#HDBm1k;vO`q17{ZYcqSi>9$aK*={ zc*5XP?MiT|1WM)_6t4zN^Qb{nk~{jfChm`Kc2~z0_9^HuY3(MB0I;MlX}Q(V`6>II zytSOJ)E_VbCvUv(5kq|ahsUbnvs0T*NtAN@Z|uz2brSq&?pKBo0k!)_k5e?W6`fh#p$rBZLH)LSZbkUC%6 zSN9*(M-3`*QwMQU2fDpTxpHSJwFDC`SDz@=XMWU|){ErtGH%9vgn7r#PZaF4AsFYo zHyRe7%Xu-zNvnVVKB_-?>_0_XaD1Udt9!DPdLHxFFGz@AU)`Sis`&YR!uj6j<4k?F zQbRvC(1o6)L|1?1@+K;8Nq^;Cn5?|e#alDHMYWcpDQj(#kqc@`;E{~o8&%x%-G@%@t4 zZify%esd{8`b!yWoIFS!)kLKa9qA@b_Tn{N{Ym@RUni3*Pi z*Oe%BD`usgrpcG-A5I&c%QB(>v%&UL3NH6Iw?yW13TrdLxd&{Xi z1Z14Bavf_KCLDG^j2bX4Ne#F;p}?j4qutMj$D2B&Zim-&)t^JF*RMb`(3L2N?VgA9 zp%WA6D;KF@3k&Ek^VBfc`O4HhnOVblL8e^86V&iPD(zzk?PIVS?i!#>uf$D{iS%#k zb13y`_wVNZCuldnLJs9*1ZA9dWBNP&yu=<)=cjZ;_V?v1xqgNDi=FR@;JYwG>^|U1 zajO)@mK4U86xveCl>W{AkGI?J(BWq=>i>Y5;)K`vC+!l(*@fY8w%OGq|1KF{Ih1e> zaWlsERYMj6skoRm1Nj|E>M^dzzD~6AKg4<7vbFWlUo18OFRcY|4-h zLpxLF(oeRs6M7rtJ|-~{mmaGaqsUL{G`C8fV)sQU7jaO=Rx`VGjSWBk9%BQhD-Oa@ zC#lp)Ds&-^>Y?cgYUH%L)JWIus{3q1qSW>N7}6djeX}2ZGl{;Ls0Q7fT&-!bFrG1h zaey(v_+j26e}l;1p!v2R>d?curTyss>el_Wuh5P$$*F_ITTyR_DWDDny2i$Lh+95aM;2Ttu*(=%LpIGl%Y{gmgvglZ>USHCFLZ%Vv)(e0)u>`AZ3pI2%J zM%s$N{zKwvgRC_e2Zqca*x|GWhenGIDD_9oqc)99AB$K=F#kGzOyb;gkn!mSrCxPt zdNO1E%?Yi2_s2EIR>u@Z7eu8CO}l8(HNOu%GeM1;_KoOquI16awJGl~^7|$2_6My> zJ&keN?TO~TEB~O>Z!yl?XWDWJZTV}xw&fPatuIS=`}<10k8#pVm~)T#81>lyP;k5VVO8qHdferUe&1l`l!_)F}g66srs z^UeCuH8N3+4D?qcOOol+{nW^=G2dS6bQ?cfSp%IYudR~Tp;Hso=s>A!bV-S8^t58v zXxGz7)@6QM zrV8#-&5pb~Ulw+oqq_XqUN!iSe7vE{f8^s09sak;$B%SHii0+};JeN-{GmK{)Qi=G zm<6T6AS@^flr2`*@)gOgg?nc>xN3`{{{b*X*tc{w}+L*u_QVfw@&R z3t%)y6x>0Nv!l^KXP`BFU4aekD>Pi!;#1xt_TfT*hog?g9rEU?5EC__%Kb0~_J{PX8 zE>)T0I;X0#wyL6ZPN1g3#8RU!)%L-f8ki>83 zj#*S$rkg}b&Z=TWzX=Zkh*YWjrJN^pj*8B$%`ROQT(P3Grl6*@7GkJVV&(@bE-t5% ziYgXW!nb0-Gg9pGs;aIGR?mf1E(wrnVG5;+%bcQWO89(N@`42punm8KtTHlJ;YI8{#E8#scxLDh2n=VTL+@7t?@rvs7y&4dY@6qz+O86{UfmROHZWK}9L@ z{F9^e=HwSu(~4eHm z>RPTqEG#FTT1inb^=*565sSsj7oAsCRFYS|tcEKOl=?N@2IiLO_3<~_LlMN!&ee&RkDtBlgoV z^39a1zd26P-%M*d%zWE^femGLk@zpcNZKrZb-0y4FNUc}4acy+)cKcki2pi_M`QpfRX$lAEPCLe`0^%0hIjx93$!7jS+tjW28*aVZ{9vjJT&l6rqn8q07Ja zmwdvXN!NSA-@i6r|F>d4vGASA!HI>x{%_^*U!Tqin}9t_pRfsd|MhwMH>B{tyh#+~ znDv({Dn<_=`)vOY;s5zN-?{T7^`|?nJ2~j=@e9X)?HxMAMNB9cz4rCjyz27Tu6S)q z58sT(FC2Qa^%JGexYmS3RaWPm2w#5t-buC%vurrih8Z@TX2WzFrrFSI!&Do(ZFsbg zq4Rq-Y_;JVHauj*7j3xThR@ir#fH0W*lfecY`D#a57=<44Y%0vHXGh(!v-5V@vpJJ z12(L%VWAC|*wAmo3>&7~@N^q`ZRob)(O6UNzD)S82s(Gz_LdD>ZFtCr`)$}_!)6<9 zwc%zPZnEJj8y4EIz=jz%Ot)d04ZSu@wPCUi-8NJ67^?HGPnht$A)*?=`K|O{LVnuoY>z2TssI^0Ps5CKFk~7 z&j6E9R9ctjQiFiYFk8mDR0%L`2)ujz2%N`-=uO}Sz@=>5mx2pCG*YPtzy-dIkvNr? z^BzpW7?<(_zrZX6SED%3!bn;HVC-n(#NG|e!PJqi==^LH96vV#Cyp_AI&kh-(!#$V z*ou*~1b%OvDeq<=dcbs8fp=rX&lX_9cw?UkoMq!J!23@{R~d0W0PMtkB>6c_snalu z{G1LfJ{=x`&;*z;k>Y_T0#C&hh#%nBXaq~ZmjZWUq%6CE?_wkm9|6xzM=lThEZ{dW zLgzKWUt`42R^Z4plzNPp8@<4DFcNWNV zux2J@!A}4;->+am1XP&M*H9i5q}Ku zo3qhD1il7%6GrmC3HTbDjxy{;R_WCo@+mlQyB`@O@W+4y&nHgsrNA{92`lh+8yEOC zM)IaEpqerJ@t+R#V-A5A058J40bU3!!nA^y0H^06j|-jwtipT*UJZ=TC;!x4B9Lo1 zDj+X#0x!l$9+m+AhLL*z2v`SmOz0`F`cmq0Jn;ZeTS`9#KOOiOW+Ax1GcKp!flmVt zDB_F}96fnzCPw0~SfPi2)u3u>axM>fUYuQ9|L?9lY#vkz?5=hp9-90<9=Ys#%~1v4wH@lX5c3np~L6E zd#*6}y}-;0+8cfXz#n2H4=uoPRkSzoG~ksO$$tQNH%9zy0bT<$@m}yXz)vwP;GYAp zt2KBXFg9RtH*gb1>Pz6+LFyO(Gl36cWc=I)jJe7#FR%mSK9xAd?rPc!xWKqorXIb( zKC7uC?A^dTjFeH}6cji}|C$C|^G(WvAAvu_NdLMW*ol#{h`iJYjFiy}T#MO^|E<7d zn62PyEn4NTC7csuorkQM#|U%Z2AS?*lz+pd6%J23o!p~L)!x2w=fd_2H-x7ghel;ddJ2E zKJZK9U*J2xGGnR0`|mYl<^#ZA{Tf=4*1f>ZzcF))z(W|RFM-LwHMqcCm{$B3Y^7Y7 z_rPxf&fEt7cmiz(*l#=I2zWAZHb&~S8u&a$^0{B|M`<(o*$?dVn2FyDy!CNTeX-vR z{1Zm{y9J#5gu%0b7N!nA0`J=a9~}Gv;Q2eD8+ab@SGy=L_`Sf>c2j=vEMQI>x7rku!F9D8!#o%ec zGK}~an0d&w!A)nZ<0X~Kidx0O@_)*|RpHd&#F9hzx$e8d9Fzz$z2zzv)s?#tM zR_^J@y`#@*O9JJdkKh93uFO`(B7t%bM(hRdwsE-&Blk_jUZC775&r^*es1gqiVVK^ z5h(W^1Q#fG8w3|9_YedZ_%j=qy9jcRK4*h{2a#nJvb@yloP3GDZuz`pea_8lj%S3(5)7nyGI3GBTmuut#BUii0J*caT% z*bRKgB%m^W!5Bk+obSTB7)#w<-|pWs#!(55d-VgjkL&tQeT{D_*>P`v7yrcVe5d`D zZ_4C+Z{picB|G1@{f%)UBK-}9W&VfOpJvu4&>v(}n5vu3}0 z=1fc-xGa_Os;q0PX3m^5hZV|YPgSYxIgiJ0ucN<<&Hn) zQk9^e&zw`?{vCkjE$8*jQuj*2CnTVKrcBn~Q<{)aivIPrZa*PmD(<6BCfl#Vb0*Z$ z^$E{3^*pYt(0}P$`Wl_E{WA8i(|Pod9~UVFerPQrf%sLG{#1smbF858Ur_bfo~k|P z*aokEyFE4%6{@D9eOxzs?Vam8uh>%x5)#NC_d|vATaf`smAwA-!5%F~>?uW!MW~MU zUs~2Z&{08OSH4&JoVR_CuFL0u`z~~#R08~3UB7hC`}u#}Q(0A-wT;){kNi5iq_Rps zW_|GY#EMGMk2U|<#Bs-C*4MwiaLDmkx36(y<81E{XWFJORh8Ga%)yO;=W`lH{=G$jgea*dkN*-1KEOnIXUmus~6s*j5pWbafiC^ zzWX$8M#h&cS)vLG3e@`b>$Qx3_~D1@*s){Pa-Pa#2E|y{6>n-xNxwh!e%Y8%qB2X$ zOA@ev$;1#Pl;C#|OTM*25~gH+f7ZGYA2OdkHcsT1gt_k=8$Eh-Ny3O;Hk8&WQE4MZ zHdtleqdq0$Mq5>;=j>FE8?Nv!GlO=puI_B= zus(AO2cO8J5X~nTrc0!b9Xl#NKR>*uBR~ZO1*y)A2r9*pIn$=c?T4!OC`DkXkoyfO=qJgjzHuOg)(r zs+OmRs4esRtHP{EwQT-)wP|Updh3bdYH$7&<-1kXtvf_@e@j&GPEoygiyHX8sMz;J zg&oAU+b5z%m5Itg9(_dAxNk&FI4o-XccSLcpRXQ$^ih?aovogJ`f2sdGta0MD^{qS zoE-K1^Uv$?EiNur8#Zjvw(PanUQ-9&C{_!85VfH~)SGX&Vd;olwL4c12{5ZfT0)BQ&C69GivT~G?m(!GN&qkYTlpNc4 z0Uq;OOhdq54frO2Zwh$Wp9(lbV!2MqpzcayM=7~4P07>QN;a-ha&X@Tc-0*5Pic)a zN$ub>`9W>_s8UFN1>W&2E$_nKTdI;#4=G7op(J~)k~O=O>??DDw*bBm;70&{Jm6;m zelg&m1N=I`Zw36@fJdL%p8@_D;47-(Z^hd|hNFc@aj_d#kfT zcqAUWU^E{Q78*P_)Osr`bnNKe&iOntIwUkIG%P#} z@Wia!t$u!koH(*dRCJU{LvHkJZS95%Y@vg9J4<^Y8Oipeq9TK%tT(r6sz%N9;6%a(^R&@bKoCN_|PakzrNMY z!=1Q|=t2|#Zw(HOzAY*$BFfs94YcuW-TE)rUVH6LBZwoP^X321=*8N$Mg=R`z~^BR z(UDP6(Gk&JH7ek_PZ!<(;OOwEi0JU>A-A->!Py0Ruy*$CIs){w{V?5y;hJ@zCs5!O z_@~?NJ|G$_j*f_m)^8tAk84h#hd~WUM@6qIHH@B9IR2?5f5gd>$4Iag8$I z;2-$|0SmdNW%H5Nu;}0ckhSW^cy7`#kCy$SL&3*Lm&fFPxUPZweS3xtfU3AY*6m|_ zqrxGGkrBQ7*Lv*IJ_b56w0})#=ts>IU88Z>SJ{?X*&-|WFr15R$XSm3XZ*QLv{5@t zUA|nF3a;hPUD{7E{@m@i->&_UdGSN5eUBGs4N{LJMyRFfVQT$?2vxjnp6a^`J_YRD zu#ZHIf$u<{VHV1#o_b0xU%p(eT)9%^=H{yBo_kLF3hUOb)BfPAufD42D}1o+MYSCM zMlpPaojZ4`_uqeC`vymkl&K>}j;NzYkE(CK{Z@VV-FNE8AIi0FaQ5t3_3N*{s_gTk z*1%WT_lt|2^>2rXt}iA!=;e|LnCNC>qI&`p-3zLvtXJJ-s~RP{RGJ)6+47lMBgZg* zUzlf>!ikNx%nFRro7?r;dMh}x5nP6>+gSa zlSXX+FP>Mm!qqkHn>K0Uhjl=^jyE>A2~PoXGp^CU-%Z#1wD?b_)}mDvJ&@r_XtzOv44DCTB`v4+HEY()-Lz@bT)2G^4?OU|$kf!-@WqQ4$H1>9Zk>_+TDNZ96MGwX_2|)q zyz>kX5BFue`22_PKYjYNz?aEx-@bis@Nn_TlP3jxy48FxEiILgKmJ(biSg06b8HSD zJ}jSp`l-GqO(w(V(Vro6XMXtMhf2uZFKF}l&p-bxKmPdR=?^~m;FYhw`l<|l{X`hh z`7h{OZ{V<)uzwVP_)~(usx$F7nS3>wV`4J#C$CtV&%9+-;X1Hw$*;CQg4eo%J^ z^X|LvY8p6((0}1LV6UEAxYY^Qzu<%3|^o9?=81_;y9-0Q) z9F76`N_sdJ#GRix{$G6Yh0gp;o|E6im$E=wh&TC98O{4nBpkmX96=lQFLLH}^QSPZ5rlejl-SMT! zZJ;3v@;?OpCJjM*Mf$zxpdkRdfPHfDEz#9!N9&U`{;9WYN&fRW=LN#j&bX#AN1>yn;d7Bl&=3I{ich)Lxaj8}@MPIVh-vfFPd^FfnHrfi zm~7~%YfKC+u5|qJ%P+F;m6h`RoG4kA7A#MtglNR>`dVc4S0bYhi$s%#kDdAqnHgyG znKlXfOqXkdzi{fq?-V`1a}dPIaY7=0!UMxSYuy1xy+zai3@G=Tq>S42j_P9eQt7yhvK zTK=JHi|G$h=L{W&7LEbu1J^Mzw6G-pw38d=hf2}?1Ec^nJP#Ujr#bM?C>OcsThMS^ z&cWKdU;E29s;kVRXfn4t^#L zOq(+M$=W&nrRcr^^3p8OFe6CLR-BZNpw6Vh3K|e&lfSv>Gi?&}ITX4;n-mC}#QE9S zB%czI_741O+a--Z{QE_{d-wK+kFt<-&@Qs1%#aTHJS<5I?{Tg*ei@%}zNOE=^lDZ= z**LGCtN{&$pkXy=cO|=YPW{WhaHo zqA7#rk;E{0U}BhL-Wx8DPrpmP_-LoaT;Q(gGO-fQ^>K8uMv@nT7wh&T0t zd^Tf38}I5L(;p&@l>av#86>ZRhRvX1{anxhU7$Xb2I@0y(lfBDq+tnZm^@e>o&*{a z!e!pQ5t;_#Ngsprv+*%{V}3*Wo&3{ga1N#)!Mu9)YO&dDLci2xGaf82r6<^zmA%i# z$@T~O%4_pM19V{>Xn5JF&$LOo(+A1Q^g*&THCUcZ4v{COhRWlh;UUnl05r@64NSFt zjK4!SkbY->h(BaO%Rl6LA!&K&p@+n7w`+O~4J?(qY|@JKV0k(ZXHm6}L4E#*Q=eui~;B{TM+K^8;YqK4;Q+#}U#A>w)&SnVxx{Qnr znKo^jELyZk>ovA~wB4aER2MDeJ?946D*8h7N4XwgqCS_tFkPyC#(E=vhMu2YeT-+E z`n&|Xz*HBq<{tJcTEN%;E3P&EUAuPegQGpk_^I}9;YaIn$ji%H~FJ>odlI^Rv-s+9X$f-m_^H{lMjh*Ow~$_3QT} z&h+Sg5cciVWx*Lm!I>n%o|bg(+*#mTYg~v2{Uz5-8ca5Huw;A8lqu6TZR>k0$IELE zhG2en_!yj@ZF9q9)4wLlr|)i*b7#*UzT zIzoLgW5SX$NZ-WFJzRTp{S0~eL;Ii9Ey_P+DHrF(4pL7M5tli0=IC)C4YaG+Tb8k7 z$LjkW1JYnJX)x ziTll@iMVmk8E5ab{)UBxNk~YD;B<-}2REiWPpBWn-ISCgt{Es-^aD9| zW`6_tGu(D9a($AvpP+jYLIB?2;X>;3>#x7AX&`^NZwUR+G{nWl$%qjnv}_?Jukk0Z z$#c>|yr~DYKfKR10_BIkb_w)=IzXLZyR^Z;{Wr9;(9_d11mm8EeW&9ELKcnjoB%K+yn@|pFSc}*HNdf zo&#Tg`DG2qJp%CQIBeV9m?P%^_Z_(RFpy^4qrUN*HpG|y5A8qnaWSu{Z!C!m$DMWo za;kj^#7VSmg|6%QjkbpJO_?M9)C1}z$AogiG2ng{pPR(bY?oui@!)(8dY=d0w400* z);DSVjhwP{m0{9gGI1kalp*TE!w)|!uvx-++BFe3lLdum7XClSYld@&Cc^g`~mQMMI0BfhGA(+l0AWuM;R!oNHbAOI&$P{5dwphhSWX za!*+zPO8B2l3mEc~DzpMPyM!1egU1LJJxW^tF8!I@MtL5A9+_hvq$`WOr_c;d; zcM~7M8foR9z+L0dKFsE`ZH^5wBplQoa*+CcXdQIxiA`lSzZgml_k&gfr24zM_l~hO`l1 z%2o+%CuuRb!#{oD3gz8_^@YEB{|EY|*T0y*7m^n8pQWLLrJ;i*c}n|2U0~+e@E*s3 zwv&3wF{3SFEP*j7(n7wYk1Me=7cj2*N#k$iAHG5-@`?FUV?zI){txM5T#lKt#qzDU z-qLoLJfOZ(-ibf;0P^@8y8p8><4Qpr^3&{p!cJ80|BwdGo%CO5|0oBXk2rUd$6Rxg z_Z$cM0%ja|O`A_!OFM=&g^p{0=KnPAq(jTUt8CPkb8~I<*0rRp^O|)y7LvkL;=IZ;7Jp=JB7T=k*P#N>ApF0~?1N_?cuwO_C&|L(QZjR9m1-=%1<#y$ z7~jvSaFqC@um5vp17~|~&Jy2#L4QbpvNY|P_FeGKV)MA(<}45YnKILfr#MPCXW776 zHg=XRoTZnu40e{8&Qctu8%v(kvLJ^bU*S2eh5)61%S?H`sIQ2To{x-Oa5;zUnt08K zO6~nXG*@S0U!GVC24K#QijR*U1%E#rd;X!gAAn4s`v&A{Ic3|QSBlI)tY_GVju;#F zf*Dijf!Izg_J%+FQKNJz97yX;jT$xTi?v-Ebh?uE3_j;s*xM7B3%-M0`UL)Y9`?y5 z!v_vWeY}Z9dBfi*pNJR-<7C_m4Z;2`W8RDxA3QBmid{K;ABpLE)W2A|88$p0eOA(b z(nfN!n+48!U3{|38y8aDR;?B=U%m@!kv8yV+fe1&`Bj1PTqMr1E&uScxci*_3O z3USzb8bciDJ8|vF`H^;=a}jMdeOdY`e8$gA;}EN2%#*P;#&~#sfiWt^cNq6)jE(7H z#N)mf*8o_9CS$!Yne#8_HLi2nFa2op#7V#Qog6JX{xV*67xr!$?_;cNeTD1OIzKar z5ZKyYuL zF<&E(jQ29mI1uFrHD%I^a|+h4aqx4;5D$Y3$DckhapC;4<(VYCr_Go%_vB6g#NqG2 zfpJg9&$T=P2gceM$^LC=}~=?9tkBIi~5X~usu zxDbN-%G?Xg$9^VbzW6Sk%!iJ-;y`&EQ%fFkeqZYZ&(csHYsKlj*gxVaaoATFSbewCw~@6FGI`|IPg3Vb%HTlCPP2{irKSgCue46PNoma zZ1CW|33g07nlr(XpIVS8#6im=;;tt4&GuaT zrww4HZ^P`02XW!}Z+|#g81GsO9Jr^+y>Z4^D36SDF}}iBqmFSo`=5L75O$??!pLI~ z_<&SB{`Acdhls=XF2~RoaJ^6eoOBZx@_^<3{6rl$WW0*8TgD6-dtT*?7g8q}A7QL8 z3o$Cg19s+WqZzwJs+NE17QWk?4EsNsx=6djbph9Q$FlohF*;7b{b|Z0 zWBA;gHafvL6JvdhlVv(_U}rI9jyQfS`u^-Z?^N3$FZ!31LFyrWewM_8nfzcT9^@0p z;Zo_qj+b@Jl(D*nz=847TIqN8kNrRX_~UWUKKtw##)jyR6A$v7>uRp4xo=85$P3yd zK4W71mgfMBPShojtml-qx(YA)*x0W~#(ql@`S8ROPiVVGyUY2H_Mfsqeoz+KH*sO2 zPJDmlpqx7LA#|daJVGZZk4$xSY~-Koaqe?)PnSIA`U<+J*IU$0;$+6hb!<2mZ)V3x z#nFRO{?&&UEoZs`?*u(l?OugSpXxCd9#Pe+JC3Yw@2ZeT#&UIY#20XP*3dl z&L$m*W2THBKmKiee_N(ZnWFcBaYj<_U6{2Gc}{+i|6Jcu7RV3cUpui))Y}i)a-C~y z^v?^##YRK#^*WGqJ>xQrEy2$cocq>voAnp*U?x9^NA0m8ew?>xJGd@I^L>!%-(4zs zaSaOp<0NB=j7#8qro#PK;*ge>ruj~LzE;A9boB@%@+mYYg%cTr*FP(7>>Id;OdsiF-+6BT97xIF3n>LepmXwq{ zfsUJBu5&!s`j7Z+9KJ_4hJCY5jx%w$I>36A8~RDK7d)4U zz3^PL%e6v%lD5CJKR8D}neCNfPo8r=Z4P4#cxQo*F;g#y9~1dt_IT+pGp0hn9W<;! zr}gcd`04(QJd>}?#DkgraX!L360~jLSyj?bnd5ko*QA>^8GA1;{K39;|Lh00M%(|o z@Gw3wzH=b>zN6kNreDZCC(7fW=v((sdd>VxSt7k`lbJS;I!E0mos==2-{IK{d@n%T zhbyF;eKUEH{@Q$ZGYLQwurVL$9qw88z8D^2{aiN_UY>euD$+ePuJ z^1^p^-KxK@>y-swAiE)}dSuo!FkS#*4#qu`Gx3>Ovg&vTOV;ncw`)-sOE{~=w(Crg z$FNnaR;@>j<{WI)_c#~w&lg^Jp@!W-44@osq!bhs==-SCFh4&(68qU(3kwVNc$ztk z;|!brp=)Q1r{VlF_gQ~I8;2o(XQ+o<8&h73um-sUejU#>24iit9P2=&O{NXjrA*U@ zGyaUxDcUkC)=gY9aSvfX+?rlE*NJ5OW5xIZ`=YMVE-_PH3Ck3RrU=b)2AZdv|CJE!*C6??%!#`HeA!UFtOaz z;XVS_Y~&xuiE|MBAf_!3MQDGE>kqCyxb~s1%k_qR#iPPDxDFo%JUD)M_l%Bn(}s}` zhj-@6#;hQ{o}}+izn$v_uASz_57m9#Q6{n)>soxzTQV~<^%)Vy)i{=v7sG#D8GrU} zFV=qlT&#VZiNtOo|1d9TyTzCs&kqpR$lRKFgXHAl1Dc;)Lp_+N`#)pkhq6aoPrJjh z#CO*hs(yXAPI#ufE9cHyC()cSZYZv|p4P+HLw=91q%4S6uj+ zbGdum!@Dd!99Mk*+EsYQI_~=I zYYp(sam9D9HN+c@cxBOVUTfs6i7V8(+F8@0-@4Wq?^dI`H%8r|toR#&_psc7x5tcB zx8XVxe}~{R)9Ve(;TyW?e>6z^#4?xpB4{5Zk5wkbB`hG(cWO!5wi^VW^XYx4Xol{%l|qhpTwq#~o;iPuQ9T z@2`nd(@|#v-W?Z@-Yjag%Fv%!`S18@t6O#7;kciHn#3s;xFw>GW{$nL|v1dNd-?x#Y9j&4Q>AZo(0Zy7`|9(!6?+9Ux6C8kUJy9j_dt zP#eb(xCD69CE!xjz2MRWU{(JyJaZm>QQc zC3Z%9@{HJw3F(Qc(=uXHXHT1ylH4tRR=ju9W=&&;H)wdhrfmQEFYda3Q%qCRnW2Wc-x3)oKX}viO)Defq=vTP$d- zTU`3Y8RG)(wgjP*ZW+_Z`=K-Aeqd#A&|l r)32a*~X|1jFb?c+oYVE}YtR^5Nh&+T=L0d&@+lkQ%K7*~E-*>Hj&ddZ-FaCc0@5hJ9 zIs38pUVE*z*Is+?wfAZK%3Zz!pU+pw&vAUdPM-2Fq<=sAPjQ~lH*Ug;alYS;+Ay&* zFS=pktoc_h3NBc9{gn$Zxi;8*$#vIV9}8Z3d2nI;y5LpU1?y+b3|@QvWtX2+QZl;S zExK*2s|6935J(;W42;o)5X{k8d3pT1~k7v2o$Y zHGX7hjXwRM9)0c%n`eoJ&%LU7zSOm6%bFT|zRPYK;k)~+^%r_+JAFq6$K;Rm`zrH& zzCIIMb|UYk`rb;* zXiu#|+_pN@;{bwaFDlb0YO1xDWvA0?F?)1x!<3#QCmi?mDyP9_bt1Y|Ovg^y| zS&4OdRdvMW&0&LssIM%DI`ssYA=RlCknqx03Ca{jp{5 zN-v^lNvw$4o7|c*rD~NgNUc=p1a=^kmK`g%hN;I&&MGgBf>T*E87&XaoUPSZ_DfbO z2EsIGwA&zX0B>#5(28EnRCEIsnL4By7hgz2LNlRF$g;Q7;`!3zh}~_aqUH0W_7+QO zjM&dc30Fo_Md?!n&&^I?E-&rfv9fxIHs2Cr&ML1=PdwJ=gFc}PS66kLr$-;bIcV9d zqN#dFXz#XCfnRG`eN`_zfv{3IcBy6GQfjq3F-wXIS?yb5hg$ZxmLcQT(w=3YmiCXx z1A%SODRz{Vy#E17vWu<)-g4w^uDrpfN~#aeUF`&(`ofS1OIV#rRtd4}bEtGne4Ldk z`O_Drpra>hDc{!8QzgA7ax9Sokhn4Ei`7_m7^v=8rDb;n1&j7|vGS-LDs3e4P&-r| zp42y~$7)^|p41&F=(CzPQ|<+dOwkJAwxateZ@IE0vvEc7(mO1%>1EJ@^Tt7V}d_Xr-v&GxO%IwrUTr z1|oiU3BaHbLk zL4(BUH`@gjXj>9RM>v6ROM4Q}R2Z#Nu}6m)s(*uMUi5F+?sEcPQ#vTFP4Gh$zP-^2 zT&U4wEN7jS9FrJyMD4DV_SR{8n<_h{T}DlyldDB$pxV$pnvBq7Gq~d7jR)71m&%|} zCR`7OXB+)@L214Hu26DBm1Dm%&=R#1qC7-roMhSGLG*pm+EojWw1@|ZXv!WG38gVj z^W41AWJ0rjaie z68`R#fv7E|WGJ!MLjB{^|Y9wHzVn+?S_iiEVk9J{o^UJE~esnlJczWh_i z0k6~R?KQ;yz>S?@VvnINVv}xcjfpKqa*m)f%iih)&eNKVAbO0+5d9js0_8)NE&U4q zgfGrWg=I%VRo&6%Rnuw;d(Z@#1g}5Kco#%}^V?245gcUjJ=*3gT6tY7&rM+@Ns7|m$uL?YT|U{dLu!+L>orZEd-PWZ0yURZ z!ulfi^G@KK6;MibO#A{PC<}!4(sy4yR$fHOno&FUMWg={>HJs_eb}p`0hA$^JJM%+ zXz#6Mq?8Yzn88u-D|P$pD$yp`1_ucLML>lAhkp!y1Ldv&82*>K{1+aJ>X{&!X#$;J zJI9rleRj1_{Ad;KYHh}#NFN>d>}plR2>m_86NhyH@&bzXR{eAFY8A;nyF>3@xdcl3 zY6fmkedJn?;gDs&8);69EtY60^Tn?360PS10vY1RE@JeNrk9M8IEPMOUusQ4P@Z<(WdH-}bimA75vR0w`AZsRMir7=0n+KsRMLB^Zh07?? z_WKmYnH3^Rhl@npnEu$z+IPGWrhg`t+0!T2+jW(x!kTbx_mW8n%z^b-9+)a$%%alX z-O|Wt6*7!FO8~0YQD(SyaLJKc{QC5WZ1z3sS&dN|1&4y^73mZsL*7l3_so%Lo4kb1 z3(pFlht7mi;ZUQ!BWk~C+5J|c+UIYR4&?-Dj&U10N_3Kao-{NTthXDKj0aivhV<8k zSq(}_DAKV5P9_!~1~+3&G^Cfr4z%nBti0}cQOa@#j{G2`rGa&*K|Ajez7Qj=>a2;rbOuhhkqh< zc%9!rAw+bJ{)Z6oT{4UQdfDGLNgGQ4qLj1CrX^3uI+5o^yNU-+)oyQ$lAnOGh|2RK zDv2+s#7;$GH;GPm?J=)gMG|ZC8*4xE-w{TFbiN{_!+pF?YF)5f zX3s)f^v(hiqj}PinL3K{N<0$^e>Hs3SJ7n~(hX!CwqZ|a4X=U6CFh}=M*Eof1r6z;3kn4p}h=qSiPR~ z)_KyqKHVwgFnWND9i~6OsN<~k&2@sY8mxX;?*v{uQV1?aRP4&AbktPIr|_V+E<@}s zO6-e-*rDQdKkXoq>H!<{6js)_a$-Rx0Cu4gz#V@tLT!r1w48a26zkKke1}Y&twjL-(SC=(6-$VTHY!Vd1$CMJ6`U<^yT76Zpf# zy@)YtC^5F>5Ti8xCtC6Oh@oSMOqOzq@kh`QfeZ;nOp>ufgdRau+U#&fC?fXuMtd-7 zzaC|{PqYLf$#LN11m+3uLXtxWM(o)t8WS7rDJmLe5zOcx)9`Tbl#FKEsZ5+z-a?{u zC+2gp@;Rb~=B0nC44PHGK+^1V`fd$x)zHp#f>6YMQA302xQ70qp>63aHRon2P?wX$ zv=i--D)}Q^!!AdWOGD>~{OBwa*}JgOo+7fhf-Inz5xzHQj2edsUod?QgpyPveOQA= z`Q-HV*#4@4#^-d@V(>~Y{6I)d!-UTBh5F&S;fuo;4Yl_|GiChH8IWa!Z+n9dB1-Je z4yo7QmQ;H0oZ!;?8~>KxCqju_dN+|%$g)7_++ro4EN`Vi8B#(r(L(JOO_Nd`wBi{d z-Ube}n!j6qmt;y6`BgYszqpQ+sL<}a<&Tmi&3jLq_uX=t*(w{-=^bv=GB0XpdV?Ev zj~6wVUO^OU*=60YB?Aan!wE~O15bJ(yu7)*qS4;eU_YZG=>#4+LU0ho1rcctoLnGU z^dn$FRr&2eiFNZ9>Q#0M>J7lC|R)YneevqW0s9T9^eQH}YFpzG*w!j*GVbAvL#p(zRknuwJEOPFPEp!6) zQWNId*FF9oR&N{r(&sj%+m-Ate_PI?HX&3fy#d42Ozs%e#17t+{-zL`l1}#wos11n zVu=vOaDiDSL>ZxoSM1p`qYV!d!4sS3;zK<_Ve&5a6Q+e{KMnlK6`fs3Q$}<)t~f)i zS9+z0jx;lU4s~Zlr%zC19|11-_`rF>)uM<@BGGnsKY3SF04mD%=E}(^0LNZy-M36p$nX#Ma}Bw-5v&|T?qVf_8gi|IO8RhG z^B*u@4*W+(?1!2!s*lSUPxmlic1C3xg=tw!1!6Q3E$9S(%JdAW^|uddD~Fqxy&~vl z=VhBTBNmGGSDBL2ALgXfiVf1W0cxaQA{3FXOK33toQ9ai5Zac0N^>%}sevL^;B$x) zlI8@~A0)(-GGQMb`GTme^N`2MkTVatN-3)IkWfW>-g8>{aD&(~TAR}ef36v|6D|jDquzun z4`@h4>jhY%)cE~@8PQ^npd;A|q%Eh1Ey(t;P-S`z?fLBP#T)@W#~eZRoU1cE;W2ZB zP3flw{+(QTqk!}`vy~}bP4_Zoz9h4KGhdo6n1A*>p+mTq?PPn-mwu?c5pui=jhU|p za%rLSrM1v0r<=vI-7Hj{?xGQ&ua6Cx6nXQd-@Yld7?OnP`fu7FqWwn6Oc!jW{r_Ic zbO^Ju?H45@OD=Q@ESA7S{nU%j)wcid_`TZxCJ8xhzcHunq4e)T`ajV2<$}XrZ5J8P z^{`6Adtp4=X>P;M6;waF;onluWUM;XuBO!`he>xrn^;bu=YYN1JYr~@7w5FuO0NUi z{}*kR6>0kYg&x0Gr88~zlHm8A?QP1m_fkRgv)g;Wa%0%`o*>=CwD_!-ja!`!$aw3IqI-oNu<_UXij=L zZTkN8d7AxOd{$L(z#AAjbK#YGab! z7&R+K+epY+FuGTXiABeP(Smd>?M_|?F^4tBz69Uc&o2>TPI8Iq&F2g;vHx=Hd^OA1 zUZ;Uaf)xaPc_=}3JeDagTj`*n3rRXWK}#m4QJI*^s$B~mai`MqA*ozw`C1MwnLQa= zvK_H8{dd}svuM|;8Mg|VLXtcv^pS;iCFz@lvLyWzA!bkW=#5O6f@Z06C93lx%Wn^pmP5>6@fmNqci_nIB0;cSw&&H#9@sKgLMAwMTk0rS+ud z^vM6t_Q=*&3Q5053;qM6+*><@5NgHcjOtk#(*7u`RzaB{u`Oo{s?6o*wL9^0tmV?w z`Nt8Cjj->M?JVS1y1Z;(1n2gj^oo=|oNoGsaL%*wS`Luewg-g^z&}O{J%}(nhTdcr zw4(N(BFPJjBgw1FBFRNT!EAwLpT&C2uCR#nvpC0mq;pA#R2sWDlA2i>>8;awF5{$@ ztMjMXmVI%lcwU@r+v)?g?xP-d*__x!%eK2^0tnivnX;GKL>EsV#nupBAd+I)ZRN6F zI50`J-BYt<<>+QM@7lX>99h-fKS8t9%Q7Y7t(7#Htuw@-*MFy2!B^(KVI6A4zm+v)%`dsW@)hdeMz%A&c3Mk& zH9wwRKn-orw`z6O=4@PZaDnNj%=C?OqyP(FGF<)Gw5FRofj367)+Smu{SZ`+rtqtZ z*cX;Y?5l$jdr?Ki{>$9ergi0DTlMn5(q#DR^_&-ai|=}|iAqAVB^_?4=W zT{N>;T8>9S3Dt{+ptH6uqY%rsvR+rkF@~&`QY+OI9B8!cKu9vzJ{z0l1U}#uVV}q_ zSxmvRwcwH$M~M4cs7zg7J|@e+nU;MM(&Whc+RTc9k(BbLl(N(j6qYow3HrK(Q-SFe zf!6bI!{Mw;686}n?1ZZH9O)8t&T8#Vt7Q@d0T0aIJHKX?%f1`Gnom zK2WG&cy|InqY*~u#1Z+D0tu!9@2e&PtC@tg_f>>1zIb)SKD%^8Wjs-bye8Qx z2&QkpKz4({S5|8MZ70Dr&tJxEXDV=j7L32ctwmC=up)NLzh%R*5U@)!!iI6|FMy1c zd?F=#l)gX}i%Vd7bIDTEf;Z{oLkT=b66opddhg)^vX^s1|8G<{0w)3zu^Id!>4x+# zd=#(;Y`fFaEmUc+d&B(3{{>s*EVw(&`1Vh{;-348kBYPl01V;Jh%I#0kPEcq< zVUFCM1$q1bI!xuZY^kLS*t8w^MaIA50@am=i)#W}-(DuF-t{W(+Ri(jWSmGT)5W7Z z&?tybGVy>82t~!hNS(}l3IdvonWOo~Oqr6q7aIW&v**L_B+`03`yQpVNWT;BgdX{ShDW04o9F{ zvX0tr3b8p+&3m=<3iY28GjN`C^qM6Vct12xuXF;f5>D1tNTvn&jY7C}u`4YbpZkNY zns9Nv&`MrVEStwCegL9YP02ra#4y>`WX2l@N8C__RZ|`R08bW6^$e=UZ`JmFy$DCs z0X)#gikkx(qSVwE68@C!DgUgG=Arl&ST$#KNG+G?iaAD~EI^&h&>1O)5P5@E&1vyB z$F&eRTtU1yIS6yy(9uMi-TW0B-p6^vrjOT*5r3f$*#aV&f~nkrQHxk%#l3Sa!0 zp`Kk>ZIooz=sX|BDDu<@eU1v-t+}qv2dINqIC)na10o`J2W`Xc$2mH|izkdcUHJH@ zaH{FJ{_Fn8hTzbGj%eS4TV%MS)%B2`Bt%kin#kK~b&l@;5^$za^?wdlt#bm?AeWga z#77u?ZY9o$CZ&rYbCt1g$S77VJIf(FYecbH(bO3ykRf7!gs~EowSjYik+8Xn+u1$bl_fc)VB4po4~ z!vH)laeGtgW3-+Vhz&i-f?)uTQP1zY1^P%HDrf8}AO#E$f+?roVe z817-pSv5D6atvk9VRLQEqooY-*~$10+eUWwWpIVHjnP>=6=Vz4k?BZ;0uEAdWVoc+$HP({1`l17&jdm zH%Bso!G8j{29!JY`klhMwH7wqdo_YMqb(*djIW2*_dr`R^@|3VlOOY>zCBu#p}o3m z=ggC3z`>drPZ@R-r7o3un8+h@iN5p~r!zea3_bWWB6)X*==Z#96GR4XB?gY*P4<8dBpsP`CVo_kJeNUH=aj0dXh7qhd!o#$vPd+ z58bn&PT=|7dA|N}a6ek}#s7r|v4hnIhy1BqbUbHl${UQX)6rcY35vl~ zsmlW=D9?;(Qj}hT#EC^9UiDXNnULAtgSWD|-qn*Hj ziDDu&y;_WAbjP|FZU{rX_t$$S>;`C|1Guh#==@R;E%T0|6n&RH2T?RQxOc}+;3!b) zi%W^ROGiy+IkTWOVs;|O0MwHCQN%7>D}wjRo>M!9;*eB}JYjzQEyos-S48YaaA{v> z`5TIEmo_*M~`ZM<}5IqU&mV0l+iOh4vR2iul4$!aQK=_;qz zfsgWhU80MJ#Qu@k#O^wreNurgQD36((nQKCq%Ote#BX-vXG$q1zW-~&=iQh3+ix@E zd(tc9=bAY--kw26&cUOZcz}Q5<-5t`V~o3{g6fN2{*ZKJa{zC;p;7|W5)Y~&Q@ZOe zFLDGgicINOc=--D`6ecADVM^RxP{+2T;UN9C`~SC3Q(Bf@h66gm1A06IgdaV6 z+yyEh4rsMtDU=p`sOePLC{wjKGE;QCK6sJBmlLB#dNu+AlmnC7<)uFd z<-9-;cNF!kcsAW4-s#PoVR6R~g={U zagg&OpF9hwzhRI?v;AZVWUNdTQe(dzv2WhU0E7pLYygbKcaJWBM>D zTU)F%hEBwoW>UTATNM`BC=QCFI&0}@77e(K3b`k)jni~gS8BJ1vl=Q+r!TqvJqVWy zv@mvLmeqd#ex9*KC{E8>GsKH~M#<|WkohJZXc)C00ys65B@{PXDljMtOU^rOA}j1# ztn--T$tNUyOBW@kSHw=H!T$Dc3F`EEqF`aB*Z#Kcw9;Ll))u)atn;^hOX1h2^Eb#5 zJ>1#d@|-}&yK1ZT)>S|uEQt(4w|fYE*&sAc5&9w7rGN{yfSIMTF2Lln?IgnXH*?pd z{cSk;NM1RayAI59P)Y^DUgF^jf!cw2+Slh#?TidJvD~LX2`D)+@weLm<8< zI!#D=v!P-eYd%CwEzWQDRM{=wKrAz+eS&|#7z}G4zAra*~i)*gV^=!4NEkUp`Z2J zofIZj)(c{Wx$y&>z+Z_UQfTrfv)5qwjK1?oWGhun`F^+j2et7V)34%9EgV!`iV0MK zky?Ak!P%5`)qq7ttY0uIbedxvR>FHt!tpW3uv;**TqQ4UMP^O|!@D zhOn%%-yfh)tixm9hUAN!_EunK~`2*V~_O~TZvj<{AKV_r3Y@RBtoJtR7nik zTT}Z6vgs~PPtWQtE9ZAAZZ0j2#8%&(ScMTg-7akT**3y)T%Aqiy=9a zMWaoszwJE9%|M+B^pZo5v~OTuK(44=^v3O!kqZ2;4&fUj4mCY5@J`VoAQVj%9l(PO zzc3k`z~cg!DtdpCNaO}m?j?owEuvS@iv;0&h^e<%)u*NvI)O2U(03SkYIgz)Oc6;F zMG?1a5qC?yxR;xB-4*t?-F}!fm0r#4rur?(Ae@a)rkXAc04H#@LMgi^c$1KWqyjnT z5;()u;ROCAuzTz_FuXI<;~td($u6YTa{o)qJwVHl$e1Y?W%@LQH0sIpx5Zo%Tz{eE z4qb>r5dCc%50xW>Z~NQU@FMG=XOT0it%{Fv0;dz|zZ-h7LUXZQ-g&QF(*&q|yg^u>QA zryJJ;)u?Cf!yfKwq6SJMN)@(SJ{@PT+ohK}eAM|^YyUmH2Sd2XeL|7^wo+{%XbH~bx!2xzKkIb|9oV^|r+fFKC5Ek=$k~1j+P~(mIg*mJ4w;Ng%nIcqedaf0mNx z8W<1BD@oc{N**MjsiN;{UBd3KD3WhbgdjOs29m6XQQ^rsNWMn2VfTd|l5e^YYe@ph zIz{sL=`51}V_-ZaSCO=@NG=pm&Shng+<+~DKapGIOp?2b6v;b?^4NX4sgO3kFwv!C zg9|Z{B#?ZHc>MWukSsPZ9+HQD4kR}mq)2{4>k>*@isZc%A(VWCUr> zfk0`;342H`b0Kaf2_%nGBp3ZXOUY&f<008X(!Nr%LO@eRZ!<|Z9cLw`6!s)V2$G{n z?i#5`o|S{-yWD1Gko=tjB9s4gAzma2B<~|0f5g9Kk$lR)ct~y~Xe@v9e?nYA~grDFcIopLeg(Q$1sYo7|gXF;m#zXR?&w=DC0Y!4X z93xac`5*?W6L^>+gpyB_+%-y(9MlR8yB`oJW%sug5K2DgLZnCn$!`$v1ls(uMtILTdO6v;=FDu$95n+nN( zmjXh`D_w{>lAvUZB6(U4lE)hu56Lq>2a@j`ph%vcLGnmN@=1yiBsY`XC3o~Wfl)a~ zb_tZSyTC(ol?(9`l0b5R(`HWKdwrBoE0!@>!w{yJH@bTV06XkOYz!DU$#FT9%UE zH!vQO50kX7l)O+tQ$-aSBtOL>W1q;alKY2zU8Ra-oG6doN1F<1(>r<`5_X^DLX0K} zBwr-n3FPG$!T|&vFie!Q!gpxlXxr=J4aI;ou*xhO>B>Oi! zB$F=0<&XU68ELAo(t4 zqZ9ZpMF=GyAh`=IOw?;yp<(yk0;PI#jECgCF2vVK0?GF{2ImB>eI-lDuNoK+$%Q2C zDUr>nLsJK<*p!A z<`26Nx03{t*C>)p{*#bJ>jZpmmE%e7!tN)kF$c*{ zusIBp2YE=2a3NkN2_zjotGE5-ERyRCjECeaB<(AbcM2%?XUTy$wI{DqBrl|$Ldok% z?qaS6k`E|V3?=873SsxX3W!Wz;zFE35=h>vNKVc{vfRLUNY;D~B>OQILGp?Wl5b&Q zJAvgCAxJ(;au+jcq6%`5d|aTE-6wiTKIuZ-LlQ^^6v=PBl%?b?2F643yCm%^CF=z= zRkVx4bgrIMB=>WxJeuS#7HvTCVxqi`GtN{9B|8-mN*?4wyoVhRlFNu^{c(F1$(Kl= zVIGq2khHHz-Y=l3qKh&}zKezJ1g@c-LdjN=yI30|s!OS2*nO3$5G0TCkX-0OoJ|r) zj!`5Va*+I@f$@->_BoLJm{}G`zNja0W$eCIk?f@iLGopiyI6e$$?-WzJ|j@d?w=?i zl-%G#JV+8q-bOrrFx#?}yvx9NNdA(feWm1i0-7rNN(RXt7~tHurA2(*r~B@5v#q}moygSrQqLt zvCn8M9F^E7yx2!H7O|Ju$Gq5kG!`u&v5$MPw-Rew_NW(iy=HV<_K+8QfyTOM{lbf_ z(^wZRX)o<_0w)rS`-+5ni|)HR-}k80nk-83O8kgP8v20=r7JXaw+X#@oQ7-@y4i%< zP3RRA9;Mu3LYrk;mn^!`gtlPn5L#qH^$aqEt~H_ACUm6Mbb~D0CX0$qXw+6*43b6pCiJi=ScD^ftGW2Q}&cY=gH;3 z_zIkH&K#&G_n+Iw8b}p283i=`(p06 z$^9n|2*y7FU3fhw^{PH}0xv!%{T|52?)N~pr$4^eEf~gY!5pli z;H#xz*NG`dK&(z*UVcGg(TI^&GSBKP9yNN**phL6D;X}f?4H%nwQpH+31^CM*4dAv zZe>xfwX3&Z%KFnZ7Hp0d^hJ8QOB$Zt)?JEDR z?^9#gzx?cDBB?1sUM@bi(Z0C2(H_xg&n{~$;4JFwQmf}L#nzbZk)G8hlJ)4us%@F5 zZUH*G+zre7Q918N=DbgI-|Z*3j0#Rmjo;6Oh@{3Ikee@gaq*1Q*wRSy>{3(G^UBK4y~2HmSUZC5JH*;i z=DtI$9i{F&#M)8pzDwRljzl-+6-4ZUMteG!xy~$Yta>(5@Vt@b0)!RXJ&W`PBL#?b zPas;=2mSIzrlVCoLcd5sx8#m8FiN&$!L(H2CNV0C5e1*t* zRP}*n9|&)br0TXsQqw!hy(7I#+>|-{asg*oflhs_hBgyg1%d6s@SMVt=BF^XtQFDQ_q zl0!u|^L3i!W%ve)1(FWB4eH=-bN}+_t8ysCzr6m{LjUqvua2~OUPlEzF9}8NyLoJu zJaAZ&^*ul5JumZK_^SKLH%sE<#Yjo~GvvQ@I-{;m3I_7&7WN%V0-Z0@o%i;>7Vy)m)$8ULMSlh@DxrrN02{9YGOet78`DN@;g>)fSS|{W7uhJ}e>n zJ2?CN@GNmTkJ_){g_$b3{Zokj0rS<>GMKtfNSO1&JjfWhfpnpm1-pf4O-|rXk~MYs zFC|3=cbVMHBf$OXYe>POIF`sp{22EWW1yiJ$5AnJ-hshR;QLz9&i>a3NuEhS9}lz| z2}>oB0uIbEb6n`hL_D^Li4!Fgj$mTqY$Y;d;++1Blp;-tEeSLBi2q!Wyo9gInmAc` z**9Y+n}08RN6;T*>>ZF4gQshipa4zq-TJY%-#mwo#YTZ2^(FF8?j!SjJ++U_C<3!J4A}u-(J{N5^8LxxTe$zoI@de zd#bXkzI<{H|Gn?K;e9J#MJthWE8N%N;$+qPm;35ZD=H>7Uh7{T$~&#-lYjC4g)W)= z@I4?}#J8v_+$rQ6q(Nk{%EIblvX~sz~4m==4#!IIpP( z0>}}Ci^`*XcY{!s+yQ4wT-TKixcQ4LD(@(Yx0vCKhre4P~NND8ZI?8Od>9~ z{r_Y}t_>Fwh&ucxS2fdkOh@@XR?b1e1N8d`sbb4+b^*!_*tH~FsA zme?`Q{;tRLO%@kJbJw($Jczp*7_er*rn9-KVMgh|Da@Cj7Cg2|qtDT7cF|Ue!i=?x zdh|^u%SDfv*V3vFdlQ@KFYKQCx@6VBN-mDRgHP ztjti|>Ga&yU2^;N_H4FFbS3`SL)zlT{T@TS@u+zi8C%(HLVf13**uJlt=yrZAEiy?PVH(mu+KvhKy@Z4sL}GNxrx;>a4`k=5)*#zel%RbTGi%ADbAyGW2obO{m+a%U5Y z+DU^uClsqbY~+N`RgAoyl&W73$l7m>^6`@A8|_g{XPcOT$^o9C_$36FNQ#*fA83&y z`~3fo#E~_=Ba&R$6tP!Fli!iTsVM$Gd}>f=DJ4z3i|+@93_Mf&EWE@iJeh^MlDS;% z0sFJ-qXP>Av;!xU2SAP@Rv6)IrZtP6{WFmcF$E82P-Y zoNe6=M*g-LDvROyQM+pyOBS!(n} zTY0Ob+e?k!aBmN^m+p{QF5lDI?4?G5w3Tax_R>K&b(uWvrADu`>DN~X8vW9yb4P+k z&$N{*Qub2OH&Sx9f$b0i5meMzx|DZ8jbccF7UllsOV||vzhQt94NI;rj@Et@8yUqUBeQ?GA%6$oz=jEspL`ISxAJ5{ zSXJNgb4z)tcSP1FA6D^Zu)l=Qok}-|rlyz4y|#Sz;+e&Az?iFRWE)_8`g<|CNm54P zqSJ7d1cg#5$zDCcq0jZ{|E7L1Q|~LU5Y8=qW(N_O9Ut~k*6JX@u0hd1mnry8^2unM z@JTtTqFJ>X?Unkwj6Oks)VW5xcd4WHW7hq5`{jO+89~dwu-M^_UnbP@_n&g$@$Y7& zL3O!0%PmlQKOWRRGsiTG7TaaniMtDB&BuOB1`55$P_8g!IV6NV6laG_O=hu;z8p=i z6zv|d|IuiF$+8yns;V4e8XFS{$$x|yPM1Ws3z!rzxdzR_IS6J_t_}v@L+aXp!9)vF+Qn< z&X;iI78|x}ocI8vMX@MMa&Y0;@EK%i@iK_zZtYoun)+@D!)A~{fVQ@-6ng=9SQ3Yl zW-tP9ymz^2G*wsT|L&^vjuy$5HDK*|04l+!3(+jwGjY=pLL)wVtkl^SBZ*GTv+@$- z8ofxdYk1Ja_=rw6k$tO&j%uSi?iS|*mTEi2k8##$i__#iCJbFoalAa6iW%SD5 zwnzGoobY~DYH6CV495P3XRTz8fO+scbMgy5gM`6n2Yqtb_R1iZi;s+AxnUW`a>Fu? zdErBc_J^^_yJa9!Y2~Bjk}La9@H=(r{6Nfl1U^>8ba3FEy~>g?FI$#7bY#w>%d&Q) zc`z(@-{NZ^-OAtgRgi1I?&z4ti%c^{NvQpFLUvLnF(6UF&C9Xza_e$k_SWV8qsWrI zrnrB+zoZ+`maX?Ww|BSH@wMh9ljUBC8u>ywXt-ZHr;JMI!~kCj zBp*I!x{DE|Up-Gv%^$eZU?TlOi8e4>;0cnaLLSWT&)1ODJn$uE3o_nIJ7K}Gx*?8# zLSOo>2W7#1tw}$I;s(a{E-eE_bfwq^!`w^&n|1ysqimVCUo86$&F^w~H{4;lOe$Iz zJ3PaONy3Lf?WTA`mJM98{TDK389~Grf%I6xpu9fa!`DS%MTwdAlI1s&#iez9-Xe=* z;L!pld6cyPe%O#qeat-8;$qljfs_`#TH$v}k;}{;qnju%W!4I4lrdEpt z6kGQ5)}+k?1r}eiX1D%Mj(cI+%&l(Zb|G?|UrB$8F;`w~OuYxP-Yz0fb`^QO9#AMO!ms-^ zhW72(_j=-D-Y5TCkQKcMCf0nUboe*l~H*2oJ*^`zME6%kWSq2c{;Jzdre=?DYA8? zXcJ#-h4yZ{H`|MIGUaqqdPh$^Zv)`=@LwZNqVQW&j zsbH0{{M7zrpjxVYmEM<=w_wt$VaMZ>SWT1iWEqVKqF&g|yob_9&~fXNqh) zXt6asR%$bH?O9J5T?o6DngY9pCwGfjp-dK1_)?=FlY>Mt%;*5-san;Gx{`^)SNM*ad#4GkL315K7>_)9WCK_9xoDsLl+9%jbec>VsoeTykM4td%;s!9cz`# zkOE(<20~OTWtnR?;*G)A!=ZQ_qoD-KI=YTcb{*%&yU?_{tg4TzxzDieNJ{@7x}7!tZu| z-{SWJe)seH6~Eu`dxGE7{CfFq;`buISNZ*&-#h$1;^*)i34VTlS?NO`q>9dw26%D3 zdB_to*3%o7truT!xOfDQOgj00xI8ES9`o!bJ1~e?7s?TmdeeY*m(>?(b}C$&crd_IWH)dD!Su3tg?_*GqWttRI-ji zvMwmmqcI_LY^n=JQiaS?riVzzVdwO5(Pp{Hm*tX~#px0E%N7rNIQF4}N&AhAO=kHT zRCF}faXEVf*}z{sY8ZR8SjL-BYnQ5KtWZAZ(81E9e$kcw9o41HEz$|;XX!U-v^bi? zQJw44vKiUd&02OWUz9%k)##3px7*>CFJ@P%3`=F+$Of5LwTiF%PMMaZv|mS9t6th8 z3u^4cm*1A>YhBq#z!&j1bjvmY?+%wh%F@wyBp}uQ`Dj_Ti%+1uQ^?A9FXXyoZ?z6X zeSKP1Cj_xvV(6HuM98(rGoH?-rF>#nj7S`2nVsN40<$7wrN87f6(5LCs*<%chHls0dY|xTsZYm3(*kLW*Nl&8Mie(S_-u=kl_uRHP5N45 zaBN&=I;o})gn&0rR2sLKkMhWLB#ea|qoA89EmeerB~uaEF@q_vV53WaX|S0dF`@De zfWNM1kAN&EbRH#9M|j8ruDgzYg4@^)D~idB-7FG=xZWKouTbIm@3RQ}dTftX&bTPZKlfq>s=GiT*RP#gotJ)b4vTM7t3h$I(rT@yO|4+o z139J!S;S2PBztK==Q~n>G-|%)N(3>G=|N>Y`X_3XF22h``B?E5XA4J!>EtddVU?HB zVo)o&guGorH!e9fq>*yS(@Jy)neSL~SYSpIt<_-*SDoZa^Tv)sat70;jaKvbTPeUQ zIPXd;c|Lm#)yb&{apTjDc5lfchhS3Y&5br+SsE?afxyotDx{Lz@HDTM<@A|$&0bJ% zFMgUCbp52=(VENWF1lLwcUiZIT}n1Yl%#@gZvT{_a3(a7q0rxUFKQ2LLsD&|fMaIo z%@yRSA=2C{qoL@R|D&pfKNO^*sTnM?Ooc!%)F*F2UGZhMhNnd;Q&XEnz!lH*vxtQ7 z^v_Cbw%r(c+5IqHNw!Q`MGyuKht1Xs4ia?AHK1XQ0Qg#gB_;+OgIX;Tz z6Nwm@B-4arvit3p&1@#2y9>#DHG^T3_i5pJAZJOOq=s%IGZRhI^{|(@eN@$>R*$72(*)PJ4BOBVB*uQ7V zZ8M|^8`Ga&BN!k-u<23+E1`}Z=z%`kVWzjtr~GYly&m&hfBO$mI1FhczRbf|5&b_V ztw!PeZI93*HpYzIw=rU~eqnl(t(`KG+_u1(t)pipk50M7z~8!;8k=1B9|lOqLZm-&~Mwrz=( z-o@dOj{P`|q~Z9k)|IjuO8K)ZVv|MmzTjW3{!1Nsnkk>b;4tZj-uKCf=UX5C<@qGD zSh#bo7-h4K(9c}(8B%}L*;37tCecgh=gPOcb<9p0?hBTEkYU>X4s*k^(LP~3?x*ln zHxIfen<*>%q}4X|B*RIP45rxl;~91xOa^-04Wegk86nrFn@^`Z9H$b7wvw@~3F+>* zO><6f(M2UZui@r-zhSv{)_hqX(sA!Me5Wt$Jl~IJv`Cd17w^@8rq4Cw;@XC}qZt5x zq6ubeofg5i|3e*&Ze%!E-f&AaC8P0TaDEPJ8ucn0%Q}BZAH`lEV*00%9<>+I7>3V5k%y<+_)B(XIfDBf`r=&r;uEwIbtcLf6p0OrkA`|GuODc)HMG@eN`mfh5gra6cZYtGP18 z)74zre#e;UwHKe?pThB?GeEihZxY+-m$x1A#`P|~emrb_on`XIfj3|07y$lKaLRZ>Z{yCMWh!bZd#9MV>qVN=+tD z>=e0I$k#6>mXJuu(@CH4>86a}6*s1L|Eokwn9m96u-15kmCR$$pqF^H!ux+OZ*l=w z|Ko1n_#eE+oa+i^{8W(^glGoLn4v<6G-|J9)D~+;tb&FaxuWRIY#BI7%+?0!+$t@f zMTmz*YMl6(#^mL`PWp#$;8;&Pzr|csqovIQ=pK;?zDUYE;wWNp)9B!lb&^85LJo8N&*>D>>p-teH$7vTB7KlAy1%lkzS`+P@G z#*I8>LMA%*y4*$FmvlLniKJOSx9r}nsUl3tAa@~pkxlX^ zjA|Umv0qh<;_C5a&dx}7BCE4O**_oZ3f8BU6`d#-2UIb=@O+>ilo^Z8aNEi&kq(@| zWvVkjYQNb~^@i|jUX;neslMW=Wz>}Z zpZO$+m2n5524>CJyxmfYsO-`lsMvM&)jyZ%JuCC#skT17MHt&1V?T~^qsGkv)3DxF z&v7~R-#ou8?3{;Z$YyY7WKE6zLhZ&S(-J+UYy~83jWuwbEGiP466{Kon%#8VS4Ron zYTDI)x}=nETi4sYR6^-evRkV(lkJPY3PGx+LvgXH>~G*SGlvBL+TFxyVtHD3;l{E< zDY;>qJ^oY*sXp5-JT=1RP;(!xYAonW*U)w4{ELt!&ZG{5rnSXEBgm+>HsoNxsej!# zz5H?oyYTEYI#c-_c!#Iiw zySa8oP(GHiuC*p8i&DhM;GCK31+XUNOS`|M%aOvY22$yckJ#7D`WWEFeC69&#f_=4 z{gGtez@?y&#U_N1Zvvt8=*xhB@w6(phR3g!8sdd?Uoi~4*(9$)txQUeBn$hcbS3Q} zii%pOuvl$pdv>w($EwyP`}t%JtU|pOXV*;QKS5o~NGvn70lMM{hr>beBtM+!&9@S3 z@&%|Vl2{ugp;Axk5;kYQYH_sl-|=HymH=s)nk! z!|d&~J4>z(+iP5Zrbx~B9@bNOsH{7mlfgItL(3VkqO}hP=^pVzt!7<&GV_t1*YE-u zi(;^4VWAV2`T9qLy8D{sAk8pYVn(eBjxCQM-v_ zye~9zY}$xryt>hz#wR4##g32IxRBF?W<(JJo+6dZ%aCpr_Oy`B=4lAvtc6er;rojj z2I#~CKl7*=v6Y}Moro=66Kr%&F&3 zWn=P${s#Fl$bS`zWwla{VAQ1w_pi5qw3Ao9CHy3W@@>V*;r*?DW0g^)>2jC8VSClq z!B2Zo1Rr$R0@=E|V9}_x33)AetUy6zI!@4PegVBvC!yoF<+QRlT{l8!Wr1*m# z@+ANRMGdIqlda~B;gv#dd>I&%pO->V_H9CG7^7J+vUk=e56h2CdM^G}*jZmMXP4@e z+5jZNf9LnKi~iMGkvX3Fly}}VveG-k9$DcXNX?W#-9G)b)?1u>e|r@r&=TVaR?79KP2SaT)RYt{}rDbcscGhrazP^Kgs6i>$Ev+_v^Z#-c zd{7RCwaB#UvTn|-$~zT;?n%L+FU!-U~z1kQ5Q0C2&KYc2h8CC=> ztM>7sXiRd^Sh-sc!H#t6lj)S=V9Ixa(N|BK63^rE2ys|wIHj9GMTCV@q4g|eHl?n2 zj!Ik28?1tL4K;`H0iJI|)tvcL^BT^X7fz{-6&J=&;r9Px^rS7?%)dPEwEXx%)}-e} z@#g87+_22*PAeQ8drRWp=DcnLI2`3)uA*MgXMw^WZRT&oQEPkB`OdoV)^z=mG`}y8 zFPHe2_f2}fwm)^kY5vAHE$S`k2BRK-TMM%6P9*6^?)-6z6JhbmC6Zm8k?%d}_0KB} z+w8%8qn8qeWfN(l_OE(WMuAYYeZ{dU!}g<0@5%P4fkF}FFuFIAcqYG|0kJY#`&a)Rzl6L4g&NN|Ub|s&Sw>z9 z*D=)Qqpy&a4L85zDn-@x2VQ|aa28`<@!BxS_PL@y<8QgMcz>JjQ;KHfbL%8Iu@muk zm6!PF&O;G{{xeZzQTwv;`4M|E$06#4>m!hPk>3ICju5wPyR({H0QuX-r?Z}BF)dS?C9N~^>b!Z(Prt0u;ct-ee%i^(y=y~Y}=2DQUwPr z3f4Sp!fbCvlm7*B_?4`ak0{OvGNqydZE`eu1AaSfxx5f9xFN{uO=I(#^zoF0w@=WO z!boaHUR_7wms#~@Wg&{p+WV(RXl+x2SOev`!oSUn+8;OCm}9#zmR|BNpP(BEGP2BWdpTa3I*SiT;)^sl zd~x`zb1z)oTHO*qqqQaP+W4uhE&12PPxddj3R-tx7eAu4rEpRF$kvu3U;MDnW5Hwy zT-!Q|Usvz1XP51=@_CrvVfznlFUQUe+t0BJc3p$?=q-E(GO@e-mT_m{^Pac){Cr<^ zVNI-{;gl^6ZR_HPHIQF29PVaVmd)@o>cLr6UtL}k@04;zB|a{X7e1CZkblZL0V8~P zyzo&8ch{e`E*2C{%tJHuBzESd3LB2u3*YY8L7JztV$Y<8>i@omJ{+-s(kFaJoSJ0n zGbgn$&tK2+(wAc=)Gj(<343MJgQ@GvtY*HQG&?91J(FF{VDjn{m^&hlw+Z+_byuZu z&5@-jbs0KDVKCE)Av zEzM*?m>f+10Z83a6Q-os?oijmqNgFFy7CRF25$nhQ=F-IwU9#pY3s6kZI=C(>`g-o z%v1U!%L?Gjv8L@-t!^4~P$Bi0*ut{*n)+#l$PW8#kC}b8E08Cm8!grsfZG`91s_qd zy>j58+L_H1umQ`vuo2yn7(Bs$I~s!}!@vh&F(1&s);;vO{7^T|xZ~Dx9>%T2TQ=NI zY3@Q!$XhlH$+F>}w3?e(xiMW7xuR;qiwP`tn?PT>;404 zvr1>^`r{Cv-^`NxwjVQT>pTc3%8|1ka(E>qI#up;V10%*&Wk3Qd=JRDe~*xkzD76H zMcC|W*&Z0)cB;Wpz#CcfqKJf^&diU0!E8N$TbIEGI$9Ucmo+fvFuwkq#O@(1YhaD= zgVyRASTpgR<0Z!hyj^jZuiNL_`7}X((WiXAWBA?6`yzh65qZA+5%RB~P#>T1rwEB3 zrvF#Eo*4Vk|E+YCDp7?@xMtxOz+{c9LyA5cEzKX|3c=o&o~bv->A5{%D|t*mL{z-k z)rwE4DDN`e?w0d};z7=}ICf>DJ*Z#C%l17h)g^t;N}ihOdzRfLeJ`525-mw|w7f~a zZ1+MWS;3gjYLIAf5hs~fORwAguh`9r-Jiy;O8h^xy$yWS#kK#x$tDn<-0&O}B_b+{ zwp6TwL7RmDyAl+uR;&-DQW3A(QrHF5h^w1Gw#y=|wc2NH?QQMt!_{gr_|ycHfQUuv zv-OJFhpel&+S@8%WqfHXU?2Cb7pTowghqEoaEl) zu~=1vNUCpU#>iYOGUey%si>CTfCpDcXCq4d!Kc;z&Koz^Dfk?h9?9MkueC!BU3m5T zv=7U*`7!mAuO7D|euy=CuEw6EiL*U%s8~=JQUTyz>^OIkY0J-u$EW;D(f-aEu@o&> zE?a=`f&W>I?fqq(?uINe&o=oYsN6Sb(fDvtwl71Kmw~sxGs;L+(jah%7s8#>t02d` z$Nwhf({Dsm*SE33yzNUY;-szz$7XI#A&&V1jx65eU3>jxb89dsy?0J}cZ74!abEUJGi!UU6ritgzt(UfS+w^y$RI-I=b}YY!)G3x z2on4nK+6lZN|*Ms)>>`GX#i%GsHARYGOAe+(je(()zoXAC`Htb2n#UbtL=RYrxpSlk-`=(9Bnq0et-^u$ zM3Luw@xFzc4w5vzE2$ zNHXb*aG7)!!>Z>t3A(mE!VuEN+EgI-e4%kR2-0c2wUF(u_KNK_&kwM5a`p)EzNT@_ z-J(f0wK*B6UP&5Qj=P+~U_~@U-Ye+Q(G)h{9oa8H&VI-8uJo^)-ke(@u$7DU(W54r z61$!^7>Di=RCcgS<~c>RMkcBaw^j4no3BMW1L`D^&U))CTxGhAUxxa6?w|L*A+A`Q zF7NubcV!Nn&qvv39>1SmXj&wa)Kv@LL@gqhKf2a>*NI$NR}^*LN&zmS_`iyz0fC?{D)y z%%1N&=DxkN!EW|^gOCRp&di>V+yP{x#f`=ni6<4~u8$S?b1SzjlXT`InVNL(2+ERDdLP&pQ+9$j*E zk((@A#ZSmqaV*)5^m&k2r`9#PI*$>q-Dp41nHCmJ2_rTevx(TH2ae}OeA~Rn=3_lD zj<{iBjiI^=HyruuhBSt$H=gDr;SlTFGGWYW9ZaPisnQOh##3Cemb+ptc0$ONYLPJ> zqCMbE5_FseCHN+X;>2vEk&W9+#k!co4tTOj;&x_clRb$?JE)igjBkK6YP%MD)HY8T zm@lbskxlzbWtw9B5jQ+~`?dy@IkJY$8jX2WvE7|%o*xQj9Z}E+s{Jg2QOb6Gz4492 z!_F!e1jPDAMIAXd@9mErFRUEFO9VR;S9L)Aj;_8(|Nql|FL*U5X}>+pCLJ|Ptn|tm zN#CX_heO}&XlS*Ct=|bR;IdJM96L0v>KZHZF3O0#ViW(AB&jXVXA!4uM!N_BERw!Q z$_C^x7F|nbwAILvCRJx{b<4Ha;#3W=v>18%XC`FCOylKFpP8EH@ZL(P-z28rlsZX_8Ee8k7|gdP_naPDy$lly#;NTmF>=b$>Ojm6Y;ug_Wzu_6 z%v8L;Nk8!eCV7o%ThhwTQ_AFncac*d*63vxK=2}sRs`os*h(emsm>ZrRX+NL)bsLC zU~79bPI?!^p+$<~+yG^tVTPv9<`gK~$rEXmhr!s&Gn#lMK&3HX>C(4a4#;D;V^e!$ zUd~|YmLI(QyB?a!JnyF@HvM0AEb>4k^Q|gkZ%JzZJHFfM`9)VZ4U2U#pW~;gOv$;* zLZv^8+HP4T3k-a^P<5OTDbJYnlunTp!3 zGv=z?&ffD~t0DgNPF9t^E9`)j#?*IBaqe)FJGA$V{++amM*^xd$Lk{TQ8E>nr?os4 z%CL4l?|PKs0Yo>y3`@K+^l@bn2qqbHkyULZjHFhz>ymu1+U0Z-u*1pxA)%J>+-2t~ zW3LsM2At@%4??QnLbIz(gK?`hqqi<}{0yroP}Pco_@Kmt))1lQ7kLbActoi75bmZQ z)XIueu+_zW0|Z+u7Md?Q`U8WtE0{Ja4kTKAu%= zoQTxdBA0gwt}F3wZq=m1P~s7b9y>bmh$cmWIBI|AQ3cLN&y_AiafcH(H@Hx-zV)rH zE{@PhbGP6tW)?dfmo7U1;Y}^%`i=DSRK??R(HY2||F)shQ!gwE%krBvs2p z3lC(oNtaN=POk@bJ$|NF!N*7~6nGyzW|N-o*I&R9b?8T4DYO5j3=+`iqPPg)2qr`Y;B8CJCt0Q$+rRl9g0lnAiW%Ju1bJFY?SF`$M zUK*xtFJ*KoAoSBbL>JtaP(?GV)?0n&EG{5+0*)KV>8#Aau^M;LL7DjfJ_8AOZJA@O zxuKn8vQX;AaSAXFY#fYpcWFc7l0mb;O#l4&Mu5v z=Ho|IEEzc~qLd}&27Yx**+qJdgLmy!D~&Y?*UI=1UM;m(HpcjD`zUWX(SEN2|Hd@W z=ildxe!PJ+&ZPqwxt5 z)nlvINIV56CA!f) zdFj5YCz{+&D`A@!Cr9eV;H(1t_V%sLJr0T)~E)=ADAkjX6*iNdtixN-d++?xmdwd9t`o@hB&f z%rt_P6T(!w?05PbIy?j{){`MXe#Z}}yG_694T|W$*ZNOVpY_N-I~90NDty`rhVzgS zn3_Yos#P|?cMn0a*$1NIaKu$#ID3Yuo_K>i;}qr@7DhZ!HUQnD;!l|zLp8Ljo!Zgk zRLNp~>-q_xdkLYsNFIhETMyZ-ktvZWW_rYdFjLZ+t;EakDJy(Etw?E~0burX{P?wK zIj|NNAmaJ82&shKyAqYz-nID@m9{8m|3w9zGC9=3e1xUWk1Fw&`YB}}x5#U%DDs{B zSPLf;)UGj=T%pU9q_7rhzLKx59>#n;;=HB7%BYxz?dgV0H>SI3Ot#S_>}4|0N0CvF zkeCdrh*w|)y)n3>$g9zo%0taMZ;?*X^_B6umgdLwK*i5KgKp9X9=n`7RU;6)=tHw; zpRO#nT2)q97GD2xDDk*V`c|v2$M>OYf!1`*6JGvh3i*$B`Kv5}*q;jdzXbot-Noa2 z-m?xTlokcsyBVguNiUl#7Guvp--Lo2R-iT4(l~VCgs)Tn76P2=*$5_%{Qpj3?h7tq}R@u zbi*haPTwjBnEjRe5kGGcS1Cqr?8aK^(rJKn=TyQ5Lqot6qNdZzoR-qtEfr`=AF1aB z%|2MAhT8v4l(ayzgx39fwP39jVUW49NDXVn5IDcedlk_a3`ILD%806F4meCYl(B~9UGaLaWPUjp zoY(qKUb&LJR+*ey9*m9dtSARyz?iY06V@>AHiTxp-K~U_t10_#1qF1|XnzMjgFWY7K}eK$DC{)|@zQn%qmlvW}xJX0@HcQ)G@VZw1B z4R7M5+q)W0QYI3X+Le!Eo5=?&jG(_XseQ7Qj7iEAbB3Gi!^DU}BA`KG4YnY4A#mMR z)fslDt*U1$ujGyFPrVd*ZmL^6K@Zj5m4sBOP0RTz{|Hryb(zPzVL&NDE&plMS=`e4 zq&>5$&nA6swcMF~UT?g~aO}duWR^uUEV0}URc&LX8+2LSY;@Yqt@gAEqu-~L^yr4k z8#J*EwcLcH*{vkmI9YUmGs|V_k>V7dx_9pXZV(!av(}MRaZ>x1RrTb6&CM#b_krvY zBr8zpKftw5H?g_a%gipV-CF%QqE5=ER$#=JKMsH7RjC!#Txx6zg9&Jg=JSVto4UDq zOa4}skjlB71KE}2QpoaVW$8NIK}Z{-CgVc6nE#O^yO5tr?dd(ap=J@28~9sZU_Y!) ze?{oyc-feaFUG>7zek;o6W$iJ{iNO+zg4gs7wnmn#{A8ClbB=2Un-3aZVz`>^aX1w zp?X?4)zr75>$}r=p+?&RbnN}SkC^@SW&JtL0WHoxaFgr<%f2<2gg#P3&EF8xadf5$ zZ@M#A<4jy~hlJa#{C&c0s=y?s8EPi@6^m9rb7DRyRA$2Yl+T&w+t=>AfVDg5yR#wH zP+pOIL@W$~`X;}&sJD_EHe9YJyKvfQpksGsIJnA+xnQe!sizM63n{%Q7@l-tL|Z8h zbg*;MF3e%(X=upIs^zwet*ThaK-68g)C(n0f$V{5z3HsYSlEwagfJ=Z(Lw4FWeIzF zFZY%1g!?u0Cc^JRzGrW+@|F%-FQG%y=UIHteG%nXICR?-tQ*_qgJek=hxc)|8moElC@Vck* zeCtF^a4=`Cc-i@p>`$_io}^1IvxSQ6pD4GjRb*e%oko=GQ{2HFYPmGlWo4^jOfIov zTp-rq`7@1&_=H`n2qe3nn2gb;NtVN1r(1piBip=FE3*zj+`|=DD?ea(1$$lC*(R*E z)#|-ScL1l0zZu~nW%^E&|r8B)!*?S zyU^3g>_D_QN0+wn*I^t{GqiyeW$ zA6^dx7ID9b`#YZr1de(V6BX_k{|;pbL+!s{3Acprzk50mSn+Hiu#@lopJV-ju$uRW zqnynVu6hZ%j_V(G1_A?~3Iq-#Ody<0IGr$)a5iBcVU-saa{UeQ2k&y>vfl>+3f}?l zC9ebmKk~xx-JBB!{E@F>lSMd!@Cicg%Yne3SlawN->)FdCw!SOj`Y(BqbO@L>Ap`q z1<&-rF1@UWWh(!o7I%JCBB`6I%Mm8DI(CzF2)AVVLWD(y`T&0=%Y?SLnQUjV)mCwVJt7mC6XF}PWtCwIo%rS z_q`R-*r9GQHRC_`cWml9YbLG2F6M6Gx-WsuorH%8za;#Su<_5lBiuol!E>Oh@K;vF z!Ip)ms>-T9RefzezJ@K9vP#9&tsbP&U|pU~sx(!10t8VCVdEx!-7<4>*`#f$v)JZn zOp-0{d@_&Nk<{{=-$SQCC-^)F=TKnFOur61UnGqS@q3%ZDyT~rOWJYn^}3IGjOI% zuR)fAfkq}tVUHCs6{nnqQ`(5-tof$bpb#s*_sgcM^2Nl9RxB~kq_23#Y`mfUB%uwv zWxACBy0E_pSEx3z+kpo-jG>czCWKZ$KvU^F0pq!u;qjp$$4t+^^fvSLH8vo?5nsr4fhg&aDkKbAV)E@-&#yRDspGkLj(G@?B>ijS<;` zw;{2$M_GROnyZ^$9mn_;d4?G+mIG5cy>aS%_RI-$+U92d=-Ab{zv=f`=j@g$*a&3n zF|*+#5`$VK6dDGzLBaNxv4a@zG>luMLV|VI7Hk_PZsOWJCH*dUh1RfgJn$(i$9)d_ zwJJb1u2>$#^bXl=E^3?rI~q1QfBro7VpHzpfliywHml6-T`_|aYW^3E0kos-8U)gW zBBaL5h7xN}t+C5MIa4vYYx%LRPR%EfI?C4jqOY9M9^4`Bi|9jsa^~QnWsZcweN2VX z5}1dpC%cXqtJ8qM6Y9#V+Zy%1{oD>unUDnM8u)V!Zx)^R4UmQq8i zgH@CHkn78vg6<$BVT-vDhNUxz6;7;_ud9jfRvLr>+(wftveQ$ww!eXek3~-{Th+o8ZuQ@`XtNPdaU4P1ZEHJt4BT63G4HfQ*oR z0=e4`c#Rn0?D-G)VzYrSl9!t+T%bFfE6m{z-a3zC-xeHv@rF)Z&sXOt7dxsOVc1F%G<|?7?5oH+%eg zcNEQ}w{R%89(2!1zuI|I6*sg2q9{Y*J~|y7@||er`#X6TnKFTmwRG}JK4Gk`Dl?-j zI}BRXNVh`mI~k5o(?;1%jSFStO0}WY+kwf-`d<$5xl#S!jT?>TV%#Y4NCGGrVKmk~ zA_@pKb2vM6wmQLEI#@t?qybNdDCuA$#*tp#<&&b;ZXN8w6IDWtA>5Y(I@kvQj%IGF z;xqkB2G|>qP#)+>R@IUlt)(Sw>mjmEr-!Ipqy;XyvL+C_Dw2F;H$VchNO((&S!T$P zVpF_h1~T0x?zzlQp8YZ(3}x_G&r#lA#yWJhtfw3g6El#V$*+fI zbQ~(?WU)C0HIJPyWqJx*e9E!W{*I4RyzC*sFSN9cBDVujgT!JRB#s~B4H7FqU4V$B zzrE{7gBWVoHW>{Pi+dd;kRX)HUE&Ik89dAiP9S@mijI9#Ae-jLBbNfhcv#&s7xNM6 z;V`%0fOy6R8YjIa2MI=TMG)$Rxlj48Z9~UoukSu=--i3&{EqwZNRrUS8L#OEsa5Ji z>BnRuUyq4A;i`x;k++`{wq>#}>RVS9V=Wg*~Z<9f}2; z*!0ax2I1nsjDev(az`ZCC8;eENk3yQ=JrG~KeWCb`~czD)1bbUwp|blD?|e4(?oI?^mnyitJOX)tl3+611ZP(vrK(D|D;I&=0WUFx zxYMVpyLP2f?NaoVHldwQTMJ4hxPj>B?ZolDm=}94>Wckq!?+rJ5^27ic%Yedv@X=x?v5h~ zwfsz=Ag%ctia3O#39NWqJFC5|O}_tBjD)>?ohz$~_Qu*tDWO_org1TFG+$nTH8De= z$)CU2<}lh&Nt9?RRJs8&f9rY`fFWuzn^4faSF*P<{xdNI7^;fJ&qU28FJ z;R42z%s{?#pPIUr#@Sk3-+J}ds`}=);y6vHE~87iR;O|k)#%{sYIue97aBiod*y@= ztbP3bA|*(Pq))PK3g4ClgJCwF4n)hZQ~If=v5Lnvnm!{^w?B5Klp#Eteyq-{Ak9t4 zdfs)Vk9K`vyCRsg57exRZ7w==(XWOIS2Ahp(_Gt88!v*6Uo^S+Kz)0rj>#315y*CAi z>giW-$)Q%kQ1dG$n#^EwHNz%XJGw@CupVb;KbN?%a%p^SXv5ik=r#Qkdryl`hjBs2NzIS6eLtG+3~!k= zxGXEFtuZsJuh+mdwF>tY7EroH(+o;Pc_l4|iBmYef9h$mVF*8`(w3bJyKe(AtKzX5 zyK+{6(j1LK4m-MXV;zWZ6A2bjaY_`d6e!dYw)vH^%5uPAQ+tmlWI)@|^1`DDDvHL61e3 z*ifT48-c@}v@M!^c(R%+)cha9PTDM3Sq#_kZrx7fUe}XHI^+x`Dsl92OW<^LP`Zoc zHzgjtnj6Lkdl5~y2qw!aEGmW?IKBo|#>%-E{ny=EO}rx9WggrIN$jQafu_aIW;06ny5lxxgP?TpstW4`~F#`LK;tYS+2ZhR5%<9{VCSGqiQ{7X;bi9-|S<2Ys1w`V%%}^RmpOQEu5S!+Gh}1cA;zGiROZau?YX))=_Kkh& zhNND?IJ=Qb3tq%`A6Mw+*%Z->Jn7wTEy=!PHD#eCXI2%Ov2np}n(-{pKVr|O{5b-i zx}eU~VU~sr;@Zr$BcAWJ(2l-+tRs`Uzc;nrQ(tnez)nXI$9Z$z`vQdQGa6+=upvpxU^ zXkr+R;BY|&{3>@9z)RB>I`C>s8-r#nN7IW) zIeTD}WCoEngF?lY`pIQ@L=$rTB8M8@^NP$ME{4I3v~RW@YCVamfICs7{=gw(Vz|^P zLTJNarmT^4M`OB!wmK*JKmcI@lm=Y?PVB2)J|Y^rbJx=9XkACF8c&$DvHn{EwM;gu z83!36=a%834I{Fr6=9$vL^6>)IP9Q4o41r4&VqbY@V~He5t-zNQn`2^bsL2B)E!&N zSN7Gd>$%}_m%FsPiwTFR*1O%4>B&;9&%39$-KEQ2cH8BSJzQENh_l$g%hEcRv}`_lneLN6{MP=d+`;dlk!G zXcm*Y*L&-z?_NSFtoRPSzJ$BwDPO2wRs+3;Seysgz;{Hi$l`U&tCuiq(z}q6 zFj0SKbP9n{&|8cY)2qh|T1m3|jVNEiYqR@e@q7SZn7r(8um7A4ea;en7Bif@glg#B z+2acd<}Wk9{JeucXNf+G@#kB7-km*H@u&PyRJUxb&4<%xL!YbfuqGS$fd-aKXR<7(d*h{eVu+c#+36Qv=|N9J9X;&|wVYt|^h!JzO@Co7e&gmh zLV!^Sa7>B+&UBrN&;IM##OJf(FNbtzO>WGLV@CY_^%MdxxtdcTADt3OZqa-q)UwOs z|6TZRlFpC%I}V@V+B&5Ug1+TjecW$*R3ovnv`3kIT9Yx!)AfwVc{PV2|cyQdt}Q>Z4Kxe z?R0Pr7)f-z8pPlVLm>n5d*ZOTgrDa27{1Sx`CKpae-|i>jKb-eHJpBvnl)OhP>MLJ zdnvVRnut~SN}4fA0_@r=C~hP(XYQnz3gZV;u38o&9PGw)MGzQWX3LHD&Pb|afQxW; zElQDKRcpflbSz47UeG+E9_u&KH?@t&k~9pUb5o6EQ?ME&_oF5`EJ%6N*}xnA!iW!) zf__xfPiUu+x7bwCAum%{3VDYU z4_3MgFCE(6nM@sLO=+Duh0AHJGual00w^mAL;vtME^cIYzbrW6g?LnC!sAY!r{jfa z`oZYKHl0=;d;6sJ&3BicD9=uave<|c{)jJH#QemRK>Y8T(88YS={GGFEp~!5E>P;w z2)mb_`ie};A}Mx@CLbNYIh|@Xg7qG~LXmzEuA%1KjZ7ieQ0T#ZaKJ&d+S-)@4t}t2 zQgXcGwE5n&BW(p=+gc~U#oeTK9reY-_(+@YX!PI410;?OmOS39b+x3Ub)unVd?F#N#XP74sOP?M^d6SPW+FTs3jFh{b z-jI9~cZkD^(W4V*)h-u2!t{8AtFoE){k(a}{tc4y-8ve1T2QJQ|jR!*{B z+K)5ct2u>E$6t4NS;lX-HN!(;4CK9_N~TX?(43F_{tfy@sQGenXC@}${f}bt@@DuE zp0TLi(UAIu*;qw?|K~F^C;Wq#MB5S0tjx=t)ou8BluEOzi7_`=I`#On0O*`@Rds09 zZN#3Dxq*+r7?PL{jI}7S-oZG^WwgO{;E9l|?hd zXrgnfN8r_!llcl|`IN%E!R`$XHW)PPA8iP}kQO$)x-{ z)>sytA~PE^9vcdf>al8ZHcg8)RKErn;7p9<9*(?v);Pqu6bp87i$}@go?w&lhr{`% z(|3*+jbn;Z#c{5+9*J1VO&IGZXm`* z?5f5I`0EplVAqAmdL5u6G651wwhxSyX{j~LSDqJ~Lk>H$Bdlx#gt03G$iCO@jDKDL z(@SfBH{oxYsdjePnokfpGixCAYduQo7VHc)A8G)mk7u!7XLwNcD!oYs*$Af^E#TyX zMFS(jXAm$aX1`1A)7Mu|xV|>jx|{o(@&P2+8~XlMmt1u)A8OskYpmPXc5wAFGr4BL z@9>5{Fx31r-c#-IMJ_6*_00K_;1)@oSph3>7KpOs z!T)sb6-T~CzcqL|vxy?9uBC{7(|UEixB)XmTpQ#|`iGh{TDK?E;uP8*`FzXOUb1=o zgi`WBm?|M34#?mDOUQ?|uFfu}McgRoQ_yEW4h4-oT9|@Dp@C8gIui;KjY5pdgbYfk z=(18OI-djCA`|va#|$93zbv$75(UZ3Gy;M>I|9N8j9jLd5RjHkX}Z*6M?lXO321Uw zf-F`Qkk4PZ3*WS-lzxUxhf<-P*6n-?t<^~3QIIC95ubv7sfTV9B(nVY6qJYfKQ09! zi}X=ktq)vZBXwo!`Wn4taTZ?EGQy{#)b+KZpNJ@_UNpt5#LWeaie5MRf$w&=Z#b_& zPjbRBL-P=iS-nh$60?$gHG?_-+P@i|uV)7KM^9hGQQ>v_LM^}H1H`6@Td27keKpd5 znDN1$=4jL6LFsF$fqong6Q%pF8?*DHs*f9%JluOXI!aj7p-RO3~nGA9o)@;Z%Z9(jFIDa4=X?J7eFc@5K>gOHcj&L?2k-uhQ=ZrWE$T!S-H zhlsYc_7YnAJAOUddX(D&ZQZYjZnX7py!rUFb?1@)Biia4&a**xc1@H;=28k%i{IkT zse%UxW9qR`RsDg>DsIAgv3S+X9FO2{&dp%Slt zZukn@_{fBLu!&d5tKN)1%_6TaVs#rM-J)Yenae|Uv{c;s{KpwA-#GkZ5?_y;kXLNS z6Q;~k57$c)ySj7?{Q^kiXjUY#Mw7(EgG5cCwbFZgG_yn17P~WM)Q#Q!TAvOS$Ig^E zb~E1qZ{z9LxHmD3qv875IJ)Axl`9PXim!U~$kD(?i*Btw_W6%bhucSYqr+%H>e2x_ zp40_qJh@A!#7H#_lK?r=)Ygl6dClW!qR0F#k~RZ1P2={mR3+tb{IGOtku*6Sua@UI zUOSaE%`ueNn3~9GkMoF=PD;VtP}jcXa(|_X1{jkWCNC?MdCvJF`r+xcVg1Q=|Y(`5Eb9!5Jw)*;5#u zYehIU7l#-7D&p5@lN3`Q<{!wYE=DwsiWY<3R!)dKvn(+g!;7leF`8u-^>a!A7J9^r zcXduT)oi45dJWivd1=p`6RI!KF&$QfDDyvh%iKx0Aw_ww64g+mYD87=gIF46)tsXs z3+0amt5KXpv>{u&u?KJSr~_ItXeyTGJi+T-)`Uu{z6#g9aBoDHk^l=~&t5 zx~0`iwkkCsv}C}~T*_J1OF12Wp*a>AY-Pyv!3%X3yh{|FOX%!(ojruQpX$yPVA;e? z#Dv>iQONE%;v7wEjs(%INfk(!_+2EUp&hlL{L$CzuGaQ@I0!mU$O)1_>OSAC@n+KA z?!hcp_UjGX+q+)JC%veCC4IewU9Z`vlXi>)_~zeC5a}Q9q7u$rP*`Qa=5R;XEje`w zJ5K3T8D3JaTiOLbb&Hl%a^qOW(M`nMFk^zRk6lxqmU&C8GLqixTMAAT2Y?NT1HhY0 z7IAy@f9X>>Hx?Z*N`VgaPhn0fg}xxZ_}|stu;G(cKVRk5)?pgxh0bAy+`pHOa!ieQ zmGx)#CKe(Tha$VP{0)nlY5$mm?nr`na?g;^Y8(^M z8jE`h?YecFEVQ*@XEeBTPI_}V|JjM)`DB29PPz<0z$U#q``J!C%zYt3>6hg7!vgW4 za`kXXX4aVQb?E0MDKbO@ws74sAYdS&o{(o&`47V9xxfE^7`{(@zZnjW|9@49GlRbS zypR8rnQS`z_e5e()OBkWACE7x0QXUNJj83h1M&FxQU7B+c6dn+z+)VpPM*+0xXlYc z^4{tF#|?iXZgSs%STwnBQ0$E4zEJEG&S#4qnY@<99gy5NI^L&E;+e?rWGhUWjdFS( z=RJ!qB!?LaHydJ0q_roW5Y)Qlz9F$=lKYP99rO!uc+`Cb&_K3l2G_u5BgqnoYH!Av z?)x1Y(rl<>PyXB1`@+dLLT>*lcjcjGvx0*IPvo&IHk{$AZ#+&F%8cmCSO~y94jo*b zoxs72PtE6zv06l*b=6m zr$)~Gm={-R*Z~_FPI7lx^>bhMsomj|RywSARIW8>MO0!!X{hYO^#D{FP_NYw0`H82 zz^nXFc(arH28)zN^1)?cAsW{2wxdZr`{S!YfB58M$HrTGz3w8n^8Z1d=>#xwukxKO+rKzSJB-LQ@ z`tu-1Wyg{r*Hp;pc2?wi%czbdcS18F%)v?$wT_*eX1zRD*EUrzHE>*G)ap7$?kIEz zV>}w)FDF1V$8eT*rg9J49DEx0M%2P+4!TU9$Eb7N4r=gI!mkKBDcVC^e?xeR5a@oc zSy`X*K7nB2T}2QWrV?!+g z3eUPd?QvLsEAq3ZlbOl~hN!expXlA!UiU(#k=VN5H z5qpyYe^fm_Eq+S>8qs?vkbO!aJ{9u$sR&IKypXHDvyKq}ImY#e^bYEb9-w~ZSZ14c z*lxCM>?N$(FwiT1E@95(7i#{6l>j!XiW~+vi#JiOo4`e9c%X_&@iNoiDYE4u=wNzb z%fGd#K`V$jID%Yn+rsEl8#VTOUR6B4F1F0>^xoO>3~LvkEn5b;AE|;Kz7E1K4{^;| z7|MM9t6jvs=-T5H!it-RlYfk#9^yBOiP47!)Lr{LUJoaTgEyYjK zHau~un~?z6k{Xr#%~@z-O^1S(<=yaFkTpL{=o@AwbqFgF2bBbXf5w&u#(4{qhluui z!dF7dqbU1&-N*2Iy2zqeDdbm73QO^E7SBbJv2(b3p!xp;J-$N`i@>|lJyq4fA0%Hp%o+>bvtJ+8E52g(EgTYCJ&LEs&n9!1}?8q(omk_l>OFy-nY zSiVGA3Qfv)(AXw2$qfJE9;22``bxgN6TH`d4ni+0OMwH~?>}@?z-egvU-7T6i*_YZ zLa6bDzU+9-xL%3kaf|E*(hp}+!wv)>qL>1JUS-Gi-l*kR%lkz*$NAjyn4MLGV zzHDVJGk1Qy<45?We;$ng^?>&)%pmDPLbO_u(WEEZ1@DWZje`T-C|gQWtC}``^#W9b zG^koBlF1A|R;p$lT1P5I>e4)w-$%?xqCN8S$Ir0_NrG1i(KMttg_B*O*v0&o$4=+B zEOu--xo2eW4D2mNx6-W4&$-n zx)_gadR`pK9R3d$q$Y9n=ZPnJyWoC@YV!1{$R<_HAGu6i$K6|cv_dP^G z-eqQu%yMLM-sIqt^4j=uMrPW7VREtT;8V_p2DwO5Lcf}Ut#uGf5!-IOpOM@*T=G^; z?`=A&2e7>!Fatw1w3%1H?OF5(+c*e$Jc&$JN*?0Vg{0Q2m7by;gx{_0k>2NbwFlJ8 zXAy$;5%rtW1E}90dad8b8gJjTY8n3=7W)+3B-HY-US%qODM3NPAC{B{mFIkhJ5Qct zG{<@}vfx_@0BELUb9T*nE;CR;ch28EUJU4Q7mIjAbP0>mCwbAw0Vj8JG5Q5$(j&TN zZw)H1KM$Kr3!88>NOSutG-BD)9l3tMq}Cs|v&Z=an;plUYXPr455i9$vE)TMUHiTx zrDMpwJDrxc=ST3jD|-O-+jG1D)fBOWzkRIse8Q07#>3cTV>REf(AE@#PqsMd2-9vl+y7%alx<@}w(Qoe2NEqsh z&&>0tx;*8x7xB}kOtPQj&e>ad`rUVm`rSiAtF4=72GwD`>68HjPj||IH>Xm5)AJgf z5+Tj)^`@HOOTP%#+vl)dGpLv+WIoJoWS=|0GY}OOu<-e;MdS_!T}Lpv^iR^ zZPEc>+PyEIKH$qwye}so@MVqn<&^GUK5Qz`5ABdo^Ce|pxbEe;vcTCO=Pj5)t=CWa*DZ@;t`KCQ*FgD|yFTdL* z%ZIDlL{ZAddNA;;*gW6Nd%+j===&1ySu~^P%e-e%iit8kCH;4dl)QShlJo6^wS=D% z?k98-o+F^^DU)i)oomm*_LaV(r|b!<&q(}Nk_&ZuxV=!P$@Q*IHC#*Ulnhtp;~Ef- zB>xh;Sz8xAR&@Vp^ilZu7s^zU@{?9WAME4ZKTgy~a!Y!8+>^ZLrQY+WEO9RycJ0P0 zH1oQPX`w$8E+c%8a3f(O;aS4F1o{epWqs9O{68V;WAW>?l%X(xS>O++=dj?_gYUAP zrt)7bvaM7dly%b*w{S>okJOsHTutg+yRnPzitpDQSflFPkI@|doAq(^he-!j9skM_ zc_fs_<~dWDe$&VvbzLF-!Bx*+E=^D3vs~h~(|E5{4A;NIA2we#j_mhFH(#w1l+5sZ z5h)B z%H*qKlDo??6?5%4(l9Jz-GcJK?_WF0GY5YHc+<)nGs90dfaT%zR^FUhp4=Vk*o|et z?qEl@Jo#!UxK*$R`>;8D9pGUH9geiEB!`>3<=~a~nTHNq-s%hgH|1?MfFD&}ANI#D zZ{oB~O9l%k&F$Cr8`nOyJx0&jZ0ot!Vtgv+6JBroC-(j|J~(k**>B?mShk+}a5!{( zdrr4XrZZTiEg33UiM_ky)l=6m>7y_4qa8G$yqnnjR=nS&ZBu_3y1gUEjlSbY8H13Q zyoM)vkeJ6?QO0?>kG7`~l)*uN8|dqLgZ_7ee#=3jJNt$bd(?t`ARgCrg7XA)i(QfQ zi*i9MEBG}MY!auP$bloN!EE;$Ag0Htmi{0z;r$4%&_Zke8#-^yoc{U)wD=hImIgx` z)=bpSljPpRLaQI)MnhO=?#wcItY1BuYc%+~{Hvrc53TvVdWqDTPv*_nEY_?oTl6lu zxjfRzXn}~=Y|r^%XwAQs#BQf3ihYNR9V9j?`+V*~09Q0&2H}8iwP-9LCO20Qg;_&B zcZ#Y&;a8rPs5>!!q@E_^BFPWRnvP4(<5y7c&~ z5L2i>*IMRzTBeb0`PL>kk_xr}o~wlC#NJ_eOy(vNe&enWVl|1qhv^V)nhPHnc^dTb zi?Wp(&GOiyZHfY-sU8)? zfW+Pvu>r2D*{|4TV(%P%xTfca^2FZ8*oeg5tK(17X9odtARt}h?i^U-b4h=3>x~8b zZG7p<_DXHTqT@TlO=!){)B?1^30?bylO6AelY47It3Qh**qAxG?f(62;O$VisA!vQ z-J*Ft*J$vG{Hs=o+?N1F?-(gjQe9)cQE{kQ?p@q59n*+GkFZ0I6yq*0#(yCgxmD;| zVpPz>B*rNQTOe%<_!EkO%o{i}Gny5c&d3Bhg9^TlccuNe<9#c2s{nY#{kvD(r@I&T z#sU}$eVJwGdS9!T=QCVgxz8&^rSzwkL|x}am1j6tf#V8Msm8#PsCRf#Z&Xy(BochS z5VtIpIrU)ulhsREXccUyw_&psovzn)ZM!<`C%`BTb zhj-WT?#RNs@~Mr^Blpy+;{)XVM!xoO zc!b!WJVY>^PmReUBfvF^><_ytI3T2wIfj~Lq<0H!MXkHnI%^t?xoYbkj8_XSic2T4(@HN6O2wx=J z3ZW_l%F4U5*I;E(FDghgGFldxM!1HsgK#MEtGQNlz0sxZ8?;Gog^BLL%Dzh4w-0F* zN8z0_i{Z1}CkQ_$^!!#DZx`Pk8|!m})0!gFHe$OoUOHQidVv5;bzop}|M+nE0L*U! z`+b^nW^4jWCAxl#+|iBi*xSUq`4=_+zI)uT93;6PLC~u1Uy;bZT(3d-AIJ*Eb*hG09&-98p z%`w68g(wwGpY)@61svnfxv8`g> zw1)ei6CNk%+jK$`;g?iQ;WjVm{sh9=ge3(3yRJS>_Bwug_Wv&$UE;=IPh2GMKoV_!!x<>h*O}9G`ag5PIgW^NxE5_?uhJllw#q!e>)r6 zB>a`|1HuZ>r|@As{?fT+ffV6B!bsv?LU@JylC5cX=%0kdjDubFbd|XRaQLVDM$oW1UrUb|*L}_K&{Q z!OfSwI{b$~IsUN56@GE|!Y?lXgH6~Pu~!A3OI`m$e%bzb>2-Ex&U zx)80R2`|MCAwGK;qiBxPl~w~EyB=T2mJ=hQ<6~L;W$`hPeTN@6rv8PyNak#|bWnfX zmeXmr<0A$lUK+`q<6gVIbf2SQLxo3_r$a}P2`@&H@0T^*R-iW@Un1XHFXm9i%p;Y& zUv`6z9Aom0zxKhoEB)!F=q`7Ok+kJ7DprYDkz=aQM*A0(F0|&8B%^E$JgyL|+SVlY zjfy|3NFMN49Ppv+ezIw-!37kj$bHBtyKvpsb6H0r3}H*s$>)~^I=CM}vns&1e1$nz ztRyS==dTj^LY}nlCOk(NMY@$-drc?fO49LHu&or!DvZB1CFf7o!aQ(S4gX;F>MMNq zI^vu{OEX6u_A{w->b?2kWTzf*ee9QNZErsK0!``xI!~i1u1UlVC4raeu8kte7y(F^8G1UD9StIMk*Pp>Y|dv$5|>mo-d!RNC!2{(x%T9U2LE`BIdS6@@q zH@R_gg-#;&>+YCFY=!kTMSILeqayF=P9rz9zMGVcBCDhc)3sN!eN#g_`lxya`d8;HKT*Bwy6Kckg2Ibt~Q1j7tGd$F?MEO&__jdXG z|A6+~2x3aW`UBf!rSu4O>cy_p)o^v4F26Y!E0hg1t_O&ZMxRjMMLVjVmpii%GuU*U zAIs5bsClQ071UlYudWqM=xjE>=Y$4l03N*g6<<6z1lN8O|@NS~%B>sXbFd z{BK25ebXJe7o1>+sNl5iP*m{7;@YAZG4$$&W=L}Z%(R{tCFZ}d9;*BLvl<;QvG>TLFE71@5aCO~& zA#)OB*S+(+3W6hWJ4vLQ?|5~0M z?V>W$Tu>6#A8Ew(#6O4{H0i}D&rT?bdWQ$~5Er$As1;c)RkXYnYT3)jaQaOZtL}r) zTCuraYGT}NL5H=#9bOA0N~@IY+@D)!6>9b;8lOEv{~Zlnn{L;s3LRXX2S8)R0(WxDraIHPm3S?b_0&)GxIL4nb_ zr<->6QcqJ)di8wXtLJ^C^~^s`(iU{;Q777?z^Id`Pm};BB z54Ei3og3P&Dbyv{ggE8Kt#((8FS&sY*~!-$H*ut#i{h0uY)m0{Y#~Z{(rd+)_kE56Y=TOAoOGCYnfuRqWquhRxChwMY#B~vcT1ZErh{5 zPb8e}eQV;~ZwQxwiqdct&%Y+l%Y;CWZ<0R_pzngTzPZ*-fD|@c8n$qo!_iL^DTl`k0fiu)^1HDJlF{BJzkS zUT19 zvuCE85{C0W0=W@R!VWRA*nWjvr72NAL`?w?pLaQOE#XImdugL{xIWBP0Up~YSlq;k zp`WLx2rgVVobUC71%w|E4k47LlRm@#dgv+s7xZ>JCFzykSR(i;-yFT2dxxX9#w)GK zPUce5WZn`%ouYdv_UY{tyz549BT6Fq^wv+2O6g4+FCUT5VDvU7 zwAxhkj^3JG;TLr;{1pWXDQ{}>Gj+5UTY4a!UFb*g=xpwRbjAk5Zgh5HFU8KBBRa!$ zE}t7}yL58>9D#i#S#71eyhRwY2)!5AVN^%q!^Z3u;@(BrPUu72m0U~GL5D>`6dju0 zD=6hzpP;9zx61+ZDbJIm9f_C43msl_I2NfvDrQ+Ty+GSw%{2U5QhzlVq51kiye@=R z|A_C*L~gHP{ino?sh!t`Lk2E?VEKdIY5L*Jn3$nUVD}WZpqr>}a0#{C1}^f`}AhBG|A@@nx5B-2}I10)Ssh& z!M9n`9DRNyRZ}vq%AjXdTi}q1GU!shcNU$ksdSL3JIn#sLFwOVpIV^nB?PH#If;6Hl>u1S!}|J1 z?KdbDi$ZIj;$sPdd@aqfViitH(|6rcn_{m{aCMZ@9fXW}OF)<;itBJD1)-Mb zcy?+ko27i_c}nv+zciYGX&i2vb+GkDnRA6!e?vgLLOtXa>KCPj%0F(y`J*=T%f8DB zoLiqSZ+a`VVLJM7w>}{%=GOG z`Azp+G*3zJlC*Upt zzJa$T1d)_A9u}0EVfxM2 z0q=RR_xv`4Ten6Ct$CTg(5-xKIbc#r`9{Ya%~x{(Kpombw#zRbhB@J zMQHSD?WDa>^Fl>Euu{&xO(StON(|HwHXdg=RshWU)3MMRcU&REj6-wm5K-vEL%>M( zUSZ11&9B2AF)w0dziuCkwP>)S0mrpQYyh!>1}9e-qWs$3>wpAvXBSF>F23A{;F`-I zR5%DH_{H!mZ6cfuZw6Teh%i^h&%;AiDrYy;)C4nV=DA0QaqT%#Mez9DdapfWetWu3 zy9849^YyF0SMW7lqb(hAr%Vr&~OH zoRy|@DR=qfelec+iqT#uhJnxh%83N8YcHeM8V-@16iKIK3I8H)FgvBlTvG-e|w6;;?{;p|XSmb`;A- zvfFsOhjINm2GO@!S6;su{SM)Hnn~}@;oTL4KYSVgFT{J%i>q&?;Z45p_TpYm+GPa) zs(S@L{=>wZLi{Mff47r&Pw+gI>v%%l)qLm5pJy+O5w-s4&30if)1U7wXK|9};dM{0G5l{uKmn-P%Y0 zzQO*%s(!&>DJ;QInmxejO%?}Er5T}@2-F4tu(Bf@;Dj>_YA-^^>D!~+Fu2SG>zKXWQ+oz0KbCvU(Vi&0?|`^AQ&Za~fn5gg`ie59CgO zc=qx)RJ)Ae8Z4nH0@aYcD*zJ@Sxrh!7Nf!K*cKEZg<8(HVSvbhR7S@ZGFtawoVFue zN4T7DHDRgu{AaG)y?cHCs4!9Z!_fc+N<}MAiZQ;lah%Dey_M{3Z9^N?(m=H-O_@2J z;6<7Acn$OcLdfzHXdv{=eaElRWO{WKm;X^i{Y(tSHI$H63ldzpXska9DX1Y8!#?Uu z_Kz>Y(fGQ>eeL?vTWUa}IJDO$_l(d9&sI62{m>A1sk;)$yC*EoUu9$3YlQ7)|&!;a0-cgrf+7zVM^I6_x&8zmjV=ld^-) zPxo-D%mmp%x%m*I0E5koP!3a@Wvkh{QJkOp`)ycP{}~aO^xX33weY0kHXHLb;f*kD zluonBw~PwC0q;6D5^dExFP=X+eaywPwK1$}Z8Tb65^t*q@B1#EEsSx@q>XSYb<_An z-H{v#ReXU~`J#9gC)E^Qg)$#KKP|>?dR78>XUU7lv@o;5y=ZwWHXy$vcbC&n+|AJD zHlP2*2D#i1*F6Mo6pkazAzV+m2aPMs&&%Ek86gfSV29}!Irb?z&xHqU6@ zcI_cp&3Eu+T&!Yhef%|1zqjY+-$a5{YP`Vah3mcol-Y!f311{=801HP!7}7P4sr5d z_*LmmAL9AX!$ApNr55bLF>mJdQPc|BgZptb+N75_5wE-<^SLsg-VW7@(=dG5P+T56TyZMqq{3AXOBLXtG-S?yH#>qT z$qxpGTAtmO7C!`N zUfO%SwDFk0ei}_3|O>M^U!am=W&e&f1iI% zn_CBT_76Z`67M;m|53`~R`*_45)weNIs z=MdM9pe9m$cY15b-YR^LA9vGUDQi}qeAC`nbUpT_y?L(jaT&HxK>%3%jxw=mb7a9* z#+Xqn;`GvZrF*w<-TgO|1%6BDBKNGUM}VK_k>9-cs9BuD$hpsVpZ`k zGrCRvV(hS~UyUzd|7tvbN#eTluf#7%To;VR&%w*`k(+tFI6l)}*YkR5{50oaAaU9k z6y3eE$VN?j<}x=pej8Kt?Xk1a#+` zp`ujb4A^2x>A2y`E!XKChqIau@xS)x`!H7aRR?a#IBaRFNCP9W1sh$Q<05GJDVSn`WfW;j{LET?6oL`;Qva z{n-)C5p~PHYW;`9_0Gx9$y}JHi8hVfGxhCwC@Qz!Y)xD`o0z#%?ZewscNabcm!75% zN7#qmY@qg2lrKF_A1Y@w@49v<++a?6dt==T%fHu{I#fJ4*qG|CYq?$X9l8|lUwg5q zGG|#F6*ec`4~weC^pH6d-kF1)MY@Y~LFd%%Us*9bbHYhFo8W`=lhL|2mMxKe(gnEH znuVO~)kcQER-2h<^m8Zcy;a70A6$B}-jCLMtBd!(eCb%dub?Vu>pP_RuG_TyU-7@1 z>Zq5k)yHhxlrrQpKZou01tX5ES3JC)r=Dbl$4Yr-10&mXzA3?G{7WY z{S1|0U+yE@7IwVaXJNyD4qlh@dSSR@cc0LPr+BsL0m)gp<2(R$JDRRg+Hm64F+_yi zN%NG&S7gj#7tTnPI~+#RJ0ihNxEhMqZ4TYMnUPmF(_Yru1WbLvwYyXxAVr0*O`E9NU1`K#MfL|6p3y^yB4LJpvn#k z*WT4o&!PwpQ^nl4tH$PMP8xZS?;2rAVgxlMYeNMg)IUf&%aY0~gZO`_J!a>`2BiZK4`)}o4`~HshuJZP5`M6MG+uN=E z6^&*HCw2z`9!_lCL!$j1VbZj}T9J5lV*jl)T5EsBQK|SDGLESI8v3`xUo2i%pTujQ z;kls|dC8jj@kDDiMuk?kU=#b1wvG$6XDbrhb{iye8n_!SoY<3C%Dw>BVm8NTSi3c* zMhGz&?Fw7)i5m0>gQ=~9Ro?W%z_(Ro6))R|Qh%m@M{BvumBJ?)9HrT?kt-KMZ~hNx zUgu1X(9<_iICckb&o;xc?5qIfT{^&c?boCdl}|F!b$sK5_Gof9Ew?>7fx}?gFY@aC zIh+NH2(u9m(l5+L-z3~t{-$lrU}rBpaR-%$f!Qva0C)tHCxTyLKrb>t z^6SE{F!bD1qr2!Rq_sWUD(nO1P7OJyLtSc z@-N3@eI1YGb-dsCe%06`do`eHWG^6HD+#B5XM4~Fk?F^i)S9=x5kaLguQIHpNi7K!T6be1xZtp|5NH69~E z$^bw-+=Xz?1{%k}**I{=qmCYZe>up0Oq8>K%4B2LMr3dnHaP!D7P2}uB~!H|(%^&y z{ACfEL78okS?$K4jNBiJHK7+1A(Cq^4Ix;)Bj06mgybtRme(^<%{JD42^a)9CPL3ze$FM;}6QTfd6#h)F!=;?XxiJO-l>RrY&6H!q(7AK!KJ ze@@hnvZ0yQha|SBUu|c&BU)U$VO4B7+5AdZ*5RB$niGVBIE-bC+-a*h2)OBX zS?Yt);2QB!apG&ztVp5Lf$zeqLj?aJg8vY~f9P1@e;i!`_!;mgB;aH+KnM6X2AoZo zbq#pMZ+YV2%*-IWvw>^cqL<1yp@d*8Z^V@0VYDj^m4hh38T11Y7QS@9;4-(0_lTu! z;(Zf;`zr%7Os;o5D=|%>*!K!|leCz0TcCd~Gh$ZA{;3uH(-ZCM?=c;qDWNPH%*@s0 zEow8#wFF?!9?ei5CXGO5;WKA1=Xf+58e8aWbSu#f}x=oZBiPxAV8D?a&YWK$7b#< zFH}jfW*-Xofs1xXv$k;?LV02H;@ZidiN>YCO@xcP#c23ywb4Lfo!v{4ct6=~`4Q=& z*I@p`CBn7C?L^q0;YNwPUD|CiA}zVqI!A^d?uYvuTxgs=T`S_%6-Df@F`E6BR@iUZ zhx0P`ZNHCXBsqTOvXE<*Y*kpr{@2|CxlzIH^(}$&Dis{h$NN>Uz`r3uC87D=if!kF~Wxf{zKwyO-G9PE;&AGs0iB*Y`HNCr1WVsso6Lr$8_1#^M}r4j|J4!Ykv@ z$Z&6_J}^Rs7J+;glF%Y$gg1d2MvWKuOW-T;6?qOQI%OHj^k6tl7>>B{ex>dryz`KZ z#6#ypvREAwZM2n!zDVtDCo)7uA}l@!@y>Vm-p{od+qfpBp^aagygT7z{yw!9@)mHr zZWZo^+dz-uy$r5S#=VEIG(4XPpIoeT^c(?z;^9Wasqy5ibCdj#^BBvS(w2+O7F#Yh zTOyoTp8-oMWIu>tx`sDgJkW;4JZEfJC%WPOfHK8~+f*bsT>G73!@UT;Zr?h_4fg?> zb+qd0He8Y$1?Tff;Tk}FQuo^$nlN&|T`A$79}M@g?Y9$bt|qbPc(DvZQ$om-18*5| z!T+L9HiFBLD)!xGZC7~&Ac$S}y^vjZd&sW4LAM)KKFIuMnzvo;uZ@r?sA=z6nT(lx zQ?Hu#-uTW`dz>>tfGKy?t=<^`k%HJX4ef_^1c;q&GC|*AXFCs}VrM%GPlam|(O>=H z;^CIxVKhvKqpD7G2cI4v?uDN{~s+J zivQ0R#^V1NjupbNHks$d)$fiO0Bned;_28fBl)HQ-JSIlyWP}x^sq>SO{#bM= z%Hq{Xw@N>X{zq;;kJBkwI}eR+JnjRzIL&=dBbtXnZ0P$jfx32eBZK;${|j-5Yk|RN zd3K|#89EfXBX$QJ;QmZVLu8qa>eGJ8fGUEFhM;AvU-QI)GO04_8@Yy0`0sAZY-_WWN7?@_GcFA_&3hObip9^=N{SXn66ln1fONUa4A4% z;S?Hn?=85uB2xwJa=f7l0p84u$dBPCK*?A{(B$fmDKMHAHD4cqjmx_Yt)2$xK-9p_ zcsu3`TX(+`!L>bB%BsuMsu9|R%QR6xF%i52P&};J(9nbCQtz{2|Kt?HJ{YvY4IqJG zLOSH;S)y_cL@#w%H@jzAktLiOvV?=f%ECWD6~=KZF4UmF+zcWegS7+SS0Gq+>hIS9 zk0Ri)NqE*EbqG9ncMs1;z5!dr#<_*adtc-h+Bn^5Y)NNm&0!ddsX)y&hkGqtQ*$`Z z;Sykxu?ec$UZ0&{)%wTvK2fO54vOjsi4Y1p&edbwtByPv;aPMmAr7Rr9#jX7CaTgf zQNR)IB_I)mYb^SR2|$Zr5i2oUcZjc>yWa4OfdIU#1q^}Jpu-LH`DLq@4rknrt{paU zwp1EuNet=869OM&sw^9gv7>Q44Z1%{?L-t^LzZ^Z_yLx7`XfGoZGrFCYxu^zO2W7G z7@LyA*y@BhZcR z&3ZdKl2e7ncLtNqYpn=qf*y|m6(`1O5O8#;^dg9l$`NIq>fPBcOjN}VBT54fi>H4 zT-gN|j~H_p5&q0x)_x3rTqlA8G;KWJ3}l_ zaZr}*XdJRXrh?%7zQ0MLO>wtqVfRb=O>sY`g}DP`F9x1&eK6?E6;XJ}!j3OSJysyr ztBBt1x#80QY2ZX2aIJ|nhy}}@cA0%@@2F!$r7wNh8;7L0Z9qvZ<(kr=!*JiAb(d0e z8j_102)280x%axKh-~+~1NcQ_&}cH;Bi5i7wcv2Y-KGUUtOZ9@UMo?sGRr8cmrtvFdiJ6tY?q+`d~NV*6mc`xSxEWIQlr!l)PMyOy35Pyw(fQ+SY6C@99 zR_LoBMuq5LaS?FJC+OMsfgoqvPjhah*2|`U`#GBaf!rhnpfO8hUP2f7T|2z=J&fd5 z!H^$@O{aFuz*2mB1^nn!NaT!>4*cj(0T@!>N~sA*JTIpr1Jzs#t#U8v%<00`LI2Qu zEy4=djC<5*7zQ^IZZDh#?g-r9A2b>^z)?J{@m<*sdgNiFVGGc)q?X}a8w`IGSaaih<%L&8-YfA;yfy|y$^KB znNz4S+qsoy#qyyo{3B>Lb9u~g=UWF+KOIYny+~Kb%y1WR08z57<;}w7Vs<}^>Bu(= zkK-Y@XQ9hNmt?2X&4PfPnCo1$WUkYdf-v()4Fj#FZFj~ofmzp;8DIJ?^U%V0=ADPM>tLixiC`P zw1)Vq#X!kH62cBSB(D+kgppmJzkv3GdlhaX!luCG%eXXzJq7mx-t}%En)wF8zJrUv zvp!Be(hL3*h%{Wcb>Kb4Xj^c64sB2;o$nM2wwbb`4$}{`1g7^rR|vjS%zEZK?SJaH z`A%a{7Om|1+W{he)bk{^nUlzWBKupC|CCN3uU(x8&x+5w9y|YO1=1p!1_b? z%Wc?qk$4FAjT8?NzOx8nV^!YM5XN9AwB$fmM!R!{for6Z^GHN;z#ycSj3vrIVI-f( z7ncaYH!v{-Pry9`*9!OGlh9R$qj2Ig>CDgs*+aS!@yp;`aBJbNgc|{;=F=EdA$%qs zKEg7yc0mO(FUZyWC-4z`ogxh%`%V$~SosX&V?Mm&@CnLrNhM}6&HuAxQI_}5S|TWv^qs5 z*Wn>#(mKOKaYGw#uRn!w?h3$s5!_hvp9a4Yj>5X5RU#4J7w!}|6WkZbvni18`0OPy z&4Ozc2p?pO+)e5zhr(bg*gfHhollslBtl3MWn@fttq|ktggKW&l5TJL25c70u+8G| zx|wg04)s|SXU*G&bHVuM2&tg;&9z+5dVj)Vk{yBtg!XQ28BP+i1PBeUG_&TP{OH>| z2#Tm2g&@s15(wPJuyJoYpUD^rjTam>Ol%xUY&1*&Xv={tR($Tap146)x-(Q;Cgtz`WuDQ$ zWV_1F7H7LoW=wZ7m_gQ#2E$~>xVIhssWPTe)$7vRaexyBkCGTd?Wj0_EFKM!@Ua#j zQhIx<0fW&v3OI!G0JlKMbirs38$BYc&Eg<=0XR~#og;)u**78>GLjG=T@nT(NXQ$( zMv$nmzapC8VIxTQ$&xpc6(owiMFxnqlk5Yr8KlKjW;esy>kS&#o;V6CE11w`HbYdB z9NHo98P%v2Y#WK{I$N#$Y*{&(uICiPWB@5m6Rd0<=|{P1Z6xzZl>bXLfb1htz*`g$ zKokp(Jl?Gc1LV;5!2{_-?R4!X)-H6RHnf=EZX><$3yHnqj@jmFveebCCQh%T#}+cl z<2#e1`G!s(t<=s%X}gEP^Fn!^JePY9Z{2b<#Yt)rm3)F86OY>@7mj}S zH=I>AK?ZVz(cp(4jn%3j9EHUo>@2v$&qIbC>1NBc6sLDFz`?g=+H5>8f>V8ZCP(Q_ z@SjAwi70OhoLa^a!P#a%Ad)b6Wf5GyJdQvl`!>KN&s5^is{flu&y(Df+?H?BS#cY6&An zV{0XjTb8h1gr`J|t#R@Zh<$-}u_XJ=?$R)e`>F`&1Jn3^k0GZ09cvdYLtRkBQi^6* z=ei$FY-wkhy6hIeBuEuI{G$!E;wFB(I@~nAi6lwKGIhL&scRa5$H1ed7|z`oPAIW@ zmVAtHf0aVE$`B7M!o$9fSxMjFdxjz&LWGb3yN_P)=zs_f%7!U~2(kkt!OWO2b9*Qz zyhoUD6#(9j4Rbl%61ZyGJkiwe;O~K>@ME!|14pE7KY#}|UMz*4x*PMyoAeYlg8NA&1s1V%waJPhKH=qCSTRrqtnBJ?9rEMen?-JV^7%n%}siu-b;p`}+^ z?-`B?_MzQI_@}_pmWn_6b+Fw-Cpg{rr!{#a+{(gS&p)V_V5SH1MR_polKfG+`&v>9 z4(^^4modVU1p7X?K4EGQhxM0Vrqu|CbxYkxN?ij*kdYtsk1+BBqD;`KUeet|BG@MG zBms;~fDZGL?p~K^m{3Ea^O495{TA3Tq>_kQvZ*F}sFZZ~?4P{RNW=zv4x)Y-Euy5b z>_Y~7U=)fB_Hc!t1C2W?iw>HytOMQ`kVqQrIc#*spft|=kj$&p-Hz0#Kyf$Vfz9?P zwbgjcAk#hLfeI=8cakqX3#a)R)eQSllEY}vpwK>jKwzl}f&92rocSKdX zJJoZEJHjk;ExnAEJRcO^8k^dqp}}?T1h(;$G=WY0oHv0j{G4TWSFwp7NJS5V%q>s! zW*DV`Avrek<3KxFIFu!F&oKP{72H+AJqY&{T;RtPb$GaufAXahPulvSb(07(*G{^D zxr^ky-)y&H?G&ar@C4f%_n~xt;t!OYQ_PU%@gNMyX@pUrtnoJ}bui{ZcpMHD;@8Dv zm{Y0SCLSXZ`n-6IC{^l+d5g3?5PH9OjB+S-ci@qa{mrtRIuQqxK{p`;T9S+4MU=vn z6XkUl!HcSJ&fQ4FALYTN+H`Z(m|W)+ynvrzg%`HKX@-Z)W8p=VIg^F;A(7%7O5t#x z0S}quxjjd-M)cZiNJjRE&J%Z5g=^>nzH&HY#F;QkG!*eRSWb}ITAnb>*^l*xiR>=u zPR9L&>4|Q~T$0p;O8FUB80I)hdy?f{G*%LRVNbL$;kWE=__pw!Fk?iU11NjnZPFI- zZeKl1DIm;SNvq??H(|7>aLo$jsDN7vw-yd(reNejIrxR^H(azQxCyo0HlcH!0JjzU zsBs~rLgVP8*_bnbu>v9uKgpgEw(#Akob4G23QX-YK`kF&pTY7`F&RCYO@Em<&pTN7 z98frCXjYGW8D#PZ;1E4QAXMUJ61XymNI%ugBR)zeQyic1Bk(saLf;Fk4*?2>*E=9r zsDA!f%$ETe5&!@#_MUj6YB75mF4E6`05T$EUkHXqoFi#Ww37sMz!y$Zp``Sk>F2AO z-0!1?Bjs;)LYva+x%gFHJ?Fp+(5Me;jPPh|l|c&nzsI{?LBCoLhSEUCjw)(eAw6)@ z_`-ynCKdFr5NVw8h(DTwe&L#FfNa-J*b0W*4`;ypjpYBE`uV+4gy>tK-DD#UX@bk$ zfeFjqcd``pzr|imn=)?lG%4O{v<1WcY_cj3P6N(#L14svqacnk3--hvwhr?HT*I)&=!ccPykM#sv_j8z9`IC@tdTE{n2{rp(c&p+xAhAQa){z5+L)J6?_ zQ?LU5wOg_Rz#}CTZf2He2YIeh<{2o3#oCIk9|Vx^-L&x#b@z(y1EIFUqA zhma_0Ea~STBm9q}PgEX8mIOQrKJzdn;4FxGR9aLsiVIRX~Chb1ND5IM*eg9`4U#i zozM>8Ik&w-J4qKB`9uR`(MG?-2#x$p@Du|5c)Pg7E;jcHg1n?lnj_)Ck5-| zTM&uSI1_vRAkxVvp+yo1N@V_zt+;qAQkfC z_XxP#L*PEP{k5Y;{uInGZHwjGgU&Vb9|jC!mpxvMd>T$|+8TqWtlj74(8%YbZ;(Fz3Um$@f2HmZc%Y4r^zjdL*x&Gl8_^v?9bcZ(WRG+>4snkhze2ux zzW(=0?@}TEf#X!jCnlMG*m77QpU#5{b(F>c=y)7d+uy})@xe|t@}((-ZZ-00eLik| z{9YDyC&rYPEA(%meZQxCB>q2Icsl-J_6PsRa*PNlO97P?A5jsd`mL_OXQet?vM1ZoGIJK7OkoZr5nF%=@H zWd!Wn)!7WJ5J9CHPDm&JN?O>6qS4l8Nd`&U{y(UbKNzPANy7x|qq#e5*&qNebhvrLv`|hkF^< ztG!ybukGuvzLW0Vo1Oy?W9O7=`HvC?3f;TtF9iVmRREBf6d9UmX<cm`ax~cX_7Zwe6rwYjeKycSR;QZ zYvhka*{qSD#1GKO?}zxpHK8y(jXpgoeW-qd^>MoX6!dYAVu}7%wLhsQ4fQb(uy=H) zeov}NAppBy{hv|4CuuA66wLSZ?Vx^tu2T07)?8-UD0QuP6qn#p!pIt#Y0%W~|AJV- zzL|yK!ZjAm{7kq%z`gsa(Qx%=kg@q3vKM%s2sZ`qSev`lzdsxKM!;PFNBLd~v3FMGtgdmnsN z0iPC5KA3gXaAuCJPRE(Pc1n0B4wRY({tf67sevD~X9=0#69b=xUr0T>ty54tm!}PY zy6k1(tT=knC9yT!Z8wtX7!kdy#0{$I5hE3L2?p-x4TqL z{L-Hw1-~0@P#MndAJhhUH)+Ap#Mi76cpuP$HBJ0m5JZq^n)o-#0JYSH`3N93wo*qU zB-h22YBtb!GyvX9IUrOMpSCH%3m7glNc|YTq9%Km=;9z2g_vHF<=^mUVo^v{{O5HV z0O4Pt?eEA9LqMui#ovMm7+b^m5g+s%>_N3-BA^LiChl`*+W4y|gVe^qiAoLV8eC1< z_@ou13wwyP@vlVKD}RSf3Ebb{7Gp~9g5LnY=qsb)w{R3s>#F#LN6@;8RaLC3fbV?h zf}7!{!wm#4xd=YFdB{iap>A`mEDr^2pKJh==Icq-RAM!X%)pnwF z|9(5xfX<_0j!7Y3HzPXm+L!!M90yZ0Ui-;a$){=lG^Qmw09Ol-;3>Fsp^}d&bsD0( zQ^_x-e7HF5UL~J6@Ey4OWExis>{cbe7gCZ+KFLVw8TohPoyJdD*0oN4k~)SOBmd;- z8M$Ec5g^7&3eA%8jMpWr+7=`Z+BcmI?5PF3)Z zm+v$Ng$0N?+G>T(G4VZ3Y&Iv8`}7(xO>&>!A&}Ru-pC*y7xxL*qYSZ18Ypg+`}DuB zkzb1DOoU5^n+f-uZ^0*mqj2mWUFzfaM*Kjyp>XHGd5~wbE}zDn3gI#7@bT#S`2QpL z2!;IXG<;mD2z-qBp7HU=?~WfIhjxOGv|x3Pk1U*bg4|Fj5|Zf&iI3?7G7Ln(Qw>BA z#d=h3XsAa1HAK*Y3Xk3RpVG+x61}_~?ltoF<17tFVcpRye?a_waF4+~1LuId3{K`d z3HtcIgFb!h|Gz5W+@u5;q=UE`MkSR2l^dvk* z6gv;Ge02Pmus;5o5;{#EKUNJ;_3{0J(W{DZsrvXH1oKfc ziB7+oKE98GNhXr?@xw#)@t;97!NdCa56O}>ef+gDKpwMIef*_VW_P1{<7yh!o~)2x zL1ea2$ZwG&`2-1bTCSow|dev@(WOIryBVW0CrRuGpe}^EMzAqkC66`PX9iWSxAH;Sj{=1_AVFO(j2+xkPtOlZ~mWQht4d zHj5vYV{MfHCBat(Xih{ae+IFXew|AB;ElxK!lwiar{gE+SHS->+{17bb`Rp7gKPL1 z-|zkrb^_rjJk5Lb`x*i?%@=K834mS>NHk?e~rCz?iZ5sf~mvGbJ)&aIV;CAErML2>9G*GvC`IKfZ z+sO3P)2986B?lD<*WPa3F+rsyVTF05JCF+v-SG_|H;+>@ zAXq`)@Qa)Xnu30FM+N;FRbyLx_M|ffeNwkp74&mIRTcCpG(JBbBV0Pc0nxzVjVu*yD4y zo|2C-@2c)pRdlx<(9s~ zWBEp>+|ruehA^COR0aLVr1Dee3i`LP{!>6fzeW#)(y$19#P<-apTEQi1$~}1L~u$- zy^AA@|Ppg#hBaEZgz5(m)(vpi!uBr>RpzB|H+V3hsucv4H!6!hOh zAU?Lzor3;0bOt#C-0y(WQ{le`zYT6b9L1??G5IWS)0uvLBZ`1p)5k}Cp%W=lK%qKK zCv<>e1^sjoK3KiN+hL>$3i=*+Jb4^A?0c7_m9bOE-qB zl^>KyB(V9nu|7SWaFCP){ku%c$Dn3R1etg+5)0*fDmcPce|7YWblg-EupBQTR2BKT@>V1bEsqYUy7CTqALR1-_?|>cBd$$_GC$|1&rVW)rS4AT zLPd)E7CbyzT8(MJtftw z$A3BZ=yr3w=unfWD5QG2ETHP0L#d7N!CC%+Gd4%|QCs8v5J7~Xsa@*zXJeRefZG}t zX81c?|8Vi1f-rK|!%afiEi#3pmV!c@lT23X`Tp=r};6e_}`2|RTY2K52Hj>nPYf& z8vdC`1XPB`^6Mv6%YTgn$JeEBE8uRWqpbE*$@F8>@jq_;eyI0*Q5VqE9ID?RhCN8? z_lF1c`y&u4_4^|O`u$M|y`Rc~x_+pBKb0f(`@@BPKeQ}Kzdusw_eTl+{vJC0{xJsU zm87UI^!vkvet)>o??-0R?~l~$_ag=A_lL87KQa#%?Kxrneo{V4xy*R1`u&6ONlR6~ zKMc5}iDL`p_~Shq1S|MAMC0Dy)v&A*ez1c7t(t=WN=?E4ceHAqf&lz;-m>s;q0Nh~l1W z=Ke~ZKJ7{vMY6hJRBK-E~9sgYiaiDabV%tHv45F)RUQVU&dC#1Uv$JJCnQ|+$ z)>~5S?hJfd!SbE8es-$WJsqdZ^aPXt3V>(XZyjSvQEHti#Hwty?5}AzDJ$mT&GwQC zkxf~*L#dgDF#g`CHE%@~D&#W5_i%A)(Nq=oZnp*2;&zEjuA)l5qe>j{DE~WBeo}BI zziDGldmqQMsLt`Eb=;@UA#^@0<5t*qL{W>-OKM|m^{4BGaY?U>9kMAC<%aUcSkC)$v?zFu> zXb^CFe++K#58U2UQRxrV-a#Sll~g;xaF|fn9Bw))1bH85vjoC6?sUgTor3UVFbD^N zLHLnBoXK!RC|fgrBrMAUu}rP4xU|y(4+IzZQ*eO?s4Qm>F4p%niag-^OU=Qv96f6e z4u>KqW{E7+_R`@qAaVmG1au}ypzqL<8Qh&>eghwV(rOZj`E#e^_fv2aelm}H!*MRw zpPKf;3kTISyIp^41?Uv-P>@F`l#a>^~4qHlpf{z~EgU8dXdAn`l zAJ|8JkFfn{Alf?{4s#vTBntuU8Nd^~Ct6)^<8?nz4$qkoWhO0l{!Y1Tc9s=~m)hm1 z)#`HYx4Zi^O(WQ0%S_guF=`sQU|?RGED2sx4JUQtaYu99%yR2wH{U)EsL$L z=`*ZQ^bfbz#}Xj2UJVX8sEGj}?uNKGGW53!0Gy+!hT7+7L2#iFF3Ws@ny$MOh^R&1 zWszj4dA500&b3%*1gLjl1rG*QseMGWgxl_V4>fxlA-C_g-ivQSER3mXdZ&NQ036J+Ka;qa-Bp0LeB>A`hc(0XvVCNum5Va_-^F)0J8PlM^^WZ6U4ceEkBX_M znH{0_G+FB*@M&b-eV)kc*n%U#DemwC0pvo`p_i(igU`P>+wHDq0T&Mu?DV+mxTnyX zlpVaN`;xR7*T;a&$bn{XCNZv#D|DH{)9X#vt?KeiBghEgS$2@vSf)k&u}5sL&@WjZ z*~Wbe^>hHqE2tMAHNZ)VMlQ)~#Y*`Onsd#OnnU&roM&=Q(wK^)zZ?}!U6Qr zT~bYpn~R>Q8Xs$L{)2b1z}CgZ*0m}t>04pd2dnVEGx}&yn)uWF1}pW)w8fZ033{_EgfBrlLWY&8x4sD1C`UO&^)rS zus&>~AN3ZV-Llb;0Doi)gIrjDS(w<9_5HcAtp^|sgkYD(EQgV_`aQsG|C-(Sx97E( ze{RB?-_e6t`9yGk$;{R*`*5Jdcx*-@`qV%}tdK_sD3Rux&(El7>*0=Q!O@@<-w0bq z#hANeIfP}s3=VJITZ_Mzy@YOM`6S{u#Ru!Z5m$MRoeb0V zx48~xxZ3eOT2Mqvtqpyt)2{**Xm`gf&rr5jw_#9i)lHwnvtTu-`xc#Ub*<)cx`W0E zfh(Ut;DjptEmc;gC!~stRqtIC$_PEg)naCJXgU~`FsZ7w5lCoHNJUz+Z{Y;S>5-I# z5Vz@IOjT^`DMtk7=wH>kU(FGN=|EG#o?z}+z+@DV z1`~qlDi@vYts@odxTc%u+gyXlR0?i0>D>Pdkcv5N*6=rdeUTE$>_}!Ndboa&4WAZw zDYm>lSdu(jhoe7?XP^Mvxc6Zm4=V>1K1;ChnVC<#H%w`x;j`d-o+GWU zTWDykuHF7W@GNpgrK6va(B@7>yVj1OUBVhpmZANP*7_)`E4(nh9_G%%A+kTn>gtVJ zGRD1Eez$eZNM{V5DtZW@!$h;N(Xh#A2U**xL@TLn*J?9M%xP+0yr2(+C2jZlt+Qzf zN6S8egwl(6v5v%X2|D3G!_PN)0F-Di)61CE5d+LC>8siiW6fBvG9c?=#d*g0wH>{d zMPK8oOqijwr@fXh)T<5+arCKu%h7X8%yOk}CJw`}*@tE_ZdQJf+?wIOjrz(q@`nt! zi%{Ej(Di}&ML(vQ-M!TW+Jft!k{6+vLHj~rVtegr)MLg%OZ~Zp<{d^TvCc;cm&$>HLq;o3Q>V&r5V*K>93#=qjw*2YTPJ?*oaOQ8_^A7BZ>*woLqRVW!x*u zEmxybt2=V`-@$%&wP0z&f>CeA&p}mzH9b=KJOszgsJ1;}BG|iR4QZOOx6& z*1R1y_iePU05q$6;4;rQkj^l#G+N!~-#wE)Qiig_{5vFP8BE@YYCkp}gVHb?lPsft z9U*!~{j-GT=zm8xTKX)uds}_YN(8}MBfLA|A+87L83f)Z0v{FLdJ#8M#BCITjlydY zaZhnv8V+TV=|B)$ecECuhxjlbh(?}a$9%vvpOr92Oa(#W1@<<2!hN;tJCL2uNVhpk zn2V3a5k8J+BH(j8nmmS|u?{5Tel5d=Z%ut_8~LG}@0bq*2Y{c@3-iF}zUV)Gs zm7K`5KVoub(0sKgWZB2HmiO9-wu6z2UDWPcMN`7&PBYR(PvYeZ%P4(-@Q=g-bf^6? zK1^AjkNyLuheNHQb_Sluk5_85$p5D!di*cS@_X@Ii>rt6ln&enrEWByaPC}2g=Dw} zZu4EIY@o?RvuuYU_aQ0$=Yd=Qe^kJVF;9)>yKucW@^W&2f>C1wBDFyXfNX`ek%V`SA$t{5$ zT<(_IM#pvMg^v$gn2-Jsqh1H?Od1Rr9nh~5)aI&`mzcIPpckLQlf_E)T5LZ-O?xQb&3ih<;K__+ZC`)RiVF0D-j2MB2bGhs0mg zA)YK%kHd^e#CXvt0W?u!I0gkJ#)syx$uR)wyDweL3wwP(iJcNL&k9*@rh$l{PeEY- zdho=ZiCL@lJ_$qq7M)mKhX$KL7XY11qU#5v>*Lg}zW`IiLbLZAJaG5Vq`t?64VaMI zZ~+sY-n)^^BJ-?#mkO(H7xU6BUU(ex5X$rNVoU8?O5F#Ds@goS(-k9Y%Q>B7Ngpg zJci?%m0Gg?Lj#eH5U>EK?6sX`rTMY&48*QREIzfX0echPRba7taj#;qCW&OUj$u{7 zc%f-CZT`8@l7Aw<0gEN}kj>TN*~2GQzq5}@XMwQFXsAUVfZI`xbC}3s0|lz(@-b=a=)9rW4PB1iJe*819nMy>&LyR|-> zR`c`(a6j$zW!c(D`$j3V0dO=*8&3VCYE?QnBF1#R{GetoCAO(&X;PoR-xiBXQb7&-M0u^<=#ou z3l|Sa#Y%q$dVhe`jZ077A%O?SzdsJ5{jmmT%Xp$gT(#S0;GF2|qi&C%R^Cm+&>;FI z`85xHrp^j>PBePjTKzJ0B5{r7iUv)NKh@QG$e^+Y>Yda=XS4)`tr`2++cyN*|Dy_Gkzpa;qk4%`Cpyz`uirhBPVtJU5qcj|Ie+z*Np|Z?u&1O_dm1#Zgh0J z{*J|2{(p7-?fG~8`iu3|bILyv0)BOm?N!^baG%0dzJJ*MQ^0i?_C5dq$p1g_e>?vl z;{Si~|2H@h`-fGXM*rpfpU?kS^1qe;$MXMq{6C2Qqxt_3=iSHu@9}>N|9?1`N_&m} zGx>iFhnMsJEdI~r|5W}T&HoAfKZyUM`Tr2--N*l*^8arB-^~9H^8X$DznK4f@&6Fc zdk;UaJ*;BxNZ=R5iT0seo2|DWW4QUUP~ z+sywj@c(xF>*-+K{pYwox%e2x_s;&-rl#1!pYdUp@10@aH(Q%pW4*72b2d7&;2TC` zYW5l(iS#$9<`6y`B}gkeb$CYg!VOZS$KMlkU_&DhH%z#b?^S>R8Q_H8j!#73bqG-j zptog+L4qdB<= z@nc2&NQ!Sn{Eo-kUHAG>Q&Fy-gu&e@=Q?2p8H~G_U*COq!=KZ3}Q7L(Wp2c z*H@bRaQpSLguX8)W1$Puuj$9?BL4JGgwB|SwbW(|#y);IA?1gEb0&K24I z7la^Yaq@p`P1^Zj-BljTQa~Q2lUDb|mNvWAo@D!1V7km1m7d)*|_*;zA zcKy&ygnLFHFm=@~&jECF@>{8^-tZ_4vvPYgm^b$bfc7AW0J6G32+uIt>r>58aeb9429vVdTSuH7l^t`AN6{qnybcdbf%!ti;yiDU!s4*^EBeL z7duP-MLvyMXcg+KM)>105me`QMArDjovB)#Lv(dIMgZtVBB!&bdxnwNIKF{uT7O(` z4R&8t@<$X)w{No&7GpeE!k`&_7J0EOL5f~j{lnfK#B<5}6izGpaTdlSaU)DZ7~f%H zIU_y4jiA=-pnEzX51m+e63~EquNSNa)&np>uqL_HANN~)?G)ng{WmJEhiCg||!_`u&LKxgnw$IPHbdK01P>mx8HCV>?9e27;*xmfEX&%vl# z-9Ra8O(SM(l6yEkF0t`q)f$gEn;>=UV{*-bw^}2o@lstL|!YOHe!kytk*Zv zb<03nHUqg^RP@YCAF-)8jy%MA#{ zRhDdKqG)CbFdxl~#$hbU)xzz(3e|g-(Mp8CL_j~0+J$x|%67g%@VO#~Q*eFcoextx zZoB$+DCqA+j= zP5vfVE7s9+WV9nJ%jSw`wAM%L^zB4b0wI$P+wy4TEm~;NPrLw*;f%odx)Q*)#r+=U5(f+qaXO}{JTct z3G6M04vN*N%j#00Xc09t6!{@gJV)=x0L7-{Kvh;Hy$P6UTuqhGwcpRX@wyibFaa#h zU0U#foD;&aav7Xa{JBKpx9lJMH~)+|J|EXQF+Z5lSb}D zq>bg|aOVytHz(ya#&Z=aL=h;|`vM;AdFJtE<@xmJff?=?EUJz1_HbM#A|T4@j;YFU zN3>>)YjK=zcG+UAB8DXabhL;2U`sTwB4=t5 zR+lx}7ik3`1Ctx~Ta~B#(7NpWb~Nn^iOuVczMth9>bY6u?csSQ3KM*=XCB@`&g>S! z5in`d!_$hF_4q;*vQm8@)+S(y0UPvoQJz}X1!xaQILg%DbC!7N;Teht-#%S_Pj7^H zqVOjJDZii%)%#y2f^Z>E#0K_9uV+sWYNB%xX(!-50^7gU^*W4n`s2!ZMr9|=pnDm) zYijqgm>fCYBgiXog$r>&q^VCfR#_fYKf*lAxwY7V!||YRXOVpO&cTD&dzB553NqKV zvL=X<-n=r>k0sAj9*MsZNG5w=pl679>52XtibvnxRp>tYln~m>Wu;b4co|s@t`C&D z^@NHCaoz9~9z0$Q29~`AqT&^}BR*hCi)^iR_J7}1&v^!8$_EAG}+xKT`{(zeyK zO&ST5ZSez9CD_Kj>49Cj5d*dRchjm5VZyw}f$Iyr| zu9`3sA%;~SI3mD%?F;IE76t^~ba>oq8by^Bi#w$r*pVzib>F^+ z!d-jT`1PBM3 zH{MCLGF@7S-U6)zXd(B;Ie_GIK&@nf_)3LOQh^|hcVVXBU_wL`$|JTugeR4?=nxPw zROz=!K-+q%Kh7m)Sqv~E+HDQ@yhJ1%*xb9(KVWlHmtnho4ZTNj5Lf^_-934}XF9<_ zZ~nL|QOHl}3A2nFan^#xAPc}kX3BxQ-s|CG4WJE2tf&6CAp`;XZR{qo4@5g5>}SP3 z&?2YGnSrS?sAf|wO6a?=Pt7KxVGNE4AiF?xY<;v>f~=&ya}Y`m)MIrSt5fnS7PL8s z)GUsVa1L@=P44QpL&e{~rsF~d;%%vS88y)|&o9__#JbF@F%*}cznoe)VLdz_Bt63k zU~Jv{v64emEE?ZiEr)0;om*(#75Jv+b&0&SA$gzcBJVb;+hxQNi(H>NO6HEEJs#xR zxSiN}nnnKsr(;=SK%P%ylUsL0-cct`?#VcjEXOmUf$~7Q>&-%o*v`-xriP zid;S@x>X-AJ00`WUCq7srn~m{_L{4|D=I0lnXC6-T2SIN<4!-h)m;63iKC!cdBD=U zsXijX(t8`~jc|Pjtc`ZHgRYNpW?5_c3`1SucTMsu6B?tS{F^voPE?q|apr_F@=lFh zfAC){dzoO}gwGl?SdhYOsu-B=iu?)JPv)8yV|sn050Abc2>SvLb^mY-1Ar{uMQ76pf{UP1Hh~ znwIDtkt6XyOGSO;2t1j8YBo6r)U=p(ME1ukCJG{A@kA(*f?`U!=d1pRN2qmjBPgKghY)LY=xMWVp=We&K_)Z+d7h>nLNQ9W1VRC~uf+zHGO< zTFpNhA|RULfJ%O9bVgoQ#Ls)|;cr^=TI^@PiH`wa<{B7lb*06EB!n0JQ@Sx+ar9O; zz^`fB59-yPjA~kEdc8i(u3@CU>mPOixZxjm3ZB&gVL!k>^tYu>$J%AGy7sQhpiwo= z_TJqN7Kaw>+4Pg&zX~cN99N~qfvK?~8F8wO$ zuihf^Ju3Ydq`&P25x!pfcT0b{^skeCw)DqJ|8(j1lKxM!ygkxiB7L~ znZa@efMB zm-IJFKSBB`9Ghjnd!#>K`fB{LkoU6ZML*vp{adAfpY)%R{&wll`I|_;Pre&iG}d4k zBK=X)|7n9rH%q>kNxw?^w@UwE>2H<(ThjkV`q#>OGG)D^q(4ad-^hA0WxBD_-z~#m zkp8(c{7LyfM84lC->alwCjBhwPn3S5^!rOcO!_}cINGHDn)EkI|8D6&D)Bu=*4rS% zQ)N3B%l8QB?|V-4->1@lP5LiL|6%E`mHrax=S%-G=_g4)R{HG{j&G#@n)EkIe~*Mu z#h28vVO2y;wM`Jd8h*0;tanAZ`=vjnvS@5pZh1w4te|4-v;xQETUXbfRrXos@pxgz4*rJkohRU+B(<=%tDJ?H3npcvZovy-PP?A@g zPYL9&BzHkUMOkiMK~6iGF9k~RmS`fE8Qynxl6heC?`5i(5quP8!TImArsze#W z<)r1KQ>PWEeL;|+oS@M3g2G&9vBMyJYi>z?aY4BS!&8z^=>Z>#D#_0+E-j&fMxETB z!8kj$ppfDagD&GA*PmXR=eV(~AkYe~KPc4cC_Fy}IV3t7fcE)`BTV^4`KFRmhpD{4 z;VdsP<(lT+=qRW#mCn5mtuZB1sS}2cx+p2BLe?kqiSz~eCP!(hX@N6uzKObEEKpUJ zP+o9@v!KFJkbjq-#m=Q;}u3(9jUik66#M!q`=7W4Em$ag2E0A~oS3uWa6g++@CDnvP@<@p8W1^GEz zYh`#vSwUV=VNr(|UagRo{Y#39MeV?MxyoG{@NFe!PDffP79YSAj6a+^XaVYc)iW4E z7rmUE{G#%l9E@LCF;+Rl0w8nI`GhSdbt$Yc<(3yPHdQ#w%1X;I_y)s_4112gR#Rav zfX_E*?KV*l2`rdfV4~%$WZrpP%J5;MMg#GNbBCqnmJpui7ZewuN-ekA-!vXtA-N?c zT6*UJJvxn_$7_DM$uS=(mlTv^8SR*kY6Cz)X|WIot)p@l6M*VcyLdry87+XQnty@u z*Y@W}8AwIo5SvvKAJUS6~^=DJm(XZZ}NNzC^4`Se+LZH&NzTopx>8ay&= z*UoZv776^aOr1JqYEI^qoD56Gl&M#9I>I{9w&$c-%~SRDWScL|$*@h!FlVP( z_2KE$v+TAsbG9YNoSi+@HhFrsB?ykore|KBW4NRKNpc%I8 zt8=DWE)gjLa81ulw_IY&1mGe~X#7-5+H{Q4m6o6~0{PA8Kvd7=>*1elPUp6YIs@q^ z+cM2luMR3Ks9joXb1XB^xJ-1J4){Ph=(8-lISp`ASe7jmZgfxPl&dn4Ic-Y1E%VaQ zcpJi}qH)6w$K07r7NfIGHM<_X~sfrPBOG=ci4pEI)T z79esEyp)1+hW0}?Iy4XwC?{+BWXuPfq_6|w)22_$vH%7V5eVo0*5U%;=E+m0qLW3n z`u?+J+NN36h(LN-J^_y(_RR{=VU7wDZQ&qqu;o!zti~XnRd&xX&o?%;O;cN*?yJz>S>+8 z&pQW*4+nwnV3Ld0dTfz}rR58lC`L=D+_dbgv#<(eWMyBidpBp&iW-Q|u+2ax2HrEx z8R)sddzy8MEiDNDMY+=~SE%J&F`aNUlcovh6Yo>9vSm5qeX1oZ=sn9meVVpk@!ph^ zX3nyiE*y1XU>^&FqcZ$L-Htvm1NL%TTd=#q3i@8}{?Kj?bx+@X(QID$?Z z`dI9rA?FY^R-Ql9S8;yRpER@>Zhq)FM2ihRhlHFzv{bau>(9(Mf9T?2H+Z$f3<43eDBJ; zuy5Z_F8!#q{Fiwj-}cIwcE>eS9{ZqYRdJv5Z#w+`9fkAio?mgp@V2$Xcex+F>-GHU z3*+DT^2m&mOIlz3?VCo|0Ylhd<|f?s#~TkExNZGckM;g+ncHPL+;X~e&4k*<;aBb*`0e*gRkZ*CkFI^n_S5#Pzi!;Sv2N9;w|@S@4{=*&ZoGKUDSzE{eUH4{Q5QVa zI`okz9?$snhJxEy6lOi}aN<90v!<O!!lxiyyxq8KHfR2BKf+7 zdtUnE?nfe~UH{m`zPDaI<6rMhj`{0jaohgX5>*j@`^X!Ac%j$B?|eV>`>%#tE%4CYca$HQ`iE=M z^1r=ikmZ?$@7{XNzQ=eO+#e^4UkPx_u}R!+}?)t|zF;C_n2?lGw<0v>@%XE~7s^^T%H%@w7_;YR*{+gGBzk7@D z*S{$I#vQ^pw8(hrmu(a8Nv{Zh&35_TD*QQ3!f&h-e$@)$GxuCw- z8#7?Y>EV6OFr9hU*{7Y_Z?N_o)IY3mZ)He4{|0sP8#p9l$e?cGha?O+p5LHA;z2`B z9fG3i*Gat;)K$2eT#FBF?}@%=T`&68Fjx5Z*@d6AScW@g_(I_)-7Nev>6@y=d*c$} z&si$``)-o&GJgM!;(bl6@b^n!Ka|`C8qb~`ThsM;p7P)E)OFW?dOX)xi}7q+CVU#t zpfUYlnxFE6uP5vUf0(u7oA&)Y`Ot%Y+Bg`EWs_yUNPmv>O=%*$O!{j0Zu!1n4Nn*8 zewFL(am~;FuD2Rm;Gu1ypg$U=A5$vcVN8Jc)in;`8)W!@dOoMh{Z_v|cbLz|HU1}O zeb)Ek|K(@NUpMTR_H z^!wpveAa?~H}gOKls0<0kSrz1BIsTIjD~jgTpbEu>id2_gp^Uz&Dk)+WjOK~z0mK- zXZV9*Mf&&q?;VW4U6W)nfXsh0zHftntw6lU6_(&8T>t~Vo+5vh{+ll_%s~i)>Gz+F zM>5)IXuB82M}B#Q9@mFM$gyn&y)U5mYa!iYXnP9K{qhe=&-<20|2n-RJ@W6E@Lv3m zm*|myZJ(iIe)%WAb9~@EHSo?=vq+_yPxTq%oBJ3h$$&eC?LYElaUateY69u|DWO(t zNMy(>^}!_W$D0lR_>em$%b0cHvcJqdk5Z-@TB{ClXtXg*_LtsMbT8p3X%fBT|8er@ z+3)`>=i@VWDgHA)W-wDF&zK6=5QtvztAe9X7-}QqKSTHI@4@2}+E~gcf1=a;GJQT`ZzMQ5u)R40Wr9tD4YCn4$@e~7nB~f1aHEFmR|m+S9N5{2BYBq?5hEH@qeMB){;>4hui)7vbO6 zL+pob(qA7f-c4b`kBt;Q1ofGoitQ{QO)Et?ZS}(MfSCV1e+JFU<9!(%e(GsM zhMsOPFykd*SSWw&oDlxl@c+;FWB>Q*^^c%~C(LM(89Q=VfSdEDgyDp z?(@a;Y3G}#rP*vMeW3}k$^hH6Dd(r8Ts-D{$SBe8S9!ktUsx{!<9oEHU-$U`-#=ge zcRq`mDgLjA##TXb@@O^8UYeV4FPd8pIeW`uv%xTngkJD7=jW#v7pE7MLrva? z-V1Y!i|6L%U7vW-2zm{?r-=7bC-e^rO$!PZP%EHMc4LVncd?LlrSv7GCa7GnrcPn0 zQ|Ky*aEED8L2>csiCgVN0{Dgi#}iwTa0;tne+s<0G6GfUHo5)ebG z$^>a-((!?Wa$Yg196~6W6=!lC(4#?r)4-~&ME8}HE-Jx$u->BjZqgKw&(2G1ZzQ8WUX38E0x;DnlpvjY0z;M#b{M-s?5Y2M}`>DU? z()2;MkQNy5p48r`!Gw@Be8?xGxP0pF1!y9gx*)gwdS_V|EeIVcDpEHu4V@y0J^|Mj zm_HioCRU8#DxGsNA5BI1GMzdIPT&h5SAz{QoQF^!N8!{NxpRd=nEH-6SX6;oFN-zE z{;Uvrsb&ppkR@nJt6A8`KoyiPB<$ecGbKVYafDElB3K}{uXS)fO&Bo>n1i{9o)2`= zBqI3<^RQ!iCFlxmyilTsR46Y{x&TXpp--+=NqSzGlBgC)CaVdqzQUj`A*z0)+E^jS zK6=#XQDUbcg}2heM8eUu|JUA^z(rNP{ht|z9R%4#L>+L$1-L9K8X5{3n9GQmrY6G< z$uhzyU|OhYxJE98OFAqnvIvk0_P&cbNt2hpUIE? zZQB1ZvC<3AT^%E83>WlGB6d9gpOv0_?jtIqr$tQr@`*#S-(L%vy!6P|&YykWluAVs zK2oxNTNNI^AT2#{PFzOfu;8{;+?vFAArktS()dB8GpVLOqGFDWHTcSzA2s;C8GN79 zFbaFtQdukK>rT`K;WP_@PErTKq$9s5SMXdW zh7%gSUe3bsTcDp1Jq!B``Nj|Ae(^aubPa2gvw9C4Ys3Kfh1meLUv^G*LSK%50yRMA zPVox5ws|gp{R94!*(jJzuobh3w$R8Nu$z6NHFLnRL$s|%=B8k7(N3DKYDZ262UZr@ za!v?u!E6E%{(ibZgrjr&V$Q)uEn0as)rb6dZO&!ciIr9RT9>Wh6!ZL(q ze-c)vkTJzrbUS>SEsppL?@7y43pQ1YvI@4O@>0uOte8up z4ReXHW-cgWmuN?!3@Ke5^Fj5JZPB36%T-?KHZ1*$B}>tEVX?t>%%;VHnJ3ya6&4ND zK*F9A%hKc+j|~XNa2>;S4B;8Bm0ly%r8Qsoe0d<>j!MkQA?19WXl(cBV8fCy_t*^O zBiNqo$6(!LsrRB|Ez+E5%gkeJn9>_A2O+J-_;Jou$4ri8aOh>X%&Lhm363$ZZdR;Y zixqRyIwDTkR7@9E)Q7R3A(4et4oEZ3nd;!vToR_!dg!cf_&TwH?V?SfJ@93OdJ7xC z*cQk!{(dNblVjY!Lm1(HcBpq-)H~`w8}-h|Eop0AELa!RPnT#L19GeKqWagO%wR7~ zgRn+oFvjFn#{AiK(4mWvgt;efzKxsKbC@qeJPVxx&U>VdJjB*331!Ym?B&Sg{6- zz7L_NH}Gjgc}b2t%ZuZ1_YmN@AQ~Z;s666QjLJ`bjG@ zW;IsPBv+$NQTP@G+NlltJ=6>Aw*lV;DY1!}j!y$-2{_Mip5Z*%xAc5l-^!N(@*ab- zK%eItXeSCTrizO zG!#yHEWK8!UrC<-WNhH;E5?Fxk&F$4RMS1|6wFR5+?#YyLJo-c?szP{j<*L~=ZZAD z23zoDVNyrNHW`Sv?rwo`2V;&FV@{$4E11Ms8AQ2G$fNXFW~E?O(F%>38tuqK!8|Zt zna7wj)nvv-OvQRj@fzvzeaA#f1L~8;axZ5K=8QDhA-y#2X`(T&f|QH#Nsop83^s!? z(gk5%0%2dq@z~Q2<2?lJ!xQbpGtk}O*5uOQq(>M_GiEs!DOVZ$aoF4y*qm0dIdwK; ziy$uRg?vkoWnt(maK8ZD&jxc8KFu_SBh8MOC7p(-#OtKT_q1{8oW{$Vc?HYS7nx(s zN1qg9#=15!*4<6UERSGUPRyxi!p6D>*)uO~Pv({A$-H8E;2IC+C39mQ2KOd6y%0`^ zaBXE^Z^7)5fBQgdy`{!N?bY3ab#Jj@T`}>awq6nT?#r zXkktjjX4$N8)aMc3}aQ0nCFG^k{-+WehU2)>en6jbPp8!DL!6t{>F2DZX(19+taON z>_bSo7^n2u#D2TmvhKnCSa+Exb22zKb!o8E+i0xSR;XK<3v2>*)Mgu9pj&m+_j$u57p2D{4glpT65eD&^#EJTl z9=G*TE;I-0V7t_B!3OW?w@@DHP57=5Qq89YzbBd;NhiX z4${iUWrew!FxD~HHG^GC&kJR3S~ms7a32f_dqFH0-22aTZTYsqe4OT)_v-_BTR>aP z#=O3>GU9cZx5gk}!Khnm^PTCW@p##wopfcc2Ir=(4GwyHjh)(-vr)+$(C!fj&DVKb zMn1y!;T<=`bAw>Z(&O&^F=vu>XZ8l$ChG=Ey}3rAHdDztYM*t~?x?*5S{p2z%p1%! z=ohJd9J6DFH?fBFE%;R9<3wF`)KR~SG21x?<64Jvf(>KNhIYo!*D`EaMvEnL%XVn8 zZ?M%{Ypm3koP|mVhcLk?muQrUn+!E}FI$=JHJU9hgGpE2VP5k}%y0J%nQ64bw z%tqS&YB)Sdx*zFkFwH5_)7kZQ7R(OMYIfOH8cQ|CGQLl?XUb;Ao`*DV6zbFT7k0DhDBlCJ_gTz_SvY*26H_>##!On{z_M-yT;ge5N?wYpY&L0D`H>Cm%jtbzY9IP zQqLrmKd)EaXpmEX*Z3 z@1Me28LNOy6t6Qq7WyYs9r_Q+HTUfgdfBmFT3gl&&mX-ohV(+-dj;|%UW4pGV?5u# z*y8yc&*8Yv1J`*(OP;@ZyX;`U_v@2F>{tlqH$lhD*W;3JB-H| zmto&tuy3!xo`xPx-5a{;UEAg&-JS7{;7I#8F6(X0ddK%LbZ_d`;Hr1lIH|j;9MRtH znJ3;eMvCJle@_S86ZZ|qeWNA!^tNH%7}q>vtneIX!@30W&v6>r{mW5*-!a@T_~#VKy!NyWJAK8D9Y>jW!Lv924A~&I#bdUtz+1)^V0-WM zmjv6A9t(N5MSqOvTzcozS^adp-~Gzx0pln)P{vXqEn*r>j|Dq5)uF9RuDP$BKH#1W zelqqeBo!|W=~=<_Sh%OD&NPh4eCGl8Q3uG_DoBHPAJb#uKBhX%BP7>6sC^d&$=I8a zAzOqzm>vspo9fVqNv@IEnlsz6mIl5zRf*4fXj2Yn@lFQqo92<+Fd3TyDdg`#^AZd` zIL~mN-E$uGA_@PXv^RvH{2|R^+D(te@_#^>2gR)$DPt!g5nF|FF+CRIHr3%-R&vc> zty@)?jO9bB#rv2Z3->YA;Wqs@jB`8ed~+$lVx;W;cAHnvd4PDASWbkh4D$bY#W z?N*YG`_>IV2g8;c^xTW`bWb$Lv#$crzW7}PZy+8xXR);Hgot_KMS~ACD zc+ZY^EAUakzJpZn5bV|T81;#;3}IP^u>9DnHN*P~dR|A`$X>J}r!n<@=ZtwV&I8)! z-I(Va=lA>=Z2Ei%pDJuUM7>kAD?C^IPtXbNu(Nkzrs-F0ld(@AN?m*U|8+X_%aZs7 zJHk8M7}yKyzU}?U{ob1hb)n(gy!eg`zHC@Fq=8Q_+6MIeod5rn9^<_vKQaq5W`Q=d@$P$Od#_Q_adiLu`Pl{(DHB=L84e|4RVorlaUZNLA&PltJ#BrcOV0=2go zTj94dSG>=~drL>m_vw8ezWrtUAPxNe(GTDp!#URBoH!1sy|6KyC*J*Z)6(;#@V*uP zj~F{7V=iTs2l3qy&KutiNze0rbv(-7$By~n-IyodnRP>-=Y;vcJ)XHJP4J_{E<)z; z@nJ59a17!2u?FFc@A0MKWc|!ozhK4`7?NbhKIne!!Fb+?|Hi%w>ou7l#ID>}XDGM- z0lL51S2dlNv4jg4A0_Gk*Xi(ko+SQ%MPH@AhVkcH8C$%I%DcU<`oE>ex_e1JJMAmJ zld%hsXLlRzPR`W-G9CI4NnD-X-|&Ns%`@P=#Gdy1|NC_KJy8{tq(G1O-<-r(88G0?85 z?H+PGL#i|az}`FD%>-V8QIzXutw*COl&$gkq{`@s)Oj*ZtF%h%ci z-+2W)Fpq5f+N^O_Q#_Q$o4DrE5IJ)lEuh#R;WsGU5A${7ePveYgT^9XU1h9mJka=i zwzZ5|(=lJ~_QLOD^c#G(@Eg3C4o*hDZQ}i`J$}!ZS<9Jqpj_1!hcPZAigP7vI`(GF znAW>Pnz^HHu1fcR!gbTgq-BHaD{{@yoF zD4W0c%@fMu?|t)xa`@lAZ(gn(J2_3__iq!t*pFfCGUJsQQU+fR&}zaTC>CW~KSE$)yP-+ouD zb4{wc<@mO5?f+XybjI_tnmQ9EW zJL54n7$IV?qA@9Ua#AiUMJYt2C1|M-qpmuWFQn7~|HtN8aKU7{wF{O&% z3r$S3Qh_^+$xacr)S9M6Dv-%Xlk&0kUm|M!llEE?BcIxy@^I9Walt7YDwYYKaxwNg z@oMaLh&7p*6PeVf5Mf)DvRC<3kB>{wF=lr-dmN}J%00u= zn3Vl`CV#=NJs$Aff_<#&B!tdy?Cc7uF%vR~TMBy1xY$k-p0da+rEmWehu z!dNoV*y0Y$Y!8Sf4XZ#kCuzh@6md_n{gAn^YB5weRyt<0ZN__#!3Kv|h?^@(xzK{} z^*62vkJIE}_eVa7B{-H^9Ai6-8vYKCQXP^pC(#;VYPF1gPPt0TfbpX;*y~~%CTBs% zFA-kUUNXoH-|*Q>##oVMvTV5Ly4O+}KIm*Kn($bm4F%y!+GH<>Z)}2%8QZNdQbMhO zY)UXuZF>w+IWgI2a{+W8ieOB3c3ggJQievGADhGPBFENH?u?y`Sn}t@+=*QlYv8Sz zqQbrTHrpz#!Em9b_ejc`tVBpB`S--lg&hH-u^O4*ZghZ{BOyV;c4%KgHxBEgW6353 z>zI+IO>JwqntW|)R%Xy}p|7>Vu0r9l;)2|SSS&H6y&@Uw2YrqLXozW9@v+HR^UFN2LQ*(sc2A7SVvLR~1?yHb7vk$^ zhIGi`2mg$Qa zd{JF#S-$B3z5%{MMci|q_B)gY=omw4Qk>>N=OyJJ4c6g4*}~8#4e@~jz5>u$&~|$0 z)oI-z`-F58v$C+>*f>&*gX018Sm)@>V`u{{Frkg7zvB#vsUK7y;Go>sdEr(1(P>B;DYLGdYJJ55XU|`dzgO9{TYzgijk%X1y z*h$iO*H8KR60NRZpozi`S~J)p(nx1)Gq8$-T4F*5e)|gLnFb{|idaV0LYU;=e{Cgj z<_YB|$!G804J`fAcMH}o8K3RxnVx3!{>rwXJR!aGPu!Q(r*BSDdh!sZ|3DjGUmLs< zHvZ9oB-szOL%3*R+gn5sNQ{%goPojysW4q*BKZVo#O2e1_qc`FVwDWt4~3v2rwPVf z)3VSZ%CsCTzK=^E#ZTSZii{5^IDSAVmB*z@^B7w#9$ylY2 zqM^IA|M^4->#e!2tbppOKs=>>SJaE=u`Y-|k6#7&KgXlO`7rT(k$AoF{7mtDq%nRc z;d+I5ef@jF^(yhay2E+3xISDhp4W@#3&iW0czuC*Ug>O_zM}Vq_>0B!I`O>m`hsJ^ z`3muTn2Txp!tS#^-FSN=^3_1kV8%Mb2$^)BN>V0cDx#zSzUgW6;9G!yFcazny)W&4 zZj2=!ye$@-|KN*+4ry~#GK!w3VDHAQy4&|x7tYuyrGLUUx%?TSClFhBoH8>h zm$z;qk8NdTvd^)xw35@~Qby67u&v0(V4jQL~SrmIRGAQXm9ZW?VfRHhRARCn4JZ`IB2^0lynQ(-vhci=e( zot5Cfgp43AaUmYrv4-t!-djk+v@}F`~7#H7v}mDIE`JU;J~8@Ho+K{`5Me&Gdvg zb5K)!TuJ;cq!eQcycNOW5AR{9EnO=9NkW;Mjk<<+6AH&Wt?Agd$#0BMVx}zF;qhOf;JLUIJ9b$9e^Y`qZiWZu9|KP&*seVdhY4al; zOcv?mJ^N7FDQz}1wqw{%z#F#Y1?g?&ZY;&-2%*1J#|UWD|69@UNaxpgoc|c(JuyKD zA8AyG$VCeMatHOl?659Mh#%`n`SH9hVp^DlzdUgqXqqaV$NEsyaBUZuk_K_UV5fa4Inz`~-BGzE&|@fib=zoriOuCX`E&7!E!HI*pGL!)e5Pzz;yD;ljjlI%7Eh z&cmt2aCKrhtmE%AzC1CUUJR!U=scWZypWG3F`O!}^Kga6^ojW`2BVqLF&umWbefMwF&rm`!&?7N!x@a>HVEh8=c3baR${*uCWce>>pYyh7|u})2j3Q* z#>a`_l*aq|bRI5J4A*4L@4(K({m<(G{!Y=~CGd9%{9OWnm%#szC2+s_c*n9xHNHm? z=fm`#lm2w#d##S)J06ep5#}Ld2MSm(9(N4)zwOx3k+CEQ`O?z>&p-} z&Z8H2UvR=rkYI4ammw-}ywhTrA!={~Fwc##RPX{|Yd0K&E8Q8J1StZS`goK2e~9-PZyh26X6w^%c*-*CDX4C)WFebHF5s4>;!gEF6B^ zIB==2HuCefsyAa3p(or3(SQ?LDRFObN1)Mn8{sdII_L?_yin%ggk2zw6du^a8$KGq z@%+%{mu(HWZ6Cy2DCaQ;ye~N6a!3fc)SnvpUi+*szSD!AFuWhi5S(xdWGy)6n=HOR zmVAP1fPwItRtGNiokl*@8X;$)C%gq|1}9wagSr7P0-hQOzcKJR)&M*|h%qI&)c+az zN~?r~K~Ly71Ze{&>?8B8xshhJ>YnbVe^Avli+w(Ve^Ag@5F&ehN67IrT)iwzhuLZ&NXNYK#SqH z2e{O?82KW*0pXx0yaR~@Csg3u9yNsrz68;L>wvpQBAwuMz?1MLRs=5f8AiUvJ{pCx zg`Us>em+lwI|5T7H^8Mn!^n5o?l9OSd~XpRf_Q?f#^4im2>A*lH2MM~ya|bfp77NO zlp#3bhY&4z18~N8{2B?a2KwP8%O-HVTVcZ>*YL} z<)9sbOMPmQudQ4y(gr=@^N>97BH&p_A$Sw8-vYEFaBd-En{#2G;C1amJ^3zBsxCS`)8MGsCsXr|8 zleM7${sEyUd;_8ZZvYN^7X2r97;x4~q#0ZXH2T3JbS*^LLQm)oIR?%FYanOA>wtM{ zVGrO1z>|>M;0-{dpDU>kEAm~HxDGZ@gmoG~9V8N*&;XeOPFS!W{S`RjEl2_J=NWq+ zQUtEwz}OR;kY;eHZz}Rx_55a(FZ6`FAZNh|UxQqsYk@|8RD{!CVsH{I=P{}nHUKX5 zFLe|;yDcbN=m}#XYH-45AzEt;03c>4ucH59naK{~tU4;~b8-S5JQJxeYcpY+x z^uQ_|<^$k$z={&2lQ__}6t)WP2n^kaeg{6Cq&}j^chsv8ALt1WKtjRwz^~s#n!%<1 zpvW&&?}KPl&=Zb?6oC__AA+rdYk;|jQHJ0JzzjXoMta~~NHaKl7i$}iAZ_3ra23Q6 zK97okOOK;3B@T3YA8ij@2|Ngi0M`SbJAtu@!T^6fiF<>yQ|P-O1;jtV7od<$6do9U z8s!460xGVe+`t`yy_-?L;8H(JA3gk4n9vCtJfJ=S%kl&v- zAXe~?LwE+_2~OB$5Xumous%B(SZ|I zLk@teINTF{c8-Bd{q2yio-ZI*peJmBw1N{34a7C@S3?*I@dTIp(;;6xKSRQxC$tWh zu^4c|36Ml^!l{rvaH+2x^0BiMQVc!e!^2UY;Dl2kjo?xrIpjO1*9aNA4LxBn#Br;f zM+3MLobWd~2QKw*L%wltLS{lwX!{WSKYnsp$x&L{%gqhO&vrJ zJ>h$hv*3i5V^D_Rgtm}YaD4>sGah9KKQbEN!bgx!a05^UA2mMUQr|V?!{)8YNGJ4! zK2vZ#I0yW3D$)rq^+iKIYLt(`CZQ+X1vvy>2b?|!HVLi<{uqa}flK|!kk6SX6VX25 zqlK^l;sZ`deq%zwrT$~cugv?&Xv@$OPD+t6Ex6QI4Ed1hm4-Tnp0FHJ4PFN%pD>3g zJkaPHhOi|YX@j2dM=k0XTQ9CIyG+i79YRl-4ru@<+z4p~C)^KV@P9)1Im8{D&?*o211F4t zM1re;&H1QPa0BqwMd(Ms^}snxkT!7acgWse2HPV&(CA-gt$cM^^jVKG~2|t7sfD^VtHh~j{Z-O0y6UIUgffMeAG=LKxgIob8EZ>al z!Rvq}#qfQgLs@NW_jy9TPyX1B{t$Y?;FrnkoKRDPegvHG1PQp*uLt=L$*)COK~Go>X$2=d39&1c^LPnd2~KE$ z1cMVkQ3u-tm-_D@pCIP@(Jr7T42I-^6HbM!1t&~|=)eijLJoj80ksEEf8bL89^~hv z^-YX-&=a0Kh+}Z6e-85F@gc+$zBdS~55xArrM@=EH^+N#wvS)pj^P4fYl!(ZQxSB8su~1Lx?;4 zRuHN`g}s3ju7-qx6Mhbf0Vn(!k_t{Z@+|BPoNy+j2%IqFGuStH7%-p__69EXVL`q! zUbqN*gP!mNKj}GRJ5Q?f=hiqkY9*(zrq%wCye_Y>7?*L zqrV5jtlOwR=n2VxLo>M4j|2I0h`)ohRmgc9au;n6oCCHn*b6uo0W)Vg+8nqNXl0Hu z2iy^uWg%zJQWzW52V^aUv6ZtF$R=>9p9b>Ru+a|v1oVW@*~1pV3BT`xItMopc9pYc z@Gxhr-G#8dXpca57u*|M30wzp1TO+|Za4={DDMUYcLX|l$XO(X2O51W5LQCcp(p$R zQV1^fr9eIvzU_f@LQmM&6Jr86;atc?aKa6c7I4D1A$FAlehc0gTtLA@CxgpAu;Y=YU%wjo>=qZ(eeC1)O;! zZV0PFc%adr0pSl2N9YO1_CcD#3FkpVzzNqtCV~@ILDb-cmmpejLU~`5A-E%OUqATd z0Ivgj^oMT>a3yfj0O-IAfHxqg!3{tgAJjLvZXn*%L7Kpi0bK^kS!%U_zJrk$=sDoq z5FhCEz@LY}-of2{G1fwK;4^`1AP0m zCk%tMfTsezLScLR@a}Y!oIMWd3qA+<2E-G*2}ph>+`$RShlCPkOGtho)Zm2VXQ3FJ zFaZ*Q`2YU<&nN--i$kap+C`4%>;cT^i9@gtiR-Z2>jhun6)ctpRIA`?Z-wI`Y<*qR4z=ycePoWqr3zB zIPdmP-Mwk|@eprX3?gneKFT{kDaZTa(e^f>^nG$hJiY-(1erObycc9=j?BTvsTpxO zz8Pr=*;zSR$y#5m?i(4Gli{~8z?)W$q$Oj8;A7IeAu6RZ6rZ=|U|~#h)?bV*$eX_o zS7N8n1=;vCSUiTNZ3|6RcG^OGQ=XEP({@sNdK|yf4%wcFRWj+ybozgkcU(?X=0fZl zo9(S!kT!<@u6C4nGOa51_HTH1S5=VJIl@!PY1OyKq?i(;Pc$jZ+P{L5(xS`2Oz8n{l zn3R+hlo*uEEs^Hzo*06L1_Xt~kBIXfnm7V6B*!QEh9m_h`o;wY2XldeLz71Y#XUHN z;JCo#z>uUM-=RVABYcB{g9Ciy<3=R-CJq~s7#tTIH!LYAd&u#1N9iB@d4a2=t9ljt@dEl0tlur=h;VA<2nD zxwwF#aU&$T2=(t+x}p9i6(LlmB+#E%B;N|!?Ut4-VhIPnZ>R6M+buLS9Si(baoW@| zxwHwZXdkIst!AXZzu3O~+S->NQsqBwQj|Zcd6@qU(>T3H(^uo6{w6UR&Bwp91ay+` z#3X)W)yxEA3kx-Bv}42`pxyk8eL_^CxV(WDXN>a3t%3r*`86}6yeAp^20t;me&PHI zU|-`0{NB_fbpF@YPYv_q=$|(&-=I(5v$DrzC#0rnlM-n8=qT?&IK%H0izUr5v;*`g z?_on>GQ)xcf`bzhk^>Txy|D%^Gi3o5mhi!ijXTu8^Zd2z`I10MwdWq4X@yxZ{(p>3 zW3l*u9E%2vVpG^;97o~*@!<4#Sn=3Up9T5nd!xH%PX-vYI z#!u;>c=7uoM%MQ0AA>F%F|@}Y#Qd;A+m8hx>@a4Fu#{IVA1)JVNtfip^d1pxBL2}I zCtHc@CgK`+%)k|NcMbAOrI>;|YZ2yNos#WEz61G^3}C)I3qTr_|E{v~!*vh72Zs=2 zk;W-VTN3iHncX-rjn3&8JneCvt9S+esSq}|kJ@yjhWFOxqrtmY?6`}^VShZEPW3_v=vf8Jbs}89StB$Nz zRnM%htEsQi*PN(nsA;Tes%fq<)U?*HeOCJ%_qp#=?(^9fQX5tqS*xm@S*xy1t<}`# z)fUti))v(k*Xn93YU^t2YxT7!Y8z@BYny7DYYnxnwUlT)e*;t{GfUJZsU@0{ypn>F z!jhtr;u2j+MM+&reTly0L`g$QV@XpocLbtiNUx<*}-u32Z$wdz=jRf%JX zdx^5dr-UmBDG4iyEHUObue6}Fu(YVOxKvkKQCe48U#c%XQQA=2SlU$DTxuw7EoEg^ zWsYU;Wy&(2GOjG7EV5ixKC@iS*K}TaL3v?$J?i^Jc?0Uask|BW-dfIfS?zM%<-SX~ z%V!t2D`Z#LuE<@gT{Cy7cctz!>~7u7_E_z4+~dASxyNS@w)YmpJu*xtV$hA-AjE+xzdo* z$Wm45OoY>v=85?faw+7oxl~tHQC453FFR4zSk?dwb>ADgSG`xi_r%_&z0G?Kd)>ua zYOXX?wpKb;xmPKxLaM^5BCFI@sa2Y)!m6UG;;Oo;`YL@@V-?x2V7r3ds$jF~>b&ZL z>cVPWbwzbu^@-|+>c(nAb!#=Naj#L<_=q(x)VfgPf{hFIZN=L*YruOJ>E(S{b?Wmc7hUu3P4@1gd)@FDQttgcjFfO3OwF>3b%D~r_|NQ>fmA>6S`*>Z$ zjK+&@&yDbVb<2vi$Ntfn?89`+Ty)$rv+p4@bY^myT<-Yv#_PW?esA*Q-#)rE_pHV3 zhbT@lr80A*XX%;%Th7|TY`Vh2Sw3q_fGg)r2UgB@Gw}3{b>PbII89Q33+F^?OK01N z1=;a&@Lz+q*?jJxwQ;tHNsY_ZCI$55dQdQ1XBR=C3{Mi)mE$2cD>I-s*ON}0IlGCc z$ypm-7-VQ@iEa28u2(nvfWUyjzyOZ_o7K%8&nkgITwo9;li`by>Q|#;9(~Ev$)>Si{tMnS24!8W?|&>jXWo%_{8Y1kcR8|feYmV& z_<@qk<64^Ec*o>?s2oJTPiIPhrQ|7*k+o#dV=r9q3L9v=a-?hmN}{ytv-wu;GC2XqCL7I#PtZz4!)l!6CkU zo0PO4v!zR!nf12k^M82eajx=*)YpFdr*+SRQR-+FGaj>x>3aed}u zuKCxrb$xPdow6R;yKh9-)h* zi|_JLOUQ{k?+ndUG(K6}!$T!CXln8Q*=KW1#F+-y zz^utLO7<0&%Re8~>&&BHT}t?@+p56Xb#u4Os(9H))ur3_FJ6dyXx!AEA2~f{yWx@B zRr`KP9`#7ICi|NW-^8AAeDm1y#7*4~_bd3S`4jJ5@W{KUBzNQNq@&+=(;gbLa?nMq ziEB5keZhA}Zba|Ye^h95FLaq5xaP4nL5I&JoQQgP9 zzEJF0 zI_gJF;{i>^vVhAmHYYUj6fTJyWIRR#?O2*Z|K9@!pc_;ZVwxm z7U$O?sJ}KR$2TF)Hzm+7At{>+rNs4C4CR8j0G+?iS9&#d2oJa#UBO>%<$;pUZTx#_ zWnCt?^!jY#`RIgh56>NT$o?wVo08E-;m)}gbl&@!jT)RXa0eLr>fIh{@DJyo!j6apP6kv zYTN9~Zl|1=;!Q$`eZ|1%hkUiaW!7FQ${?lSb&)1We>OpBOz$_$C2>yvnYd#4PV>!E51j~0J~d-T;Kn4~^n*theOY_w z>*+p$DOVHxkNl9NfA?zccazF@9sXjX)#b--rcG4#O{_cc&iUU)WEs*&1`fI6kYI?Z z`S_Qr%kv^WK9_klaro~Qvv~@q-PaYLZhdR$m8VnE zGQR7ZzjgIu&TwO-Wr~l(&F@#Ij%eBSLCK>2_VcdX$=*9}#xcVe?F!@f9J^3O@V!}|WH zZ(8p(zK50nhVQ#4#T|6Hxnjv)zxWOQY0tBMxr;tGc5KNgsrY+FdA`~9qh@RDf6UC< zX5XV^vQ8%;H2$E=fuV5&bp3RFR(eS$AUR}5IXUV4yY-ypoP;=j&XH`4AARF2ZYI~) zc#OW$UA&y{7^T;9Tw5sl%D!SK>Jp`a{Lu?)bNu=HXeHfL@}eDQw&$#TGEKMdx3ve| zpSQa4nZl%-nr!=nM|s%nUER{2<4y&qhBu7a_meQWQVNqR3&r%FO2!Ro@5tpcH)BVh zo11Hz3{6&gT0(w@Mr*bVGdA1axrXxBuWm5E`N)sjoLy>A*oj-iqXVU4E!Fh9MZ{9Yc?BK-U zN4^@EKmL)E$3OMix1h(7gu}o7ad7IM{ql`r)8;OEIqlaw!G0|sYtn7UvQ=LV@UK{5 z^UZfF`nS}d_;laWm&%3@3HkcMOVj%8D{?F8k<#FL{H>GQYS+&H>ia$VHR_+=diKmEYid7Pdnh`TtrBV-@okOV2``y&(B$K zb9?#BliV_k9_Z`M#C|?)kIk4uhk5U$jvk);k3CmgI+)CVS4T>-)L~p8o+>!}+DZL; zzzE49w^-7@<4KdA<1unr*;!11LsmS>I&qGqu(Y!tn-qtinzYb~J-CgXhv>;_8h+L0 zf0-K(*NJdoNYB8=ZvH`mxMlKtpF`#J94g0iDB4*0tHmd(EH*{VbapEU|8&>#)3$4$ z{QjB7FT1}z{`ElDUMsK0zA(;u#2cSKmR$dSUc9`1&ZHGbJml9V=WkCNJyrYetQ3nY zJC+Pv-E;Pr8|ri;X6*U!rxm^lKMkMp^^(l8$$wZqmT}%8&k3I%EM8RkoVxPFtct~h8wcNcEV^loZp5_f*PnZ1=OtP8yXGezGGEkV z>UR-OxS1tzgVwuWC|mfl$NC%RGY?PrV|mc|J|FAz2F^KsXWX(|rL&$>&(L0Y+Hz;{ zic20VoQACR(T6N9Py9!$m;HdS=^5Q$>mB{w*L!b|e>8aH`LMfl(r@dZ+BA8cX47a@ zP~*u3KA(d>Xkb?U2jhE7}yeH`))~7`SG}C#&q2kQtGtkGcG2;;h``0ylg(y zrzFkm`B(dYFehU=XPD@eeEdpGOm_bbbNZitso1;qombxa$LGtEE!7|V`r)S79`6pA z-@kc@{F^BUe0E#;w+^1V?$b}qQvcy%eK_}}h&O5iR&1+3y8Y2nU#EICelz^D_dlP$ zt|0xNDV}eCKYl_;kG%7{Di!^Tb6uC2{ag?<=UkEd6W@+_*VZz#-1%7Hm4};>BeP`h z%F|j_9jwg>ZQ0o86YpMqy(-P^0yaLR-_g{2+S#b%y`8RJ_-4-84+6cTj=k{w?w0z7 zUwU0keBrgSlixm_Vd*)Eds}84=5}D1+iE(@VP^iP!yLWu>FKPX**?9H5uV~Ntev3I z@0oIS*zNf%s>eOEI&Oc%RFe^;(;+6qIA&p_i{oPd;z-xo{Qo{99Y3VPr(6&QRxLM- zlG|J1&-rqLbpv$+R`$E^V2p-Zy_lGokHii6Rn3VNYUccu?nw{M@ zt!u8!3wE>aI1OxQIyNV*pi4l_$YU0vF9+;W{nY2eYq^|fOxLJmGv}UrDI)B{njKp{ zw0qI_oO4QiNOXPw$3J?b^3A6!WBcFPurW%bUNzd%jmtQ)_tNwUl}*WgHg1>@y6`|~ zb~E(`M|iV z>%v24jCRi(TadA!V%?*GYZk<`q)xV+yMEIX*DnqE@k{3|$qR3n*;Za*QO}Rk#SMLS zdX!@6o1->pToyg)=JEQ)v$7qzI~J^7eskjK&()5Z=ctc*Cw|<$ z(EUns#P*=yT>wwzI44Rt>vZJb1_OvQa;|t`3X*)=|5*<N;uOC@($TRl4_n+x+yEEp6`6X7@ zwp^_be>=^7RLpm2zn>Zut$1&?`K5jj-AU?wrCBE1cEBlRc}==@$^QM7^N(B2QiN1B z&s?1C^M>c$^p$pN7Y#VMeZ(W0>gb)Lwk(NWxT^J|`agW9yY(w92w7ECy+`FV?${Ko zkD5=|#`gC2x?5;fz5J)6$|uhrww`w7xBB$JgmagFE^*y;dfus#A8dL5_BY+$w^gLy zdSUL=VLktG?o!VW&%JrGAawq7gGR3E!)80WZgao>+TisgPrN^`XW>pi*A1^-oAz_b zGPy102A1uXWD&4T){4QQg_>FRfA%{+x#K-A9jz_Q2X`@(dzdrb6P$Z{!ps6}+YT&c zXh_CiBdpB>954wB3BW82AEAW=4xNQwyX~wZ056))*4^;^ebD9|ZbuiL9ernqrEc`` z!S^%=eBZCSJK^-^@(myTI;!8XqZ#joSe1HA+5OX+^^cA_vuD7Qp+mdtCrk~9kEyMH z?#0+`d#`=A%vVgTlLV#bAEhGm-W#{%Rf4Ga~wDRm+>}!hlfw;^Ymc1^^dI8xGr6>J>w0_o|Wz| zeXW1SX-d80>FR#-9!qRWkC^}X!*6}4-&lQdp2I@-xtne!^z}UFcKu}J4=wUPTDiRi zZ)DFqb>Y^n32ARWQU1gHx_xDz6c0>&dFIpSydGYEa!8jm-#f=&{$ls*!M|)Oc;)L+ gmvhy7nhqx1oONOUq?}5dhekYf^wLD_uiY#EAAnO2nE(I) literal 0 HcmV?d00001 diff --git a/venv/Scripts/python.exe b/venv/Scripts/python.exe new file mode 100644 index 0000000000000000000000000000000000000000..7013af8388bc0ef07e9f41ccf71d12b772435424 GIT binary patch literal 99992 zcmeFZc|6qL_c;C>``Sphq6{f57@?vpBh)COY%Majv6S7|!XQ+dM5}tWkQP!=+DI|T zmKG&Zb|r(#mVKG;dCrVidVSun@8|n_{2t#we&65sS6o`JQBi z8$l2rc$rKD$peT!1XlV#PXsUsGEe^LJmjI^YlS?F*=q%B56?iHUx2TBfRi`Q#mUFV zmx6O9;{t+waGpLmV+$*sx34Q%O;l7!i6eT6$)}h-N>AR;zE<{1?=2xOVD`9n7Yjb* zz}(txto(yov|Js^cLQ9xna#IH>GAvhEc(;hy(~z4&xVg!`JJ9F9%vi?)+0+31aUpg zhvaUm-aE_Fk0>I-T=TGq1W@)sXW`kk01`14N?=h?oC`ttSft+&xd)|SR4F?yu&-lG zbleg)2fHrd9OUo(-xL<#8Epi4h+>Wia&#levP2LqXb17aAm(#`2U@8GxH?gs5TpP)W^?&B*E_^p(}-syR%60v|ywATYoMaF$IR0nvrd zr~#bw5LkR9Hl7X7!YWXV+}M>H7x{*9minfmO^QKRnXQ7UTGkqmLn!g zI^tN?Fa*FrSQelNLRmrt`Yb1sfPP0L^H0BCQ@cGN+kL7-5Vk%l0;exRD@Uh6`|LzQ2!QdYHM&dOFk734us=fmxViFp*IC76Lv#eUb$mxeKCTm{kK`uzE*$Gu(&gD~1(Z{$4%3`81lFA5TP?N!*E1i&4ERKdFrC}^t{yy}3V zu2;dkfrI72SRup%bkxf<(3%xI7_{Zzbed?%YM>{W@!)2O7$Qyd#w-ykRxJh%VRONR zercC-=1x8;nSm|}sDVmfak{yJ-A&k2pxqRJE~(QhS^d<6<{5`TJ+z-IK>I~#hoGM; zIQ`5*^`r4}v-?Q_1uA&=K+5i$HDK(%IdHI9b($rB)l(TsMAGZ;arQga4_m#w4&3KDqV!U9*p`v_9Dk~x5( zO2$Sg5s_dqB0x(dNT9+PvK;cfU?C7qWLAPsXd^@>J%Kj~>do!W5y(S#V2mX&P#K3- z?nUe2fE!Y@o({l3MU+M}19~y73IfV@sAvW>OH&#TotVJ$viBvJLje4cVE``789;PC z;n4X+0AFTG&WG&?kybDUjSv&9l`M(0w-8g9k^>8Y0HdfujCEDghB7myT|`jJ(hTMa zm{Q%0R)G>7(aZ{nKd4xyWG-3_rlJS5Mj)a7La?&^-P$!)@dLCqO(wL1Ht9&Dy9p5yQK%F*`x{%mg(RAW}eGPxq|vs!e384WRm#@oFDRpcEgt637;Za}Q9 zgaR`f?>iQ~*pOC}PXH}qI}BF8ghEqII+PP>#WXa>l7Ys6THe3o!ZBg6u8X0rA@+%} zfP{IX2uy6cj2U+&i@--r6p1!ZSV>u8NHY~7ZhRLYY)CT{;4UU^tO?*VjV)f$ z+iprLE@d_Ks@nhrqPoUcQIzw{_aKOy4klDRnhh|s~CFV=CCTBWy_nD z#RR@MdJtMkoH5AG@H2h@())c*eMTct7#|_w5YhVVwbx5Y3|)X_Skc~;Hf~Dmr+p^U zx*2{Diec54ik-v+%{QZ!YrZGaUK42*Ovw`1wW4ma3+4g%F1iNLydZkQ0z?3nVKsQg z3gcj>)hrz?ELP6m0s5%}1uQmoK-g;t_A&1ks2pEa zfKGL+ap_Us^^j+X!%l=T4)r+}kYIdgX9Pjc4?uf+j=`3Mwc>Er5<;}z6hs_^_6Zw* z4|PS@N*u`ngb@RS0aI^9d}ELjXxoCuC25cWN}}3-L-YKsJS7mU9ZIB0PAr2B83C16 z65D35x{?@M$pl9R=O>~u15H+7#WG6k%xJ|NZ|2?C$z%qF5nXtb0f7Kz&H^H0F*+>gCgri6 z+fXLR+H7?R_KBecF>!|sk-G*^)`T)k6nP0@P|0-TJBkc#tBBdg;s7DqCYVxY8|eWs z0ZUf&wt_Rnzh}9fMC?H&BocK%A#id&fLtt}mqF(5JcYQiG>9@si<=<(w-(xSw9x&B7Fz#{ zTI6f~ZVIeg46AduBHD;OY(qzDAp0K8!t~q6ioSX1B|t=9Vj^!M&`bY@Xe{mm!w_Qyco^T<2p4-SH0e6LuAl+- z3?1bU;?yIfFm{;@0FZ;mKpSG>9VNmf2#NVlhX!e%*jp-hz`F0zSjtWp-!?}Zk0 zOk|)1=+chLL=hai@2!P{43QRJ$!ZIYxC!xSGpHggqG8^7v{lyLHU227XB}ueTLXfS zBkX7_B_Wyuv_?mPDVYH>W5;0U1|?`LA`lZz`mtxgAh6Lv8{LjJ3QIqMDY=bxkO~rk znJbV;43sq|hGf`2pw^hvOisFdtJg4Ygiu zsQ__fYe4t!Qxe|5BIb|1=C7_Rv>!Ey|WCiTXUKxA7(H3`*Jd z1D_TnCU_~y*xDJ|LNF53tg7I3fKw_Lm_QRwE!zQSt)%J3w0Fj|moWn_hUUgGgJd6y zC#}~+voU7aFo@z|Oe+=cF{bqkcN@kGc>0h{4P*MZkbQy-6OAyMRfaKxJ`}PSHr+(H zIDtpWM7RXn<)ICL*9y?aVDB#yWJ!z_{Q;MF%w_!sOspQA4}(xv=sEInAru8YKNKwD zy*EC^j2**;C=uc8i2i|IVXqYjN*L34A1fh?K{I1oBdQsy7pfKZ=@-F3v;r4Yu!aiQ zr{5$3eJXghK~vO16}%dNq30|pkqxwlR4#Bk2*cD6i#u>c;Tj^yfh`Z5w3PUC`GPcP zygX1Nwo;&icL>fwXsAfw9RSR5q!dS45L=0>;Qb6)m?%)t02t~L+AwUeZ6bhci5WVO z9KcOs{B(FS5eFh1_*I`>Uc-UUIPeMw9^ybB4z%V#0tas9$Z_PrU=BRSfo$mr zg4@W(c5$FK2hNsf>&{|qc>W*xbN}F<;FQbhvH7(*(3%6~IOVn+n9QNic6VHyk+I%R)|G-RTJNnIT&0ouC1X`!s|Ky*+}%@h5WqqG*S2liyQqpt4a=8hmWkQYGf80~~3w~-;r z)9?=(N^JX+26r2<6a0f_%BtJ{4;o4w`v=Vkt*kM(T~n4kfj?-LEO}yo(pY>lf6%O1 zd^n)7?8oYdHH%LjXnq*z8|T{?IuF{wui1H}g9i_~I)e$2XfPVf1_2ZoB~wF|yrX~6 z_ORq7&!t(j`Og1AWAmi}?HAf^DEk{4`t2|c+Tn}?Xa(O6b=dQdLj%oV-3Hp6@q!Nz zpw~tOdCc>7U62e9f%O-e{gy|7{1_}IYR-XyXz}c~$=Ppsh$HZGLpl1bPDvd`1M)7= zo;GHd#?lF;|91~`3&HSU5S~qQAZ)hyG`Q3;LOh6&79S#{!RLpWrTv3f5X*;PT?G-W zmH>j?DeUK`$lezP%}0=f;t0!!QJ4)ceNLVu&+@;t4IjM)P+jI@konGYbP~iMf@q$l zlPDq-06GcqAOZnAe%y|r>p%75jZ#BgB{F3UOX%*y#s zFaX+-5I`hc;kD*RB)~Qj8e)F`r4RqG(Z809@*tvGf{3UFpCv|+3lY@d`fU$>E`%Sm z;P==_@*9>Om#I51g;zz{A=e3FW2|J>`fZAYe1B$U9aq!1` z;6XLutFwXCD3GeFA&zWzCF;9w!k z1R6R=W}kcLo&{+C>G{9=D7IDpzq*ea=e7(ZnLByO~GfkYzv*q_~nOVSZ$ir;nR2$(0;P3GfXgd3gp>(0!0M**lO7n61%H zo9))7<|b>j)Y&o#2q}>4L2~o-qL2efWwWw4$q2|r?c_raA+eOeuv>NU^=9j2@P}p50hF1QgIdkUDImZ%gkv|&KkUXS znrj$D>kkfJAC`&~Cuc9{z3!aea7x^Qd|W7=zCQ4)A+%2}K@>9Sk4j5GmjD=LR$r0D zvpJG~kf+N5wviBb1RV%ZA7Db9{5(~?164yjeN>^ID*TFy;^|FR^;)C4MwRVK|KLD< zWp435C4j?v`p#weM}4-H=Q8|Lf(O~j?~n3oo}CmgBPTx!*w@Gx?oi;@L+??VnXm7G zAivEVo0#}e0>TjF6Ix>H89)hg^0M)Pj=93GoOo?~*wf0@B-DlMhnjFRYib}!Ag>jf z@~_3RTwBN#qo9BQ@N>%mUl%fLM^5ot&)RR6gv4>1268gK0h`HAsIHa)1orVIXvXjADp8 zx9Q)L)5;9Ip9qeRM1n@fWal7vcXGh2CbcXX6elo_pD6?sJLDirG52*1@*)#iamNlp zwwdhQZepgX!Hy*VX(jr9Mti*v_ulOTlR10S4i|7t)}9N*aKVem{V5ME`@hfsITlbC zLy#TtqGt%W8$g6%Ut9?|+z%jdhk(=ojzaW;wgGT$fLr0kt%nay04rh7+y-6o5zIB>;XD z;8M8tR|i}PpoSFa0=O2ytMFO^ejT8sG=kUzZV%88UI{o0!6Ja@z?%tlU4VY@eg_}4tNB>YIs8d=Yd1IEWCbz%KVTtnt5WjlxeB@na3{RlfI9-rg_i($B|roR`T~wZU3eVoC5|BKAG5~7;0+{oN zAn1C)06Mx>Kqi_SfDAymLO|33!ZiUx1c-ita0G~c&j1EYw*zkK<=p7f>hSJe92oG64=c`&5cykQJL| zbKo;OF-YdJ-}&?4Y?-JNa~?th204m49p|Y$g+V-E%x53<6bzC*n*rDc`OG=}Mengp z=IEnq5bEuP3nm8y!nRdUagCa~B983i;_K?^B4xX*;(y5QW3(QUZbkDd?{8e^HvIBC8(M41|M9fF~u4lLtxw**^$cA-h@z zcm~5h)}0*qcj4S(6V@3Ax@|@dCVSz$&{R*+DbUm>*!KWAKoJ+@Y3PD(%Jmf8oV)_b ziuk|9=;Hsq5ncQrD(T|??i;JRE?C6RiQ?((=>=N<_uc)29W^6I30*jBdwIHmBwwH3 zdIbjg`S}Jw-{GICn7ZmIhLbha*R0W6yIyt8TCH`eTAD6vRh`zlkyX{zwOz?%vZkx1 zn|kEjp8XdInrqi+YCG#VsjhX^0SRu-uBzH(4Odks4J|Eo4UM&KI+{-Za|v2b8g3fe zWKGqzn$9|^T3T9bRGpo4TvT1x>9}e+X*sPUYij?`C9H8>f|-5S{j-< zsyb_(omI6pUDe&zxvIN5t^aQ%Xp`05);q1yP<3{5)`VV=wN;@{YgM(h-CWnIJFQvk zq%)@%y7+%uR~P@sK(L2$4%2@>kgQqo+i%gsqi;wcoDV55)qZ=ZE=)6bOE?G{!c_!$ zR;&kw;B*sB|*+GKemy> ztYJ1oXj``yTxOlt8Z9js7q>O8Zi+ZBCm;79CwDgc?Bv$P|L6Ywrn4*omipa$h_eZn z+qZ}cEkd^eqNYUSo$Q-nxNAq(0{ehWHvocu#NC1LyO>h+#Z>rax+1WpH8nQ04!!i_ za@ZMryU4C0n;ZulyP$$)x9^Hp+ip7-|5^4N=93g|p}U_K&-ps9;8&*QF=orvT>{E4 zEi6^%nOB+|?}}THOQ0{1p%c{oE6*1bzd3TR3oR~xtcVxSRoeFP{oS8?T5N|ZZnxf^ z{8=zsXjf;`T-VdubxFU^=J_M9>2s5l(?9#Z1^;XkJnST;JU&jv9CrGKwM9f89ChNQ ztJ7ruU!&(synOx2_APzw@Jygo{qlpMtnMbSYY8O&0YnhR9zvY=^n;C z>2rDDhV8Q7d;*E zYVt2V{NnybpN42O_bjA(@XE8*#Y>RVU&$3oT7CmvOYD|}Ge(t<*SCzc?RfU%Q0>5k z`8K}_QCUTc_7k$}+J-NlYb&rY8)@Qpgf4Txko9R?AgCM0r8IT(s?n2sT#n~4M%G-& z#PTVm0uXc4UC|E{ zdF@iL0`iM%raxwXuiV-vdZ7}M8*|KtpM&_&zH^;=l2oMfb+EtX6_FR}L;Mze&N4R- z?82zOQgr*cCi>!uh?dZZw^q|D9Uae?(O=vY{IGxRnd;7l$CfMTL%PWNH$5}oftiaQ zv`<1Po+uc4Aji$%uGOp^nidi{EqDU+YvBmrdBejlh~8$Y&`+|C@pKV! zU|Hk&(*TP-Z+M6!h9IBZ91%Qu!7$zhi6jIMefr_fCwT(%O5wYpdMsZBGC|z4Ioj!) zEC`%073x;=cf;=5OX(sSAW`$ud`G^8Cr}eWYk@okGp}$ZYoc`y?Tc~~n`Ku&(yt!9 zP)nQdZv=Jm*-ESq(N}Wu%UtkjlL3TRX7_yc%k(wTyvMgT=+x3FTos6vy2|%gUb6!4 z5s1C3=`K+>WwrU(xFG?>{f-s;V{R_c<^%cXsbz?eUg(oTjp317 z(&CxbL%)0ZMPcNmUmG1Gr|pMW=#MJ}_qFKtGy5iN_~}AvSe4Bdj?T3_YK3FYW@d4X zCr=jBB9Gf1BP_GtbaB1!iN%f2!`D+s9;CJxPW~+YVxg;V;hT9xFB-F1YOG8{rQzVX ztykk?QG8_gwywI|(L;%{>z%)pC+5ve^xltRQX~4pTTAzaG{;}7IPqrmHimc*k>i%Z znQ>9G1erZHw+G7C7tXhH2;(8P9_ zS3@s>-~UVE`i`vI*?;xfU9bxN-Vn2RV{n^n>lk0*%y7=zi(62;cUiv{I4+XZ_Ov&< zbhw^m;Qsbf)&`F}{RpJ)sW8%iXt~=Zq_j*|Xj~3)%+yGX@Y}HJvE+%q*j33nzdA3s zj68nQ{?~!*Vt4(ag-z3?1(Sm!3%+ASv@@JHJC^Fm_Mc3O-~mm$tEO*e%^N9HPn14k z(N4UZ&}Cum@A|pawXXPsndoU7e$DN<28a5>K8H_ab62aCge+E(U77BA_Fk~*lC$me z?<`vB*!{lt-oY0o$7;9SpZMjZLVEwa=J@gBZ6EjgmYq}G+yCh;HF!HyK2Rk3g4JV( zLP>e%SVckMOm|nty}n(dNqQk%Z*`-@!%64M&6Y~|w2nINj`twF$Q61Qvil?{==T3pPsI{L;CdT!}r_S zPldWJhb-~Q?>whN6TQcOkDx7in9HtkVr$dE-n)zU1$y0#N&Ojy!Rm!eBRKO@%1T#$C(<^luTou7bvQ}y$nt@& zffaBMSDkxrP)jx^&u?+Cm;UMp8oM62iRv@Q-+uXa(YO3c#)#`vw{?CZjxqOYj&P-T z6<%N3-a0-uG?ubuUdPGjTXwAa?4jL$e&4dGj?oR(7Mrl=_eJ3(rnXjXzP1+5Zd%;d zi@RUgFR@j?YH{!4l`ZTl$yFIE#I}z5x5Xv-PBHu=zHCYQ@;>o)|K1#Ztn`)VD#K5b z!1fl*Ul#t=s!x7B502JDZuT8ll`Y+3F!9c;i`qN$eC!SWO6mQD(uG~ct0WZLEtb9> z0lOjd>qL`DD8{`;vBGJm+!!hwsmB#q>`(r)`6*luL4{VGIlrJ2+=I&CG z>ULM~Y(KYmNb9Y7Oxz)?Qgf8}Ol8NDH#Yi33*$bv=9WxL=++y0W**=C{II-%Uc%_q zcv0IM{wv#``*?YYq)vRu*!lLN=&E+Sgqv^CZp^P3!^M2(C2E&l#22q7jc@%j+!{Wn z(=_<#i2vC2?=BY=uGR|{39RJ8`}X!J8_yWw3H`dphHpEUVxyfAjVrzMT$Rx5*hBk_ zuPxbA2TgvdT^rHSYfvoTO7-mt&)NNePyX3>?5(aKn(jzn{3P}s*Dh;l&bN7NZ~1|u zAg04qCw7D`yy?K+%C0u8o)wbb+KC%fV%M(X$=*4(atXnf)by9GkiS40WfC)XMOJtQ zW4S8k(7xk`xzCXmQnAdV5iKPK`uzu{+NDE^gI*h5f+*nF+qpNf>y=dFJV}?&1+MXu z1o_=7jABH)yyzy<4%hW&Dj(q6Xa)z@O_+U|-kN`W|J}n|^F=at)H}33toxYtaVNp~ zLy=hCJ)w9H0YY*$-bdJQ>BF&K$^=7wf8orEne<-YCpV?LhHS6L*=NM0>V^q0f5=m> zPba>ZY#A;55ct$^9@mJFEfV>{)t}#VAp}M9@K^qkQ&r67#gp4bCU)C~-(Kq7B(Hbd zA;~_vU>q2uLsq1_Xj z$isaBCqoK{E{}bDQbeAbzPxFZZ{tYEPQ)x~;YROQyL!UAN}cvsuaaoveeFR~&aAh8 zD1_fvB-d+q1vGPTq|XRW?Tre$fWdJ3_eFLWm)=R{ui4hl zzYC*sP^~HS>PW-S*wfnU7R&BsZG{kLNYtNZh2nz?O$Bkg%dqjRw4C4JJeFbv*AB2xL2tYQkVbP#h^J*hVZmM zwP3$Q)cBQ@ig=Rq^vfMnqrGb7pYVH@L}mm|M!uzWjzBVVMk_Y1lRwRT^6cS~(c?|j z)jvmQjn22^q-0NS%Jmu>S1cTht*FsD`u0YO!{=IUtR&a)B3p!ZX<)$r$Ni|t!bLwW zHqGqKd5)`na1Oun3pVGI#Er?yAIdS(sdWMYKPsu3gd3T=51JE)tImcJT%pcMvI^YukRECSBR+ zka#HS=9(yFD=)lm_(C;3U+?QYStpV@YAkns+a}c-WchM^hxJ?CoVd6W27&AzyRTi!OH3vGTR;?zjVgUFRoiz)OXn7=8Q3nU%(p~1EcWo zZ39{N%UehF?5RJGok-1(v!4|U(b^Vls{GUG-G``1@{>~^9gdHHrQUTc zP?~xdd6{oS{^GltHx8?!scZUoN59Jn`gjLiwVZKB|E=`ymeUgw$EULQL}x6HtTDe- z+xj}4ksqNiG_x#yCZ0>kklUf~`jyYZakeD6$pbv{NA1RKzU%f_j!NJvhf~f*t4tBj zpKOS76?a!%z4`%WTZ-CR{o4x;US=vcaPPYQ%I(mpUBe+BxkHt|gex)>pOCCIB)WZh z&IRxHz4P8;)zGr9g8J8SSw0%R_-_-YjFtUcDoZRJ;`XVuyFTBSwzRhT(R|p(zFMh# zQ}(k<$M?d?RGp6l&!eV(S-TEYl_~quiRBukutOGFJeA6|k#TarG@W?oK{SJK`n9Sh zk2Ce?G_vC|6;PYGqCJahTN`G4(*vis8A)pO)V;V*y*j9V5VIOtu9-!pTGjFCk4`IV?CZ|avU3+TfN7I$z$+R{Pg;4BT55#2IVLMl ze4nZ_jF>1W(sKBcr#~}PFaKhx#p0uJ`|kAD2K_o2-)#Mr+jYTA4<$nJ+{?k+9v^P6 z5Pej?SnSCBY4IAWX8&&FW|3=gl!(qSnW} z2f9;eYAr?bTMtXp6>q+);h!)YE957t792A&()LR~Tr}D4GnLb)CvHBrk|$gJiGg&T zRE=1)J@st=k@-|tDXPCi(VM~Q68z0ckMdNNDK(Wm)n0iXYJne-c&KMN@37DkE_J;O z>#g#oS)W5_dvR*dI&`D<_bXWZ#E2y7#*BTvGA~YEKojBhce(Bv973cSdk=MBBzVH=KzCF5lr|6}yn1V^#hRv>$GmI;ThEsSAq^^c6 z+L2{p(`B&)xiKp6>2=1W)pCLv_sBNONxg@Ty!Vcp4j}>K5fbA$ug$LM>WZ)A>0zvX z@@qLIbwP2V?Uq)bxYR}Anf6ri?f$t*DpQ`>MaL!M-d^QO%Rh>_$4~#2sD+K@Y0VWn z+0Wg>t6SA6T^pAEX#H*~&Y|tJR6ln|qMos{?e3*hN@M97HRkh|2Sf))^P-j`@{eq6R*1 zy`LSo;_`F#&LwBR_FkYbo|kQdgt-M&RvBOI_K2(ZMfZ?xoykV zyqUAT*WUUh$2RvgO1s(%oT-!+@>|SrtB*Ahc-W}5q%}&;pgD5I$%)$G!Iah0nKegv zNXKVR(|mP;uT}4){{jgp4M!vVO^myQ@PbV#Z?VdNY zBW9kMG<8RR%wxqg@9esew4Ew+$)7esi;!o=>je(LM>2zJgbgZ$$2K z$vC!5-CX}guP^LvlQ7kickt{;aCEY&LGr8V>Z3-;{p%^^GtOBS+nG1odG=L1ylp6q z46ok`-9T~=*6nW^yt?=Jw%}^*>?HmxI>)9f-1fYQ!+WIfS)XL(8Qfz1 zD8|WT%au#5gxXaKT}Qaq{E$|64m0wtDGXt3$d*VD?QN4twuw5+SsZW<#yh84-J4>2ZVQdlZ@{iR|I*jBeESKMg;62lQb$aYmZNCJ zOOC$nO=?x4#Jlfl{5qUY2-UU~w(Gf^wXUsTUY0=0k1NLW3wt+@(meS3rw^Y0GTNIN zreC9N>RVSBs8ya*Ed8->qXR928SVNgRkzGeB4W)vLTgyItnk#khN1;qm))YT%;cI8 zaTMi#J#Uit;N79;wrLN7qw-XX0bKATRFI3<)9ZNsbb@+a?y_&qB0bzXRO*vB#8+~W3U{to8 z9nYY9bBN-j$X>&SGOZa_%hdaY9D9CPbt_-ynkqhLKu?rz_0T<{GGo`*D2yk# z4$y8WXvs;Jy|>Kj&)D&D{WYDbju6qZU3L;wxF;CZjkGATb(dePRbb(eZzn}XJU*Oy ztsV3+bz~)DOALMU^J9m+g&m^nY#x%jF-I#8-Q6j&TbI{&gEiOimKgGS+2=9a&meYO z^N^y^+}3T9Ge)P^Mtt2{^rCgf5Bm&x7qD;pwG*54`CCUVD{nJXZ~qmx>g~|8hDDJ) zf<<}J?wiIWi}U-h{HW6NBo`9i57KxI;?DP_w32uQqpmq5uH+tsEn$67mc>Hu%1s%i zv6~JM8A~uHs9b&{3oTl~w`)T;3ELt=uO3~@F6*-&+*lqMEPv^Rd_*@@ccjVnp{@L* z539}{Ry&Na&gy&Lf3tD#PM!*;T>q;B8m>FI?jYYz(rg{# zu)dS`1}=q%$d^|XP7Ap8__(&;-GqscP|KYG1EhaH#a^kwXo{mdNKq?K<>RZN1^|+;KUf@3;~2t~sSh zQ$a|#MrxwusNWqvxk>wg%6AHPkb^{J;kbFyM+OE~8~EsU6+f>S=#HXtogPMPuOfJl z&6_M@3>FRD=GkFiyoL95&$TO&53#s4-;~?=H{EU(Q2C*_BtbGl!|dlt)#onwESa z?>#Ptg611Dw`G1q=nGM*E|r)pe9qXN3FoeZ})w0mVrJFhvq9muK_A5eY~uk*0$ zVfpyGT}2C(xTy~Ve2?{4|I}AlKXkpjFz(qYd>HcDO-xX48gujz^+(s!6%D~kzb@~J zT5vys;As?nM=8!hoSHuI700MY_!?KLo zU;0Ypn{jC`*)sddkm2;NPplUmv*2BxqATz;lbg8vo()WsXzZo2Qv({OrO{hWh}tH& zpWJkQJTq-z0{{JUYz9eysc%0f6u;RY_i16!!~(Csno612g$b@_`TyT z&-5%hHSl>QuAoL@c!r_%ZXue2rS75vh&MBrwW^$E-LRBtL0gzT5mCGrCN43 zaMJw7b40PdK7V?Z)6FXVLB%VC@EuqkhVqsf)3MUl#_gk3OAx`0H>NiDPurB~FTN_v z<vp z$v|d8ntU>4dRcplYGL1GLPX(;UxPgI{@+`@_$s^ZX14Jk#W$RMpX%pbk$Zq#4>lZ8iaUUu;6==_n{u*I%p z^-rtpqMbXZO3&S%;#rm^Gy|6kSK5rY)YMufdB-JglgYyEevX56pjeK~=kdL_K;Vw?KxsjSxm^u=3 zy^jCGIeCIcvohaQ+$Q;V6SU<1>T@K!Z^FcCZ_hmuWT(f5MRzXQu3WAcO=!Or`slHG zm*$k(Rq$Zs>j4A1#r%x*c!$8vQ^HKg z6>Un-(%TlS;+?;E+x)3#C10vjFzf5}GbTJ9r|_?i)^T#KjT;zS@YbBma5C%iOZnEh-x9k@ zy=xd|{VQuSjDm;Dye+xCiXZsuo}6fT=dGDqMR{E&P4d#6X)FA)_{Mnd%}L|<^wmSJ zHHx=vAH9_vIQ=jHAIW#>bR@B1CAXub&;?aEA2`1#YCTls)*9lHs{AqAj4yaP_G((! zwt>6iMbjydHBP-8=KuUL)i00`nKWSQEC)MKIlnhLT{1}qLsL~|-GwR-Ccj#z&U-g; zKzZ!?^+{vveCob!_=9g7IxefmpItuXES4-3@s&=pb&ZiSsIEX9nV)i!B3pu6E>vB7 znp9yR8{aC%Siq~lb;z@vnLhmFqLUoXB^7l6`Zk9_@h<};z4aGX-5Wo{Sg#N=TqQnS zzjnCh#w2AcPPIc`&uZzE=hoyiv0YEsn7}bHVGmQKl1r6(F6mZiFZs&={!(PL!Rhv@ zm6DN!rcUX20}`K^p1`wnZS}dL+`BNpF2JRQjBG8wbNJVg)h&!c>)=_d_Xx6B5B)8` zXmWLzrg{I>LTX%Ij><1j^ZtaZV$^+SD`SdY0c3H z#cMdc%$GEj`!%I5T-46>-o$;%6{V@%x(xrKW|8dQwnv=L}YQ(xal zcjlGgbZE20uLVQX@5W0ajjQEvaF@BsJ{8ngn!2l%+R$VbzjaJ7pHy^o#n?^%s0Ry; zA*3$(esLQOKbXDxO~u67_gcfZ3Pf#5ceOD}cb|`44n3i|l5$qs@}UvA%_gQ?!8Jyb zkh=Sc&*g!!2U||Lls~jL5PLhi{?H|j<}KE;KHt{0AfN9(TkB(BGS&H%T6e}FP47)c zJHorNOoJq8ZvN5mN|!;(oxS-yeFb}Zy2PwwCYp~uSe8N}kDD^c?e)CV#+4nkm(hp0 zi!nowRQU=ODmQiAdGJb@bCb%GE=U-tT<9=?^ znz7@ZNS`#l94XNGIdaodi_2xoU+oQ|jeC7?4?D6bq&-)Ye46mWO#A$qUR$+d_^z?h z;b3+Lv-4z;Z~n}}n?GN=gy+|6X_8(&X?)dZ-V=kE6)*HWyJpKB#(@t9PKqZhT+O)kJiW2?$9Mh9{iBV; zQGIJu+Ahi$s&$WW)9>SvmTPw>rbVnmI-Qq{KUne0*)r!-kD3bq?C4)h?`w}e?+Dpo4O{TZw~xO+S7k zK$73~Di2iN(sR+t`E~ir;Z0uKY#l_9zxL$tFR9V?oVtv-VJRZSmY_#njK8A{4|+uf$ksV)wP-Bd)Ye_m%lM zHosgJT6I{{fBeOwXWyKS+HEaGo2h+HaCxkma3l`CZCZa=+BHz-PrWLBVyIJ~h|zQV zj(*L=lO23*80{+)jk__gmR7hgdTC$O7ry2;R!P_sLP3G;{vHL}kuv?&FC%Iv#xJJ* zYWbL;d4J@1?LF%7P8E68Yr583*S(QLyc)|rjUKnWtk#~4z81Co%!J#er>prV4=u7h zr5h7h-Dx&s*`_GSg9Rkw`{DV&||m^_D|oNIyeBwrr~)owadpUT_Ov1 zy%23&-*Go3mG5k1uicTcZSISEX_Z!?3VEYvdf%3QALL)BcmRJI z-<<>(1dOFOPU-Y`cU>$GAmz?fNRCrtS*i$nuI6u3%TUc9h5EL7VpUUO1vbz_Bzl3BR1JAOi*UItf-g>q^FwH{FR)8z@b3&#ljMdKD7xvvdbT%oD z^o!?3TPovc#ZKy>wBGj-NZdIG^~b-sPH9fQh~J2}-*`Cbd9UQRvaRpOkB_J9Ify-K!8jQk zae3Etga282hPyVb{3rL|dwGI0wV5Oh@g}?sNSVDTFBr)>&m6pnFG4sKz-ZwnTz;7CJ9?pc_ zl#H+z4&l1WPgoqm)mjmMprSt^#M4%5!wi<5fJf9rbygW}H?m&xbdn(!f93IIfg+zb z`eMFK3I#LP<*N&(JH9T){rs7cID{$g={>RSXW@#e7Oi9p{8=~fsd@7HUb=;p>o)5R zw9aHs1@;7mj*kf$D*d`HBmR794}2znGPN*ZdhkQbva^c%BiVLo9^2juWYOOhA(u#T zsT=*9$=gzg?H4>f8@!^CX+Ev4b5nU*;Q{x?(m!cG?C1WbDF!AF01G`Zp_ z{=~TK@S;QXim1p6a#b|RlJ`W^y#A4%C~K+J*i6;Pj|WU#Q&R89M|+$)ac&+gEay@S z>&-jn-!1a$)HE4iTe(SItHUP2R$;2?VRT2{j6S8{gXZ~corB*!dURHwODyLhUGEuN zF;Dbr&)7Q^!nIz!O6%Fjhp;tpzFiA;$7VWmUG9zOb{7B-$ z^yH{)QffiE_z?0{1y-1AJ0GSS-0iif4Zop3qv32|Fd>55Q&piRH6ZU0?lf3(YvZYN ztxC@>=S?;fxN?pSX5>#2p4Qn#=Jb9rI;0l-{p7xxSGJ_OmBc+{;@TGc@wk`Kaq`I4 zZzn#$)~;~q`-8WOl5#dIy@V$i67KUwA4aS{9tfEB99OfEkD8yKDj!*&S)cqw<=J@W zfzz=2z^f$ukUDKwb1R_#W?ky@J%O24j0%OYU@iW=6`YRdIGktvAi=cx__`r>#DfP3wg_s!5fjy zic9($Ztkl5^|ihvtZ%u~54$*$RA|^M`HfGioAhDBGJbwljk3_=OO4X8QJ>up*6@vc zkRFw%F-Ewfv(D(QKl52k!V#O+cYS5_qub};WQ02|Sb58E;l3B7$1_=vCZj`pe0yJ9 zFzqEpN%-wiy=fj(Ks6qVaoumx^!8HAw%q}HmrXq_)21{Z6pz#u(rf~ z$Cyb9$#sltdZ?^|yn)vJSLEc#!lWFM&atiUwh9!z>v(chaprCt>GR+|LikDe=wneB z^xD^FiG_oDV2H=G$$PGl4JkzzcSXPKRK8j-6m@t>B;lEIkxVE5DU3dDVW)J)&kgUb z_kG#bnueGd*4GVLrC}|F4GNB?Rc=4xj&d;D>wF zaP7G>(PR6>#`3IBOodkaU^orTfBrYJ=aP>LYfQR#{((gi`0CQ?N}kS4uKZ;EuV0!me+O7GG; z(yM?}rT5;;-e2|xJRVQ^pL5@Pzu&#zyMftRE18*0CRtg@tXV633pRvDM$1`S@UF|zS(In4ex7(496mB3I{Q*%SxyG|bzc!DfsfIJ z!WP&C%wW&E^1b>@*u|s##`PRvo=pA3!a%6dyuXjpYt__RR$!o*IHuYrearug#E55~ z#IY%*$+ZdxL*}A~wx)1&eqw|d4m*LeQ)g*nFYV~9Fek_B%PM%6A{9$ldO#JQcT@C4#O<*dtzigR>?tHpP*?>ok~#Y1R}q zU5fq0w3g2qbEeli)x|yfO^ip#WK5z_j}*D@l*ax;cQ;~4#oC#@^Z0|69be9!ul}|G zO##r@(`LD4X2fsE?#Cow6zo-4ZXU7{kif@ozh7E0x-bdX7lkgNve5}?J~*#n_)6Po ze<|zrHHiSVx@GU$N8-D+)GL5VDVYb z@rl8<-gAdm*w)ua3*6L(6MLk@sl!QkeOd3jNm(Tjlbq90OB)Ul(fQ z_`vg8R+d&nO7R=;5m3VS6{JCrgC@1{)1{-&_}UveJVg&IK@+>i$E1va9%q{bl9P+; z7uzYTZ#V1E%+~r8$T{6YzzgF+N76mGl)9>OrBcEF)Wgk+1=V}L{B$w1!rv(qok-VG zFp)IHFd$P1Y?PHipbpWy=n*SFs*d;L9%iYNrw5f7?OH%hq|# zy8q->l;wSpa!nCBVqbkUbBlMBInXcrA~US3%i`U+87G0&~f!)uG1Q zZ3v5*1@8o;f2i7t;-kepCXKwS9|G|F<-OKejr(c5H@rVCjWC~2+c>8Zb5LYU#8}|e zmcUIS0r%81PX5>q8FCT>$L^%BIydEhd~0bTTSb5M%ry~uk@eQG>tmj&*;-y(lL`FA z1nPZj6ADFdZ5!NlSj*1zJ1E`S|7;HbwzM?G!>+(ud&^Q13u*-0%23tR`3>QBl>Xxz z^Q}|7He~)h?Fz~c*CI$f@R!r%m$W<=5WPyMh3o2H@VWD@W1V-l8F(&w^oAh?_LF&M zseAqM*yq0Ecd-<;##ZpP@(piVK1f0UXsG?HSViI>5`OM|^2fozZc8k~5_y)wH<#L_ z^jbxX9PgjJveKyB9CM`q(K*<^i`R56gg#6|!cpI5xK?e0BRZz_-Zb+Og~3@z6c-zx zygUK_cWz<|@!`%jwH~V{iueqza=|R-)aGlquANO*sgnBaZQ3NyHFD!%qq5?T>7@kfN8zlz<{||s9eJl#XoK&#$w?_Zxmtbk?uC8# zVxF69Uwx_p(xN2qdY*9^TF{}JB{wUCqwj%xoN6cMvPuW^`$D59D;;A#;BY67Oh@d(()T?!Qdmzut79XDOKSe!Zf-k1A6pu4o;e zM@__6qE}AWh2KrK!VMWtHLk<`G`Il;`!BDq+#2UQ?mdSve}?y<<dhwt2Ux%+v1 zb8UUXSrM1%bPqeLh>KNIzfZi0x7aGc_P!6>nIA{dvX~iU#q{B|I`j5*`DO5a$WIA( zD<+nGl56OAa_hVlc)gexKihb2OMrx;IIn+urjA5&>6U~9mh*sG!JFmtqN$F1}_#hk>!>Q%WKtMC@c_w-D&s#DC7symMfn>U_~r#9Np(KbIB&@G>s zdtS1ab9njXAQ3x5SU5Azojvh-oHXw(UhwWSd=+fC~5&&M%y*#Vo5xM;yE@?P?fG|~cB~>4H zRdvgNV5xcOUh31LD@4|bt|w6)#m|fI2+9P~4_==nOdOOi>5*lfbGASBNh;iB?U5sK zO3l2X}l9kCL>>tuo3Vtm6DvqRTDlmmL3cr7-e8(Jn_YL z_9MKritTn{#tqPuzjR9x>D=Hm&zV9 z`1IIB#!P;69Gtsd@E(>rKO9=$*2^;XNID4O>tvw>IL<%2_`PGlLxNz8g)d_d#hCY7 zOL>5QpDE(VM-qnS*IbDb3fbPKR8%<$emKxUFEpW)gpsN6J2y=?<@xzydeTRm!_twtCy=N!V2Ii^ul&G%)cyL?@oBVU=oom(?>6vfXCH`}8TDlHC$k zfs&7=3w&>D{AjCLcP{Rg^5qrhoM$@9mXu=Cb-_`h^i9DPmk(b~06|lqW$f<-v-G;s zzW+km@r~R+%4$;PndO(>1Y+)VmP%8CVgl!CN#$2+TFW9Xha=a`(k1DXa+hNZWpOv0 zbLJ?oJC`mDbryEV?<=DzwQ$WPF+c7#x1wu;;&8#haI0cpLa>;)8-qca6JSfMZY8*Bn&JT;qt<@4inK=-R!D3&hg1ZM4{9kCfz^&m@;4GS08x5jTzdtg-CLbYTr-E|btk zq#WONxI+;T6RxSue;*4rOY=*o=Noo%H;k*G91r;pDVc40_DkR5`xr>%yE@xv4$gz? zQl|L@(DbXj9_PsaGS4_=gW_x8$Bno0SHH#F(@=5ryVEIacWL`=Id8o4V#qqJ{zcx8 zY~NsGEWKjYo%I$!Xqc3ZAo zpNQ-(Wr)yimK(H-UucDMqFd&!@4`yY=Wc4eqW_#Vk)+aYx8xMuf6U7NoXL>*_$YHh zm$h}19TtFn@Zz~-J~yjkB*qWL@W~ zlS4prWU0gL{9?_z{mU=-ODxbBTRZ3wu_&N+M)py-1HZ}AOyk-dsgw6 z4U&312wJ55Xb0B2$)b&Gz4xvmnXKf?;n@nsqHx8? z;x4I}hO>%{?QkMpY*FeJ?9x099vYr{7SMOXh0Aw2J!3e`*sIogz7Z~QiiqGKas1`5 z^7^c^R)_nh(oGvV!%r3Yg`EN2PtFx^DZJvso<#Ds5(p4hZy=yzji~YtT%Pm?lSIp= za;j>#*5fu7$0yeGuBz2vX|$$HK@xtAA!B8OPO0o1cT?W^zEfv%pwl4c8G1?=uT_zL zaWtfAI2$~1X*4e+wdJ8!(ru^zc99|SUF4~%e9hw2BK*^jo`y@1+os`dyk8vcoCxH? z*2#|0oy9)!ED4CM`t!^#z*tx0&Annb5h-SJ_Vc^TXbpCZs>}C zXj&eKlwAcERuQdvFQ)Tu)kS?HQ6p<#^jB$LrgAz)2xnc+)x`-43}LzWvAhIzJm6xO z#L@7NuOE5qV3!5E)M%>@4W}QNVzxlPpTI^v{*_~>k3C|8RNC(S@~ZBdL$Vv68d0}% zU?YAFxxlb%*vOm|E(VpZ1#W&ZFol?C#GW};%)2kA5o?CfnI92xSesZF_c`m+RGi6+ z#WZ*XAAuc{!L}SXIaOCvwri-Y$Q*R9xmC3!vY!b^a(>6R<{)jwgIT+&QDg`g0 z+>tv9I5BD8$YDb$nV&oBTEVacpOFWJ9V2KIx{c>8F(v{oo|%AnS<;$a#7lq&*P_x$a^h*Fy~Cd))wqKH{Lr=N3qPDh)C`G@HJQflsuCL6|WUQWvCt~4mJcOAx5A)%otRM!SgUPP#$gyD&Luc&+pAa z%?Arm7i|S1JQ@ciC46uAE#1s)8bfc6jy7{GHq7#j|wfaxF#n2ex+1B`88 zY&M1h77%R5QNY#J6}Y*%foIR2f!EMQCL$sNL`6k`*w|Q*mX-!GGc&=bPoF?>q%$as zasd_5E}%5}38;*H3_iy_2K66ZL2a@xs896=Eh&#dN478c@+knc<%NLG{2=hPC=3MF z27>X*7oe{)2J}?Kfv(C#@U1Ea4Adrq;l?yD(wYZG+j1ckfG1F1Zz!V=geMay;5CT? zzG#?2ffu6?pv9aF#%?0XTieccd#%u43=j`!1C-ESeY9GYxCn^ zZE*&yFU^2&5Px_B1;!xEZbH~Xfw{Rku)H(}R#sNP`tm$jUtI#5Ys+A3V-?K9{N*hq z*x1;B=WAelYZI(*qW}_#L|=9PZ3Fyd;6IfO{dqxj_^0^4!`mU<`~6+kKRAJO)$jb3 zWhEqJl><}JT>b&kZzzyDKvq^pS{jaMFh~bf|2qb#N>zDT41-+`%GLiy02E4FUQr%$ zkU@(epPs2Kq5W?JKvk+JLi$}1f>Eec3F&_$04iNo1;YVd2N{19Dnvr!U()X~z=+`I z54BMFFBE{vxUZ_J3MIfOVW%DbVfi~9CgVPu0fqzQfl)=}PR?&_{AWiyI4D%cgZpR> zDk`dbDZj7@)NP+d*FTHZGwt-ozoa)tJ!NEMKr^t+!IZDNs|9pl!n7osfpq##NBCp;?@_jp z9xcJ;>RtLDb@)kyH#-9Sk-i3Xi4j%+&7d&suNmC`3wm4>ijfI2KvzMiI^YKbbR~Z7 zjq-m%kB=&2K{H@LGq6Ra2E5t}&mZjdMvNN&f_@*Wkc|z)0IkD|?kVujh7L9L^{9+j zXbE=J_!soJsCqUQR&)h0t%&Xi6cnT|5EGMI)`VlO2ecY@d(a>CheENjv9X|4aD1m5 z?9dZK2BgPo0x(K|3?BSN`B+gXK}e2K;qMs`Lk1Q(duj~$D|%CuBU%797IX!m1k~sn zkYOr7OiYH_Z3oqezv@5wD4#2s3b3J70G0SV28FM78RYyGJyakMWB?lhLk}5H?MeVE zKn&@1A3S)Vs<$IP*wNpKpTlE}0I&vo-RL(4q!@ZMgVfz|@K5MZd_;NiVA=q~V5bpw zbg)xCl;G`d@w?^!eh9!dN0oRuh@yjth>!pbmw)tv!mxm#ps@5k@;{}=!Xh-yMUQm# zB_$<=C545B2|FqvgYsiWz+BV4Ve^mu=Z7q~s01cPOix4)2D>^eM4|Hu(BFK*gukK3 zN5!(TGGQ*py+)uQ{TKAOs5n+OfjC!mFZjXWFX*wcvHtLnjf!JqOF^M-?sTJ_Dir^z z{69DUZ^x*FD;RoAGw$es3YGU~_5Y3L=cDL)9yUQAmz_&#rv`Q?^FO0Ur~NS)qdZ|p zM(YsMlVKxp)uS-?i+`klEZkgF!VSn^rzbNoFgc@82AE?089f&Md)SAPeBE4~om`*B zB%x4w`a4qoLweW|O`>Y{?zuJZ4e@p>`H$(*__(Shu{m-p- z;>3Su@b~opvG_mA|DQ>Ihw*FqzsvjwC;v&MD*%!m1i%Md zF%a)4hOrxS1aW|e84sb&m;^LFJ_wrNv$dwDRG`)GG)Q#5`NM{s25rbc+mW-Lih)l* z?8rAkzW0s|Io;zn$naJK1fn*Re(@CMq7Unqd?_Y$Bu@ByfNb01WNXoJsTx}Y@N z98^VGg6c>!P!?$m?ZxmF+*oKcj<*Ngtw?AqMnYRL5(s`l0^trM5QlKR6A5lWkmy1J z83?y~kkD3)1b4fUKox>g9}=iQcnCrD8xq=!kw9wz2@El|Vi*r2fjP7xn~oxZJxn(n zLqa<-5;#FX+lalry#f3%0|*QZ1fij!;Q71f7<=)D4<9i0;^gFHkeZqb^78UPZITyg zOZNorncko&%?Gq+`-7^aXW(=4Gf2aG_wuotuoKb}AWZ)g+t9Y=!alSuFi!s{s{2pfmC;AtcXpGAUq z5C?4!j)Uik5K?B4ARF3cN9#`O@oz%8L+xEi?RO>&Ci30h6tzA_Is zpzU{kZ3WE1^aW`9U4gdW%}un;7x~}b<_j)c#jT$kF=Ky5mVm0dLEcm z`Hv`SDqpF{$VkERr5pdbe=oe=-Ff=v8>B&Z2gP*9MA6p{*+l`8W88Q)h$ zWrskerskexT2ok66|VL=5{5T;CK8V)(Am-I+`0Fb>X8(U9?c>O6)X+O!6P_ zO=>tfPe6hbF)tx|T}?=!xkG?%?Z7|aTjWCg)2HF&GAb$fZ7>XPU-`jm?-cRs5BO%K z7dhE5B^=>*LC?!#nzRFGt^F;3m``9}0)v@}ArUSb{qOL15HMK3{rt@TC;j|} zuzR#e{4@Sf`uTy6!P`TIsXycYK-xLLMWFu>Xuup`sQw23H}ZeRe-D2T8x!OIb${ED z2V!CV(bzEMAIY;<5{&;AA0q*pJ*EuI?_c8Ysbo)>9qE4XKlYyjli*oqLFV&JOgq=t zpP@4xJGS$`n<;oqkjd@rU*rGE1M+7&yUTxv>c7b^oCB?qz-bVSixE4qGuBQF6EW$3 z5pTiOFgpJmTn)p0Y0&jS?8eXs2Xnp`!z|4Czm50ke~tIb*(>*dK)kb5#pn|=?c6&@ zuTvQy2tfF;PKDo){t;l^F>6&A2?_}U5fKrL4->rkVb-J;78aPb=&!y@Kd(dg{FUN= z@l}en6$Np2LYQ@Dl>N;gzDnXz;+S=2Gu-H{)#oH=e|_=CS~K(UZ~jWz?l*V+m2N

    i44f{QTnm2taz&leUNlOX@~(RefJ3CU&Mp`yeQrS%k0zO6NB~F?_XytoL)H&9?4x zljw;H3qg#l=t3^2qh-L|dnO^NKt>Al#l^(-5IC%V&NpBsBO_4~#~?r{IAKL@Kn6eP z{Z25Dk+Es*AwZ0aSAWV!c)-1g$jD^Ot*swfKhhHCL)Y}Dd@MisNR}EFK}-x+np6+P zAOhdd`3}qw;V>B)eBw^9Zy%KoL_jO?NBL5+=!d$H12HinM6eVSyQZ}xKYY##!x1MI z#?xpKFbD)NUmUIDAM{u_x`t>+3I&DpXbw+oY%E~*Px)v?JwAyp0s1`1U5RsMxBe_28(YHQv6->iV|{#x z{A>BYJY>Y)%ik>@QeZHCpzY=VD1UdYwR4XBD}VI!aCG=Fss24ZCJRjp5ilr!p#M?u z&H*;&e!HiCG~?fgoqXtO@+X0omY)77=84arWMY!`^3iSdUk`Ae1&0A=erU3y{{d?N zQ4D7Xy8vMPE9~W=@%~Ey3&jNVJcSAZ+NQoYPZ9We|Hhx@DL>oO(f-$P!wDd8O90%w zc@s!UNdah^0dR+yA3oP1h8HmY)@ZwVl*Mnp)j!Wy_Uz=bwt^VnYP4UqA+%pNyHkS} z?_=Q0OE%CEcm>+U#X!0X+OPWezSTMIH$b+h6v+3y0Sf$XgPdn-ApeC5NcB+%na?yq z&P(W19jFH?-e`c@52ib|?e-npHhPY7^DDG#L)f!x%R{@i@~$0Q1KP2*2a#}2vSY(G z9YMmm2()Fxd5EW{C-8ml0}7(tFt+NLm>5v>={?BE$N)JxIiNJr4^$-igZeaoP?Pcu zG-o~s9l5VSQx2S;z&T1wUKsdN5C%#=C4%naaL^C^mRm~`KzVU4=&j9w^OSt(Ph1F! znyWxgXDe`r_GcgHuj~iy(yvEW!D~2oc@ED5q1`$NLMY6C4nHf6cJs=H|TcP+#}g zbW2`tZZ7Ui4}Ok^>S( zM(_oZUH)j9R8E~iQ%DoS_3IuVG_QLy=4e*833k$V_&{dH>}O9>k+Ya0cGJ;3&;egm zSzcaQZ2xXLMjq^)texLo{up`wnErFh&-ni`{qWC$lJYPu-BD;C__qPIMGsJOB)@?( z*01-p-E(w08W8^o(0vmP==&Hc1O^Cu_c3_zTllm4n2;bqKMz(?QUcJ~83>pN0BA`B zR#sNP!NCE%)#t#xHxz7m3G?hX+KL-QKjOhW>y5YJ-F-iZAM>0y8Q!;290fsxGx3kL zb-IfX<{h9c4@r;)-}U+QLK76cHNxDB%HP3fu+i|jYl0KF4%f@*cXGrapx?(quao8B zyEn>keXP){0W+%prdjX%w;gB-Y?ZH4REHh9ligzHiCnsgKS>-g}S+W+_H ze>L#mMFYRPkKGoRl>JFCX~xqmVn3aWvoUjW%E1IY92}f|*GNS<*v>PaVw43qaQNh= zBfEZqgAMu_OJdG>X(^8i2=IuoF-l<0FCC*jOp3mfu-yhYaH)dNCwSsG{Q)BBn*fs! zSqPmVJ8;KE_fe4r z1XYmwln`1!=Tgejx)G^$U3S(#EGjoQKG!bVPJ3wG!B1=Xj+}y=|HkI@gxWGTDURU3 z`Ij+B3DI9GJ$+Pwf1m5;r^z85JnyoElOMEcweo) z%RFA^XZqvnG>O*Az2vus+{&oJQ^J)L0xtBVH7=`ME~|`|}WB?%S7M>si<9Jo%P@B;V|06Y>QXsqk|) zz7o^*f~zgAPID7RK+GGpVE5>+?$10F6V5ex_hkK=-eQNyb<#Sr#=!C}M`AidG|Mb6(iF*K^azwN4z|MtVcRKKwH zbA}m3F_{F$OTKy?1sbO59N*4V;v^~d_=Fd>&ED6~7lf2p^OfIa%pLoKQtKL3XG9G} z-V6#w+)t{++gK%=6+X3rQEzc z-*x`asg5*I-u>4g&r?LyK=2hC1|MCC|A~pug&r0Ax}3)&=yj9UThl@)`W(tVBJ3%2 z0^Qp_gMIIx9D^-E_7t|-O)5+m{4FthEE%D@rgiOI9_cv?Vjv^t)d$2Fa1I`|Aowfg z+-h#bCOvZ$dcCRpyo-*;8y+6^vv0Wa)ZN`s&r=v%OKW8iddeL-ckWzEcx_FM^xeCJ zz~g$P*hw;vszE9`IuWMBWu2Xh`|e)&1mzOCU+F^~#P7rh+lF1govAM53VCa^L|I#$ zY>DFiXsfEqN|U8A8Co7|QuwXivM^q|6w67>F0akH84M2REdj1T3|H8vKtv%4C=r1U~^G-R-ztG|4)k>6h@+~M%uY$IlM);EqB-%G)?a6Ah`i02PbC<)q``jgr=}P)nk5)8^(E=&`%jqGKOg4SOHt0LLZF%`X_`O<(FzSF?B3EE`efS=%y#%PdiCX_f=E_eo<0#*)bR z1E1(`hIhvw7NuN~#o6=_n(}>UF~60yZH=tozHBUmj~p+kZE9E4-(q>FuRs4K+3^rp zpY@3Yw3pSH?)to{v_J6O6K;WAy-ZNZwL)KoS{pyT^{uh{!oX(EAiiDf|hNadSbIq19ljQsGZpR(5%!z&Tz{_DP@o>?c_$kT9YptCPn}-HQRVD%z zlOI}qr!5e!8dzI^+uza^^*j+Sy<}y=rqe*%V?F3w$x*S78ZO{+W^yNe)=}FUtjK=N zZqjfuF;PuMzlioU)h#?zTc5Ssfk5}ofwLYmTb0e;Un-NsyPrB0*qzXre=>hnInRn& zK0)z5ldJ)}Sb})%vZhC<-UM3FRgi>tCLNApIIUH#X4z)N^s#*Q)Ij*bBHjU#dH&(? zrw^AjI8uu8`@HYMot7<6nzTxAX>nRAGr}&YV$m$pmEYWnGqbfVZxVI+UU~Qp883c0 zg=kt@y?BqJ!12O5J(mKO*0GBE;!8*e*247fr-IO9MOUW2ua=kR`*2*UoPqM(mE6wQ zO>;W=MCGV@RK2&I=>uz(W0E)8sxuN|Ht!rnImc|iiaG4(7)(6X=bJp3F*B~1nS$U> z%AGjJv+(%@+?%^8;Ot>I%6pi+k>@8iAE}cWId!=Ts(+D!4RQJSuvU&qGf~KuWL!Fl zOfeI`UU+RT9l@U;n#6zMnk7ym9s2TPcUp~?%^S<1gKmZqEWWA?iK89Gh4W43Imw#^ zv5B`ymhaxZoBHs}IfI@YnKx>;o?*SZ9Mixr7n~indU*q1*1vgxTJS?fxDwx|0<6i7 zP_LCrn!9x7%F*9?a9d3)ltOd1-vy@3>bCJMHH=z>d%JiVewAXLI&G@U;AI!y>FR&) zy?=0mYJu%-Do_D#h9vp181{)9#~ginEbKzeZQ=Qj!6ORHk39O@CGYaiTu9zrgq^+CgWjJ!84hcj7BoD51axvWa`!ttBPfXLyGBiS29i&J6a)#vV% z=__rGkDQ$ECK*pUh$2l=ur}SqDnGMCi9hc8u>yx$z_Ya}qHx>Nn#oW2+(T9`P(3{4 z{zhUXSnE#RTY3EZP018act#yDx;QU*k0}M3TYNu`yybO!D=v3vL$p$(v-gooQ79I# z*r{7yj)x<@2O^KQ3#>)X!1r>OI)zKE!lp=tIWjp0P*k^NR8M;-A9hO9o*xU_P&+2J z*?jLJflUs5(=tIzOIYFH*h2;WgYcUjN^eweQ50aMDBf2+E;Hd%LFQ$?Fr;(8GauEt zPkCaSS6kod;W=r(S;_L){&+H@Ex>E$H-ai|U20A@WM_{S2M&1kS)O^=-E=G>P5H z3w5(ayrBOKZc?>A<_{@hw=AB@W}U8Rign~u87WR>46{#EI40R@5k9alEM~m$&i2Yd z??tdq{o0W|2M4mlwa?^KDRKYh;}79f8~0 znQTG|2O?+2i!)g1zRC0gB3H`z6Yo8V_tPW=x%mhkkJa;2OAC;2uZC8Y;FH-2l`916IJ*MR^JoW4adbD?fkFLFHPdlE$Ube zSX(eDDbvId8h-Upu@dacINV|pj>3N-X$0v{IAUu%REf^_@*9;rLe9|~*CN{A@LbH~ zMwiw1A^XQtNv#eV{XQ26G}P|kUAh7%Vi^yPupykSkAJ_cv%=FmI*Lc%DN(^5qL4XD zHot0V$8nmA0_P-AEFALGPw%f{Z)rs0h4;j4hHT4I2R%H}hIa`)n_G%~GN~9)K@zq0 zIJZQUNjLdAg;UZ&r*OPWo-o&Et$?qOmYHM#k6vcW>Y7+~|>0G;5w+{hX&XB z7~T&b7#4RWFK7A^{>37^bFrAXj_-XCI{W4;S830F*$ke0uM0vnX<0|kcCB9Q4IGzj z!i!FJT7Y-nv1(4`u(Q+~kS;(X#Dyy8{t`zux>(%`J&yqK^X@#oXRNBuI>y0I8<`)0 z&K^yc;AP0hhV9bQQpCrPgzy_cy88Op#Kj4tB}2X7%k4#S9({3tDY-4 zFj}ad3Y1A4j5XY>p!?`?rF(_0to5#K)P}@C)D%%&<1&E}&q}9el9urMW=81K$;QLu z13%oYX<|Z}XEj~AGTq(W(J}gwh4mTMEuoS6V0SndrLPTSt=d{&y!L52BQA-6p6`+B zx8;#ic+Wf{W&CwgX3Hj5^_V)mIm_I=>m40^I>e&oMpk}dA)i54#{Nd0#arsh$Il>w zPPVnTYfN`#TCe8y`+iN=q0GICdpz%mecOQh?JXs>EyD$G|p9hN6Ms{PvuR?TDh@2=|uEx z(T5!+rHw@`&|FGYrWJVa>11+|>gKnGmXllKd~s%aDwC@7%I?lB{jM;M5F# z0yamazvA9$NN=gD19O*0w=Vdk&Ti_xCW`ocd2=c~)p6Tas%#sUe94IS$(ihQ)*wpv{7v3%7L6i*5)-Efuz zU&LLy9$`NpkIt;cviCRdE2hdT(|-xoSkBp@^7x2RP6=nclZ7>HQBMYbQGY(kiPZg_ zRt6*;Rh#|+Wh}Im^R=SlFV|kTniiJNPG#p4`)x#>DC9?6@Z`r?yUe!0L%MxL+U}Ax z$|(C_3D@P(Dk@F>x!VrSM~aINA>3w!RCC6Cf=zl`CVjL{lhGF0n6l0|Sy5iE9FR24 zy+@ziHSVV6VL4>tkk78n;;BaQz#1?5uoDB`;d3gw=dpytu`9EH1pT8U#P)&a$itdb zQbx>8uboATVVuCp+-vq=Fxd*+sU@ zwJ5pA7gMCaXU(42CZ9zda3b`e?iZ)RG9el5SuQYq0C2T?T`kwf^yoPQY!V*r zteI@pYr_;VCnp}f)z46gWp0`rjLI5nnP?W7!HYgpAfSApyjbYOSql~qzAyfFX#BCa z`*8>GB@Sg`neY;|OFo^H$;@)!(g*Tdi zJMadcG=q_<%?0iD#*U=fw^*7NgbE7Jiy;WZKFk%+E*t7q zI}-B~`xNLsj5typWBCTENnNJ!3b~adp1g`C8p89Mvh_{o=*9PD#!- zFWga%CK03xa_C+(R4*x;?)R41dd7F8PW{_xigE1Y#)<1#kkPkv9f!k28=sJyVPD-s z9j>*z8@wNWLlL!htoImkS?35r1Ng^nxrg#fLQ}&wdVt1 z^8qgB!~>X`M`o{byTMdEHm+{>hq}|t!Ib3?al~hGA9gtJR1T&O7W-D6 z=-xJvL7&!A`w6!$WI*a=e3_DG!GXJXY37d*6S-Yr3le4h6p7ZhD#D@ixxj+XaRMJh zPRn?NGqbb+-m^1@nG~JjaBhesglo|zvAVMjv3 z_TW7|QrfIp#Y?ZB2ljG5id%CbVvtHuOf3yUWruD*G(GL4bA+vyPnl&!gabP`Wom$n zI!JO$Rz4KYNwWtL$+cooLUS(5nXAU$Qju4>C(B zXtACNetb?nnj+@L)_^vSzIsw5rD-iT)k=8VIo@Q`_w-it*ES3|5EVMZwnCxpPdjUU zXa>PBXepC{%uN=m&qTg|FBELtJ96Hm%k+-8qvZDYQ}g1uQ}XW!g9KwwELWfAON~~K z-Ym~@BJ)fo$!SYQLb^AN&lc!}+*87Wsl_Ip5s}?JxsFy3 z-;E{X@ElakF?q+1T6RD@TOCY^*=+gnB%ZuTym(4DNA=j3J2sWRXxk!|W(FX`((woShUy?0g;A6xV~SnX4?*uT(3-9Wr==o!`i8sU%#mM-Wcf zx~W`tnx{SMc4oFt*7MTYP6lj;aSrJ=1Vg(%FRMUfP1`bnJzu@~c-5gGJq_~xQmyL=#jyCKBJ1=Ym`OWtQiV zd3V$pYEJFNXm6UpsmB+hswXc$301B-@u zZG#OjwZLcSudTaC77~eCQ(TZuYF=21AHXiZZ=Tg`7Ipdc0BhgmA+xCXIF(K8UwA^JxB zjGmhcp73_U6zSI!y*Z^f-fqSL@8OTxQdHtTCY5LNTb>OF=P3(&?tv}ph{LeluA$T! zXZU@@K3OmNSW*0~t(5L)%NJNrJoGk5Qf9DBraGTlZCJ?PrcuJFOY;lRA)kN5zBebJ zeZ!SbjY4{Qv*$_JUOMHE5OpHDMJu0ip74&?;O)X|opF{bE&1gKdx*cC2$3MbTWXPBBx;IG<*DKOD9KZ_(3XKO#JbXP~a? z`6}=}Gy()zWez5|o%xueQziArBz4na~Rm?okDt^m^&$brC9g%x(mcQ7hlw)CYCcrZ5im`v_)XDe7 z^J<7PsS?!lPLYVDNPK^xjyD8S672eV42XRPvkw+q^W3LQS|;?PI}dkeRxz4;bDOTj zy1^@mZj09P zNUZM99Omd<4Lfvit*$Fd_Zhv%m9O6i+qbuxM_rl&)p<4hy_??cFGo6% zXyH-|cnC*o<0tvN`dSe~<^)@feTDsa@C zmHu*1NR_65289?A_B^6Jb8*mEOL%s2-vQKQjvwR2=wr!)U4_U~8K9Sl;+&@Dha z*?0RZKI4VAZrE*CHj8MxlZi8jb$hYi%Oj|ljpw}k5>)nQ93L9&eqr8p`ruO+dYAYX zdxAE`>-5Wvn@rRm=j!Wqm$TO*Au2R41%a~q z@-_Chg#SDh+X54*19lJs{v3^3hZ`{R$q6d?v>|%=heZ)4lfdD+1whVP?I$%o46d z48nMLb)~v-$*$KzuH0H3wtDQZ!f!GWqL(v0ksdlQ%C0{5Zs?1N+ewcTu^qNs9x|^- zPCw+Iwo{2oz+<630qao6w-^=FI`Q&A=(2^{>3$S3-}|-UQ1T#U1<&qeCAWt*o#9m2 ze%qgIfwmw!ot)dn?8vB&jD(4KP11NvvmQSW{gf3(*l@Ib28Gm`5AU6-p(btA<@%&f zneh6|ELF7@OVSxC7nv>6mAG3r>;tF@l0;$g#}+s@gk2*0)8CKao?vo`o|r#zUG8mg zlck|vi<#$%JGa~kx6gEH-L0rd)vWSy5x|Q`Y$j7;FDRTWtw>Kz6U|)>t#Z-iXUSi? zLWxs+L9eEfEil!y{iI`HmVuthS%k=4(wdxQr7!fcwReJMuj4j}{d^;Du?s4ubKLR>`s#66OLFnwyb)~7#;7Hs~vN!8gmub zx?nSV_vIuv_7qi{3f#`%wU=X5?flo(5svOVZ?+%(ighP2ztEQXcSFIlL?`@SaZ zYVKmB+ZN@b{FbkF_%4UUDQR}KH>VAAW^~81{IVPZ`P}HnT9=b;`FdCocqwi~3=jHj zCz&CefU~haukJI2iJ=4+uk@awsXJ9W!hMy>p{3Od&t0Pm&)%zDBI2o~5P58T7{ex0 zlw2chMxWGP3j$IOyVV)a2Ao%c>~+D-u@v*es>h(8Rs?$gTqiui@^Sx_(DNPcHXL{% zre=8s=JStjLT06=d%Qxog^8BF4jeSQyO4EcqWR0cGX=SI)!v|h>ZApHqc_DccwQn= z(c(5akl8w%6`?la)J&Tb6sY8RH2`;BhoI{^?9+0IV=N=JNA(o(WXmkZ39 zw6PxVjMVhbsdnG~aw6%B5&qQh?e2ziF1b-gY8z^R!#RJhOJDmK^OSDdjSD9lKG;Xm zz11NztkpRC#U#8Nl|I}U9B1w1vUx-sA&{y$DLknV!QD)QOW?mewh=jz9u(cxpi(b3 zVcyH(d_#L?NYB{_uZHk$mI3=n(cp&E~ol`*1N=poJ(2wb+ zeKVg`7%SxUkMpI{$ZYi-a|F6!$3;-Rm5j+)NrR9i^H5P~&_Eiflu!{BN@?2vwa)G4N`;5_-uL%^+h;lV zoX**Mt+m%)d+oi~+Iwq5!=}tWn?3C=DMou|+ju)}3H4kAYj&&8_($muDHtRC=0+4DD7-q(>=tM(fkZDCDqc~=vX zU}d72AL4P~;|{3@#R=OhBM*B%^^tzEpk23}3UMcgEt**1P_Qm?MRL-y-f|z`-Mw=<*jdzN@Il82u@5xEi`dfC7_#`NmUCdmk(Yan)dFtUK5<4Z94c3ZartioY zqQ3s@j7+IT-Z3N7*VV`iFY2|(ThGFK5!Ip0rdI!EocJ6a?|G2viuKO~^fxVeYcNyy`Basr@o_^JC^1 z>Su)iF|*#+`c@Ro!hR^0+0bqL<$2+oJi?kag?W<&eLG+FlbrchcKb*^jm*~{hPhHX zg9q}gor9fud)#liNJutY z6X{`oQ&?*G#`eLo{rALpPw%%$cKN_fx$a7*D@V4~be?x!+%6m}whw0K3!M5y_RMYn z$BODwkC%yu$g&XI0}8cOWit#62Etr_k=Es#Zh9t~eKL+ecE27xyKist*mps;*&#*S zogAiQeNwy^6KK1#v?5mZNwjpQdf8*+Hw5=EU!#1qaQg_a*PRn*n(Wq~rX2~BJY=g~ zJ2a$dU%;D-CgUflKNTLSBY6M1M9}2K>)MZwE3&ItvG?Wtsfk_A4ylIq{H>QSj~=?L z&|%mZYK?3Db&(zg2yZv@t$%e+IqL!u|0pRL{jONCpxv|1&repHom9)_qkKZNY$v_4 zGqUS?R3=GnqQNMoQ|X~6Zmw<5n5sEX!y_yujBUGdbh@AK*<=Tw8R>m}*0odLu=9}h z#=}l}ZWEvT`wSl6@6I;s747n;P-VkxbSUZqY=gUd=+@F_LBU;uWLlqn|RR)p8Zz2 zQra=%wVJVBWpdkBQqx3>Zg!8N#RPrf8X6`75^6oQc2F!SJ zR#C}8LT_VSqSeIV1`<LfCDO(2D1B8y<1c~*OUQ?au%CXAK*5Iy!hQ~mjp_*wnW z&Y3={y7P4@=j-BI&L}Oatd{S7cihs$JNFKf+e!@(*S|N>vxBGtyKAS|EOEB{6{}J) zX8e@!$AUFX_x@KaA16J!`AFYYe%*bIC?@!M7?-bKm^91BwJwtXwZG)@+JH&k;;^RY z;L^!#MS<{kc$%rQ*Y;&XeQ<7AzJRxsfuy8Ru|nG%N&l$`$Qv z-$}e~*U8eZJr$@sY%%$oF4s-AzttO%Zy=Fg>|-^WRU)etBU)=1CaiuXr>0kR|J2%1 z)bjwj!Y$6C?9_ba@csQ#H79lOs-G*ZkaY90drv;y$fw!&U(V}Pyg+xVhhwjhcl(yD znv~5S=kIV;-D6oV#q28wov&|Pv@C7%^WhEM+j+n4w73%`MW<`>1*|3_{yuo z-6q|ST+=HnTj+}9g>=gk5f+9|x;G@KEx@I1JvVpb^Mb3=Gs@z{i}$C!UL09dz4-E79jq;V^DzrUQKezt$W6df@|b@^O! zH%R1FUDR>@x7k?;Ia6O{GGNFdb^reL^1|U534o2 zn)pB})UZcI-=vUdb;wq437zx~H>&r1GVOX))A_oaBy}n1mSByInfu%K^NMNeOHexKEyV0KM1p&%B{tr;I+hoo{`P@@9dpqCU}jZW4_0Eti#^Z#dVBkvl)LpZZldek+#f zz2bi9o-#=pGpL!=4GYHZ39E*k*)Aop&WWM;QRr>vUc;Kf&t$yaV;WeU*pedisQhC( zLM6`oSD$p^>$pi{ZTP%~(f;<=b}KFQFqPi(dj6@gAwsF@qcVHn)~s6Md^1Z=x7xz9 zyzBfA*V(oQ^WU7mcCbcR|4m@&!R|d2C}zBoa4EybySkLf>E=Is)cdvHZ8_(iCA~5p z9NGD2(zNO+>JK{F)OXshI_ltSA=WN=&zE)j4L%x_Or>blc=xRV%SBYj-ZNM)7tk&- z;n~D6#bN4a_2-BjhT|2J$K*zfQF+Hi3xq&w20S~K8F}Q&iPLfi;SeYx@jC0(!>abO zvkk5%jGP?UbLGT-T}%WE9YtW6DSJ&S(lOR6#s1zMrT!F?Z40XWQ0DAI46`xJq)g!% zmP$?s?8cw8)>G-{-Z89w#a5Lh=9;Xs;hU)Hz<8NWFzDFAUsP8_O)A#1TqR;zzD%iZ zPeC_o=U$~hQxfOr?eR?Uo0P!zJj1^1!8m&-vAvi=Y)-@t85dD@Xw+Em_W4VxiKScb zu^VdH`VoxveP_>KcJN7>+tkdn`{yNYD`z}9(f)q5w^F6!`8B3OmgDqIrK48}bOg^# zw)Jf)qq|GUgW*)h5FfH4zuKE2IVZi~S71SM+D@7mB_Rppsl@h8RChZwerY*#x*ha$et=g*g4 zd?1v+Aa==#rx|@GfG=d{sI#dVgEbg$- zmXZE}{Y2xe->o{u@;BG|L>h_f-<`5(3HqX?SSC;InBQ^9`R-!d`B|5HisuQql?kn^ zb$+)|>8#jH(Pf2uwlmv3`{aMRsQh615|6jR#tfNZ8Fwekjvx9!bDi{-MD32uYNOb! z`YD>)n4ykkvQgx9(`x0drE???Q{@{e9WT=~NB++3k9`=SSmabVc=X!jPfk|J7k4>z zir&$&sLnL`)A_MQJ6vXuTC&?ZIRXyeDQ?%{IJ1*;$tds9~r z$&X%Aocw|hTpraGiwvm6QAgyfg{asf!=Brb^yU7t)=WVLF&? zMy)V#lMuZ@_8%u=?sG2Aa(lXwj<0JvqKXcnz&JA{05$-Fl7{~wP32tv?f*mkixhw% zfGKs5k2y@wyE0C36$(FOQAc;w$sU@Q0mEt3Im0sKg+hnFt{jBO>`fBj>?9XCLR zQ!h9P&V?dyb`^nhu!vqRA*xw~z}aAAaysX?Av}Y#un6o~LuwkhU(weC@ISp9!@r(r z9s~jB0K~o==!WyXh*~xwaPAp_SWBXkNeG;WM$-;^7twq`UT|Rs{N1ydkdG(@oaD!o z^}qfnpsa>yzo;R^0JfNb^WA9rRiD7&62Jr4`+&e+O=K#767XRn$N-mi-s=kZ4$c(g zruqMR!W$6;gm0n3Uc88 zhD$0TccDi>SwOy2bJ{`W{{sC$fe2EO@)7jhGeTAXXagUX=5b_UVWTXdK7jqn==OlJ zFb(+N4*HLq;OxJqHc?o^dHO#>e<#E?1!Q;?$nMGlLUe!!C<|J799h8jpn>h7Q5LX0 zaCIY`l}O;6L;`0;60UCiU!WgIZV!O8O97Bnpx^if=s)0rKJY*nWudV>pe!tgHi5G6 zJ-U%gKV*yfBZ&UfvH&<>|E>!V0RUR-%k&WFUjucCJTL?vpe*P$$^y0rlm*m{I&g*k z_=pzpLK9#y$b<&84cNDj%!77;b^@F&*;4ud4`Tt~WG=$HYtV0J4U~t6KHLImH6i^L zAjhV_gVg{=jk1940c8Q(g8^KBQMwNKG;Xc>HTkd!H2GCvXlO_>Gc#$l;cQO=XQUE1 zOO^!KjVEx9Ejej5hQOJs1kMyCuxBE%0G(zAd_W#>WdYm6kLpJ3C(%~G{s8sDJdg{t zC1D>3ZaV!n<(wzKigwH=ARvG)56(X&aCR<%y*LP**-HY~jU%upCV}&ONlc&%O+W0_ zL=e^j56l~70rr?AaF*>~(v2fZ~B;dgW0%sQ!*rSBNURz($&*edLS@=u35$e6U-H3f4)>2>0&D0z96vQ z3JKXbnZP;Cz=Med&TMYt0h}ZJMg4Q-0I!yfvhY2+@q6vYMW8DiI1H$VOP}UE_*M1q z@9$5Sk{cULF0iKp50t*-!Fmo4VguMD6YM`;x_N(Nd-#@aT$cC!cH?Bw3&|B62EhMo zei!|4U;teRoDWT4KR9y1X$pb8cSs1d1C)bclmp-aoTW|PK~2DU)UEP>S2yy?!e7;m zaBeg=o%vn#!@16M8E{@WfwN&qnDf*o9-uCud4T#5;C)E}fpe={rJpMgze+d4+2Gui z^E>E=bKdFv;k;^cW$ScuY4bGTfilg5&_+4nzPRh4BsO>9zpQMJI4R zI#~;SCEZW9VK+9{jX0L#rr$w7#P!kHe=I8^*SF1VdoKz&H}3C;S&#y%myb{shcwt=7Z7y^585+BP^g3Vr;eVxHQcvNY=Cu9$Gqw+Y3+EOQ z*pHIj-Zh8j!L@BOKn^%O2uC?+;=$MbVj$W_G!Hm7GV;LN;xi9mzc=6khkh;}0yoX2 zdEgFm@GZM>Ewq)!l>EEs&&mSh3sU?E69Rj)lN;M-5}F5~4^a-VPiU)OL>{1xe9DHy z1D{4797j1Y9YKz)`78rm9z^=FNjBILykm%#?8XBevlP)g`n%}AcoEJKhLm~5otA-{ zJ7+cV0Q&?k4_fUPp)GL73EZ)gk0nPAj$=D8Rrrbr$1D^{U2P3QC3XcpzmnQZp;H2X-r=oiSeuGhjZvjRaF(Kt*#_72Q`5QbI2_o9(-@V$U9cT z@uKfqFp_@rkpdGm%u#P17+mM7)HYDz(HMw`vip2V?CDGmhCoIUF%+R^%zX^D1x)|&kPRrHk&z;)nlH`nk42%<G2X*AGS1B;?5=G9Aem(IpooeV+3soOndh1`HFU|tAAtv$CV-2 zHI*bLCerxhe|0rgr2IuXj2mu|r?G+LNyG_~as3cUzjl!B7jj}wlb4SoN!iQCq@kX( zsQ2#OJL2Nv(jx8ucKW$|fHPc4P*4y_PfsTwKY~-pHxlf3N|KV2$iagL3Ca;SpO&uw z=K605Uwj59Xc4p#TLK(cwDw&~&wrNwzuNb=gv&qi>}To!(SD8lKJx9KptpIM|IyEx z*Zwz+f120P@4Wxn`v0A{{T+G#NB@8Fk23II`)`{A+;;MJw8_7-3@%-5Q~&$sKmSfz zTPo{6`v22^|LMPP>;L->6!~9*!?To$S<(yo%jN1OEQMMt}4A`v0B&pOyb_$;W?x|BnOzap3SS5s`$`|}ikHfP38NmKN_@7ncA2|sk z7|E=!GWrJ|03ICx(hxU4@SoHI%((H^&ExJdu5LZVBW8VGqSE^ZQ2wGwz}@2m;BE== zf*3!KG1C|~&W)GGm~q@c0^`J|!|&OdocO@o9A8+dDI)$whJW)7l>aIaeAcw`KF5Az z%riIc8~1|1xW+kfErr%l1+-!;*Ic--=Q#Bl{LLsg6$iKr1CU)H=NP|@F}oPY&yBml z7=G?P28-c0#vmffdO#o6M+wjaiQSap-~0p0#yDw$zVoZVH=Y}FtCh!zy~el+b-waO20ZF1Y(@ zV2miX?V=j|n#5ri06PHI07(CiYJhzE1Ed0cmG*;vH(W{x686DGFQ}uzw2X7%~on|z}@n%E?(*CC07&UI3 z9?BEOvabLdwDQ_++gKMUQ(90*aTu}ANt(@RK)jbOU7Dq;sv7qr05J(KFeWAPs3{$b zi}8nai~;!2W!~Z7&-Izc7&B9FrQ^mAaQ9}Q+jd^dZJQf&jQxWWKt9wBB#^={`)R}< zVua#anx}2;nX0)_`l`EKtcQuZ~PNYgCmCqjE%>b=!A1SNn)r6i3gv?xDYpT z@0=TnJ+q6%1n(pd0z_`cO+V&X^|3CgL{=UAxv~MZxrwcJm7{Aj* zLt}h9M<-3<_~|$9Z@?R~gz-8@cw!fQ*G(mbg-^*Qkge9*_6?4Gn*X!-J3Bkm^%!?- z742V%{^m{bh!B&C@t7Q)g!?pn)~o1S+(ZK%d-r9$(fM6EBnH}OYi&E5(+7n8EdE+r zS~UI{mv(aE=`fazjv?a2S7Ti5XBs~1RorKyDTWZ@WiVC*W9N8dre0K3w%E2YcCb-@ zI<|@bw5i|a8=jM!L;HAQEEMhM3N&C$Bqv6kCmxbVC(%CMjj^B@`-L$-pK0L4fEJV# zH}xC5{q_N{2OE=oTlkMNANO6cU2Ctdh3pzg`bF19UtNyRdUG0@>s6$IyWa^nmX(g* zgE&@<+2h5Zt7mb~ha66vUJNhp_`7-kHEGEtf;4;&9Jp|RG=PtIe#|Kndq}&<@18>g z#3Qz#S8>l0Zrlwg)_@a-Nw;U9p*j9epp#GsL&DZ8`z`!ivw2#3Zfa^uqN1V*?y*q& zsS^ChD`=>AQ$XGo=a6?r2-&0@p)i}20bJOs#zO={yEAPis0VEiH|_%8a1(YUCab66d|p2|Bv$jNAmtV-u(~% ze^#FU(|MS)6CjK35@voGjHh0d$w#F~bect|w`-eLvN#0pq@?e`d$=J`Lf8+Jx z4hfRFr5nM&w>JLzC-7~nOr!(<+`;I3?lm90!SL^q-~~oeaEFdYoGbjK?|=1`n?Lu;Ef?^h%lj8! zaqNk!EzPg!rzH)b1kmKC)d_BXLxQrq0IUPJ2f$f@gYC27cQgPF^gI8CV(Ba)Z@Ib# z^6Db4g~GbIDojP;S}gkPnB@_25!Q3S-vu{08U8zPfa%YKEwEOJzANbSfqpBvCX8pW ztOS1*i$dQE^jW~QS@a!2e=1GD1^su>PoZ%y^-hTM&)@;yj{~45o8d}c0{uAm zk8Ae0{(`%+; zleS6DWtJ`ML^W-?U ziR-74$1Di0Ph+{ffc1fEjL3_YWOE_Z38bp;Eni(-oz#LK53V6z**cA$=jPxr3HGFC zlZ02V$nEm#uOJw3vjjZ2vbijewwCB`X}tiS%@3MS z%1R4J!U+Q!2i$)P*TfMAT(`kJ`?>8B*THe^689m-y%xFUBMuv&H!82A&!}tKSMYo2 zM;_pNi3xG!b#@#nO1nW`KDbKq<3q^PxN{`;-dWHOXGp{mQ+n+V*RgTk4%dI5S5(kz zjEPmSPFf5Lj?hJLX~*mLmd~rBa2@Ug?7xM+0k|fOdzN$CC9XH1pB1iu;vTHHH#PTL zEQ`17=H<7x?$rGGZ1vfs;&mR~CJJHipY&@7zG#=|8-nXjh{KPR-&*~*^t=MrvT%JK z=lwIT?rX7Kp5Htd=KkM)H~m~beb4pUwQJ;g!dY_nz!G{b4)=e;{o}dq63-EN^DK?* z+qdtxl#hA|*CL;SuR_I}XY?A#tH&|qO@1oeKPNe`Us>}tkDsakws?YT8N7S{wD#_| z%5SNjxzB#ZeEzq}Zw>EX_58o`+txq7iqEa(^KayTTk~B%^S3nj0p#H>>82R#OwZ9I z({t2U`u}Ij_?~Yu&KIGz@|*WZ|G(UWB{mtXP$?Q3;93WQf*d;B^hjgJ*jHy8mSM6vU)>dx9A? zAI1?l*2Z|Di7?K#f^py5S_0PnUmxefxBN*TNga;ga14oKdYo5yS5{5}VLW>bXEPv_ z`a5Zl>!VXu-OF2zB+X{4>)Z(snS8iSVop`uwa-D&+ERZF12~n}qIM zO3t~0jTpF%9C}mtMcrq>u>;@AAMMP0hjnNh6URL0Ka1l&9PglwjblC>XP}>K#GTMD z>K@K#PH&$7$eoIW7i^E)l4o&&v@MO}DjZMX_!j-`aV&x3N*qt2A82IA-ln?QhtfmH z=H~gMk3)0Ve_}6rdOw`xL>wiV*Y=YKVLM66`R(NXxozak1|_--94|$m-$O#*6LJ;j z&z`?T3F^>1|CVHk`wVSRJjdetcJSBTF_#`2;#>vFEshK0L);0T_tq%udoXWIT=~a* zczM&(@8XQxB;&F>trO_+C&&~%28TJJ)GJ;DeLmaDzd3K3-# zGVRCqj%+Lc=KR3>smedLPTf}it?}hYp8sFVAM7~x_t8y$*3&7e&E$n}6in z?|C=bNyLqt|L?q#axsdO3sEE=fX$%TP*~f5?|dJCexuM1!{s4q0InUT#1A)rA;EmN zI?Q#mVch}YhgO}S@6*Np75hE3s~|Qo@<;N3zB&^7X|M&#;au=Yumd8&Hbe8WDK)km zu707fr#8&A!M@BcuPhb&d$cLgZb5qj*LA>_NS)9~3x40Mokn7Rh5h>eAddq49s&Du zw6RtIJ!oG+94#A>Xz6>56T&%N?6*&N7!)4xv`KY8%6?>BRR00j70^xtTd=k7^P@cG zy~8>2K+8-}8+7{m)zp%$Q?zE&>}e`T}7698^=Qz_DT(6z70(1|>`#nuyv) zNeTZKriS#OC?>^%wu*N_aPABrB`w`}CrnZNlsF6(@o#akhA2RF0?mSV#sU<@SyV*L zRRiA(HRdTz4Vg;88=O3)si1)r)vhs5xP$N8H|8l#ZHG~(NMoMTlriW2I*B>caa z(x7zU|7p|$_%(}CqvpZ=Eckyq{Kj;PzYH807*H}FRmr!BpL?B5{}pk^zkZp7frkvp z&xW$1Oek~82y!!_Oeq7%*_<+@Ea3GQOnisc^lv1!k{&BBrux8hWq8MovZVCjeS5%0 z5AF=;Le$~jhBAh~n*&cY;A#l>cJPK3yde!GSx~m{w^i`O21>>EFpUNZ7)^Mnz`NFz zK8>H{7w_@rkKYZ28uSr1^@%gCQ)MWF4Aa2zh@3OnDSuHo3}Jg zqdDYdL30MnVliCddsX<>i2f3}Ug8! z_kFw?4&Sw11`FPp3OK3(ZU#W>aNr}>R$E`nQ)A)Zs7CBqz%49g9!TA+@AwX>;^u&L zJ{P`4r-w-(*9^de!ylA1E>!jkz>XV)P#Qpvmg#Ih_@8p12Zzzoky_QRFH^Fv)y3Ta1>c9|U z`ndGo2#@TU42HZItAk)WUDufm13rExLx5sw3$~XPWbiXw#xNQDKJ!?rte!ki#8~b4 z7?cnHNhX_O$v69!U)mu`Li9o6UBy98Cju{oR!QY`HMysA+HUP7J8glTabBuEF5P@s zE_|f`nm&9?29w!o)BciL$JlvGU(Y#W_eijAJm%SmDMJA8ao!~_!fGeTw}@Y`D^qKV ze0Nq?ybDrC+Kw8B3-87tUUswQ$a%zFpd94Yc1Yqxq*r&ecKD%GPV{L=0Egs_k}X-EL*ZK;>}Xf@u}S zS2o9WftTsHBrH#+H$xJEjq*XEzD>cljzD|5Po5n zAY7PW{Y-``l#t?AWQ}Hx^il9(xejmqSl`N&=UX|BMDYrg@|5B54lU0T1NlW+?YS86 z39~w4u3}gcKeQ7;))2h!%-@eCbqZuyz8ADgT2MP-hP1p4Q(%o$97eZEp7z7%>`d{s zJL+Ly=CqU*TxNW!=6O4b8)`0s%g5*hEb#8({<`nJb}HtTW+h7;S;e1B-1}RLbg`Im zI%I6;>OU_W4efn*cga#u>Rhtu+^|&n0AcMv9qI}kBs5in48&jAE3F*pX@2kCnAMy6 z3GbfrI`^^WWC^=j+y3k!xFSGtwM-Yk`Mox8y3BIn_k$L{tFgs*OsPO z4)nS;ko~Oqp^Sg(b*6)_-Tq|;cT0QP+??Y2XO6I{+dj9w!%o<#NEv4Y+1O=wT&A#V z@vafK9_z==IzBEY=Jg1XhwuFQRP4I__@d^n@lW{!9c01=gbcrD8FPEy=0U=>BDYSf z9TtApX^2&D5~m%zFf@Tv8Z1#1e!AH)VX)By?*?MiXrsvpv02vK<^&Dgh-JX~lY0*h zT(Yr^+E@>x+qj+eaO*}5O*iy0P46;YWk0{GXQDT}*{gCk*4D%H^@bTK4A(cXVogBg zr1(d%MzG|4=z&h93euKHwwe$UA(M&ImE$dW=d z`tyskdazs8eqZ*o(1|dp_2a|${z<8pd#q%QS?{-Hu#km#*wcYIK93IY1-s50=zTRy=ZH z+>>@|JJt2I4`**UYf@2v?6PPN*>_IM+D$yVte{6iS7#WZD0T??!(-^PunMiyjPu=( z4V9bKCtK#m-G=oC=HGR_;Ie&r`NZ(~zV;(zhi|x+Bi*j++LG11mZcQ?vowe9m^JxY zic@^VBpG9UjU%^AY|h3=OmNzlfA?nJEPh*-i@*y|Q}-Ly)Os0ZUyZyW?WJm-X{QcR zb>&r4BA})=@~DYfs`5Qp-GJv{YIFc?Y-OWtVJ59=vue1!Eb9+^F49#-!$9BG%0ODh z#K^=(&y>gVfDRv216UaHf3ODQ%Y0qY1mI-yg@GbH#n#5y!pg+Pp0-3rfh{r`%rF*f z6j&l4ai4Elw%>XTes~-os-k*^()w8yi9wDu^adbO-+UU20n{!+;PY|-|%wL5Cx+`eYrbj29Z&Pc5mmN^1t;| zRk&brrHQKafK{R45l?EyT9liPQyBU}Ouu~Lxd$K56s%Es@YuX?)tK6#W!`Ia-7NxM zogNxAAt01VF)Wh0`J7D%eHoN?s3Oz$Hsx39F9f!>X7m0LHS9=>v)oQVfD z(9R)~tJn;IQ!Bsf<>_WS5SuMm|M2lOS>F>Gj1~uM99kQ%oe;vT|p()qtoQ}aa1dY@8S=HJs~8!KU?v2yB^ zkoO$pN}6L_3Gy$JkfvBeKPz%3qX$=!!xjKvqG4%aYNBu7tkLqhfW;;vWmkUca^XIK z${Fu$to?O+U-9({xz0ZP?yBdbn*Og6^aWgmsq+W!_ZzE`KHtlj5t;u{xg^f7nl-5g(H_B*eDQ9sOIM>Tk>s3}fzB(pcee z+~iZk$l(>ecbSSzrFJ|UEElx3ebL*kgDS4ZrG+>j@*6W$@n!ZQje#M1dieG+O6?wV zJ^tu?+MaFMKS2fhCMZVMg`zqw() z`o5FiC)e8?+y0mb;q_*tu-U#$D$h zy4_qLFD9`^&NFEG5xdc64$Cb{>Tqd2-;3?1yWY1lbBOzBXMc5e%2r9q+10~m4A&Z6 zGQ20rwvF6)z*u#J?K)+d2W(1n+orBj<%?#&FY)Go7BpfaAKUS6dn zQE@81lPW7`RqCY$oyWx2En76`_KsWnc~kkpM3W2$L#zgHN!1krjB-TWygeU zWI9ync1)09d1iO3C{{f@A&hUgta{a9efE~H%09QRiB2Awkds;Ow_CfT<)#B&)fD=W zQy$v3mB&skiD$V8_5oeb*Qn=B0^3j7F19AZc+wcdjKIQ*W+L-XDN?jjN3#@QRKb!T zH4^o^{8*k_mLrdThmj_Z|y+ZmNOaI%t#dtWkrv7wxTX z5B-R_w1$PDjh!BJO4BWD%~x>-rCc@N)=MlG=GWs;CXPdyFb;(_cIu*6+!?_GDoeWd zU@NEjZ@w?$wz||QE3en>>6aC{OS%^7?48zb?3K*LhF9;cU&*|xJ$LJ!-pp6??2nmD znr{=OWhD6G#KzG(C6?vw3-uYR8JPTj>oEQIV>DlGH20fVFTB_+{NfphrHRj#!g`gt zJR4W~X-A)un~^G}60_58csT@b(+!T(3UZXql5JSLAb*O_SdEgBZCAW=8CFpOapMIX z`pkc;vb+bMKI_lj;@N)dj`!aE=85^O+4Y-8Jn8=+a{V9L_Zz0URGrk?rmJa_y-CR1 zYin-rtzCw?4T)5AJhduAr(cJ`N{h^TU6NYx_T}li>2pSod!j_NP3s~z9GK^Bd0>+I zh^%Hct@Lzsmuj)fU<7omHmuQzt`xrY$}5SAwr?3f39auy6k?OWhrlgnF>d?wrnDG&?xou>byjvnQ+zpD=UvtL5U(38TCQ z?HjOTeubUhl<@q%7SrPUh?(qWlS))oOk>~>Yv%ErEZC5p4P|N zi`A=XrnDWOyl9i12=lhAzC3p#@*QCW{drcmJ8LMMdWi?iwS-D!t=f*hRsf zcAFd{N(7hhQqmshFX=H*m!;@F>Bt9-o5Aa32FRNCGaDE9aQBIBy^ode7rV3eyj$)I z2T8|~V&bvKwyzZkP05Y2?tD(dZTXyvBvG;MZ!f;jy?gm%&Z!0cD&A~l_F?n)ZdkpG zZ(X;$tHVP}N_vOYzhbV-d*nOyj3;s2w)%YkdG{^irzAXncv!dJ?n~u~ z3q>C7`(S*Aq`#zB*qoEmA?p91px*U*FvruMf>3feJ8}`gj zo**CmIJP48l&T_2wv+nHhik<~zH%`O0Ki24X zNC=Ug*HtD<^7+eN?9)Qes5!I7`MNMgz%~&2EJ=d$E{tmE94fGxS^e%gKW3+|CLP-e z3dnZkWA+xHe3rAsKO@E`FVb`)#DIpxU5#ibATI_+n4&ybVe%tKDUMRq0M$x(*q-ISg|jT>HgcXC{}txivx6gD)&|O9=Cdt@3L!NHK!4lq|Qoc>kVE$Bn9c z{q2G}jWRIJ-03hfX;;^gjx(ypy_`Pm!>Z7%I5W%0`2&O>30=s!n7y>d_NEeLko#bf z`;cm*s^l1Pzv6t+Pji^7g2LByopoSk(RH7KkwsEz)te`d^SBVdOJ1!@j*+;DQuf{U zvV)gSh$>-^TX_29gg5)T@O{Wr9cSWj*l1z(){=qj(tX||9fK=)8 q6ORiFALTbh`}I!un?74cYo+ff>po=Z48!yT9fVlVgyt?E@c#g%Ky>@oIOq9&Fk#u|-@iTeG|w4F0Ei@D$Z?sK2}e3#@W?0Nt1IcLtCHfPSvw(mKO z_z*&T!J9XP?7(mO(^B|1?|%-!T&&uzVq{CfQ`L8HF{i3`NwvBBGn|eTr#ao#iHiRUN@gX^_PxO+*9+Lq7!hEsfgh$9XQs_JQO(A4BNB^aN!|q4_ z#*h4)JjMqU#=N5(%zYsho#bEo&tgble?r!5r!h%CHwh_FNdAD|CkdHbQT5rMkS?l^ z|FeGvxvkl5L?RrAbZo*&RYmMiNZ%l5lG$x0=P4^ZM6B9 z1|P!qp~hAe;n^S_ws^^gkIK&*{Ll|`5IL=Gl`!B?#`zQStUfxWCWLH&?K~*dl8{!Q zA6NqJfNHG>X$Kr&9ykeJ0aI&2>|hPJ07wKO^*}c;4(tGTK>0{QqCpN=3oe6V7&kru zW-tnT4sL*QQG~PyxnLu>0{q$%5)8V75nvOz3o3kwctJK;0ZxIxL2xu7iC_lU4<3Qw zc7!B@DPSA;5fu4|kTzfx*ax0~Ix#3iFbNz4&q1B`g!BUQz-3UZ1N?v+EC&|=-w|nm zUSK@f34R0RV^N-5(Cn~ zG_Vz10~`jjI^bh45qt$M0^hDUN1!tp2o{6$ph!1DS_3y&2`++{ph|Z_qCgf{0WN~- zJqQ^Fegbtr#yJ2pzzq=AlaN7RKj1L>Hv^eq3HSy)0#)LXKKKNz0T)2N-h?y;sbD@h z2KYXNGyzFq8rTbd2bB|WjzK0^0nUQgpk7~`Comc815ZG8GwL3g3J!rkL7haDF_;Dp zf=8f+1@#Ur0zZI?NjNSr4r~YaKv^s5As7qxf`_0&GRh4M04u>okUs@&7C68Xa2C7) z4N?h70rS8G;AbNw1lYkB;0~zVkC2XFB-je>f-3z9i37RdOK=kuNh72o=nE!+z2F51 zO-CAF3HSjNv_l7agRx*YcmirW2uT2QzzN`+f&77wtHn z96@K01D1g+ptK839yq~ja1)epBMb}!`$6GMLOOs^U>CR#st!aL7zvJp!dYlfU;_9a z6wStGFaqoae}aG25YZ#6hi~t+Kb@0w7s25-~*aXglXQ2FW)Kf4RtOwVC?+8Ky zK?0Zxc7Pjzz6HO5QsdD7f@ClS>;?}&)$wQxU?w;VN=?9c0|tSwzynZw zBGLg1z_;KLC_9Oe=D-e?fz#kQs5}{c3K#$ufurCL;6DXp3UGqO;28K51Wd(w25Ddh z*bZ(0-)SgI@G%$%jsR{tA@xBl$OenR0q_8npFv1dkO0PjE#LvDJrn%~miqHTg1;1GBQs?Ejmfx%!cxCV;P zL%#>CU=BD0eg|dd;~axTFac}>4?y(=sB2&t*a$9xe?YZ`$S+s`eg}bzaL&LmumYR_ zPe8@RD0`3zmV+~ZEP)<;490^k;5MkX6m=a818c!~z%N6c0tsL|*bL5tKR~(9aK1qw zFc{1OJHSt%^m5cW-~iLXHgF3RUjZLr2P?rfP--RWJQxaAgBzgqDvX&R11tpJf)}9v zYV=uP1Xu^Y2QR_9YtZk5ao}t4H>kT7eFB&Uz5&lct##0W(cnw)Gbr;pE}}phmi%6U?I2!s&7HrfnC67E9wTA2hM|h+fcS38*BxCfROFb zgZ1E75U>Mv4}1o`2l;m*&mbG@0DpquUGM?xz;#ezH|iP~0lom2K>j`GJHT*o7!=rx zz7Grs`@l=ka3A_Hum}7N8tq5l4K{+`K&=C4GhhX{4g3${+=6M~5O@SCevQ5W3s`iJ#c}!U?;c*@*T(c2s(iwUkA7nlb2fk&X?Im8DXUmptK5Kz|f`=fuCHh$~0(=9Cw!--Y7BC8I2fu*|t#MAl zY;YJn0u>|B&wvcD7MuY-kti!*1#`d=@C<~sK|KapU_Lkk_$bscIc16Ft8e&1}{L}kI?qP8gLyHiy`DA zFc5qWZh}(n(Px7k@HKb=f;!-Mz$9=8JO))dVtfIaU=_Fk3dG_#K~FFmYz7y=Yf!Bd z;srTiDL4m;bVm7uSl|Myz!7j46pcgQ0L&m4tOh5+b5OPm=6E0*tOiHH15mRo&Id>Z zlfe$~H>lGM`3IB0x8NZt-W}x$%wP`K4PJsyJuoJL3Lm2l0vFf?iuOcZ1q;CMpjt0{ z2GhYda03*G$2ba{U^X}m9)X&@(Pw}$U^}=C-s^*Y8GHiPfgeDD1k9^IBA5;ifCr#_ zU(^RM2&@IyKyfp!cR&u<0B(WOi8y{R2y6t`Kw%4x1B?ZGz#H&E68ykYa0w7A>LIX$ zwcrXUoQ!KX&>KtvN5Et7ZVK8H7z+-72cTjq>Khmic7wk_6&uD?@F_S6^7li#0_os0 z@ICPDk3IrqfJNXm_y^QZLq7+GfR*4!P$3=d2aE)V!3$8+jy4b6U^%!3iaSuxzzDDf z+y}KYP|txAECXl2bKpM!{$Lnb4NimSpu7{~KS%>p!5+Z5P#z!wOaaFLaidQLNnjbc z3z}rY53B^2LH>a#Z;%4kfajoY7TO`$0$zan*|38Z;07q0gLxY03#NiC;40t;Aw3Wa z9AFOE3+{sagHg{xG#CO_g5x0H5X_-KCRhxPf!E;up*UY)FZczN8HRiU2UrMBfWJV< zCnz_t3>*c&f&#-44*G%F;3RksDvv-t1;fE=a27lVrE_sSARbHvhruh*Y$VD7%ms(Q zLr`NBbYLPl4xR)5(U?ntQD7tZ2~;10`4JciHi2`1AB%KAJeUl2f$M;bLq7w$flt6H z@B=6`9_0XrfUm$y&~O6ICzuB=f}#^~{Q<^;9pDBiFbQ*5&<#uld%&-t&}5_!`hdw` z8~7O%nSyZ`^aYc_4)8N5ITh)HcrY5Q0pEeYK!s`OU%>#d2HXe!(@`%$Dwqy7gG->u z4CDvIf-JBYoCEL7M1KH=faTyQcm-O{LcCxTxCIK$h7Jq?tHFxC#nvK>G(h zz(}wjd5O@e`Z9_W)3&3SiZadBom=4Z>!aH#MU^>_X9)UVLQ9r<3a0`^)g>f0o z04Km-AYwPhL9hsX1D=4|d(iKLb>JQd-HUz;ECqK!`F-f0z$$PR`0ppAE0_;Xfp-od zUN8on0DcGY84Lm&!A+3=Yt(aK2A_copwJ=o8^8%xg1ex~Ve}(lI@kwZf$$@!CtwZu z4$ym^VW1C~40eG#pyIbk7Yqce!DUeJD9!^ggBjo;_#IR^hVlbuFa>-L&VYYF`QvCm zpda`YYyua6{|U4MFbb>%XTjef;3UR#kOpRgZQwpAe+u~l1Hl4t8*ryl-k>8G1ZIN6 z;0Y-G9r{<$4U7aEz%5Yh4C*!L0ak;Xp!oNgM}gVkBq)9s^AYd~SO>0xBIi(FK|GiU z_JHT0?s*&sSP0I6iWhMH!DrwC@V$t9fDEu290f0c|0RrnAQ!9#rvZ+L@WhAsl6=IE zEB8j?n&F$pJ4NK^7YX-1lp4{$f9C22)k zaB!;vn9Y{wKOFEIxBo6nYyOM6CJLy3_COt_n5>I-QJ|uzk zC1#RHEF=k&#AK2}Qi+Z9BmGGlNhfyVAQ@x;aS|7%LYZVB$-;f095RRuCPTJTjjwAPdPN zvKWg+OUW|w8CgzNkd8N6wJ%$ysuaoF^B^MRJK; zCO?oXH5AuvW zCx4O`T`iy z5EsmuxDYOs3*#Da4Y@{KV=kO)!ZqdI=bCZNxevG&TuZJM*P4sqBDpqP6xWvfkc;Np zaUXFpTzjqq*O80mI&q!3IIauVmFvcJ=X!7-b3M6UTs+sC>%%2*eK|9i$XU1~&dMco zDO@UNVGP!|V7MIQCaD%wP+z@UkH;ns)8_td3a=DS* zC~h=2h8xR`1DsDBmhFi<6<38usb6;>9xQ*NR6J>#Bpe{wIlzqr4-m)t+xzuYVCHTMRMpW}Jnhxg_4@qT=Mz5rj4FT@w-i||GH zVtjG_9liu#k}t)V=F9M9`Eq=Dz5-v7uf$j8tMFC%YP>&Roe$t^@HP2bd~N<+z7GE$ zUze}P*XINIAU>Ek@gaODAI3M}8}g0##(X&6gm22f&o|?n^B?dn_?CPtzBM1gNAhj> zD84QKAs@}R<3HkK`1X7Uz9S#Ycj7zqaeNoPE8mUp&iCLy=6mwJ_;|iI--l1&`|@T! zk+<+kyp>PpQ}|Tg#`oj<^J#oKZ|5C+20wsz@-E)ZXYvF2EIymh;Ro@9`62vJei;7= zKb#-I=kg=@QT%9r3_q41$B*YH@Duq-{A7L#Kb4=xPv>XwGx=HkY<>>^DL-zeli#O+ zPeGqTK81aX_!RXi=2P6~9iI|DC4EZyl=dm(Q`V=PPkEmTJ{5g3a@?s7dst9XS{jMX zY2{2wh&4N1Rw9Kr4pIlI{_c{Qk!GwCEm~R~;H4Ic5p=a@m@WMc z6H}W+aW}JJ-sNCMq)Sh8z>YPI?XxJZmUzDvfiq4 zNoeJYb31LC9LO#ntJ)>PVYiswOqLY~$)=XmV-!op*hOX6x`|ms6^gSBVvAErkb1K+ zbtIjwF0Y=FO)dAHj9^hqbtgp0k?O3tyq*!2MU2(uDQi`=rKeV9(Mr9PjK@P3$d1OR z&XvHNHu)o*BduxLlcurCF-KZ0*qqtMWie|izHkJLRd%7LF3RCd*ViSN&@d#MUfxZg zCr@16(C3N8rm9%FB30Sca^tojW=FE=<#Hh#CSp`KT?w778BYB{2%&QPMs?AZpsI&1 z!=^5U#^yvsW!f!no5P+EVa7n9%ACf+NYkulXOz=wjj_3y7OwJPBx>ijR(DjIIfdyl zJ${N+>mp^-IEU0r7HAyftZB(!odl!Wp@TKcSWFEXA+~QA78j&2sm0n}z;n1#FF?y) z=mfOstHTka{81MnV-SVr#58L{M5@)&pUEbaDhrinxH6$c5u$kuJABngrMEIJkye-6 znQ3u5n0l&;Qzc*=JDAg%u3F_Hm>6-a!-kxBOG37KT%yx698R`kO2;8tR8p5PQnN)Q zmPoW@@`!b3M-)nRLrNkp&w^B0J@Fz?RZa%Q&k7hvZv_b#O+g|=E-K?BWUD8BeLWM8 zSgy8dW|ynI74t|80WOPvRuN$+K>Qd4ED5bK!E-^8iXJV^Y_Ya+Ivv<&rOsSlIyo9~ z)X=+0;jE0UL_+kU&PiLW@VSkhj#2vfq;OVd5TB^?#21}ncR0Ns9AlN^j<#EzRywaV zr^&g~m5PDJz+KKvUhc9+cK^uk$g&H8ni-#1KCD@Gig7slXJ!beP+xRvqwGLy=UYy^ zULrepwx(d{(R2yI*;6c9sh6zDdeQ80%CknY`Ien9h+EC+ovr31ql__D)}_1CW_T>3 zi)2-~*eq^uZ3QkKtL)OFeN05E+1c5e%w}9yDZB}3MCrKf%NAx_k&aA^Et-a^H+!6- z)6FTZT%sFWIYckU?r}p&rsd_v*gbB#PD{$V)M<%575Z#d=cLY*p*=Q73C2K)p48Ao zGO5Jvt?7wuWl-XgOpKWJq=qqzoh-VjNSs~F6w>w6I*mn1bvm+h5;S8j&9}#(7HUtsM=76pxC*&3PF`&i<4uU5 zlUU|_APOl|mSE0gw%M7+KvSmIN}@p#X5{Fjav)F=;3A5iDV;_RXJxdVvzOySs*+f; zN-n6DhB3?GtjtTylGrfj?lyO-u6q^oBYAlQQd&Y4)*Y%CDoJQ{&?$sKNzmTvOksv; zAw@A%Euj~2an=E$y2u2nVwGGB>YGpp6*C@zQ}vrdnjPqKagqRigJEII;jGL{VM}7R zu(g+ZLekQep76I(3lQ6-lxWusx^$(>z7#Bp#CD()Nx`u>ZPLh@;0C6yg3saj_j-J+~eYs*0llmxnk5E`4Z1mgL? zEPkki#dy#zk%ee`GVZR4>%erqm+Dj&DZn<+YS-mg>t!esBS4E%+_kAOHocto8<7r6 zUS6_9a&}-?bvSirr-K|W%dno5hBZI$8KVWwDn!?g7E7knX=R3KT5d|XD2qk+%ybk~ zBL=Dj>=J?^5ta|cPr_r)U1XO=((d8YD*8*1Z zp^i*juz84#3N%kSlg~WsD2+xX@ZzY>w?Rc`BVoi!gyKpQ&J?>eCY^A#)yO3-GtolV zP7D%Pxhg786m)oWW@hNR3!GwMY!qyYyn_S#arKo!2v$U1PqX%n>L)YO(JJ#8;d2fq z#@R6r+#JIAs7sx-N||5+^_^y%)-Jlyj!-X_Le-LtG@HeyD>6|i**tRny$E_#RLl&+ z!c}`$yVGoQ(e+mCaca$of1o)np_OGorp;+Z=`gFdIvXqRl8S`~c0^J|CRrsHI&o6g z%GIZydN4+ngLL_6Bv-CXg*?&-#A-oX1!n8I`@VU}q!g)yE;TV_Mzg0FG(ycuR!ha9 zR1S&4h-n#01bB&9wn=hKnObMs(%hQMK;cN$HjkVZQ=Hq(-Zqx?9;3&>IOB+% z$v6Fs+aPp_L05Kan<`$&g=J#xsg>k{%_DD{=19~|qiNYfEt@=I+QcUyBx$tW z<`(NH+uc#I+9t_6Th)Que6v=?1@m{8ajWWV_1IXsmsTY?u&oM{D>`5D>Y}zvsl=HF zdef^+l2|GqdgL}?TB>jD1`;@DTM}Afbul&F>b6ZgHubsem*Y)+)Nt{SL-caCopr$sr9rBPO@e9S!r_TYyv0{EYn`x$oauUNx{OL6g$vgchKH?W9PLTgi0+ZN6>b%$3|`9F zKq0!e=@@00ni4L_>;r91hn?PaF_vrXlAC;`udVQ&dMyg+)lQpi+_f-1#r%ZgaW3 zjr6fr)+{-RW0(58Ym?P0MAyz%te<&JPGgl_FcMqs(gp!-eZ^R#w#qKv*TPU?4c5YF zXr|q5^HQ4_o0Ntq_tNP|4zg8riE}$LTDfxU7Th90kEy->MIHlXUmt;6kj!ff$ zx{KN-$+6GYI9kOZ3cK19=};?Npcp#n1+t@!?ivwyYk2Y0DHvCA7e-#LY6a_RbQ-$a zh4jP-8F?3{*^YfTUMA|2pGL$)AXf!VJ&`~2suQnSD8d{H+n1Cun1HZQR*d5 zIam@Y%hmd7>RAPZO_cYvIvtU=fi|z*lU^V=inn@%Ep%qgjx{}$)~a>U@48c_jzW}@ zUE_xHW3eV;2bI^?x{=k{i1Z>yrC;cA(US-E|9v?T-C9Avel8fdq9um;4X2zBwXme`!O5!ic?mWCO$x@D+BA&HKmt8dnXHg*>- zbr_w-q!OcC=(~r-br!+j(9uAqibPsHGW3*fkPCZ^#H~Ww1J>DMbHodrgjPvO;yhU$ zyUwPU>syG{Nm=Qa4H+4jf6~<`w>i-$HO8)_NcYp&GcybvWQ!tglWn!oHDIp?q!D;= zWEXIy+_SF23bCQZYq_uyXbXq6(sl4yvpdy}>l9{v(=bU^tsE52xhQA%l1Wjht!kI{ z<`kQyL#B2In#W5m&^dN7GtV1oyr`9N5iZaS&MYz~okP8x?pn#qMX)PwVh#-Sl0hRB zy9}@OM|5IDc|_o~D(IupRtHh>mV9W7NbMA39mqakBO0YO57AT9XbwPSdQ1NGO2eo+ zID`dOucttaMph|NpkH&Cy?0HF8BX*TCKmhfuh>cJcHwzZ7`S3P9O7Z}tBqZf7&y~r z6`7~6s4#HVY$DTTnA+h+=Mci)G1ctI6BwIAAFmNUYsUcAAPPHM2YS^qHc_6?O6a52 z$46t8gJqFR_XMV>lENh!EeOrtML{Nqdt`CA)ykX@StlAKVYHpzebD7i3YJ8gLKY$t z3s(3O$86O+&&q^Lv0(CHm~}baBQwrAbWGN@yYz%KrCoaB-wl0ZYlEEW%c~wdlMcUQw!iGXC)(O}>xKe%?v!T;}a1Zf4(?l&EZx(!rQ&a2X?LRVI~~nshaYN(F;Pn5S6l z;N{%YxY@HWgm^jsYMUxE`b#gGx^VrfTzM%WOpVZ1V446UP^F>{_j>3$ktzcDNbp zW0UtRvjUZ)<}r6U1=<)eA(1}{i*1H^mMoCsnG(8Dh25O13Kb>vAz|huz)c7f&Fu|i zkU~WXeaOck6**WC;Sn3-Yh~nzwFz?ES?gxAW(iGIyc?y-qJco?sGm`bQ7JJi*8!?< z)K{=FlSq+n}w&kf}mfK$*4`YfuwNwR#xP_~>NNcjN(S|7n)}of` za-m4&Ob7vVIYQoO#vZGIS&pANVYZAya=Fdy25K>{T7lZp;FKsydCrCsBsQPClhSCE z)FQCq&TVBLDUtFgTNEi>4nPU(3l|Roh!#ak2Ledxn*uVd7Ngj;3dI$*#yAnlzz8*$ z-BQk}l3LVKy7oy|E(~%HxnebP@p?8?j@q*V6TNL~oSI-!r$httN=0Q?yXlthJjXAZ z6tU(CL(+-Y7@iMavjCy?0MRkyc?N@yTdb9gS;>ZRgOi8c4w-m&fUsA>U`1MQjLi{O zgc4dMx*TcPt)(t(t;r)!VwU7(9YQ@4yP*W39*HYXKgW{eQf!J`_woWsDuydE+_6b# zADfhPl0gv)OV0*}D~79O4kx`0#O^?qB86D7DlXCXSo#1vIxmChRYskIVVTJe>Y|gv z)TygxbW+|7MA{T%T&cEX=4y!bmF!wKJjUd-Ww+17CfAHKW?IF%YjnD3-X4Lh(7JYH zt~}UOVbjWE9a-#JDeEDcwN9O_>3EhiDKAHlMCbgLlI<+owQktM@5ZgXJWh$C(7JYU zW?H@0Q>iYfG+Or_>^)JofT&UBfW1wIHJgU3WLOR`J`lm62(=e7Qqn@ON93(MwN+G8 z=k(1&BT!PvqdF@lMcl!ff(;u3jk-(4q=*eGtGbrPI$YSvYZ#kiQeyK~mo=5xQ#JKP z;IS#OO7+n|tEs3;{nJYolM-te2i>-7P*)^_N0?XTHLA77)m5yg9qGhHxFFMAeQHgy zIdX{p{;kF$N$GW(akL(bBo!}@jKyl3Bu|i^?N*hnkO##e3pFzlQ6x@8#J{C0K6Syf z2013}WI|L)Gxv^h39XW`Dvc*unAIgF95Ka7PtLkE`wv)yAdHHmcfXi?#U)6Af`Hyd z6c)(oqe;w#0%Fq`C5Mbm_lJ1hh$hl#yBsdba3C~J<;hHSDbuL6cEJr7mPu*YTOeP$ z$S=iVoxQ1qD3XNtVAyKW1td(8IjyRyoeREp%YFF zp897SyLe7$Lb9){VxrJLiYA?9>Zv@8rVEqfQdbsFilU#aVbT+0@^X}tk#S&G#6*R> zROS)V_p+(Zu0ggm3Xdy&7eRNc8Scr3CCJznH>06OECAV}mB#5iFUCQ#d)#bBwI7?= zX@eC#_0LYS29Hp)ZYaxWup+{q9^~EN)JO)kknTid2MjSskcuX?xT`%6xoq?}(8nKa z7OY*+XPk_(!wR&H7`pRzlm!Nk+8q>9ISCJ4*er0AR&J66Qy%dpbQDT(>yyly=tKHa1ida3MPW4nc`ib4>Z*aB^ zL`o`jI%D7>1T&&;?0bi#BBVNM@km{`C60ws_LjP=_83(Tn6m4hELR*9qsoEK#f|dp z5)6t^fBQm;Rk?d1eb%q}vj!zbl(a#*G*pqG2i4vjkRp>UDk=LeRYiwjkH}_8rEfYj zvzr2Ct;%ZTLSM;jkmJrCH$kDe(zlO#X#t8!CHB^Ib=`v$;I#>`c6ACu1J#d3a1bmW zspdYCR6x>gB>9tJXNX*R%3F6aBDOl|YD9RaH(m!~qtD(5ALv9%_wv}hWU)DVt5`1o zAsV&tEfFaz;i|&RGiAjA5j!0jSU1tXbB#5`=6K)up|MC(-F2uS6GI^p_s1mZRg57v z2k*|JwN$%BR~_sTY0s#vl1?c;X3{5l^ml+Y79mDSs(X>RM=P3GvF?3rYPtMQHdPoN z<59O-jYSo=JW*1eV?`|6Sh;S?kXkQq8&ble%sF#huqsw*ff4u5G_QGA>4jBsNuhVe%P4Ud&9LmH$R!2is#%Iur6w*$DgpWtNo!KY zOLt)z=0q^4gn49IpIf=(G^#POO%*qSyq_q=sCLlw!^#0lJ+bmxw~J3>p>YaxE?sZH zgbOly3zjV^>>3pA1VO8RXQC%i^hR|sXrast6R8W{r)I%ps@jC)U@F)0k*bO$32xL+nVXWEnSfw>AZGRsc1ZF=)i+4ORD z8@rf<$3fV^E(U4~M98aDB*Ndi1M`H+$%Ggj(CUs$fxe_D*1t*c%XI#+FBvk^qbHPi6ictRn;qBhP6eO|7k@TNlMyy%Pu4$|X(dHTs3#l45u z#AJ&o6;}%4+_)LXTp`kIGd7JJ4~1$oq{yjFl;fm}lT@wNV^D-rzSu^NTtKRrL@}=X zJjJQgYpkM+@Scl2oOE{44QCqbX9KmlmxCFRrtd(`C7IZ5h@Xv1147B5#Hd}&r{@DQ zAy^a%tB=MfPHkev2B%FHi)T&s)RlgS(HmoP)M1#MX&wVGuo}5U&{sXO(?h+dEMg-- z^-!N4wHr0*#M+e{jf1p~qYl+{KUx!;0zK#S!E-!X>MdJpiN-n0%nYUKq~fSemM6Gf zt_0mBxhPlJ7&+c_uX!o0N-r51ha@j&Q%FEEG7ia_#Y9#7f{78Q7@apEYHDGmcn7YS zKW3Jqid`jO99>@1pcY8!v%U1&5fVPcs|}d*#ah%--5WWo^@L~#A&mv`(r@_^ zF8g#+)*?y8MoG7JYG=|yOd7N7gqENk(?q#!Pzi+z4pSC1BeWY9EwWVGECiJ}7>jYo zYF2_(p>iB(3dZ@84T?}R0T<(vX5Zom!}60a!l_X#n+P-B6U-c*#)Kqkh_D+Sy90Gn z#h?+=M+)gZd1gRjqVgytS84gUm3D1S@M4UtgSO~tekHkd0>lvg7XV2yO9mxYoLY7f zP}T|Ik}TRqw;>>AU6FV!k`!}FTe6LPd9M(qVvvON)(o@FNl=NQl7xonQWOGXbEIjH z>TM7S;=WL|gLjc(1gPl33m`PF7&C}Pt@Iuh(`k8&g>K$6w&`aKdFs4HgCcdYZvi!q zM$&nU1~Ywj=aF$NqRcQ7wCpzQZajl1B$2lW{?oxAj=T;A=KpdqicHCi>g^!3Q_Q2T zcvE_h%BZgBVo}uLaG1hs@hu7lOM58TUjoDlA8p;gwB2@#`@_|%W)KN$xZxQ^b zgFzg59gI>5-kK9l#Wx(-rDO2el&oWRpn749Si6j>gt0D>Pcz{9 z%V6M>93;ES%_VHu5%0bj`Y{5vBi+E0ZqCTdm6fQS#nC#+Yn`MI(F$K*DN78TrOIiX zYsp*IsNKbmLyp*}a9ym#z&Wp@mYgMtfwP>cyponRYWEoWmdTL3l4cZY*Y>R=;_`A- z+0|~H%~?`L#IF&}D+(`Kb#z@L;u;vAF2SOeM$m8UF)So17p#m+m#C0NdF8OHN}zEJ z3w?{DBG5R7zr|0sGj7t`!h~;T&C}mNsE(*R9-E+T%(##gtC34y$;ytB#^X-kyqzRe zZ%mBw0Haa5I*rF&c)5hpWvf)jbQi8lxPF^})}%^B6w?c>xAbk&?gOn-9hLTenQoQHFBk}4?pXbx86R-uK#33uSQHg!1_e@B3 zof~}vJ9ClBrYpSWkZ!0m3YPO?(AkNlCwj{=Z6vh!_MTzEYUJ|vlO_%e(y7%(q3!U! z=Rl{_MkVyj-u*?hq0`%sLF)Cr90aUkp?RhZvq8#qJa}7`7vffA29Y$*GvUTY={8p4 z^IBJstVd;#YIvThh8v}dQS3h)tVg9wRXvd9kvt>wL?X_pG}fJ!#SO>03<=2Xl{6<$(LPMu$W1*{aSV{pf9u zpx9Kg>b~?$$+l=wN$~`=SOR&>rRhp3D`F$i?^0IMgQsLQa$&x7P47d$b6y?l{Yr!8 zPDy+2}a2lZ!sjt!l5h z5$|ORCs|bSdiMJo#;r1YoV*^T_8^7N^Z_;IevVv4RaRBpnTamlvmA{@2tx6zEyOoSGKYZsJ3=2UnW$J>3_<`5QD$_}x)+hFgQ%1diG#+<6yQ_Ve(8$Py(b<$znROOz0P`58 zk&y}0ULzP8Jz-vQLW3ERmpnj6EszT9V04zJ-7#-qLy)*XQFNlcC{r9dqs9Saqh@=j zHvtWI;(6HwaYtqXMqYJiXl&Mo;wp!Ji5;6ob*!>L<(NTVt&`voo+LDMWCSWlTq8Mh z5-h3AfZ@fi1iOW=-o-&Ov8rpBSPI5EeKdJzLWxB!LnQJ=2%Y=WURb!KVK=DdsZts9 zcJ)|QE|}hXO-r^xuDXOUXzqF|brD|mrWtM2g=;9#Iu5k5*F;|IG&s_rdMklc&?YU- zmf^Cwv{#u1HX0O#Z@{HjNqFLfsf&z(3h7sF8|hTxqD=iYbH)w^3hGKXYG+uJI;!rF zvcdFI7d-536sszn%GATK(YZ9R6GA%2MaC^$W@}vN^w)o$UB7iAuz~o&34yJw+nWE zLi*A$XA&;u@HalM*^bXv@pFO8gq&3DH3tnEl$4l)&*UZ{kA-lT(^AtELW3S7tb9Ql zmk<_8!~XBj|JxGq5zbW|LWbkCk(T&f9>06wH-4#pIMM>2G7Q3L9T;a2&Le!OL3lx5 zLUzE${&0kbA7umaNeoBzAUA&{q_)Z)eiwDf#}h#7MVow{&+=c*T4blE`Qv5_z4B@v z5E5hx@VDBro`IpPc>w0Qf#CuEF1)rO$()8}-#j44>I!J_LD53Z%=ljA^u)9re?(w+ zH4n&i+MBwtFFf7s3QV_IoDP>G*&S$cq&GFY(t`$u1o)?$?Y3l$lF|j8m>Qz;_iu(? zhd!a0?D&tdg#`$H@O07dXtcR=q|XR((&x6Z(t&R+#)~o2tSMHPVpN;yg?c7k5f;9X z#6OLGbxHF8GcMN#;yaj~0sfh`Ru=lT$ISzhY1bGKtVGi+*n1+)f|)Ee3s#OzaBqeZ z$-qXWL>rch|3l$1a$1a1CYqs##G{VF7c+YD<;u*+5WZ}=W1N3+%VZ1XflN-S*_Nvq_AYuQ1y}NVhC#(5*D7=#2nZ#sR?38PD~06 zw}vJKnnN2jFolLTOl}fp&O3$%=FsHOaBEm#!?46Afejio2nkFyH?agJHENR7z}&#x z$Ql-&cMKuPjT$$yG;S0aZnB01HV6%C64<0+Vq#!;SduBZQIaXi-1sdqgj-F?jm;sU zfr-h9VK@qFcp#3cVPJ#shS-7w0$a3L& zmd+YIHMAL;Sqi<7Zk2^Md&tqIy4@K~gM+2^6{NJUAml1Iu6=YcPIIGR>1zVzI0HUF z)w4DWW@419Pq0x242~PKMSOi0x&*m}HIqZ|ke1j3c&eY=Cx|z4P`%w)J8vFDz?(~;&1pgn@|kJ3*y3Nq3E0{k60iUDsZxsHfKYM*2y{7$k ze&R!(`wa7yf79`U{-B#DbZk)n6hJ@DAwD;85*x9T6vSpDX~c?{?If8vAifPJj+m7H z8jwW%O>zO@wrJB6iz7ok&=UC!j^;( zH&UfK`qPpWLA-K4BB6B=i;%wzM#sia^FiY!q&`MgkAF9WIT3>={xA|m8Us41X+#P` zOOMqp=D9I2K zDEt+IJopnfo&Q!=LGa5v4HFctk;jh6n-#|xgmR>3D=*Iw(ggoClyYZ6DbZ9qpw>nI z2S0jLat!pGw})>K%0fJ+9i{T2HI0_De2(cSvDVNslKf!IVOj@Ry|yN(>p>)ZIMirbH|1P;S^yz6h1SyrR$9+p$P-&<3E4!O7xUvo z#1xpo|NG(pwEMNuw4zcjbvPz2@h92ZjDRMf9v-!UI@ zRv%xU%STM{eue7!alTw`W1jO}+QAfKDyIr5ZYt=*k)^($@xzHJMC0r0U!~K}tp{Cl zzdn1k5#Mu5`4&G82%bN@+!HeBU_`?*>tD59np=9QDc9#A=)Tm4=Xm~|VKeXlGvu2N zAOH5z{H*hS|GrP-lyb`DLw-g~3@L0X=;zbb*RK@cvsFkLQz`nPK&c|#>Acu!_m41V zSVKyiO48u`r3y!8Iup%y%$3uu!qFkLP$|DIspc%VHKdBE5|tG$Ray-2kHF3>Y|;>? zo*~stRjApgR9VSPztS2P47lfNPw|gvWvW`PXh>*CXlRH@_~}`$DCR1mVW!Y949HD- zn);|R+ci#3u28AcSc}KkYFI7)5e_FNwZcpnkpzj!y{njMg8o<|6jO||ItSACoFHlc zK>xO(rd%#ST|hWtKDk_RoM5gHpUZLN%k^JHclqek$|Vb3u9Y)ApnF}%wH>t&N4WZb zy+0_n=Rc*t9yld}s}-?j*-ver{jz=VA@|9EOIv0U{zdx-`?qY5tl9rmLYw!$k31bw z(p4^ZqHRmP6Z5LBcUG$1en7P^L$3eR$;`*CTK7Dq$R#Z_)gl z8Q0qVH8|{cPN9DuXO3&N@XZmQPV?4XN?S71HrD#y$kAW-Eq(atvG+?~IWXdJwW97H zX9RqH{KY@+A@AOO(XP@bs}C&>+%Vy{Rd?6DTXv}V#oPfU_WTsP?4vuqU*0LUy8e=N zR{wLC=lpVX$jS~MM!u==Q)K=bg)gO!8s58Kc2b*DeWQkTIaq4Qk(?*T4i4Z^JGtc} zUYbU{5Kd*4V!ma4ODD{KZjV2C(mntD^`VbiT>U*}c+hoIs9yn8^nCg9bDVE&Q%zHV z{23!{S!s&uu(&dU+(Ol%lT)FNRVl@BZ+r`w{P2s%ETsibVU=pW;ig8W21`Sin#Kf4 z&K75y$~Rc7QR)g6(JBZUp*~lsI!neAq+6vU+ zkP2v(LPdRtMkv&mz)(|z@IawWs@jjwh!Mo6;DV_+k3RX>wC+*r)|WpQtg^dfu3zuQ z39C9UDLeVM$}tN-pnIVdSuFrd;3UXz>%J7GLbUXW>U*?{8@Lz1(kZrHZlY3Qb%5|LQg*wqa99 zIMaqho5*cA@qefdE-r0G0WYVk(dut89^~>3S zm1lPGgO+8@>}5Ulu$+5Ot1)%26^NNMW771%#aWTnQZKG?XI(AUD|BMFiD7$xupEtE z)bz-a-@*!?eX_jLvx)nD_^SKF_kZ+VJt$yv%?&}{W*phqVPx$B{}kT4w&T14x8AAa zTz5)r$GKd0lvJFl2(A1=v*U45P?mnGMVm$*O(y?vlS^(+Xy7R(tEsO184bLu)JEN| zK%tFixq@6$4=ptG#)_67Q_rI{+sr{4X)xZr5oj?7ri2DrtWHxinz?Ge4NYODkfp&( z1J&NNL&(D$UBQ2C<)Nz1E$SQF@?z~uSG^E(rL(16i$0C^6uoPzMzc}Fx4fzBaO2*O z9c3|ya3uTvEz|3gn8#BSO^vgck9s%1qx|L{Yh7DUU*Z=$7>T&+6B!~`v{>#@r`RMSt_of#c{(Xsmug4FxckENFO;js;(M`XF&;PRNm4XA_ z`L}Y;mf?ff+n&8zxUERpdQU#-Rj~PjUO$yRUTOrcB*KfXd2ed{TbrNtT+3}Nv#@?} zbfv2SyAQq2p4I8lm@jk3^?uxZOQ&TyVfBIr@4V(;u+)J2{VMeO?w6IO?)Aq-rcO%TRCYkbvbY;{3RQb~EB;KK zm@(>ZsxZ2#p{i~oIwqv7sWi$QQ;nkNjh%Fhj(?0hDJZ0#={*`=xKuzKUEH(!N7_`r@*woE?Wy?f|P>(Z{fzaDgBx8D)5-K+=gSFGIoV@!dcx;?kW z_}5I@v}OO5mrWdx)0&3Xzg^t&xXTyc|M~e({Ug8s!G1TX@jq*NE$QEPvSZb+YwNFR zwrUekILE2dOV=OYbZ5=E`MVn49+qNDe^4`L{)8c>$G<^2V%ebD zMf=}=?OfZx`{Bnwev^Fi-!J$7^~HyEreAYxUVip?(S>EoJhQyM(z14mmdn0BeCYh9 zMPH0=Gv4OY<%f~i&wSYO$KA_*ZeOis%_j$LPAM5xsX*|IhZU^m-KC$89=bLtaYnFh zDyfw<=#t#AC8MMgb)&q{Y-`bGEB8M>KFaL7Ima1JKXt< z+Z8ON<5qQ3$%7W3TId?n&$e{K%SpS-Pc88K1z)C{>QMMm#T6}ktt@97YdYQ_HR4RG z4Nt|%mA^Q-^7HLl#h;k!dpdHSD=T;8Sy@?ZHZmMoFw4<2TAy6Z*a}z6dc0!W-5L3w zw|(Mvt?XNI`?9$kb`78RWXGKIFKhgI+>$T10NFU}Wc4O-7dp*Nw6e=8 zrJN~qWY@6;8z&98^>FopiG82$k8fJ$r#_X>z1i|tk4%17ddZPtZw?oU|J3s4%M!^W zB3mA+ap2F&vmNgqcat%({mz~8t3H^!JT-cDD@%dye*05?zgBGh$91_%-_E;NFSDq* zhVP`#XM^?(?i4%Yvn8KpyJwGF{Kxh=A0OXP;_~7JJK7cb`j;k+>LmZVYT%W_Z$f_B z+2_t2|qA?420XwWKp!JC|sD?B8BpYwsJs*K(t^?|?xaCq6yB z{?MOSZ_a-il#$!IQSO-GM>Y)Q2R-Xs?06N^oU5gu{Sq^;*=C<9^D=<9u?e%`jaP^)pp`|nTv zpmFlW)pwt1s?7hcj+D+)8<|3JRbj&24%)wmG*Nvt4N>*)xYDH8@fbM@6!Gimw5B-h zAtg=k(183!3bv+O-S8D3cDV;HRHS08u_9{t>JR%DM-Wrs(cTRHM%;Ys}-escLng?&-mLd#Sgb2njnn}SWY zU+R{;&Et7ceLl4 zA@wfTd)=+`%~ngB#NEF?cKed+obzD5qwnV%RH@U0$lhgrET+0s%3obRa8bo6zhANM zZTD(q*p(XJAIN?${^aX6xi3EJIkstYMme4S^IC)M-7@@Y568T?cW1~XLXpIG3$fau*=6X>zr$H^M?j~2Y>l`Ntx&E zE57%vOW}jdZmu|D{-jljmEoV2oOr?1C8YTKH&!po*RakqTlJ}5)jkoQ-qrLtreyMw z+g-XiYtM+Uee%<}0e|iPa@WO6xykwap7{Iptb|Gj-yKl2^;&vu;ov+A{^>06f{`)ycy{>tr5 z`#5=+Ta00DK0C}|X8zV;j;{AqDdkIN`*cA@yo$d%sa?i_)gA9P`gg$S^=&?xVBUPD z6ElJs4l(KSn1zwfY)bf#Bc0Lw-^)lR45`>t8HRz?ZE8fbTg^Av6lkiq^u49;j;ZB! zFvdj#-D*$$(o8j|UrFD}ri#k=s~gfxu~g*m8*OT9D&XgrGNK69=}hnY6&4okMr>`& z@xK3)!y_&Ojtwt9Cw86Vx6R>~E8h(N^KpB};OtssoBEvJ5LY6r^zzG!;bui2uIm9bB2T-};ws@$bS^x+@aL&pTaYPT&uvQWC>E@2LIp zciY$P9JVf@_Ujolqci%B{~&)^Q~K9yuXk;??q+h0nKRlo8@Q#}hy8x-U4F#zhI4Dr zs5!pVvn+F~EjKGW+8nD?-0pKVp34ZE(|*B-xmOPOlT8no%-+)G?&OGO-9IRw-FkR> z=9;6an|C@2_v7!oV?Wcoqt;YQEASwRw23h5->dU;xXMCG5&v3_s_p$G%Tss zX_t}DWc31v2JUstol?qq!_NCJ*&E9O!ZZtiiA`(RbE;VdqLPcLdv}g zQ?Mr)-;e-be^=$@NmuuTrS2~K`g%UTVBy)%KmFif@Pq{$df%(~=xNIr>H!oBl)kw< zX?wcP+|*Z7>y4@rKKzfV8(&T@{m-9&_Y3S*wdm-wl`4&2SM7PfYjNBEYS1@+^6Lvb zUpCwuzP;@Ealc(Un`7NK^HEmmE&p80f2i3KpPuV$#*G*__f&;7qi@{%VZozR|0zD5 z2j*Wmtw)bzJsaP8`G>E&VC}|p!rx5D_hx*^yX8{~R9aa2V%14|uLqca>tCX7S^TD1sg}5DfS>TW7LAnmh}_I?T=-9ruII_ZfL{_~u5J zM)u~4hR++d&pq$cIg?t1)%oI5{bD)q|3>Nrm2!`nF}vZdPNoDfJ-Plvtoo%{~>rFL!=u>3^eaqdxB4<^IJcuCt2^ z#it)0F{?|F=T)0mZTCUlpLULTf7z{8{(Bxg9Mp0C!72k2MogI0^mz4%hus&P33^s? z_I)nqosTAdUnKa|i_AN@D|Y?fbC=(uSp{G8y|}+ee20g#sx)4Iqs8zl*)b*mT9(Tf z#@rykrzZJ@dV2yMJ1->|S6-BK-e zOhrmRN=x1T`c0jd6`n>7zuRbg)XPHdPZxh~>0fx>T>rm=)5}d5ex*%=+pW2BXXYjp zY&qb1qoI?t_HHln>&g7vUrwKXzC*s^vzLE-bXi!JzsC80QvI7{_wPpc@BAjY*vTvT z`uKJG`gh;Etv~7id+kLj`PSDRzH{sO^JKLD$-f3heq{PQVSnq+QvxD6pQts^#eY{d3;pW`S2$sfhdGKplB4-LDCu;m)N)@4wf01kvlRY5k%sG1S1#~6=g<)Y@v5X zGhVJxYg?`MSGxYJ-L#7at&#vj*cUgHs=@V+K?SrBaGCe}oI5i~K>L2)zh6I+d+*uL zbDs0;=S<}4Wv+ae%T>U?blT-=;VJ+5)ZhR9$DQYL4Lt4Hfv$fXvw3(+UU>8HD;jQ^ zz{Z>!?^xJN`J?goBhUd=MZJwKM^8_YL^4xm+4KvOzEiNi1Q+a;3|6}TV@=cFD z>1z1JlcV#NJ@pXjqw{|8)D`M^{gck~m+E`sP4x}Z*SF2ACg^hAaBpANtz$M`lP$B? zb-Jg2pMjd|>Y)J0qmmz5Tj+AR)oT-AaNhg4Tzyqi_tWJYrGT5*U+wDSs-vh=Df>A3 z+evBq<=L(!D_pJtSDoXUFC9GTb-9n_S#goeJ(q;p)vkw6=DXGFibq|pZEp>AU6JYg zn;sQ!Gj=u5Oz!NVuB!guRMJU1J36D0W?iLMQBQ^}a~CA(@t?=#syqA68>UC6Q)IyL zjEOP>d0xk}$A3Q1>1?N%Yt5gSMAJDgS5cA6HH&AD|0vgb_Uuf1GDqg>x`$`3XT?$^!N^~8EDK5I{*>sbL+$XsuKsJmQxqBZJS=Q@ETJy~0noL!M@JWn^T zEv?YaXla#htno}+UD?{XXVa$ccJ<`^(vr#kEB#Y+a}Ry^f|UnC=3d=AOh19@?=L9y zo33P^aP^(O*bv>^V!z3X>&bCGdeh>47(=-F?yA@@-TY}29h;Xm+GCv(RjNcsXCa9- ziS>=cC|DFbK{v0gwLMOeB30yhiUg{k-bQsT@e+SS#?~~2-O}mO2=|v}fdxPoJIShby-`e`GleyEL{anL^ft8`j(R{-Tk_e|~fwKKIjJBw!O+QM~uA|3OD zEt)l7rOIjceGtrSQEgDHpKdPD$auzH*q#UY(pusVDH(m(daP7N88WYNhs-%8A#R`4NjJW z)=xWGV6bHU)yZ=3`B5he)RnAhV=Omx!B=gl8EhSlZl237x`D%?8SGGE|MUfSwJ>9vNH8%E?g-w5v z-)xe7t3BH>Y)*eYou`{^AX(XJ5>A?oI@A?fap3B0^XiMhpA~!lx%}W-IDa_5J?vet-FM}OfbXVO-x!Ty_hlkl zVm?XEBKd^W=yX#tZS|%=GEiDFN!ka*uM5l=a&3CZ9+(*Yj4nzY<~Lp&*L+% z)AQT(WWL%9^PJWg>a=Tm;d|kQdNt4#v9*%HUqtts$S(%bTv-D{dEjYG?Xdyj;d-l;uTFGj1rY5W?>e z{Xi*1Nm2dPEQAjjn!ciRO-1LSJXM#k9mUKI|!wM=3U48ZakRK@05N|1YJZGLWUqWiK(TzxC+n$us`@m@ev3HahITmmR3eE?p*K ziz25ZD&?(JTRM>(;5~ZYg|2mlD`FQaDL&?meIld!Z)0zHKO-0{=*S2L9STLl*0rTI za8($N2ZmDy!>NGHWF&(uE`ou@&C`dv><>>9UgKcji89dtH|)!`XP?b@?dgB+<5HL_ z(@UhCA$|)AE1JhJie(seG7Ko{vC_X5{|_}4Vaw4pq>%Zgo*uHMCn$oZ5RQPhGT(1* zGd^-_@lBxS;*T_0_xL5e8z1Gx+{V0;JT38*vd{dABEjmmMg3Abt&ldsdXMklAj}yjUSbbg-Ueo{dF42n-GE>$S%fzf!y^E5G~A zopx!a1w{D4G>V*5lx(a>)*dCocYfl?@6t>izzdme5p!GEDqgs{!W9OdE7-j9-y%H; zIj!8KsH#i>8Vq*|o2`mQhs+)FT_ztj@&>YPv`<=-4{)L1Y!@@PUOAi(Habz(V8lRAz&tBu-*M?YoYVRqV32JOO!S!Hx@?>vZc1(Py^Ug)k0TV%7980hqa3BsCd8 zx1{#&wAG!d4E<(Euj@uznQm0OV%11B9@)!%bz@{+^jr}OzOP#O@pAPjt~&dCS9-`q z{_4hWBu&uSbIoe|xLtX!&Q=jmgnX}6`-irFBzlO#jU7=mrQ)u$r2b&1zT`uumH5L(Ii*9(R8z}YIo3W1w zc1R1U_aJQGK%E)UgF;*XK?2XE&-0Y^LzGN6-lKcFkgVXG50y4ay9i%5>)vgoZPV)m zr47b!L=dDxyYZVp$y?G`BH!9y*YR&dC?CDZY?hRyXhdtn$+1PD{B}Kw(vt40C)v}< zd5wDV$4yd(J*t$XX{bn*>CR;3j?PDV;-6?pYGXy1!UOGUr2Y~XqyD)H;L+AEZ0UJn z?XShx$hS2tDALEJ)_{<1?C!GP`jx}Rts%#g9X40nH9Y{Lz?SY?xt^U_78Kes&Lcu1 zkC0L4afOmTdP0~?xALlo&1pq?{V&yI&2jEf`DzhQz90(%)33*8tzLauiMI5Q?+REa zG=@y7>!A2jnK7?byh`7^`i_!7(dO0s(WYjV{(=3sTuLI&SdnvNOV>db`aN6WfQfq}uSdj~5t@*4GN?;X#`m=Lnf0Ce+Ia*$Pyo{5VD)N6h%&E;@jhrEgP>#q1 zdGQG0=vb);$2qzgJSS{M#s$nE8scOM2(FmH3*`lT3(~S6TL~kT4J_2;vC=2yYw;Qx zKH9I$2`zC}DYP_PT6E?uhJ-;)htLpxJ?Z_(NGxmR|cS_}to0 z2Zdxw`!CNfsb4MWT6+OnpTioo_(2-ejXIyJ@?#z}AnVAVGN3fOMzm@a#@V$Ya~vx> zz_vF_`SgqaWZ#H&SAp*RWd3{hxxZJ$NlV=K4hv`%jw}attg$*9LyO-mX%07K^Hqec zCC)?z0J`;1X}dHCN4f%?M(w&Ws=|B`91}J2o<=Q=mu{1C$+3(gUb<7g&#MR|>#^xH zx?S4R3#24Vuz)PtyI<~>Z$%E9NP-+zh0I%g85zQV?KGwAcQ`tW;$=fs3q2GrIQU4F zcDXx4h=2t5@vPxVBNc6PO)yR`qH?F?!}y0*_z`ovjiccr6p4oBCyes ziXCy7YTA8CN^8ao{PnMtn$lLInIFo3+vqyu?%R;opZqr>?bGo-Yf3TGEcxLw9(w+U z^lmi7IhUFJb$APVw5_X;?rp#OVk(BMtJ0TQ!yc6aX9ZMS@_IU1@;sTR|6r?(JvPv9 zwi+FUqY6O-HEh|aKHZ$fR#GB`;YbtHR!hweGas506ELW@+V0*$vi8FWO)22OT`0C9 zU=DRgZLD`xPPhO`--e^i6Y^B-vK zqa_MK2^Ju6EYDzkUGzI4Ytom}KteU3#dSJ2E&}aF^Aa+5rEZd^cb68g<0UncKQou5 zMz~ye6!mpoT-evOiGTC@^>zJ>e}_oFfq!R`wu9%PzI|Qy@b4Mk<-feVKKTRqub{AR zzX3(Z3>Z)}V8F5c2lOxKTU3<&Co5Lze^&Unna3;(4Eva9nPG!xuPEBMN-u9y>tl2k z-FX@%JXE>!B?U3yx?xWLOueo_cfBu|bCk^~oSf~!(5bkDzbGUU%HFV2sd9z}1kjUV z8wdQJCM}+)7|2+6DA~^(>+u`kb+y@jjE;WEzI;CJiJn#JJFrt9+Nv8JHt4SF`ARZ^ z+KIhYOl#qc;*Bgx)>s`&mO_vY{wh>t?RWMvOPg{yR&?69pwfL}dj2 zaFe-s35ER%e10#e@dsK>2}1;KJ?L+=)Fb5Ak=q$d*!)#1h0sfNbFs)V2(MxDrjk(k zng9ZRjc$H~>=$G^8D09Ep! zOsk5&U5i2iF{qO@Xpl7!)xtj&O1xTsSa1S(7bywQxcJ~K{3#hlKan~>3s&L3CShr? zivKK+WbtKJ3L`F@z{5VgRSG-G-&QFs%3pa8)5E%P%0Y!D4+F|sAi#JRd8gihp=$j}Zo&1v4bmKWyBUWrYw@j*P@uwv@)3sa0)4Ac**o~txx?9iKolB~6MfiuVhP$EGHpBn zVe`;)vQ_-mEz9X5c5O!2LaeW|uU12iUM|>HhZLhFmNS|N;>@ry_YWA|bZCTjZ4nGp?=LuZ)Ceu!Nk60LZzWGh0yu&)K`wQ*HLg3F=Q|{OU&wqNXBT@T{i-4q z$v-wTE~6_Q9enYpY8mbW1=tPdOX=6l7r&AAfrZ`w>FN6gO@vjb|Db5{tv&5Vir16s z!(5dcPu36T?2QjufUG2G(R*%x?B^qk!&q?HDK}+tOwBxL$gokw_^T%sqFQ>PJ?%AB z?O{o!&iQ8X^Am=;l117x#Vx$dOzH))!;2|=0hYNn4Xr4Mu4{aSo| z^wj%b$8>`jOj^?y#aeuZWTw|OpUlqf{C6;sj`nZ*;@D{4wSA5yWi4WO`8Hm3@2g0W z2&qNTMO&QkNAEsGf5mpu!iJOo7NN7=eSF4RVHS@%6|F!0od^#lNPvH3D|WIl_Oq`r z@AV2GKa!@Cx`%(Ph|Y@WtVq#1U)ixvPKBOq-X^QL&R11Lk|=QNnzn&9vUSPq5DZE- z?{pqEk7RR~^Pw=L*};%zMbVPYf*HwX+3!@^>y&%a`BHR7MC#5%YRwhx$jHmxyxV7v zDe=ERML=@12QM2~;rFi95+$Dt++VQ=5OW~7hm8nw0lp~4&kOb><4J3RsOdN*9UvE>xH47!TO-?NG^K) zRz%@s$dt!6dub;lRqQZYZLag@eyCy>gOBU%7Fp1&A-?_kx6Osj;=zNUj)|ps_a{${UCzH zLX4O3<)q>Krs`INg))2jF%GOzEyf-Xu+2&Cu&LPzLyGlg7a42^cRxQpA>~5LZC2o40sc1~TlK)j?#OY6cgskClj7Bj^cP zmwkp;emq0X*6;9q=5bPco!<`6XZ`Lu`D zMli76%4{I<%_~7xfnOsYa&z;6e(vZ5JMR!1BqLy2Dt~MdB3KY>x|s6`t58NT5daqp zO|t*>LkBb&K|;wOnGH5=wf)ooAmRMgv6&jv-E{Z5G5vTXs_7*zBjiaNq0;oaJVii7 z(>Y&yO!pBziIoO68Q)`%IWoUGETv)0%;wghF#nJ2*00m)WW2PQdEv3UYajBm<$OZr zlpQLB*AJ6Sm1B!qLwQVJLS)j>Yei&=zblf&5~m6C#W1hSXl?OsSI23tV>IPx*kXT4 zl2}kN-(N1TSX-;?GgPlCrbApf#0=b00>K1SSffD{>}T^!D>@&6UJCyOxn!yPV|OY7 z4j7~J5IFrfpzAQPu8*EBzDEymvQJRG6;C@6=7fYZN{kfC;xt%Ck9$}WnSkwB_UV4Z}H9v(x?TEP@9A^zNHHqd( zsg4t*)M5U1?pAtYPZFeJi0ZUw@&uZP!pTU-iYq{ha589%!kC=87p;4yw=H(8GM}1V z+A}VkKdr&akHPcBDdCJ-Tx3M0joqf?fvvVru(qD1ebv5ogh*N)ijaxX$DB|ye5xHyZo}#qGS-%*+mocwrni0mWdExfHexx}Tu?uQ_Ve&yz63r`D}2gOIzQVa}2`CDdI=S8*jT3HeAoRazPnd>?eb{SL4 z@9IRl+*20Np6R0sht1b#2E47&Ne+MG6-zGyPS~92X%P#A6aYAgFFoO6>D9dD!x zw0NyEPc80sUSh*Ajbq$qLCaE|2L+(4j=7D#T%F5}6w=F|X}L$C!w1BAmaB6+pMGuS zv5QlM^rFRoquNE?`-*BfC1ClW1?N{peXj{iCH}0>vtKgiZ0oY_-qFWZQ$oDW2H* z32ghL3@$nPsUu?wg~CSVxUWDT=$01$9fQ;HAk{ins(_~(m)EJFRVN(G5wFl95y@(j zek@kd#NPAC^287Si)>q=oA*FsZAYq|X^iftCF&W0f2By3*p5oH_*pU{Yf4$rnvk~R znF-d3!rLISgSeKu1;Ji2L4|Qo2~kV}zZk;WM34O|Gz%H0Pb$IKesz3qdW0?ZdzR(K ze>VPjq&s$90Efp2M9t1kog2FMqVjJ(fX3~M9nSjp1jZs-v7DEXsfZ23I4^-Garb}FhlS@@%JC2bM0XdN?@ zDYH53+e9ZZ%7GUykjoWm%vwOY!;rH2VwPv==3JN-QcpU1r*0Cx)l)UYD65*;YTrgD zGU4O(^d;b_!jm4{>69m~N80+ulAN^lYa}%x@}IHvS&8e1ezJ|3CHy%D!Td|I!0W%s zy7ZPu)w+Zv2y4I0U*slhNb}%xUG^lIqJl)!Z(z9Kqg{)yrlqjB%!xF3MacmPZ_WKx>Pw(rdfSn! zWv?w8?CMOZ_A@&GrD}sc;<_xBMKAKNP)No8@d-ZrXow~F*v%5C;G-;-?N$n`!m^A= z-uYRUPN}w`wNxCy+JOajox)VnhN2T#IeX`Q1k8dAEGcwL+CuF(UpMCAU0b5Q%^_uV zmB4PJJz%bs&0zQ6j_Oyu?wy~0GcNg{Psl&u5@hO-E$UYWiAJ%NP`WqER$|L~WE+Vb znd|84?v6kYvCw4%YfQMEsl9z|&h;3&f;6*6B+(GoTT_`jf;qZ0^{ z{m$P5$*j3~%B2R^{Yb<`6nEW77ivq>p8*erU0{}x&RggXTbF=}MA42fvM>3qVq{7+ z0>`%6UC$nYV{c1+=EZmvj{U4jz8_Pfbr#peq2Fu0P`~U`AI&0y7JpJTg8V5vUhSG} z+ywz9n6}!Vbu&l%?UR@&tLk1SA|G=m;F!|atnTc}mVezIIDj1VILe)bh*1H3ZP1f7 zke^j38cJ1_3fb}W)-_m~4fbO*z<~@Qd_?*&G5wf-=uod4(`da4w?+tV)lPPB%iOEQ z2Qmwki{@&cu~$->ObS%e;$wKTKe&(iGN?0j^OOgtLdRZ_1kq?-vfn_zChMFm4SQh} zS?R)Z4xr#4D3ymp411FnN6mI->L zKrX1gHwQ-n#G@U~klm^gk&`^vq(plYsYC(($i4|YD2|;2*Q&m>CQ= zm_jJ*(-ahQoywkTUm-B;O2=OBPc&9fSvE5%Aw+u}l|ARm^FZ47399)$5(ZO|u5r`G zS5d#}uu}F%MFcuFl6_u=4dg!*R--`q-I$9Bt8%Og3gu*UG5ChS;oV-mqOqjgw-`3B zLJ$Eb4?Qnuw)`vkO?6(Qq>Z514~xM5orpdASg-YLKW0isu{B^S$zLZ@*0c6)sws0bb^kdi)AEz;s|Nfi+_VZVuiYAoYD%8Q-AVomQH0tibqm0IeTRq4#x z0Foi8f&r&F^{TR^QTiqMZ%%2SZr-Bn=A0TTpb*c|`Bx*7e&X{_fo0-jEzw6B5TpI^ zs->}A-Jl&tidon%d?93PVG&Ao;TPitpvBAjiaF!8^pO8mFG`}z5wRY|JScUY^cEii zQl#9{r8$Wd*xjj;5>zQFC@s5(Q$FXqpGyZ!KU8bI=kIy)Lqf{ zfb@)gkk@K|k%;1jt_d>iMi}tyI^Ar5UDVaGT6J~ur-7`o9wFk#9`F%DkhqUgiBWZ< zJxW2*@zhGH^3)Cwi<=69v(?^nK_6FYjv9DKCK~;5s!&bI@z1_`lpJ=*{&P-%&=Qxc zvc>mYRY`yLOM!e>Ms~7>{Ist`Ng*F>wf`O#x~~S2xJ=bJrEChE=9b0mT8GojW}Lue zC`{-q8nbJE}9&C*xxc^0E+@~_)zfw&lYSpGim|dj4YuuOt5<3=F zVsJe-pKLv z#Obf*ell_8eo!LXDe{>v4CO0iA0v+=s74QB#RTHOq^ar7q{2eHu24htp|D zI!os9sDpd*Xb2@ykwZy;E&uBH*RXn1ZVj=$DZ7Gjo~hDqy0Em50@5k+5U*rz|FaZL zU$7MQuR2RnCR!aL77MY_zGs*ar*LVNNY=2GGieNmw-O_bjcGJGMFV@vvA5&|@hBX5 zLJ2L|C;mv9>0+gc;8NpJlNPBqJK>xrt_XeSXFc1UTd|@746wJw7-B}of0;lYq2leF z`jaYR>5%bJazp=nIREx({ zMO2Ti_Ik7+@O*xVBcG<@_XrtlFmAVsiMLsHk~d!3#B=@&%6>foFojKL6k#^4rrH2Vvzv$uQjH}EE%kJLcSqGokWx>yGBE&hq{n98W02N}0 zOeeg#dwcYTTur!sB8&R^iU|+{9A@d@{e*zn1npUOyX0o_hBi>c>5!H_qAL#e71&JvRGPYM?hplEq-d6jBOkS1aY33LTd19Y^50DdU zdqe4Y{^|)O3m4(3sQfrgXpT>OoDp-8r$xpV$^Qy(cE4Dq-&j<_&ROKq5*;+BawXq_ZV}j0Qvr37h{aeVFe2=`|ta#WK~I>LKX8v1I;Zj+M^*Q|WRw+IiAY+y3Lce5ER<;`Qy_(;T_$CRfE@H$o;@y|Q!@!pa4t!{cNY8YWPt(cV_QEqtg zzn>sL`wBOQ1FvXp<*w>!C2&BAe6Qc=_}#ZCzx$61#Tn8n)b;!3>ijn!QC@de6|eiW zlKGp7?Ef#+5<4Nl=yhz#bN7C*5mBV zc34FL_>mCwXK|b{un7c@up{sw6otKC&3{>8{%aHy)`k5-h|m^0cA_eLdJeN|a^@Du zY|qF&My<{@3;rsaB%%tc$K}x4i4Ar;4e9mUh;SYS;UNvqih-f6qfpQHyT#e(Yi=ws z(vxBZI6l!)HrmsvlIu5P=Af5-5?9g7&(ES4HU=(qRUQbKUz=|shQh^tb%>>K??06` zfhghZPRC2zNU$9Q9eFh=*1C_ixERl>&%c!>w8S#r;jFb0v2Sg*?dg5sI>NINBkmT1 z`nVEIXVc4vLaROqo1J0nZhV>-(3uC4TW8-$)TL0fXCM+p<%GdA*nm-Cd_h3hwtw+fOW>܍}bgI;ZmDG-`ZwoED$J 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®)TJsEf-}sEaM=JB(?@Q#n0&1_! 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 z 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

    IBn=xZJj$gZvk_mr=hw*s8{snT=fn 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⁣C%uFvuE&x63krx>+_TZBF3RSo0m$Cp0&F1aHeW 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�ANp#}JX_(Hu&%j>9UdS% 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