From c1c35bfc323ad2982c32d88a503c4c3a6f69558c Mon Sep 17 00:00:00 2001 From: Karl Date: Mon, 25 Oct 2021 20:04:55 +0100 Subject: [PATCH] init --- __pycache__/app.cpython-37.pyc | Bin 0 -> 330 bytes __pycache__/server.cpython-37.pyc | Bin 0 -> 1127 bytes app.py | 18 + server.py | 38 + venv/bin/activate | 76 + venv/bin/activate.csh | 37 + venv/bin/activate.fish | 75 + venv/bin/browse | 10 + venv/bin/easy_install | 10 + venv/bin/easy_install-3.7 | 10 + venv/bin/flask | 10 + venv/bin/pip | 10 + venv/bin/pip3 | 10 + venv/bin/pip3.7 | 10 + venv/bin/pyserial-miniterm | 10 + venv/bin/pyserial-ports | 10 + venv/bin/python | 1 + venv/bin/python3 | 1 + .../Flask-2.0.2.dist-info/INSTALLER | 1 + .../Flask-2.0.2.dist-info/LICENSE.rst | 28 + .../Flask-2.0.2.dist-info/METADATA | 125 + .../Flask-2.0.2.dist-info/RECORD | 51 + .../site-packages/Flask-2.0.2.dist-info/WHEEL | 5 + .../Flask-2.0.2.dist-info/entry_points.txt | 3 + .../Flask-2.0.2.dist-info/top_level.txt | 1 + .../Jinja2-3.0.2.dist-info/INSTALLER | 1 + .../Jinja2-3.0.2.dist-info/LICENSE.rst | 28 + .../Jinja2-3.0.2.dist-info/METADATA | 113 + .../Jinja2-3.0.2.dist-info/RECORD | 58 + .../Jinja2-3.0.2.dist-info/WHEEL | 5 + .../Jinja2-3.0.2.dist-info/entry_points.txt | 3 + .../Jinja2-3.0.2.dist-info/top_level.txt | 1 + .../MarkupSafe-2.0.1.dist-info/INSTALLER | 1 + .../MarkupSafe-2.0.1.dist-info/LICENSE.rst | 28 + .../MarkupSafe-2.0.1.dist-info/METADATA | 100 + .../MarkupSafe-2.0.1.dist-info/RECORD | 14 + .../MarkupSafe-2.0.1.dist-info/WHEEL | 5 + .../MarkupSafe-2.0.1.dist-info/top_level.txt | 1 + .../Werkzeug-2.0.2.dist-info/INSTALLER | 1 + .../Werkzeug-2.0.2.dist-info/LICENSE.rst | 28 + .../Werkzeug-2.0.2.dist-info/METADATA | 129 + .../Werkzeug-2.0.2.dist-info/RECORD | 111 + .../Werkzeug-2.0.2.dist-info/WHEEL | 5 + .../Werkzeug-2.0.2.dist-info/top_level.txt | 1 + .../__pycache__/easy_install.cpython-37.pyc | Bin 0 -> 281 bytes .../typing_extensions.cpython-37.pyc | Bin 0 -> 95711 bytes .../__pycache__/zipp.cpython-37.pyc | Bin 0 -> 10047 bytes .../click-8.0.3.dist-info/INSTALLER | 1 + .../click-8.0.3.dist-info/LICENSE.rst | 28 + .../click-8.0.3.dist-info/METADATA | 111 + .../click-8.0.3.dist-info/RECORD | 41 + .../site-packages/click-8.0.3.dist-info/WHEEL | 5 + .../click-8.0.3.dist-info/top_level.txt | 1 + .../python3.7/site-packages/click/__init__.py | 75 + .../click/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2654 bytes .../click/__pycache__/_compat.cpython-37.pyc | Bin 0 -> 15699 bytes .../__pycache__/_termui_impl.cpython-37.pyc | Bin 0 -> 15567 bytes .../__pycache__/_textwrap.cpython-37.pyc | Bin 0 -> 1466 bytes .../__pycache__/_unicodefun.cpython-37.pyc | Bin 0 -> 2269 bytes .../__pycache__/_winconsole.cpython-37.pyc | Bin 0 -> 7685 bytes .../click/__pycache__/core.cpython-37.pyc | Bin 0 -> 87968 bytes .../__pycache__/decorators.cpython-37.pyc | Bin 0 -> 14315 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 10037 bytes .../__pycache__/formatting.cpython-37.pyc | Bin 0 -> 9266 bytes .../click/__pycache__/globals.cpython-37.pyc | Bin 0 -> 2371 bytes .../click/__pycache__/parser.cpython-37.pyc | Bin 0 -> 13438 bytes .../shell_completion.cpython-37.pyc | Bin 0 -> 16636 bytes .../click/__pycache__/termui.cpython-37.pyc | Bin 0 -> 26315 bytes .../click/__pycache__/testing.cpython-37.pyc | Bin 0 -> 14645 bytes .../click/__pycache__/types.cpython-37.pyc | Bin 0 -> 33239 bytes .../click/__pycache__/utils.cpython-37.pyc | Bin 0 -> 17551 bytes .../python3.7/site-packages/click/_compat.py | 627 ++ .../site-packages/click/_termui_impl.py | 718 +++ .../site-packages/click/_textwrap.py | 49 + .../site-packages/click/_unicodefun.py | 100 + .../site-packages/click/_winconsole.py | 279 + .../lib/python3.7/site-packages/click/core.py | 2953 +++++++++ .../site-packages/click/decorators.py | 436 ++ .../site-packages/click/exceptions.py | 287 + .../site-packages/click/formatting.py | 301 + .../python3.7/site-packages/click/globals.py | 69 + .../python3.7/site-packages/click/parser.py | 529 ++ .../python3.7/site-packages/click/py.typed | 0 .../site-packages/click/shell_completion.py | 581 ++ .../python3.7/site-packages/click/termui.py | 809 +++ .../python3.7/site-packages/click/testing.py | 479 ++ .../python3.7/site-packages/click/types.py | 1052 +++ .../python3.7/site-packages/click/utils.py | 579 ++ .../colorama-0.4.4.dist-info/INSTALLER | 1 + .../colorama-0.4.4.dist-info/LICENSE.txt | 27 + .../colorama-0.4.4.dist-info/METADATA | 415 ++ .../colorama-0.4.4.dist-info/RECORD | 18 + .../colorama-0.4.4.dist-info/WHEEL | 6 + .../colorama-0.4.4.dist-info/top_level.txt | 1 + .../site-packages/colorama/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 393 bytes .../colorama/__pycache__/ansi.cpython-37.pyc | Bin 0 -> 3291 bytes .../__pycache__/ansitowin32.cpython-37.pyc | Bin 0 -> 7582 bytes .../__pycache__/initialise.cpython-37.pyc | Bin 0 -> 1612 bytes .../colorama/__pycache__/win32.cpython-37.pyc | Bin 0 -> 3806 bytes .../__pycache__/winterm.cpython-37.pyc | Bin 0 -> 4554 bytes .../python3.7/site-packages/colorama/ansi.py | 102 + .../site-packages/colorama/ansitowin32.py | 258 + .../site-packages/colorama/initialise.py | 80 + .../python3.7/site-packages/colorama/win32.py | 152 + .../site-packages/colorama/winterm.py | 169 + .../colorlog-6.5.0.dist-info/INSTALLER | 1 + .../colorlog-6.5.0.dist-info/LICENSE | 20 + .../colorlog-6.5.0.dist-info/METADATA | 300 + .../colorlog-6.5.0.dist-info/RECORD | 15 + .../colorlog-6.5.0.dist-info/WHEEL | 6 + .../colorlog-6.5.0.dist-info/top_level.txt | 1 + .../site-packages/colorlog/__init__.py | 66 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1150 bytes .../__pycache__/escape_codes.cpython-37.pyc | Bin 0 -> 2326 bytes .../__pycache__/formatter.cpython-37.pyc | Bin 0 -> 7251 bytes .../__pycache__/wrappers.cpython-37.pyc | Bin 0 -> 1902 bytes .../site-packages/colorlog/escape_codes.py | 104 + .../site-packages/colorlog/formatter.py | 204 + .../python3.7/site-packages/colorlog/py.typed | 0 .../site-packages/colorlog/wrappers.py | 92 + .../colormap-1.0.4.dist-info/DESCRIPTION.rst | 73 + .../colormap-1.0.4.dist-info/INSTALLER | 1 + .../colormap-1.0.4.dist-info/METADATA | 102 + .../colormap-1.0.4.dist-info/RECORD | 15 + .../colormap-1.0.4.dist-info/WHEEL | 5 + .../colormap-1.0.4.dist-info/metadata.json | 1 + .../colormap-1.0.4.dist-info/top_level.txt | 1 + .../site-packages/colormap/__init__.py | 39 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 612 bytes .../__pycache__/colors.cpython-37.pyc | Bin 0 -> 32201 bytes .../__pycache__/get_cmap.cpython-37.pyc | Bin 0 -> 1394 bytes .../__pycache__/xfree86.cpython-37.pyc | Bin 0 -> 3755 bytes .../site-packages/colormap/colors.py | 991 +++ .../site-packages/colormap/get_cmap.py | 66 + .../site-packages/colormap/xfree86.py | 173 + .../python3.7/site-packages/easy_install.py | 5 + .../easydev-0.12.0.dist-info/DESCRIPTION.rst | 40 + .../easydev-0.12.0.dist-info/INSTALLER | 1 + .../easydev-0.12.0.dist-info/METADATA | 72 + .../easydev-0.12.0.dist-info/RECORD | 82 + .../easydev-0.12.0.dist-info/WHEEL | 5 + .../easydev-0.12.0.dist-info/entry_points.txt | 3 + .../easydev-0.12.0.dist-info/metadata.json | 1 + .../easydev-0.12.0.dist-info/top_level.txt | 1 + .../site-packages/easydev/__init__.py | 88 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1195 bytes .../__pycache__/appdirs.cpython-37.pyc | Bin 0 -> 19608 bytes .../__pycache__/browser.cpython-37.pyc | Bin 0 -> 4096 bytes .../easydev/__pycache__/chunks.cpython-37.pyc | Bin 0 -> 808 bytes .../easydev/__pycache__/codecs.cpython-37.pyc | Bin 0 -> 2140 bytes .../__pycache__/config_tools.cpython-37.pyc | Bin 0 -> 13583 bytes .../__pycache__/console.cpython-37.pyc | Bin 0 -> 2890 bytes .../__pycache__/copybutton.cpython-37.pyc | Bin 0 -> 2864 bytes .../__pycache__/decorators.cpython-37.pyc | Bin 0 -> 4071 bytes .../__pycache__/dependencies.cpython-37.pyc | Bin 0 -> 555 bytes .../easydev/__pycache__/doc.cpython-37.pyc | Bin 0 -> 684 bytes .../__pycache__/easytest.cpython-37.pyc | Bin 0 -> 3183 bytes .../__pycache__/logging_tools.cpython-37.pyc | Bin 0 -> 2992 bytes .../__pycache__/md5tools.cpython-37.pyc | Bin 0 -> 656 bytes .../easydev/__pycache__/misc.cpython-37.pyc | Bin 0 -> 1300 bytes .../__pycache__/multicore.cpython-37.pyc | Bin 0 -> 3750 bytes .../__pycache__/options.cpython-37.pyc | Bin 0 -> 1478 bytes .../easydev/__pycache__/paths.cpython-37.pyc | Bin 0 -> 2972 bytes .../__pycache__/platform.cpython-37.pyc | Bin 0 -> 1784 bytes .../__pycache__/profiler.cpython-37.pyc | Bin 0 -> 1843 bytes .../__pycache__/progressbar.cpython-37.pyc | Bin 0 -> 5903 bytes .../__pycache__/sphinx_themes.cpython-37.pyc | Bin 0 -> 1314 bytes .../easydev/__pycache__/timer.cpython-37.pyc | Bin 0 -> 1071 bytes .../easydev/__pycache__/tools.cpython-37.pyc | Bin 0 -> 9766 bytes .../easydev/__pycache__/url.cpython-37.pyc | Bin 0 -> 1100 bytes .../site-packages/easydev/appdirs.py | 608 ++ .../site-packages/easydev/browser.py | 181 + .../python3.7/site-packages/easydev/chunks.py | 55 + .../python3.7/site-packages/easydev/codecs.py | 92 + .../site-packages/easydev/config_tools.py | 457 ++ .../site-packages/easydev/console.py | 142 + .../site-packages/easydev/copybutton.py | 119 + .../site-packages/easydev/decorators.py | 196 + .../site-packages/easydev/dependencies.py | 38 + .../python3.7/site-packages/easydev/doc.py | 44 + .../site-packages/easydev/easytest.py | 127 + .../site-packages/easydev/logging_tools.py | 125 + .../site-packages/easydev/md5tools.py | 31 + .../python3.7/site-packages/easydev/misc.py | 81 + .../site-packages/easydev/multicore.py | 150 + .../site-packages/easydev/options.py | 55 + .../python3.7/site-packages/easydev/paths.py | 141 + .../site-packages/easydev/platform.py | 80 + .../site-packages/easydev/profiler.py | 76 + .../site-packages/easydev/progressbar.py | 217 + .../site-packages/easydev/share/__init__.py | 0 .../share/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 146 bytes .../site-packages/easydev/share/copybutton.js | 63 + .../share/themes/cno/google_footer.html | 12 + .../easydev/share/themes/cno/google_head.html | 8 + .../easydev/share/themes/cno/index.html | 7 + .../share/themes/cno/indexsidebar.html | 13 + .../easydev/share/themes/cno/layout.html | 153 + .../share/themes/cno/static/bgfooter.png | Bin 0 -> 434 bytes .../easydev/share/themes/cno/static/bgtop.png | Bin 0 -> 430 bytes .../share/themes/cno/static/software.css_t | 835 +++ .../share/themes/cno/static/warning.jpg | Bin 0 -> 897 bytes .../easydev/share/themes/cno/theme.conf | 22 + .../share/themes/standard/google_footer.html | 12 + .../share/themes/standard/google_head.html | 11 + .../easydev/share/themes/standard/index.html | 7 + .../share/themes/standard/indexsidebar.html | 13 + .../easydev/share/themes/standard/layout.html | 134 + .../share/themes/standard/static/bgfooter.png | Bin 0 -> 434 bytes .../share/themes/standard/static/bgtop.png | Bin 0 -> 430 bytes .../themes/standard/static/software.css_t | 822 +++ .../share/themes/standard/static/warning.jpg | Bin 0 -> 897 bytes .../easydev/share/themes/standard/theme.conf | 22 + .../site-packages/easydev/sphinx_themes.py | 57 + .../python3.7/site-packages/easydev/timer.py | 46 + .../python3.7/site-packages/easydev/tools.py | 383 ++ .../python3.7/site-packages/easydev/url.py | 57 + .../enum_compat-0.0.3.dist-info/INSTALLER | 1 + .../enum_compat-0.0.3.dist-info/METADATA | 31 + .../enum_compat-0.0.3.dist-info/RECORD | 5 + .../enum_compat-0.0.3.dist-info/WHEEL | 5 + .../enum_compat-0.0.3.dist-info/top_level.txt | 1 + .../python3.7/site-packages/flask/__init__.py | 46 + .../python3.7/site-packages/flask/__main__.py | 3 + .../flask/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1845 bytes .../flask/__pycache__/__main__.cpython-37.pyc | Bin 0 -> 176 bytes .../flask/__pycache__/app.cpython-37.pyc | Bin 0 -> 62838 bytes .../__pycache__/blueprints.cpython-37.pyc | Bin 0 -> 21906 bytes .../flask/__pycache__/cli.cpython-37.pyc | Bin 0 -> 26818 bytes .../flask/__pycache__/config.cpython-37.pyc | Bin 0 -> 11568 bytes .../flask/__pycache__/ctx.cpython-37.pyc | Bin 0 -> 15336 bytes .../__pycache__/debughelpers.cpython-37.pyc | Bin 0 -> 6383 bytes .../flask/__pycache__/globals.cpython-37.pyc | Bin 0 -> 1786 bytes .../flask/__pycache__/helpers.cpython-37.pyc | Bin 0 -> 26981 bytes .../flask/__pycache__/logging.cpython-37.pyc | Bin 0 -> 2404 bytes .../flask/__pycache__/scaffold.cpython-37.pyc | Bin 0 -> 24788 bytes .../flask/__pycache__/sessions.cpython-37.pyc | Bin 0 -> 13023 bytes .../flask/__pycache__/signals.cpython-37.pyc | Bin 0 -> 2338 bytes .../__pycache__/templating.cpython-37.pyc | Bin 0 -> 5455 bytes .../flask/__pycache__/testing.cpython-37.pyc | Bin 0 -> 8838 bytes .../flask/__pycache__/typing.cpython-37.pyc | Bin 0 -> 1719 bytes .../flask/__pycache__/views.cpython-37.pyc | Bin 0 -> 4960 bytes .../flask/__pycache__/wrappers.cpython-37.pyc | Bin 0 -> 4949 bytes venv/lib/python3.7/site-packages/flask/app.py | 2091 ++++++ .../site-packages/flask/blueprints.py | 609 ++ venv/lib/python3.7/site-packages/flask/cli.py | 998 +++ .../python3.7/site-packages/flask/config.py | 295 + venv/lib/python3.7/site-packages/flask/ctx.py | 480 ++ .../site-packages/flask/debughelpers.py | 172 + .../python3.7/site-packages/flask/globals.py | 59 + .../python3.7/site-packages/flask/helpers.py | 836 +++ .../site-packages/flask/json/__init__.py | 357 + .../json/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 11484 bytes .../flask/json/__pycache__/tag.cpython-37.pyc | Bin 0 -> 11778 bytes .../python3.7/site-packages/flask/json/tag.py | 312 + .../python3.7/site-packages/flask/logging.py | 74 + .../python3.7/site-packages/flask/py.typed | 0 .../python3.7/site-packages/flask/scaffold.py | 875 +++ .../python3.7/site-packages/flask/sessions.py | 404 ++ .../python3.7/site-packages/flask/signals.py | 56 + .../site-packages/flask/templating.py | 165 + .../python3.7/site-packages/flask/testing.py | 280 + .../python3.7/site-packages/flask/typing.py | 56 + .../python3.7/site-packages/flask/views.py | 158 + .../python3.7/site-packages/flask/wrappers.py | 167 + .../INSTALLER | 1 + .../LICENSE | 13 + .../METADATA | 117 + .../importlib_metadata-4.8.1.dist-info/RECORD | 23 + .../importlib_metadata-4.8.1.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../importlib_metadata/__init__.py | 1067 +++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 37784 bytes .../__pycache__/_adapters.cpython-37.pyc | Bin 0 -> 2355 bytes .../__pycache__/_collections.cpython-37.pyc | Bin 0 -> 1512 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 1978 bytes .../__pycache__/_functools.cpython-37.pyc | Bin 0 -> 2642 bytes .../__pycache__/_itertools.cpython-37.pyc | Bin 0 -> 1995 bytes .../__pycache__/_meta.cpython-37.pyc | Bin 0 -> 2328 bytes .../__pycache__/_text.cpython-37.pyc | Bin 0 -> 3050 bytes .../importlib_metadata/_adapters.py | 68 + .../importlib_metadata/_collections.py | 30 + .../importlib_metadata/_compat.py | 76 + .../importlib_metadata/_functools.py | 85 + .../importlib_metadata/_itertools.py | 73 + .../site-packages/importlib_metadata/_meta.py | 48 + .../site-packages/importlib_metadata/_text.py | 99 + .../site-packages/importlib_metadata/py.typed | 0 .../itsdangerous-2.0.1.dist-info/INSTALLER | 1 + .../itsdangerous-2.0.1.dist-info/LICENSE.rst | 28 + .../itsdangerous-2.0.1.dist-info/METADATA | 96 + .../itsdangerous-2.0.1.dist-info/RECORD | 25 + .../itsdangerous-2.0.1.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/itsdangerous/__init__.py | 22 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 978 bytes .../__pycache__/_json.cpython-37.pyc | Bin 0 -> 1486 bytes .../__pycache__/encoding.cpython-37.pyc | Bin 0 -> 1800 bytes .../__pycache__/exc.cpython-37.pyc | Bin 0 -> 3345 bytes .../__pycache__/jws.cpython-37.pyc | Bin 0 -> 7458 bytes .../__pycache__/serializer.cpython-37.pyc | Bin 0 -> 9561 bytes .../__pycache__/signer.cpython-37.pyc | Bin 0 -> 8384 bytes .../__pycache__/timed.cpython-37.pyc | Bin 0 -> 6224 bytes .../__pycache__/url_safe.cpython-37.pyc | Bin 0 -> 2650 bytes .../site-packages/itsdangerous/_json.py | 34 + .../site-packages/itsdangerous/encoding.py | 54 + .../site-packages/itsdangerous/exc.py | 107 + .../site-packages/itsdangerous/jws.py | 259 + .../site-packages/itsdangerous/py.typed | 0 .../site-packages/itsdangerous/serializer.py | 295 + .../site-packages/itsdangerous/signer.py | 257 + .../site-packages/itsdangerous/timed.py | 227 + .../site-packages/itsdangerous/url_safe.py | 80 + .../site-packages/jinja2/__init__.py | 45 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1871 bytes .../__pycache__/_identifier.cpython-37.pyc | Bin 0 -> 1856 bytes .../__pycache__/async_utils.cpython-37.pyc | Bin 0 -> 2302 bytes .../jinja2/__pycache__/bccache.cpython-37.pyc | Bin 0 -> 13096 bytes .../__pycache__/compiler.cpython-37.pyc | Bin 0 -> 54350 bytes .../__pycache__/constants.cpython-37.pyc | Bin 0 -> 1502 bytes .../jinja2/__pycache__/debug.cpython-37.pyc | Bin 0 -> 5472 bytes .../__pycache__/defaults.cpython-37.pyc | Bin 0 -> 1300 bytes .../__pycache__/environment.cpython-37.pyc | Bin 0 -> 53035 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 5539 bytes .../jinja2/__pycache__/ext.cpython-37.pyc | Bin 0 -> 26228 bytes .../jinja2/__pycache__/filters.cpython-37.pyc | Bin 0 -> 49748 bytes .../__pycache__/idtracking.cpython-37.pyc | Bin 0 -> 11137 bytes .../jinja2/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 20018 bytes .../jinja2/__pycache__/loaders.cpython-37.pyc | Bin 0 -> 20122 bytes .../jinja2/__pycache__/meta.cpython-37.pyc | Bin 0 -> 3754 bytes .../__pycache__/nativetypes.cpython-37.pyc | Bin 0 -> 4750 bytes .../jinja2/__pycache__/nodes.cpython-37.pyc | Bin 0 -> 41506 bytes .../__pycache__/optimizer.cpython-37.pyc | Bin 0 -> 1867 bytes .../jinja2/__pycache__/parser.cpython-37.pyc | Bin 0 -> 27496 bytes .../jinja2/__pycache__/runtime.cpython-37.pyc | Bin 0 -> 32938 bytes .../jinja2/__pycache__/sandbox.cpython-37.pyc | Bin 0 -> 11780 bytes .../jinja2/__pycache__/tests.cpython-37.pyc | Bin 0 -> 6488 bytes .../jinja2/__pycache__/utils.cpython-37.pyc | Bin 0 -> 27160 bytes .../jinja2/__pycache__/visitor.cpython-37.pyc | Bin 0 -> 3845 bytes .../site-packages/jinja2/_identifier.py | 6 + .../site-packages/jinja2/async_utils.py | 68 + .../python3.7/site-packages/jinja2/bccache.py | 364 ++ .../site-packages/jinja2/compiler.py | 1957 ++++++ .../site-packages/jinja2/constants.py | 20 + .../python3.7/site-packages/jinja2/debug.py | 279 + .../site-packages/jinja2/defaults.py | 48 + .../site-packages/jinja2/environment.py | 1674 +++++ .../site-packages/jinja2/exceptions.py | 166 + .../lib/python3.7/site-packages/jinja2/ext.py | 879 +++ .../python3.7/site-packages/jinja2/filters.py | 1824 ++++++ .../site-packages/jinja2/idtracking.py | 318 + .../python3.7/site-packages/jinja2/lexer.py | 869 +++ .../python3.7/site-packages/jinja2/loaders.py | 644 ++ .../python3.7/site-packages/jinja2/meta.py | 111 + .../site-packages/jinja2/nativetypes.py | 118 + .../python3.7/site-packages/jinja2/nodes.py | 1205 ++++ .../site-packages/jinja2/optimizer.py | 47 + .../python3.7/site-packages/jinja2/parser.py | 1040 +++ .../python3.7/site-packages/jinja2/py.typed | 0 .../python3.7/site-packages/jinja2/runtime.py | 1104 ++++ .../python3.7/site-packages/jinja2/sandbox.py | 428 ++ .../python3.7/site-packages/jinja2/tests.py | 255 + .../python3.7/site-packages/jinja2/utils.py | 854 +++ .../python3.7/site-packages/jinja2/visitor.py | 92 + .../site-packages/markupsafe/__init__.py | 288 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 10602 bytes .../__pycache__/_native.cpython-37.pyc | Bin 0 -> 2272 bytes .../site-packages/markupsafe/_native.py | 75 + .../site-packages/markupsafe/_speedups.c | 339 + ...peedups.cpython-37m-arm-linux-gnueabihf.so | Bin 0 -> 47276 bytes .../site-packages/markupsafe/_speedups.pyi | 9 + .../site-packages/markupsafe/py.typed | 0 .../pexpect-4.8.0.dist-info/INSTALLER | 1 + .../pexpect-4.8.0.dist-info/LICENSE | 20 + .../pexpect-4.8.0.dist-info/METADATA | 49 + .../pexpect-4.8.0.dist-info/RECORD | 37 + .../pexpect-4.8.0.dist-info/WHEEL | 6 + .../pexpect-4.8.0.dist-info/top_level.txt | 1 + .../python3.7/site-packages/pexpect/ANSI.py | 351 + .../python3.7/site-packages/pexpect/FSM.py | 334 + .../site-packages/pexpect/__init__.py | 85 + .../pexpect/__pycache__/ANSI.cpython-37.pyc | Bin 0 -> 10277 bytes .../pexpect/__pycache__/FSM.cpython-37.pyc | Bin 0 -> 12694 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3962 bytes .../pexpect/__pycache__/_async.cpython-37.pyc | Bin 0 -> 3243 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 1842 bytes .../pexpect/__pycache__/expect.cpython-37.pyc | Bin 0 -> 9201 bytes .../__pycache__/fdpexpect.cpython-37.pyc | Bin 0 -> 5751 bytes .../__pycache__/popen_spawn.cpython-37.pyc | Bin 0 -> 5065 bytes .../__pycache__/pty_spawn.cpython-37.pyc | Bin 0 -> 31974 bytes .../pexpect/__pycache__/pxssh.cpython-37.pyc | Bin 0 -> 16667 bytes .../__pycache__/replwrap.cpython-37.pyc | Bin 0 -> 4555 bytes .../pexpect/__pycache__/run.cpython-37.pyc | Bin 0 -> 5768 bytes .../pexpect/__pycache__/screen.cpython-37.pyc | Bin 0 -> 14660 bytes .../__pycache__/spawnbase.cpython-37.pyc | Bin 0 -> 17554 bytes .../pexpect/__pycache__/utils.cpython-37.pyc | Bin 0 -> 3731 bytes .../python3.7/site-packages/pexpect/_async.py | 103 + .../python3.7/site-packages/pexpect/bashrc.sh | 16 + .../site-packages/pexpect/exceptions.py | 35 + .../python3.7/site-packages/pexpect/expect.py | 371 ++ .../site-packages/pexpect/fdpexpect.py | 148 + .../site-packages/pexpect/popen_spawn.py | 188 + .../site-packages/pexpect/pty_spawn.py | 860 +++ .../python3.7/site-packages/pexpect/pxssh.py | 537 ++ .../site-packages/pexpect/replwrap.py | 130 + .../python3.7/site-packages/pexpect/run.py | 157 + .../python3.7/site-packages/pexpect/screen.py | 431 ++ .../site-packages/pexpect/spawnbase.py | 525 ++ .../python3.7/site-packages/pexpect/utils.py | 187 + .../pip-18.1.dist-info/INSTALLER | 1 + .../pip-18.1.dist-info/LICENSE.txt | 20 + .../site-packages/pip-18.1.dist-info/METADATA | 70 + .../site-packages/pip-18.1.dist-info/RECORD | 172 + .../site-packages/pip-18.1.dist-info/WHEEL | 6 + .../pip-18.1.dist-info/entry_points.txt | 5 + .../pip-18.1.dist-info/top_level.txt | 1 + .../python3.7/site-packages/pip/__init__.py | 1 + .../python3.7/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 152 bytes .../pip/__pycache__/__main__.cpython-37.pyc | Bin 0 -> 406 bytes .../site-packages/pip/_internal/__init__.py | 78 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1798 bytes .../__pycache__/build_env.cpython-37.pyc | Bin 0 -> 5007 bytes .../__pycache__/cache.cpython-37.pyc | Bin 0 -> 6792 bytes .../__pycache__/configuration.cpython-37.pyc | Bin 0 -> 9791 bytes .../__pycache__/download.cpython-37.pyc | Bin 0 -> 20859 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 11512 bytes .../__pycache__/index.cpython-37.pyc | Bin 0 -> 23133 bytes .../__pycache__/locations.cpython-37.pyc | Bin 0 -> 4188 bytes .../__pycache__/pep425tags.cpython-37.pyc | Bin 0 -> 7247 bytes .../__pycache__/pyproject.cpython-37.pyc | Bin 0 -> 2671 bytes .../__pycache__/resolve.cpython-37.pyc | Bin 0 -> 8438 bytes .../__pycache__/wheel.cpython-37.pyc | Bin 0 -> 20800 bytes .../site-packages/pip/_internal/build_env.py | 142 + .../site-packages/pip/_internal/cache.py | 202 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 229 bytes .../__pycache__/autocompletion.cpython-37.pyc | Bin 0 -> 5042 bytes .../__pycache__/base_command.cpython-37.pyc | Bin 0 -> 6267 bytes .../cli/__pycache__/cmdoptions.cpython-37.pyc | Bin 0 -> 14988 bytes .../__pycache__/main_parser.cpython-37.pyc | Bin 0 -> 2189 bytes .../cli/__pycache__/parser.cpython-37.pyc | Bin 0 -> 8893 bytes .../__pycache__/status_codes.cpython-37.pyc | Bin 0 -> 358 bytes .../pip/_internal/cli/autocompletion.py | 152 + .../pip/_internal/cli/base_command.py | 278 + .../pip/_internal/cli/cmdoptions.py | 714 ++ .../pip/_internal/cli/main_parser.py | 96 + .../site-packages/pip/_internal/cli/parser.py | 261 + .../pip/_internal/cli/status_codes.py | 8 + .../pip/_internal/commands/__init__.py | 79 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2457 bytes .../commands/__pycache__/check.cpython-37.pyc | Bin 0 -> 1259 bytes .../__pycache__/completion.cpython-37.pyc | Bin 0 -> 3031 bytes .../__pycache__/configuration.cpython-37.pyc | Bin 0 -> 6383 bytes .../__pycache__/download.cpython-37.pyc | Bin 0 -> 4611 bytes .../__pycache__/freeze.cpython-37.pyc | Bin 0 -> 2827 bytes .../commands/__pycache__/hash.cpython-37.pyc | Bin 0 -> 2021 bytes .../commands/__pycache__/help.cpython-37.pyc | Bin 0 -> 1197 bytes .../__pycache__/install.cpython-37.pyc | Bin 0 -> 12175 bytes .../commands/__pycache__/list.cpython-37.pyc | Bin 0 -> 8870 bytes .../__pycache__/search.cpython-37.pyc | Bin 0 -> 4263 bytes .../commands/__pycache__/show.cpython-37.pyc | Bin 0 -> 5844 bytes .../__pycache__/uninstall.cpython-37.pyc | Bin 0 -> 2653 bytes .../commands/__pycache__/wheel.cpython-37.pyc | Bin 0 -> 4874 bytes .../pip/_internal/commands/check.py | 41 + .../pip/_internal/commands/completion.py | 94 + .../pip/_internal/commands/configuration.py | 227 + .../pip/_internal/commands/download.py | 174 + .../pip/_internal/commands/freeze.py | 96 + .../pip/_internal/commands/hash.py | 57 + .../pip/_internal/commands/help.py | 37 + .../pip/_internal/commands/install.py | 555 ++ .../pip/_internal/commands/list.py | 306 + .../pip/_internal/commands/search.py | 135 + .../pip/_internal/commands/show.py | 168 + .../pip/_internal/commands/uninstall.py | 78 + .../pip/_internal/commands/wheel.py | 183 + .../pip/_internal/configuration.py | 387 ++ .../site-packages/pip/_internal/download.py | 921 +++ .../site-packages/pip/_internal/exceptions.py | 268 + .../site-packages/pip/_internal/index.py | 899 +++ .../site-packages/pip/_internal/locations.py | 194 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 217 bytes .../__pycache__/candidate.cpython-37.pyc | Bin 0 -> 1052 bytes .../__pycache__/format_control.cpython-37.pyc | Bin 0 -> 2387 bytes .../models/__pycache__/index.cpython-37.pyc | Bin 0 -> 1121 bytes .../models/__pycache__/link.cpython-37.pyc | Bin 0 -> 4719 bytes .../pip/_internal/models/candidate.py | 23 + .../pip/_internal/models/format_control.py | 62 + .../pip/_internal/models/index.py | 29 + .../pip/_internal/models/link.py | 141 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 153 bytes .../__pycache__/check.cpython-37.pyc | Bin 0 -> 3330 bytes .../__pycache__/freeze.cpython-37.pyc | Bin 0 -> 6285 bytes .../__pycache__/prepare.cpython-37.pyc | Bin 0 -> 9151 bytes .../pip/_internal/operations/check.py | 148 + .../pip/_internal/operations/freeze.py | 264 + .../pip/_internal/operations/prepare.py | 355 + .../site-packages/pip/_internal/pep425tags.py | 317 + .../site-packages/pip/_internal/pyproject.py | 144 + .../pip/_internal/req/__init__.py | 69 + .../req/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 1521 bytes .../__pycache__/constructors.cpython-37.pyc | Bin 0 -> 6919 bytes .../req/__pycache__/req_file.cpython-37.pyc | Bin 0 -> 8620 bytes .../__pycache__/req_install.cpython-37.pyc | Bin 0 -> 22770 bytes .../req/__pycache__/req_set.cpython-37.pyc | Bin 0 -> 5734 bytes .../__pycache__/req_tracker.cpython-37.pyc | Bin 0 -> 2845 bytes .../__pycache__/req_uninstall.cpython-37.pyc | Bin 0 -> 12817 bytes .../pip/_internal/req/constructors.py | 298 + .../pip/_internal/req/req_file.py | 340 + .../pip/_internal/req/req_install.py | 860 +++ .../pip/_internal/req/req_set.py | 181 + .../pip/_internal/req/req_tracker.py | 76 + .../pip/_internal/req/req_uninstall.py | 460 ++ .../site-packages/pip/_internal/resolve.py | 353 + .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 148 bytes .../utils/__pycache__/appdirs.cpython-37.pyc | Bin 0 -> 7869 bytes .../utils/__pycache__/compat.cpython-37.pyc | Bin 0 -> 5939 bytes .../__pycache__/deprecation.cpython-37.pyc | Bin 0 -> 2522 bytes .../utils/__pycache__/encoding.cpython-37.pyc | Bin 0 -> 1084 bytes .../__pycache__/filesystem.cpython-37.pyc | Bin 0 -> 615 bytes .../utils/__pycache__/glibc.cpython-37.pyc | Bin 0 -> 1506 bytes .../utils/__pycache__/hashes.cpython-37.pyc | Bin 0 -> 3283 bytes .../utils/__pycache__/logging.cpython-37.pyc | Bin 0 -> 5316 bytes .../utils/__pycache__/misc.cpython-37.pyc | Bin 0 -> 24407 bytes .../utils/__pycache__/models.cpython-37.pyc | Bin 0 -> 1897 bytes .../utils/__pycache__/outdated.cpython-37.pyc | Bin 0 -> 3869 bytes .../__pycache__/packaging.cpython-37.pyc | Bin 0 -> 2348 bytes .../setuptools_build.cpython-37.pyc | Bin 0 -> 343 bytes .../utils/__pycache__/temp_dir.cpython-37.pyc | Bin 0 -> 2760 bytes .../utils/__pycache__/typing.cpython-37.pyc | Bin 0 -> 1292 bytes .../utils/__pycache__/ui.cpython-37.pyc | Bin 0 -> 11817 bytes .../pip/_internal/utils/appdirs.py | 258 + .../pip/_internal/utils/compat.py | 248 + .../pip/_internal/utils/deprecation.py | 89 + .../pip/_internal/utils/encoding.py | 33 + .../pip/_internal/utils/filesystem.py | 28 + .../pip/_internal/utils/glibc.py | 84 + .../pip/_internal/utils/hashes.py | 94 + .../pip/_internal/utils/logging.py | 225 + .../site-packages/pip/_internal/utils/misc.py | 958 +++ .../pip/_internal/utils/models.py | 40 + .../pip/_internal/utils/outdated.py | 154 + .../pip/_internal/utils/packaging.py | 75 + .../pip/_internal/utils/setuptools_build.py | 8 + .../pip/_internal/utils/temp_dir.py | 82 + .../pip/_internal/utils/typing.py | 29 + .../site-packages/pip/_internal/utils/ui.py | 421 ++ .../pip/_internal/vcs/__init__.py | 509 ++ .../vcs/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 15514 bytes .../vcs/__pycache__/bazaar.cpython-37.pyc | Bin 0 -> 3777 bytes .../vcs/__pycache__/git.cpython-37.pyc | Bin 0 -> 9082 bytes .../vcs/__pycache__/mercurial.cpython-37.pyc | Bin 0 -> 3750 bytes .../vcs/__pycache__/subversion.cpython-37.pyc | Bin 0 -> 6352 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 346 + .../pip/_internal/vcs/mercurial.py | 101 + .../pip/_internal/vcs/subversion.py | 213 + .../site-packages/pip/_internal/wheel.py | 831 +++ .../site-packages/pip/_vendor/__init__.py | 114 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2874 bytes .../pip/_vendor/pep517/__init__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 237 bytes .../__pycache__/_in_process.cpython-37.pyc | Bin 0 -> 5302 bytes .../pep517/__pycache__/check.cpython-37.pyc | Bin 0 -> 4701 bytes .../__pycache__/colorlog.cpython-37.pyc | Bin 0 -> 2866 bytes .../pep517/__pycache__/compat.cpython-37.pyc | Bin 0 -> 975 bytes .../__pycache__/envbuild.cpython-37.pyc | Bin 0 -> 4132 bytes .../__pycache__/wrappers.cpython-37.pyc | Bin 0 -> 4699 bytes .../pip/_vendor/pep517/_in_process.py | 182 + .../site-packages/pip/_vendor/pep517/check.py | 194 + .../pip/_vendor/pep517/colorlog.py | 110 + .../pip/_vendor/pep517/compat.py | 23 + .../pip/_vendor/pep517/envbuild.py | 150 + .../pip/_vendor/pep517/wrappers.py | 134 + .../pkg_resources-0.0.0.dist-info/AUTHORS.txt | 421 ++ .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/LICENSE.txt | 20 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../site-packages/pkg_resources/__init__.py | 3236 ++++++++++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 98524 bytes .../__pycache__/py31compat.cpython-37.pyc | Bin 0 -> 597 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 160 bytes .../__pycache__/appdirs.cpython-37.pyc | Bin 0 -> 20648 bytes .../__pycache__/pyparsing.cpython-37.pyc | Bin 0 -> 203003 bytes .../_vendor/__pycache__/six.cpython-37.pyc | Bin 0 -> 24361 bytes .../pkg_resources/_vendor/appdirs.py | 608 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-37.pyc | Bin 0 -> 696 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 534 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 986 bytes .../__pycache__/_structures.cpython-37.pyc | Bin 0 -> 2838 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-37.pyc | Bin 0 -> 19764 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 465 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 10531 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 | 5742 +++++++++++++++++ .../pkg_resources/_vendor/six.py | 868 +++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2379 bytes .../site-packages/pkg_resources/py31compat.py | 23 + .../ptyprocess-0.7.0.dist-info/INSTALLER | 1 + .../ptyprocess-0.7.0.dist-info/LICENSE | 16 + .../ptyprocess-0.7.0.dist-info/METADATA | 37 + .../ptyprocess-0.7.0.dist-info/RECORD | 13 + .../ptyprocess-0.7.0.dist-info/WHEEL | 5 + .../site-packages/ptyprocess/__init__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 325 bytes .../__pycache__/_fork_pty.cpython-37.pyc | Bin 0 -> 1964 bytes .../__pycache__/ptyprocess.cpython-37.pyc | Bin 0 -> 23115 bytes .../__pycache__/util.cpython-37.pyc | Bin 0 -> 1965 bytes .../site-packages/ptyprocess/_fork_pty.py | 78 + .../site-packages/ptyprocess/ptyprocess.py | 842 +++ .../site-packages/ptyprocess/util.py | 71 + .../pygatt-4.0.5.dist-info/INSTALLER | 1 + .../pygatt-4.0.5.dist-info/LICENSE | 44 + .../pygatt-4.0.5.dist-info/METADATA | 393 ++ .../pygatt-4.0.5.dist-info/RECORD | 42 + .../pygatt-4.0.5.dist-info/WHEEL | 5 + .../pygatt-4.0.5.dist-info/top_level.txt | 1 + .../site-packages/pygatt/__init__.py | 14 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 673 bytes .../pygatt/__pycache__/device.cpython-37.pyc | Bin 0 -> 10189 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 900 bytes .../pygatt/__pycache__/util.cpython-37.pyc | Bin 0 -> 325 bytes .../site-packages/pygatt/backends/__init__.py | 3 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 344 bytes .../__pycache__/backend.cpython-37.pyc | Bin 0 -> 3634 bytes .../site-packages/pygatt/backends/backend.py | 90 + .../pygatt/backends/bgapi/__init__.py | 0 .../bgapi/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 153 bytes .../bgapi/__pycache__/bgapi.cpython-37.pyc | Bin 0 -> 24111 bytes .../bgapi/__pycache__/bglib.cpython-37.pyc | Bin 0 -> 17799 bytes .../__pycache__/constants.cpython-37.pyc | Bin 0 -> 9611 bytes .../bgapi/__pycache__/device.cpython-37.pyc | Bin 0 -> 6032 bytes .../__pycache__/error_codes.cpython-37.pyc | Bin 0 -> 2565 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 782 bytes .../bgapi/__pycache__/packets.cpython-37.pyc | Bin 0 -> 19782 bytes .../bgapi/__pycache__/util.cpython-37.pyc | Bin 0 -> 2790 bytes .../pygatt/backends/bgapi/bgapi.py | 829 +++ .../pygatt/backends/bgapi/bglib.py | 884 +++ .../pygatt/backends/bgapi/constants.py | 281 + .../pygatt/backends/bgapi/device.py | 214 + .../pygatt/backends/bgapi/error_codes.py | 79 + .../pygatt/backends/bgapi/exceptions.py | 12 + .../pygatt/backends/bgapi/packets.py | 417 ++ .../pygatt/backends/bgapi/util.py | 91 + .../pygatt/backends/gatttool/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 156 bytes .../__pycache__/device.cpython-37.pyc | Bin 0 -> 3197 bytes .../__pycache__/gatttool.cpython-37.pyc | Bin 0 -> 19250 bytes .../pygatt/backends/gatttool/device.py | 69 + .../pygatt/backends/gatttool/gatttool.py | 633 ++ .../python3.7/site-packages/pygatt/device.py | 324 + .../site-packages/pygatt/exceptions.py | 18 + .../python3.7/site-packages/pygatt/util.py | 5 + .../pyserial-3.5.dist-info/DESCRIPTION.rst | 13 + .../pyserial-3.5.dist-info/INSTALLER | 1 + .../pyserial-3.5.dist-info/METADATA | 47 + .../pyserial-3.5.dist-info/RECORD | 66 + .../pyserial-3.5.dist-info/WHEEL | 6 + .../pyserial-3.5.dist-info/entry_points.txt | 4 + .../pyserial-3.5.dist-info/metadata.json | 1 + .../pyserial-3.5.dist-info/top_level.txt | 1 + .../site-packages/serial/__init__.py | 91 + .../site-packages/serial/__main__.py | 3 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2127 bytes .../__pycache__/__main__.cpython-37.pyc | Bin 0 -> 194 bytes .../serial/__pycache__/rfc2217.cpython-37.pyc | Bin 0 -> 32726 bytes .../serial/__pycache__/rs485.cpython-37.pyc | Bin 0 -> 2866 bytes .../__pycache__/serialcli.cpython-37.pyc | Bin 0 -> 6642 bytes .../__pycache__/serialjava.cpython-37.pyc | Bin 0 -> 7349 bytes .../__pycache__/serialposix.cpython-37.pyc | Bin 0 -> 22375 bytes .../__pycache__/serialutil.cpython-37.pyc | Bin 0 -> 18454 bytes .../__pycache__/serialwin32.cpython-37.pyc | Bin 0 -> 13065 bytes .../serial/__pycache__/win32.cpython-37.pyc | Bin 0 -> 6575 bytes .../python3.7/site-packages/serial/rfc2217.py | 1351 ++++ .../python3.7/site-packages/serial/rs485.py | 94 + .../site-packages/serial/serialcli.py | 253 + .../site-packages/serial/serialjava.py | 251 + .../site-packages/serial/serialposix.py | 900 +++ .../site-packages/serial/serialutil.py | 697 ++ .../site-packages/serial/serialwin32.py | 477 ++ .../site-packages/serial/threaded/__init__.py | 297 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 9548 bytes .../site-packages/serial/tools/__init__.py | 0 .../tools/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 146 bytes .../__pycache__/hexlify_codec.cpython-37.pyc | Bin 0 -> 4893 bytes .../__pycache__/list_ports.cpython-37.pyc | Bin 0 -> 2502 bytes .../list_ports_common.cpython-37.pyc | Bin 0 -> 3505 bytes .../list_ports_linux.cpython-37.pyc | Bin 0 -> 2971 bytes .../__pycache__/list_ports_osx.cpython-37.pyc | Bin 0 -> 6298 bytes .../list_ports_posix.cpython-37.pyc | Bin 0 -> 4502 bytes .../list_ports_windows.cpython-37.pyc | Bin 0 -> 7631 bytes .../tools/__pycache__/miniterm.cpython-37.pyc | Bin 0 -> 29137 bytes .../serial/tools/hexlify_codec.py | 126 + .../site-packages/serial/tools/list_ports.py | 110 + .../serial/tools/list_ports_common.py | 121 + .../serial/tools/list_ports_linux.py | 109 + .../serial/tools/list_ports_osx.py | 299 + .../serial/tools/list_ports_posix.py | 119 + .../serial/tools/list_ports_windows.py | 427 ++ .../site-packages/serial/tools/miniterm.py | 1042 +++ .../serial/urlhandler/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 151 bytes .../__pycache__/protocol_alt.cpython-37.pyc | Bin 0 -> 1365 bytes .../protocol_cp2110.cpython-37.pyc | Bin 0 -> 5654 bytes .../protocol_hwgrep.cpython-37.pyc | Bin 0 -> 1835 bytes .../__pycache__/protocol_loop.cpython-37.pyc | Bin 0 -> 8335 bytes .../protocol_rfc2217.cpython-37.pyc | Bin 0 -> 254 bytes .../protocol_socket.cpython-37.pyc | Bin 0 -> 9030 bytes .../__pycache__/protocol_spy.cpython-37.pyc | Bin 0 -> 9109 bytes .../serial/urlhandler/protocol_alt.py | 57 + .../serial/urlhandler/protocol_cp2110.py | 258 + .../serial/urlhandler/protocol_hwgrep.py | 91 + .../serial/urlhandler/protocol_loop.py | 308 + .../serial/urlhandler/protocol_rfc2217.py | 12 + .../serial/urlhandler/protocol_socket.py | 359 ++ .../serial/urlhandler/protocol_spy.py | 290 + .../python3.7/site-packages/serial/win32.py | 366 ++ .../setuptools-40.8.0.dist-info/AUTHORS.txt | 421 ++ .../setuptools-40.8.0.dist-info/INSTALLER | 1 + .../setuptools-40.8.0.dist-info/LICENSE.txt | 20 + .../setuptools-40.8.0.dist-info/METADATA | 69 + .../setuptools-40.8.0.dist-info/RECORD | 155 + .../setuptools-40.8.0.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-40.8.0.dist-info/top_level.txt | 3 + .../setuptools-40.8.0.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 228 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 7658 bytes .../_deprecation_warning.cpython-37.pyc | Bin 0 -> 512 bytes .../__pycache__/archive_util.cpython-37.pyc | Bin 0 -> 5093 bytes .../__pycache__/build_meta.cpython-37.pyc | Bin 0 -> 7720 bytes .../__pycache__/config.cpython-37.pyc | Bin 0 -> 17655 bytes .../__pycache__/dep_util.cpython-37.pyc | Bin 0 -> 819 bytes .../__pycache__/depends.cpython-37.pyc | Bin 0 -> 5228 bytes .../__pycache__/dist.cpython-37.pyc | Bin 0 -> 42184 bytes .../__pycache__/extension.cpython-37.pyc | Bin 0 -> 1939 bytes .../__pycache__/glibc.cpython-37.pyc | Bin 0 -> 1504 bytes .../__pycache__/glob.cpython-37.pyc | Bin 0 -> 3714 bytes .../__pycache__/launch.cpython-37.pyc | Bin 0 -> 818 bytes .../__pycache__/lib2to3_ex.cpython-37.pyc | Bin 0 -> 2397 bytes .../__pycache__/monkey.cpython-37.pyc | Bin 0 -> 4598 bytes .../__pycache__/msvc.cpython-37.pyc | Bin 0 -> 34395 bytes .../__pycache__/namespaces.cpython-37.pyc | Bin 0 -> 3576 bytes .../__pycache__/package_index.cpython-37.pyc | Bin 0 -> 32669 bytes .../__pycache__/pep425tags.cpython-37.pyc | Bin 0 -> 7166 bytes .../__pycache__/py27compat.cpython-37.pyc | Bin 0 -> 775 bytes .../__pycache__/py31compat.cpython-37.pyc | Bin 0 -> 1161 bytes .../__pycache__/py33compat.cpython-37.pyc | Bin 0 -> 1384 bytes .../__pycache__/sandbox.cpython-37.pyc | Bin 0 -> 15500 bytes .../__pycache__/site-patch.cpython-37.pyc | Bin 0 -> 1466 bytes .../__pycache__/ssl_support.cpython-37.pyc | Bin 0 -> 6756 bytes .../__pycache__/unicode_utils.cpython-37.pyc | Bin 0 -> 1460 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 292 bytes .../__pycache__/wheel.cpython-37.pyc | Bin 0 -> 6945 bytes .../windows_support.cpython-37.pyc | Bin 0 -> 975 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 154 bytes .../__pycache__/pyparsing.cpython-37.pyc | Bin 0 -> 202997 bytes .../_vendor/__pycache__/six.cpython-37.pyc | Bin 0 -> 24355 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-37.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-37.pyc | Bin 0 -> 980 bytes .../__pycache__/_structures.cpython-37.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-37.pyc | Bin 0 -> 8837 bytes .../__pycache__/requirements.cpython-37.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-37.pyc | Bin 0 -> 19758 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-37.pyc | Bin 0 -> 10525 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 | 5742 +++++++++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 +++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 231 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 700 bytes .../command/__pycache__/alias.cpython-37.pyc | Bin 0 -> 2368 bytes .../__pycache__/bdist_egg.cpython-37.pyc | Bin 0 -> 14156 bytes .../__pycache__/bdist_rpm.cpython-37.pyc | Bin 0 -> 1747 bytes .../__pycache__/bdist_wininst.cpython-37.pyc | Bin 0 -> 938 bytes .../__pycache__/build_clib.cpython-37.pyc | Bin 0 -> 2417 bytes .../__pycache__/build_ext.cpython-37.pyc | Bin 0 -> 9671 bytes .../__pycache__/build_py.cpython-37.pyc | Bin 0 -> 8547 bytes .../__pycache__/develop.cpython-37.pyc | Bin 0 -> 6428 bytes .../__pycache__/dist_info.cpython-37.pyc | Bin 0 -> 1343 bytes .../__pycache__/easy_install.cpython-37.pyc | Bin 0 -> 66103 bytes .../__pycache__/egg_info.cpython-37.pyc | Bin 0 -> 21654 bytes .../__pycache__/install.cpython-37.pyc | Bin 0 -> 3975 bytes .../install_egg_info.cpython-37.pyc | Bin 0 -> 2875 bytes .../__pycache__/install_lib.cpython-37.pyc | Bin 0 -> 5033 bytes .../install_scripts.cpython-37.pyc | Bin 0 -> 2255 bytes .../__pycache__/py36compat.cpython-37.pyc | Bin 0 -> 4588 bytes .../__pycache__/register.cpython-37.pyc | Bin 0 -> 745 bytes .../command/__pycache__/rotate.cpython-37.pyc | Bin 0 -> 2494 bytes .../__pycache__/saveopts.cpython-37.pyc | Bin 0 -> 889 bytes .../command/__pycache__/sdist.cpython-37.pyc | Bin 0 -> 6747 bytes .../command/__pycache__/setopt.cpython-37.pyc | Bin 0 -> 4487 bytes .../command/__pycache__/test.cpython-37.pyc | Bin 0 -> 8082 bytes .../command/__pycache__/upload.cpython-37.pyc | Bin 0 -> 5153 bytes .../__pycache__/upload_docs.cpython-37.pyc | Bin 0 -> 6098 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 | 321 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 221 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2397 +++++++ .../setuptools/command/egg_info.py | 717 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 82 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 221 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 270 + .../setuptools/command/upload.py | 196 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 656 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1285 ++++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 2377 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 174 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 179 + .../site-packages/setuptools/msvc.py | 1301 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1136 ++++ .../site-packages/setuptools/pep425tags.py | 319 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 32 + .../site-packages/setuptools/py33compat.py | 55 + .../site-packages/setuptools/sandbox.py | 491 ++ .../setuptools/script (dev).tmpl | 6 + .../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 | 57 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 211 + .../setuptools/windows_support.py | 29 + .../INSTALLER | 1 + .../LICENSE | 254 + .../METADATA | 46 + .../RECORD | 8 + .../WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/typing_extensions.py | 2843 ++++++++ .../site-packages/werkzeug/__init__.py | 6 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 316 bytes .../__pycache__/_internal.cpython-37.pyc | Bin 0 -> 18271 bytes .../__pycache__/_reloader.cpython-37.pyc | Bin 0 -> 11902 bytes .../__pycache__/datastructures.cpython-37.pyc | Bin 0 -> 107731 bytes .../__pycache__/exceptions.cpython-37.pyc | Bin 0 -> 30602 bytes .../__pycache__/filesystem.cpython-37.pyc | Bin 0 -> 2029 bytes .../__pycache__/formparser.cpython-37.pyc | Bin 0 -> 13766 bytes .../werkzeug/__pycache__/http.cpython-37.pyc | Bin 0 -> 37839 bytes .../werkzeug/__pycache__/local.cpython-37.pyc | Bin 0 -> 22386 bytes .../__pycache__/routing.cpython-37.pyc | Bin 0 -> 72851 bytes .../__pycache__/security.cpython-37.pyc | Bin 0 -> 8062 bytes .../__pycache__/serving.cpython-37.pyc | Bin 0 -> 30368 bytes .../werkzeug/__pycache__/test.cpython-37.pyc | Bin 0 -> 38944 bytes .../__pycache__/testapp.cpython-37.pyc | Bin 0 -> 9560 bytes .../werkzeug/__pycache__/urls.cpython-37.pyc | Bin 0 -> 36427 bytes .../__pycache__/user_agent.cpython-37.pyc | Bin 0 -> 1779 bytes .../__pycache__/useragents.cpython-37.pyc | Bin 0 -> 6812 bytes .../werkzeug/__pycache__/utils.cpython-37.pyc | Bin 0 -> 32895 bytes .../werkzeug/__pycache__/wsgi.cpython-37.pyc | Bin 0 -> 30036 bytes .../site-packages/werkzeug/_internal.py | 626 ++ .../site-packages/werkzeug/_reloader.py | 430 ++ .../site-packages/werkzeug/datastructures.py | 3059 +++++++++ .../site-packages/werkzeug/datastructures.pyi | 912 +++ .../site-packages/werkzeug/debug/__init__.py | 502 ++ .../debug/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 12832 bytes .../debug/__pycache__/console.cpython-37.pyc | Bin 0 -> 7810 bytes .../debug/__pycache__/repr.cpython-37.pyc | Bin 0 -> 8773 bytes .../debug/__pycache__/tbtools.cpython-37.pyc | Bin 0 -> 17902 bytes .../site-packages/werkzeug/debug/console.py | 211 + .../site-packages/werkzeug/debug/repr.py | 284 + .../werkzeug/debug/shared/FONT_LICENSE | 96 + .../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/source.png | Bin 0 -> 818 bytes .../werkzeug/debug/shared/style.css | 163 + .../werkzeug/debug/shared/ubuntu.ttf | Bin 0 -> 70220 bytes .../site-packages/werkzeug/debug/tbtools.py | 600 ++ .../site-packages/werkzeug/exceptions.py | 943 +++ .../site-packages/werkzeug/filesystem.py | 55 + .../site-packages/werkzeug/formparser.py | 495 ++ .../python3.7/site-packages/werkzeug/http.py | 1388 ++++ .../python3.7/site-packages/werkzeug/local.py | 677 ++ .../werkzeug/middleware/__init__.py | 22 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 661 bytes .../__pycache__/dispatcher.cpython-37.pyc | Bin 0 -> 2702 bytes .../__pycache__/http_proxy.cpython-37.pyc | Bin 0 -> 6767 bytes .../__pycache__/lint.cpython-37.pyc | Bin 0 -> 12640 bytes .../__pycache__/profiler.cpython-37.pyc | Bin 0 -> 4871 bytes .../__pycache__/proxy_fix.cpython-37.pyc | Bin 0 -> 6110 bytes .../__pycache__/shared_data.cpython-37.pyc | Bin 0 -> 9830 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 | 320 + .../python3.7/site-packages/werkzeug/py.typed | 0 .../site-packages/werkzeug/routing.py | 2341 +++++++ .../site-packages/werkzeug/sansio/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 149 bytes .../__pycache__/multipart.cpython-37.pyc | Bin 0 -> 6497 bytes .../sansio/__pycache__/request.cpython-37.pyc | Bin 0 -> 17060 bytes .../__pycache__/response.cpython-37.pyc | Bin 0 -> 22856 bytes .../sansio/__pycache__/utils.cpython-37.pyc | Bin 0 -> 3809 bytes .../werkzeug/sansio/multipart.py | 260 + .../site-packages/werkzeug/sansio/request.py | 548 ++ .../site-packages/werkzeug/sansio/response.py | 704 ++ .../site-packages/werkzeug/sansio/utils.py | 142 + .../site-packages/werkzeug/security.py | 247 + .../site-packages/werkzeug/serving.py | 1081 ++++ .../python3.7/site-packages/werkzeug/test.py | 1326 ++++ .../site-packages/werkzeug/testapp.py | 240 + .../python3.7/site-packages/werkzeug/urls.py | 1211 ++++ .../site-packages/werkzeug/user_agent.py | 47 + .../site-packages/werkzeug/useragents.py | 215 + .../python3.7/site-packages/werkzeug/utils.py | 1099 ++++ .../werkzeug/wrappers/__init__.py | 16 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 872 bytes .../__pycache__/accept.cpython-37.pyc | Bin 0 -> 766 bytes .../wrappers/__pycache__/auth.cpython-37.pyc | Bin 0 -> 1314 bytes .../__pycache__/base_request.cpython-37.pyc | Bin 0 -> 1707 bytes .../__pycache__/base_response.cpython-37.pyc | Bin 0 -> 1718 bytes .../common_descriptors.cpython-37.pyc | Bin 0 -> 1391 bytes .../wrappers/__pycache__/cors.cpython-37.pyc | Bin 0 -> 1299 bytes .../wrappers/__pycache__/etag.cpython-37.pyc | Bin 0 -> 1299 bytes .../wrappers/__pycache__/json.cpython-37.pyc | Bin 0 -> 758 bytes .../__pycache__/request.cpython-37.pyc | Bin 0 -> 21125 bytes .../__pycache__/response.cpython-37.pyc | Bin 0 -> 29542 bytes .../__pycache__/user_agent.cpython-37.pyc | Bin 0 -> 779 bytes .../site-packages/werkzeug/wrappers/accept.py | 14 + .../site-packages/werkzeug/wrappers/auth.py | 26 + .../werkzeug/wrappers/base_request.py | 36 + .../werkzeug/wrappers/base_response.py | 36 + .../werkzeug/wrappers/common_descriptors.py | 26 + .../site-packages/werkzeug/wrappers/cors.py | 26 + .../site-packages/werkzeug/wrappers/etag.py | 26 + .../site-packages/werkzeug/wrappers/json.py | 13 + .../werkzeug/wrappers/request.py | 660 ++ .../werkzeug/wrappers/response.py | 890 +++ .../werkzeug/wrappers/user_agent.py | 14 + .../python3.7/site-packages/werkzeug/wsgi.py | 982 +++ .../zipp-3.6.0.dist-info/INSTALLER | 1 + .../zipp-3.6.0.dist-info/LICENSE | 19 + .../zipp-3.6.0.dist-info/METADATA | 58 + .../site-packages/zipp-3.6.0.dist-info/RECORD | 8 + .../site-packages/zipp-3.6.0.dist-info/WHEEL | 5 + .../zipp-3.6.0.dist-info/top_level.txt | 1 + venv/lib/python3.7/site-packages/zipp.py | 329 + venv/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 25197 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 16543 bytes .../certifi-2018.8.24-py2.py3-none-any.whl | Bin 0 -> 152671 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 139269 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 22127 bytes .../distlib-0.2.8-py2.py3-none-any.whl | Bin 0 -> 149379 bytes .../distro-1.3.0-py2.py3-none-any.whl | Bin 0 -> 19446 bytes .../html5lib-1.0.1-py2.py3-none-any.whl | Bin 0 -> 117801 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 60445 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 24530 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 19752 bytes .../packaging-19.0-py2.py3-none-any.whl | Bin 0 -> 29100 bytes .../pip-18.1-py2.py3-none-any.whl | Bin 0 -> 198470 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 124652 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 15676 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 63423 bytes .../pytoml-0.1.2-py2.py3-none-any.whl | Bin 0 -> 13896 bytes .../requests-2.21.0-py2.py3-none-any.whl | Bin 0 -> 65295 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 14137 bytes .../setuptools-40.8.0-py2.py3-none-any.whl | Bin 0 -> 468153 bytes .../six-1.12.0-py2.py3-none-any.whl | Bin 0 -> 17683 bytes .../urllib3-1.24.1-py2.py3-none-any.whl | Bin 0 -> 117484 bytes .../webencodings-0.5.1-py2.py3-none-any.whl | Bin 0 -> 18263 bytes .../wheel-0.32.3-py2.py3-none-any.whl | Bin 0 -> 28504 bytes 1031 files changed, 147402 insertions(+) create mode 100644 __pycache__/app.cpython-37.pyc create mode 100644 __pycache__/server.cpython-37.pyc create mode 100644 app.py create mode 100644 server.py create mode 100644 venv/bin/activate create mode 100644 venv/bin/activate.csh create mode 100644 venv/bin/activate.fish create mode 100755 venv/bin/browse create mode 100755 venv/bin/easy_install create mode 100755 venv/bin/easy_install-3.7 create mode 100755 venv/bin/flask create mode 100755 venv/bin/pip create mode 100755 venv/bin/pip3 create mode 100755 venv/bin/pip3.7 create mode 100755 venv/bin/pyserial-miniterm create mode 100755 venv/bin/pyserial-ports create mode 120000 venv/bin/python create mode 120000 venv/bin/python3 create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/__pycache__/easy_install.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/__pycache__/typing_extensions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/__pycache__/zipp.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/click-8.0.3.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/click/__init__.py create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/_termui_impl.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/_textwrap.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/_unicodefun.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/_winconsole.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/core.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/decorators.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/formatting.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/globals.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/parser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/shell_completion.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/termui.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/testing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/types.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/click/_compat.py create mode 100644 venv/lib/python3.7/site-packages/click/_termui_impl.py create mode 100644 venv/lib/python3.7/site-packages/click/_textwrap.py create mode 100644 venv/lib/python3.7/site-packages/click/_unicodefun.py create mode 100644 venv/lib/python3.7/site-packages/click/_winconsole.py create mode 100644 venv/lib/python3.7/site-packages/click/core.py create mode 100644 venv/lib/python3.7/site-packages/click/decorators.py create mode 100644 venv/lib/python3.7/site-packages/click/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/click/formatting.py create mode 100644 venv/lib/python3.7/site-packages/click/globals.py create mode 100644 venv/lib/python3.7/site-packages/click/parser.py create mode 100644 venv/lib/python3.7/site-packages/click/py.typed create mode 100644 venv/lib/python3.7/site-packages/click/shell_completion.py create mode 100644 venv/lib/python3.7/site-packages/click/termui.py create mode 100644 venv/lib/python3.7/site-packages/click/testing.py create mode 100644 venv/lib/python3.7/site-packages/click/types.py create mode 100644 venv/lib/python3.7/site-packages/click/utils.py create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/colorama/__init__.py create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/ansi.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/ansitowin32.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/initialise.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/win32.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/__pycache__/winterm.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorama/ansi.py create mode 100644 venv/lib/python3.7/site-packages/colorama/ansitowin32.py create mode 100644 venv/lib/python3.7/site-packages/colorama/initialise.py create mode 100644 venv/lib/python3.7/site-packages/colorama/win32.py create mode 100644 venv/lib/python3.7/site-packages/colorama/winterm.py create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/colorlog/__init__.py create mode 100644 venv/lib/python3.7/site-packages/colorlog/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorlog/__pycache__/escape_codes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorlog/__pycache__/formatter.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorlog/__pycache__/wrappers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colorlog/escape_codes.py create mode 100644 venv/lib/python3.7/site-packages/colorlog/formatter.py create mode 100644 venv/lib/python3.7/site-packages/colorlog/py.typed create mode 100644 venv/lib/python3.7/site-packages/colorlog/wrappers.py create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/metadata.json create mode 100755 venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/colormap/__init__.py create mode 100644 venv/lib/python3.7/site-packages/colormap/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colormap/__pycache__/colors.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colormap/__pycache__/get_cmap.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colormap/__pycache__/xfree86.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/colormap/colors.py create mode 100644 venv/lib/python3.7/site-packages/colormap/get_cmap.py create mode 100644 venv/lib/python3.7/site-packages/colormap/xfree86.py create mode 100644 venv/lib/python3.7/site-packages/easy_install.py create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/easydev/__init__.py create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/appdirs.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/browser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/chunks.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/codecs.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/config_tools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/console.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/copybutton.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/decorators.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/dependencies.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/doc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/easytest.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/logging_tools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/md5tools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/misc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/multicore.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/options.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/paths.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/platform.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/profiler.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/progressbar.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/sphinx_themes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/timer.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/tools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/__pycache__/url.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/appdirs.py create mode 100644 venv/lib/python3.7/site-packages/easydev/browser.py create mode 100644 venv/lib/python3.7/site-packages/easydev/chunks.py create mode 100644 venv/lib/python3.7/site-packages/easydev/codecs.py create mode 100644 venv/lib/python3.7/site-packages/easydev/config_tools.py create mode 100644 venv/lib/python3.7/site-packages/easydev/console.py create mode 100644 venv/lib/python3.7/site-packages/easydev/copybutton.py create mode 100644 venv/lib/python3.7/site-packages/easydev/decorators.py create mode 100644 venv/lib/python3.7/site-packages/easydev/dependencies.py create mode 100644 venv/lib/python3.7/site-packages/easydev/doc.py create mode 100644 venv/lib/python3.7/site-packages/easydev/easytest.py create mode 100644 venv/lib/python3.7/site-packages/easydev/logging_tools.py create mode 100644 venv/lib/python3.7/site-packages/easydev/md5tools.py create mode 100644 venv/lib/python3.7/site-packages/easydev/misc.py create mode 100644 venv/lib/python3.7/site-packages/easydev/multicore.py create mode 100644 venv/lib/python3.7/site-packages/easydev/options.py create mode 100644 venv/lib/python3.7/site-packages/easydev/paths.py create mode 100644 venv/lib/python3.7/site-packages/easydev/platform.py create mode 100644 venv/lib/python3.7/site-packages/easydev/profiler.py create mode 100644 venv/lib/python3.7/site-packages/easydev/progressbar.py create mode 100644 venv/lib/python3.7/site-packages/easydev/share/__init__.py create mode 100644 venv/lib/python3.7/site-packages/easydev/share/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/easydev/share/copybutton.js create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/google_footer.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/google_head.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/index.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/indexsidebar.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/layout.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgfooter.png create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgtop.png create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/software.css_t create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/warning.jpg create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/cno/theme.conf create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_footer.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_head.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/index.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/indexsidebar.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/layout.html create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgfooter.png create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgtop.png create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/software.css_t create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/warning.jpg create mode 100644 venv/lib/python3.7/site-packages/easydev/share/themes/standard/theme.conf create mode 100644 venv/lib/python3.7/site-packages/easydev/sphinx_themes.py create mode 100644 venv/lib/python3.7/site-packages/easydev/timer.py create mode 100644 venv/lib/python3.7/site-packages/easydev/tools.py create mode 100644 venv/lib/python3.7/site-packages/easydev/url.py create mode 100644 venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/flask/__init__.py create mode 100644 venv/lib/python3.7/site-packages/flask/__main__.py create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/app.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/blueprints.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/cli.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/config.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/ctx.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/globals.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/helpers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/logging.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/scaffold.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/sessions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/signals.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/templating.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/testing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/typing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/views.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/__pycache__/wrappers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/app.py create mode 100644 venv/lib/python3.7/site-packages/flask/blueprints.py create mode 100644 venv/lib/python3.7/site-packages/flask/cli.py create mode 100644 venv/lib/python3.7/site-packages/flask/config.py create mode 100644 venv/lib/python3.7/site-packages/flask/ctx.py create mode 100644 venv/lib/python3.7/site-packages/flask/debughelpers.py create mode 100644 venv/lib/python3.7/site-packages/flask/globals.py create mode 100644 venv/lib/python3.7/site-packages/flask/helpers.py create mode 100644 venv/lib/python3.7/site-packages/flask/json/__init__.py create mode 100644 venv/lib/python3.7/site-packages/flask/json/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/json/__pycache__/tag.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/flask/json/tag.py create mode 100644 venv/lib/python3.7/site-packages/flask/logging.py create mode 100644 venv/lib/python3.7/site-packages/flask/py.typed create mode 100644 venv/lib/python3.7/site-packages/flask/scaffold.py create mode 100644 venv/lib/python3.7/site-packages/flask/sessions.py create mode 100644 venv/lib/python3.7/site-packages/flask/signals.py create mode 100644 venv/lib/python3.7/site-packages/flask/templating.py create mode 100644 venv/lib/python3.7/site-packages/flask/testing.py create mode 100644 venv/lib/python3.7/site-packages/flask/typing.py create mode 100644 venv/lib/python3.7/site-packages/flask/views.py create mode 100644 venv/lib/python3.7/site-packages/flask/wrappers.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata-4.8.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__init__.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_adapters.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_collections.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_compat.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_functools.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_itertools.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_meta.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/_text.py create mode 100644 venv/lib/python3.7/site-packages/importlib_metadata/py.typed create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/itsdangerous-2.0.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__init__.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/_json.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/encoding.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/exc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/jws.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/serializer.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/signer.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/timed.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/__pycache__/url_safe.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/_json.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/encoding.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/exc.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/jws.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/py.typed create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/serializer.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/signer.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/timed.py create mode 100644 venv/lib/python3.7/site-packages/itsdangerous/url_safe.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/__init__.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/_identifier.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/async_utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/bccache.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/compiler.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/constants.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/debug.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/defaults.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/environment.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/ext.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/filters.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/idtracking.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/lexer.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/loaders.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/meta.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/nativetypes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/nodes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/optimizer.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/parser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/runtime.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/sandbox.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/tests.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/__pycache__/visitor.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/jinja2/_identifier.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/async_utils.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/bccache.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/compiler.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/constants.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/debug.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/defaults.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/environment.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/ext.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/filters.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/idtracking.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/lexer.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/loaders.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/meta.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/nativetypes.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/nodes.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/optimizer.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/parser.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/py.typed create mode 100644 venv/lib/python3.7/site-packages/jinja2/runtime.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/sandbox.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/tests.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/utils.py create mode 100644 venv/lib/python3.7/site-packages/jinja2/visitor.py create mode 100644 venv/lib/python3.7/site-packages/markupsafe/__init__.py create mode 100644 venv/lib/python3.7/site-packages/markupsafe/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/markupsafe/__pycache__/_native.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/markupsafe/_native.py create mode 100644 venv/lib/python3.7/site-packages/markupsafe/_speedups.c create mode 100755 venv/lib/python3.7/site-packages/markupsafe/_speedups.cpython-37m-arm-linux-gnueabihf.so create mode 100644 venv/lib/python3.7/site-packages/markupsafe/_speedups.pyi create mode 100644 venv/lib/python3.7/site-packages/markupsafe/py.typed create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pexpect-4.8.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/pexpect/ANSI.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/FSM.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/ANSI.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/FSM.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/_async.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/expect.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/fdpexpect.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/popen_spawn.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/pty_spawn.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/pxssh.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/replwrap.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/run.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/screen.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/spawnbase.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pexpect/_async.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/bashrc.sh create mode 100644 venv/lib/python3.7/site-packages/pexpect/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/expect.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/fdpexpect.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/popen_spawn.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/pty_spawn.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/pxssh.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/replwrap.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/run.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/screen.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/spawnbase.py create mode 100644 venv/lib/python3.7/site-packages/pexpect/utils.py create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/pip-18.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/pip/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/__main__.py create mode 100644 venv/lib/python3.7/site-packages/pip/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/build_env.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/cache.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/configuration.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/download.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/index.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/locations.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/pep425tags.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/pyproject.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/resolve.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/build_env.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cache.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/parser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/base_command.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/main_parser.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/parser.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/cli/status_codes.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/check.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/completion.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/download.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/hash.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/help.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/install.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/list.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/search.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/show.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/check.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/completion.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/configuration.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/download.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/freeze.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/hash.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/help.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/install.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/list.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/search.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/show.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/uninstall.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/commands/wheel.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/configuration.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/download.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/index.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/locations.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__pycache__/candidate.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__pycache__/format_control.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__pycache__/index.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/__pycache__/link.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/candidate.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/format_control.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/index.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/models/link.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/__pycache__/check.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/check.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/freeze.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/operations/prepare.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/pep425tags.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/pyproject.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/constructors.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/req_file.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/req_install.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/req_set.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/constructors.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/req_file.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/req_install.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/req_set.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/req_tracker.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/resolve.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/logging.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/misc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/models.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/typing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/__pycache__/ui.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/appdirs.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/compat.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/deprecation.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/encoding.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/filesystem.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/glibc.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/hashes.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/logging.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/misc.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/models.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/outdated.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/packaging.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/typing.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/utils/ui.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__pycache__/git.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/git.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/vcs/subversion.py create mode 100644 venv/lib/python3.7/site-packages/pip/_internal/wheel.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/check.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/colorlog.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/compat.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/envbuild.py create mode 100644 venv/lib/python3.7/site-packages/pip/_vendor/pep517/wrappers.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/AUTHORS.txt create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/__pycache__/py31compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/_vendor/six.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pkg_resources/py31compat.py create mode 100644 venv/lib/python3.7/site-packages/ptyprocess-0.7.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/ptyprocess-0.7.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/ptyprocess-0.7.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/ptyprocess-0.7.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/ptyprocess-0.7.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/__init__.py create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/__pycache__/_fork_pty.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/__pycache__/ptyprocess.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/__pycache__/util.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/_fork_pty.py create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/ptyprocess.py create mode 100644 venv/lib/python3.7/site-packages/ptyprocess/util.py create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pygatt-4.0.5.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/pygatt/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/__pycache__/device.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/__pycache__/util.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/__pycache__/backend.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/backend.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/bgapi.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/bglib.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/constants.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/device.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/error_codes.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/packets.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/__pycache__/util.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/bgapi.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/bglib.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/constants.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/device.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/error_codes.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/packets.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/bgapi/util.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/__pycache__/device.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/__pycache__/gatttool.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/device.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/backends/gatttool/gatttool.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/device.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pygatt/util.py create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/pyserial-3.5.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/serial/__init__.py create mode 100644 venv/lib/python3.7/site-packages/serial/__main__.py create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/__main__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/rfc2217.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/rs485.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/serialcli.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/serialjava.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/serialposix.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/serialutil.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/serialwin32.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/__pycache__/win32.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/rfc2217.py create mode 100644 venv/lib/python3.7/site-packages/serial/rs485.py create mode 100644 venv/lib/python3.7/site-packages/serial/serialcli.py create mode 100644 venv/lib/python3.7/site-packages/serial/serialjava.py create mode 100644 venv/lib/python3.7/site-packages/serial/serialposix.py create mode 100644 venv/lib/python3.7/site-packages/serial/serialutil.py create mode 100644 venv/lib/python3.7/site-packages/serial/serialwin32.py create mode 100644 venv/lib/python3.7/site-packages/serial/threaded/__init__.py create mode 100644 venv/lib/python3.7/site-packages/serial/threaded/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__init__.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/hexlify_codec.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports_common.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports_linux.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports_osx.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports_posix.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/list_ports_windows.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/__pycache__/miniterm.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/tools/hexlify_codec.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports_common.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports_linux.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports_osx.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports_posix.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/list_ports_windows.py create mode 100644 venv/lib/python3.7/site-packages/serial/tools/miniterm.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__init__.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_alt.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_cp2110.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_hwgrep.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_loop.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_rfc2217.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_socket.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/__pycache__/protocol_spy.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_alt.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_cp2110.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_hwgrep.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_loop.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_rfc2217.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_socket.py create mode 100644 venv/lib/python3.7/site-packages/serial/urlhandler/protocol_spy.py create mode 100644 venv/lib/python3.7/site-packages/serial/win32.py create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/AUTHORS.txt create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/dependency_links.txt create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/setuptools-40.8.0.dist-info/zip-safe create mode 100644 venv/lib/python3.7/site-packages/setuptools/__init__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/archive_util.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/build_meta.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/config.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/dep_util.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/depends.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/dist.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/extension.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/glibc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/glob.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/launch.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/monkey.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/msvc.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/namespaces.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/package_index.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/pep425tags.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/py27compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/py31compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/py33compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/sandbox.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/site-patch.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/ssl_support.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/unicode_utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/version.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/wheel.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/__pycache__/windows_support.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_deprecation_warning.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/__pycache__/six.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/_vendor/six.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/archive_util.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/build_meta.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/cli-32.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/cli-64.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/cli.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__init__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/alias.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/build_clib.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/build_ext.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/build_py.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/develop.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/dist_info.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/easy_install.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/egg_info.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/install.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/install_lib.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/install_scripts.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/py36compat.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/register.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/rotate.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/saveopts.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/sdist.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/setopt.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/test.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/upload.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/__pycache__/upload_docs.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/alias.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/bdist_wininst.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/build_clib.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/build_ext.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/build_py.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/develop.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/dist_info.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/easy_install.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/egg_info.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/install.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/install_lib.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/install_scripts.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/py36compat.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/register.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/rotate.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/saveopts.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/sdist.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/setopt.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/test.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/upload.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/command/upload_docs.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/config.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/dep_util.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/depends.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/dist.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/extension.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/extern/__init__.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/extern/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/setuptools/glibc.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/glob.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/gui-32.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/gui-64.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/gui.exe create mode 100644 venv/lib/python3.7/site-packages/setuptools/launch.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/lib2to3_ex.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/monkey.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/msvc.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/namespaces.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/package_index.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/pep425tags.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/py27compat.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/py31compat.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/py33compat.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/sandbox.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/script (dev).tmpl create mode 100644 venv/lib/python3.7/site-packages/setuptools/script.tmpl create mode 100644 venv/lib/python3.7/site-packages/setuptools/site-patch.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/ssl_support.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/unicode_utils.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/version.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/wheel.py create mode 100644 venv/lib/python3.7/site-packages/setuptools/windows_support.py create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/typing_extensions-3.10.0.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/typing_extensions.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/_internal.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/_reloader.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/datastructures.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/exceptions.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/filesystem.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/formparser.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/http.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/local.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/routing.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/security.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/serving.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/test.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/testapp.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/urls.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/user_agent.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/useragents.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__pycache__/wsgi.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/_internal.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/_reloader.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/datastructures.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/datastructures.pyi create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/__pycache__/console.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/__pycache__/repr.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/console.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/repr.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/FONT_LICENSE create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/ICON_LICENSE.md create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/console.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/less.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/more.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/source.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/style.css create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/ubuntu.ttf create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/tbtools.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/filesystem.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/formparser.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/http.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/local.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/dispatcher.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/http_proxy.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/lint.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/profiler.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/proxy_fix.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/shared_data.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/py.typed create mode 100644 venv/lib/python3.7/site-packages/werkzeug/routing.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/multipart.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/request.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/utils.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/multipart.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/request.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/response.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/sansio/utils.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/security.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/serving.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/test.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/testapp.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/urls.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/user_agent.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/useragents.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/utils.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/cors.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/json.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/user_agent.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/accept.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/auth.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/base_request.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/common_descriptors.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/cors.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/etag.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/json.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/request.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/response.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/user_agent.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wsgi.py create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/zipp.py create mode 100644 venv/pyvenv.cfg create mode 100644 venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/certifi-2018.8.24-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/distlib-0.2.8-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/distro-1.3.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/html5lib-1.0.1-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/packaging-19.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/pip-18.1-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/pytoml-0.1.2-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/requests-2.21.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/setuptools-40.8.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/six-1.12.0-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/urllib3-1.24.1-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/webencodings-0.5.1-py2.py3-none-any.whl create mode 100644 venv/share/python-wheels/wheel-0.32.3-py2.py3-none-any.whl diff --git a/__pycache__/app.cpython-37.pyc b/__pycache__/app.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f997c9b1b1ddc3f73a4808cb008f24745531734 GIT binary patch literal 330 zcmXwzF;BxV5QWc9TuRkejEr83WMb+Hi3lOo2{CkGpoA%j-8Q0)gA<_XiuetzF!GnY zGBL6;;Rf-f_fDsG`gG%7uLDl6-;ePN0{Gl6|JpX^&gH~~1c{aqfy5D#UWDtuf;Uh4 z?+C#)eOyLG{JawEa7?3Z=gh|v&)1eTenIj=K zm-D!)Dy^54Wpt5doU()_!%!q47a`~2(I}M1l(BRX8}?+fN-?AEDT^szbIwmF%jq9; zuw$_ZuEMS$QCDitodL~eHLxY)7T-Ly@V zp30RAU(g=;C5sy;exVnb*|ZQO#7es!&yMHKym{VhG-?Fa?$49(n?=ZXe7RjEFm_?9 zFK}?eX+l!kqbch#itjA3dKNsbq?Fn{n-W1q`GWQ;qH^i*(iP=4FMlH7sTxlOJPxlK zPtAC0;925z<5@DE26&eF9pkBs%CW5TIDAZbKS>k%J zI~>G;>m9m>o1OMyCunzqpz~y_!=JjIHyDP}JC(5(9-z8j=muv&5Il3ekvkY{ZnfLf z+UpS)XYPI&38;}}swk_8(jxszqyy;YxZd!GSt|TI_VdY}jCmw{CFF^akMl`k$Cv_x z6%K>28kIP&Y1to&B+342jlzX#tqg`H#}rzk-4>JBb5RFsl#UeSKk#z#FtUIm0zlra-kCZ`ysW`Vu z778%fRW-~``*^z!dFJ?*#2HOj{XA3J-;PJRgH}K0|0zL}83=CPIV~(`w*`W{`R?DS zc)78F+C)^_bX{1lUc4(x`)?24p{7!yhZ$GDSw~`V8v-7Jfvj`-fSk`Q1{T$9MrQPa zowM0oWD+SZoIF(OG?Tn#%?DIE%4AyDNfyN;@L`Z#!^pDIp&rjUTo{)V32hj2AxI(p zD32OS8O=sANd0i-aOD5=8f_i?KIeqn`qUf41lYhgrY#&2dI lkrI=2fk7i-GdyQI&G') +def show_user(username): + #returns the username + return 'Username: %s' % username + +@app.route('/post/') +def show_post(post_id): + #returns the post, the post_id should be an int + return str(post_id) + +@app.route('/user', methods=['GET','POST']) +def get_user(): + username = request.form['username'] + password = request.form['password'] + #login(arg,arg) is a function that tries to log in and returns true or false + status = login(username, password) + return status diff --git a/venv/bin/activate b/venv/bin/activate new file mode 100644 index 0000000..069a42d --- /dev/null +++ b/venv/bin/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="/home/pi/pyBridge/venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + 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/bin/activate.csh b/venv/bin/activate.csh new file mode 100644 index 0000000..4a34dea --- /dev/null +++ b/venv/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/pi/pyBridge/venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv" != "") then + set env_name = "venv" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish new file mode 100644 index 0000000..8969089 --- /dev/null +++ b/venv/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/pi/pyBridge/venv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venv) " + printf "%s%s" "(venv) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/venv/bin/browse b/venv/bin/browse new file mode 100755 index 0000000..45b7ab6 --- /dev/null +++ b/venv/bin/browse @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from easydev.browser import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/easy_install b/venv/bin/easy_install new file mode 100755 index 0000000..e47864b --- /dev/null +++ b/venv/bin/easy_install @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/easy_install-3.7 b/venv/bin/easy_install-3.7 new file mode 100755 index 0000000..e47864b --- /dev/null +++ b/venv/bin/easy_install-3.7 @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/flask b/venv/bin/flask new file mode 100755 index 0000000..a60d54d --- /dev/null +++ b/venv/bin/flask @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from flask.cli import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip b/venv/bin/pip new file mode 100755 index 0000000..068feed --- /dev/null +++ b/venv/bin/pip @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip3 b/venv/bin/pip3 new file mode 100755 index 0000000..068feed --- /dev/null +++ b/venv/bin/pip3 @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip3.7 b/venv/bin/pip3.7 new file mode 100755 index 0000000..068feed --- /dev/null +++ b/venv/bin/pip3.7 @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pyserial-miniterm b/venv/bin/pyserial-miniterm new file mode 100755 index 0000000..6cfb9ff --- /dev/null +++ b/venv/bin/pyserial-miniterm @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from serial.tools.miniterm import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pyserial-ports b/venv/bin/pyserial-ports new file mode 100755 index 0000000..4dbcd4e --- /dev/null +++ b/venv/bin/pyserial-ports @@ -0,0 +1,10 @@ +#!/home/pi/pyBridge/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from serial.tools.list_ports import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/python b/venv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/python3 b/venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/LICENSE.rst b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/METADATA b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/METADATA new file mode 100644 index 0000000..aaf27ca --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/METADATA @@ -0,0 +1,125 @@ +Metadata-Version: 2.1 +Name: Flask +Version: 2.0.2 +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 +Platform: UNKNOWN +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.6 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: Werkzeug (>=2.0) +Requires-Dist: Jinja2 (>=3.0) +Requires-Dist: itsdangerous (>=2.0) +Requires-Dist: click (>=7.1.2) +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/python3.7/site-packages/Flask-2.0.2.dist-info/RECORD b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/RECORD new file mode 100644 index 0000000..33494da --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/RECORD @@ -0,0 +1,51 @@ +../../../bin/flask,sha256=81CaA_qraorrnJWWXc9NxL3QY3UfY2AExyggcY_U5UE,229 +Flask-2.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask-2.0.2.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +Flask-2.0.2.dist-info/METADATA,sha256=aKsvjFA_ZjZN1jLh1Ac3aQk-ZUZDPrrwo_TGYW1kdAQ,3839 +Flask-2.0.2.dist-info/RECORD,, +Flask-2.0.2.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +Flask-2.0.2.dist-info/entry_points.txt,sha256=gBLA1aKg0OYR8AhbAfg8lnburHtKcgJLDU52BBctN0k,42 +Flask-2.0.2.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 +flask/__init__.py,sha256=9ZCelLoNCpr6eSuLmYlzvbp12B3lrLgoN5U2UWk1vdo,2251 +flask/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 +flask/__pycache__/__init__.cpython-37.pyc,, +flask/__pycache__/__main__.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/app.py,sha256=ectBbi9hGmVHAse5TNcFQZIDRkDAxYUAnLgfuKD0Xws,81975 +flask/blueprints.py,sha256=AkAVXZ_MMkjwjklzCAMdBNowTiM0wVQPynnUnXjTL2M,23781 +flask/cli.py,sha256=wn2Un9RO32ZfRmCMem5KJ5h62-5lnmy1H9uxgyV-eBs,32238 +flask/config.py,sha256=70Uyjh1Jzb9MfTCT7NDhuZWAzyIEu-TIyk6-22MP3zQ,11285 +flask/ctx.py,sha256=EM3W0v1ctuFQAGk_HWtQdoJEg_r2f5Le4xcmElxFwwk,17428 +flask/debughelpers.py,sha256=W82-xrRmodjopBngI9roYH-q08EbQwN2HEGfDAi6SA0,6184 +flask/globals.py,sha256=cWd-R2hUH3VqPhnmQNww892tQS6Yjqg_wg8UvW1M7NM,1723 +flask/helpers.py,sha256=00WqA3wYeyjMrnAOPZTUyrnUf7H8ik3CVT0kqGl_qjk,30589 +flask/json/__init__.py,sha256=unAKdZBlxMI5OMiTU0-Z2Hl4CF1CMJmqTUzpStiExNw,11822 +flask/json/__pycache__/__init__.cpython-37.pyc,, +flask/json/__pycache__/tag.cpython-37.pyc,, +flask/json/tag.py,sha256=fys3HBLssWHuMAIJuTcf2K0bCtosePBKXIWASZEEjnU,8857 +flask/logging.py,sha256=1o_hirVGqdj7SBdETnhX7IAjklG89RXlrwz_2CjzQQE,2273 +flask/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +flask/scaffold.py,sha256=fM9mRy7QBh9fhJ0VTogVx900dDa5oxz8FOw6OK5F-TU,32796 +flask/sessions.py,sha256=Kb7zY4qBIOU2cw1xM5mQ_KmgYUBDFbUYWjlkq0EFYis,15189 +flask/signals.py,sha256=H7QwDciK-dtBxinjKpexpglP0E6k0MJILiFWTItfmqU,2136 +flask/templating.py,sha256=l96VD39JQ0nue4Bcj7wZ4-FWWs-ppLxvgBCpwDQ4KAk,5626 +flask/testing.py,sha256=OsHT-2B70abWH3ulY9IbhLchXIeyj3L-cfcDa88wv5E,10281 +flask/typing.py,sha256=hXEVcXoH-QEabmy1F11pYaQ2SonlkMAwfjBAnqj2x18,1982 +flask/views.py,sha256=nhq31TRB5Z-z2mjFGZACaaB2Et5XPCmWhWxJxOvLWww,5948 +flask/wrappers.py,sha256=VndbHPRBSUUOejmd2Y3ydkoCVUtsS2OJIdJEVIkBVD8,5604 diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/WHEEL b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/WHEEL new file mode 100644 index 0000000..5bad85f --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/entry_points.txt new file mode 100644 index 0000000..1eb0252 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +flask = flask.cli:main + diff --git a/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/top_level.txt new file mode 100644 index 0000000..7e10602 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Flask-2.0.2.dist-info/top_level.txt @@ -0,0 +1 @@ +flask diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/LICENSE.rst b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/METADATA b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/METADATA new file mode 100644 index 0000000..274e91c --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/METADATA @@ -0,0 +1,113 @@ +Metadata-Version: 2.1 +Name: Jinja2 +Version: 3.0.2 +Summary: A very fast and expressive template engine. +Home-page: https://palletsprojects.com/p/jinja/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://jinja.palletsprojects.com/ +Project-URL: Changes, https://jinja.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/jinja/ +Project-URL: Issue Tracker, https://github.com/pallets/jinja/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=3.6 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: MarkupSafe (>=2.0) +Provides-Extra: i18n +Requires-Dist: Babel (>=2.7) ; extra == 'i18n' + +Jinja +===== + +Jinja is a fast, expressive, extensible templating engine. Special +placeholders in the template allow writing code similar to Python +syntax. Then the template is passed data to render the final document. + +It includes: + +- Template inheritance and inclusion. +- Define and import macros within templates. +- HTML templates can use autoescaping to prevent XSS from untrusted + user input. +- A sandboxed environment can safely render untrusted templates. +- AsyncIO support for generating templates and calling async + functions. +- I18N support with Babel. +- Templates are compiled to optimized Python code just-in-time and + cached, or can be compiled ahead-of-time. +- Exceptions point to the correct line in templates to make debugging + easier. +- Extensible filters, tests, functions, and even syntax. + +Jinja's philosophy is that while application logic belongs in Python if +possible, it shouldn't make the template designer's job difficult by +restricting functionality too much. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U Jinja2 + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +In A Nutshell +------------- + +.. code-block:: jinja + + {% extends "base.html" %} + {% block title %}Members{% endblock %} + {% block content %} + + {% endblock %} + + +Donate +------ + +The Pallets organization develops and supports Jinja and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://jinja.palletsprojects.com/ +- Changes: https://jinja.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/Jinja2/ +- Source Code: https://github.com/pallets/jinja/ +- Issue Tracker: https://github.com/pallets/jinja/issues/ +- Website: https://palletsprojects.com/p/jinja/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/RECORD b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/RECORD new file mode 100644 index 0000000..653ca77 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/RECORD @@ -0,0 +1,58 @@ +Jinja2-3.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Jinja2-3.0.2.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Jinja2-3.0.2.dist-info/METADATA,sha256=NxKriGP-LwQjFBZ4hjV696NkZMe3GPy3tE00McDQZZ0,3539 +Jinja2-3.0.2.dist-info/RECORD,, +Jinja2-3.0.2.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +Jinja2-3.0.2.dist-info/entry_points.txt,sha256=Qy_DkVo6Xj_zzOtmErrATe8lHZhOqdjpt3e4JJAGyi8,61 +Jinja2-3.0.2.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 +jinja2/__init__.py,sha256=w4sanG5_dogKC4J_2thsPN9tXzmily3fmXK8Pd46Q1Y,2205 +jinja2/__pycache__/__init__.cpython-37.pyc,, +jinja2/__pycache__/_identifier.cpython-37.pyc,, +jinja2/__pycache__/async_utils.cpython-37.pyc,, +jinja2/__pycache__/bccache.cpython-37.pyc,, +jinja2/__pycache__/compiler.cpython-37.pyc,, +jinja2/__pycache__/constants.cpython-37.pyc,, +jinja2/__pycache__/debug.cpython-37.pyc,, +jinja2/__pycache__/defaults.cpython-37.pyc,, +jinja2/__pycache__/environment.cpython-37.pyc,, +jinja2/__pycache__/exceptions.cpython-37.pyc,, +jinja2/__pycache__/ext.cpython-37.pyc,, +jinja2/__pycache__/filters.cpython-37.pyc,, +jinja2/__pycache__/idtracking.cpython-37.pyc,, +jinja2/__pycache__/lexer.cpython-37.pyc,, +jinja2/__pycache__/loaders.cpython-37.pyc,, +jinja2/__pycache__/meta.cpython-37.pyc,, +jinja2/__pycache__/nativetypes.cpython-37.pyc,, +jinja2/__pycache__/nodes.cpython-37.pyc,, +jinja2/__pycache__/optimizer.cpython-37.pyc,, +jinja2/__pycache__/parser.cpython-37.pyc,, +jinja2/__pycache__/runtime.cpython-37.pyc,, +jinja2/__pycache__/sandbox.cpython-37.pyc,, +jinja2/__pycache__/tests.cpython-37.pyc,, +jinja2/__pycache__/utils.cpython-37.pyc,, +jinja2/__pycache__/visitor.cpython-37.pyc,, +jinja2/_identifier.py,sha256=EdgGJKi7O1yvr4yFlvqPNEqV6M1qHyQr8Gt8GmVTKVM,1775 +jinja2/async_utils.py,sha256=bY2nCUfBA_4FSnNUsIsJgljBq3hACr6fzLi7LiyMTn8,1751 +jinja2/bccache.py,sha256=v5rKAlYxIvfJEa0uGzAC6yCYSS3KuXT5Eqi-n9qvNi8,12670 +jinja2/compiler.py,sha256=v7zKz-mgSYXmfXD9mRmi2BU0B6Z-1RGZmOXCrsPKzc0,72209 +jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 +jinja2/debug.py,sha256=uBmrsiwjYH5l14R9STn5mydOOyriBYol5lDGvEqAb3A,9238 +jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 +jinja2/environment.py,sha256=T6U4be9mY1CUXXin_EQFwpvpFqCiryweGqzXGRYIoSA,61573 +jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 +jinja2/ext.py,sha256=44SjDjeYkkxQTpmC2BetOTxEFMgQ42p2dfSwXmPFcSo,32122 +jinja2/filters.py,sha256=jusKTZbd0ddZMaibZkxMUVKNsOsaYtOq_Il8Imtx4BE,52609 +jinja2/idtracking.py,sha256=WekexMql3u5n3vDxFsQ_i8HW0j24AtjWTjrPBLWrHww,10721 +jinja2/lexer.py,sha256=qNEQqDQw_zO5EaH6rFQsER7Qwn2du0o22prB-TR11HE,29930 +jinja2/loaders.py,sha256=WGJNP5RQEGtuTABIK2tp1sWEy2kfe5ZFOY0ON0gi0LY,22477 +jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 +jinja2/nativetypes.py,sha256=62hvvsAxAj0YaxylOHoREYVogJ5JqOlJISgGY3OKd_o,3675 +jinja2/nodes.py,sha256=8zvzM5mYaylI-kbT6oI1DChxGH8dZkghWt1fVizy4Us,34605 +jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 +jinja2/parser.py,sha256=kHnU8v92GwMYkfr0MVakWv8UlSf_kJPx8LUsgQMof70,39767 +jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jinja2/runtime.py,sha256=wVRlkEmAgNU67AIQDqLvI6UkNLkzDqpLA-z4Mi3vl3g,35054 +jinja2/sandbox.py,sha256=-8zxR6TO9kUkciAVFsIKu8Oq-C7PTeYEdZ5TtA55-gw,14600 +jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 +jinja2/utils.py,sha256=udQxWIKaq4QDCZiXN31ngKOaGGdaMA5fl0JMaM-F6fg,26971 +jinja2/visitor.py,sha256=ZmeLuTj66ic35-uFH-1m0EKXiw4ObDDb_WuE6h5vPFg,3572 diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/WHEEL b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/WHEEL new file mode 100644 index 0000000..5bad85f --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/entry_points.txt new file mode 100644 index 0000000..3619483 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[babel.extractors] +jinja2 = jinja2.ext:babel_extract [i18n] + diff --git a/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/top_level.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/venv/lib/python3.7/site-packages/Jinja2-3.0.2.dist-info/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/LICENSE.rst b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/METADATA b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/METADATA new file mode 100644 index 0000000..ef44e2b --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/METADATA @@ -0,0 +1,100 @@ +Metadata-Version: 2.1 +Name: MarkupSafe +Version: 2.0.1 +Summary: Safely add untrusted strings to HTML/XML markup. +Home-page: https://palletsprojects.com/p/markupsafe/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://markupsafe.palletsprojects.com/ +Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/markupsafe/ +Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=3.6 +Description-Content-Type: text/x-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/quickstart/ + + +Examples +-------- + +.. code-block:: pycon + + >>> from markupsafe import Markup, escape + + >>> # escape replaces special characters and wraps in Markup + >>> escape("") + Markup('<script>alert(document.cookie);</script>') + + >>> # wrap in Markup to mark text "safe" and prevent escaping + >>> Markup("Hello") + Markup('hello') + + >>> escape(Markup("Hello")) + Markup('hello') + + >>> # Markup is a str subclass + >>> # methods and operators escape their arguments + >>> template = Markup("Hello {name}") + >>> template.format(name='"World"') + Markup('Hello "World"') + + +Donate +------ + +The Pallets organization develops and supports MarkupSafe and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://markupsafe.palletsprojects.com/ +- Changes: https://markupsafe.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/MarkupSafe/ +- Source Code: https://github.com/pallets/markupsafe/ +- Issue Tracker: https://github.com/pallets/markupsafe/issues/ +- Website: https://palletsprojects.com/p/markupsafe/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/RECORD b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/RECORD new file mode 100644 index 0000000..867749e --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/RECORD @@ -0,0 +1,14 @@ +MarkupSafe-2.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +MarkupSafe-2.0.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +MarkupSafe-2.0.1.dist-info/METADATA,sha256=FmPpxBdaqCCjF-XKqoxeEzqAzhetQnrkkSsd3V3X-Jc,3211 +MarkupSafe-2.0.1.dist-info/RECORD,, +MarkupSafe-2.0.1.dist-info/WHEEL,sha256=GMu0CcHnECe7JSPnzBUPyOsrcZoHb7dOBGXgpe8vHSQ,104 +MarkupSafe-2.0.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +markupsafe/__init__.py,sha256=9Tez4UIlI7J6_sQcUFK1dKniT_b_8YefpGIyYJ3Sr2Q,8923 +markupsafe/__pycache__/__init__.cpython-37.pyc,, +markupsafe/__pycache__/_native.cpython-37.pyc,, +markupsafe/_native.py,sha256=GTKEV-bWgZuSjklhMHOYRHU9k0DMewTf5mVEZfkbuns,1986 +markupsafe/_speedups.c,sha256=CDDtwaV21D2nYtypnMQzxvvpZpcTvIs8OZ6KDa1g4t0,7400 +markupsafe/_speedups.cpython-37m-arm-linux-gnueabihf.so,sha256=0AlECVU_o-cDdF8A4o0VTukuu0ulmYOcMnPIAuYrMtc,47276 +markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229 +markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/WHEEL b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/WHEEL new file mode 100644 index 0000000..a194ea7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.32.3) +Root-Is-Purelib: false +Tag: cp37-cp37m-linux_armv7l + diff --git a/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/venv/lib/python3.7/site-packages/MarkupSafe-2.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/LICENSE.rst b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/METADATA b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/METADATA new file mode 100644 index 0000000..b58b9bd --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/METADATA @@ -0,0 +1,129 @@ +Metadata-Version: 2.1 +Name: Werkzeug +Version: 2.0.2 +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 +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: 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.6 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: dataclasses ; python_version < "3.7" +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/python3.7/site-packages/Werkzeug-2.0.2.dist-info/RECORD b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/RECORD new file mode 100644 index 0000000..fbc40eb --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/RECORD @@ -0,0 +1,111 @@ +Werkzeug-2.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Werkzeug-2.0.2.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Werkzeug-2.0.2.dist-info/METADATA,sha256=vh_xrARtpmkFYnWRAgfSiHgl66LH143rMfAfPZo-R_E,4452 +Werkzeug-2.0.2.dist-info/RECORD,, +Werkzeug-2.0.2.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +Werkzeug-2.0.2.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 +werkzeug/__init__.py,sha256=Wx1PLCftJ7UAS0fBXEO4Prdr6kvEQ124Stwg-XwyhW4,188 +werkzeug/__pycache__/__init__.cpython-37.pyc,, +werkzeug/__pycache__/_internal.cpython-37.pyc,, +werkzeug/__pycache__/_reloader.cpython-37.pyc,, +werkzeug/__pycache__/datastructures.cpython-37.pyc,, +werkzeug/__pycache__/exceptions.cpython-37.pyc,, +werkzeug/__pycache__/filesystem.cpython-37.pyc,, +werkzeug/__pycache__/formparser.cpython-37.pyc,, +werkzeug/__pycache__/http.cpython-37.pyc,, +werkzeug/__pycache__/local.cpython-37.pyc,, +werkzeug/__pycache__/routing.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__/useragents.cpython-37.pyc,, +werkzeug/__pycache__/utils.cpython-37.pyc,, +werkzeug/__pycache__/wsgi.cpython-37.pyc,, +werkzeug/_internal.py,sha256=_QKkvdaG4pDFwK68c0EpPzYJGe9Y7toRAT1cBbC-CxU,18572 +werkzeug/_reloader.py,sha256=B1hEfgsUOz2IginBQM5Zak_eaIF7gr3GS5-0x2OHvAE,13950 +werkzeug/datastructures.py,sha256=m79A8rHQEt5B7qVqyrjARXzHL66Katn8S92urGscTw4,97929 +werkzeug/datastructures.pyi,sha256=CoVwrQ2Vr9JnbprNL9aE3vOz8mOejT9qysQ-BT53C8Y,34089 +werkzeug/debug/__init__.py,sha256=jYA1e1Gw_8EPOytr-BoMdmm0rzP-Z1H0Ih7wIObnKwQ,17968 +werkzeug/debug/__pycache__/__init__.cpython-37.pyc,, +werkzeug/debug/__pycache__/console.cpython-37.pyc,, +werkzeug/debug/__pycache__/repr.cpython-37.pyc,, +werkzeug/debug/__pycache__/tbtools.cpython-37.pyc,, +werkzeug/debug/console.py,sha256=E1nBMEvFkX673ShQjPtVY-byYatfX9MN-dBMjRI8a8E,5897 +werkzeug/debug/repr.py,sha256=QCSHENKsChEZDCIApkVi_UNjhJ77v8BMXK1OfxO189M,9483 +werkzeug/debug/shared/FONT_LICENSE,sha256=LwAVEI1oYnvXiNMT9SnCH_TaLCxCpeHziDrMg0gPkAI,4673 +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/source.png,sha256=RoGcBTE4CyCB85GBuDGTFlAnUqxwTBiIfDqW15EpnUQ,818 +werkzeug/debug/shared/style.css,sha256=h1ZSUVaKNpfbfcYzRb513WAhPySGDQom1uih3uEDxPw,6704 +werkzeug/debug/shared/ubuntu.ttf,sha256=1eaHFyepmy4FyDvjLVzpITrGEBu_CZYY94jE0nED1c0,70220 +werkzeug/debug/tbtools.py,sha256=AFRrjLDCAps7G5K2-RxNZpXXaEoeFHm68T00f4vlDYA,19362 +werkzeug/exceptions.py,sha256=CUwx0pBiNbk4f9cON17ekgKnmLi6HIVFjUmYZc2x0wM,28681 +werkzeug/filesystem.py,sha256=JS2Dv2QF98WILxY4_thHl-WMcUcwluF_4igkDPaP1l4,1956 +werkzeug/formparser.py,sha256=X-p3Ek4ji8XrKrbmaWxr8StLSc6iuksbpIeweaabs4s,17400 +werkzeug/http.py,sha256=oUCXFFMnkOQ-cHbUY_aiqitshcrSzNDq3fEMf1VI_yk,45141 +werkzeug/local.py,sha256=bwL-y3-qOZAspJ66W1P36SUApLXJy3UY8nLYbM9kfmY,23183 +werkzeug/middleware/__init__.py,sha256=qfqgdT5npwG9ses3-FXQJf3aB95JYP1zchetH_T3PUw,500 +werkzeug/middleware/__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/dispatcher.py,sha256=Fh_w-KyWnTSYF-Lfv5dimQ7THSS7afPAZMmvc4zF1gg,2580 +werkzeug/middleware/http_proxy.py,sha256=HE8VyhS7CR-E1O6_9b68huv8FLgGGR1DLYqkS3Xcp3Q,7558 +werkzeug/middleware/lint.py,sha256=sAg3GcOhICIkwYX5bJGG8n8iebX0Yipq_UH0HvrBvoU,13964 +werkzeug/middleware/profiler.py,sha256=QkXk7cqnaPnF8wQu-5SyPCIOT3_kdABUBorQOghVNOA,4899 +werkzeug/middleware/proxy_fix.py,sha256=uRgQ3dEvFV8JxUqajHYYYOPEeA_BFqaa51Yp8VW0uzA,6849 +werkzeug/middleware/shared_data.py,sha256=xydEqOhAGg0aQJEllPDVfz2-8jHwWvJpAxfPsfPCu7k,10960 +werkzeug/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/routing.py,sha256=oqJ32sWIZtIF6zbqfrnwB1Pbv2ShNwPDJd6FYqxdYVo,84527 +werkzeug/sansio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +werkzeug/sansio/__pycache__/__init__.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/multipart.py,sha256=bJMCNC2f5xyAaylahNViJ0JqmV4ThLRbDVGVzKwcqrQ,8751 +werkzeug/sansio/request.py,sha256=aA9rABkWiG4MhYMByanst2NXkEclsq8SIxhb0LQf0e0,20228 +werkzeug/sansio/response.py,sha256=zvCq9HSBBZGBd5Gg412BY9RZIwnKsJl5Kzfd3Kl9sSo,26098 +werkzeug/sansio/utils.py,sha256=V5v-UUnX8pm4RehP9Tt_NiUSOJGJGUvKjlW0eOIQldM,4164 +werkzeug/security.py,sha256=gPDRuCjkjWrcqj99tBMq8_nHFZLFQjgoW5Ga5XIw9jo,8158 +werkzeug/serving.py,sha256=AfgLn0yKr9qXknmwO-0KXJ055oloS4h5DIFDHEu8iHA,38088 +werkzeug/test.py,sha256=8gE1l-Y9yAh2i3SI0kgpxIaI4oYZuehIkxxyDFcz6J0,48123 +werkzeug/testapp.py,sha256=f48prWSGJhbSrvYb8e1fnAah4BkrLb0enHSdChgsjBY,9471 +werkzeug/urls.py,sha256=Du2lreBHvgBh5c2_bcx72g3hzV2ZabXYZsp-picUIJs,41023 +werkzeug/user_agent.py,sha256=WclZhpvgLurMF45hsioSbS75H1Zb4iMQGKN3_yZ2oKo,1420 +werkzeug/useragents.py,sha256=G8tmv_6vxJaPrLQH3eODNgIYe0_V6KETROQlJI-WxDE,7264 +werkzeug/utils.py,sha256=D_dnCLUfodQ4k0GRSpnI6qDoVoaX7-Dza57bx7sabG0,37101 +werkzeug/wrappers/__init__.py,sha256=-s75nPbyXHzU_rwmLPDhoMuGbEUk0jZT_n0ZQAOFGf8,654 +werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/accept.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/auth.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/base_request.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/base_response.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/common_descriptors.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/cors.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/etag.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/json.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/request.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/response.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/user_agent.cpython-37.pyc,, +werkzeug/wrappers/accept.py,sha256=_oZtAQkahvsrPRkNj2fieg7_St9P0NFC3SgZbJKS6xU,429 +werkzeug/wrappers/auth.py,sha256=rZPCzGxHk9R55PRkmS90kRywUVjjuMWzCGtH68qCq8U,856 +werkzeug/wrappers/base_request.py,sha256=saz9RyNQkvI_XLPYVm29KijNHmD1YzgxDqa0qHTbgss,1174 +werkzeug/wrappers/base_response.py,sha256=q_-TaYywT5G4zA-DWDRDJhJSat2_4O7gOPob6ye4_9A,1186 +werkzeug/wrappers/common_descriptors.py,sha256=v_kWLH3mvCiSRVJ1FNw7nO3w2UJfzY57UKKB5J4zCvE,898 +werkzeug/wrappers/cors.py,sha256=c5UndlZsZvYkbPrp6Gj5iSXxw_VOJDJHskO6-jRmNyQ,846 +werkzeug/wrappers/etag.py,sha256=XHWQQs7Mdd1oWezgBIsl-bYe8ydKkRZVil2Qd01D0Mo,846 +werkzeug/wrappers/json.py,sha256=HM1btPseGeXca0vnwQN_MvZl6h-qNsFY5YBKXKXFwus,410 +werkzeug/wrappers/request.py,sha256=yZGplfC3UqNuykwLJmgywiMhmnoKEGHJOZn_A_ublcQ,24822 +werkzeug/wrappers/response.py,sha256=0n8OcQptiM2e550SALLeg7vC1uWsUbCeE1rPZFfXR78,35177 +werkzeug/wrappers/user_agent.py,sha256=Wl1-A0-1r8o7cHIZQTB55O4Ged6LpCKENaQDlOY5pXA,435 +werkzeug/wsgi.py,sha256=L7s5-Rlt7BRVEZ1m81MaenGfMDP7yL3p1Kxt9Yssqzg,33727 diff --git a/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/WHEEL b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/WHEEL new file mode 100644 index 0000000..5bad85f --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/top_level.txt new file mode 100644 index 0000000..6fe8da8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-2.0.2.dist-info/top_level.txt @@ -0,0 +1 @@ +werkzeug diff --git a/venv/lib/python3.7/site-packages/__pycache__/easy_install.cpython-37.pyc b/venv/lib/python3.7/site-packages/__pycache__/easy_install.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55c4779c131e72bc2617d21fb52b7d15f62eb6aa GIT binary patch literal 281 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/__pycache__/zipp.cpython-37.pyc b/venv/lib/python3.7/site-packages/__pycache__/zipp.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1df8d9c00f8559eb38b1cf9b34773d38e195213a GIT binary patch literal 10047 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/LICENSE.rst b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/LICENSE.rst new file mode 100644 index 0000000..d12a849 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2014 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/METADATA b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/METADATA new file mode 100644 index 0000000..2c8da01 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/METADATA @@ -0,0 +1,111 @@ +Metadata-Version: 2.1 +Name: click +Version: 8.0.3 +Summary: Composable command line interface toolkit +Home-page: https://palletsprojects.com/p/click/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://click.palletsprojects.com/ +Project-URL: Changes, https://click.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/click/ +Project-URL: Issue Tracker, https://github.com/pallets/click/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Requires-Python: >=3.6 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: colorama ; platform_system == "Windows" +Requires-Dist: importlib-metadata ; python_version < "3.8" + +\$ click\_ +========== + +Click is a Python package for creating beautiful command line interfaces +in a composable way with as little code as necessary. It's the "Command +Line Interface Creation Kit". It's highly configurable but comes with +sensible defaults out of the box. + +It aims to make the process of writing command line tools quick and fun +while also preventing any frustration caused by the inability to +implement an intended CLI API. + +Click in three points: + +- Arbitrary nesting of commands +- Automatic help page generation +- Supports lazy loading of subcommands at runtime + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U click + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + import click + + @click.command() + @click.option("--count", default=1, help="Number of greetings.") + @click.option("--name", prompt="Your name", help="The person to greet.") + def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for _ in range(count): + click.echo(f"Hello, {name}!") + + if __name__ == '__main__': + hello() + +.. code-block:: text + + $ python hello.py --count=3 + Your name: Click + Hello, Click! + Hello, Click! + Hello, Click! + + +Donate +------ + +The Pallets organization develops and supports Click and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://click.palletsprojects.com/ +- Changes: https://click.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/click/ +- Source Code: https://github.com/pallets/click +- Issue Tracker: https://github.com/pallets/click/issues +- Website: https://palletsprojects.com/p/click +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/RECORD b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/RECORD new file mode 100644 index 0000000..ef24df6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/RECORD @@ -0,0 +1,41 @@ +click-8.0.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click-8.0.3.dist-info/LICENSE.rst,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475 +click-8.0.3.dist-info/METADATA,sha256=_0jCOf3DdGPvKUZUlBukeb1t6Pnxmm_OMGpaBoDthfc,3247 +click-8.0.3.dist-info/RECORD,, +click-8.0.3.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +click-8.0.3.dist-info/top_level.txt,sha256=J1ZQogalYS4pphY_lPECoNMfw0HzTSrZglC4Yfwo4xA,6 +click/__init__.py,sha256=YkIrDg7-0g5aBS6D2pDe58j3MOaFylHED2_8OXh2fnM,3243 +click/__pycache__/__init__.cpython-37.pyc,, +click/__pycache__/_compat.cpython-37.pyc,, +click/__pycache__/_termui_impl.cpython-37.pyc,, +click/__pycache__/_textwrap.cpython-37.pyc,, +click/__pycache__/_unicodefun.cpython-37.pyc,, +click/__pycache__/_winconsole.cpython-37.pyc,, +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/_compat.py,sha256=P15KQumAZC2F2MFe_JSRbvVOJcNosQfMDrdZq0ReCLM,18814 +click/_termui_impl.py,sha256=z78J5HF_RTsOBhjNLjoigaqRap3P2pWwEDDAjoZzgUg,23452 +click/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353 +click/_unicodefun.py,sha256=JKSh1oSwG_zbjAu4TBCa9tQde2P9FiYcf4MBfy5NdT8,3201 +click/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860 +click/core.py,sha256=k4PA2z0BT_dmed9I52Q2VLi8r6ekTMCtCQzw2y915Xs,111478 +click/decorators.py,sha256=sGkXJGmP7eLtjtmPl_Un2uBTlrhK8s2L22n-yBiDwTw,14864 +click/exceptions.py,sha256=7gDaLGuFZBeCNwY9ERMsF2-Z3R9Fvq09Zc6IZSKjseo,9167 +click/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706 +click/globals.py,sha256=kGPzxq55Ug4dFUrgRV-5oHVPOPdLCUhmYolbrrVBo8g,1985 +click/parser.py,sha256=cAEt1uQR8gq3-S9ysqbVU-fdAZNvilxw4ReJ_T1OQMk,19044 +click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click/shell_completion.py,sha256=_hPI12T9Ex-y5a3WunWnlH0Gca2_urzXFXkDnt7G6Ow,18001 +click/termui.py,sha256=Rp2gFE8x7j8sEIoFMOcPmuqxJQVWWTrwEzyC14-sPAw,29006 +click/testing.py,sha256=kLR5Qcny1OlgxaGB3gweTr0gQe1yVlmgQRn2esA2Fz4,16020 +click/types.py,sha256=VoNZnIlRBAtRRgzavdqVnyfzY5y4U4qzVGI1UvvX1ls,35391 +click/utils.py,sha256=avYwX-3l2KkdJNUo8NmncZSoAdEmniQ_M5sdsSYloJ4,18759 diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/WHEEL b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/WHEEL new file mode 100644 index 0000000..5bad85f --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/top_level.txt new file mode 100644 index 0000000..dca9a90 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click-8.0.3.dist-info/top_level.txt @@ -0,0 +1 @@ +click diff --git a/venv/lib/python3.7/site-packages/click/__init__.py b/venv/lib/python3.7/site-packages/click/__init__.py new file mode 100644 index 0000000..a2ed5d1 --- /dev/null +++ b/venv/lib/python3.7/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 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 get_terminal_size as get_terminal_size +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_os_args as get_os_args +from .utils import get_text_stream as get_text_stream +from .utils import open_file as open_file + +__version__ = "8.0.3" diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aece95fc5c5d9dfc0f78e4b6bec1e04f8f86a6d1 GIT binary patch literal 2654 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/_termui_impl.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/_termui_impl.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8471c563d2aca6b4c4d9f1d64192d9a4532b0a69 GIT binary patch literal 15567 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 No^mH%!c5E^{C^$LQeyxB literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/_textwrap.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/_textwrap.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cad63f4a320c1dc09f419028bdab9c5888533e31 GIT binary patch literal 1466 zcmZWp&2HQ_5ayq>T6w)m+{Cd9^wL8C9byN$^b!O?8#E12?4?B$2yF>jWNfXqT$z;Y zwV^%PeTpQ&`q)=uk3AWEgI?Mh?Yh`D6!?jpAIka)>WBH%)OuD= zGLs!@o1^@8gs^xH)4c)EB&CX^O!KkO!7lmt9qLd~#oh;9B$4)Xqyy0Q72PE&c+XU* zdRO9-rZLC^6@jF$;wzDEbh&K!jUOO^*EXvvZAVGq?^u1RtsH$M;H*&fkq@n|8*6ePs2hDiB`)v#9?vi=fhKjVo zuek2DVH+sYt)rGLSlhd%l(Z4rJ|$+WWiIXHbiuC)>J$MY`RIm1l$*a{B*ODaHuHB6 ztj>;QIW>p!Y-*MBAs)>r&#P&b^u2Jpd}}dHi+Nk*+4cZ@?5Zr+vea*DFUri-DbJhQ zbF1BN#C`%Me?8f+C)IvcRF4Yd>Z~juJwDaV6>HnokwJ!kk47lyE7SvE{K#m+iK>n@P1K<59;4Hg(H-F4*%7Kgyh>>2bXUC?WCNnenk_kLn?J{Q0j_9<8N zSlB(-aoDkiXoGjq$?wPqhP`*P1#GbeXs+=(^O40a^fXRF-`A#@Xq(j<+o>#Syg1H2 z1OvN+u!*K(JS|KTE=l_oCCr|BUZ@!~9yoMF{-2$VCH-=0%JVP4#|;4p6>OV^EP}bs zE*`E^vu2+Rd?cmGCR$1#OF5aU20Bvufs`jrR<1O(PQ`bHgPwP_g?ymR9zYC>ZRVp_ zH6CngEtbZ9j)0e94X}!q10d&J@gg2Ue=~T714efSofdeCuugbGd|01Xg*mi%Bps6 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/_unicodefun.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/_unicodefun.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..014da5b227e4109e87afb3ab983c51f2208c96aa GIT binary patch literal 2269 zcmZ8i&2Jk;6yMohubqw4k2Fa?kgDN=u&5m>RVa!8HKZw2ib_OUm0Cj9W@l_~yt}iR znRRUAJ+$FksW*hg!RE%j61{Qbj~I@e5dQ%u-t4a1(6#2{y*KmT?|qHGSXprm`2P8G z=sl|&#$TFPd=_l(!VoQ(h(S5$49>Y>b()nl7D1M?-~uRyOI)-r4S z;nX@_B2`lBnXq&9AQo97?u*K7c@C~zH!{1lRR>$Yl(v>LyRao!&Wx-=>X|dTJGEyQ z=EgnayE|ERTAf{-8(D2yn_Ze4v&&>o0N*#LkvR zUxD{mXV=Ka9F@DPbJR5f>#fY4x?th?)P0MzptGf^OYFfCP~^aPiB1S$Tq-%QO1syz zUEp3XtjX)-#%z6R&e0iq4pD~Wzc;zP7mJirfo0#5Fi}k7VZd1&(OBX@;2vWHcNxcz zsg?AbF5lY;b zG7;OGo4z*RO1vV5FRo z`CdpTX46wuPLt5{X~R~Ikc6c&Um*ahwm_#GAQ>0RxZf}*PAiq&=GLU5*DcNP^WCJH zug$GTlb?170pl$8LL9^p=qQJ=jUghk4+#)sKosGaVUY&XI|?a&{OEpj3m3=)KBb&u z5(u9SVMki{k-io&A#oTCXgJ24o}__JG7J_DAy4>7a~ILp3?0!zV`;H9`7u{i+AqVU z3x(p{)_Dl{v>*6=T`XE<1eHTHjHfKcQPAs4NHo*{;D(eI2q+%2l*0{?QVoTUbSf4w zx-1OYsiw}?;?U!P)*`kiw=sOh9lXEW+1cO!tVHCVm+U1WGJMT*v2nm5@(IS+k zbK2x0s(C*EO6+?vPIN7IIg4~~DOAh?;G2{zuDz3tZTx*H$tLD4+(7MWNh_y7uIzol zIr**Vm$zwzI735f0EMH_5#Ik2kB`!#VGD(eI`LT=5~vngfKHPfHx6_bigtr7VNeYE z3>`rz3a8$fDfK}*OYHCSEH?%hfvK;R@q#Qj5U;{}Ffm=XaUR zlpT8!RZDv#pC-E673wIH3FV6P2-?%9La53COK7a@g9itDYFSs3?p04xRsH&KPq&q_ z1eI_n2?H4hF@-xq@*q(aC>WZzArYs6>?_M7L^)mp3SlkUO4-LOh@oep)+kZcvbvN7 zFPW-;lg2WLXl|#moO{uBx}pP}tt#-h$UVNHJu~^RUDvN-r_5yA?R%o*cXW#@Tf@rZ z&~}f!#hJDXw#xIr8vG;B^Y5Ka86}%ZkTio>NO-849}j67o$yidc$IUfe6PA`+)Bo3 zwF6BabjO_}e>4Hz&;e~Cgvl^XR5w@A1>~AFWLqYxRqLn*TpKwsY-A!Aep(K+c>!d4 zug_>XNS$J>IdxOhjXHq(!-p=cZf0 XQ?*YcM$(XeuKz-W#$7`-RJZ;E)WEcU literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/_winconsole.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/_winconsole.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20ca66052afe185bbffcc5e1e4d3feecc94c4834 GIT binary patch literal 7685 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/decorators.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/decorators.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ade0553ab994026515ff9349343e16f6de0ea7da GIT binary patch literal 14315 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 U6Rk_F_gc4F7g~o~bp+>s0J2E>=>Px# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/formatting.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/formatting.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cdd68570bb4c94800c70fcdfef7edfe4bbe7711 GIT binary patch literal 9266 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/globals.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/globals.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69ab8a1ca1beede22b76729e84992200995175c2 GIT binary patch literal 2371 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 Fe*ySo=s*Af literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/shell_completion.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/shell_completion.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef4172dff880fb4662b38ac3d9e08f16702012e0 GIT binary patch literal 16636 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/termui.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/termui.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee902e43c25db14f6a9ee50ebb07781a6242d13f GIT binary patch literal 26315 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 Nn4e!U%kwkq{|nDS6@~x+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/__pycache__/types.cpython-37.pyc b/venv/lib/python3.7/site-packages/click/__pycache__/types.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8900a6fd04f72acf4660b1ffcd4e6a45d129cdb GIT binary patch literal 33239 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 UHFM<6si%+FQ*ZNKq{H_A1AO#aAOHXW literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/click/_compat.py b/venv/lib/python3.7/site-packages/click/_compat.py new file mode 100644 index 0000000..b9e1f0d --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/_compat.py @@ -0,0 +1,627 @@ +import codecs +import io +import os +import re +import sys +import typing as t +from weakref import WeakKeyDictionary + +CYGWIN = sys.platform.startswith("cygwin") +MSYS2 = sys.platform.startswith("win") and ("GCC" in sys.version) +# Determine local App Engine environment, per Google's own suggestion +APP_ENGINE = "APPENGINE_RUNTIME" in os.environ and "Development/" in os.environ.get( + "SERVER_SOFTWARE", "" +) +WIN = sys.platform.startswith("win") and not APP_ENGINE and not MSYS2 +auto_wrap_for_ansi: t.Optional[t.Callable[[t.TextIO], t.TextIO]] = None +_ansi_re = re.compile(r"\033\[[;?0-9]*[a-zA-Z]") + + +def get_filesystem_encoding() -> str: + return sys.getfilesystemencoding() or sys.getdefaultencoding() + + +def _make_text_stream( + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if encoding is None: + encoding = get_best_encoding(stream) + if errors is None: + errors = "replace" + return _NonClosingTextIOWrapper( + stream, + encoding, + errors, + line_buffering=True, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def is_ascii_encoding(encoding: str) -> bool: + """Checks if a given encoding is ascii.""" + try: + return codecs.lookup(encoding).name == "ascii" + except LookupError: + return False + + +def get_best_encoding(stream: t.IO) -> str: + """Returns the default stream encoding if not found.""" + rv = getattr(stream, "encoding", None) or sys.getdefaultencoding() + if is_ascii_encoding(rv): + return "utf-8" + return rv + + +class _NonClosingTextIOWrapper(io.TextIOWrapper): + def __init__( + self, + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, + **extra: t.Any, + ) -> None: + self._stream = stream = t.cast( + t.BinaryIO, _FixupStream(stream, force_readable, force_writable) + ) + super().__init__(stream, encoding, errors, **extra) + + def __del__(self) -> None: + try: + self.detach() + except Exception: + pass + + def isatty(self) -> bool: + # https://bitbucket.org/pypy/pypy/issue/1803 + return self._stream.isatty() + + +class _FixupStream: + """The new io interface needs more from streams than streams + traditionally implement. As such, this fix-up code is necessary in + some circumstances. + + The forcing of readable and writable flags are there because some tools + put badly patched objects on sys (one such offender are certain version + of jupyter notebook). + """ + + def __init__( + self, + stream: t.BinaryIO, + force_readable: bool = False, + force_writable: bool = False, + ): + self._stream = stream + self._force_readable = force_readable + self._force_writable = force_writable + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._stream, name) + + def read1(self, size: int) -> bytes: + f = getattr(self._stream, "read1", None) + + if f is not None: + return t.cast(bytes, f(size)) + + return self._stream.read(size) + + def readable(self) -> bool: + if self._force_readable: + return True + x = getattr(self._stream, "readable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.read(0) + except Exception: + return False + return True + + def writable(self) -> bool: + if self._force_writable: + return True + x = getattr(self._stream, "writable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.write("") # type: ignore + except Exception: + try: + self._stream.write(b"") + except Exception: + return False + return True + + def seekable(self) -> bool: + x = getattr(self._stream, "seekable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.seek(self._stream.tell()) + except Exception: + return False + return True + + +def _is_binary_reader(stream: t.IO, default: bool = False) -> bool: + try: + return isinstance(stream.read(0), bytes) + except Exception: + return default + # This happens in some cases where the stream was already + # closed. In this case, we assume the default. + + +def _is_binary_writer(stream: t.IO, default: bool = False) -> bool: + try: + stream.write(b"") + except Exception: + try: + stream.write("") + return False + except Exception: + pass + return default + return True + + +def _find_binary_reader(stream: t.IO) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_reader(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_reader(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _find_binary_writer(stream: t.IO) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_writer(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_writer(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _stream_is_misconfigured(stream: t.TextIO) -> bool: + """A stream is misconfigured if its encoding is ASCII.""" + # If the stream does not have an encoding set, we assume it's set + # to ASCII. This appears to happen in certain unittest + # environments. It's not quite clear what the correct behavior is + # but this at least will force Click to recover somehow. + return is_ascii_encoding(getattr(stream, "encoding", None) or "ascii") + + +def _is_compat_stream_attr(stream: t.TextIO, attr: str, value: t.Optional[str]) -> bool: + """A stream attribute is compatible if it is equal to the + desired value or the desired value is unset and the attribute + has a value. + """ + stream_value = getattr(stream, attr, None) + return stream_value == value or (value is None and stream_value is not None) + + +def _is_compatible_text_stream( + stream: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] +) -> bool: + """Check if a stream's encoding and errors attributes are + compatible with the desired values. + """ + return _is_compat_stream_attr( + stream, "encoding", encoding + ) and _is_compat_stream_attr(stream, "errors", errors) + + +def _force_correct_text_stream( + text_stream: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + is_binary: t.Callable[[t.IO, bool], bool], + find_binary: t.Callable[[t.IO], t.Optional[t.BinaryIO]], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if is_binary(text_stream, False): + binary_reader = t.cast(t.BinaryIO, text_stream) + else: + text_stream = t.cast(t.TextIO, text_stream) + # If the stream looks compatible, and won't default to a + # misconfigured ascii encoding, return it as-is. + if _is_compatible_text_stream(text_stream, encoding, errors) and not ( + encoding is None and _stream_is_misconfigured(text_stream) + ): + return text_stream + + # Otherwise, get the underlying binary reader. + possible_binary_reader = find_binary(text_stream) + + # If that's not possible, silently use the original reader + # and get mojibake instead of exceptions. + if possible_binary_reader is None: + return text_stream + + binary_reader = possible_binary_reader + + # Default errors to replace instead of strict in order to get + # something that works. + if errors is None: + errors = "replace" + + # Wrap the binary stream in a text stream with the correct + # encoding parameters. + return _make_text_stream( + binary_reader, + encoding, + errors, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def _force_correct_text_reader( + text_reader: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_reader, + encoding, + errors, + _is_binary_reader, + _find_binary_reader, + force_readable=force_readable, + ) + + +def _force_correct_text_writer( + text_writer: t.IO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_writable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_writer, + encoding, + errors, + _is_binary_writer, + _find_binary_writer, + force_writable=force_writable, + ) + + +def get_binary_stdin() -> t.BinaryIO: + reader = _find_binary_reader(sys.stdin) + if reader is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdin.") + return reader + + +def get_binary_stdout() -> t.BinaryIO: + writer = _find_binary_writer(sys.stdout) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdout.") + return writer + + +def get_binary_stderr() -> t.BinaryIO: + writer = _find_binary_writer(sys.stderr) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stderr.") + return writer + + +def get_text_stdin( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdin, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True) + + +def get_text_stdout( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdout, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True) + + +def get_text_stderr( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stderr, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stderr, encoding, errors, force_writable=True) + + +def _wrap_io_open( + file: t.Union[str, os.PathLike, int], + mode: str, + encoding: t.Optional[str], + errors: t.Optional[str], +) -> t.IO: + """Handles not passing ``encoding`` and ``errors`` in binary mode.""" + if "b" in mode: + return open(file, mode) + + return open(file, mode, encoding=encoding, errors=errors) + + +def open_stream( + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, +) -> t.Tuple[t.IO, bool]: + binary = "b" in mode + + # Standard streams first. These are simple because they don't need + # special handling for the atomic flag. It's entirely ignored. + if filename == "-": + if any(m in mode for m in ["w", "a", "x"]): + if binary: + return get_binary_stdout(), False + return get_text_stdout(encoding=encoding, errors=errors), False + if binary: + return get_binary_stdin(), False + return get_text_stdin(encoding=encoding, errors=errors), False + + # Non-atomic writes directly go out through the regular open functions. + if not atomic: + return _wrap_io_open(filename, mode, encoding, errors), True + + # Some usability stuff for atomic writes + if "a" in mode: + raise ValueError( + "Appending to an existing file is not supported, because that" + " would involve an expensive `copy`-operation to a temporary" + " file. Open the file in normal `w`-mode and copy explicitly" + " if that's what you're after." + ) + if "x" in mode: + raise ValueError("Use the `overwrite`-parameter instead.") + if "w" not in mode: + raise ValueError("Atomic writes only make sense with `w`-mode.") + + # Atomic writes are more complicated. They work by opening a file + # as a proxy in the same folder and then using the fdopen + # functionality to wrap it in a Python file. Then we wrap it in an + # atomic file that moves the file over on close. + import errno + import random + + try: + perm: t.Optional[int] = os.stat(filename).st_mode + except OSError: + perm = None + + flags = os.O_RDWR | os.O_CREAT | os.O_EXCL + + if binary: + flags |= getattr(os, "O_BINARY", 0) + + while True: + tmp_filename = os.path.join( + os.path.dirname(filename), + f".__atomic-write{random.randrange(1 << 32):08x}", + ) + try: + fd = os.open(tmp_filename, flags, 0o666 if perm is None else perm) + break + except OSError as e: + if e.errno == errno.EEXIST or ( + os.name == "nt" + and e.errno == errno.EACCES + and os.path.isdir(e.filename) + and os.access(e.filename, os.W_OK) + ): + continue + raise + + if perm is not None: + os.chmod(tmp_filename, perm) # in case perm includes bits in umask + + f = _wrap_io_open(fd, mode, encoding, errors) + af = _AtomicFile(f, tmp_filename, os.path.realpath(filename)) + return t.cast(t.IO, af), True + + +class _AtomicFile: + def __init__(self, f: t.IO, tmp_filename: str, real_filename: str) -> None: + self._f = f + self._tmp_filename = tmp_filename + self._real_filename = real_filename + self.closed = False + + @property + def name(self) -> str: + return self._real_filename + + def close(self, delete: bool = False) -> None: + if self.closed: + return + self._f.close() + os.replace(self._tmp_filename, self._real_filename) + self.closed = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._f, name) + + def __enter__(self) -> "_AtomicFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.close(delete=exc_type is not None) + + def __repr__(self) -> str: + return repr(self._f) + + +def strip_ansi(value: str) -> str: + return _ansi_re.sub("", value) + + +def _is_jupyter_kernel_output(stream: t.IO) -> bool: + while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)): + stream = stream._stream + + return stream.__class__.__module__.startswith("ipykernel.") + + +def should_strip_ansi( + stream: t.Optional[t.IO] = None, color: t.Optional[bool] = None +) -> bool: + if color is None: + if stream is None: + stream = sys.stdin + return not isatty(stream) and not _is_jupyter_kernel_output(stream) + return not color + + +# On Windows, wrap the output streams with colorama to support ANSI +# color codes. +# NOTE: double check is needed so mypy does not analyze this on Linux +if sys.platform.startswith("win") and WIN: + from ._winconsole import _get_windows_console_stream + + def _get_argv_encoding() -> str: + import locale + + return locale.getpreferredencoding() + + _ansi_stream_wrappers: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def auto_wrap_for_ansi( + stream: t.TextIO, color: t.Optional[bool] = None + ) -> t.TextIO: + """Support ANSI color and style codes on Windows by wrapping a + stream with colorama. + """ + try: + cached = _ansi_stream_wrappers.get(stream) + except Exception: + cached = None + + if cached is not None: + return cached + + import colorama + + strip = should_strip_ansi(stream, color) + ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip) + rv = t.cast(t.TextIO, ansi_wrapper.stream) + _write = rv.write + + def _safe_write(s): + try: + return _write(s) + except BaseException: + ansi_wrapper.reset_all() + raise + + rv.write = _safe_write + + try: + _ansi_stream_wrappers[stream] = rv + except Exception: + pass + + return rv + + +else: + + def _get_argv_encoding() -> str: + return getattr(sys.stdin, "encoding", None) or get_filesystem_encoding() + + def _get_windows_console_stream( + f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] + ) -> t.Optional[t.TextIO]: + return None + + +def term_len(x: str) -> int: + return len(strip_ansi(x)) + + +def isatty(stream: t.IO) -> bool: + try: + return stream.isatty() + except Exception: + return False + + +def _make_cached_stream_func( + src_func: t.Callable[[], t.TextIO], wrapper_func: t.Callable[[], t.TextIO] +) -> t.Callable[[], t.TextIO]: + cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def func() -> t.TextIO: + stream = src_func() + try: + rv = cache.get(stream) + except Exception: + rv = None + if rv is not None: + return rv + rv = wrapper_func() + try: + cache[stream] = rv + except Exception: + pass + return rv + + return func + + +_default_text_stdin = _make_cached_stream_func(lambda: sys.stdin, get_text_stdin) +_default_text_stdout = _make_cached_stream_func(lambda: sys.stdout, get_text_stdout) +_default_text_stderr = _make_cached_stream_func(lambda: sys.stderr, get_text_stderr) + + +binary_streams: t.Mapping[str, t.Callable[[], t.BinaryIO]] = { + "stdin": get_binary_stdin, + "stdout": get_binary_stdout, + "stderr": get_binary_stderr, +} + +text_streams: t.Mapping[ + str, t.Callable[[t.Optional[str], t.Optional[str]], t.TextIO] +] = { + "stdin": get_text_stdin, + "stdout": get_text_stdout, + "stderr": get_text_stderr, +} diff --git a/venv/lib/python3.7/site-packages/click/_termui_impl.py b/venv/lib/python3.7/site-packages/click/_termui_impl.py new file mode 100644 index 0000000..39c1d08 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/_termui_impl.py @@ -0,0 +1,718 @@ +""" +This module contains implementations for the termui module. To keep the +import time of Click down, some infrequently used functionality is +placed in this module and only imported as needed. +""" +import contextlib +import math +import os +import sys +import time +import typing as t +from gettext import gettext as _ + +from ._compat import _default_text_stdout +from ._compat import CYGWIN +from ._compat import get_best_encoding +from ._compat import isatty +from ._compat import open_stream +from ._compat import strip_ansi +from ._compat import term_len +from ._compat import WIN +from .exceptions import ClickException +from .utils import echo + +V = t.TypeVar("V") + +if os.name == "nt": + BEFORE_BAR = "\r" + AFTER_BAR = "\n" +else: + BEFORE_BAR = "\r\033[?25l" + AFTER_BAR = "\033[?25h\n" + + +class ProgressBar(t.Generic[V]): + def __init__( + self, + iterable: t.Optional[t.Iterable[V]], + length: t.Optional[int] = None, + fill_char: str = "#", + empty_char: str = " ", + bar_template: str = "%(bar)s", + info_sep: str = " ", + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + label: t.Optional[str] = None, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, + width: int = 30, + ) -> None: + self.fill_char = fill_char + self.empty_char = empty_char + self.bar_template = bar_template + self.info_sep = info_sep + self.show_eta = show_eta + self.show_percent = show_percent + self.show_pos = show_pos + self.item_show_func = item_show_func + self.label = label or "" + if file is None: + file = _default_text_stdout() + self.file = file + self.color = color + self.update_min_steps = update_min_steps + self._completed_intervals = 0 + self.width = width + self.autowidth = width == 0 + + if length is None: + from operator import length_hint + + length = length_hint(iterable, -1) + + if length == -1: + length = None + if iterable is None: + if length is None: + raise TypeError("iterable or length is required") + iterable = t.cast(t.Iterable[V], range(length)) + self.iter = iter(iterable) + self.length = length + self.pos = 0 + self.avg: t.List[float] = [] + self.start = self.last_eta = time.time() + self.eta_known = False + self.finished = False + self.max_width: t.Optional[int] = None + self.entered = False + self.current_item: t.Optional[V] = None + self.is_hidden = not isatty(self.file) + self._last_line: t.Optional[str] = None + + def __enter__(self) -> "ProgressBar": + self.entered = True + self.render_progress() + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.render_finish() + + def __iter__(self) -> t.Iterator[V]: + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + self.render_progress() + return self.generator() + + def __next__(self) -> V: + # Iteration is defined in terms of a generator function, + # returned by iter(self); use that to define next(). This works + # because `self.iter` is an iterable consumed by that generator, + # so it is re-entry safe. Calling `next(self.generator())` + # twice works and does "what you want". + return next(iter(self)) + + def render_finish(self) -> None: + if self.is_hidden: + return + self.file.write(AFTER_BAR) + self.file.flush() + + @property + def pct(self) -> float: + if self.finished: + return 1.0 + return min(self.pos / (float(self.length or 1) or 1), 1.0) + + @property + def time_per_iteration(self) -> float: + if not self.avg: + return 0.0 + return sum(self.avg) / float(len(self.avg)) + + @property + def eta(self) -> float: + if self.length is not None and not self.finished: + return self.time_per_iteration * (self.length - self.pos) + return 0.0 + + def format_eta(self) -> str: + if self.eta_known: + t = int(self.eta) + seconds = t % 60 + t //= 60 + minutes = t % 60 + t //= 60 + hours = t % 24 + t //= 24 + if t > 0: + return f"{t}d {hours:02}:{minutes:02}:{seconds:02}" + else: + return f"{hours:02}:{minutes:02}:{seconds:02}" + return "" + + def format_pos(self) -> str: + pos = str(self.pos) + if self.length is not None: + pos += f"/{self.length}" + return pos + + def format_pct(self) -> str: + return f"{int(self.pct * 100): 4}%"[1:] + + def format_bar(self) -> str: + if self.length is not None: + bar_length = int(self.pct * self.width) + bar = self.fill_char * bar_length + bar += self.empty_char * (self.width - bar_length) + elif self.finished: + bar = self.fill_char * self.width + else: + chars = list(self.empty_char * (self.width or 1)) + if self.time_per_iteration != 0: + chars[ + int( + (math.cos(self.pos * self.time_per_iteration) / 2.0 + 0.5) + * self.width + ) + ] = self.fill_char + bar = "".join(chars) + return bar + + def format_progress_line(self) -> str: + show_percent = self.show_percent + + info_bits = [] + if self.length is not None and show_percent is None: + show_percent = not self.show_pos + + if self.show_pos: + info_bits.append(self.format_pos()) + if show_percent: + info_bits.append(self.format_pct()) + if self.show_eta and self.eta_known and not self.finished: + info_bits.append(self.format_eta()) + if self.item_show_func is not None: + item_info = self.item_show_func(self.current_item) + if item_info is not None: + info_bits.append(item_info) + + return ( + self.bar_template + % { + "label": self.label, + "bar": self.format_bar(), + "info": self.info_sep.join(info_bits), + } + ).rstrip() + + def render_progress(self) -> None: + import shutil + + if self.is_hidden: + # Only output the label as it changes if the output is not a + # TTY. Use file=stderr if you expect to be piping stdout. + if self._last_line != self.label: + self._last_line = self.label + echo(self.label, file=self.file, color=self.color) + + return + + buf = [] + # Update width in case the terminal has been resized + if self.autowidth: + old_width = self.width + self.width = 0 + clutter_length = term_len(self.format_progress_line()) + new_width = max(0, shutil.get_terminal_size().columns - clutter_length) + if new_width < old_width: + buf.append(BEFORE_BAR) + buf.append(" " * self.max_width) # type: ignore + self.max_width = new_width + self.width = new_width + + clear_width = self.width + if self.max_width is not None: + clear_width = self.max_width + + buf.append(BEFORE_BAR) + line = self.format_progress_line() + line_len = term_len(line) + if self.max_width is None or self.max_width < line_len: + self.max_width = line_len + + buf.append(line) + buf.append(" " * (clear_width - line_len)) + line = "".join(buf) + # Render the line only if it changed. + + if line != self._last_line: + self._last_line = line + echo(line, file=self.file, color=self.color, nl=False) + self.file.flush() + + def make_step(self, n_steps: int) -> None: + self.pos += n_steps + if self.length is not None and self.pos >= self.length: + self.finished = True + + if (time.time() - self.last_eta) < 1.0: + return + + self.last_eta = time.time() + + # self.avg is a rolling list of length <= 7 of steps where steps are + # defined as time elapsed divided by the total progress through + # self.length. + if self.pos: + step = (time.time() - self.start) / self.pos + else: + step = time.time() - self.start + + self.avg = self.avg[-6:] + [step] + + self.eta_known = self.length is not None + + def update(self, n_steps: int, current_item: t.Optional[V] = None) -> None: + """Update the progress bar by advancing a specified number of + steps, and optionally set the ``current_item`` for this new + position. + + :param n_steps: Number of steps to advance. + :param current_item: Optional item to set as ``current_item`` + for the updated position. + + .. versionchanged:: 8.0 + Added the ``current_item`` optional parameter. + + .. versionchanged:: 8.0 + Only render when the number of steps meets the + ``update_min_steps`` threshold. + """ + if current_item is not None: + self.current_item = current_item + + self._completed_intervals += n_steps + + if self._completed_intervals >= self.update_min_steps: + self.make_step(self._completed_intervals) + self.render_progress() + self._completed_intervals = 0 + + def finish(self) -> None: + self.eta_known = False + self.current_item = None + self.finished = True + + def generator(self) -> t.Iterator[V]: + """Return a generator which yields the items added to the bar + during construction, and updates the progress bar *after* the + yielded block returns. + """ + # WARNING: the iterator interface for `ProgressBar` relies on + # this and only works because this is a simple generator which + # doesn't create or manage additional state. If this function + # changes, the impact should be evaluated both against + # `iter(bar)` and `next(bar)`. `next()` in particular may call + # `self.generator()` repeatedly, and this must remain safe in + # order for that interface to work. + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + + if self.is_hidden: + yield from self.iter + else: + for rv in self.iter: + self.current_item = rv + + # This allows show_item_func to be updated before the + # item is processed. Only trigger at the beginning of + # the update interval. + if self._completed_intervals == 0: + self.render_progress() + + yield rv + self.update(1) + + self.finish() + self.render_progress() + + +def pager(generator: t.Iterable[str], color: t.Optional[bool] = None) -> None: + """Decide what method to use for paging through text.""" + stdout = _default_text_stdout() + if not isatty(sys.stdin) or not isatty(stdout): + return _nullpager(stdout, generator, color) + pager_cmd = (os.environ.get("PAGER", None) or "").strip() + if pager_cmd: + if WIN: + return _tempfilepager(generator, pager_cmd, color) + return _pipepager(generator, pager_cmd, color) + if os.environ.get("TERM") in ("dumb", "emacs"): + return _nullpager(stdout, generator, color) + if WIN or sys.platform.startswith("os2"): + return _tempfilepager(generator, "more <", color) + if hasattr(os, "system") and os.system("(less) 2>/dev/null") == 0: + return _pipepager(generator, "less", color) + + import tempfile + + fd, filename = tempfile.mkstemp() + os.close(fd) + try: + if hasattr(os, "system") and os.system(f'more "{filename}"') == 0: + return _pipepager(generator, "more", color) + return _nullpager(stdout, generator, color) + finally: + os.unlink(filename) + + +def _pipepager(generator: t.Iterable[str], cmd: str, color: t.Optional[bool]) -> None: + """Page through text by feeding it to another program. Invoking a + pager through this might support colors. + """ + import subprocess + + env = dict(os.environ) + + # If we're piping to less we might support colors under the + # condition that + cmd_detail = cmd.rsplit("/", 1)[-1].split() + if color is None and cmd_detail[0] == "less": + less_flags = f"{os.environ.get('LESS', '')}{' '.join(cmd_detail[1:])}" + if not less_flags: + env["LESS"] = "-R" + color = True + elif "r" in less_flags or "R" in less_flags: + color = True + + c = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, env=env) + stdin = t.cast(t.BinaryIO, c.stdin) + encoding = get_best_encoding(stdin) + try: + for text in generator: + if not color: + text = strip_ansi(text) + + stdin.write(text.encode(encoding, "replace")) + except (OSError, KeyboardInterrupt): + pass + else: + stdin.close() + + # Less doesn't respect ^C, but catches it for its own UI purposes (aborting + # search or other commands inside less). + # + # That means when the user hits ^C, the parent process (click) terminates, + # but less is still alive, paging the output and messing up the terminal. + # + # If the user wants to make the pager exit on ^C, they should set + # `LESS='-K'`. It's not our decision to make. + while True: + try: + c.wait() + except KeyboardInterrupt: + pass + else: + break + + +def _tempfilepager( + generator: t.Iterable[str], cmd: str, color: t.Optional[bool] +) -> None: + """Page through text by invoking a program on a temporary file.""" + import tempfile + + fd, filename = tempfile.mkstemp() + # TODO: This never terminates if the passed generator never terminates. + text = "".join(generator) + if not color: + text = strip_ansi(text) + encoding = get_best_encoding(sys.stdout) + with open_stream(filename, "wb")[0] as f: + f.write(text.encode(encoding)) + try: + os.system(f'{cmd} "{filename}"') + finally: + os.close(fd) + os.unlink(filename) + + +def _nullpager( + stream: t.TextIO, generator: t.Iterable[str], color: t.Optional[bool] +) -> None: + """Simply print unformatted text. This is the ultimate fallback.""" + for text in generator: + if not color: + text = strip_ansi(text) + stream.write(text) + + +class Editor: + def __init__( + self, + editor: t.Optional[str] = None, + env: t.Optional[t.Mapping[str, str]] = None, + require_save: bool = True, + extension: str = ".txt", + ) -> None: + self.editor = editor + self.env = env + self.require_save = require_save + self.extension = extension + + def get_editor(self) -> str: + if self.editor is not None: + return self.editor + for key in "VISUAL", "EDITOR": + rv = os.environ.get(key) + if rv: + return rv + if WIN: + return "notepad" + for editor in "sensible-editor", "vim", "nano": + if os.system(f"which {editor} >/dev/null 2>&1") == 0: + return editor + return "vi" + + def edit_file(self, filename: str) -> None: + import subprocess + + editor = self.get_editor() + environ: t.Optional[t.Dict[str, str]] = None + + if self.env: + environ = os.environ.copy() + environ.update(self.env) + + try: + c = subprocess.Popen(f'{editor} "{filename}"', env=environ, shell=True) + exit_code = c.wait() + if exit_code != 0: + raise ClickException( + _("{editor}: Editing failed").format(editor=editor) + ) + except OSError as e: + raise ClickException( + _("{editor}: Editing failed: {e}").format(editor=editor, e=e) + ) from e + + def edit(self, text: t.Optional[t.AnyStr]) -> t.Optional[t.AnyStr]: + import tempfile + + if not text: + data = b"" + elif isinstance(text, (bytes, bytearray)): + data = text + else: + if text and not text.endswith("\n"): + text += "\n" + + if WIN: + data = text.replace("\n", "\r\n").encode("utf-8-sig") + else: + data = text.encode("utf-8") + + fd, name = tempfile.mkstemp(prefix="editor-", suffix=self.extension) + f: t.BinaryIO + + try: + with os.fdopen(fd, "wb") as f: + f.write(data) + + # If the filesystem resolution is 1 second, like Mac OS + # 10.12 Extended, or 2 seconds, like FAT32, and the editor + # closes very fast, require_save can fail. Set the modified + # time to be 2 seconds in the past to work around this. + os.utime(name, (os.path.getatime(name), os.path.getmtime(name) - 2)) + # Depending on the resolution, the exact value might not be + # recorded, so get the new recorded value. + timestamp = os.path.getmtime(name) + + self.edit_file(name) + + if self.require_save and os.path.getmtime(name) == timestamp: + return None + + with open(name, "rb") as f: + rv = f.read() + + if isinstance(text, (bytes, bytearray)): + return rv + + return rv.decode("utf-8-sig").replace("\r\n", "\n") # type: ignore + finally: + os.unlink(name) + + +def open_url(url: str, wait: bool = False, locate: bool = False) -> int: + import subprocess + + def _unquote_file(url: str) -> str: + from urllib.parse import unquote + + if url.startswith("file://"): + url = unquote(url[7:]) + + return url + + if sys.platform == "darwin": + args = ["open"] + if wait: + args.append("-W") + if locate: + args.append("-R") + args.append(_unquote_file(url)) + null = open("/dev/null", "w") + try: + return subprocess.Popen(args, stderr=null).wait() + finally: + null.close() + elif WIN: + if locate: + url = _unquote_file(url.replace('"', "")) + args = f'explorer /select,"{url}"' + else: + url = url.replace('"', "") + wait_str = "/WAIT" if wait else "" + args = f'start {wait_str} "" "{url}"' + return os.system(args) + elif CYGWIN: + if locate: + url = os.path.dirname(_unquote_file(url).replace('"', "")) + args = f'cygstart "{url}"' + else: + url = url.replace('"', "") + wait_str = "-w" if wait else "" + args = f'cygstart {wait_str} "{url}"' + return os.system(args) + + try: + if locate: + url = os.path.dirname(_unquote_file(url)) or "." + else: + url = _unquote_file(url) + c = subprocess.Popen(["xdg-open", url]) + if wait: + return c.wait() + return 0 + except OSError: + if url.startswith(("http://", "https://")) and not locate and not wait: + import webbrowser + + webbrowser.open(url) + return 0 + return 1 + + +def _translate_ch_to_exc(ch: str) -> t.Optional[BaseException]: + if ch == "\x03": + raise KeyboardInterrupt() + + if ch == "\x04" and not WIN: # Unix-like, Ctrl+D + raise EOFError() + + if ch == "\x1a" and WIN: # Windows, Ctrl+Z + raise EOFError() + + return None + + +if WIN: + import msvcrt + + @contextlib.contextmanager + def raw_terminal() -> t.Iterator[int]: + yield -1 + + def getchar(echo: bool) -> str: + # The function `getch` will return a bytes object corresponding to + # the pressed character. Since Windows 10 build 1803, it will also + # return \x00 when called a second time after pressing a regular key. + # + # `getwch` does not share this probably-bugged behavior. Moreover, it + # returns a Unicode object by default, which is what we want. + # + # Either of these functions will return \x00 or \xe0 to indicate + # a special key, and you need to call the same function again to get + # the "rest" of the code. The fun part is that \u00e0 is + # "latin small letter a with grave", so if you type that on a French + # keyboard, you _also_ get a \xe0. + # E.g., consider the Up arrow. This returns \xe0 and then \x48. The + # resulting Unicode string reads as "a with grave" + "capital H". + # This is indistinguishable from when the user actually types + # "a with grave" and then "capital H". + # + # When \xe0 is returned, we assume it's part of a special-key sequence + # and call `getwch` again, but that means that when the user types + # the \u00e0 character, `getchar` doesn't return until a second + # character is typed. + # The alternative is returning immediately, but that would mess up + # cross-platform handling of arrow keys and others that start with + # \xe0. Another option is using `getch`, but then we can't reliably + # read non-ASCII characters, because return values of `getch` are + # limited to the current 8-bit codepage. + # + # Anyway, Click doesn't claim to do this Right(tm), and using `getwch` + # is doing the right thing in more situations than with `getch`. + func: t.Callable[[], str] + + if echo: + func = msvcrt.getwche # type: ignore + else: + func = msvcrt.getwch # type: ignore + + rv = func() + + if rv in ("\x00", "\xe0"): + # \x00 and \xe0 are control characters that indicate special key, + # see above. + rv += func() + + _translate_ch_to_exc(rv) + return rv + + +else: + import tty + import termios + + @contextlib.contextmanager + def raw_terminal() -> t.Iterator[int]: + f: t.Optional[t.TextIO] + fd: int + + if not isatty(sys.stdin): + f = open("/dev/tty") + fd = f.fileno() + else: + fd = sys.stdin.fileno() + f = None + + try: + old_settings = termios.tcgetattr(fd) + + try: + tty.setraw(fd) + yield fd + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + sys.stdout.flush() + + if f is not None: + f.close() + except termios.error: + pass + + def getchar(echo: bool) -> str: + with raw_terminal() as fd: + ch = os.read(fd, 32).decode(get_best_encoding(sys.stdin), "replace") + + if echo and isatty(sys.stdout): + sys.stdout.write(ch) + + _translate_ch_to_exc(ch) + return ch diff --git a/venv/lib/python3.7/site-packages/click/_textwrap.py b/venv/lib/python3.7/site-packages/click/_textwrap.py new file mode 100644 index 0000000..b47dcbd --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/click/_unicodefun.py b/venv/lib/python3.7/site-packages/click/_unicodefun.py new file mode 100644 index 0000000..9cb30c3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/_unicodefun.py @@ -0,0 +1,100 @@ +import codecs +import os +from gettext import gettext as _ + + +def _verify_python_env() -> None: + """Ensures that the environment is good for Unicode.""" + try: + from locale import getpreferredencoding + + fs_enc = codecs.lookup(getpreferredencoding()).name + except Exception: + fs_enc = "ascii" + + if fs_enc != "ascii": + return + + extra = [ + _( + "Click will abort further execution because Python was" + " configured to use ASCII as encoding for the environment." + " Consult https://click.palletsprojects.com/unicode-support/" + " for mitigation steps." + ) + ] + + if os.name == "posix": + import subprocess + + try: + rv = subprocess.Popen( + ["locale", "-a"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + encoding="ascii", + errors="replace", + ).communicate()[0] + except OSError: + rv = "" + + good_locales = set() + has_c_utf8 = False + + for line in rv.splitlines(): + locale = line.strip() + + if locale.lower().endswith((".utf-8", ".utf8")): + good_locales.add(locale) + + if locale.lower() in ("c.utf8", "c.utf-8"): + has_c_utf8 = True + + if not good_locales: + extra.append( + _( + "Additional information: on this system no suitable" + " UTF-8 locales were discovered. This most likely" + " requires resolving by reconfiguring the locale" + " system." + ) + ) + elif has_c_utf8: + extra.append( + _( + "This system supports the C.UTF-8 locale which is" + " recommended. You might be able to resolve your" + " issue by exporting the following environment" + " variables:" + ) + ) + extra.append(" export LC_ALL=C.UTF-8\n export LANG=C.UTF-8") + else: + extra.append( + _( + "This system lists some UTF-8 supporting locales" + " that you can pick from. The following suitable" + " locales were discovered: {locales}" + ).format(locales=", ".join(sorted(good_locales))) + ) + + bad_locale = None + + for env_locale in os.environ.get("LC_ALL"), os.environ.get("LANG"): + if env_locale and env_locale.lower().endswith((".utf-8", ".utf8")): + bad_locale = env_locale + + if env_locale is not None: + break + + if bad_locale is not None: + extra.append( + _( + "Click discovered that you exported a UTF-8 locale" + " but the locale system could not pick up from it" + " because it does not exist. The exported locale is" + " {locale!r} but it is not supported." + ).format(locale=bad_locale) + ) + + raise RuntimeError("\n\n".join(extra)) diff --git a/venv/lib/python3.7/site-packages/click/_winconsole.py b/venv/lib/python3.7/site-packages/click/_winconsole.py new file mode 100644 index 0000000..6b20df3 --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/click/core.py b/venv/lib/python3.7/site-packages/click/core.py new file mode 100644 index 0000000..f226354 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/core.py @@ -0,0 +1,2953 @@ +import enum +import errno +import os +import sys +import typing +import typing as t +from collections import abc +from contextlib import contextmanager +from contextlib import ExitStack +from functools import partial +from functools import update_wrapper +from gettext import gettext as _ +from gettext import ngettext +from itertools import repeat + +from . import types +from ._unicodefun import _verify_python_env +from .exceptions import Abort +from .exceptions import BadParameter +from .exceptions import ClickException +from .exceptions import Exit +from .exceptions import MissingParameter +from .exceptions import UsageError +from .formatting import HelpFormatter +from .formatting import join_options +from .globals import pop_context +from .globals import push_context +from .parser import _flag_needs_value +from .parser import OptionParser +from .parser import split_opt +from .termui import confirm +from .termui import prompt +from .termui import style +from .utils import _detect_program_name +from .utils import _expand_args +from .utils import echo +from .utils import make_default_short_help +from .utils import make_str +from .utils import PacifyFlushWrapper + +if t.TYPE_CHECKING: + import typing_extensions as te + from .shell_completion import CompletionItem + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +V = t.TypeVar("V") + + +def _complete_visible_commands( + ctx: "Context", incomplete: str +) -> t.Iterator[t.Tuple[str, "Command"]]: + """List all the subcommands of a group that start with the + incomplete value and aren't hidden. + + :param ctx: Invocation context for the group. + :param incomplete: Value being completed. May be empty. + """ + multi = t.cast(MultiCommand, ctx.command) + + for name in multi.list_commands(ctx): + if name.startswith(incomplete): + command = multi.get_command(ctx, name) + + if command is not None and not command.hidden: + yield name, command + + +def _check_multicommand( + base_command: "MultiCommand", cmd_name: str, cmd: "Command", register: bool = False +) -> None: + if not base_command.chain or not isinstance(cmd, MultiCommand): + return + if register: + hint = ( + "It is not possible to add multi commands as children to" + " another multi command that is in chain mode." + ) + else: + hint = ( + "Found a multi command as subcommand to a multi command" + " that is in chain mode. This is not supported." + ) + raise RuntimeError( + f"{hint}. Command {base_command.name!r} is set to chain and" + f" {cmd_name!r} was added as a subcommand but it in itself is a" + f" multi command. ({cmd_name!r} is a {type(cmd).__name__}" + f" within a chained {type(base_command).__name__} named" + f" {base_command.name!r})." + ) + + +def batch(iterable: t.Iterable[V], batch_size: int) -> t.List[t.Tuple[V, ...]]: + return list(zip(*repeat(iter(iterable), batch_size))) + + +@contextmanager +def augment_usage_errors( + ctx: "Context", param: t.Optional["Parameter"] = None +) -> t.Iterator[None]: + """Context manager that attaches extra information to exceptions.""" + try: + yield + except BadParameter as e: + if e.ctx is None: + e.ctx = ctx + if param is not None and e.param is None: + e.param = param + raise + except UsageError as e: + if e.ctx is None: + e.ctx = ctx + raise + + +def iter_params_for_processing( + invocation_order: t.Sequence["Parameter"], + declaration_order: t.Sequence["Parameter"], +) -> t.List["Parameter"]: + """Given a sequence of parameters in the order as should be considered + for processing and an iterable of parameters that exist, this returns + a list in the correct order as they should be processed. + """ + + def sort_key(item: "Parameter") -> t.Tuple[bool, float]: + try: + idx: float = invocation_order.index(item) + except ValueError: + idx = float("inf") + + return not item.is_eager, idx + + return sorted(declaration_order, key=sort_key) + + +class ParameterSource(enum.Enum): + """This is an :class:`~enum.Enum` that indicates the source of a + parameter's value. + + Use :meth:`click.Context.get_parameter_source` to get the + source for a parameter by name. + + .. versionchanged:: 8.0 + Use :class:`~enum.Enum` and drop the ``validate`` method. + + .. versionchanged:: 8.0 + Added the ``PROMPT`` value. + """ + + COMMANDLINE = enum.auto() + """The value was provided by the command line args.""" + ENVIRONMENT = enum.auto() + """The value was provided with an environment variable.""" + DEFAULT = enum.auto() + """Used the default specified by the parameter.""" + DEFAULT_MAP = enum.auto() + """Used a default provided by :attr:`Context.default_map`.""" + PROMPT = enum.auto() + """Used a prompt to confirm a default or provide a value.""" + + +class Context: + """The context is a special internal object that holds state relevant + for the script execution at every single level. It's normally invisible + to commands unless they opt-in to getting access to it. + + The context is useful as it can pass internal objects around and can + control special execution features such as reading data from + environment variables. + + A context can be used as context manager in which case it will call + :meth:`close` on teardown. + + :param command: the command class for this context. + :param parent: the parent context. + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it is usually + the name of the script, for commands below it it's + the name of the script. + :param obj: an arbitrary object of user data. + :param auto_envvar_prefix: the prefix to use for automatic environment + variables. If this is `None` then reading + from environment variables is disabled. This + does not affect manually set environment + variables which are always read. + :param default_map: a dictionary (like object) with default values + for parameters. + :param terminal_width: the width of the terminal. The default is + inherit from parent context. If no context + defines the terminal width then auto + detection will be applied. + :param max_content_width: the maximum width for content rendered by + Click (this currently only affects help + pages). This defaults to 80 characters if + not overridden. In other words: even if the + terminal is larger than that, Click will not + format things wider than 80 characters by + default. In addition to that, formatters might + add some safety mapping on the right. + :param resilient_parsing: if this flag is enabled then Click will + parse without any interactivity or callback + invocation. Default values will also be + ignored. This is useful for implementing + things such as completion support. + :param allow_extra_args: if this is set to `True` then extra arguments + at the end will not raise an error and will be + kept on the context. The default is to inherit + from the command. + :param allow_interspersed_args: if this is set to `False` then options + and arguments cannot be mixed. The + default is to inherit from the command. + :param ignore_unknown_options: instructs click to ignore options it does + not know and keeps them for later + processing. + :param help_option_names: optionally a list of strings that define how + the default help parameter is named. The + default is ``['--help']``. + :param token_normalize_func: an optional function that is used to + normalize tokens (options, choices, + etc.). This for instance can be used to + implement case insensitive behavior. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are used in texts that Click prints which is by + default not the case. This for instance would affect + help output. + :param show_default: Show defaults for all options. If not set, + defaults to the value from a parent context. Overrides an + option's ``show_default`` argument. + + .. versionchanged:: 8.0 + The ``show_default`` parameter defaults to the value from the + parent context. + + .. versionchanged:: 7.1 + Added the ``show_default`` parameter. + + .. versionchanged:: 4.0 + Added the ``color``, ``ignore_unknown_options``, and + ``max_content_width`` parameters. + + .. versionchanged:: 3.0 + Added the ``allow_extra_args`` and ``allow_interspersed_args`` + parameters. + + .. versionchanged:: 2.0 + Added the ``resilient_parsing``, ``help_option_names``, and + ``token_normalize_func`` parameters. + """ + + #: The formatter class to create with :meth:`make_formatter`. + #: + #: .. versionadded:: 8.0 + formatter_class: t.Type["HelpFormatter"] = HelpFormatter + + def __init__( + self, + command: "Command", + parent: t.Optional["Context"] = None, + info_name: t.Optional[str] = None, + obj: t.Optional[t.Any] = None, + auto_envvar_prefix: t.Optional[str] = None, + default_map: t.Optional[t.Dict[str, t.Any]] = None, + terminal_width: t.Optional[int] = None, + max_content_width: t.Optional[int] = None, + resilient_parsing: bool = False, + allow_extra_args: t.Optional[bool] = None, + allow_interspersed_args: t.Optional[bool] = None, + ignore_unknown_options: t.Optional[bool] = None, + help_option_names: t.Optional[t.List[str]] = None, + token_normalize_func: t.Optional[t.Callable[[str], str]] = None, + color: t.Optional[bool] = None, + show_default: t.Optional[bool] = None, + ) -> None: + #: the parent context or `None` if none exists. + self.parent = parent + #: the :class:`Command` for this context. + self.command = command + #: the descriptive information name + self.info_name = info_name + #: Map of parameter names to their parsed values. Parameters + #: with ``expose_value=False`` are not stored. + self.params: t.Dict[str, t.Any] = {} + #: the leftover arguments. + self.args: t.List[str] = [] + #: protected arguments. These are arguments that are prepended + #: to `args` when certain parsing scenarios are encountered but + #: must be never propagated to another arguments. This is used + #: to implement nested parsing. + self.protected_args: t.List[str] = [] + + if obj is None and parent is not None: + obj = parent.obj + + #: the user object stored. + self.obj: t.Any = obj + self._meta: t.Dict[str, t.Any] = getattr(parent, "meta", {}) + + #: A dictionary (-like object) with defaults for parameters. + if ( + default_map is None + and info_name is not None + and parent is not None + and parent.default_map is not None + ): + default_map = parent.default_map.get(info_name) + + self.default_map: t.Optional[t.Dict[str, t.Any]] = default_map + + #: This flag indicates if a subcommand is going to be executed. A + #: group callback can use this information to figure out if it's + #: being executed directly or because the execution flow passes + #: onwards to a subcommand. By default it's None, but it can be + #: the name of the subcommand to execute. + #: + #: If chaining is enabled this will be set to ``'*'`` in case + #: any commands are executed. It is however not possible to + #: figure out which ones. If you require this knowledge you + #: should use a :func:`result_callback`. + self.invoked_subcommand: t.Optional[str] = None + + if terminal_width is None and parent is not None: + terminal_width = parent.terminal_width + + #: The width of the terminal (None is autodetection). + self.terminal_width: t.Optional[int] = terminal_width + + if max_content_width is None and parent is not None: + max_content_width = parent.max_content_width + + #: The maximum width of formatted content (None implies a sensible + #: default which is 80 for most things). + self.max_content_width: t.Optional[int] = max_content_width + + if allow_extra_args is None: + allow_extra_args = command.allow_extra_args + + #: Indicates if the context allows extra args or if it should + #: fail on parsing. + #: + #: .. versionadded:: 3.0 + self.allow_extra_args = allow_extra_args + + if allow_interspersed_args is None: + allow_interspersed_args = command.allow_interspersed_args + + #: Indicates if the context allows mixing of arguments and + #: options or not. + #: + #: .. versionadded:: 3.0 + self.allow_interspersed_args: bool = allow_interspersed_args + + if ignore_unknown_options is None: + ignore_unknown_options = command.ignore_unknown_options + + #: Instructs click to ignore options that a command does not + #: understand and will store it on the context for later + #: processing. This is primarily useful for situations where you + #: want to call into external programs. Generally this pattern is + #: strongly discouraged because it's not possibly to losslessly + #: forward all arguments. + #: + #: .. versionadded:: 4.0 + self.ignore_unknown_options: bool = ignore_unknown_options + + if help_option_names is None: + if parent is not None: + help_option_names = parent.help_option_names + else: + help_option_names = ["--help"] + + #: The names for the help options. + self.help_option_names: t.List[str] = help_option_names + + if token_normalize_func is None and parent is not None: + token_normalize_func = parent.token_normalize_func + + #: An optional normalization function for tokens. This is + #: options, choices, commands etc. + self.token_normalize_func: t.Optional[ + t.Callable[[str], str] + ] = token_normalize_func + + #: Indicates if resilient parsing is enabled. In that case Click + #: will do its best to not cause any failures and default values + #: will be ignored. Useful for completion. + self.resilient_parsing: bool = resilient_parsing + + # If there is no envvar prefix yet, but the parent has one and + # the command on this level has a name, we can expand the envvar + # prefix automatically. + if auto_envvar_prefix is None: + if ( + parent is not None + and parent.auto_envvar_prefix is not None + and self.info_name is not None + ): + auto_envvar_prefix = ( + f"{parent.auto_envvar_prefix}_{self.info_name.upper()}" + ) + else: + auto_envvar_prefix = auto_envvar_prefix.upper() + + if auto_envvar_prefix is not None: + auto_envvar_prefix = auto_envvar_prefix.replace("-", "_") + + self.auto_envvar_prefix: t.Optional[str] = auto_envvar_prefix + + if color is None and parent is not None: + color = parent.color + + #: Controls if styling output is wanted or not. + self.color: t.Optional[bool] = color + + if show_default is None and parent is not None: + show_default = parent.show_default + + #: Show option default values when formatting help text. + self.show_default: t.Optional[bool] = show_default + + self._close_callbacks: t.List[t.Callable[[], t.Any]] = [] + self._depth = 0 + self._parameter_source: t.Dict[str, ParameterSource] = {} + self._exit_stack = ExitStack() + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire CLI + structure. + + .. code-block:: python + + with Context(cli) as ctx: + info = ctx.to_info_dict() + + .. versionadded:: 8.0 + """ + return { + "command": self.command.to_info_dict(self), + "info_name": self.info_name, + "allow_extra_args": self.allow_extra_args, + "allow_interspersed_args": self.allow_interspersed_args, + "ignore_unknown_options": self.ignore_unknown_options, + "auto_envvar_prefix": self.auto_envvar_prefix, + } + + def __enter__(self) -> "Context": + self._depth += 1 + push_context(self) + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self._depth -= 1 + if self._depth == 0: + self.close() + pop_context() + + @contextmanager + def scope(self, cleanup: bool = True) -> t.Iterator["Context"]: + """This helper method can be used with the context object to promote + it to the current thread local (see :func:`get_current_context`). + The default behavior of this is to invoke the cleanup functions which + can be disabled by setting `cleanup` to `False`. The cleanup + functions are typically used for things such as closing file handles. + + If the cleanup is intended the context object can also be directly + used as a context manager. + + Example usage:: + + with ctx.scope(): + assert get_current_context() is ctx + + This is equivalent:: + + with ctx: + assert get_current_context() is ctx + + .. versionadded:: 5.0 + + :param cleanup: controls if the cleanup functions should be run or + not. The default is to run these functions. In + some situations the context only wants to be + temporarily pushed in which case this can be disabled. + Nested pushes automatically defer the cleanup. + """ + if not cleanup: + self._depth += 1 + try: + with self as rv: + yield rv + finally: + if not cleanup: + self._depth -= 1 + + @property + def meta(self) -> t.Dict[str, t.Any]: + """This is a dictionary which is shared with all the contexts + that are nested. It exists so that click utilities can store some + state here if they need to. It is however the responsibility of + that code to manage this dictionary well. + + The keys are supposed to be unique dotted strings. For instance + module paths are a good choice for it. What is stored in there is + irrelevant for the operation of click. However what is important is + that code that places data here adheres to the general semantics of + the system. + + Example usage:: + + LANG_KEY = f'{__name__}.lang' + + def set_language(value): + ctx = get_current_context() + ctx.meta[LANG_KEY] = value + + def get_language(): + return get_current_context().meta.get(LANG_KEY, 'en_US') + + .. versionadded:: 5.0 + """ + return self._meta + + def make_formatter(self) -> HelpFormatter: + """Creates the :class:`~click.HelpFormatter` for the help and + usage output. + + To quickly customize the formatter class used without overriding + this method, set the :attr:`formatter_class` attribute. + + .. versionchanged:: 8.0 + Added the :attr:`formatter_class` attribute. + """ + return self.formatter_class( + width=self.terminal_width, max_width=self.max_content_width + ) + + def with_resource(self, context_manager: t.ContextManager[V]) -> V: + """Register a resource as if it were used in a ``with`` + statement. The resource will be cleaned up when the context is + popped. + + Uses :meth:`contextlib.ExitStack.enter_context`. It calls the + resource's ``__enter__()`` method and returns the result. When + the context is popped, it closes the stack, which calls the + resource's ``__exit__()`` method. + + To register a cleanup function for something that isn't a + context manager, use :meth:`call_on_close`. Or use something + from :mod:`contextlib` to turn it into a context manager first. + + .. code-block:: python + + @click.group() + @click.option("--name") + @click.pass_context + def cli(ctx): + ctx.obj = ctx.with_resource(connect_db(name)) + + :param context_manager: The context manager to enter. + :return: Whatever ``context_manager.__enter__()`` returns. + + .. versionadded:: 8.0 + """ + return self._exit_stack.enter_context(context_manager) + + def call_on_close(self, f: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]: + """Register a function to be called when the context tears down. + + This can be used to close resources opened during the script + execution. Resources that support Python's context manager + protocol which would be used in a ``with`` statement should be + registered with :meth:`with_resource` instead. + + :param f: The function to execute on teardown. + """ + return self._exit_stack.callback(f) + + def close(self) -> None: + """Invoke all close callbacks registered with + :meth:`call_on_close`, and exit all context managers entered + with :meth:`with_resource`. + """ + self._exit_stack.close() + # In case the context is reused, create a new exit stack. + self._exit_stack = ExitStack() + + @property + def command_path(self) -> str: + """The computed command path. This is used for the ``usage`` + information on the help page. It's automatically created by + combining the info names of the chain of contexts to the root. + """ + rv = "" + if self.info_name is not None: + rv = self.info_name + if self.parent is not None: + parent_command_path = [self.parent.command_path] + + if isinstance(self.parent.command, Command): + for param in self.parent.command.get_params(self): + parent_command_path.extend(param.get_usage_pieces(self)) + + rv = f"{' '.join(parent_command_path)} {rv}" + return rv.lstrip() + + def find_root(self) -> "Context": + """Finds the outermost context.""" + node = self + while node.parent is not None: + node = node.parent + return node + + def find_object(self, object_type: t.Type[V]) -> t.Optional[V]: + """Finds the closest object of a given type.""" + node: t.Optional["Context"] = self + + while node is not None: + if isinstance(node.obj, object_type): + return node.obj + + node = node.parent + + return None + + def ensure_object(self, object_type: t.Type[V]) -> V: + """Like :meth:`find_object` but sets the innermost object to a + new instance of `object_type` if it does not exist. + """ + rv = self.find_object(object_type) + if rv is None: + self.obj = rv = object_type() + return rv + + @typing.overload + def lookup_default( + self, name: str, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @typing.overload + def lookup_default( + self, name: str, call: "te.Literal[False]" = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def lookup_default(self, name: str, call: bool = True) -> t.Optional[t.Any]: + """Get the default for a parameter from :attr:`default_map`. + + :param name: Name of the parameter. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + if self.default_map is not None: + value = self.default_map.get(name) + + if call and callable(value): + return value() + + return value + + return None + + def fail(self, message: str) -> "te.NoReturn": + """Aborts the execution of the program with a specific error + message. + + :param message: the error message to fail with. + """ + raise UsageError(message, self) + + def abort(self) -> "te.NoReturn": + """Aborts the script.""" + raise Abort() + + def exit(self, code: int = 0) -> "te.NoReturn": + """Exits the application with a given exit code.""" + raise Exit(code) + + def get_usage(self) -> str: + """Helper method to get formatted usage string for the current + context and command. + """ + return self.command.get_usage(self) + + def get_help(self) -> str: + """Helper method to get formatted help page for the current + context and command. + """ + return self.command.get_help(self) + + def _make_sub_context(self, command: "Command") -> "Context": + """Create a new context of the same type as this context, but + for a new command. + + :meta private: + """ + return type(self)(command, info_name=command.name, parent=self) + + def invoke( + __self, # noqa: B902 + __callback: t.Union["Command", t.Callable[..., t.Any]], + *args: t.Any, + **kwargs: t.Any, + ) -> t.Any: + """Invokes a command callback in exactly the way it expects. There + are two ways to invoke this method: + + 1. the first argument can be a callback and all other arguments and + keyword arguments are forwarded directly to the function. + 2. the first argument is a click command object. In that case all + arguments are forwarded as well but proper click parameters + (options and click arguments) must be keyword arguments and Click + will fill in defaults. + + Note that before Click 3.2 keyword arguments were not properly filled + in against the intention of this code and no context was created. For + more information about this change and why it was done in a bugfix + release see :ref:`upgrade-to-3.2`. + + .. versionchanged:: 8.0 + All ``kwargs`` are tracked in :attr:`params` so they will be + passed if :meth:`forward` is called at multiple levels. + """ + if isinstance(__callback, Command): + other_cmd = __callback + + if other_cmd.callback is None: + raise TypeError( + "The given command does not have a callback that can be invoked." + ) + else: + __callback = other_cmd.callback + + ctx = __self._make_sub_context(other_cmd) + + for param in other_cmd.params: + if param.name not in kwargs and param.expose_value: + kwargs[param.name] = param.type_cast_value( # type: ignore + ctx, param.get_default(ctx) + ) + + # Track all kwargs as params, so that forward() will pass + # them on in subsequent calls. + ctx.params.update(kwargs) + else: + ctx = __self + + with augment_usage_errors(__self): + with ctx: + return __callback(*args, **kwargs) + + def forward( + __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any # noqa: B902 + ) -> t.Any: + """Similar to :meth:`invoke` but fills in default keyword + arguments from the current context if the other command expects + it. This cannot invoke callbacks directly, only other commands. + + .. versionchanged:: 8.0 + All ``kwargs`` are tracked in :attr:`params` so they will be + passed if ``forward`` is called at multiple levels. + """ + # Can only forward to other commands, not direct callbacks. + if not isinstance(__cmd, Command): + raise TypeError("Callback is not a command.") + + for param in __self.params: + if param not in kwargs: + kwargs[param] = __self.params[param] + + return __self.invoke(__cmd, *args, **kwargs) + + def set_parameter_source(self, name: str, source: ParameterSource) -> None: + """Set the source of a parameter. This indicates the location + from which the value of the parameter was obtained. + + :param name: The name of the parameter. + :param source: A member of :class:`~click.core.ParameterSource`. + """ + self._parameter_source[name] = source + + def get_parameter_source(self, name: str) -> t.Optional[ParameterSource]: + """Get the source of a parameter. This indicates the location + from which the value of the parameter was obtained. + + This can be useful for determining when a user specified a value + on the command line that is the same as the default value. It + will be :attr:`~click.core.ParameterSource.DEFAULT` only if the + value was actually taken from the default. + + :param name: The name of the parameter. + :rtype: ParameterSource + + .. versionchanged:: 8.0 + Returns ``None`` if the parameter was not provided from any + source. + """ + return self._parameter_source.get(name) + + +class BaseCommand: + """The base command implements the minimal API contract of commands. + Most code will never use this as it does not implement a lot of useful + functionality but it can act as the direct subclass of alternative + parsing methods that do not depend on the Click parser. + + For instance, this can be used to bridge Click and other systems like + argparse or docopt. + + Because base commands do not implement a lot of the API that other + parts of Click take for granted, they are not supported for all + operations. For instance, they cannot be used with the decorators + usually and they have no built-in callback system. + + .. versionchanged:: 2.0 + Added the `context_settings` parameter. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + """ + + #: The context class to create with :meth:`make_context`. + #: + #: .. versionadded:: 8.0 + context_class: t.Type[Context] = Context + #: the default for the :attr:`Context.allow_extra_args` flag. + allow_extra_args = False + #: the default for the :attr:`Context.allow_interspersed_args` flag. + allow_interspersed_args = True + #: the default for the :attr:`Context.ignore_unknown_options` flag. + ignore_unknown_options = False + + def __init__( + self, + name: t.Optional[str], + context_settings: t.Optional[t.Dict[str, t.Any]] = None, + ) -> None: + #: the name the command thinks it has. Upon registering a command + #: on a :class:`Group` the group will default the command name + #: with this information. You should instead use the + #: :class:`Context`\'s :attr:`~Context.info_name` attribute. + self.name = name + + if context_settings is None: + context_settings = {} + + #: an optional dictionary with defaults passed to the context. + self.context_settings: t.Dict[str, t.Any] = context_settings + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire structure + below this command. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + :param ctx: A :class:`Context` representing this command. + + .. versionadded:: 8.0 + """ + return {"name": self.name} + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.name}>" + + def get_usage(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get usage") + + def get_help(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get help") + + def make_context( + self, + info_name: t.Optional[str], + args: t.List[str], + parent: t.Optional[Context] = None, + **extra: t.Any, + ) -> Context: + """This function when given an info name and arguments will kick + off the parsing and create a new :class:`Context`. It does not + invoke the actual command callback though. + + To quickly customize the context class used without overriding + this method, set the :attr:`context_class` attribute. + + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it's usually + the name of the script, for commands below it it's + the name of the command. + :param args: the arguments to parse as list of strings. + :param parent: the parent context if available. + :param extra: extra keyword arguments forwarded to the context + constructor. + + .. versionchanged:: 8.0 + Added the :attr:`context_class` attribute. + """ + for key, value in self.context_settings.items(): + if key not in extra: + extra[key] = value + + ctx = self.context_class( + self, info_name=info_name, parent=parent, **extra # type: ignore + ) + + with ctx.scope(cleanup=False): + self.parse_args(ctx, args) + return ctx + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + """Given a context and a list of arguments this creates the parser + and parses the arguments, then modifies the context as necessary. + This is automatically invoked by :meth:`make_context`. + """ + raise NotImplementedError("Base commands do not know how to parse arguments.") + + def invoke(self, ctx: Context) -> t.Any: + """Given a context, this invokes the command. The default + implementation is raising a not implemented error. + """ + raise NotImplementedError("Base commands are not invokable by default") + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of chained multi-commands. + + Any command could be part of a chained multi-command, so sibling + commands are valid at any point during command completion. Other + command classes will return more completions. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + while ctx.parent is not None: + ctx = ctx.parent + + if isinstance(ctx.command, MultiCommand) and ctx.command.chain: + results.extend( + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + if name not in ctx.protected_args + ) + + return results + + @typing.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": + ... + + @typing.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. + """ + # Verify that the environment is configured correctly, or reject + # further execution to avoid a broken script. + _verify_python_env() + + if args is None: + args = sys.argv[1:] + + if os.name == "nt" and windows_expand_args: + args = _expand_args(args) + else: + args = list(args) + + if prog_name is None: + prog_name = _detect_program_name() + + # Process shell completion requests and exit early. + self._main_shell_completion(extra, prog_name, complete_var) + + try: + try: + with self.make_context(prog_name, args, **extra) as ctx: + rv = self.invoke(ctx) + if not standalone_mode: + return rv + # it's not safe to `ctx.exit(rv)` here! + # note that `rv` may actually contain data like "1" which + # has obvious effects + # more subtle case: `rv=[None, None]` can come out of + # chained commands which all returned `None` -- so it's not + # even always obvious that `rv` indicates success/failure + # by its truthiness/falsiness + ctx.exit() + except (EOFError, KeyboardInterrupt): + echo(file=sys.stderr) + raise Abort() from None + except ClickException as e: + if not standalone_mode: + raise + e.show() + sys.exit(e.exit_code) + except OSError as e: + if e.errno == errno.EPIPE: + sys.stdout = t.cast(t.TextIO, PacifyFlushWrapper(sys.stdout)) + sys.stderr = t.cast(t.TextIO, PacifyFlushWrapper(sys.stderr)) + sys.exit(1) + else: + raise + except Exit as e: + if standalone_mode: + sys.exit(e.exit_code) + else: + # in non-standalone mode, return the exit code + # note that this is only reached if `self.invoke` above raises + # an Exit explicitly -- thus bypassing the check there which + # would return its result + # the results of non-standalone execution may therefore be + # somewhat ambiguous: if there are codepaths which lead to + # `ctx.exit(1)` and to `return 1`, the caller won't be able to + # tell the difference between the two + return e.exit_code + except Abort: + if not standalone_mode: + raise + echo(_("Aborted!"), file=sys.stderr) + sys.exit(1) + + def _main_shell_completion( + self, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: t.Optional[str] = None, + ) -> None: + """Check if the shell is asking for tab completion, process + that, then exit early. Called from :meth:`main` before the + program is invoked. + + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. Defaults to + ``_{PROG_NAME}_COMPLETE``. + """ + if complete_var is None: + complete_var = f"_{prog_name}_COMPLETE".replace("-", "_").upper() + + instruction = os.environ.get(complete_var) + + if not instruction: + return + + from .shell_completion import shell_complete + + rv = shell_complete(self, ctx_args, prog_name, complete_var, instruction) + sys.exit(rv) + + def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + """Alias for :meth:`main`.""" + return self.main(*args, **kwargs) + + +class Command(BaseCommand): + """Commands are the basic building block of command line interfaces in + Click. A basic command handles command line parsing and might dispatch + more parsing to commands nested below it. + + .. versionchanged:: 2.0 + Added the `context_settings` parameter. + .. versionchanged:: 8.0 + Added repr showing the command name + .. versionchanged:: 7.1 + Added the `no_args_is_help` 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. + :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. + """ + + def __init__( + self, + name: t.Optional[str], + context_settings: t.Optional[t.Dict[str, t.Any]] = None, + callback: t.Optional[t.Callable[..., t.Any]] = None, + params: t.Optional[t.List["Parameter"]] = None, + help: t.Optional[str] = None, + epilog: t.Optional[str] = None, + short_help: t.Optional[str] = None, + options_metavar: t.Optional[str] = "[OPTIONS]", + add_help_option: bool = True, + no_args_is_help: bool = False, + hidden: bool = False, + deprecated: bool = False, + ) -> None: + super().__init__(name, context_settings) + #: the callback to execute when the command fires. This might be + #: `None` in which case nothing happens. + self.callback = callback + #: the list of parameters for this command in the order they + #: should show up in the help page and execute. Eager parameters + #: will automatically be handled before non eager ones. + self.params: t.List["Parameter"] = params or [] + + # if a form feed (page break) is found in the help text, truncate help + # text to the content preceding the first form feed + if help and "\f" in help: + help = help.split("\f", 1)[0] + + self.help = help + self.epilog = epilog + self.options_metavar = options_metavar + self.short_help = short_help + self.add_help_option = add_help_option + self.no_args_is_help = no_args_is_help + self.hidden = hidden + self.deprecated = deprecated + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + info_dict.update( + params=[param.to_info_dict() for param in self.get_params(ctx)], + help=self.help, + epilog=self.epilog, + short_help=self.short_help, + hidden=self.hidden, + deprecated=self.deprecated, + ) + return info_dict + + def get_usage(self, ctx: Context) -> str: + """Formats the usage line into a string and returns it. + + Calls :meth:`format_usage` internally. + """ + formatter = ctx.make_formatter() + self.format_usage(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_params(self, ctx: Context) -> t.List["Parameter"]: + rv = self.params + help_option = self.get_help_option(ctx) + + if help_option is not None: + rv = [*rv, help_option] + + return rv + + def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the usage line into the formatter. + + This is a low-level method called by :meth:`get_usage`. + """ + pieces = self.collect_usage_pieces(ctx) + formatter.write_usage(ctx.command_path, " ".join(pieces)) + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + """Returns all the pieces that go into the usage line and returns + it as a list of strings. + """ + rv = [self.options_metavar] if self.options_metavar else [] + + for param in self.get_params(ctx): + rv.extend(param.get_usage_pieces(ctx)) + + return rv + + def get_help_option_names(self, ctx: Context) -> t.List[str]: + """Returns the names for the help option.""" + all_names = set(ctx.help_option_names) + for param in self.params: + all_names.difference_update(param.opts) + all_names.difference_update(param.secondary_opts) + return list(all_names) + + def get_help_option(self, ctx: Context) -> t.Optional["Option"]: + """Returns the help option object.""" + help_options = self.get_help_option_names(ctx) + + if not help_options or not self.add_help_option: + return None + + def show_help(ctx: Context, param: "Parameter", value: str) -> None: + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + return Option( + help_options, + is_flag=True, + is_eager=True, + expose_value=False, + callback=show_help, + help=_("Show this message and exit."), + ) + + def make_parser(self, ctx: Context) -> OptionParser: + """Creates the underlying option parser for this command.""" + parser = OptionParser(ctx) + for param in self.get_params(ctx): + param.add_to_parser(parser, ctx) + return parser + + def get_help(self, ctx: Context) -> str: + """Formats the help into a string and returns it. + + Calls :meth:`format_help` internally. + """ + formatter = ctx.make_formatter() + self.format_help(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_short_help_str(self, limit: int = 45) -> str: + """Gets short help for the command or makes it by shortening the + long help string. + """ + text = self.short_help or "" + + if not text and self.help: + text = make_default_short_help(self.help, limit) + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + return text.strip() + + def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help into the formatter if it exists. + + This is a low-level method called by :meth:`get_help`. + + This calls the following methods: + + - :meth:`format_usage` + - :meth:`format_help_text` + - :meth:`format_options` + - :meth:`format_epilog` + """ + self.format_usage(ctx, formatter) + self.format_help_text(ctx, formatter) + self.format_options(ctx, formatter) + self.format_epilog(ctx, formatter) + + def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help text to the formatter if it exists.""" + text = self.help or "" + + 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: + formatter.write_paragraph() + with formatter.indentation(): + formatter.write_text(self.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 + return args + + def invoke(self, ctx: Context) -> t.Any: + """Given a context, this invokes the attached callback (if it exists) + in the right way. + """ + if self.deprecated: + message = _( + "DeprecationWarning: The command {name!r} is deprecated." + ).format(name=self.name) + echo(style(message, fg="red"), err=True) + + if self.callback is not None: + return ctx.invoke(self.callback, **ctx.params) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options and chained multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + if incomplete and not incomplete[0].isalnum(): + for param in self.get_params(ctx): + if ( + not isinstance(param, Option) + or param.hidden + or ( + not param.multiple + and ctx.get_parameter_source(param.name) # type: ignore + is ParameterSource.COMMANDLINE + ) + ): + continue + + results.extend( + CompletionItem(name, help=param.help) + for name in [*param.opts, *param.secondary_opts] + if name.startswith(incomplete) + ) + + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class MultiCommand(Command): + """A multi command is the basic implementation of a command that + dispatches to subcommands. The most common version is the + :class:`Group`. + + :param invoke_without_command: this controls how the multi command itself + is invoked. By default it's only invoked + if a subcommand is provided. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is enabled by default if + `invoke_without_command` is disabled or disabled + if it's enabled. If enabled this will add + ``--help`` as argument if no arguments are + passed. + :param subcommand_metavar: the string that is used in the documentation + to indicate the subcommand place. + :param chain: if this is set to `True` chaining of multiple subcommands + is enabled. This restricts the form of commands in that + they cannot have optional arguments but it allows + multiple commands to be chained together. + :param result_callback: The result callback to attach to this multi + command. This can be set or changed later with the + :meth:`result_callback` decorator. + """ + + allow_extra_args = True + allow_interspersed_args = False + + def __init__( + self, + name: t.Optional[str] = None, + invoke_without_command: bool = False, + no_args_is_help: t.Optional[bool] = None, + subcommand_metavar: t.Optional[str] = None, + chain: bool = False, + result_callback: t.Optional[t.Callable[..., t.Any]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if no_args_is_help is None: + no_args_is_help = not invoke_without_command + + self.no_args_is_help = no_args_is_help + self.invoke_without_command = invoke_without_command + + if subcommand_metavar is None: + if chain: + subcommand_metavar = "COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]..." + else: + subcommand_metavar = "COMMAND [ARGS]..." + + self.subcommand_metavar = subcommand_metavar + self.chain = chain + # The result callback that is stored. This can be set or + # overridden with the :func:`result_callback` decorator. + self._result_callback = result_callback + + if self.chain: + for param in self.params: + if isinstance(param, Argument) and not param.required: + raise RuntimeError( + "Multi commands in chain mode cannot have" + " optional arguments." + ) + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + commands = {} + + for name in self.list_commands(ctx): + command = self.get_command(ctx, name) + + if command is None: + continue + + sub_ctx = ctx._make_sub_context(command) + + with sub_ctx.scope(cleanup=False): + commands[name] = command.to_info_dict(sub_ctx) + + info_dict.update(commands=commands, chain=self.chain) + return info_dict + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + rv = super().collect_usage_pieces(ctx) + rv.append(self.subcommand_metavar) + return rv + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + super().format_options(ctx, formatter) + self.format_commands(ctx, formatter) + + def result_callback(self, replace: bool = False) -> t.Callable[[F], F]: + """Adds a result callback to the command. By default if a + result callback is already registered this will chain them but + this can be disabled with the `replace` parameter. The result + callback is invoked with the return value of the subcommand + (or the list of return values from all subcommands if chaining + is enabled) as well as the parameters as they would be passed + to the main callback. + + Example:: + + @click.group() + @click.option('-i', '--input', default=23) + def cli(input): + return 42 + + @cli.result_callback() + def process_result(result, input): + return result + input + + :param replace: if set to `True` an already existing result + callback will be removed. + + .. versionchanged:: 8.0 + Renamed from ``resultcallback``. + + .. versionadded:: 3.0 + """ + + def decorator(f: F) -> F: + old_callback = self._result_callback + + if old_callback is None or replace: + self._result_callback = f + return f + + def function(__value, *args, **kwargs): # type: ignore + inner = old_callback(__value, *args, **kwargs) # type: ignore + return f(inner, *args, **kwargs) + + self._result_callback = rv = update_wrapper(t.cast(F, function), f) + return rv + + return decorator + + def resultcallback(self, replace: bool = False) -> t.Callable[[F], F]: + import warnings + + warnings.warn( + "'resultcallback' has been renamed to 'result_callback'." + " The old name will be removed in Click 8.1.", + DeprecationWarning, + stacklevel=2, + ) + return self.result_callback(replace=replace) + + 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 None for regular groups, or an empty list + # for chained groups. + with ctx: + super().invoke(ctx) + return _process_result([] if self.chain else None) + ctx.fail(_("Missing command.")) + + # Fetch args back out + args = [*ctx.protected_args, *ctx.args] + ctx.args = [] + ctx.protected_args = [] + + # If we're not in chain mode, we only allow the invocation of a + # single command but we also inform the current context about the + # name of the command to invoke. + if not self.chain: + # Make sure the context is entered so we do not clean up + # resources until the result processor has worked. + with ctx: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + ctx.invoked_subcommand = cmd_name + super().invoke(ctx) + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) + with sub_ctx: + return _process_result(sub_ctx.command.invoke(sub_ctx)) + + # In chain mode we create the contexts step by step, but after the + # base command has been invoked. Because at that point we do not + # know the subcommands yet, the invoked subcommand attribute is + # set to ``*`` to inform the command that subcommands are executed + # but nothing else. + with ctx: + ctx.invoked_subcommand = "*" if args else None + super().invoke(ctx) + + # Otherwise we make every single context and invoke them in a + # chain. In that case the return value to the result processor + # is the list of all invoked subcommand's results. + contexts = [] + while args: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + sub_ctx = cmd.make_context( + cmd_name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + ) + contexts.append(sub_ctx) + args, sub_ctx.args = sub_ctx.args, [] + + rv = [] + for sub_ctx in contexts: + with sub_ctx: + rv.append(sub_ctx.command.invoke(sub_ctx)) + return _process_result(rv) + + def resolve_command( + self, ctx: Context, args: t.List[str] + ) -> t.Tuple[t.Optional[str], t.Optional[Command], t.List[str]]: + cmd_name = make_str(args[0]) + original_cmd_name = cmd_name + + # Get the command + cmd = self.get_command(ctx, cmd_name) + + # If we can't find the command but there is a normalization + # function available, we try with that one. + if cmd is None and ctx.token_normalize_func is not None: + cmd_name = ctx.token_normalize_func(cmd_name) + cmd = self.get_command(ctx, cmd_name) + + # If we don't find the command we want to show an error message + # to the user that it was not provided. However, there is + # something else we should do: if the first argument looks like + # an option we want to kick off parsing again for arguments to + # resolve things like --help which now should go to the main + # place. + if cmd is None and not ctx.resilient_parsing: + if split_opt(cmd_name)[0]: + self.parse_args(ctx, ctx.args) + ctx.fail(_("No such command {name!r}.").format(name=original_cmd_name)) + return cmd_name if cmd else None, cmd, args[1:] + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + """Given a context and a command name, this returns a + :class:`Command` object if it exists or returns `None`. + """ + raise NotImplementedError + + def list_commands(self, ctx: Context) -> t.List[str]: + """Returns a list of subcommand names in the order they should + appear. + """ + return [] + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options, subcommands, and chained + multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results = [ + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + ] + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class Group(MultiCommand): + """A group allows a command to have subcommands attached. This is + the most common way to implement nesting in Click. + + :param name: The name of the group command. + :param commands: A dict mapping names to :class:`Command` objects. + Can also be a list of :class:`Command`, which will use + :attr:`Command.name` to create the dict. + :param attrs: Other command arguments described in + :class:`MultiCommand`, :class:`Command`, and + :class:`BaseCommand`. + + .. versionchanged:: 8.0 + The ``commmands`` argument can be a list of command objects. + """ + + #: If set, this is used by the group's :meth:`command` decorator + #: as the default :class:`Command` class. This is useful to make all + #: subcommands use a custom command class. + #: + #: .. versionadded:: 8.0 + command_class: t.Optional[t.Type[Command]] = None + + #: If set, this is used by the group's :meth:`group` decorator + #: as the default :class:`Group` class. This is useful to make all + #: subgroups use a custom group class. + #: + #: If set to the special value :class:`type` (literally + #: ``group_class = type``), this group's class will be used as the + #: default class. This makes a custom group class continue to make + #: custom groups. + #: + #: .. versionadded:: 8.0 + group_class: t.Optional[t.Union[t.Type["Group"], t.Type[type]]] = None + # Literal[type] isn't valid, so use Type[type] + + def __init__( + self, + name: t.Optional[str] = None, + commands: t.Optional[t.Union[t.Dict[str, Command], t.Sequence[Command]]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if commands is None: + commands = {} + elif isinstance(commands, abc.Sequence): + commands = {c.name: c for c in commands if c.name is not None} + + #: The registered subcommands by their exported names. + self.commands: t.Dict[str, Command] = commands + + def add_command(self, cmd: Command, name: t.Optional[str] = None) -> None: + """Registers another :class:`Command` with this group. If the name + is not provided, the name of the command is used. + """ + name = name or cmd.name + if name is None: + raise TypeError("Command has no name.") + _check_multicommand(self, name, cmd, register=True) + self.commands[name] = cmd + + def command( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], 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.0 + Added the :attr:`command_class` attribute. + """ + from .decorators import command + + if self.command_class is not None and "cls" not in kwargs: + kwargs["cls"] = self.command_class + + def decorator(f: t.Callable[..., t.Any]) -> Command: + cmd = command(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + return decorator + + def group( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], "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.0 + Added the :attr:`group_class` attribute. + """ + from .decorators import group + + if self.group_class is not None and "cls" not in kwargs: + 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(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + return decorator + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + return self.commands.get(cmd_name) + + def list_commands(self, ctx: Context) -> t.List[str]: + return sorted(self.commands) + + +class CommandCollection(MultiCommand): + """A command collection is a multi command that merges multiple multi + commands together into one. This is a straightforward implementation + that accepts a list of different multi commands as sources and + provides all the commands for each of them. + """ + + def __init__( + self, + name: t.Optional[str] = None, + sources: t.Optional[t.List[MultiCommand]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + #: The list of registered multi commands. + self.sources: t.List[MultiCommand] = sources or [] + + def add_source(self, multi_cmd: MultiCommand) -> None: + """Adds a new multi command to the chain dispatcher.""" + self.sources.append(multi_cmd) + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + for source in self.sources: + rv = source.get_command(ctx, cmd_name) + + if rv is not None: + if self.chain: + _check_multicommand(self, cmd_name, rv) + + return rv + + return None + + def list_commands(self, ctx: Context) -> t.List[str]: + rv: t.Set[str] = set() + + for source in self.sources: + rv.update(source.list_commands(ctx)) + + return sorted(rv) + + +def _check_iter(value: t.Any) -> t.Iterator[t.Any]: + """Check if the value is iterable but not a string. Raises a type + error, or return an iterator over the value. + """ + if isinstance(value, str): + raise TypeError + + return iter(value) + + +class Parameter: + r"""A parameter to a command comes in two versions: they are either + :class:`Option`\s or :class:`Argument`\s. Other subclasses are currently + not supported by design as some of the internals for parsing are + intentionally not finalized. + + Some settings are supported by both options and arguments. + + :param param_decls: the parameter declarations for this option or + argument. This is a list of flags or argument + names. + :param type: the type that should be used. Either a :class:`ParamType` + or a Python type. The later is converted into the former + automatically if supported. + :param required: controls if this is optional or not. + :param default: the default value if omitted. This can also be a callable, + in which case it's invoked when the default is needed + without any arguments. + :param callback: A function to further process or validate the value + after type conversion. It is called as ``f(ctx, param, value)`` + and must return the value. It is called for all sources, + including prompts. + :param nargs: the number of arguments to match. If not ``1`` the return + value is a tuple instead of single value. The default for + nargs is ``1`` (except if the type is a tuple, then it's + the arity of the tuple). If ``nargs=-1``, all remaining + parameters are collected. + :param metavar: how the value is represented in the help page. + :param expose_value: if this is `True` then the value is passed onwards + to the command callback and stored on the context, + otherwise it's skipped. + :param is_eager: eager values are processed before non eager ones. This + should not be set for arguments or it will inverse the + order of processing. + :param envvar: a string or list of strings that are environment variables + that should be checked. + :param shell_complete: A function that returns custom shell + completions. Used instead of the param's type completion if + given. Takes ``ctx, param, incomplete`` and must return a list + of :class:`~click.shell_completion.CompletionItem` or a list of + strings. + + .. versionchanged:: 8.0 + ``process_value`` validates required parameters and bounded + ``nargs``, and invokes the parameter callback before returning + the value. This allows the callback to validate prompts. + ``full_process_value`` is removed. + + .. versionchanged:: 8.0 + ``autocompletion`` is renamed to ``shell_complete`` and has new + semantics described above. The old name is deprecated and will + be removed in 8.1, until then it will be wrapped to match the + new requirements. + + .. versionchanged:: 8.0 + For ``multiple=True, nargs>1``, the default must be a list of + tuples. + + .. versionchanged:: 8.0 + Setting a default is no longer required for ``nargs>1``, it will + default to ``None``. ``multiple=True`` or ``nargs=-1`` will + default to ``()``. + + .. versionchanged:: 7.1 + Empty environment variables are ignored rather than taking the + empty string value. This makes it possible for scripts to clear + variables if they can't unset them. + + .. versionchanged:: 2.0 + Changed signature for parameter callback to also be passed the + parameter. The old callback format will still work, but it will + raise a warning to give you a chance to migrate the code easier. + """ + + param_type_name = "parameter" + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + type: t.Optional[t.Union[types.ParamType, t.Any]] = None, + required: bool = False, + default: t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]] = None, + callback: t.Optional[t.Callable[[Context, "Parameter", t.Any], t.Any]] = None, + nargs: t.Optional[int] = None, + multiple: bool = False, + metavar: t.Optional[str] = None, + expose_value: bool = True, + is_eager: bool = False, + envvar: t.Optional[t.Union[str, t.Sequence[str]]] = None, + shell_complete: t.Optional[ + t.Callable[ + [Context, "Parameter", str], + t.Union[t.List["CompletionItem"], t.List[str]], + ] + ] = None, + autocompletion: t.Optional[ + t.Callable[ + [Context, t.List[str], str], t.List[t.Union[t.Tuple[str, str], str]] + ] + ] = None, + ) -> None: + self.name, self.opts, self.secondary_opts = self._parse_decls( + param_decls or (), expose_value + ) + self.type = types.convert_type(type, default) + + # Default nargs to what the type tells us if we have that + # information available. + if nargs is None: + if self.type.is_composite: + nargs = self.type.arity + else: + nargs = 1 + + self.required = required + self.callback = callback + self.nargs = nargs + self.multiple = multiple + self.expose_value = expose_value + self.default = default + self.is_eager = is_eager + self.metavar = metavar + self.envvar = envvar + + if autocompletion is not None: + import warnings + + warnings.warn( + "'autocompletion' is renamed to 'shell_complete'. The old name is" + " deprecated and will be removed in Click 8.1. See the docs about" + " 'Parameter' for information about new behavior.", + DeprecationWarning, + stacklevel=2, + ) + + def shell_complete( + ctx: Context, param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + from click.shell_completion import CompletionItem + + out = [] + + for c in autocompletion(ctx, [], incomplete): # type: ignore + if isinstance(c, tuple): + c = CompletionItem(c[0], help=c[1]) + elif isinstance(c, str): + c = CompletionItem(c) + + if c.value.startswith(incomplete): + out.append(c) + + return out + + 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 + + @typing.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @typing.overload + def get_default( + self, ctx: Context, call: bool = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def get_default( + self, ctx: Context, call: bool = True + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + """Get the default for the parameter. Tries + :meth:`Context.lookup_default` first, then the local default. + + :param ctx: Current context. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0.2 + Type casting is no longer performed when getting a default. + + .. versionchanged:: 8.0.1 + Type casting can fail in resilient parsing mode. Invalid + defaults will not prevent showing help text. + + .. versionchanged:: 8.0 + Looks at ``ctx.default_map`` first. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + value = ctx.lookup_default(self.name, call=False) # type: ignore + + if value is None: + value = self.default + + if call and callable(value): + value = value() + + return value + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + raise NotImplementedError() + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, t.Any] + ) -> t.Tuple[t.Any, ParameterSource]: + value = opts.get(self.name) # type: ignore + source = ParameterSource.COMMANDLINE + + if value is None: + value = self.value_from_envvar(ctx) + source = ParameterSource.ENVIRONMENT + + if value is None: + value = ctx.lookup_default(self.name) # type: ignore + source = ParameterSource.DEFAULT_MAP + + if value is None: + value = self.get_default(ctx) + source = ParameterSource.DEFAULT + + return value, source + + def type_cast_value(self, ctx: Context, value: t.Any) -> t.Any: + """Convert and validate a value against the option's + :attr:`type`, :attr:`multiple`, and :attr:`nargs`. + """ + if value is None: + return () if self.multiple or self.nargs == -1 else None + + def check_iter(value: t.Any) -> t.Iterator: + try: + return _check_iter(value) + except TypeError: + # This should only happen when passing in args manually, + # the parser should construct an iterable when parsing + # the command line. + raise BadParameter( + _("Value must be an iterable."), ctx=ctx, param=self + ) from None + + if self.nargs == 1 or self.type.is_composite: + convert: t.Callable[[t.Any], t.Any] = partial( + self.type, param=self, ctx=ctx + ) + elif self.nargs == -1: + + def convert(value: t.Any) -> t.Tuple: + return tuple(self.type(x, self, ctx) for x in check_iter(value)) + + else: # nargs > 1 + + def convert(value: t.Any) -> t.Tuple: + value = tuple(check_iter(value)) + + if len(value) != self.nargs: + raise BadParameter( + ngettext( + "Takes {nargs} values but 1 was given.", + "Takes {nargs} values but {len} were given.", + len(value), + ).format(nargs=self.nargs, len=len(value)), + ctx=ctx, + param=self, + ) + + return tuple(self.type(x, self, ctx) for x in value) + + if self.multiple: + return tuple(convert(x) for x in check_iter(value)) + + return convert(value) + + def value_is_missing(self, value: t.Any) -> bool: + if value is None: + return True + + if (self.nargs != 1 or self.multiple) and value == (): + return True + + return False + + def process_value(self, ctx: Context, value: t.Any) -> t.Any: + value = self.type_cast_value(ctx, value) + + if self.required and self.value_is_missing(value): + raise MissingParameter(ctx=ctx, param=self) + + if self.callback is not None: + value = self.callback(ctx, self, value) + + return value + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + if self.envvar is None: + return None + + if isinstance(self.envvar, str): + rv = os.environ.get(self.envvar) + + if rv: + return rv + else: + for envvar in self.envvar: + rv = os.environ.get(envvar) + + if rv: + return rv + + return None + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is not None and self.nargs != 1: + rv = self.type.split_envvar_value(rv) + + return rv + + def handle_parse_result( + self, ctx: Context, opts: t.Mapping[str, t.Any], args: t.List[str] + ) -> t.Tuple[t.Any, t.List[str]]: + with augment_usage_errors(ctx, param=self): + value, source = self.consume_value(ctx, opts) + ctx.set_parameter_source(self.name, source) # type: ignore + + try: + value = self.process_value(ctx, value) + except Exception: + if not ctx.resilient_parsing: + raise + + value = None + + if self.expose_value: + ctx.params[self.name] = value # type: ignore + + return value, args + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + pass + + def get_usage_pieces(self, ctx: Context) -> t.List[str]: + return [] + + def get_error_hint(self, ctx: Context) -> str: + """Get a stringified version of the param for use in error messages to + indicate which param caused the error. + """ + hint_list = self.opts or [self.human_readable_name] + return " / ".join(f"'{x}'" for x in hint_list) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. If a + ``shell_complete`` function was given during init, it is used. + Otherwise, the :attr:`type` + :meth:`~click.types.ParamType.shell_complete` function is used. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + if self._custom_shell_complete is not None: + results = self._custom_shell_complete(ctx, self, incomplete) + + if results and isinstance(results[0], str): + from click.shell_completion import CompletionItem + + results = [CompletionItem(c) for c in results] + + return t.cast(t.List["CompletionItem"], results) + + return self.type.shell_complete(ctx, self, incomplete) + + +class Option(Parameter): + """Options are usually optional values on the command line and + have some extra features that arguments don't have. + + All other parameters are passed onwards to the parameter constructor. + + :param show_default: controls if the default value should be shown on the + help page. Normally, defaults are not shown. If this + value is a string, it shows the string instead of the + value. This is particularly useful for dynamic options. + :param show_envvar: controls if an environment variable should be shown on + the help page. Normally, environment variables + are not shown. + :param prompt: if set to `True` or a non empty string then the user will be + prompted for input. If set to `True` the prompt will be the + option name capitalized. + :param confirmation_prompt: Prompt a second time to confirm the + value if it was prompted for. Can be set to a string instead of + ``True`` to customize the message. + :param prompt_required: If set to ``False``, the user will be + prompted for input only when the option was specified as a flag + without a value. + :param hide_input: if this is `True` then the input on the prompt will be + hidden from the user. This is useful for password + input. + :param is_flag: forces this option to act as a flag. The default is + auto detection. + :param flag_value: which value should be used for this flag if it's + enabled. This is set to a boolean automatically if + the option string contains a slash to mark two options. + :param multiple: if this is set to `True` then the argument is accepted + multiple times and recorded. This is similar to ``nargs`` + in how it works but supports arbitrary number of + arguments. + :param count: this flag makes an option increment an integer. + :param allow_from_autoenv: if this is enabled then the value of this + parameter will be pulled from an environment + variable in case a prefix is defined on the + context. + :param help: the help string. + :param hidden: hide this option from help outputs. + + .. versionchanged:: 8.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] = False, + 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: + 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 = t.cast(str, prompt) + + self.prompt = prompt_text + self.confirmation_prompt = confirmation_prompt + self.prompt_required = prompt_required + self.hide_input = hide_input + self.hidden = hidden + + # If prompt is enabled but not required, then the option can be + # used as a flag to indicate using prompt or flag_value. + self._flag_needs_value = self.prompt is not None and not self.prompt_required + + if is_flag is None: + if flag_value is not None: + # Implicitly a flag because flag_value was set. + is_flag = True + elif self._flag_needs_value: + # Not a flag, but when used as a flag it shows a prompt. + is_flag = False + else: + # Implicitly a flag because flag options were given. + is_flag = bool(self.secondary_opts) + elif is_flag is False and not self._flag_needs_value: + # Not a flag, and prompt is not enabled, can be used as a + # flag if flag_value is set. + self._flag_needs_value = flag_value is not None + + if is_flag and default_is_missing: + self.default: t.Union[t.Any, t.Callable[[], t.Any]] = False + + if flag_value is None: + flag_value = not self.default + + if is_flag and type is None: + # Re-guess the type from the flag value instead of the + # default. + self.type = types.convert_type(None, flag_value) + + self.is_flag: bool = is_flag + self.is_bool_flag = is_flag and isinstance(self.type, types.BoolParamType) + self.flag_value: t.Any = flag_value + + # Counting + self.count = count + if count: + if type is None: + self.type = types.IntRange(min=0) + if default_is_missing: + self.default = 0 + + self.allow_from_autoenv = allow_from_autoenv + self.help = help + self.show_default = show_default + self.show_choices = show_choices + self.show_envvar = show_envvar + + if __debug__: + if self.nargs == -1: + raise TypeError("nargs=-1 is not supported for options.") + + if self.prompt and self.is_flag and not self.is_bool_flag: + raise TypeError("'prompt' is not valid for non-boolean flag.") + + if not self.is_bool_flag and self.secondary_opts: + raise TypeError("Secondary flag is not valid for non-boolean flag.") + + if self.is_bool_flag and self.hide_input and self.prompt is not None: + raise TypeError( + "'prompt' with 'hide_input' is not valid for boolean flag." + ) + + if self.count: + if self.multiple: + raise TypeError("'count' is not valid with 'multiple'.") + + if self.is_flag: + raise TypeError("'count' is not valid with 'is_flag'.") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + help=self.help, + prompt=self.prompt, + is_flag=self.is_flag, + flag_value=self.flag_value, + count=self.count, + hidden=self.hidden, + ) + return info_dict + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + opts = [] + secondary_opts = [] + name = None + possible_names = [] + + for decl in decls: + if decl.isidentifier(): + if name is not None: + raise TypeError(f"Name '{name}' defined twice") + name = decl + else: + split_char = ";" if decl[:1] == "/" else "/" + if split_char in decl: + first, second = decl.split(split_char, 1) + first = first.rstrip() + if first: + possible_names.append(split_opt(first)) + opts.append(first) + second = second.lstrip() + if second: + secondary_opts.append(second.lstrip()) + if first == second: + raise ValueError( + f"Boolean option {decl!r} cannot use the" + " same flag for true/false." + ) + else: + possible_names.append(split_opt(decl)) + opts.append(decl) + + if name is None and possible_names: + possible_names.sort(key=lambda x: -len(x[0])) # group long options first + name = possible_names[0][1].replace("-", "_").lower() + if not name.isidentifier(): + name = None + + if name is None: + if not expose_value: + return None, opts, secondary_opts + raise TypeError("Could not determine name for option") + + if not opts and not secondary_opts: + raise TypeError( + f"No options defined but a name was passed ({name})." + " Did you mean to declare an argument instead? Did" + f" you mean to pass '--{name}'?" + ) + + return name, opts, secondary_opts + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + if self.multiple: + action = "append" + elif self.count: + action = "count" + else: + action = "store" + + if self.is_flag: + action = f"{action}_const" + + if self.is_bool_flag and self.secondary_opts: + parser.add_option( + obj=self, opts=self.opts, dest=self.name, action=action, const=True + ) + parser.add_option( + obj=self, + opts=self.secondary_opts, + dest=self.name, + action=action, + const=False, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + const=self.flag_value, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + nargs=self.nargs, + ) + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + if self.hidden: + return None + + any_prefix_is_slash = False + + def _write_opts(opts: t.Sequence[str]) -> str: + nonlocal any_prefix_is_slash + + rv, any_slashes = join_options(opts) + + if any_slashes: + any_prefix_is_slash = True + + if not self.is_flag and not self.count: + rv += f" {self.make_metavar()}" + + return rv + + rv = [_write_opts(self.opts)] + + if self.secondary_opts: + rv.append(_write_opts(self.secondary_opts)) + + help = self.help or "" + extra = [] + + if self.show_envvar: + envvar = self.envvar + + if envvar is None: + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + + if envvar is not None: + var_str = ( + envvar + if isinstance(envvar, str) + else ", ".join(str(d) for d in envvar) + ) + extra.append(_("env var: {var}").format(var=var_str)) + + # Temporarily enable resilient parsing to avoid type casting + # failing for the default. Might be possible to extend this to + # help formatting in general. + resilient = ctx.resilient_parsing + ctx.resilient_parsing = True + + try: + default_value = self.get_default(ctx, call=False) + finally: + ctx.resilient_parsing = resilient + + show_default_is_str = isinstance(self.show_default, str) + + if show_default_is_str or ( + default_value is not None and (self.show_default or ctx.show_default) + ): + 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 callable(default_value): + default_string = _("(dynamic)") + elif self.is_bool_flag and self.secondary_opts: + # For boolean flags that have distinct True/False opts, + # use the opt without prefix instead of the value. + default_string = split_opt( + (self.opts if self.default else self.secondary_opts)[0] + )[1] + 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 + + @typing.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @typing.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 the default one in which case we return the flag + # value as default. + if self.is_flag and not self.is_bool_flag: + for param in ctx.command.params: + if param.name == self.name and param.default: + return param.flag_value # type: ignore + + return None + + return super().get_default(ctx, call=call) + + def prompt_for_value(self, ctx: Context) -> t.Any: + """This is an alternative flow that can be activated in the full + value processing if a value does not exist. It will prompt the + user until a valid value exists and then returns the processed + value as result. + """ + assert self.prompt is not None + + # Calculate the default before prompting anything to be stable. + default = self.get_default(ctx) + + # If this is a prompt for a flag we need to handle this + # differently. + if self.is_bool_flag: + return confirm(self.prompt, default) + + return prompt( + self.prompt, + default=default, + type=self.type, + hide_input=self.hide_input, + show_choices=self.show_choices, + confirmation_prompt=self.confirmation_prompt, + value_proc=lambda x: self.process_value(ctx, x), + ) + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + rv = super().resolve_envvar_value(ctx) + + if rv is not None: + return rv + + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + rv = os.environ.get(envvar) + + return rv + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is None: + return None + + value_depth = (self.nargs != 1) + bool(self.multiple) + + if value_depth > 0: + rv = self.type.split_envvar_value(rv) + + if self.multiple and self.nargs != 1: + rv = batch(rv, self.nargs) + + return rv + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, "Parameter"] + ) -> t.Tuple[t.Any, ParameterSource]: + value, source = super().consume_value(ctx, opts) + + # The parser will emit a sentinel value if the option can be + # given as a flag without a value. This is different from None + # to distinguish from the flag not being given at all. + if value is _flag_needs_value: + if self.prompt is not None and not ctx.resilient_parsing: + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + else: + value = self.flag_value + source = ParameterSource.COMMANDLINE + + elif ( + self.multiple + and value is not None + and any(v is _flag_needs_value for v in value) + ): + value = [self.flag_value if v is _flag_needs_value else v for v in value] + source = ParameterSource.COMMANDLINE + + # The value wasn't set, or used the param's default, prompt if + # prompting is enabled. + elif ( + source in {None, ParameterSource.DEFAULT} + and self.prompt is not None + and (self.required or self.prompt_required) + and not ctx.resilient_parsing + ): + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + + return value, source + + +class Argument(Parameter): + """Arguments are positional parameters to a command. They generally + provide fewer features than options but can have infinite ``nargs`` + and are required by default. + + All parameters are passed onwards to the parameter constructor. + """ + + param_type_name = "argument" + + def __init__( + self, + param_decls: t.Sequence[str], + required: t.Optional[bool] = None, + **attrs: t.Any, + ) -> None: + if required is None: + if attrs.get("default") is not None: + required = False + else: + required = attrs.get("nargs", 1) > 0 + + if "multiple" in attrs: + raise TypeError("__init__() got an unexpected keyword argument 'multiple'.") + + super().__init__(param_decls, required=required, **attrs) + + if __debug__: + if self.default is not None and self.nargs == -1: + raise TypeError("'default' is not supported for nargs=-1.") + + @property + def human_readable_name(self) -> str: + if self.metavar is not None: + return self.metavar + return self.name.upper() # type: ignore + + def make_metavar(self) -> str: + if self.metavar is not None: + return self.metavar + var = self.type.get_metavar(self) + if not var: + var = self.name.upper() # type: ignore + if not self.required: + var = f"[{var}]" + if self.nargs != 1: + var += "..." + return var + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + if not decls: + if not expose_value: + return None, [], [] + raise TypeError("Could not determine name for argument") + if len(decls) == 1: + name = arg = decls[0] + name = name.replace("-", "_").lower() + else: + raise TypeError( + "Arguments take exactly one parameter declaration, got" + f" {len(decls)}." + ) + return name, [arg], [] + + def get_usage_pieces(self, ctx: Context) -> t.List[str]: + return [self.make_metavar()] + + def get_error_hint(self, ctx: Context) -> str: + return f"'{self.make_metavar()}'" + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + parser.add_argument(dest=self.name, nargs=self.nargs, obj=self) diff --git a/venv/lib/python3.7/site-packages/click/decorators.py b/venv/lib/python3.7/site-packages/click/decorators.py new file mode 100644 index 0000000..f1cc005 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/decorators.py @@ -0,0 +1,436 @@ +import inspect +import types +import typing as t +from functools import update_wrapper +from gettext import gettext as _ + +from .core import Argument +from .core import Command +from .core import Context +from .core import Group +from .core import Option +from .core import Parameter +from .globals import get_current_context +from .utils import echo + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +FC = t.TypeVar("FC", t.Callable[..., t.Any], Command) + + +def pass_context(f: F) -> F: + """Marks a callback as wanting to receive the current context + object as first argument. + """ + + def new_func(*args, **kwargs): # type: ignore + return f(get_current_context(), *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def pass_obj(f: F) -> F: + """Similar to :func:`pass_context`, but only pass the object on the + context onwards (:attr:`Context.obj`). This is useful if that object + represents the state of a nested system. + """ + + def new_func(*args, **kwargs): # type: ignore + return f(get_current_context().obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def make_pass_decorator( + object_type: t.Type, ensure: bool = False +) -> "t.Callable[[F], F]": + """Given an object type this creates a decorator that will work + similar to :func:`pass_obj` but instead of passing the object of the + current context, it will find the innermost context of type + :func:`object_type`. + + This generates a decorator that works roughly like this:: + + from functools import update_wrapper + + def decorator(f): + @pass_context + def new_func(ctx, *args, **kwargs): + obj = ctx.find_object(object_type) + return ctx.invoke(f, obj, *args, **kwargs) + return update_wrapper(new_func, f) + return decorator + + :param object_type: the type of the object to pass. + :param ensure: if set to `True`, a new object will be created and + remembered on the context if it's not there yet. + """ + + def decorator(f: F) -> F: + def new_func(*args, **kwargs): # type: ignore + ctx = get_current_context() + + if ensure: + obj = ctx.ensure_object(object_type) + else: + obj = ctx.find_object(object_type) + + if obj is None: + raise RuntimeError( + "Managed to invoke callback without a context" + f" object of type {object_type.__name__!r}" + " existing." + ) + + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + return decorator + + +def pass_meta_key( + key: str, *, doc_description: t.Optional[str] = None +) -> "t.Callable[[F], F]": + """Create a decorator that passes a key from + :attr:`click.Context.meta` as the first argument to the decorated + function. + + :param key: Key in ``Context.meta`` to pass. + :param doc_description: Description of the object being passed, + inserted into the decorator's docstring. Defaults to "the 'key' + key from Context.meta". + + .. versionadded:: 8.0 + """ + + def decorator(f: F) -> F: + def new_func(*args, **kwargs): # type: ignore + ctx = get_current_context() + obj = ctx.meta[key] + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + if doc_description is None: + doc_description = f"the {key!r} key from :attr:`click.Context.meta`" + + decorator.__doc__ = ( + f"Decorator that passes {doc_description} as the first argument" + " to the decorated function." + ) + return decorator + + +def _make_command( + f: F, + name: t.Optional[str], + attrs: t.MutableMapping[str, t.Any], + cls: t.Type[Command], +) -> Command: + if isinstance(f, Command): + raise TypeError("Attempted to convert a callback into a command twice.") + + try: + params = f.__click_params__ # type: ignore + params.reverse() + del f.__click_params__ # type: ignore + except AttributeError: + params = [] + + help = attrs.get("help") + + if help is None: + help = inspect.getdoc(f) + else: + help = inspect.cleandoc(help) + + attrs["help"] = help + return cls( + name=name or f.__name__.lower().replace("_", "-"), + callback=f, + params=params, + **attrs, + ) + + +def command( + name: t.Optional[str] = None, + cls: t.Optional[t.Type[Command]] = None, + **attrs: t.Any, +) -> t.Callable[[F], Command]: + r"""Creates a new :class:`Command` and uses the decorated function as + callback. This will also automatically attach all decorated + :func:`option`\s and :func:`argument`\s as parameters to the command. + + The name of the command defaults to the name of the function with + underscores replaced by dashes. If you want to change that, you can + pass the intended name as the first argument. + + All keyword arguments are forwarded to the underlying command class. + + 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`. + """ + if cls is None: + cls = Command + + def decorator(f: t.Callable[..., t.Any]) -> Command: + cmd = _make_command(f, name, attrs, cls) # type: ignore + cmd.__doc__ = f.__doc__ + return cmd + + return decorator + + +def group(name: t.Optional[str] = None, **attrs: t.Any) -> t.Callable[[F], Group]: + """Creates a new :class:`Group` with a function as callback. This + works otherwise the same as :func:`command` just that the `cls` + parameter is set to :class:`Group`. + """ + attrs.setdefault("cls", Group) + return t.cast(Group, command(name, **attrs)) + + +def _param_memo(f: FC, param: Parameter) -> None: + if isinstance(f, Command): + f.params.append(param) + else: + if not hasattr(f, "__click_params__"): + f.__click_params__ = [] # type: ignore + + f.__click_params__.append(param) # type: ignore + + +def argument(*param_decls: str, **attrs: t.Any) -> t.Callable[[FC], FC]: + """Attaches an argument to the command. All positional arguments are + passed as parameter declarations to :class:`Argument`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Argument` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the argument class to instantiate. This defaults to + :class:`Argument`. + """ + + def decorator(f: FC) -> FC: + ArgumentClass = attrs.pop("cls", Argument) + _param_memo(f, ArgumentClass(param_decls, **attrs)) + return f + + return decorator + + +def option(*param_decls: str, **attrs: t.Any) -> t.Callable[[FC], FC]: + """Attaches an option to the command. All positional arguments are + passed as parameter declarations to :class:`Option`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Option` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the option class to instantiate. This defaults to + :class:`Option`. + """ + + def decorator(f: FC) -> FC: + # Issue 926, copy attrs, so pre-defined options can re-use the same cls= + option_attrs = attrs.copy() + + if "help" in option_attrs: + option_attrs["help"] = inspect.cleandoc(option_attrs["help"]) + OptionClass = option_attrs.pop("cls", Option) + _param_memo(f, OptionClass(param_decls, **option_attrs)) + return f + + return decorator + + +def confirmation_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--yes`` option which shows a prompt before continuing if + not passed. If the prompt is declined, the program will exit. + + :param param_decls: One or more option names. Defaults to the single + value ``"--yes"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value: + ctx.abort() + + if not param_decls: + param_decls = ("--yes",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("callback", callback) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("prompt", "Do you want to continue?") + kwargs.setdefault("help", "Confirm the action without prompting.") + return option(*param_decls, **kwargs) + + +def password_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--password`` option which prompts for a password, hiding + input and asking to enter the value again for confirmation. + + :param param_decls: One or more option names. Defaults to the single + value ``"--password"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + if not param_decls: + param_decls = ("--password",) + + kwargs.setdefault("prompt", True) + kwargs.setdefault("confirmation_prompt", True) + kwargs.setdefault("hide_input", True) + return option(*param_decls, **kwargs) + + +def version_option( + version: t.Optional[str] = None, + *param_decls: str, + package_name: t.Optional[str] = None, + prog_name: t.Optional[str] = None, + message: t.Optional[str] = None, + **kwargs: t.Any, +) -> t.Callable[[FC], FC]: + """Add a ``--version`` option which immediately prints the version + number and exits the program. + + If ``version`` is not provided, Click will try to detect it using + :func:`importlib.metadata.version` to get the version for the + ``package_name``. On Python < 3.8, the ``importlib_metadata`` + backport must be installed. + + If ``package_name`` is not provided, Click will try to detect it by + inspecting the stack frames. This will be used to detect the + version, so it must match the name of the installed package. + + :param version: The version number to show. If not provided, Click + will try to detect it. + :param param_decls: One or more option names. Defaults to the single + value ``"--version"``. + :param package_name: The package name to detect the version from. If + not provided, Click will try to detect it. + :param prog_name: The name of the CLI to show in the message. If not + provided, it will be detected from the command. + :param message: The message to show. The values ``%(prog)s``, + ``%(package)s``, and ``%(version)s`` are available. Defaults to + ``"%(prog)s, version %(version)s"``. + :param kwargs: Extra arguments are passed to :func:`option`. + :raise RuntimeError: ``version`` could not be detected. + + .. versionchanged:: 8.0 + Add the ``package_name`` parameter, and the ``%(package)s`` + value for messages. + + .. versionchanged:: 8.0 + Use :mod:`importlib.metadata` instead of ``pkg_resources``. The + version is detected based on the package name, not the entry + point name. The Python package name must match the installed + package name, or be passed with ``package_name=``. + """ + if message is None: + message = _("%(prog)s, version %(version)s") + + if version is None and package_name is None: + frame = inspect.currentframe() + f_back = frame.f_back if frame is not None else None + f_globals = f_back.f_globals if f_back is not None else None + # break reference cycle + # https://docs.python.org/3/library/inspect.html#the-interpreter-stack + del frame + + if f_globals is not None: + package_name = f_globals.get("__name__") + + if package_name == "__main__": + package_name = f_globals.get("__package__") + + if package_name: + package_name = package_name.partition(".")[0] + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value or ctx.resilient_parsing: + return + + nonlocal prog_name + nonlocal version + + if prog_name is None: + prog_name = ctx.find_root().info_name + + if version is None and package_name is not None: + metadata: t.Optional[types.ModuleType] + + try: + from importlib import metadata # type: ignore + except ImportError: + # Python < 3.8 + import importlib_metadata as metadata # type: ignore + + try: + version = metadata.version(package_name) # type: ignore + except metadata.PackageNotFoundError: # type: ignore + raise RuntimeError( + f"{package_name!r} is not installed. Try passing" + " 'package_name' instead." + ) from None + + if version is None: + raise RuntimeError( + f"Could not determine the version for {package_name!r} automatically." + ) + + echo( + t.cast(str, message) + % {"prog": prog_name, "package": package_name, "version": version}, + color=ctx.color, + ) + ctx.exit() + + if not param_decls: + param_decls = ("--version",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("is_eager", True) + kwargs.setdefault("help", _("Show the version and exit.")) + kwargs["callback"] = callback + return option(*param_decls, **kwargs) + + +def help_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--help`` option which immediately prints the help page + and exits the program. + + This is usually unnecessary, as the ``--help`` option is added to + each command automatically unless ``add_help_option=False`` is + passed. + + :param param_decls: One or more option names. Defaults to the single + value ``"--help"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value or ctx.resilient_parsing: + return + + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + if not param_decls: + param_decls = ("--help",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("is_eager", True) + kwargs.setdefault("help", _("Show this message and exit.")) + kwargs["callback"] = callback + return option(*param_decls, **kwargs) diff --git a/venv/lib/python3.7/site-packages/click/exceptions.py b/venv/lib/python3.7/site-packages/click/exceptions.py new file mode 100644 index 0000000..9e20b3e --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/exceptions.py @@ -0,0 +1,287 @@ +import os +import typing as t +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import get_text_stderr +from .utils import echo + +if t.TYPE_CHECKING: + from .core import Context + from .core import Parameter + + +def _join_param_hints( + param_hint: t.Optional[t.Union[t.Sequence[str], str]] +) -> t.Optional[str]: + if param_hint is not None and not isinstance(param_hint, str): + return " / ".join(repr(x) for x in param_hint) + + return param_hint + + +class ClickException(Exception): + """An exception that Click can handle and show to the user.""" + + #: The exit code for this exception. + exit_code = 1 + + def __init__(self, message: str) -> None: + super().__init__(message) + self.message = message + + def format_message(self) -> str: + return self.message + + def __str__(self) -> str: + return self.message + + def show(self, file: t.Optional[t.IO] = None) -> None: + if file is None: + file = get_text_stderr() + + echo(_("Error: {message}").format(message=self.format_message()), file=file) + + +class UsageError(ClickException): + """An internal exception that signals a usage error. This typically + aborts any further handling. + + :param message: the error message to display. + :param ctx: optionally the context that caused this error. Click will + fill in the context automatically in some situations. + """ + + exit_code = 2 + + def __init__(self, message: str, ctx: t.Optional["Context"] = None) -> None: + super().__init__(message) + self.ctx = ctx + self.cmd = self.ctx.command if self.ctx else None + + def show(self, file: t.Optional[t.IO] = None) -> None: + if file is None: + file = get_text_stderr() + color = None + hint = "" + if ( + self.ctx is not None + and self.ctx.command.get_help_option(self.ctx) is not None + ): + hint = _("Try '{command} {option}' for help.").format( + command=self.ctx.command_path, option=self.ctx.help_option_names[0] + ) + hint = f"{hint}\n" + if self.ctx is not None: + color = self.ctx.color + echo(f"{self.ctx.get_usage()}\n{hint}", file=file, color=color) + echo( + _("Error: {message}").format(message=self.format_message()), + file=file, + color=color, + ) + + +class BadParameter(UsageError): + """An exception that formats out a standardized error message for a + bad parameter. This is useful when thrown from a callback or type as + Click will attach contextual information to it (for instance, which + parameter it is). + + .. versionadded:: 2.0 + + :param param: the parameter object that caused this error. This can + be left out, and Click will attach this info itself + if possible. + :param param_hint: a string that shows up as parameter name. This + can be used as alternative to `param` in cases + where custom validation should happen. If it is + a string it's used as such, if it's a list then + each item is quoted and separated. + """ + + def __init__( + self, + message: str, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + ) -> None: + super().__init__(message, ctx) + self.param = param + self.param_hint = param_hint + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + return _("Invalid value: {message}").format(message=self.message) + + return _("Invalid value for {param_hint}: {message}").format( + param_hint=_join_param_hints(param_hint), message=self.message + ) + + +class MissingParameter(BadParameter): + """Raised if click required an option or argument but it was not + provided when invoking the script. + + .. versionadded:: 4.0 + + :param param_type: a string that indicates the type of the parameter. + The default is to inherit the parameter type from + the given `param`. Valid values are ``'parameter'``, + ``'option'`` or ``'argument'``. + """ + + def __init__( + self, + message: t.Optional[str] = None, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + param_type: t.Optional[str] = None, + ) -> None: + super().__init__(message or "", ctx, param, param_hint) + self.param_type = param_type + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint: t.Optional[str] = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + param_hint = None + + param_hint = _join_param_hints(param_hint) + param_hint = f" {param_hint}" if param_hint else "" + + param_type = self.param_type + if param_type is None and self.param is not None: + param_type = self.param.param_type_name + + msg = self.message + if self.param is not None: + msg_extra = self.param.type.get_missing_message(self.param) + if msg_extra: + if msg: + msg += f". {msg_extra}" + else: + msg = msg_extra + + msg = f" {msg}" if msg else "" + + # Translate param_type for known types. + if param_type == "argument": + missing = _("Missing argument") + elif param_type == "option": + missing = _("Missing option") + elif param_type == "parameter": + missing = _("Missing parameter") + else: + missing = _("Missing {param_type}").format(param_type=param_type) + + return f"{missing}{param_hint}.{msg}" + + def __str__(self) -> str: + if not self.message: + param_name = self.param.name if self.param else None + return _("Missing parameter: {param_name}").format(param_name=param_name) + else: + return self.message + + +class NoSuchOption(UsageError): + """Raised if click attempted to handle an option that does not + exist. + + .. versionadded:: 4.0 + """ + + def __init__( + self, + option_name: str, + message: t.Optional[str] = None, + possibilities: t.Optional[t.Sequence[str]] = None, + ctx: t.Optional["Context"] = None, + ) -> None: + if message is None: + message = _("No such option: {name}").format(name=option_name) + + super().__init__(message, ctx) + self.option_name = option_name + self.possibilities = possibilities + + def format_message(self) -> str: + if not self.possibilities: + return self.message + + possibility_str = ", ".join(sorted(self.possibilities)) + suggest = ngettext( + "Did you mean {possibility}?", + "(Possible options: {possibilities})", + len(self.possibilities), + ).format(possibility=possibility_str, possibilities=possibility_str) + return f"{self.message} {suggest}" + + +class BadOptionUsage(UsageError): + """Raised if an option is generally supplied but the use of the option + was incorrect. This is for instance raised if the number of arguments + for an option is not correct. + + .. versionadded:: 4.0 + + :param option_name: the name of the option being used incorrectly. + """ + + def __init__( + self, option_name: str, message: str, ctx: t.Optional["Context"] = None + ) -> None: + super().__init__(message, ctx) + self.option_name = option_name + + +class BadArgumentUsage(UsageError): + """Raised if an argument is generally supplied but the use of the argument + was incorrect. This is for instance raised if the number of values + for an argument is not correct. + + .. versionadded:: 6.0 + """ + + +class FileError(ClickException): + """Raised if a file cannot be opened.""" + + def __init__(self, filename: str, hint: t.Optional[str] = None) -> None: + if hint is None: + hint = _("unknown error") + + super().__init__(hint) + self.ui_filename = os.fsdecode(filename) + self.filename = filename + + def format_message(self) -> str: + return _("Could not open file {filename!r}: {message}").format( + filename=self.ui_filename, message=self.message + ) + + +class Abort(RuntimeError): + """An internal signalling exception that signals Click to abort.""" + + +class Exit(RuntimeError): + """An exception that indicates that the application should exit with some + status code. + + :param code: the status code to exit with. + """ + + __slots__ = ("exit_code",) + + def __init__(self, code: int = 0) -> None: + self.exit_code = code diff --git a/venv/lib/python3.7/site-packages/click/formatting.py b/venv/lib/python3.7/site-packages/click/formatting.py new file mode 100644 index 0000000..ddd2a2f --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/click/globals.py b/venv/lib/python3.7/site-packages/click/globals.py new file mode 100644 index 0000000..a7b0c93 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/globals.py @@ -0,0 +1,69 @@ +import typing +import typing as t +from threading import local + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + +_local = local() + + +@typing.overload +def get_current_context(silent: "te.Literal[False]" = False) -> "Context": + ... + + +@typing.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/python3.7/site-packages/click/parser.py b/venv/lib/python3.7/site-packages/click/parser.py new file mode 100644 index 0000000..2d5a2ed --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/parser.py @@ -0,0 +1,529 @@ +""" +This module started out as largely a copy paste from the stdlib's +optparse module with the features removed that we do not need from +optparse because we implement them in Click on a higher level (for +instance type handling, help formatting and a lot more). + +The plan is to remove more and more from here over time. + +The reason this is a different module and not optparse from the stdlib +is that there are differences in 2.x and 3.x about the error messages +generated and optparse in the stdlib uses gettext for no good reason +and might cause us issues. + +Click uses parts of optparse written by Gregory P. Ward and maintained +by the Python Software Foundation. This is limited to code in parser.py. + +Copyright 2001-2006 Gregory P. Ward. All rights reserved. +Copyright 2002-2006 Python Software Foundation. All rights reserved. +""" +# This code uses parts of optparse written by Gregory P. Ward and +# maintained by the Python Software Foundation. +# Copyright 2001-2006 Gregory P. Ward +# Copyright 2002-2006 Python Software Foundation +import typing as t +from collections import deque +from gettext import gettext as _ +from gettext import ngettext + +from .exceptions import BadArgumentUsage +from .exceptions import BadOptionUsage +from .exceptions import NoSuchOption +from .exceptions import UsageError + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Argument as CoreArgument + from .core import Context + from .core import Option as CoreOption + from .core import Parameter as CoreParameter + +V = t.TypeVar("V") + +# Sentinel value that indicates an option was passed as a flag without a +# value but is not a flag option. Option.consume_value uses this to +# prompt or use the flag_value. +_flag_needs_value = object() + + +def _unpack_args( + args: t.Sequence[str], nargs_spec: t.Sequence[int] +) -> t.Tuple[t.Sequence[t.Union[str, t.Sequence[t.Optional[str]], None]], t.List[str]]: + """Given an iterable of arguments and an iterable of nargs specifications, + it returns a tuple with all the unpacked arguments at the first index + and all remaining arguments as the second. + + The nargs specification is the number of arguments that should be consumed + or `-1` to indicate that this position should eat up all the remainders. + + Missing items are filled with `None`. + """ + args = deque(args) + nargs_spec = deque(nargs_spec) + rv: t.List[t.Union[str, t.Tuple[t.Optional[str], ...], None]] = [] + spos: t.Optional[int] = None + + def _fetch(c: "te.Deque[V]") -> t.Optional[V]: + try: + if spos is None: + return c.popleft() + else: + return c.pop() + except IndexError: + return None + + while nargs_spec: + nargs = _fetch(nargs_spec) + + if nargs is None: + continue + + if nargs == 1: + rv.append(_fetch(args)) + elif nargs > 1: + x = [_fetch(args) for _ in range(nargs)] + + # If we're reversed, we're pulling in the arguments in reverse, + # so we need to turn them around. + if spos is not None: + x.reverse() + + rv.append(tuple(x)) + elif nargs < 0: + if spos is not None: + raise TypeError("Cannot have two nargs < 0") + + spos = len(rv) + rv.append(None) + + # spos is the position of the wildcard (star). If it's not `None`, + # we fill it with the remainder. + if spos is not None: + rv[spos] = tuple(args) + args = [] + rv[spos + 1 :] = reversed(rv[spos + 1 :]) + + return tuple(rv), list(args) + + +def split_opt(opt: str) -> t.Tuple[str, str]: + first = opt[:1] + if first.isalnum(): + return "", opt + if opt[1:2] == first: + return opt[:2], opt[2:] + return first, opt[1:] + + +def normalize_opt(opt: str, ctx: t.Optional["Context"]) -> str: + if ctx is None or ctx.token_normalize_func is None: + return opt + prefix, opt = split_opt(opt) + return f"{prefix}{ctx.token_normalize_func(opt)}" + + +def split_arg_string(string: str) -> t.List[str]: + """Split an argument string as with :func:`shlex.split`, but don't + fail if the string is incomplete. Ignores a missing closing quote or + incomplete escape sequence and uses the partial token as-is. + + .. code-block:: python + + split_arg_string("example 'my file") + ["example", "my file"] + + split_arg_string("example my\\") + ["example", "my"] + + :param string: String to split. + """ + import shlex + + lex = shlex.shlex(string, posix=True) + lex.whitespace_split = True + lex.commenters = "" + out = [] + + try: + for token in lex: + out.append(token) + except ValueError: + # Raised when end-of-string is reached in an invalid state. Use + # the partial token as-is. The quote or escape character is in + # lex.state, not lex.token. + out.append(lex.token) + + return out + + +class Option: + def __init__( + self, + obj: "CoreOption", + opts: t.Sequence[str], + dest: t.Optional[str], + action: t.Optional[str] = None, + nargs: int = 1, + const: t.Optional[t.Any] = None, + ): + self._short_opts = [] + self._long_opts = [] + self.prefixes = set() + + for opt in opts: + prefix, value = split_opt(opt) + if not prefix: + raise ValueError(f"Invalid start character for option ({opt})") + self.prefixes.add(prefix[0]) + if len(prefix) == 1 and len(value) == 1: + self._short_opts.append(opt) + else: + self._long_opts.append(opt) + self.prefixes.add(prefix) + + if action is None: + action = "store" + + self.dest = dest + self.action = action + self.nargs = nargs + self.const = const + self.obj = obj + + @property + def takes_value(self) -> bool: + return self.action in ("store", "append") + + def process(self, value: str, state: "ParsingState") -> None: + if self.action == "store": + state.opts[self.dest] = value # type: ignore + elif self.action == "store_const": + state.opts[self.dest] = self.const # type: ignore + elif self.action == "append": + state.opts.setdefault(self.dest, []).append(value) # type: ignore + elif self.action == "append_const": + state.opts.setdefault(self.dest, []).append(self.const) # type: ignore + elif self.action == "count": + state.opts[self.dest] = state.opts.get(self.dest, 0) + 1 # type: ignore + else: + raise ValueError(f"unknown action '{self.action}'") + state.order.append(self.obj) + + +class Argument: + def __init__(self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1): + self.dest = dest + self.nargs = nargs + self.obj = obj + + def process( + self, + value: t.Union[t.Optional[str], t.Sequence[t.Optional[str]]], + state: "ParsingState", + ) -> None: + if self.nargs > 1: + assert value is not None + holes = sum(1 for x in value if x is None) + if holes == len(value): + value = None + elif holes != 0: + raise BadArgumentUsage( + _("Argument {name!r} takes {nargs} values.").format( + name=self.dest, nargs=self.nargs + ) + ) + + if self.nargs == -1 and self.obj.envvar is not None and value == (): + # Replace empty tuple with None so that a value from the + # environment may be tried. + value = None + + state.opts[self.dest] = value # type: ignore + state.order.append(self.obj) + + +class ParsingState: + def __init__(self, rargs: t.List[str]) -> None: + self.opts: t.Dict[str, t.Any] = {} + self.largs: t.List[str] = [] + self.rargs = rargs + self.order: t.List["CoreParameter"] = [] + + +class OptionParser: + """The option parser is an internal class that is ultimately used to + parse options and arguments. It's modelled after optparse and brings + a similar but vastly simplified API. It should generally not be used + directly as the high level Click classes wrap it for you. + + It's not nearly as extensible as optparse or argparse as it does not + implement features that are implemented on a higher level (such as + types or defaults). + + :param ctx: optionally the :class:`~click.Context` where this parser + should go with. + """ + + def __init__(self, ctx: t.Optional["Context"] = None) -> None: + #: The :class:`~click.Context` for this parser. This might be + #: `None` for some advanced use cases. + self.ctx = ctx + #: This controls how the parser deals with interspersed arguments. + #: If this is set to `False`, the parser will stop on the first + #: non-option. Click uses this to implement nested subcommands + #: safely. + self.allow_interspersed_args = True + #: This tells the parser how to deal with unknown options. By + #: default it will error out (which is sensible), but there is a + #: second mode where it will ignore it and continue processing + #: after shifting all the unknown options into the resulting args. + self.ignore_unknown_options = False + + if ctx is not None: + self.allow_interspersed_args = ctx.allow_interspersed_args + self.ignore_unknown_options = ctx.ignore_unknown_options + + self._short_opt: t.Dict[str, Option] = {} + self._long_opt: t.Dict[str, Option] = {} + self._opt_prefixes = {"-", "--"} + self._args: t.List[Argument] = [] + + def add_option( + self, + obj: "CoreOption", + opts: t.Sequence[str], + dest: t.Optional[str], + action: t.Optional[str] = None, + nargs: int = 1, + const: t.Optional[t.Any] = None, + ) -> None: + """Adds a new option named `dest` to the parser. The destination + is not inferred (unlike with optparse) and needs to be explicitly + provided. Action can be any of ``store``, ``store_const``, + ``append``, ``append_const`` or ``count``. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + opts = [normalize_opt(opt, self.ctx) for opt in opts] + option = Option(obj, opts, dest, action=action, nargs=nargs, const=const) + self._opt_prefixes.update(option.prefixes) + for opt in option._short_opts: + self._short_opt[opt] = option + for opt in option._long_opts: + self._long_opt[opt] = option + + def add_argument( + self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1 + ) -> None: + """Adds a positional argument named `dest` to the parser. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + self._args.append(Argument(obj, dest=dest, nargs=nargs)) + + def parse_args( + self, args: t.List[str] + ) -> t.Tuple[t.Dict[str, t.Any], t.List[str], t.List["CoreParameter"]]: + """Parses positional arguments and returns ``(values, args, order)`` + for the parsed options and arguments as well as the leftover + arguments if there are any. The order is a list of objects as they + appear on the command line. If arguments appear multiple times they + will be memorized multiple times as well. + """ + state = ParsingState(args) + try: + self._process_args_for_options(state) + self._process_args_for_args(state) + except UsageError: + if self.ctx is None or not self.ctx.resilient_parsing: + raise + return state.opts, state.largs, state.order + + def _process_args_for_args(self, state: ParsingState) -> None: + pargs, args = _unpack_args( + state.largs + state.rargs, [x.nargs for x in self._args] + ) + + for idx, arg in enumerate(self._args): + arg.process(pargs[idx], state) + + state.largs = args + state.rargs = [] + + def _process_args_for_options(self, state: ParsingState) -> None: + while state.rargs: + arg = state.rargs.pop(0) + arglen = len(arg) + # Double dashes always handled explicitly regardless of what + # prefixes are valid. + if arg == "--": + return + elif arg[:1] in self._opt_prefixes and arglen > 1: + self._process_opts(arg, state) + elif self.allow_interspersed_args: + state.largs.append(arg) + else: + state.rargs.insert(0, arg) + return + + # Say this is the original argument list: + # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] + # ^ + # (we are about to process arg(i)). + # + # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of + # [arg0, ..., arg(i-1)] (any options and their arguments will have + # been removed from largs). + # + # The while loop will usually consume 1 or more arguments per pass. + # If it consumes 1 (eg. arg is an option that takes no arguments), + # then after _process_arg() is done the situation is: + # + # largs = subset of [arg0, ..., arg(i)] + # rargs = [arg(i+1), ..., arg(N-1)] + # + # If allow_interspersed_args is false, largs will always be + # *empty* -- still a subset of [arg0, ..., arg(i-1)], but + # not a very interesting subset! + + def _match_long_opt( + self, opt: str, explicit_value: t.Optional[str], state: ParsingState + ) -> None: + if opt not in self._long_opt: + from difflib import get_close_matches + + possibilities = get_close_matches(opt, self._long_opt) + raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx) + + option = self._long_opt[opt] + if option.takes_value: + # At this point it's safe to modify rargs by injecting the + # explicit value, because no exception is raised in this + # branch. This means that the inserted value will be fully + # consumed. + if explicit_value is not None: + state.rargs.insert(0, explicit_value) + + value = self._get_value_from_state(opt, option, state) + + elif explicit_value is not None: + raise BadOptionUsage( + opt, _("Option {name!r} does not take a value.").format(name=opt) + ) + + else: + value = None + + option.process(value, state) + + def _match_short_opt(self, arg: str, state: ParsingState) -> None: + stop = False + i = 1 + prefix = arg[0] + unknown_options = [] + + for ch in arg[1:]: + opt = normalize_opt(f"{prefix}{ch}", self.ctx) + option = self._short_opt.get(opt) + i += 1 + + if not option: + if self.ignore_unknown_options: + unknown_options.append(ch) + continue + raise NoSuchOption(opt, ctx=self.ctx) + if option.takes_value: + # Any characters left in arg? Pretend they're the + # next arg, and stop consuming characters of arg. + if i < len(arg): + state.rargs.insert(0, arg[i:]) + stop = True + + value = self._get_value_from_state(opt, option, state) + + else: + value = None + + option.process(value, state) + + if stop: + break + + # If we got any unknown options we re-combinate the string of the + # remaining options and re-attach the prefix, then report that + # to the state as new larg. This way there is basic combinatorics + # that can be achieved while still ignoring unknown arguments. + if self.ignore_unknown_options and unknown_options: + state.largs.append(f"{prefix}{''.join(unknown_options)}") + + def _get_value_from_state( + self, option_name: str, option: Option, state: ParsingState + ) -> t.Any: + nargs = option.nargs + + if len(state.rargs) < nargs: + if option.obj._flag_needs_value: + # Option allows omitting the value. + value = _flag_needs_value + else: + raise BadOptionUsage( + option_name, + ngettext( + "Option {name!r} requires an argument.", + "Option {name!r} requires {nargs} arguments.", + nargs, + ).format(name=option_name, nargs=nargs), + ) + elif nargs == 1: + next_rarg = state.rargs[0] + + if ( + option.obj._flag_needs_value + and isinstance(next_rarg, str) + and next_rarg[:1] in self._opt_prefixes + and len(next_rarg) > 1 + ): + # The next arg looks like the start of an option, don't + # use it as the value if omitting the value is allowed. + value = _flag_needs_value + else: + value = state.rargs.pop(0) + else: + value = tuple(state.rargs[:nargs]) + del state.rargs[:nargs] + + return value + + def _process_opts(self, arg: str, state: ParsingState) -> None: + explicit_value = None + # Long option handling happens in two parts. The first part is + # supporting explicitly attached values. In any case, we will try + # to long match the option first. + if "=" in arg: + long_opt, explicit_value = arg.split("=", 1) + else: + long_opt = arg + norm_long_opt = normalize_opt(long_opt, self.ctx) + + # At this point we will match the (assumed) long option through + # the long option matching code. Note that this allows options + # like "-foo" to be matched as long options. + try: + self._match_long_opt(norm_long_opt, explicit_value, state) + except NoSuchOption: + # At this point the long option matching failed, and we need + # to try with short options. However there is a special rule + # which says, that if we have a two character options prefix + # (applies to "--foo" for instance), we do not dispatch to the + # short option code and will instead raise the no option + # error. + if arg[:2] not in self._opt_prefixes: + self._match_short_opt(arg, state) + return + + if not self.ignore_unknown_options: + raise + + state.largs.append(arg) diff --git a/venv/lib/python3.7/site-packages/click/py.typed b/venv/lib/python3.7/site-packages/click/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/click/shell_completion.py b/venv/lib/python3.7/site-packages/click/shell_completion.py new file mode 100644 index 0000000..cad080d --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/shell_completion.py @@ -0,0 +1,581 @@ +import os +import re +import typing as t +from gettext import gettext as _ + +from .core import Argument +from .core import BaseCommand +from .core import Context +from .core import MultiCommand +from .core import Option +from .core import Parameter +from .core import ParameterSource +from .parser import split_arg_string +from .utils import echo + + +def shell_complete( + cli: BaseCommand, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: str, + instruction: str, +) -> int: + """Perform shell completion for the given CLI program. + + :param cli: Command being called. + :param ctx_args: Extra arguments to pass to + ``cli.make_context``. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + :param instruction: Value of ``complete_var`` with the completion + instruction and shell, in the form ``instruction_shell``. + :return: Status code to exit with. + """ + shell, _, instruction = instruction.partition("_") + comp_cls = get_completion_class(shell) + + if comp_cls is None: + return 1 + + comp = comp_cls(cli, ctx_args, prog_name, complete_var) + + if instruction == "source": + echo(comp.source()) + return 0 + + if instruction == "complete": + echo(comp.complete()) + return 0 + + return 1 + + +class CompletionItem: + """Represents a completion value and metadata about the value. The + default metadata is ``type`` to indicate special shell handling, + and ``help`` if a shell supports showing a help string next to the + value. + + Arbitrary parameters can be passed when creating the object, and + accessed using ``item.attr``. If an attribute wasn't passed, + accessing it returns ``None``. + + :param value: The completion suggestion. + :param type: Tells the shell script to provide special completion + support for the type. Click uses ``"dir"`` and ``"file"``. + :param help: String shown next to the value if supported. + :param kwargs: Arbitrary metadata. The built-in implementations + don't use this, but custom type completions paired with custom + shell support could use it. + """ + + __slots__ = ("value", "type", "help", "_info") + + def __init__( + self, + value: t.Any, + type: str = "plain", + help: t.Optional[str] = None, + **kwargs: t.Any, + ) -> None: + self.value = value + self.type = type + self.help = help + self._info = kwargs + + def __getattr__(self, name: str) -> t.Any: + return self._info.get(name) + + +# Only Bash >= 4.4 has the nosort option. +_SOURCE_BASH = """\ +%(complete_func)s() { + local IFS=$'\\n' + local response + + response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD \ +%(complete_var)s=bash_complete $1) + + for completion in $response; do + IFS=',' read type value <<< "$completion" + + if [[ $type == 'dir' ]]; then + COMREPLY=() + compopt -o dirnames + elif [[ $type == 'file' ]]; then + COMREPLY=() + compopt -o default + elif [[ $type == 'plain' ]]; then + COMPREPLY+=($value) + fi + done + + return 0 +} + +%(complete_func)s_setup() { + complete -o nosort -F %(complete_func)s %(prog_name)s +} + +%(complete_func)s_setup; +""" + +_SOURCE_ZSH = """\ +#compdef %(prog_name)s + +%(complete_func)s() { + local -a completions + local -a completions_with_descriptions + local -a response + (( ! $+commands[%(prog_name)s] )) && return 1 + + response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) \ +%(complete_var)s=zsh_complete %(prog_name)s)}") + + for type key descr in ${response}; do + if [[ "$type" == "plain" ]]; then + if [[ "$descr" == "_" ]]; then + completions+=("$key") + else + completions_with_descriptions+=("$key":"$descr") + fi + elif [[ "$type" == "dir" ]]; then + _path_files -/ + elif [[ "$type" == "file" ]]; then + _path_files -f + fi + done + + if [ -n "$completions_with_descriptions" ]; then + _describe -V unsorted completions_with_descriptions -U + fi + + if [ -n "$completions" ]; then + compadd -U -V unsorted -a completions + fi +} + +compdef %(complete_func)s %(prog_name)s; +""" + +_SOURCE_FISH = """\ +function %(complete_func)s; + set -l response; + + for value in (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \ +COMP_CWORD=(commandline -t) %(prog_name)s); + set response $response $value; + end; + + for completion in $response; + set -l metadata (string split "," $completion); + + if test $metadata[1] = "dir"; + __fish_complete_directories $metadata[2]; + else if test $metadata[1] = "file"; + __fish_complete_path $metadata[2]; + else if test $metadata[1] = "plain"; + echo $metadata[2]; + end; + end; +end; + +complete --no-files --command %(prog_name)s --arguments \ +"(%(complete_func)s)"; +""" + + +class ShellComplete: + """Base class for providing shell completion support. A subclass for + a given shell will override attributes and methods to implement the + completion instructions (``source`` and ``complete``). + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + + .. versionadded:: 8.0 + """ + + name: t.ClassVar[str] + """Name to register the shell as with :func:`add_completion_class`. + This is used in completion instructions (``{name}_source`` and + ``{name}_complete``). + """ + + source_template: t.ClassVar[str] + """Completion script template formatted by :meth:`source`. This must + be provided by subclasses. + """ + + def __init__( + self, + cli: BaseCommand, + ctx_args: t.Dict[str, t.Any], + prog_name: str, + complete_var: str, + ) -> None: + self.cli = cli + self.ctx_args = ctx_args + self.prog_name = prog_name + self.complete_var = complete_var + + @property + def func_name(self) -> str: + """The name of the shell function defined by the completion + script. + """ + safe_name = re.sub(r"\W*", "", self.prog_name.replace("-", "_"), re.ASCII) + return f"_{safe_name}_completion" + + def source_vars(self) -> t.Dict[str, t.Any]: + """Vars for formatting :attr:`source_template`. + + By default this provides ``complete_func``, ``complete_var``, + and ``prog_name``. + """ + return { + "complete_func": self.func_name, + "complete_var": self.complete_var, + "prog_name": self.prog_name, + } + + def source(self) -> str: + """Produce the shell script that defines the completion + function. By default this ``%``-style formats + :attr:`source_template` with the dict returned by + :meth:`source_vars`. + """ + return self.source_template % self.source_vars() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + """Use the env vars defined by the shell script to return a + tuple of ``args, incomplete``. This must be implemented by + subclasses. + """ + raise NotImplementedError + + def get_completions( + self, args: t.List[str], incomplete: str + ) -> t.List[CompletionItem]: + """Determine the context and last complete command or parameter + from the complete args. Call that object's ``shell_complete`` + method to get the completions for the incomplete value. + + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + ctx = _resolve_context(self.cli, self.ctx_args, self.prog_name, args) + obj, incomplete = _resolve_incomplete(ctx, args, incomplete) + return obj.shell_complete(ctx, incomplete) + + def format_completion(self, item: CompletionItem) -> str: + """Format a completion item into the form recognized by the + shell script. This must be implemented by subclasses. + + :param item: Completion item to format. + """ + raise NotImplementedError + + def complete(self) -> str: + """Produce the completion data to send back to the shell. + + By default this calls :meth:`get_completion_args`, gets the + completions, then calls :meth:`format_completion` for each + completion. + """ + args, incomplete = self.get_completion_args() + completions = self.get_completions(args, incomplete) + out = [self.format_completion(item) for item in completions] + return "\n".join(out) + + +class BashComplete(ShellComplete): + """Shell completion for Bash.""" + + name = "bash" + source_template = _SOURCE_BASH + + def _check_version(self) -> None: + import subprocess + + output = subprocess.run( + ["bash", "-c", "echo ${BASH_VERSION}"], stdout=subprocess.PIPE + ) + match = re.search(r"^(\d+)\.(\d+)\.\d+", output.stdout.decode()) + + if match is not None: + major, minor = match.groups() + + if major < "4" or major == "4" and minor < "4": + raise RuntimeError( + _( + "Shell completion is not supported for Bash" + " versions older than 4.4." + ) + ) + else: + raise RuntimeError( + _("Couldn't detect Bash version, shell completion is not supported.") + ) + + def source(self) -> str: + self._check_version() + return super().source() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type},{item.value}" + + +class ZshComplete(ShellComplete): + """Shell completion for Zsh.""" + + name = "zsh" + source_template = _SOURCE_ZSH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type}\n{item.value}\n{item.help if item.help else '_'}" + + +class FishComplete(ShellComplete): + """Shell completion for Fish.""" + + name = "fish" + source_template = _SOURCE_FISH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + incomplete = os.environ["COMP_CWORD"] + args = cwords[1:] + + # Fish stores the partial word in both COMP_WORDS and + # COMP_CWORD, remove it from complete args. + if incomplete and args and args[-1] == incomplete: + args.pop() + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + if item.help: + return f"{item.type},{item.value}\t{item.help}" + + return f"{item.type},{item.value}" + + +_available_shells: t.Dict[str, t.Type[ShellComplete]] = { + "bash": BashComplete, + "fish": FishComplete, + "zsh": ZshComplete, +} + + +def add_completion_class( + cls: t.Type[ShellComplete], name: t.Optional[str] = None +) -> None: + """Register a :class:`ShellComplete` subclass under the given name. + The name will be provided by the completion instruction environment + variable during completion. + + :param cls: The completion class that will handle completion for the + shell. + :param name: Name to register the class under. Defaults to the + class's ``name`` attribute. + """ + if name is None: + name = cls.name + + _available_shells[name] = cls + + +def get_completion_class(shell: str) -> t.Optional[t.Type[ShellComplete]]: + """Look up a registered :class:`ShellComplete` subclass by the name + provided by the completion instruction environment variable. If the + name isn't registered, returns ``None``. + + :param shell: Name the class is registered under. + """ + return _available_shells.get(shell) + + +def _is_incomplete_argument(ctx: Context, param: Parameter) -> bool: + """Determine if the given parameter is an argument that can still + accept values. + + :param ctx: Invocation context for the command represented by the + parsed complete args. + :param param: Argument object being checked. + """ + if not isinstance(param, Argument): + return False + + assert param.name is not None + value = ctx.params[param.name] + return ( + param.nargs == -1 + or ctx.get_parameter_source(param.name) is not ParameterSource.COMMANDLINE + or ( + param.nargs > 1 + and isinstance(value, (tuple, list)) + and len(value) < param.nargs + ) + ) + + +def _start_of_option(value: str) -> bool: + """Check if the value looks like the start of an option.""" + if not value: + return False + + c = value[0] + # Allow "/" since that starts a path. + return not c.isalnum() and c != "/" + + +def _is_incomplete_option(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: + return False + + last_option = None + + for index, arg in enumerate(reversed(args)): + if index + 1 > param.nargs: + break + + if _start_of_option(arg): + last_option = arg + + return last_option is not None and last_option in param.opts + + +def _resolve_context( + cli: BaseCommand, ctx_args: t.Dict[str, t.Any], prog_name: str, args: t.List[str] +) -> Context: + """Produce the context hierarchy starting with the command and + traversing the complete arguments. This only follows the commands, + it doesn't trigger input prompts or callbacks. + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param args: List of complete args before the incomplete value. + """ + ctx_args["resilient_parsing"] = True + ctx = cli.make_context(prog_name, args.copy(), **ctx_args) + args = ctx.protected_args + ctx.args + + while args: + command = ctx.command + + if isinstance(command, MultiCommand): + if not command.chain: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + ctx = cmd.make_context(name, args, parent=ctx, resilient_parsing=True) + args = ctx.protected_args + ctx.args + else: + while args: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + sub_ctx = cmd.make_context( + name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + resilient_parsing=True, + ) + args = sub_ctx.args + + ctx = sub_ctx + args = [*sub_ctx.protected_args, *sub_ctx.args] + else: + break + + return ctx + + +def _resolve_incomplete( + ctx: Context, args: t.List[str], incomplete: str +) -> t.Tuple[t.Union[BaseCommand, Parameter], str]: + """Find the Click object that will handle the completion of the + incomplete value. Return the object and the incomplete value. + + :param ctx: Invocation context for the command represented by + the parsed complete args. + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + # Different shells treat an "=" between a long option name and + # value differently. Might keep the value joined, return the "=" + # as a separate item, or return the split name and value. Always + # split and discard the "=" to make completion easier. + if incomplete == "=": + incomplete = "" + elif "=" in incomplete and _start_of_option(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(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(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/python3.7/site-packages/click/termui.py b/venv/lib/python3.7/site-packages/click/termui.py new file mode 100644 index 0000000..cf8d5f1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/termui.py @@ -0,0 +1,809 @@ +import inspect +import io +import itertools +import os +import sys +import typing +import typing as t +from gettext import gettext as _ + +from ._compat import isatty +from ._compat import strip_ansi +from ._compat import WIN +from .exceptions import Abort +from .exceptions import UsageError +from .globals import resolve_color_default +from .types import Choice +from .types import convert_type +from .types import ParamType +from .utils import echo +from .utils import LazyFile + +if t.TYPE_CHECKING: + from ._termui_impl import ProgressBar + +V = t.TypeVar("V") + +# The prompt functions to use. The doc tools currently override these +# functions to customize how they work. +visible_prompt_func: t.Callable[[str], str] = input + +_ansi_colors = { + "black": 30, + "red": 31, + "green": 32, + "yellow": 33, + "blue": 34, + "magenta": 35, + "cyan": 36, + "white": 37, + "reset": 39, + "bright_black": 90, + "bright_red": 91, + "bright_green": 92, + "bright_yellow": 93, + "bright_blue": 94, + "bright_magenta": 95, + "bright_cyan": 96, + "bright_white": 97, +} +_ansi_reset_all = "\033[0m" + + +def hidden_prompt_func(prompt: str) -> str: + import getpass + + return getpass.getpass(prompt) + + +def _build_prompt( + text: str, + suffix: str, + show_default: bool = False, + default: t.Optional[t.Any] = None, + show_choices: bool = True, + type: t.Optional[ParamType] = None, +) -> str: + prompt = text + if type is not None and show_choices and isinstance(type, Choice): + prompt += f" ({', '.join(map(str, type.choices))})" + if default is not None and show_default: + prompt = f"{prompt} [{_format_default(default)}]" + return f"{prompt}{suffix}" + + +def _format_default(default: t.Any) -> t.Any: + if isinstance(default, (io.IOBase, LazyFile)) and hasattr(default, "name"): + return default.name # type: ignore + + return default + + +def prompt( + text: str, + default: t.Optional[t.Any] = None, + hide_input: bool = False, + confirmation_prompt: t.Union[bool, str] = False, + type: t.Optional[t.Union[ParamType, t.Any]] = None, + value_proc: t.Optional[t.Callable[[str], t.Any]] = None, + prompt_suffix: str = ": ", + show_default: bool = True, + err: bool = False, + show_choices: bool = True, +) -> t.Any: + """Prompts a user for input. This is a convenience function that can + be used to prompt a user for input later. + + If the user aborts the input by sending a 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 = t.cast(str, confirmation_prompt) + confirmation_prompt = _build_prompt(confirmation_prompt, prompt_suffix) + + while True: + while True: + value = prompt_func(prompt) + if value: + break + elif default is not None: + value = default + break + try: + result = value_proc(value) + except UsageError as e: + if hide_input: + echo(_("Error: The value you entered was invalid."), err=err) + else: + echo(_("Error: {e.message}").format(e=e), err=err) # noqa: B306 + continue + if not confirmation_prompt: + return result + while True: + confirmation_prompt = t.cast(str, confirmation_prompt) + value2 = prompt_func(confirmation_prompt) + if value2: + 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 get_terminal_size() -> os.terminal_size: + """Returns the current size of the terminal as tuple in the form + ``(width, height)`` in columns and rows. + + .. deprecated:: 8.0 + Will be removed in Click 8.1. Use + :func:`shutil.get_terminal_size` instead. + """ + import shutil + import warnings + + warnings.warn( + "'click.get_terminal_size()' is deprecated and will be removed" + " in Click 8.1. Use 'shutil.get_terminal_size()' instead.", + DeprecationWarning, + stacklevel=2, + ) + return shutil.get_terminal_size() + + +def echo_via_pager( + text_or_generator: t.Union[t.Iterable[str], t.Callable[[], t.Iterable[str]], str], + color: t.Optional[bool] = None, +) -> None: + """This function takes a text and shows it via an environment specific + pager on stdout. + + .. versionchanged:: 3.0 + Added the `color` flag. + + :param text_or_generator: the text to page, or alternatively, a + generator emitting the text to page. + :param color: controls if the pager supports ANSI colors or not. The + default is autodetection. + """ + color = resolve_color_default(color) + + if inspect.isgeneratorfunction(text_or_generator): + i = t.cast(t.Callable[[], t.Iterable[str]], text_or_generator)() + elif isinstance(text_or_generator, str): + i = [text_or_generator] + else: + i = iter(t.cast(t.Iterable[str], text_or_generator)) + + # convert every element of i to a text type if necessary + text_generator = (el if isinstance(el, str) else str(el) for el in i) + + from ._termui_impl import pager + + return pager(itertools.chain(text_generator, "\n"), color) + + +def progressbar( + iterable: t.Optional[t.Iterable[V]] = None, + length: t.Optional[int] = None, + label: t.Optional[str] = None, + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + fill_char: str = "#", + empty_char: str = "-", + bar_template: str = "%(label)s [%(bar)s] %(info)s", + info_sep: str = " ", + width: int = 36, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, +) -> "ProgressBar[V]": + """This function creates an iterable context manager that can be used + to iterate over something while showing a progress bar. It will + either iterate over the `iterable` or `length` items (that are counted + up). While iteration happens, this function will print a rendered + progress bar to the given `file` (defaults to stdout) and will attempt + to calculate remaining time and more. By default, this progress bar + will not be rendered if the file is not a terminal. + + The context manager creates the progress bar. When the context + manager is entered the progress bar is already created. With every + iteration over the progress bar, the iterable passed to the bar is + advanced and the bar is updated. When the context manager exits, + a newline is printed and the progress bar is finalized on screen. + + Note: The progress bar is currently designed for use cases where the + total progress can be expected to take at least several seconds. + Because of this, the ProgressBar class object won't display + progress that is considered too fast, and progress where the time + between steps is less than a second. + + No printing must happen or the progress bar will be unintentionally + destroyed. + + Example usage:: + + with progressbar(items) as bar: + for item in bar: + do_something_with(item) + + Alternatively, if no iterable is specified, one can manually update the + progress bar through the `update()` method instead of directly + iterating over the progress bar. The update method accepts the number + of steps to increment the bar with:: + + with progressbar(length=chunks.total_bytes) as bar: + for chunk in chunks: + process_chunk(chunk) + bar.update(chunks.bytes) + + The ``update()`` method also takes an optional value specifying the + ``current_item`` at the new position. This is useful when used + together with ``item_show_func`` to customize the output for each + manual step:: + + with click.progressbar( + length=total_size, + label='Unzipping archive', + item_show_func=lambda a: a.filename + ) as bar: + for archive in zip_file: + archive.extract() + bar.update(archive.size, archive) + + :param iterable: an iterable to iterate over. If not provided the length + is required. + :param length: the number of items to iterate over. By default the + progressbar will attempt to ask the iterator about its + length, which might or might not work. If an iterable is + also provided this parameter can be used to override the + length. If an iterable is not provided the progress bar + will iterate over a range of that length. + :param label: the label to show next to the progress bar. + :param show_eta: enables or disables the estimated time display. This is + automatically disabled if the length cannot be + determined. + :param show_percent: enables or disables the percentage display. The + default is `True` if the iterable has a length or + `False` if not. + :param show_pos: enables or disables the absolute position display. The + default is `False`. + :param item_show_func: A function called with the current item which + can return a string to show next to the progress bar. If the + function returns ``None`` nothing is shown. The current item can + be ``None``, such as when entering and exiting the bar. + :param fill_char: the character to use to show the filled part of the + progress bar. + :param empty_char: the character to use to show the non-filled part of + the progress bar. + :param bar_template: the format string to use as template for the bar. + The parameters in it are ``label`` for the label, + ``bar`` for the progress bar and ``info`` for the + info section. + :param info_sep: the separator between multiple info items (eta etc.) + :param width: the width of the progress bar in characters, 0 means full + terminal width + :param file: The file to write to. If this is not a terminal then + only the label is printed. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are included anywhere in the progress bar output + which is not the case by default. + :param update_min_steps: Render only when this many updates have + completed. This allows tuning for very fast iterators. + + .. versionchanged:: 8.0 + Output is shown even if execution time is less than 0.5 seconds. + + .. versionchanged:: 8.0 + ``item_show_func`` shows the current item, not the previous one. + + .. versionchanged:: 8.0 + Labels are echoed if the output is not a TTY. Reverts a change + in 7.0 that removed all output. + + .. versionadded:: 8.0 + Added the ``update_min_steps`` parameter. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. Added the ``update`` method to + the object. + + .. versionadded:: 2.0 + """ + from ._termui_impl import ProgressBar + + color = resolve_color_default(color) + return ProgressBar( + iterable=iterable, + length=length, + show_eta=show_eta, + show_percent=show_percent, + show_pos=show_pos, + item_show_func=item_show_func, + fill_char=fill_char, + empty_char=empty_char, + bar_template=bar_template, + info_sep=info_sep, + file=file, + label=label, + width=width, + color=color, + update_min_steps=update_min_steps, + ) + + +def clear() -> None: + """Clears the terminal screen. This will have the effect of clearing + the whole visible space of the terminal and moving the cursor to the + top left. This does not do anything if not connected to a terminal. + + .. versionadded:: 2.0 + """ + if not isatty(sys.stdout): + return + if WIN: + os.system("cls") + else: + sys.stdout.write("\033[2J\033[1;1H") + + +def _interpret_color( + color: t.Union[int, t.Tuple[int, int, int], str], offset: int = 0 +) -> str: + if isinstance(color, int): + return f"{38 + offset};5;{color:d}" + + if isinstance(color, (tuple, list)): + r, g, b = color + return f"{38 + offset};2;{r:d};{g:d};{b:d}" + + return str(_ansi_colors[color] + offset) + + +def style( + text: t.Any, + fg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bold: t.Optional[bool] = None, + dim: t.Optional[bool] = None, + underline: t.Optional[bool] = None, + overline: t.Optional[bool] = None, + italic: t.Optional[bool] = None, + blink: t.Optional[bool] = None, + reverse: t.Optional[bool] = None, + strikethrough: t.Optional[bool] = None, + reset: bool = True, +) -> str: + """Styles a text with ANSI styles and returns the new string. By + default the styling is self contained which means that at the end + of the string a reset code is issued. This can be prevented by + passing ``reset=False``. + + Examples:: + + click.echo(click.style('Hello World!', fg='green')) + click.echo(click.style('ATTENTION!', blink=True)) + click.echo(click.style('Some things', reverse=True, fg='cyan')) + click.echo(click.style('More colors', fg=(255, 12, 128), bg=117)) + + Supported color names: + + * ``black`` (might be a gray) + * ``red`` + * ``green`` + * ``yellow`` (might be an orange) + * ``blue`` + * ``magenta`` + * ``cyan`` + * ``white`` (might be light gray) + * ``bright_black`` + * ``bright_red`` + * ``bright_green`` + * ``bright_yellow`` + * ``bright_blue`` + * ``bright_magenta`` + * ``bright_cyan`` + * ``bright_white`` + * ``reset`` (reset the color code only) + + If the terminal supports it, color may also be specified as: + + - An integer in the interval [0, 255]. The terminal must support + 8-bit/256-color mode. + - An RGB tuple of three integers in [0, 255]. The terminal must + support 24-bit/true-color mode. + + See https://en.wikipedia.org/wiki/ANSI_color and + https://gist.github.com/XVilka/8346728 for more information. + + :param text: the string to style with ansi codes. + :param fg: if provided this will become the foreground color. + :param bg: if provided this will become the background color. + :param bold: if provided this will enable or disable bold mode. + :param dim: if provided this will enable or disable dim mode. This is + badly supported. + :param underline: if provided this will enable or disable underline. + :param overline: if provided this will enable or disable overline. + :param italic: if provided this will enable or disable italic. + :param blink: if provided this will enable or disable blinking. + :param reverse: if provided this will enable or disable inverse + rendering (foreground becomes background and the + other way round). + :param strikethrough: if provided this will enable or disable + striking through text. + :param reset: by default a reset-all code is added at the end of the + string which means that styles do not carry over. This + can be disabled to compose styles. + + .. versionchanged:: 8.0 + A non-string ``message`` is converted to a string. + + .. versionchanged:: 8.0 + Added support for 256 and RGB color codes. + + .. versionchanged:: 8.0 + Added the ``strikethrough``, ``italic``, and ``overline`` + parameters. + + .. versionchanged:: 7.0 + Added support for bright colors. + + .. versionadded:: 2.0 + """ + if not isinstance(text, str): + text = str(text) + + bits = [] + + if fg: + try: + bits.append(f"\033[{_interpret_color(fg)}m") + except KeyError: + raise TypeError(f"Unknown color {fg!r}") from None + + if bg: + try: + bits.append(f"\033[{_interpret_color(bg, 10)}m") + except KeyError: + raise TypeError(f"Unknown color {bg!r}") from None + + if bold is not None: + bits.append(f"\033[{1 if bold else 22}m") + if dim is not None: + bits.append(f"\033[{2 if dim else 22}m") + if underline is not None: + bits.append(f"\033[{4 if underline else 24}m") + if overline is not None: + bits.append(f"\033[{53 if overline else 55}m") + if italic is not None: + bits.append(f"\033[{3 if italic else 23}m") + if blink is not None: + bits.append(f"\033[{5 if blink else 25}m") + if reverse is not None: + bits.append(f"\033[{7 if reverse else 27}m") + if strikethrough is not None: + bits.append(f"\033[{9 if strikethrough else 29}m") + bits.append(text) + if reset: + bits.append(_ansi_reset_all) + return "".join(bits) + + +def unstyle(text: str) -> str: + """Removes ANSI styling information from a string. Usually it's not + necessary to use this function as Click's echo function will + automatically remove styling if necessary. + + .. versionadded:: 2.0 + + :param text: the text to remove style information from. + """ + return strip_ansi(text) + + +def secho( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO] = 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/python3.7/site-packages/click/testing.py b/venv/lib/python3.7/site-packages/click/testing.py new file mode 100644 index 0000000..d19b850 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/testing.py @@ -0,0 +1,479 @@ +import contextlib +import io +import os +import shlex +import shutil +import sys +import tempfile +import typing as t +from types import TracebackType + +from . import formatting +from . import termui +from . import utils +from ._compat import _find_binary_reader + +if t.TYPE_CHECKING: + from .core import BaseCommand + + +class EchoingStdin: + def __init__(self, input: t.BinaryIO, output: t.BinaryIO) -> None: + self._input = input + self._output = output + self._paused = False + + def __getattr__(self, x: str) -> t.Any: + return getattr(self._input, x) + + def _echo(self, rv: bytes) -> bytes: + if not self._paused: + self._output.write(rv) + + return rv + + def read(self, n: int = -1) -> bytes: + return self._echo(self._input.read(n)) + + def read1(self, n: int = -1) -> bytes: + return self._echo(self._input.read1(n)) # type: ignore + + def readline(self, n: int = -1) -> bytes: + return self._echo(self._input.readline(n)) + + def readlines(self) -> t.List[bytes]: + return [self._echo(x) for x in self._input.readlines()] + + def __iter__(self) -> t.Iterator[bytes]: + return iter(self._echo(x) for x in self._input) + + def __repr__(self) -> str: + return repr(self._input) + + +@contextlib.contextmanager +def _pause_echo(stream: t.Optional[EchoingStdin]) -> t.Iterator[None]: + if stream is None: + yield + else: + stream._paused = True + yield + stream._paused = False + + +class _NamedTextIOWrapper(io.TextIOWrapper): + def __init__( + self, buffer: t.BinaryIO, name: str, mode: str, **kwargs: t.Any + ) -> None: + super().__init__(buffer, **kwargs) + self._name = name + self._mode = mode + + @property + def name(self) -> str: + return self._name + + @property + def mode(self) -> str: + return self._mode + + +def make_input_stream( + input: t.Optional[t.Union[str, bytes, t.IO]], charset: str +) -> t.BinaryIO: + # Is already an input stream. + if hasattr(input, "read"): + rv = _find_binary_reader(t.cast(t.IO, input)) + + if rv is not None: + return rv + + raise TypeError("Could not find binary reader for input stream.") + + if input is None: + input = b"" + elif isinstance(input, str): + input = input.encode(charset) + + return io.BytesIO(t.cast(bytes, input)) + + +class Result: + """Holds the captured result of an invoked CLI script.""" + + def __init__( + self, + runner: "CliRunner", + stdout_bytes: bytes, + stderr_bytes: t.Optional[bytes], + return_value: t.Any, + exit_code: int, + exception: t.Optional[BaseException], + exc_info: t.Optional[ + t.Tuple[t.Type[BaseException], BaseException, TracebackType] + ] = None, + ): + #: The runner that created the result + self.runner = runner + #: The standard output as bytes. + self.stdout_bytes = stdout_bytes + #: The standard error as bytes, or None if not available + self.stderr_bytes = stderr_bytes + #: The value returned from the invoked command. + #: + #: .. versionadded:: 8.0 + self.return_value = return_value + #: The exit code as integer. + self.exit_code = exit_code + #: The exception that happened if one did. + self.exception = exception + #: The traceback + self.exc_info = exc_info + + @property + def output(self) -> str: + """The (standard) output as unicode string.""" + return self.stdout + + @property + def stdout(self) -> str: + """The standard output as unicode string.""" + return self.stdout_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + @property + def stderr(self) -> str: + """The standard error as unicode string.""" + if self.stderr_bytes is None: + raise ValueError("stderr not separately captured") + return self.stderr_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + def __repr__(self) -> str: + exc_str = repr(self.exception) if self.exception else "okay" + return f"<{type(self).__name__} {exc_str}>" + + +class CliRunner: + """The CLI runner provides functionality to invoke a Click command line + script for unittesting purposes in a isolated environment. This only + works in single-threaded systems without any concurrency as it changes the + global interpreter state. + + :param charset: the character set for the input and output data. + :param env: a dictionary with environment variables for overriding. + :param echo_stdin: if this is set to `True`, then reading from stdin writes + to stdout. This is useful for showing examples in + some circumstances. Note that regular prompts + will automatically echo the input. + :param mix_stderr: if this is set to `False`, then stdout and stderr are + preserved as independent streams. This is useful for + Unix-philosophy apps that have predictable stdout and + noisy stderr, such that each may be measured + independently + """ + + def __init__( + self, + charset: str = "utf-8", + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + echo_stdin: bool = False, + mix_stderr: bool = True, + ) -> None: + self.charset = charset + self.env = env or {} + self.echo_stdin = echo_stdin + self.mix_stderr = mix_stderr + + def get_default_prog_name(self, cli: "BaseCommand") -> str: + """Given a command object it will return the default program name + for it. The default is the `name` attribute or ``"root"`` if not + set. + """ + return cli.name or "root" + + def make_env( + self, overrides: t.Optional[t.Mapping[str, t.Optional[str]]] = None + ) -> t.Mapping[str, t.Optional[str]]: + """Returns the environment overrides for invoking a script.""" + rv = dict(self.env) + if overrides: + rv.update(overrides) + return rv + + @contextlib.contextmanager + def isolation( + self, + input: t.Optional[t.Union[str, bytes, t.IO]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + color: bool = False, + ) -> t.Iterator[t.Tuple[io.BytesIO, t.Optional[io.BytesIO]]]: + """A context manager that sets up the isolation for invoking of a + command line tool. This sets up stdin with the given input data + and `os.environ` with the overrides from the given dictionary. + This also rebinds some internals in Click to be mocked (like the + prompt functionality). + + This is automatically done in the :meth:`invoke` method. + + :param input: the input stream to put into sys.stdin. + :param env: the environment overrides as dictionary. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + ``stderr`` is opened with ``errors="backslashreplace"`` + instead of the default ``"strict"``. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + """ + bytes_input = make_input_stream(input, self.charset) + echo_input = None + + old_stdin = sys.stdin + old_stdout = sys.stdout + old_stderr = sys.stderr + old_forced_width = formatting.FORCED_WIDTH + formatting.FORCED_WIDTH = 80 + + env = self.make_env(env) + + bytes_output = io.BytesIO() + + if self.echo_stdin: + bytes_input = echo_input = t.cast( + t.BinaryIO, EchoingStdin(bytes_input, bytes_output) + ) + + sys.stdin = text_input = _NamedTextIOWrapper( + bytes_input, encoding=self.charset, name="", mode="r" + ) + + if self.echo_stdin: + # Force unbuffered reads, otherwise TextIOWrapper reads a + # large chunk which is echoed early. + text_input._CHUNK_SIZE = 1 # type: ignore + + sys.stdout = _NamedTextIOWrapper( + bytes_output, encoding=self.charset, name="", mode="w" + ) + + bytes_error = None + if self.mix_stderr: + sys.stderr = sys.stdout + else: + bytes_error = io.BytesIO() + sys.stderr = _NamedTextIOWrapper( + bytes_error, + encoding=self.charset, + name="", + mode="w", + errors="backslashreplace", + ) + + @_pause_echo(echo_input) # type: ignore + def visible_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(prompt or "") + val = text_input.readline().rstrip("\r\n") + sys.stdout.write(f"{val}\n") + sys.stdout.flush() + return val + + @_pause_echo(echo_input) # type: ignore + def hidden_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(f"{prompt or ''}\n") + sys.stdout.flush() + return text_input.readline().rstrip("\r\n") + + @_pause_echo(echo_input) # type: ignore + def _getchar(echo: bool) -> str: + char = sys.stdin.read(1) + + if echo: + sys.stdout.write(char) + + sys.stdout.flush() + return char + + default_color = color + + def should_strip_ansi( + stream: t.Optional[t.IO] = None, color: t.Optional[bool] = None + ) -> bool: + if color is None: + return not default_color + return not color + + old_visible_prompt_func = termui.visible_prompt_func + old_hidden_prompt_func = termui.hidden_prompt_func + old__getchar_func = termui._getchar + old_should_strip_ansi = utils.should_strip_ansi # type: ignore + termui.visible_prompt_func = visible_input + termui.hidden_prompt_func = hidden_input + termui._getchar = _getchar + utils.should_strip_ansi = should_strip_ansi # type: ignore + + old_env = {} + try: + for key, value in env.items(): + old_env[key] = os.environ.get(key) + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + yield (bytes_output, bytes_error) + finally: + for key, value in old_env.items(): + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + sys.stdout = old_stdout + sys.stderr = old_stderr + sys.stdin = old_stdin + termui.visible_prompt_func = old_visible_prompt_func + termui.hidden_prompt_func = old_hidden_prompt_func + termui._getchar = old__getchar_func + utils.should_strip_ansi = old_should_strip_ansi # type: ignore + formatting.FORCED_WIDTH = old_forced_width + + def invoke( + self, + cli: "BaseCommand", + args: t.Optional[t.Union[str, t.Sequence[str]]] = None, + input: t.Optional[t.Union[str, bytes, t.IO]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + catch_exceptions: bool = True, + color: bool = False, + **extra: t.Any, + ) -> Result: + """Invokes a command in an isolated environment. The arguments are + forwarded directly to the command line script, the `extra` keyword + arguments are passed to the :meth:`~clickpkg.Command.main` function of + the command. + + This returns a :class:`Result` object. + + :param cli: the command to invoke + :param args: the arguments to invoke. It may be given as an iterable + or a string. When given as string it will be interpreted + as a Unix shell command. More details at + :func:`shlex.split`. + :param input: the input data for `sys.stdin`. + :param env: the environment overrides. + :param catch_exceptions: Whether to catch any other exceptions than + ``SystemExit``. + :param extra: the keyword arguments to pass to :meth:`main`. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + The result object has the ``return_value`` attribute with + the value returned from the invoked command. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionchanged:: 3.0 + Added the ``catch_exceptions`` parameter. + + .. versionchanged:: 3.0 + The result object has the ``exc_info`` attribute with the + traceback if available. + """ + exc_info = None + with self.isolation(input=input, env=env, color=color) as outstreams: + return_value = None + exception: t.Optional[BaseException] = None + exit_code = 0 + + if isinstance(args, str): + args = shlex.split(args) + + try: + prog_name = extra.pop("prog_name") + except KeyError: + prog_name = self.get_default_prog_name(cli) + + try: + return_value = cli.main(args=args or (), prog_name=prog_name, **extra) + except SystemExit as e: + exc_info = sys.exc_info() + e_code = t.cast(t.Optional[t.Union[int, t.Any]], e.code) + + if e_code is None: + e_code = 0 + + if e_code != 0: + exception = e + + if not isinstance(e_code, int): + sys.stdout.write(str(e_code)) + sys.stdout.write("\n") + e_code = 1 + + exit_code = e_code + + except Exception as e: + if not catch_exceptions: + raise + exception = e + exit_code = 1 + exc_info = sys.exc_info() + finally: + sys.stdout.flush() + stdout = outstreams[0].getvalue() + if self.mix_stderr: + stderr = None + else: + stderr = outstreams[1].getvalue() # type: ignore + + return Result( + runner=self, + stdout_bytes=stdout, + stderr_bytes=stderr, + return_value=return_value, + exit_code=exit_code, + exception=exception, + exc_info=exc_info, # type: ignore + ) + + @contextlib.contextmanager + def isolated_filesystem( + self, temp_dir: t.Optional[t.Union[str, os.PathLike]] = None + ) -> t.Iterator[str]: + """A context manager that creates a temporary directory and + changes the current working directory to it. This isolates tests + that affect the contents of the CWD to prevent them from + interfering with each other. + + :param temp_dir: Create the temporary directory under this + directory. If given, the created directory is not removed + when exiting. + + .. versionchanged:: 8.0 + Added the ``temp_dir`` parameter. + """ + cwd = os.getcwd() + t = tempfile.mkdtemp(dir=temp_dir) + os.chdir(t) + + try: + yield t + finally: + os.chdir(cwd) + + if temp_dir is None: + try: + shutil.rmtree(t) + except OSError: # noqa: B014 + pass diff --git a/venv/lib/python3.7/site-packages/click/types.py b/venv/lib/python3.7/site-packages/click/types.py new file mode 100644 index 0000000..103d218 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/types.py @@ -0,0 +1,1052 @@ +import os +import stat +import typing as t +from datetime import datetime +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import _get_argv_encoding +from ._compat import get_filesystem_encoding +from ._compat import open_stream +from .exceptions import BadParameter +from .utils import LazyFile +from .utils import safecall + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + from .core import Parameter + from .shell_completion import CompletionItem + + +class ParamType: + """Represents the type of a parameter. Validates and converts values + from the command line or Python into the correct type. + + To implement a custom type, subclass and implement at least the + following: + + - The :attr:`name` class attribute must be set. + - Calling an instance of the type with ``None`` must return + ``None``. This is already implemented by default. + - :meth:`convert` must convert string values to the correct type. + - :meth:`convert` must accept values that are already the correct + type. + - It must be able to convert a value if the ``ctx`` and ``param`` + arguments are ``None``. This can occur when converting prompt + input. + """ + + is_composite: t.ClassVar[bool] = False + arity: t.ClassVar[int] = 1 + + #: the descriptive name of this type + name: str + + #: if a list of this type is expected and the value is pulled from a + #: string environment variable, this is what splits it up. `None` + #: means any whitespace. For all parameters the general rule is that + #: whitespace splits them up. The exception are paths and files which + #: are split by ``os.path.pathsep`` by default (":" on Unix and ";" on + #: Windows). + envvar_list_splitter: t.ClassVar[t.Optional[str]] = None + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + .. versionadded:: 8.0 + """ + # The class name without the "ParamType" suffix. + param_type = type(self).__name__.partition("ParamType")[0] + param_type = param_type.partition("ParameterType")[0] + return {"param_type": param_type, "name": self.name} + + def __call__( + self, + value: t.Any, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> t.Any: + if value is not None: + return self.convert(value, param, ctx) + + def get_metavar(self, param: "Parameter") -> t.Optional[str]: + """Returns the metavar default for this param if it provides one.""" + + def get_missing_message(self, param: "Parameter") -> t.Optional[str]: + """Optionally might return extra information about a missing + parameter. + + .. versionadded:: 2.0 + """ + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + """Convert the value to the correct type. This is not called if + the value is ``None`` (the missing value). + + This must accept string values from the command line, as well as + values that are already the correct type. It may also convert + other compatible types. + + The ``param`` and ``ctx`` arguments may be ``None`` in certain + situations, such as when converting prompt input. + + If the value cannot be converted, call :meth:`fail` with a + descriptive message. + + :param value: The value to convert. + :param param: The parameter that is using this type to convert + its value. May be ``None``. + :param ctx: The current context that arrived at this value. May + be ``None``. + """ + return value + + def split_envvar_value(self, rv: str) -> t.Sequence[str]: + """Given a value from an environment variable this splits it up + into small chunks depending on the defined envvar list splitter. + + If the splitter is set to `None`, which means that whitespace splits, + then leading and trailing whitespace is ignored. Otherwise, leading + and trailing splitters usually lead to empty items being included. + """ + return (rv or "").split(self.envvar_list_splitter) + + def fail( + self, + message: str, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> "t.NoReturn": + """Helper method to fail with an invalid value message.""" + raise BadParameter(message, ctx=ctx, param=param) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a list of + :class:`~click.shell_completion.CompletionItem` objects for the + incomplete value. Most types do not provide completions, but + some do, and this allows custom types to provide custom + completions as well. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + return [] + + +class CompositeParamType(ParamType): + is_composite = True + + @property + def arity(self) -> int: # type: ignore + raise NotImplementedError() + + +class FuncParamType(ParamType): + def __init__(self, func: t.Callable[[t.Any], t.Any]) -> None: + self.name = func.__name__ + self.func = func + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["func"] = self.func + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self.func(value) + except ValueError: + try: + value = str(value) + except UnicodeError: + value = value.decode("utf-8", "replace") + + self.fail(value, param, ctx) + + +class UnprocessedParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + return value + + def __repr__(self) -> str: + return "UNPROCESSED" + + +class StringParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, bytes): + enc = _get_argv_encoding() + try: + value = value.decode(enc) + except UnicodeError: + fs_enc = get_filesystem_encoding() + if fs_enc != enc: + try: + value = value.decode(fs_enc) + except UnicodeError: + value = value.decode("utf-8", "replace") + else: + value = value.decode("utf-8", "replace") + return value + return str(value) + + def __repr__(self) -> str: + return "STRING" + + +class Choice(ParamType): + """The choice type allows a value to be checked against a fixed set + of supported values. All of these values have to be strings. + + You should only pass a list or tuple of choices. Other iterables + (like generators) may lead to surprising results. + + The resulting value will always be one of the originally passed choices + regardless of ``case_sensitive`` or any ``ctx.token_normalize_func`` + being specified. + + See :ref:`choice-opts` for an example. + + :param case_sensitive: Set to false to make choices case + insensitive. Defaults to true. + """ + + name = "choice" + + def __init__(self, choices: t.Sequence[str], case_sensitive: bool = True) -> None: + self.choices = choices + self.case_sensitive = case_sensitive + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["choices"] = self.choices + info_dict["case_sensitive"] = self.case_sensitive + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + choices_str = "|".join(self.choices) + + # Use curly braces to indicate a required argument. + if param.required and param.param_type_name == "argument": + return f"{{{choices_str}}}" + + # Use square braces to indicate an option or optional argument. + return f"[{choices_str}]" + + def get_missing_message(self, param: "Parameter") -> str: + return _("Choose from:\n\t{choices}").format(choices=",\n\t".join(self.choices)) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + # Match through normalization and case sensitivity + # first do token_normalize_func, then lowercase + # preserve original `value` to produce an accurate message in + # `self.fail` + normed_value = value + normed_choices = {choice: choice for choice in self.choices} + + if ctx is not None and ctx.token_normalize_func is not None: + normed_value = ctx.token_normalize_func(value) + normed_choices = { + ctx.token_normalize_func(normed_choice): original + for normed_choice, original in normed_choices.items() + } + + if not self.case_sensitive: + normed_value = normed_value.casefold() + normed_choices = { + normed_choice.casefold(): original + for normed_choice, original in normed_choices.items() + } + + if normed_value in normed_choices: + return normed_choices[normed_value] + + choices_str = ", ".join(map(repr, self.choices)) + self.fail( + ngettext( + "{value!r} is not {choice}.", + "{value!r} is not one of {choices}.", + len(self.choices), + ).format(value=value, choice=choices_str, choices=choices_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return f"Choice({list(self.choices)})" + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Complete choices that start with the incomplete value. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + str_choices = map(str, self.choices) + + if self.case_sensitive: + matched = (c for c in str_choices if c.startswith(incomplete)) + else: + incomplete = incomplete.lower() + matched = (c for c in str_choices if c.lower().startswith(incomplete)) + + return [CompletionItem(c) for c in matched] + + +class DateTime(ParamType): + """The DateTime type converts date strings into `datetime` objects. + + The format strings which are checked are configurable, but default to some + common (non-timezone aware) ISO 8601 formats. + + When specifying *DateTime* formats, you should only pass a list or a tuple. + Other iterables, like generators, may lead to surprising results. + + The format strings are processed using ``datetime.strptime``, and this + consequently defines the format strings which are allowed. + + Parsing is tried using each format, in order, and the first format which + parses successfully is used. + + :param formats: A list or tuple of date format strings, in the order in + which they should be tried. Defaults to + ``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``, + ``'%Y-%m-%d %H:%M:%S'``. + """ + + name = "datetime" + + def __init__(self, formats: t.Optional[t.Sequence[str]] = None): + self.formats = formats or ["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["formats"] = self.formats + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + return f"[{'|'.join(self.formats)}]" + + def _try_to_convert_date(self, value: t.Any, format: str) -> t.Optional[datetime]: + try: + return datetime.strptime(value, format) + except ValueError: + return None + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, datetime): + return value + + for format in self.formats: + converted = self._try_to_convert_date(value, format) + + if converted is not None: + return converted + + formats_str = ", ".join(map(repr, self.formats)) + self.fail( + ngettext( + "{value!r} does not match the format {format}.", + "{value!r} does not match the formats {formats}.", + len(self.formats), + ).format(value=value, format=formats_str, formats=formats_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return "DateTime" + + +class _NumberParamTypeBase(ParamType): + _number_class: t.ClassVar[t.Type] + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self._number_class(value) + except ValueError: + self.fail( + _("{value!r} is not a valid {number_type}.").format( + value=value, number_type=self.name + ), + param, + ctx, + ) + + +class _NumberRangeBase(_NumberParamTypeBase): + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + self.min = min + self.max = max + self.min_open = min_open + self.max_open = max_open + self.clamp = clamp + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + min=self.min, + max=self.max, + min_open=self.min_open, + max_open=self.max_open, + clamp=self.clamp, + ) + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import operator + + rv = super().convert(value, param, ctx) + lt_min: bool = self.min is not None and ( + operator.le if self.min_open else operator.lt + )(rv, self.min) + gt_max: bool = self.max is not None and ( + operator.ge if self.max_open else operator.gt + )(rv, self.max) + + if self.clamp: + if lt_min: + return self._clamp(self.min, 1, self.min_open) # type: ignore + + if gt_max: + return self._clamp(self.max, -1, self.max_open) # type: ignore + + if lt_min or gt_max: + self.fail( + _("{value} is not in the range {range}.").format( + value=rv, range=self._describe_range() + ), + param, + ctx, + ) + + return rv + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + """Find the valid value to clamp to bound in the given + direction. + + :param bound: The boundary value. + :param dir: 1 or -1 indicating the direction to move. + :param open: If true, the range does not include the bound. + """ + raise NotImplementedError + + def _describe_range(self) -> str: + """Describe the range for use in help text.""" + if self.min is None: + op = "<" if self.max_open else "<=" + return f"x{op}{self.max}" + + if self.max is None: + op = ">" if self.min_open else ">=" + return f"x{op}{self.min}" + + lop = "<" if self.min_open else "<=" + rop = "<" if self.max_open else "<=" + return f"{self.min}{lop}x{rop}{self.max}" + + def __repr__(self) -> str: + clamp = " clamped" if self.clamp else "" + return f"<{type(self).__name__} {self._describe_range()}{clamp}>" + + +class IntParamType(_NumberParamTypeBase): + name = "integer" + _number_class = int + + def __repr__(self) -> str: + return "INT" + + +class IntRange(_NumberRangeBase, IntParamType): + """Restrict an :data:`click.INT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "integer range" + + def _clamp( # type: ignore + self, bound: int, dir: "te.Literal[1, -1]", open: bool + ) -> int: + if not open: + return bound + + return bound + dir + + +class FloatParamType(_NumberParamTypeBase): + name = "float" + _number_class = float + + def __repr__(self) -> str: + return "FLOAT" + + +class FloatRange(_NumberRangeBase, FloatParamType): + """Restrict a :data:`click.FLOAT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. This is not supported if either + boundary is marked ``open``. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "float range" + + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + super().__init__( + min=min, max=max, min_open=min_open, max_open=max_open, clamp=clamp + ) + + if (min_open or max_open) and clamp: + raise TypeError("Clamping is not supported for open bounds.") + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + if not open: + return bound + + # Could use Python 3.9's math.nextafter here, but clamping an + # open float range doesn't seem to be particularly useful. It's + # left up to the user to write a callback to do it if needed. + raise RuntimeError("Clamping is not supported for open bounds.") + + +class BoolParamType(ParamType): + name = "boolean" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if value in {False, True}: + return bool(value) + + norm = value.strip().lower() + + if norm in {"1", "true", "t", "yes", "y", "on"}: + return True + + if norm in {"0", "false", "f", "no", "n", "off"}: + return False + + self.fail( + _("{value!r} is not a valid boolean.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "BOOL" + + +class UUIDParameterType(ParamType): + name = "uuid" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import uuid + + if isinstance(value, uuid.UUID): + return value + + value = value.strip() + + try: + return uuid.UUID(value) + except ValueError: + self.fail( + _("{value!r} is not a valid UUID.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "UUID" + + +class File(ParamType): + """Declares a parameter to be a file for reading or writing. The file + is automatically closed once the context tears down (after the command + finished working). + + Files can be opened for reading or writing. The special value ``-`` + indicates stdin or stdout depending on the mode. + + By default, the file is opened for reading text data, but it can also be + opened in binary mode or for writing. The encoding parameter can be used + to force a specific encoding. + + The `lazy` flag controls if the file should be opened immediately or upon + first IO. The default is to be non-lazy for standard input and output + streams as well as files opened for reading, `lazy` otherwise. When opening a + file lazily for reading, it is still opened temporarily for validation, but + will not be held open until first IO. lazy is mainly useful when opening + for writing to avoid creating the file until it is needed. + + Starting with Click 2.0, files can also be opened atomically in which + case all writes go into a separate file in the same folder and upon + completion the file will be moved over to the original location. This + is useful if a file regularly read by other users is modified. + + See :ref:`file-args` for more information. + """ + + name = "filename" + envvar_list_splitter = os.path.pathsep + + def __init__( + self, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: t.Optional[bool] = None, + atomic: bool = False, + ) -> None: + self.mode = mode + self.encoding = encoding + self.errors = errors + self.lazy = lazy + self.atomic = atomic + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update(mode=self.mode, encoding=self.encoding) + return info_dict + + def resolve_lazy_flag(self, value: t.Any) -> bool: + if self.lazy is not None: + return self.lazy + if value == "-": + return False + elif "w" in self.mode: + return True + return False + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + if hasattr(value, "read") or hasattr(value, "write"): + return value + + lazy = self.resolve_lazy_flag(value) + + if lazy: + f: t.IO = t.cast( + t.IO, + LazyFile( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ), + ) + + if ctx is not None: + ctx.call_on_close(f.close_intelligently) # type: ignore + + return f + + f, should_close = open_stream( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + + # If a context is provided, we automatically close the file + # at the end of the context execution (or flush out). If a + # context does not exist, it's the caller's responsibility to + # properly close the file. This for instance happens when the + # type is used with prompts. + if ctx is not None: + if should_close: + ctx.call_on_close(safecall(f.close)) + else: + ctx.call_on_close(safecall(f.flush)) + + return f + except OSError as e: # noqa: B014 + self.fail(f"{os.fsdecode(value)!r}: {e.strerror}", param, ctx) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide file path completions. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + return [CompletionItem(incomplete, type="file")] + + +class Path(ParamType): + """The path type is similar to the :class:`File` type but it performs + different checks. First of all, instead of returning an open file + handle it returns just the filename. Secondly, it can perform various + basic checks about what the file or directory should be. + + :param exists: if set to true, the file or directory needs to exist for + this value to be valid. If this is not required and a + file does indeed not exist, then all further checks are + silently skipped. + :param file_okay: controls if a file is a possible value. + :param dir_okay: controls if a directory is a possible value. + :param writable: if true, a writable check is performed. + :param readable: if true, a readable check is performed. + :param resolve_path: if this is true, then the path is fully resolved + before the value is passed onwards. This means + that it's absolute and symlinks are resolved. It + will not expand a tilde-prefix, as this is + supposed to be done by the shell only. + :param allow_dash: If this is set to `True`, a single dash to indicate + standard streams is permitted. + :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.0 + Allow passing ``type=pathlib.Path``. + + .. versionchanged:: 6.0 + Added the ``allow_dash`` parameter. + """ + + envvar_list_splitter = os.path.pathsep + + def __init__( + self, + exists: bool = False, + file_okay: bool = True, + dir_okay: bool = True, + writable: bool = False, + readable: bool = True, + resolve_path: bool = False, + allow_dash: bool = False, + path_type: t.Optional[t.Type] = None, + ): + self.exists = exists + self.file_okay = file_okay + self.dir_okay = dir_okay + self.writable = writable + self.readable = readable + self.resolve_path = resolve_path + self.allow_dash = allow_dash + self.type = path_type + + if self.file_okay and not self.dir_okay: + self.name = _("file") + elif self.dir_okay and not self.file_okay: + self.name = _("directory") + else: + self.name = _("path") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + exists=self.exists, + file_okay=self.file_okay, + dir_okay=self.dir_okay, + writable=self.writable, + readable=self.readable, + allow_dash=self.allow_dash, + ) + return info_dict + + def coerce_path_result(self, rv: t.Any) -> t.Any: + if self.type is not None and not isinstance(rv, self.type): + if self.type is str: + rv = os.fsdecode(rv) + elif self.type is bytes: + rv = os.fsencode(rv) + else: + rv = self.type(rv) + + return rv + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + rv = value + + is_dash = self.file_okay and self.allow_dash and rv in (b"-", "-") + + if not is_dash: + if self.resolve_path: + # os.path.realpath doesn't resolve symlinks on Windows + # until Python 3.8. Use pathlib for now. + import pathlib + + rv = os.fsdecode(pathlib.Path(rv).resolve()) + + try: + st = os.stat(rv) + except OSError: + if not self.exists: + return self.coerce_path_result(rv) + self.fail( + _("{name} {filename!r} does not exist.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + if not self.file_okay and stat.S_ISREG(st.st_mode): + self.fail( + _("{name} {filename!r} is a file.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + if not self.dir_okay and stat.S_ISDIR(st.st_mode): + self.fail( + _("{name} {filename!r} is a directory.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + if self.writable and not os.access(rv, os.W_OK): + self.fail( + _("{name} {filename!r} is not writable.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + if self.readable and not os.access(rv, os.R_OK): + self.fail( + _("{name} {filename!r} is not readable.").format( + name=self.name.title(), filename=os.fsdecode(value) + ), + param, + ctx, + ) + + return self.coerce_path_result(rv) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide path completions for only + directories or any paths. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + type = "dir" if self.dir_okay and not self.file_okay else "file" + return [CompletionItem(incomplete, type=type)] + + +class Tuple(CompositeParamType): + """The default behavior of Click is to apply a type on a value directly. + This works well in most cases, except for when `nargs` is set to a fixed + count and different types should be used for different items. In this + case the :class:`Tuple` type can be used. This type can only be used + if `nargs` is set to a fixed number. + + For more information see :ref:`tuple-type`. + + This can be selected by using a Python tuple literal as a type. + + :param types: a list of types that should be used for the tuple items. + """ + + def __init__(self, types: t.Sequence[t.Union[t.Type, ParamType]]) -> None: + self.types = [convert_type(ty) for ty in types] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["types"] = [t.to_info_dict() for t in self.types] + return info_dict + + @property + def name(self) -> str: # type: ignore + return f"<{' '.join(ty.name for ty in self.types)}>" + + @property + def arity(self) -> int: # type: ignore + return len(self.types) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + len_type = len(self.types) + len_value = len(value) + + if len_value != len_type: + self.fail( + ngettext( + "{len_type} values are required, but {len_value} was given.", + "{len_type} values are required, but {len_value} were given.", + len_value, + ).format(len_type=len_type, len_value=len_value), + param=param, + ctx=ctx, + ) + + return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value)) + + +def convert_type(ty: t.Optional[t.Any], default: t.Optional[t.Any] = None) -> ParamType: + """Find the most appropriate :class:`ParamType` for the given Python + type. If the type isn't provided, it can be inferred from a default + value. + """ + guessed_type = False + + if ty is None and default is not None: + if isinstance(default, (tuple, list)): + # If the default is empty, ty will remain None and will + # return STRING. + if default: + item = default[0] + + # A tuple of tuples needs to detect the inner types. + # Can't call convert recursively because that would + # incorrectly unwind the tuple to a single type. + if isinstance(item, (tuple, list)): + ty = tuple(map(type, item)) + else: + ty = type(item) + else: + ty = type(default) + + guessed_type = True + + if isinstance(ty, tuple): + return Tuple(ty) + + if isinstance(ty, ParamType): + return ty + + if ty is str or ty is None: + return STRING + + if ty is int: + return INT + + if ty is float: + return FLOAT + + if ty is bool: + return BOOL + + if guessed_type: + return STRING + + if __debug__: + try: + if issubclass(ty, ParamType): + raise AssertionError( + f"Attempted to use an uninstantiated parameter type ({ty})." + ) + except TypeError: + # ty is an instance (correct), so issubclass fails. + pass + + return FuncParamType(ty) + + +#: A dummy parameter type that just does nothing. From a user's +#: perspective this appears to just be the same as `STRING` but +#: internally no string conversion takes place if the input was bytes. +#: This is usually useful when working with file paths as they can +#: appear in bytes and unicode. +#: +#: For path related uses the :class:`Path` type is a better choice but +#: there are situations where an unprocessed type is useful which is why +#: it is is provided. +#: +#: .. versionadded:: 4.0 +UNPROCESSED = UnprocessedParamType() + +#: A unicode string parameter type which is the implicit default. This +#: can also be selected by using ``str`` as type. +STRING = StringParamType() + +#: An integer parameter. This can also be selected by using ``int`` as +#: type. +INT = IntParamType() + +#: A floating point value parameter. This can also be selected by using +#: ``float`` as type. +FLOAT = FloatParamType() + +#: A boolean parameter. This is the default for boolean flags. This can +#: also be selected by using ``bool`` as a type. +BOOL = BoolParamType() + +#: A UUID parameter. +UUID = UUIDParameterType() diff --git a/venv/lib/python3.7/site-packages/click/utils.py b/venv/lib/python3.7/site-packages/click/utils.py new file mode 100644 index 0000000..16033d6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/click/utils.py @@ -0,0 +1,579 @@ +import os +import sys +import typing as t +from functools import update_wrapper +from types import ModuleType + +from ._compat import _default_text_stderr +from ._compat import _default_text_stdout +from ._compat import _find_binary_writer +from ._compat import auto_wrap_for_ansi +from ._compat import binary_streams +from ._compat import get_filesystem_encoding +from ._compat import open_stream +from ._compat import should_strip_ansi +from ._compat import strip_ansi +from ._compat import text_streams +from ._compat import WIN +from .globals import resolve_color_default + +if t.TYPE_CHECKING: + import typing_extensions as te + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + + +def _posixify(name: str) -> str: + return "-".join(name.split()).lower() + + +def safecall(func: F) -> F: + """Wraps a function so that it swallows exceptions.""" + + def wrapper(*args, **kwargs): # type: ignore + try: + return func(*args, **kwargs) + except Exception: + pass + + return update_wrapper(t.cast(F, wrapper), func) + + +def make_str(value: t.Any) -> str: + """Converts a value into a valid string.""" + if isinstance(value, bytes): + try: + return value.decode(get_filesystem_encoding()) + except UnicodeError: + return value.decode("utf-8", "replace") + return str(value) + + +def make_default_short_help(help: str, max_length: int = 45) -> str: + """Returns a condensed version of help string.""" + # Consider only the first paragraph. + paragraph_end = help.find("\n\n") + + if paragraph_end != -1: + help = help[:paragraph_end] + + # Collapse newlines, tabs, and spaces. + words = help.split() + + if not words: + return "" + + # The first paragraph started with a "no rewrap" marker, ignore it. + if words[0] == "\b": + words = words[1:] + + total_length = 0 + last_index = len(words) - 1 + + for i, word in enumerate(words): + total_length += len(word) + (i > 0) + + if total_length > max_length: # too long, truncate + break + + if word[-1] == ".": # sentence end, truncate without "..." + return " ".join(words[: i + 1]) + + if total_length == max_length and i != last_index: + break # not at sentence end, truncate with "..." + else: + return " ".join(words) # no truncation needed + + # Account for the length of the suffix. + total_length += len("...") + + # remove words until the length is short enough + while i > 0: + total_length -= len(words[i]) + (i > 0) + + if total_length <= max_length: + break + + i -= 1 + + return " ".join(words[:i]) + "..." + + +class LazyFile: + """A lazy file works like a regular file but it does not fully open + the file but it does perform some basic checks early to see if the + filename parameter does make sense. This is useful for safely opening + files for writing. + """ + + def __init__( + self, + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, + ): + self.name = filename + self.mode = mode + self.encoding = encoding + self.errors = errors + self.atomic = atomic + self._f: t.Optional[t.IO] + + if filename == "-": + self._f, self.should_close = open_stream(filename, mode, encoding, errors) + else: + if "r" in mode: + # Open and close the file in case we're opening it for + # reading so that we can catch at least some errors in + # some cases early. + open(filename, mode).close() + self._f = None + self.should_close = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self.open(), name) + + def __repr__(self) -> str: + if self._f is not None: + return repr(self._f) + return f"" + + def open(self) -> t.IO: + """Opens the file if it's not yet open. This call might fail with + a :exc:`FileError`. Not handling this error will produce an error + that Click shows. + """ + if self._f is not None: + return self._f + try: + rv, self.should_close = open_stream( + self.name, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + except OSError as e: # noqa: E402 + from .exceptions import FileError + + raise FileError(self.name, hint=e.strerror) from e + self._f = rv + return rv + + def close(self) -> None: + """Closes the underlying file, no matter what.""" + if self._f is not None: + self._f.close() + + def close_intelligently(self) -> None: + """This function only closes the file if it was opened by the lazy + file wrapper. For instance this will never close stdin. + """ + if self.should_close: + self.close() + + def __enter__(self) -> "LazyFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + self.close_intelligently() + + def __iter__(self) -> t.Iterator[t.AnyStr]: + self.open() + return iter(self._f) # type: ignore + + +class KeepOpenFile: + def __init__(self, file: t.IO) -> None: + self._file = file + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._file, name) + + def __enter__(self) -> "KeepOpenFile": + return self + + def __exit__(self, exc_type, exc_value, tb): # type: ignore + pass + + def __repr__(self) -> str: + return repr(self._file) + + def __iter__(self) -> t.Iterator[t.AnyStr]: + return iter(self._file) + + +def echo( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO] = None, + nl: bool = True, + err: bool = False, + color: t.Optional[bool] = None, +) -> None: + """Print a message and newline to stdout or a file. This should be + used instead of :func:`print` because it provides better support + for different data, files, and environments. + + Compared to :func:`print`, this does the following: + + - Ensures that the output encoding is not misconfigured on Linux. + - Supports Unicode in the Windows console. + - Supports writing to binary outputs, and supports writing bytes + to text outputs. + - Supports colors and styles on Windows. + - Removes ANSI color and style codes if the output does not look + like an interactive terminal. + - Always flushes the output. + + :param message: The string or bytes to output. Other objects are + converted to strings. + :param file: The file to write to. Defaults to ``stdout``. + :param err: Write to ``stderr`` instead of ``stdout``. + :param nl: Print a newline after the message. Enabled by default. + :param color: Force showing or hiding colors and other styles. By + default Click will remove color if the output does not look like + an interactive terminal. + + .. versionchanged:: 6.0 + Support Unicode output on the Windows console. Click does not + modify ``sys.stdout``, so ``sys.stdout.write()`` and ``print()`` + will still not support Unicode. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionadded:: 3.0 + Added the ``err`` parameter. + + .. versionchanged:: 2.0 + Support colors on Windows if colorama is installed. + """ + if file is None: + if err: + file = _default_text_stderr() + else: + file = _default_text_stdout() + + # Convert non bytes/text into the native string type. + if message is not None and not isinstance(message, (str, bytes, bytearray)): + out: t.Optional[t.Union[str, bytes]] = str(message) + else: + out = message + + if nl: + out = out or "" + if isinstance(out, str): + out += "\n" + else: + out += b"\n" + + if not out: + file.flush() + return + + # If there is a message and the value looks like bytes, we manually + # need to find the binary stream and write the message in there. + # This is done separately so that most stream types will work as you + # would expect. Eg: you can write to StringIO for other cases. + if isinstance(out, (bytes, bytearray)): + binary_file = _find_binary_writer(file) + + if binary_file is not None: + file.flush() + binary_file.write(out) + binary_file.flush() + return + + # ANSI style code support. For no message or bytes, nothing happens. + # When outputting to a file instead of a terminal, strip codes. + else: + color = resolve_color_default(color) + + if should_strip_ansi(file, color): + out = strip_ansi(out) + elif WIN: + if auto_wrap_for_ansi is not None: + file = auto_wrap_for_ansi(file) # type: ignore + elif not color: + out = strip_ansi(out) + + file.write(out) # type: ignore + file.flush() + + +def get_binary_stream(name: "te.Literal['stdin', 'stdout', 'stderr']") -> t.BinaryIO: + """Returns a system stream for byte processing. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + """ + opener = binary_streams.get(name) + if opener is None: + raise TypeError(f"Unknown standard stream '{name}'") + return opener() + + +def get_text_stream( + name: "te.Literal['stdin', 'stdout', 'stderr']", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", +) -> t.TextIO: + """Returns a system stream for text processing. This usually returns + a wrapped stream around a binary stream returned from + :func:`get_binary_stream` but it also can take shortcuts for already + correctly configured streams. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + :param encoding: overrides the detected default encoding. + :param errors: overrides the default error mode. + """ + opener = text_streams.get(name) + if opener is None: + raise TypeError(f"Unknown standard stream '{name}'") + return opener(encoding, errors) + + +def open_file( + filename: str, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: bool = False, + atomic: bool = False, +) -> t.IO: + """This is similar to how the :class:`File` works but for manual + usage. Files are opened non lazy by default. This can open regular + files as well as stdin/stdout if ``'-'`` is passed. + + If stdin/stdout is returned the stream is wrapped so that the context + manager will not close the stream accidentally. This makes it possible + to always use the function like this without having to worry to + accidentally close a standard stream:: + + with open_file(filename) as f: + ... + + .. versionadded:: 3.0 + + :param filename: the name of the file to open (or ``'-'`` for stdin/stdout). + :param mode: the mode in which to open the file. + :param encoding: the encoding to use. + :param errors: the error handling for this file. + :param lazy: can be flipped to true to open the file lazily. + :param atomic: in atomic mode writes go into a temporary file and it's + moved on close. + """ + if lazy: + return t.cast(t.IO, LazyFile(filename, mode, encoding, errors, atomic=atomic)) + f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic) + if not should_close: + f = t.cast(t.IO, KeepOpenFile(f)) + return f + + +def get_os_args() -> t.Sequence[str]: + """Returns the argument part of ``sys.argv``, removing the first + value which is the name of the script. + + .. deprecated:: 8.0 + Will be removed in Click 8.1. Access ``sys.argv[1:]`` directly + instead. + """ + import warnings + + warnings.warn( + "'get_os_args' is deprecated and will be removed in Click 8.1." + " Access 'sys.argv[1:]' directly instead.", + DeprecationWarning, + stacklevel=2, + ) + return sys.argv[1:] + + +def format_filename( + filename: t.Union[str, bytes, os.PathLike], shorten: bool = False +) -> str: + """Formats a filename for user display. The main purpose of this + function is to ensure that the filename can be displayed at all. This + will decode the filename to unicode if necessary in a way that it will + not fail. Optionally, it can shorten the filename to not include the + full path to the filename. + + :param filename: formats a filename for UI display. This will also convert + the filename into unicode without failing. + :param shorten: this optionally shortens the filename to strip of the + path that leads up to it. + """ + if shorten: + filename = os.path.basename(filename) + + return os.fsdecode(filename) + + +def get_app_dir(app_name: str, roaming: bool = True, force_posix: bool = False) -> str: + r"""Returns the config folder for the application. The default behavior + is to return whatever is most appropriate for the operating system. + + To give you an idea, for an app called ``"Foo Bar"``, something like + the following folders could be returned: + + Mac OS X: + ``~/Library/Application Support/Foo Bar`` + Mac OS X (POSIX): + ``~/.foo-bar`` + Unix: + ``~/.config/foo-bar`` + Unix (POSIX): + ``~/.foo-bar`` + Windows (roaming): + ``C:\Users\\AppData\Roaming\Foo Bar`` + Windows (not roaming): + ``C:\Users\\AppData\Local\Foo Bar`` + + .. versionadded:: 2.0 + + :param app_name: the application name. This should be properly capitalized + and can contain whitespace. + :param roaming: controls if the folder should be roaming or not on Windows. + Has no affect otherwise. + :param force_posix: if this is set to `True` then on any POSIX system the + folder will be stored in the home folder with a leading + dot instead of the XDG config home or darwin's + application support folder. + """ + if WIN: + key = "APPDATA" if roaming else "LOCALAPPDATA" + folder = os.environ.get(key) + if folder is None: + folder = os.path.expanduser("~") + return os.path.join(folder, app_name) + if force_posix: + return os.path.join(os.path.expanduser(f"~/.{_posixify(app_name)}")) + if sys.platform == "darwin": + return os.path.join( + os.path.expanduser("~/Library/Application Support"), app_name + ) + return os.path.join( + os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")), + _posixify(app_name), + ) + + +class PacifyFlushWrapper: + """This wrapper is used to catch and suppress BrokenPipeErrors resulting + from ``.flush()`` being called on broken pipe during the shutdown/final-GC + of the Python interpreter. Notably ``.flush()`` is always called on + ``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any + other cleanup code, and the case where the underlying file is not a broken + pipe, all calls and attributes are proxied. + """ + + def __init__(self, wrapped: t.IO) -> None: + self.wrapped = wrapped + + def flush(self) -> None: + try: + self.wrapped.flush() + except OSError as e: + import errno + + if e.errno != errno.EPIPE: + raise + + def __getattr__(self, attr: str) -> t.Any: + return getattr(self.wrapped, attr) + + +def _detect_program_name( + path: t.Optional[str] = None, _main: ModuleType = sys.modules["__main__"] +) -> 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 not path: + path = sys.argv[0] + + # The value of __package__ indicates how Python was called. It may + # not exist if a setuptools script is installed as an egg. It may be + # set incorrectly for entry points created with pip on Windows. + if getattr(_main, "__package__", None) is None or ( + os.name == "nt" + and _main.__package__ == "" + and not os.path.exists(path) + and os.path.exists(f"{path}.exe") + ): + # Executed a file, like "python app.py". + return os.path.basename(path) + + # Executed a module, like "python -m example". + # Rewritten by Python from "-m script" to "/path/to/script.py". + # Need to look at main module to determine how it was executed. + py_module = t.cast(str, _main.__package__) + name = os.path.splitext(os.path.basename(path))[0] + + # A submodule like "example.cli". + if name != "__main__": + py_module = f"{py_module}.{name}" + + return f"python -m {py_module.lstrip('.')}" + + +def _expand_args( + args: t.Iterable[str], + *, + user: bool = True, + env: bool = True, + glob_recursive: bool = True, +) -> t.List[str]: + """Simulate Unix shell expansion with Python functions. + + See :func:`glob.glob`, :func:`os.path.expanduser`, and + :func:`os.path.expandvars`. + + This 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. + + .. 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) + + matches = glob(arg, recursive=glob_recursive) + + if not matches: + out.append(arg) + else: + out.extend(matches) + + return out diff --git a/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/LICENSE.txt b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/LICENSE.txt new file mode 100644 index 0000000..3105888 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/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/python3.7/site-packages/colorama-0.4.4.dist-info/METADATA b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/METADATA new file mode 100644 index 0000000..2a175c2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/METADATA @@ -0,0 +1,415 @@ +Metadata-Version: 2.1 +Name: colorama +Version: 0.4.4 +Summary: Cross-platform colored terminal text. +Home-page: https://github.com/tartley/colorama +Author: Jonathan Hartley +Author-email: tartley@tartley.com +Maintainer: Arnon Yaari +License: BSD +Keywords: color colour terminal text ansi windows crossplatform xplatform +Platform: UNKNOWN +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.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Terminals +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* + +.. 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://travis-ci.org/tartley/colorama.svg?branch=master + :target: https://travis-ci.org/tartley/colorama + :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 +------------ + +.. 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.init()``. + +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 +.............. + +Applications should initialise Colorama using: + +.. code-block:: python + + from colorama import init + init() + +On Windows, calling ``init()`` will filter ANSI escape sequences out of any +text sent to ``stdout`` or ``stderr``, and replace them with equivalent Win32 +calls. + +On other platforms, calling ``init()`` has no effect (unless you request other +optional functionality; see "Init Keyword Args", below). By design, this permits +applications to call ``init()`` unconditionally on all platforms, after which +ANSI output should just work. + +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). + + +Colored Output +.............. + +Cross-platform printing of colored text can then be done using Colorama's +constant shorthand for ANSI escape sequences: + +.. 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 `_ +or the fabulous `Blessings `_. +This is highly recommended for anything more than trivial coloring: + +.. code-block:: python + + from colorama import init + from termcolor import colored + + # use Colorama to make Termcolor work on Windows too + init() + + # 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. + + +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 presumably valid ANSI sequences aren't recognised (see details below), +but to my knowledge nobody has yet complained about this. Puzzling. + +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. + + +License +------- + +Copyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see +LICENSE file. + + +Development +----------- + +Help and fixes welcome! + +Tested on CPython 2.7, 3.5, 3.6, 3.7 and 3.8. + +No requirements other than the standard library. +Development requirements are captured in requirements-dev.txt. + +To create and populate a virtual environment:: + + ./bootstrap.ps1 # Windows + make bootstrap # Linux + +To run tests:: + + ./test.ps1 # Windows + make test # Linux + +If you use nose to run the tests, you must pass the ``-s`` flag; otherwise, +``nosetests`` applies its own proxy to ``stdout``, which confuses the unit +tests. + + +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 +------ + +* 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/python3.7/site-packages/colorama-0.4.4.dist-info/RECORD b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/RECORD new file mode 100644 index 0000000..e806f4e --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/RECORD @@ -0,0 +1,18 @@ +colorama-0.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +colorama-0.4.4.dist-info/LICENSE.txt,sha256=ysNcAmhuXQSlpxQL-zs25zrtSWZW6JEQLkKIhteTAxg,1491 +colorama-0.4.4.dist-info/METADATA,sha256=JmU7ePpEh1xcqZV0JKcrrlU7cp5o4InDlHJXbo_FTQw,14551 +colorama-0.4.4.dist-info/RECORD,, +colorama-0.4.4.dist-info/WHEEL,sha256=gxPaqcqKPLUXaSAKwmfHO7_iAOlVvmp33DewnUluBB8,116 +colorama-0.4.4.dist-info/top_level.txt,sha256=_Kx6-Cni2BT1PEATPhrSRxo0d7kSgfBbHf5o7IF1ABw,9 +colorama/__init__.py,sha256=pCdErryzLSzDW5P-rRPBlPLqbBtIRNJB6cMgoeJns5k,239 +colorama/__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/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +colorama/ansitowin32.py,sha256=yV7CEmCb19MjnJKODZEEvMH_fnbJhwnpzo4sxZuGXmA,10517 +colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915 +colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404 +colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438 diff --git a/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/WHEEL b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/WHEEL new file mode 100644 index 0000000..ecd4e92 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.35.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/top_level.txt new file mode 100644 index 0000000..3fcfb51 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama-0.4.4.dist-info/top_level.txt @@ -0,0 +1 @@ +colorama diff --git a/venv/lib/python3.7/site-packages/colorama/__init__.py b/venv/lib/python3.7/site-packages/colorama/__init__.py new file mode 100644 index 0000000..b149ed7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/__init__.py @@ -0,0 +1,6 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.4' diff --git a/venv/lib/python3.7/site-packages/colorama/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorama/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47395435ff636cb7588074779667fd28fb5d3a96 GIT binary patch literal 393 zcmYL_OG^VW5P&zk*+;uwy!J2bp$}|P1QD&`(Mts(mk_!Ug2`q{(%SluJoFFc>dBLL z4`Rkr9LP8CVJ3^J>PJELKO6QH^anUciGy(+p1libq6W!GA%av)VwI3YVS*9FW0|Uq zWGW}QDoCMvr1uw3WM7q}3^pc%CS68#_KCu%8hb2S;e6KcgEj|Ut+dpJDMlUNIw-r> zhI_nVs~4Xx-A;0!-L8$*rbfQJX{~tFPokZjzNORgd^~@sE8mBaf=OYyfeTCmz<@Ns zV;0&>27V4G06oZ*ka7AI1{(MlUsAf^#tPk1`W~4RCFklt*>m|;s%Nv7M#rCjKXGMB)Bb{R zaF}#6OC$J=fNQqKna#Lv>)fynZt~bm%{FOB)!N;~Qg6c*ZZGsisW;>_84gQZ z!XJeGV4Y_AL!qWfzv&O$eo(Qxo_DRZ5r$jWs#R}LdFns%w><8N8|o0mgq6c84g?x8VwpjfgsdEwyW*28A|7jMhn;5l5LiCX*9Zv(g;FP zX3~VcKQs}i7hYYhhMQZ}Er08>KL|p%-@p9e>a#1sx8XNcwQ_gUJ-TrRfnV8rF0-)U zghK~`2N`(R2{a~>gvXYL`LX3;S-aW{EpvZ)JNj4GvA(5lLmKsFi`Ewl{jl$;<&7Xg zHe@RBLPu%xBp&#K?+8AQIsNaP+$!q=PYLuPazcfD&1I(7_gvuwJ>hwSB0YHE6{$X> z!`sIl3IuU7L~G=)?+?6lW8UDoN8|87yt6cdDFRO;-e|-dVh?e};0Bf5l&KokszE^o zhYLl#sCfggUL$z+bx6h7V{_X5OE1_i`;Bq-I}5B(-_>^6p8i4)4cvw1uD-|i45mG{ z)`+b8edUy6(%`<37B!9tgQtGDArtFf=!T(?391)vR7;c%X$D^Zfiws1rYB=h-2V1! z=}tP1Kk!4xxqt-CYh3tr5X8}#RE484%3|Fv_;VdWbmBYrWkEgd9_h7+NcUV$x~{h zn&1{sW2533%2!cZDuitj3`GRq_E1F}xWbhx%OQ!`2@=)i`ktvqwtIHpg zX1`H)vPVuUtIKC}SwF?4xJcGdIyL8(*4m$rxy_Hch3<@w8*l13adWA&R_n}_$9#`k zMdi7&uRf#uxi@uh)@zO1pO5(-j~luk>WTwbj0TMW9jP{IBGqW4rcHZPZ(Z$*M*9`J zF4@Adbr}04eTJ;p$$&KZoRP8boACUU=i>`E|2a@7ldQQ9tcpvZ) z;1j?lz-NFeK=J4Z6r)O{zzYFB`$=Z$qf=nMN8|87|IgA0mI)4-1y1S2CWCln(x*N~ z+=<&sp0HCqXNXU9gLM!k*+s;@YH4BL160;YElf zLL^ZMfGk8G0xklu*a&=y(7lljxCi(Va3Am!zybUWa0%MwsS|0Ev3iTjEsaidPR8at z&1PH1?>1Ylr8Q~RTdPf(xKo>NwpVJ>Y}~E2Wo&I>aiu9^oo2VWBD1Z<`Gpl_!fE~> z(@G>$5Joy>5@Js2My4TW_Fr9XLdq*?-_?;CE+LIaoH6 zJFAEx@zL)=H+)Y2S>S}o5=7Gg8kB~_$qtX#J7`jA%q`xL@%B>ZPOT+Vs(+nYt95Eb z$Tvu&zU2qaBruB|2`&#VMVW9MKI}Qp=&vkAI$;5l0Q}{N0s#L)GCus}q1Ox57h7#E zstpAaqO403+$ZKyo5+}oQpOwVlW^KPW%9exzr&3fSqMr5rmp(jNYZH;mRU#_vW00n I<8g-bAF}{*(wc_0MB0>KYbOw9Kmr72 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorama/__pycache__/initialise.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorama/__pycache__/initialise.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8239ee876cab3c1c3c92701d55bb6148cd3eb9fd GIT binary patch literal 1612 zcma)6OK&4Z5bo}IcszdO!4e<}!pZ^35=#(~R$9a&9wG-0zF_Sl3(4wr&pMMGd#vjA zX0v!NBnK|=8~GtGjEy`l`QfwNioh$KTKNPcb;@k! zhPo(z7ZhXJi@)w4xXJ8bme20yQ|qvL_sQY&Pwahn?_g9GCFzO2R`O}?a$V#$`*?On z5f0f#w+x|>iS#r5kvB2JBVXi0{sqb+u)9ty#6m9AI5?NI>!d;OKTD@h0v$p|I%XZe zme4&TbZxrh5*P9g>gQydU9*g@6;}Pp1Ywbr&$#*jVhsRoLh%= zM!XwVbv<{bPiIv_?9VcCRfH4sSrzi>*Xbp&T~s0G?Hy=#7ec6QnMARSRVw3PM|v5A z7>RlH?~LnUJ}`1RjKF{JAX`w+$=r2SQeEdnEd4PQo!=u%z@+FwK`>LscVPlVzp;%)fT4vRYw>o>z5 zm-E65nMX`$rfD~(57_Va4q`@CwI#jj4Mb@Ji{GJJ{zV}}d`+KRztRnldcA&ki}?Mh zQjnN&FY?D8psJzq1iJE+pFsbVEm`HcgF`PJJ%>1=C og7j?kxlcZylxALJUvN$>Z%7bmqME3QQ28DtQM#AZ+V!ON51pS)4gdfE literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorama/__pycache__/win32.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorama/__pycache__/win32.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11f0c37f9e37a8195252fea757cfa0c3cc813147 GIT binary patch literal 3806 zcmai1%X1US8K3TX=waE&=4Ffl0m}w$Kv1xi)Fu=Gzkn*OOj+J|cPgo=vAShTj5MaF zg|SPV%r&Xpa%GP>PYgMf89u8kB?-pk7TcpWIyw7K<0CtF$tu8A*RGB)J18vnJA0tx6HpF zX2fZO;w5oboWsavabC<~XLm@87@g{0rnqvT>uz(#d*f zQ-x};9*06I4CHq^eZ99MlNO242jiRa1a;zo2n&m`#@|3v7AP7r~sHKZD%jdKZwHKrU)NSVWEGbSSkndfA=?g zR+(~X##jmE9WHQ+8hMbale(LGO19HNQ>#Hs50p&3R?ylGRhoOg`mC|Oyf)qr6D(Te z5lZq9L|Q%*7W|$0w&2of!~YF+;AI|qF6ta=k4Cp#A3iPeK)oOe0IHbIEv`12tM%oe zxwy8x+z1xFSy@?L3!XJrR`*XQMx#onUjZPkxL@0@rJmSrcJ^gj7Q2fBmBi|KoOE<2 z?xz#GkF{2v&4HFlnorb5r!V5&^t9OhI(*&f4SLxC&2Ew1=%c!XvWSvA1rcm$b**kj zIoh^q+g)lqC^(j(IYaY?7C?(euGr=6iF4!wys>}n<_&S{fBsdg6N)UGvhPy%tuj_A zqpzlE&|Z&sQl~E4+V>V>t>d2Wu64GywVDAN4(22>Y9BLinhOHp76g|elhD~L##sqJ zht0D6YbWDf8%=D$EcqblhdmhtX)y?Tu^2?uE(O8MK^ToV*hs`J47-b~t7}Wj##X7b zfu>(mUEb`3Z9`jfpzam$}8=H%^ zplQZj^Jr-6z*cTHB5BaXF;v$O)BmAVceqQ#h_g zNBupV_az_Y8-zM-TIDIP-A&o{F@=9BJlK+b`Fck^B)t+^*s=C6A2~(sK@_*bD0x^L ziy}AJVSg{3B=nkEJk6l-n(Ire->j!pFR!f~*=lT2#Nr2hHfcv&TjSFxDc(=p%DbSwu-F3`ZJs_#k=UNJp+n$8AG*6q3uvYbh_TJEp7$O^f~%D)8`sV5H@plVdxHR zgMi&olv#fyQZ1@WsMKj9XNVA>>X$?)%_)j}Mc$oZcHszSKhN-0F9R*VbC~kIP;>{0 zPN%b4ieSv*iTWh0vmapn`RXsBK|=ZgSAK>$&N(EaA}g~phueOI@s>dy4Z4D<7?>B( z7&(ChCt&aR_n8aZ@0=n3o>4-2=Lm+DtKFe9BuBBeH*^v3?ifL_b6zKad5fS+HZlk*)yx83W&r|SQNC8c1;G_^^6ps%I>ehoTK$eDJ|aT7C@s*S zd77xlGPzBW{KyVRV(S5k z5%7wD_RGhx+EDaQfS;>BU)*S}ubKPUgo8ou2-3#(l&SH$&z@EfX(;J}ILJAC6j5cw ylY@4d&vK8KXY#zr^Y}TeG^!8#G)m(f@|;bLdRS}RGm>83DdqA`aVB5P7yk>lmtMpG literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorama/__pycache__/winterm.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorama/__pycache__/winterm.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07137b185858358f63f1158566ad951cbd7569f9 GIT binary patch literal 4554 zcmc&&-E!N;72d@kL6DLtS&0_(TXF)Zpyj*~R(!&N&O!W@bEw z-?#t$s&)Mp#{NTt;m<;66;DJ&Fu_B1$eWzAO(qOszF@)(jK7&p6Jtx*7~6VmVeE(k z#sxjLg}ckD#dD5hs$AJmJH1;Uv@ytkw6cmP`WZ;Tnq07^A$ZdiM$-~z(-v0K5q7g6 zoTe)Z&7yFdo+#o}Pq|-qdi8$Tm*?2aBpr2b5HX364(B!zhe!dWQ7tLg_j|3w!1tBs z`-goo2&rH8{XY*{VYXt|w$|#OE33BkU|rdpJL~HWWz`?9HI%uten%DVuWhb3_STg1 zaD8iQ`%7hk<>5b>d>QZ1Bluur!hEM;p;?Z(f;Kx(VF;6DE=NTce=5?Wa% zG6SNV#`ezrwJqh;cJ6K7-Ba^v>(^kB&7JKBjXNVX)7}#8B?0E~L?nGGxSksmm$X|Y zrf)z-;tJyhgTqZ>p#_|TgVq)+!WG3A9Pa;#D2Xz91@VTM5wqyI;+mKf74(YYO))PP z(DTG4v51`|@s@Z=yo{N$xGt8&GI}%OZE;z=ir%bvM_duFp*JV4ir2wk5d|2jstSP9 z9{kWIAkmLn61k2i`V=H)r#xm|=C963LaDmE8N~H|FY1TEZd(RHuQoV12;{xqL0>t$dv~@U?5WbzwK$fY{XrZ= zfUXD*T7xiF#VCmV7FHr<`v-j)sF~qfI<)=$R{P0?Sv_?8h(MrbbLMpH_+jVK;}{WY zML~FQ!NKHP3Yku?6Z<|nIU=YqUg2f#(w}`?$?SGx$Tr=8SFjC6p@$2;$d;&Q;4y3H zYxA5F>Z_J~6OFu1aWY0M^+7@`|M{REPEev35 z_QaL5keQvp){vJchI}^xYuAX)uC)zU`9^PHG&9HU>pASP6Eo8^1rE^h0ZxTO-a?al zg;1kYQ0kSR)4G*9#L^*SYtZYB6I#k&fSEQ#vmgvGcerC%e8E`Y$K@fo=#c+|hJ=|k zI7S+3$c<@8@h*Q!tYnx;{cdCK6FfhvA05#quhEa%+=Ci@(>zE4jq0s2IPMu!R&hca z&stD3iw&KDrV9BXHf-XFs9a@E;KwsV^XrYde1tH1>Ug5}K{A9@C`!(Nv6y#_6B8I) zLC-ufV}5ESX2Q=5#0$yF8&z9UM$p+=uAryW@cPbmaHkp4JC4>dP>_s3O;8)--{@##Q23?B$Q%q~Sc%oOU;;{uH_Ds=57cH#go{D~o(G;>l& z?8I4SCvNW}%o~`G0T~y@LqKEI!OB&vm{|E{Y{kZkMFEf5BFc!BxJlv6;xzUEId)n) zW5c=ZgzvCc2Ctnb3n#tG>2D56UjLr2pxjfqX_DRXbQaNIO{32dPj@@VLFz8;xL;$3 zvg_O1J9pIOjZPS5H^S{fd^Cvbk6W_U#>c^wwLA%>Noy4cRf}1D!*@+Ea=xaFz2Tece=-(uw_mDw&^pQ+Wrne~3##UkWvwGQ@p9kgaGksj0G_%}(p%{Sn=I zn3ZA0s2IyS&v~F_#FD0_h51G98l!Y^@t7Pz6izvU{)NGhASgw~$Alb>ADcpn@C1Z7 zy}KDg{s=D?a2=-=7bwXv2afBRpZ_w2180F_95GH}{{S)BoGvByBswJ3v1)lTekmhM zLV&zWLS<{FmU^EPp{kSxwxrwB$hDG+iu{7e?}&_-9p$B_4LiNy?^upjKyv?R z-zKiF

GMbyw*s<}~e-s{9+kY9#l8chnS zKWOyIKXB*|?(vj&^(s|qB*l%C7)X!9hoh@=(5RiC__mc)b<$|LM!j1^=&C2_J|yYB zp$m1ISJ!B`L1c%>E|K388QEC(=sQGS1))(yUjVM*mR-}eJ=-hc&+%N>^*qn@R=ig< sCqBDXdd*Nyf4>{FWBqBL-d5?TY41?(C+WW{J|!pUn|Il&lq&ZB0Q1A6s{jB1 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorama/ansi.py b/venv/lib/python3.7/site-packages/colorama/ansi.py new file mode 100644 index 0000000..11ec695 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/ansi.py @@ -0,0 +1,102 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +''' +This module generates ANSI character codes to printing colors to terminals. +See: http://en.wikipedia.org/wiki/ANSI_escape_code +''' + +CSI = '\033[' +OSC = '\033]' +BEL = '\a' + + +def code_to_chars(code): + return CSI + str(code) + 'm' + +def set_title(title): + return OSC + '2;' + title + BEL + +def clear_screen(mode=2): + return CSI + str(mode) + 'J' + +def clear_line(mode=2): + return CSI + str(mode) + 'K' + + +class AnsiCodes(object): + def __init__(self): + # the subclasses declare class attributes which are numbers. + # Upon instantiation we define instance attributes, which are the same + # as the class attributes but wrapped with the ANSI escape sequence + for name in dir(self): + if not name.startswith('_'): + value = getattr(self, name) + setattr(self, name, code_to_chars(value)) + + +class AnsiCursor(object): + def UP(self, n=1): + return CSI + str(n) + 'A' + def DOWN(self, n=1): + return CSI + str(n) + 'B' + def FORWARD(self, n=1): + return CSI + str(n) + 'C' + def BACK(self, n=1): + return CSI + str(n) + 'D' + def POS(self, x=1, y=1): + return CSI + str(y) + ';' + str(x) + 'H' + + +class AnsiFore(AnsiCodes): + BLACK = 30 + RED = 31 + GREEN = 32 + YELLOW = 33 + BLUE = 34 + MAGENTA = 35 + CYAN = 36 + WHITE = 37 + RESET = 39 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 90 + LIGHTRED_EX = 91 + LIGHTGREEN_EX = 92 + LIGHTYELLOW_EX = 93 + LIGHTBLUE_EX = 94 + LIGHTMAGENTA_EX = 95 + LIGHTCYAN_EX = 96 + LIGHTWHITE_EX = 97 + + +class AnsiBack(AnsiCodes): + BLACK = 40 + RED = 41 + GREEN = 42 + YELLOW = 43 + BLUE = 44 + MAGENTA = 45 + CYAN = 46 + WHITE = 47 + RESET = 49 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 100 + LIGHTRED_EX = 101 + LIGHTGREEN_EX = 102 + LIGHTYELLOW_EX = 103 + LIGHTBLUE_EX = 104 + LIGHTMAGENTA_EX = 105 + LIGHTCYAN_EX = 106 + LIGHTWHITE_EX = 107 + + +class AnsiStyle(AnsiCodes): + BRIGHT = 1 + DIM = 2 + NORMAL = 22 + RESET_ALL = 0 + +Fore = AnsiFore() +Back = AnsiBack() +Style = AnsiStyle() +Cursor = AnsiCursor() diff --git a/venv/lib/python3.7/site-packages/colorama/ansitowin32.py b/venv/lib/python3.7/site-packages/colorama/ansitowin32.py new file mode 100644 index 0000000..6039a05 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/ansitowin32.py @@ -0,0 +1,258 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style, BEL +from .winterm import WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +class StreamWrapper(object): + ''' + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()', which is delegated to our + Converter instance. + ''' + def __init__(self, wrapped, converter): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + self.__convertor = converter + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def __enter__(self, *args, **kwargs): + # special method lookup bypasses __getattr__/__getattribute__, see + # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit + # thus, contextlib magic methods are not proxied via __getattr__ + return self.__wrapped.__enter__(*args, **kwargs) + + def __exit__(self, *args, **kwargs): + return self.__wrapped.__exit__(*args, **kwargs) + + def write(self, text): + self.__convertor.write(text) + + def isatty(self): + stream = self.__wrapped + if 'PYCHARM_HOSTED' in os.environ: + if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__): + return True + try: + stream_isatty = stream.isatty + except AttributeError: + return False + else: + return stream_isatty() + + @property + def closed(self): + stream = self.__wrapped + try: + return stream.closed + except AttributeError: + return True + + +class AnsiToWin32(object): + ''' + Implements a 'write()' method which, on Windows, will strip ANSI character + sequences from the text, and if outputting to a tty, will convert them into + win32 function calls. + ''' + ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer + ANSI_OSC_RE = re.compile('\001?\033\\]([^\a]*)(\a)\002?') # Operating System Command + + def __init__(self, wrapped, convert=None, strip=None, autoreset=False): + # The wrapped stream (normally sys.stdout or sys.stderr) + self.wrapped = wrapped + + # should we reset colors to defaults after every .write() + self.autoreset = autoreset + + # create the proxy wrapping our output stream + self.stream = StreamWrapper(wrapped, self) + + on_windows = os.name == 'nt' + # We test if the WinAPI works, because even if we are on Windows + # we may be using a terminal that doesn't support the WinAPI + # (e.g. Cygwin Terminal). In this case it's up to the terminal + # to support the ANSI codes. + conversion_supported = on_windows and winapi_test() + + # should we strip ANSI sequences from our output? + if strip is None: + strip = conversion_supported or (not self.stream.closed and not self.stream.isatty()) + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = conversion_supported and not self.stream.closed and self.stream.isatty() + self.convert = convert + + # dict of ansi codes to win32 functions and parameters + self.win32_calls = self.get_win32_calls() + + # are we wrapping stderr? + self.on_stderr = self.wrapped is sys.stderr + + def should_wrap(self): + ''' + True if this class is actually needed. If false, then the output + stream will not be affected, nor will win32 calls be issued, so + wrapping stdout is not actually required. This will generally be + False on non-Windows platforms, unless optional functionality like + autoreset has been requested using kwargs to init() + ''' + return self.convert or self.strip or self.autoreset + + def get_win32_calls(self): + if self.convert and winterm: + return { + AnsiStyle.RESET_ALL: (winterm.reset_all, ), + AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), + AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), + AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), + AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), + AnsiFore.RED: (winterm.fore, WinColor.RED), + AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), + AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), + AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), + AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), + AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), + AnsiFore.WHITE: (winterm.fore, WinColor.GREY), + AnsiFore.RESET: (winterm.fore, ), + AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), + AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), + AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), + AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), + AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), + AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), + AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), + AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), + AnsiBack.BLACK: (winterm.back, WinColor.BLACK), + AnsiBack.RED: (winterm.back, WinColor.RED), + AnsiBack.GREEN: (winterm.back, WinColor.GREEN), + AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), + AnsiBack.BLUE: (winterm.back, WinColor.BLUE), + AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), + AnsiBack.CYAN: (winterm.back, WinColor.CYAN), + AnsiBack.WHITE: (winterm.back, WinColor.GREY), + AnsiBack.RESET: (winterm.back, ), + AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), + AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), + AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), + AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), + AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), + AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), + AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), + AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), + } + return dict() + + def write(self, text): + if self.strip or self.convert: + self.write_and_convert(text) + else: + self.wrapped.write(text) + self.wrapped.flush() + if self.autoreset: + self.reset_all() + + + def reset_all(self): + if self.convert: + self.call_win32('m', (0,)) + elif not self.strip and not self.stream.closed: + self.wrapped.write(Style.RESET_ALL) + + + def write_and_convert(self, text): + ''' + Write the given text to our wrapped stream, stripping any ANSI + sequences from the text, and optionally converting them into win32 + calls. + ''' + cursor = 0 + text = self.convert_osc(text) + for match in self.ANSI_CSI_RE.finditer(text): + start, end = match.span() + self.write_plain_text(text, cursor, start) + self.convert_ansi(*match.groups()) + cursor = end + self.write_plain_text(text, cursor, len(text)) + + + def write_plain_text(self, text, start, end): + if start < end: + self.wrapped.write(text[start:end]) + self.wrapped.flush() + + + def convert_ansi(self, paramstring, command): + if self.convert: + params = self.extract_params(command, paramstring) + self.call_win32(command, params) + + + def extract_params(self, command, paramstring): + if command in 'Hf': + params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) + while len(params) < 2: + # defaults: + params = params + (1,) + else: + params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) + if len(params) == 0: + # defaults: + if command in 'JKm': + params = (0,) + elif command in 'ABCD': + params = (1,) + + return params + + + def call_win32(self, command, params): + if command == 'm': + for param in params: + if param in self.win32_calls: + func_args = self.win32_calls[param] + func = func_args[0] + args = func_args[1:] + kwargs = dict(on_stderr=self.on_stderr) + func(*args, **kwargs) + elif command in 'J': + winterm.erase_screen(params[0], on_stderr=self.on_stderr) + elif command in 'K': + winterm.erase_line(params[0], on_stderr=self.on_stderr) + elif command in 'Hf': # cursor position - absolute + winterm.set_cursor_position(params, on_stderr=self.on_stderr) + elif command in 'ABCD': # cursor position - relative + n = params[0] + # A - up, B - down, C - forward, D - back + x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] + winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) + + + def convert_osc(self, text): + for match in self.ANSI_OSC_RE.finditer(text): + start, end = match.span() + text = text[:start] + text[end:] + paramstring, command = match.groups() + if command == BEL: + if paramstring.count(";") == 1: + params = paramstring.split(";") + # 0 - change title and icon (we will only change title) + # 1 - change icon (we don't support this) + # 2 - change title + if params[0] in '02': + winterm.set_title(params[1]) + return text diff --git a/venv/lib/python3.7/site-packages/colorama/initialise.py b/venv/lib/python3.7/site-packages/colorama/initialise.py new file mode 100644 index 0000000..430d066 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/initialise.py @@ -0,0 +1,80 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +orig_stdout = None +orig_stderr = None + +wrapped_stdout = None +wrapped_stderr = None + +atexit_done = False + + +def reset_all(): + if AnsiToWin32 is not None: # Issue #74: objects might become None at exit + AnsiToWin32(orig_stdout).reset_all() + + +def init(autoreset=False, convert=None, strip=None, wrap=True): + + if not wrap and any([autoreset, convert, strip]): + raise ValueError('wrap=False conflicts with any other arg=True') + + global wrapped_stdout, wrapped_stderr + global orig_stdout, orig_stderr + + orig_stdout = sys.stdout + orig_stderr = sys.stderr + + if sys.stdout is None: + wrapped_stdout = None + else: + sys.stdout = wrapped_stdout = \ + wrap_stream(orig_stdout, convert, strip, autoreset, wrap) + if sys.stderr is None: + wrapped_stderr = None + else: + sys.stderr = wrapped_stderr = \ + wrap_stream(orig_stderr, convert, strip, autoreset, wrap) + + global atexit_done + if not atexit_done: + atexit.register(reset_all) + atexit_done = True + + +def deinit(): + if orig_stdout is not None: + sys.stdout = orig_stdout + if orig_stderr is not None: + sys.stderr = orig_stderr + + +@contextlib.contextmanager +def colorama_text(*args, **kwargs): + init(*args, **kwargs) + try: + yield + finally: + deinit() + + +def reinit(): + if wrapped_stdout is not None: + sys.stdout = wrapped_stdout + if wrapped_stderr is not None: + sys.stderr = wrapped_stderr + + +def wrap_stream(stream, convert, strip, autoreset, wrap): + if wrap: + wrapper = AnsiToWin32(stream, + convert=convert, strip=strip, autoreset=autoreset) + if wrapper.should_wrap(): + stream = wrapper.stream + return stream diff --git a/venv/lib/python3.7/site-packages/colorama/win32.py b/venv/lib/python3.7/site-packages/colorama/win32.py new file mode 100644 index 0000000..c2d8360 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/win32.py @@ -0,0 +1,152 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +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 + + 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) diff --git a/venv/lib/python3.7/site-packages/colorama/winterm.py b/venv/lib/python3.7/site-packages/colorama/winterm.py new file mode 100644 index 0000000..0fdb4ec --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorama/winterm.py @@ -0,0 +1,169 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +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) diff --git a/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/LICENSE b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/LICENSE new file mode 100644 index 0000000..ef3747b --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2012-2021 Sam Clements + +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/python3.7/site-packages/colorlog-6.5.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/METADATA new file mode 100644 index 0000000..f8085e6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/METADATA @@ -0,0 +1,300 @@ +Metadata-Version: 2.1 +Name: colorlog +Version: 6.5.0 +Summary: Add colours to the output of Python's logging module. +Home-page: https://github.com/borntyping/python-colorlog +Author: Sam Clements +Author-email: sam@borntyping.co.uk +License: MIT License +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +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.6 +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: Topic :: Terminals +Classifier: Topic :: Utilities +Requires-Python: >=3.6 +Description-Content-Type: text/markdown +Requires-Dist: colorama ; sys_platform=="win32" +Provides-Extra: development +Requires-Dist: black ; extra == 'development' +Requires-Dist: flake8 ; extra == 'development' +Requires-Dist: mypy ; extra == 'development' +Requires-Dist: pytest ; extra == 'development' +Requires-Dist: types-colorama ; extra == 'development' + +Log formatting with colors! +=========================== + +[![](https://img.shields.io/pypi/v/colorlog.svg)](https://pypi.org/project/colorlog/) +[![](https://img.shields.io/pypi/l/colorlog.svg)](https://pypi.org/project/colorlog/) +[![](https://img.shields.io/travis/borntyping/python-colorlog/master.svg)](https://travis-ci.org/borntyping/python-colorlog) + +Add colours to the output of Python's `logging` module. + +* [Source on GitHub](https://github.com/borntyping/python-colorlog) +* [Packages on PyPI](https://pypi.org/pypi/colorlog/) + +Status +------ + +colorlog currently requires Python 3.6 or higher. Older versions (below 5.x.x) +support Python 2.6 and above. + +* colorlog 6.x requires Python 3.6 or higher. +* colorlog 5.x is an interim version that will warn Python 2 users to downgrade. +* colorlog 4.x is the final version supporting Python 2. + +[colorama] is included as a required dependency and initialised when using +colorlog on Windows. + +This library is almost a decade old and supported a wide set of Python versions +for most of its life, which has made it a difficult library to add new features +to. colorlog 6 may break backwards compatibility so that newer features +can be added more easily, but may still not accept all changes or feature +requests. colorlog 4 might accept essential bugfixes but should not be +considered actively maintained and will not accept any major changes or new +features. + +Installation +------------ + +Install from PyPI with: + +```bash +pip install colorlog +``` + +Several Linux distributions provide official packages ([Debian], [Fedora], +[Gentoo], [OpenSuse] and [Ubuntu]), and others have user provided packages +([Arch AUR], [BSD ports], [Conda]). + +Usage +----- + +```python +import colorlog + +handler = colorlog.StreamHandler() +handler.setFormatter(colorlog.ColoredFormatter( + '%(log_color)s%(levelname)s:%(name)s:%(message)s')) + +logger = colorlog.getLogger('example') +logger.addHandler(handler) +``` + +The `ColoredFormatter` class takes several arguments: + +- `format`: The format string used to output the message (required). +- `datefmt`: An optional date format passed to the base class. See [`logging.Formatter`][Formatter]. +- `reset`: Implicitly adds a color reset code to the message output, unless the output already ends with one. Defaults to `True`. +- `log_colors`: A mapping of record level names to color names. The defaults can be found in `colorlog.default_log_colors`, or the below example. +- `secondary_log_colors`: A mapping of names to `log_colors` style mappings, defining additional colors that can be used in format strings. See below for an example. +- `style`: Available on Python 3.2 and above. See [`logging.Formatter`][Formatter]. + +Color escape codes can be selected based on the log records level, by adding +parameters to the format string: + +- `log_color`: Return the color associated with the records level. +- `_log_color`: Return another color based on the records level if the formatter has secondary colors configured (see `secondary_log_colors` below). + +Multiple escape codes can be used at once by joining them with commas when +configuring the color for a log level (but can't be used directly in the format +string). For example, `black,bg_white` would use the escape codes for black +text on a white background. + +The following escape codes are made available for use in the format string: + +- `{color}`, `fg_{color}`, `bg_{color}`: Foreground and background colors. +- `bold`, `bold_{color}`, `fg_bold_{color}`, `bg_bold_{color}`: Bold/bright colors. +- `thin`, `thin_{color}`, `fg_thin_{color}`: Thin colors (terminal dependent). +- `reset`: Clear all formatting (both foreground and background colors). + +The available color names are `black`, `red`, `green`, `yellow`, `blue`, +`purple`, `cyan` and `white`. + +Examples +-------- + +![Example output](doc/example.png) + +The following code creates a `ColoredFormatter` for use in a logging setup, +using the default values for each argument. + +```python +from colorlog import ColoredFormatter + +formatter = ColoredFormatter( + "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s", + datefmt=None, + reset=True, + log_colors={ + 'DEBUG': 'cyan', + 'INFO': 'green', + 'WARNING': 'yellow', + 'ERROR': 'red', + 'CRITICAL': 'red,bg_white', + }, + secondary_log_colors={}, + style='%' +) +``` + +### Using `secondary_log_colors` + +Secondary log colors are a way to have more than one color that is selected +based on the log level. Each key in `secondary_log_colors` adds an attribute +that can be used in format strings (`message` becomes `message_log_color`), and +has a corresponding value that is identical in format to the `log_colors` +argument. + +The following example highlights the level name using the default log colors, +and highlights the message in red for `error` and `critical` level log messages. + +```python +from colorlog import ColoredFormatter + +formatter = ColoredFormatter( + "%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s", + secondary_log_colors={ + 'message': { + 'ERROR': 'red', + 'CRITICAL': 'red' + } + } +) +``` + +### With [`dictConfig`][dictConfig] + +```python +logging.config.dictConfig({ + 'formatters': { + 'colored': { + '()': 'colorlog.ColoredFormatter', + 'format': "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s" + } + } +}) +``` + +A full example dictionary can be found in `tests/test_colorlog.py`. + +### With [`fileConfig`][fileConfig] + +```ini +... + +[formatters] +keys=color + +[formatter_color] +class=colorlog.ColoredFormatter +format=%(log_color)s%(levelname)-8s%(reset)s %(bg_blue)s[%(name)s]%(reset)s %(message)s from fileConfig +datefmt=%m-%d %H:%M:%S +``` + +An instance of ColoredFormatter created with those arguments will then be used +by any handlers that are configured to use the `color` formatter. + +A full example configuration can be found in `tests/test_config.ini`. + +### With custom log levels + +ColoredFormatter will work with custom log levels added with +[`logging.addLevelName`][addLevelName]: + +```python +import logging, colorlog +TRACE = 5 +logging.addLevelName(TRACE, 'TRACE') +formatter = colorlog.ColoredFormatter(log_colors={'TRACE': 'yellow'}) +handler = logging.StreamHandler() +handler.setFormatter(formatter) +logger = logging.getLogger('example') +logger.addHandler(handler) +logger.setLevel('TRACE') +logger.log(TRACE, 'a message using a custom level') +``` + +Tests +----- + +Tests similar to the above examples are found in `tests/test_colorlog.py`. + +Status +------ + +colorlog is in maintenance mode. I try and ensure bugfixes are published, +but compatibility with Python 2.6+ and Python 3+ makes this a difficult +codebase to add features to. Any changes that might break backwards +compatibility for existing users will not be considered. + +Alternatives +------------ + +There are some more modern libraries for improving Python logging you may +find useful. + +- [structlog] +- [jsonlog] + +Projects using colorlog +----------------------- + +GitHub provides [a list of projects that depend on colorlog][dependents]. + +Some early adopters included [Errbot], [Pythran], and [zenlog]. + +Licence +------- + +Copyright (c) 2012-2021 Sam Clements + +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. + +[dictConfig]: http://docs.python.org/3/library/logging.config.html#logging.config.dictConfig +[fileConfig]: http://docs.python.org/3/library/logging.config.html#logging.config.fileConfig +[addLevelName]: https://docs.python.org/3/library/logging.html#logging.addLevelName +[Formatter]: http://docs.python.org/3/library/logging.html#logging.Formatter +[tox]: http://tox.readthedocs.org/ +[Arch AUR]: https://aur.archlinux.org/packages/python-colorlog/ +[BSD ports]: https://www.freshports.org/devel/py-colorlog/ +[colorama]: https://pypi.python.org/pypi/colorama +[Conda]: https://anaconda.org/conda-forge/colorlog +[Debian]: https://packages.debian.org/buster/python3-colorlog +[Errbot]: http://errbot.io/ +[Fedora]: https://src.fedoraproject.org/rpms/python-colorlog +[Gentoo]: https://packages.gentoo.org/packages/dev-python/colorlog +[OpenSuse]: http://rpm.pbone.net/index.php3?stat=3&search=python-colorlog&srodzaj=3 +[Pythran]: https://github.com/serge-sans-paille/pythran +[Ubuntu]: https://launchpad.net/python-colorlog +[zenlog]: https://github.com/ManufacturaInd/python-zenlog +[structlog]: https://www.structlog.org/en/stable/ +[jsonlog]: https://github.com/borntyping/jsonlog +[dependents]: https://github.com/borntyping/python-colorlog/network/dependents?package_id=UGFja2FnZS01MDk3NDcyMQ%3D%3D + + diff --git a/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/RECORD new file mode 100644 index 0000000..139e7c0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/RECORD @@ -0,0 +1,15 @@ +colorlog-6.5.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +colorlog-6.5.0.dist-info/LICENSE,sha256=sdkIK8SDYj_Vn8cnm0V_DkDZQqdkJs3iVyOeBN_kElo,1107 +colorlog-6.5.0.dist-info/METADATA,sha256=TBVqghxWcw7iPlklHde-cUB9CeRYvXyqUhUDL_UmEDM,10711 +colorlog-6.5.0.dist-info/RECORD,, +colorlog-6.5.0.dist-info/WHEEL,sha256=WzZ8cwjh8l0jtULNjYq1Hpr-WCqCRgPr--TX4P5I1Wo,110 +colorlog-6.5.0.dist-info/top_level.txt,sha256=CzNs7OLwLxUhbQzCCT2ore3b_ZzAXusw0tWIX79iWow,9 +colorlog/__init__.py,sha256=wzxah0vO2HpJheG0gXY4rMx_MyFYyfHsR8rTucg5PSI,1180 +colorlog/__pycache__/__init__.cpython-37.pyc,, +colorlog/__pycache__/escape_codes.cpython-37.pyc,, +colorlog/__pycache__/formatter.cpython-37.pyc,, +colorlog/__pycache__/wrappers.cpython-37.pyc,, +colorlog/escape_codes.py,sha256=jFxDvDyWHk5gX5tHpFIMF5om52dI_jCqyTBmeMtnpxQ,2437 +colorlog/formatter.py,sha256=-SPSeP6QzrZnwBS-elqOPXHfSVNCH6po6Ek-S9Cvl4k,7165 +colorlog/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +colorlog/wrappers.py,sha256=pUFWgPN-SljaWClIVzlSkmtxsYLLtPpyroiyEILOpWc,2174 diff --git a/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/WHEEL new file mode 100644 index 0000000..b733a60 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/top_level.txt new file mode 100644 index 0000000..3d8df46 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog-6.5.0.dist-info/top_level.txt @@ -0,0 +1 @@ +colorlog diff --git a/venv/lib/python3.7/site-packages/colorlog/__init__.py b/venv/lib/python3.7/site-packages/colorlog/__init__.py new file mode 100644 index 0000000..fb123b8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog/__init__.py @@ -0,0 +1,66 @@ +"""A logging formatter for colored output.""" + +import sys +import warnings + +from colorlog.formatter import ( + ColoredFormatter, + LevelFormatter, + TTYColoredFormatter, + default_log_colors, +) +from colorlog.wrappers import ( + CRITICAL, + DEBUG, + ERROR, + FATAL, + INFO, + NOTSET, + StreamHandler, + WARN, + WARNING, + basicConfig, + critical, + debug, + error, + exception, + getLogger, + info, + log, + root, + warning, +) + +__all__ = ( + "CRITICAL", + "DEBUG", + "ERROR", + "FATAL", + "INFO", + "NOTSET", + "WARN", + "WARNING", + "ColoredFormatter", + "LevelFormatter", + "StreamHandler", + "TTYColoredFormatter", + "basicConfig", + "critical", + "debug", + "default_log_colors", + "error", + "exception", + "exception", + "getLogger", + "info", + "log", + "root", + "warning", +) + +if sys.version_info < (3, 6): + warnings.warn( + "Colorlog requires Python 3.6 or above. Pin 'colorlog<5' to your dependencies " + "if you require compatibility with older versions of Python. See " + "https://github.com/borntyping/python-colorlog#status for more information." + ) diff --git a/venv/lib/python3.7/site-packages/colorlog/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorlog/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd77a2798f15b3c77df96f932d335b3e0b5782cd GIT binary patch literal 1150 zcmaiy&2HO96opBOlqlQskK`Z4ZjuSIFto5#z^H=+MiIxc9Rr3O$O?+ihM>feJS~UA z42QPmC+Q-Kc9~TkC%|m8@+)K!HhdOXC#UX_*hI5~FW$w-K9W@v}zyI~4{ZoOl zKWQ;|PUGYw9AV5E17g*P#kG;3mw%+&|W}{b{ST^MxoL zjJ{$I+4IF`idDA8L_v(9e*@~GJjoUr#e)(BCG$f`F_YX%C0l>2u$?c5mX=Ofx;@kz zSXvlL2A1xml3)0iiMFnaQWn+B30v>fdI#@`Lb1~Rh<+XsX~Jk4CCt%?KXYamv-AW zZS>)pevtTZO%Q?bKzPlr8Tn?|2?Ae6>1osV%oWE2e>*h#RF%uIzU_Dmw?D7)SPvuV z1XU$29q|>$rNEY^}K zf5oR5=u-?clw0m8XPzGN2TjtWN5P@u2x&|r?6T+O7d&FSSk2#{`7H%VlP_baDu#-o zD7E=mqi}v>vVEKU9hxh-SPV8X!|^YNpOMSBEcns%LG>lEP|&5&j_9qd{59I z_<_Jis8(Wq)wP?Ou_^_`dP@r7#ksCb3sQ2uE0EYZ4awq-HAk8be-0E z)JSy;>4Gd|^3+Z#m1owBfePBpb~4M^PGUbZka+1|r#PzwHwbPL%o5BI)ClSXKp+U# z2wDW|1P;Ll!6rg=T2gZ4Rf1~-zO`1~NG%Ak$6m-&3xHy^%zPCR6|ooak#U`WW~b z?9qI^sB&u$A@L_^p#Y_BDf7?0e8nx9O% zPJXfNL&p_M^wYza2pZ2T3NP_8&nX5kDVkQ%b3DgOn!^9<&HvB7q8``IYva7a$N8k1 Pey8y}sh0T!pHcq?Q)x@} literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorlog/__pycache__/formatter.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorlog/__pycache__/formatter.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9de22954308f0b7c4aec77eb4d3ad31129b2848d GIT binary patch literal 7251 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 EU;mJYO8@`> literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colorlog/__pycache__/wrappers.cpython-37.pyc b/venv/lib/python3.7/site-packages/colorlog/__pycache__/wrappers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b57a7b4fc929511d7b385f82031bb6c5d79f783f GIT binary patch literal 1902 zcmah~TW=gS6t?HSo82@`o22P=C`8JDvZ(+;K~+T?+7d`NQW8`&LfTBn-tBDWve@3X ziMG6?5`Ce+fQROhC;pFL;f24@2h?-Cxk(`5(R@BW9-sU1+-)}N1jZl#JWYNM2>BBi zN23PBSMbWe02ql0qs+=_OwDY?mYMC?hS|=o!ik;2joreFy~2c7T1b;TrVc# ziJ}oVie}s_CgVvumUSkcVorRPHTg8R`{(#n|9pRDp77b@)f}wGd(-oTSuFU?XEj!T z>Bbk>1Z%t`@jRdBR{!EYjV~JN5>S^6bs4D3hPndO6+>MG>Z+lx0d>t#Ay6T+Hc2$O z_x>Z13Ix>>E@;qJSo0ON|tk>okw>z+S*54Z9mYp9#?Ci z26seNspy=rK#Q;u90V7^L+}wWIRbMhAZ**jBnaa{6*Dm9ahdu3b zAu6G3{CUa;DyvE{frp%|>{i+a_e2BN{qTo^{J=l$W?Mk(qb6r0cAhm0b=<|}NRml>u+c~xAbt_RMO8YEP zyjv*k39g2sOwnH)=wlP!@8Fd`0w~g_T{7}sQwsDO>wr+QcN4gF-(hr~yzoc<8&`RK zzaNa8kvk$II<0J)7#uX%W19EWR1P(Mq(lJwTTGx)viKkYO$=S(g zHWV6&6+GvOG-9LRKkd1MMxnLZ+kv|1N$nqM{+);qf&cdNWmOE82iagLE2V;fEp4*jKH=u5oP%BuErb>J1uDi#Di3J(y3PS;u^tVjOW`LtralPe_az zq>a8J2lN-xHFwg>V4uFABMK?B_Z~c~Sk~PQldwB1Q!M&WRUtG*9#%sUp33NA6m~Nq zRhV_dvI>vl8}jFwRIL;gnStt2^)+~92%w0feXDQpgYq3q%qnLeYUmZgT6>K~SZz}S zkqbS>OMz!h4#jn(Fu{?f9gMA5#0Aw3+G?UJJ^~JO7(*#9apmW z0CrIo str: + return "\033[" + ";".join(str(code) for code in codes) + "m" + + +escape_codes = { + "reset": esc(0), + "bold": esc(1), + "thin": esc(2), +} + +escape_codes_foreground = { + "black": 30, + "red": 31, + "green": 32, + "yellow": 33, + "blue": 34, + "purple": 35, + "cyan": 36, + "white": 37, + "light_black": 90, + "light_red": 91, + "light_green": 92, + "light_yellow": 93, + "light_blue": 94, + "light_purple": 95, + "light_cyan": 96, + "light_white": 97, +} + +escape_codes_background = { + "black": 40, + "red": 41, + "green": 42, + "yellow": 43, + "blue": 44, + "purple": 45, + "cyan": 46, + "white": 47, + "light_black": 100, + "light_red": 101, + "light_green": 102, + "light_yellow": 103, + "light_blue": 104, + "light_purple": 105, + "light_cyan": 106, + "light_white": 107, + # Bold background colors don't exist, + # but we used to provide these names. + "bold_black": 100, + "bold_red": 101, + "bold_green": 102, + "bold_yellow": 103, + "bold_blue": 104, + "bold_purple": 105, + "bold_cyan": 106, + "bold_white": 107, +} + +# Foreground without prefix +for name, code in escape_codes_foreground.items(): + escape_codes["%s" % name] = esc(code) + escape_codes["bold_%s" % name] = esc(1, code) + escape_codes["thin_%s" % name] = esc(2, code) + +# Foreground with fg_ prefix +for name, code in escape_codes_foreground.items(): + escape_codes["fg_%s" % name] = esc(code) + escape_codes["fg_bold_%s" % name] = esc(1, code) + escape_codes["fg_thin_%s" % name] = esc(2, code) + +# Background with bg_ prefix +for name, code in escape_codes_background.items(): + escape_codes["bg_%s" % name] = esc(code) + +# 256 colour support +for code in range(256): + escape_codes["fg_%d" % code] = esc(38, 5, code) + escape_codes["bg_%d" % code] = esc(48, 5, code) + + +def parse_colors(string: str) -> str: + """Return escape codes from a color sequence string.""" + return "".join(escape_codes[n] for n in string.split(",") if n) diff --git a/venv/lib/python3.7/site-packages/colorlog/formatter.py b/venv/lib/python3.7/site-packages/colorlog/formatter.py new file mode 100644 index 0000000..3bdddea --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog/formatter.py @@ -0,0 +1,204 @@ +"""The ColoredFormatter class.""" + +import logging +import os +import sys +import typing + +import colorlog.escape_codes + +__all__ = ( + "default_log_colors", + "ColoredFormatter", + "LevelFormatter", + "TTYColoredFormatter", +) + +# Type aliases used in function signatures. +EscapeCodes = typing.Mapping[str, str] +LogColors = typing.Mapping[str, str] +SecondaryLogColors = typing.Mapping[str, LogColors] + +# The default colors to use for the debug levels +default_log_colors = { + "DEBUG": "white", + "INFO": "green", + "WARNING": "yellow", + "ERROR": "red", + "CRITICAL": "bold_red", +} + +# The default format to use for each style +default_formats = { + "%": "%(log_color)s%(levelname)s:%(name)s:%(message)s", + "{": "{log_color}{levelname}:{name}:{message}", + "$": "${log_color}${levelname}:${name}:${message}", +} + + +class ColoredRecord: + """ + Wraps a LogRecord, adding escape codes to the internal dict. + + The internal dict is used when formatting the message (by the PercentStyle, + StrFormatStyle, and StringTemplateStyle classes). + """ + + def __init__(self, record: logging.LogRecord, escapes: EscapeCodes) -> None: + self.__dict__.update(record.__dict__) + self.__dict__.update(escapes) + + +class ColoredFormatter(logging.Formatter): + """ + A formatter that allows colors to be placed in the format string. + + Intended to help in creating more readable logging output. + """ + + def __init__( + self, + fmt: typing.Optional[str] = None, + datefmt: typing.Optional[str] = None, + style: str = "%", + log_colors: typing.Optional[LogColors] = None, + reset: bool = True, + secondary_log_colors: typing.Optional[SecondaryLogColors] = None, + validate: bool = True, + stream: typing.Optional[typing.IO] = None, + no_color: bool = False, + ) -> None: + """ + Set the format and colors the ColoredFormatter will use. + + The ``fmt``, ``datefmt`` and ``style`` args are passed on to the + ``logging.Formatter`` constructor. + + The ``secondary_log_colors`` argument can be used to create additional + ``log_color`` attributes. Each key in the dictionary will set + ``{key}_log_color``, using the value to select from a different + ``log_colors`` set. + + :Parameters: + - fmt (str): The format string to use. + - datefmt (str): A format string for the date. + - log_colors (dict): + A mapping of log level names to color names. + - reset (bool): + Implicitly append a color reset to all records unless False. + - style ('%' or '{' or '$'): + The format style to use. (*No meaning prior to Python 3.2.*) + - secondary_log_colors (dict): + Map secondary ``log_color`` attributes. (*New in version 2.6.*) + - validate (bool) + Validate the format string. + - stream (typing.IO) + The stream formatted messages will be printed to. Used to toggle colour + on non-TTY outputs. Optional. + """ + + # Select a default format if `fmt` is not provided. + fmt = default_formats[style] if fmt is None else fmt + + if sys.version_info >= (3, 8): + super().__init__(fmt, datefmt, style, validate) + else: + super().__init__(fmt, datefmt, style) + + self.log_colors = log_colors if log_colors is not None else default_log_colors + self.secondary_log_colors = ( + secondary_log_colors if secondary_log_colors is not None else {} + ) + self.reset = reset + self.stream = stream + self.no_color = no_color + + def formatMessage(self, record: logging.LogRecord) -> str: + """Format a message from a record object.""" + escapes = self._escape_code_map(record.levelname) + wrapper = ColoredRecord(record, escapes) + message = super().formatMessage(wrapper) # type: ignore + message = self._append_reset(message, escapes) + return message + + def _escape_code_map(self, item: str) -> EscapeCodes: + """ + Build a map of keys to escape codes for use in message formatting. + + If _blank_escape_codes() returns True, all values will be an empty string. + """ + codes = {**colorlog.escape_codes.escape_codes} + codes.setdefault("log_color", self._get_escape_code(self.log_colors, item)) + for name, colors in self.secondary_log_colors.items(): + codes.setdefault("%s_log_color" % name, self._get_escape_code(colors, item)) + if self._blank_escape_codes(): + codes = {key: "" for key in codes.keys()} + return codes + + def _blank_escape_codes(self): + """Return True if we should be prevented from printing escape codes.""" + if self.no_color: + return True + + if "NO_COLOR" in os.environ: + return True + + if self.stream is not None and not self.stream.isatty(): + return True + + return False + + @staticmethod + def _get_escape_code(log_colors: LogColors, item: str) -> str: + """Extract a color sequence from a mapping, and return escape codes.""" + return colorlog.escape_codes.parse_colors(log_colors.get(item, "")) + + def _append_reset(self, message: str, escapes: EscapeCodes) -> str: + """Add a reset code to the end of the message, if it's not already there.""" + reset_escape_code = escapes["reset"] + + if self.reset and not message.endswith(reset_escape_code): + message += reset_escape_code + + return message + + +class LevelFormatter: + """An extension of ColoredFormatter that uses per-level format strings.""" + + def __init__(self, fmt: typing.Mapping[str, str], **kwargs: typing.Any) -> None: + """ + Configure a ColoredFormatter with its own format string for each log level. + + Supports fmt as a dict. All other args are passed on to the + ``colorlog.ColoredFormatter`` constructor. + + :Parameters: + - fmt (dict): + A mapping of log levels (represented as strings, e.g. 'WARNING') to + format strings. (*New in version 2.7.0) + (All other parameters are the same as in colorlog.ColoredFormatter) + + Example: + + formatter = colorlog.LevelFormatter( + fmt={ + "DEBUG": "%(log_color)s%(message)s (%(module)s:%(lineno)d)", + "INFO": "%(log_color)s%(message)s", + "WARNING": "%(log_color)sWRN: %(message)s (%(module)s:%(lineno)d)", + "ERROR": "%(log_color)sERR: %(message)s (%(module)s:%(lineno)d)", + "CRITICAL": "%(log_color)sCRT: %(message)s (%(module)s:%(lineno)d)", + } + ) + """ + self.formatters = { + level: ColoredFormatter(fmt=f, **kwargs) for level, f in fmt.items() + } + + def format(self, record: logging.LogRecord) -> str: + return self.formatters[record.levelname].format(record) + + +# Provided for backwards compatibility. The features provided by this subclass are now +# included directly in the `ColoredFormatter` class. +TTYColoredFormatter = ColoredFormatter diff --git a/venv/lib/python3.7/site-packages/colorlog/py.typed b/venv/lib/python3.7/site-packages/colorlog/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/colorlog/wrappers.py b/venv/lib/python3.7/site-packages/colorlog/wrappers.py new file mode 100644 index 0000000..7434ef5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colorlog/wrappers.py @@ -0,0 +1,92 @@ +"""Wrappers around the logging module.""" + +import functools +import logging +import typing +from logging import ( + CRITICAL, + DEBUG, + ERROR, + FATAL, + INFO, + NOTSET, + StreamHandler, + WARN, + WARNING, + getLogger, + root, +) + +import colorlog.formatter + +__all__ = ( + "CRITICAL", + "DEBUG", + "ERROR", + "FATAL", + "INFO", + "NOTSET", + "WARN", + "WARNING", + "StreamHandler", + "basicConfig", + "critical", + "debug", + "error", + "exception", + "getLogger", + "info", + "log", + "root", + "warning", +) + + +def basicConfig( + style: str = "%", + log_colors: typing.Optional[colorlog.formatter.LogColors] = None, + reset: bool = True, + secondary_log_colors: typing.Optional[colorlog.formatter.SecondaryLogColors] = None, + format: str = "%(log_color)s%(levelname)s%(reset)s:%(name)s:%(message)s", + datefmt: typing.Optional[str] = None, + **kwargs +) -> None: + """Call ``logging.basicConfig`` and override the formatter it creates.""" + logging.basicConfig(**kwargs) + logging._acquireLock() # type: ignore + try: + handler = logging.root.handlers[0] + handler.setFormatter( + colorlog.formatter.ColoredFormatter( + fmt=format, + datefmt=datefmt, + style=style, + log_colors=log_colors, + reset=reset, + secondary_log_colors=secondary_log_colors, + stream=kwargs.get("stream", None), + ) + ) + finally: + logging._releaseLock() # type: ignore + + +def ensure_configured(func): + """Modify a function to call our basicConfig() first if no handlers exist.""" + + @functools.wraps(func) + def wrapper(*args, **kwargs): + if len(logging.root.handlers) == 0: + basicConfig() + return func(*args, **kwargs) + + return wrapper + + +debug = ensure_configured(logging.debug) +info = ensure_configured(logging.info) +warning = ensure_configured(logging.warning) +error = ensure_configured(logging.error) +critical = ensure_configured(logging.critical) +log = ensure_configured(logging.log) +exception = ensure_configured(logging.exception) diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/DESCRIPTION.rst b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..18309af --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/DESCRIPTION.rst @@ -0,0 +1,73 @@ +############################# +COLORMAP documentation +############################# + + +Please see : http://colormap.readthedocs.io/ for an up-to-date documentation. + +.. image:: https://badge.fury.io/py/colormap.svg + :target: https://pypi.python.org/pypi/colormap + +.. image:: https://github.com/cokelaer/colormap/actions/workflows/ci.yml/badge.svg?branch=master + :target: https://github.com/cokelaer/colormap/actions/workflows/ci.yml + +.. image:: https://coveralls.io/repos/cokelaer/colormap/badge.png?branch=master + :target: https://coveralls.io/r/cokelaer/colormap?branch=master + + +:version: Python 3.6, 3.7, 3.8, 3.9 +:contributions: Please join https://github.com/cokelaer/colormap +:issues: Please use https://github.com/cokelaer/colormap/issues +:notebook: Please see https://github.com/cokelaer/colormap/tree/master/notebooks + + + +What is it ? +################ + +**colormap** package provides simple utilities to convert colors between +RGB, HEX, HLS, HUV and a class to easily build colormaps for matplotlib. All +matplotlib colormaps and some R colormaps are available altogether. The +plot_colormap method (see below) is handy to quickly pick up a colormaps and +the test_colormap is useful to see test a new colormap. + + +Installation +################### + +:: + + pip install colormap + +Example +########## + +* Create your own colormap from red to green colors with intermediate color as + whitish (diverging map from red to green):: + + c = Colormap() + mycmap = c.cmap( {'red':[1,1,0], 'green':[0,1,.39], 'blue':[0,1,0]}) + cmap = c.test_colormap(mycmap) + +* Even simpler if the colormap is linear:: + + c = Colormap() + mycmap = c.cmap_linear('red', 'white', 'green(w3c)') + cmap = c.test_colormap(mycmap) + +.. image:: http://colormap.readthedocs.io/en/latest/_images/index-1.png + :width: 50% + :align: center + +* check out the available colormaps:: + + c = Colormap() + c.plot_colormap('diverging') + +.. image:: http://colormap.readthedocs.io/en/latest/_images/colormaps.png + :width: 50% + :align: center + +See online documentation for details: http://colormap.readthedocs.io/ + + diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/METADATA b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/METADATA new file mode 100644 index 0000000..6157a0d --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/METADATA @@ -0,0 +1,102 @@ +Metadata-Version: 2.0 +Name: colormap +Version: 1.0.4 +Summary: Utilities to ease manipulation of matplotlib colormaps and color codecs (e.g., hex2rgb) +Home-page: http://github.com/cokelaer/colormap +Author: Thomas Cokelaer +Author-email: cokelaer@ebi.ac.uk +Maintainer: Thomas Cokelaer +Maintainer-email: cokelaer@ebi.ac.uk +License: LGPL +Download-URL: http://pypi.python.org/pypi/colormap +Keywords: hex2web,web2hex,hex2rgb,rgb2hex,rgb2hsv,hsv2rgb,rgb2hls,hls2rgb,colormap,colors +Platform: Linux +Platform: Unix +Platform: MacOsX +Platform: Windows +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires: matplotlib +Requires: easydev + +############################# +COLORMAP documentation +############################# + + +Please see : http://colormap.readthedocs.io/ for an up-to-date documentation. + +.. image:: https://badge.fury.io/py/colormap.svg + :target: https://pypi.python.org/pypi/colormap + +.. image:: https://github.com/cokelaer/colormap/actions/workflows/ci.yml/badge.svg?branch=master + :target: https://github.com/cokelaer/colormap/actions/workflows/ci.yml + +.. image:: https://coveralls.io/repos/cokelaer/colormap/badge.png?branch=master + :target: https://coveralls.io/r/cokelaer/colormap?branch=master + + +:version: Python 3.6, 3.7, 3.8, 3.9 +:contributions: Please join https://github.com/cokelaer/colormap +:issues: Please use https://github.com/cokelaer/colormap/issues +:notebook: Please see https://github.com/cokelaer/colormap/tree/master/notebooks + + + +What is it ? +################ + +**colormap** package provides simple utilities to convert colors between +RGB, HEX, HLS, HUV and a class to easily build colormaps for matplotlib. All +matplotlib colormaps and some R colormaps are available altogether. The +plot_colormap method (see below) is handy to quickly pick up a colormaps and +the test_colormap is useful to see test a new colormap. + + +Installation +################### + +:: + + pip install colormap + +Example +########## + +* Create your own colormap from red to green colors with intermediate color as + whitish (diverging map from red to green):: + + c = Colormap() + mycmap = c.cmap( {'red':[1,1,0], 'green':[0,1,.39], 'blue':[0,1,0]}) + cmap = c.test_colormap(mycmap) + +* Even simpler if the colormap is linear:: + + c = Colormap() + mycmap = c.cmap_linear('red', 'white', 'green(w3c)') + cmap = c.test_colormap(mycmap) + +.. image:: http://colormap.readthedocs.io/en/latest/_images/index-1.png + :width: 50% + :align: center + +* check out the available colormaps:: + + c = Colormap() + c.plot_colormap('diverging') + +.. image:: http://colormap.readthedocs.io/en/latest/_images/colormaps.png + :width: 50% + :align: center + +See online documentation for details: http://colormap.readthedocs.io/ + + diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/RECORD b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/RECORD new file mode 100644 index 0000000..c0672c7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/RECORD @@ -0,0 +1,15 @@ +colormap-1.0.4.dist-info/DESCRIPTION.rst,sha256=k7YNwYAoTXXmSRv_fsv0s_kKd-J4GSlTeC4RBiOtzy4,2118 +colormap-1.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +colormap-1.0.4.dist-info/METADATA,sha256=yEKDoGXSjih2XPEDj5845J2rhrKRejEUbzhgnbe15rI,3258 +colormap-1.0.4.dist-info/RECORD,, +colormap-1.0.4.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92 +colormap-1.0.4.dist-info/metadata.json,sha256=T7IkUtRquUznFP3wgELkN6-hUbVl1nEvrxNbrOB6n5c,1269 +colormap-1.0.4.dist-info/top_level.txt,sha256=EzA_UbyiRZ69j6IL1oMeS3JTo2Y8sogbGnOGTShKdj0,9 +colormap/__init__.py,sha256=-cV9TPpBVnFeQFAXgzcfDr9qAd6nzfClvhmFMwTTD7I,1003 +colormap/__pycache__/__init__.cpython-37.pyc,, +colormap/__pycache__/colors.cpython-37.pyc,, +colormap/__pycache__/get_cmap.cpython-37.pyc,, +colormap/__pycache__/xfree86.cpython-37.pyc,, +colormap/colors.py,sha256=lxgLjKEQSemYcg14SyGuCXbGFlBv4ft1PsJ3LNn99gs,32584 +colormap/get_cmap.py,sha256=K3eGlNHo4ohUPgi_SVHRyoODRVL3S5TCR6NxJXRKXNk,2032 +colormap/xfree86.py,sha256=i5lHRxGBHHRjGs0A2O0ps_plLrYV-fJvnKW0u37dyGA,4958 diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/WHEEL b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/WHEEL new file mode 100644 index 0000000..bb7f7db --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/metadata.json b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/metadata.json new file mode 100644 index 0000000..4a3b99d --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Software Development :: Libraries :: Python Modules"], "download_url": "http://pypi.python.org/pypi/colormap", "extensions": {"python.details": {"contacts": [{"email": "cokelaer@ebi.ac.uk", "name": "Thomas Cokelaer", "role": "author"}, {"email": "cokelaer@ebi.ac.uk", "name": "Thomas Cokelaer", "role": "maintainer"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/cokelaer/colormap"}}}, "generator": "bdist_wheel (0.29.0)", "keywords": ["hex2web", "web2hex", "hex2rgb", "rgb2hex", "rgb2hsv", "hsv2rgb", "rgb2hls", "hls2rgb", "colormap", "colors"], "license": "LGPL", "metadata_version": "2.0", "name": "colormap", "platform": "Linux", "requires": "matplotlib", "summary": "Utilities to ease manipulation of matplotlib colormaps and color codecs (e.g., hex2rgb)", "version": "1.0.4"} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/top_level.txt new file mode 100755 index 0000000..6cbac44 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap-1.0.4.dist-info/top_level.txt @@ -0,0 +1 @@ +colormap diff --git a/venv/lib/python3.7/site-packages/colormap/__init__.py b/venv/lib/python3.7/site-packages/colormap/__init__.py new file mode 100644 index 0000000..0266932 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap/__init__.py @@ -0,0 +1,39 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the colormap software +# +# Copyright (c) 2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://www.github.com/cokelaer/colormap +# Documentation: http://packages.python.org/colormap +# +############################################################################## +"""main colormap module""" +from __future__ import print_function +from __future__ import division + +import pkg_resources +try: + version = pkg_resources.require("colormap")[0].version + __version__ = version +except Exception: + version = '' + + +from .xfree86 import * +from . import colors +from .colors import * +from .get_cmap import * + +c = Colormap() +colormap_names = c.colormaps + c.diverging_black +# create an alias to test_colormap methiod +test_colormap = c.test_colormap +test_cmap = c.test_colormap diff --git a/venv/lib/python3.7/site-packages/colormap/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/colormap/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78dd40c328b8b9a9f1d48f02ee8ec0e5c7272cfe GIT binary patch literal 612 zcmYLF!EV$r5Veyuak86qyHujw_PR)AZ@>W|)QT$?RswvnLhJ^29Vghys^!XWaDXEp z(I4@ZQ^g-3Au-ux1YtJ%N2r=R17Bqqk_8eK~DPsTWnNTGN!> zqG|b{#69$lme>`Yk-BGBgRXknYETH5TWNv6p=2y_=pOI$@ncAdce-7kx`Z*_R*bof zfk!_W!I%jk)xeJ-mv@_*8DZPORKmK%h|hyG!X;Z_{1tA(*nxsa`ue64oo|CCH&;f8 z=TA-Ky%GRQYSFU_UO>s^;VlkVG#z`i^cXr9rk1*9A5~dxXfei^E*oKK-U|yJhiaPc zk6`%|nVG-H!=GoXzUfw-?9QdOeW}!W^NH1)cIa1Q>3_nQ)Us#nNq6hWi~ZleoP&*B a07Q6-rvbqMo?(IuoP`7wf=LjA9^-#n-l^XJ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colormap/__pycache__/colors.cpython-37.pyc b/venv/lib/python3.7/site-packages/colormap/__pycache__/colors.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..850ce2e11a949be305cd92978c3aabe025ca7892 GIT binary patch literal 32201 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colormap/__pycache__/get_cmap.cpython-37.pyc b/venv/lib/python3.7/site-packages/colormap/__pycache__/get_cmap.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f931798764c14c67ecab7bae5dc8add1b06ea26e GIT binary patch literal 1394 zcmZWp&5qkP5GM6!N3p%RMCEkx5Q2gjte;no24oMHa^d)(>-{N_j~ts%gOu z*W~!Pgx&Em5jCl_+6czkJt7RLmuf8;$vDugN_9~lfDs3_C$|XXE}t!C_sBUn)0ySz zfFFL2Y?j;#FZso_c!vi3x#rYxMixqx3o_TLAW+`bT?;kpe_6}o?n@n%6eXvc)H#)W zM!pv%mGTlU)r)%cxhP5wkFdS6UYLCWO()1*`V%pS8H?W1^KJwdxtsQ5n4ADGS zi&E5_&B%+dVzQx9Fo#HTTH5K()w*P$bXrCt<3S8$DN@1hymtlIE*6%t4=N z!@82fw9(xDFPJtyqjKHRPop-lLX*(?huzns7U$jW%hor)npa3q;12&hJ~2ggQi>!7PI@KRn_ld!y3{_Lz71AC0Efnr@8Ka1@B~Nx2>cL_z}&}+acm8; zxA4S|Av^U>Pp3gL>?vG7+d-OwfHZa3PTqk#0+x38b)nc=@^5Zg<^bHti~Rop;%}9X literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/colormap/__pycache__/xfree86.cpython-37.pyc b/venv/lib/python3.7/site-packages/colormap/__pycache__/xfree86.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3973a1b3cf0569424736109e11c00452c2e187ab GIT binary patch literal 3755 zcmeHK>vkhY5tes-ktNyQu-vZ-39tq>I~vUuLde|OSz@ov%49bK#Pq7#(!`?~?MSkt z;ZDLeKyt!gUVw+-MfNXm!8x2mRrieTUpxVtvzo7~tGlYc`nt9Dx3*dh{QUDj=lreP zjmE!dP=Ef0;8pxLGgcZ6XpC0k2CU$718%}9tid{LKod5h1#RfS7Hq=~+=A!eV{jWj zjy|7&Pr|3*)9@MiEPM_=4_|;U!k3^6&%>AD1$Ys@0$+u%!5!FzufsRsn{XFif_tDr z4|M2*fsY9m*x-N*--2($%kUj|1-=Wff(JeX5JChD_TV+R58s2=VIK}~%>y{ZosQu9 z@DK)Y3_pN3;1N8AHz9@}!jIs`@D`lFPk_S{7y^KRQy9S*5_lWVAcYBJki!(7LIE?F z!vfCX0^Wfol<-sd8T=f60l$P_!LQ*r@GiUuzlGny@8J*dNB9%G4}XTgz+eCVQM>{l z3>v#1KHGlG3LzZpWSFOUF)KG-U>b86Bj81TXd}=xh93krzCuI!C<`;083trwkrB|8 zCO^vJ2VrHA%NBTqv>Av6M^Zn?b(0b@2Z$zmC<8PSI5 z;>e(3&@=iJonkt^1dcBO?rUje@mzZ3lx4`B{m{29nsWSVm1$bOE=y)kAbni7uLra< z`AAFTx|U5jJIoIpayFcPC}Zi&zy~dw7DQnWfs2vCJ_5#ihD$)xe8rgM(u0;>BqfX+#u@ zs=)HRkaiCH^dNAx2x*`x=34<#hudh9XI=AkPZDkikqm0vj^h$_z7`mv(gx~|mSeZV zzRVdJl+k^yuURx@BL$KK%L+odA&q6KzGs>$jlQjgB#D0D_iakU_AMu(5Xd142!Y{* zJt>L6?wJnN-gA4dEt5B?dbH3fh*TAk;gb&@n8>S7fouv3nJF`*CaJ`HC(@N#JX2a2 zGZY9tOpM5kqR5fSyQn|cL5s)GMj4`jYLLdwV2 zB1M#^>6%mm5oIf9Vu*ZD=t}B6%awIGzG3!cs-C0Sl5oQ_B+q)}_$HlYOEcXxJBO+UL=`_*SvC3;L8`uNW|-YGDB}1rhIr-?%*pMjs~YOv&4xf$}}Ozu`eY2B9Ay*vex6&O@`?G=1kw$v2< zDr6OYeaz32vLo#Wd?d0tFK@}wVVaza?w<5*D@(z%ktplIaGXHdlrs+nROSIEI!cwp zK=5jV9qBfp3RS+>4Kg*g;&@R!UF6BEj-r^v5`>s`kCN=H+>&r`wp9Bx!(@Unu(o!X z!$=g0+)b7g;z^NUr#cLO{CKL`jHA2|v$;wu-e8O2c$V;ZbB`z4>`7kaWqWU&qeG<% zq7i2=$!t-q?w!ZI-fmgpNBv+IR}oQaB3`Rlt8CJtqXut^6q_11U&}MG1aVO!nyboM z_cKU%)t5Ze#!>~c zXSHQ6M5_8(ZK-IY6eps4M-r&8WHDab#{-(h8?|CP2fWC!X4RL=kzDuOfq-N&>0X`e zvR#?fJx~n}3n}QWYIw9Lrl}}zRl}>Q>iw>X`F8Cz#fxK9wV_^lCFy#l5;gU?+&V}g zyXsHtAj#(4pb&ggBA(5c-G@2e56y#oIOMY=D?1PPIe$B^<%y$Z**r|4yU&MsdB{Us zw$#}T3;rZtKUAl-rQS+iRju1cJjEk^C2lpAM_$ccCBGx*uBF~S;#0oll*zPg9SJ@h zcaIjQr}65MC>HpQrxm}`#iVQ>hs>6!ex>xmxdKKR!PFh$po^HB32`};N%0_ht z902oGx9WPOy7qu)P`htlwkd8RoQ?6c#p{DaWEn3zgCsr2ER>v@msd#ZS|=+^;*3`Z zS$=`5t~a$cxRh#q^O)mBd@S&`-Z&m(vr_z(IL;@0p2wS)#Kr6Nufe0S;PYo|@?t65 z^3@$o@-tjj$-SfAN&LIpJw~a#G+QL5+VjidB5cuYX(j=9B5YX)?Ww_tqSp z?oP%hqqBT5zbF5 +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/colormap +# Documentation: http://packages.python.org/colormap +# +############################################################################## +"""Utilities provided in this module can be found either in the +standard Python module called :mod:`colorsys` or in matplotlib.colors +(e.g rgb2hex) or are original to this module (e.g., rgb2huv) + + +""" +# matplotlib dependence is only inside Colormap class +import colorsys +from easydev.tools import check_param_in_list, swapdict, check_range +from colormap.xfree86 import XFree86_colors + + +__all__ = ["HEX", "Color", "hex2web", "web2hex", "hex2rgb", "hex2dec", + "rgb2hex", "rgb2hsv", "hsv2rgb", "rgb2hls", "hls2rgb","yuv2rgb", "rgb2yuv", + "to_intensity", "yuv2rgb_int", "rgb2yuv_int", "Colormap" + ] + + +def hex2web(hexa): + """Convert hexadecimal string (6 digits) into *web* version (3 digits) + + .. doctest:: + + >>> from colormap.colors import hex2web + >>> hex2web("#FFAA11") + '#FA1' + + .. seealso:: :func:`web2hex`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`rgb2hsv`, :func:`hsv2rgb`, :func:`rgb2hls`, + :func:`hls2rgb` + """ + hexa = HEX().get_standard_hex_color(hexa) + return "#" + hexa[1::2] + + +def web2hex(web): + """Convert *web* hexadecimal string (3 digits) into 6 digits version + + .. doctest:: + + >>> from colormap.colors import web2hex + >>> web2hex("#FA1") + '#FFAA11' + + .. seealso:: :func:`hex2web`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`rgb2hsv`, :func:`hsv2rgb`, :func:`rgb2hls`, + :func:`hls2rgb` + """ + return HEX().get_standard_hex_color(web) + + +def hex2rgb(hexcolor, normalise=False): + """This function converts a hex color triplet into RGB + + Valid hex code are: + + * #FFF + * #0000FF + * 0x0000FF + * 0xFA1 + + + .. doctest:: + + >>> from colormap.colors import hex2rgb + >>> hex2rgb("#FFF", normalise=False) + (255, 255, 255) + >>> hex2rgb("#FFFFFF", normalise=True) + (1.0, 1.0, 1.0) + + + .. seealso:: :func:`hex2web`, :func:`web2hex`, + :func:`rgb2hex`, :func:`rgb2hsv`, :func:`hsv2rgb`, :func:`rgb2hls`, + :func:`hls2rgb` + """ + hexcolor = HEX().get_standard_hex_color(hexcolor)[1:] + r, g, b = int(hexcolor[0:2], 16), int(hexcolor[2:4], 16), int(hexcolor[4:6], 16) + if normalise: + r, g, b = _normalise(r, g, b) + return r, g, b + + +def rgb2hex(r, g, b, normalised=False): + """Convert RGB to hexadecimal color + + :param: can be a tuple/list/set of 3 values (R,G,B) + :return: a hex vesion ofthe RGB 3-tuple + + .. doctest:: + + >>> from colormap.colors import rgb2hex + >>> rgb2hex(0,0,255, normalised=False) + '#0000FF' + >>> rgb2hex(0,0,1, normalised=True) + '#0000FF' + + .. seealso:: :func:`hex2web`, :func:`web2hex`, :func:`hex2rgb` + , :func:`rgb2hsv`, :func:`hsv2rgb`, :func:`rgb2hls`, + :func:`hls2rgb` + + """ + if normalised: + r, g, b = _denormalise(r, g, b, mode="rgb") + r = int(r) + g = int(g) + b = int(b) + check_range(r, 0, 255) + check_range(g, 0, 255) + check_range(b, 0, 255) + return '#%02X%02X%02X' % (r, g, b) + + +def rgb2hls(r, g, b, normalised=True): + """Convert an RGB value to an HLS value. + + :param bool normalised: if *normalised* is True, the input RGB triplet + should be in the range 0-1 (0-255 otherwise) + :return: the HLS triplet. If *normalised* parameter is True, the output + triplet is in the range 0-1; otherwise, H in the range 0-360 and LS + in the range 0-100. + + .. doctest:: + + >>> from colormap.colors import rgb2hls + >>> rgb2hls(255,255,255, normalised=False) + (0.0, 1.0, 0.0) + + + .. seealso:: :func:`hex2web`, :func:`web2hex`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`hsv2rgb`, + :func:`hls2rgb` + """ + # rgb_to_hsv expects normalised values ! + if normalised: + upper = 1 + else: + upper = 255 + check_range(r, 0, upper) + check_range(g, 0, upper) + check_range(b, 0, upper) + if normalised==False: + r, g, b = _normalise(r, g, b) + h, l, s = colorsys.rgb_to_hls(r, g, b) + return h, l, s + + +def rgb2hsv(r, g, b, normalised=True): + """Convert an RGB value to an HSV value. + + :param bool normalised: if *normalised* is True, the input RGB triplet + should be in the range 0-1 (0-255 otherwise) + :return: the HSV triplet. If *normalised* parameter is True, the output + triplet is in the range 0-1; otherwise, H in the range 0-360 and LS + in the range 0-100. + + .. doctest:: + + >>> from colormap.colors import rgb2hsv + >>> rgb2hsv(0.5,0,1) + (0.75, 1, 1) + + + .. seealso:: :func:`hex2web`, :func:`web2hex`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`hsv2rgb`, :func:`rgb2hls`, + :func:`hls2rgb` + """ + # rgb_to_hsv expects normalised values ! + if normalised: + upper = 1 + else: + upper = 255 + check_range(r, 0, upper) + check_range(g, 0, upper) + check_range(b, 0, upper) + if normalised==False: + r, g, b = _normalise(r, g, b) + h, s, v = colorsys.rgb_to_hsv(r, g, b) + return h,s,v + + +def hsv2rgb(h, s, v, normalised=True): + """Convert a hue-saturation-value (HSV) value to a red-green-blue (RGB). + + :param bool normalised: If *normalised* is True, the input HSV triplet + should be in the range 0-1; otherwise, H in the range 0-360 and LS + in the range 0-100. + :return: the RGB triplet. The output + triplet is in the range 0-1 whether the input is normalised or not. + + .. doctest:: + + >>> from colormap.colors import hsv2rgb + >>> hsv2rgb(0.5,1,1, normalised=True) # doctest: +SKIP + (0, 1, 1) + + + .. seealso:: :func:`hex2web`, :func:`web2hex`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`rgb2hsv`, :func:`rgb2hls`, + :func:`hls2rgb` + .. seealso:: :func:`rgb2hex` + """ + if normalised: + upper = 1 + else: + upper = 100 + if normalised: + uppera = 1 + else: + uppera = 360 + check_range(h, 0, uppera) + check_range(s, 0, upper) + check_range(v, 0, upper) + if normalised == False: + h, s, v = _normalise(h, s, v, mode="hsv") + return colorsys.hsv_to_rgb(h, s, v) + + +def hls2rgb(h, l, s, normalised=True): + """Convert an HLS value to a RGB value. + + :param bool normalised: If *normalised* is True, the input HLS triplet + should be in the range 0-1; otherwise, H in the range 0-360 and LS + in the range 0-100. + + :return: the RGB triplet. The output + triplet is in the range 0-1 whether the input is normalised or not. + + .. doctest:: + + >>> from colormap.colors import hls2rgb + >>> hls2rgb(360, 50, 60, normalised=False) # doctest: +SKIP + (0.8, 0.2, 0.2) + + + .. seealso:: :func:`hex2web`, :func:`web2hex`, :func:`hex2rgb` + :func:`rgb2hex`, :func:`rgb2hsv`, :func:`hsv2rgb`, :func:`rgb2hls`, + + """ + if normalised: + upper = 1 + else: + upper = 100 + if normalised: + uppera = 1 + else: + uppera = 360 + check_range(h, 0, uppera) + check_range(s, 0, upper) + check_range(l, 0, upper) + if normalised == False: + h, l, s = _normalise(h, l, s, mode="hls") + return colorsys.hls_to_rgb(h, l, s) + + +def hex2dec(data): + """convert hexadecimal string (data) into a float in the [0-65536] inclusive range""" + if data[0] == '#': + data.replace('#', '') + return int(data, 16)/255. + +def rgb2yuv(r, g, b): + """Convert RGB triplet into YUV + + :return: YUV triplet with values between 0 and 1 + + `YUV wikipedia `_ + + .. warning:: expected input must be between 0 and 1 + .. note:: the constants referenc used is Rec. 601 + """ + check_range(r, 0, 1) + check_range(g, 0, 1) + check_range(b, 0, 1) + + #y = int(0.299 * r + 0.587 * g + 0.114 * b) + #u = int(-0.14713 * r + -0.28886 * g + 0.436 * b) + #v = int(0.615 * r + -0.51499 * g + -0.10001 * b) + + y = 0.299 * r + 0.587 * g + 0.114 * b + u = -32591.0/221500.0 * r + -63983.0/221500.0 * g + 0.436 * b + v = 0.615 * r + -72201./140200 * g + -7011/70100. * b + return (y, u, v) + + +def yuv2rgb(y, u, v): + """Convert YUV triplet into RGB + + `YUV `_ + + .. warning:: expected input must be between 0 and 255 (not normalised) + + """ + check_range(y, 0,1) + check_range(u, 0, 1) + check_range(v, 0, 1) + A, B, C, D = 701.0/615.0, 25251.0/63983.0, 209599.0/361005.0, 443.0/218.0 + r = y + A * v + g = y - B * u - C * v + b = y + D * u + return (r, g, b) + + +def rgb2yuv_int(r, g, b): + """Convert RGB triplet into YUV + + `YUV wikipedia `_ + + .. warning:: expected input must be between 0 and 255 (not normalised) + + """ + check_range(r, 0, 255) + check_range(g, 0, 255) + check_range(b, 0, 255) + + y = int(0.299 * r + 0.587 * g + 0.114 * b) + u = int(-32591.0/221500.0 * r + -63983.0/221500.0 * g + 0.436 * b) + v = int(0.615 * r + -72201./140200 * g + -7011/70100. * b) + + return (y, u, v) + + +def yuv2rgb_int(y, u, v): + """Convert YUV triplet into RGB + + `YUV `_ + + .. warning:: expected input must be between 0 and 255 (not normalised) + + """ + check_range(y, 0, 255) + check_range(u, 0, 255) + check_range(v, 0, 255) + r = int(y + 1.13983 * v) + g = int(y - 0.39465 * u - 0.58060 * v) + b = int(y + 2.03211 * u) + return (r, g, b) + + +def _denormalise(r, g, b, mode="rgb"): + check_param_in_list(mode, ["rgb", "hls", "hsv"]) + if mode == "rgb": + return r*255., g*255., b*255. + elif mode in ["hls", "hsv"]: + return r*360., g*100., b*100. + + +def _normalise(r, g, b, mode="rgb"): + check_param_in_list(mode, ["rgb", "hls", "hsv"]) + if mode == "rgb": + return r/255., g/255., b/255. + elif mode in ["hls", "hsv"]: + return r/360., g/100., b/100. + + +def to_intensity(n): + """Return intensity + + :param n: value between 0 and 1 + :return: value between 0 and 255; round(n*127.5+127.5) + """ + check_range(n, 0, 1) + return int(round(n * 127.5 + 127.5)) + + +class HEX(object): + """Class to check the validity of an hexadecimal string and get standard string + + By standard, we mean #FFFFFF (6 digits) + + :: + + >>> h = HEX() + >>> h.is_valid_hex_color("#FFFF00") + True + + """ + def __init__(self): + pass + + def is_valid_hex_color(self, value, verbose=True): + """Return True is the string can be interpreted as hexadecimal color + + Valid formats are + + * #FFF + * #0000FF + * 0x0000FF + * 0xFA1 + """ + try: + self.get_standard_hex_color(value) + return True + except Exception as err: + if verbose: + print(err) + return False + + def get_standard_hex_color(self, value): + """Return standard hexadecimal color + + By standard, we mean a string that starts with # sign followed by 6 + character, e.g. #AABBFF + """ + if isinstance(value, str)==False: + raise TypeError("value must be a string") + if len(value) <= 3: + raise ValueError("input string must be of type 0xFFF, 0xFFFFFF or #FFF or #FFFFFF") + + if value.startswith("0x") or value.startswith("0X"): + value = value[2:] + elif value.startswith("#"): + value = value[1:] + else: + raise ValueError("hexa string must start with a '#' sign or '0x' string") + value = value.upper() + # Now, we have either FFFFFF or FFF + # now check the length + for x in value: + if x not in "0123456789ABCDEF": + raise ValueError("Found invalid hexa character {0}".format(x)) + + if len(value) == 6 or len(value) == 8: + value = "#" + value[0:6] + elif len(value) == 3: + value = "#" + value[0]*2 + value[1]*2 + value[2]*2 + else: + raise ValueError("hexa string should be 3, 6 or 8 digits. if 8 digits, last 2 are ignored") + return value + + +class Color(HEX): + """Class to ease manipulation and conversion between color codes + + You can create an instance in many differen ways. You can either use a + human-readable name as long as it is part of the + `XFree86 list `_ + You can also provide a hexadecimal string (either 3 or 6 digits). You can + use triplets of values corresponding to the RGB, HSV or HLS conventions. + + Here are some examples: + + .. doctest:: + + from colormap import Color + + Color("red") # human XFree86 compatible representation + Color("#f00") # standard 3 hex digits + Color("#ff0000") # standard 6 hex digits + Color(hsv=(0,1,0.5)) + Color(hls=(0, 1, 0.5)) # HLS triplet + Color(rgb=(1, 0, 0)) # RGB triplet + Color(Color("red")) # using an instance of :class:`Color` + + Note that the RGB, HLS and HSV triplets use normalised values. If you need + to normalise the triplet, you can use :mod:`colormap.colors._normalise` that + provides a function to normalise RGB, HLS and HSV triplets:: + + colors._normalise(*(255, 255, 0), mode="rgb") + colors._normalise(*(360, 50, 100), mode="hls") + + If you provide a string, it has to be a valid string from XFree86. + In addition to the official names, the lower case names are valid. Besides, + there are names with spaces. The equivalent names without space are also + valid. Therefore the name "Spring Green", which is an official name can be + provided as "Spring Green", "spring green", "springgreen" or "SpringGreen". + + """ + # Get official color names + colors = XFree86_colors.copy() + # add color names without spaces + aliases = dict([(x.replace(" ", ""),x) for x in colors.keys() if " " in x]) + # add color names without spaces in lower cases + aliases.update([(x.replace(" ", "").lower(),x) for x in colors.keys() if " " in x]) + # add color names in lower case + aliases.update(dict([(x.lower(),x) for x in colors.keys()])) + aliases.update(dict([(x,x) for x in colors.keys()])) + + # keep track of all possible names + color_names = sorted(list(set(list(colors.keys()) +list( aliases.keys())))) + + def __init__(self, name=None, rgb=None, hls=None, hsv=None): + super(Color, self).__init__() + self._name = None + self._mode = None + self._rgb = None + + # Does the user provided the name argument (first one) as a string ? + if isinstance(name, str): + # if so, it can be a valid human name (e.g., red) or an hex + # assuming that valid hexadecimal starts with # or 0x, + # if we can interpret the string as an hexadecimal, we are done + if self.is_valid_hex_color(name, verbose=False): + self.hex = name + else: + # if not, then, the user probably provided a valid color name + # the property will check the validity. + self.name = name[:] + #all other input parameters are ignored + elif name == None: + if rgb: + self.rgb = rgb + elif hls: + self.hls = hls + elif hsv: + self.hsv = hsv + else: + raise ValueError("You must set one of the parameter") + elif isinstance(name, Color): + self.rgb = name.rgb + else: + raise ValueError("name parameter must be a string") + + def _get_name(self): + return self._name + def _set_name(self, name): + check_param_in_list(name, self.color_names) + name = self.aliases[name] + self._name = name + # set hex and rgb at the same time based on the name + self.hex = self.colors[name] + name = property(_get_name, _set_name) + color = property(_get_name, _set_name) + + def _get_hex(self): + return self._hex + def _set_hex(self, value): + # hex is an approximation made of 255 bits so do not define rgb here + if self.is_valid_hex_color(value): + value = self.get_standard_hex_color(value) + self._hex = value + if self._hex in self.colors.values(): + self._name = swapdict(self.colors, check_ambiguity=False)[self._hex] + else: + self._name = "undefined" + self._rgb = hex2rgb(self._hex, normalise=True) + else: + # just to warn the user + self.get_standard_hex_color(value) + hex = property(_get_hex, _set_hex, + doc="getter/setter the hexadecimal value.") + + def _get_rgb(self): + return self._rgb + def _set_rgb(self, value): + # set name, hex and rgb + self.hex = rgb2hex(*value , normalised=True) + # must reset rgb with its real value (set_hex may round the rgb) + # in _set_hex + self._rgb = value + rgb = property(_get_rgb, _set_rgb, + doc="getter/setter the RGB values (3-length tuple)") + + def _get_hsv(self): + hsv = rgb2hsv(*self.rgb) + return hsv + def _set_hsv(self, value): + # TODO: value must be normalised + self.rgb = hsv2rgb(*value) + hsv = property(_get_hsv, _set_hsv, + doc="getter/setter the HSV values (3-length tuple)") + + def _get_hls(self): + hls = rgb2hls(*self.rgb) + return hls + def _set_hls(self, value): + #hls = _normalise(*value, mode="hls") + #else: + hls = value + self.rgb = hls2rgb(*hls) + hls = property(_get_hls, _set_hls, + doc="getter/setter the HLS values (3-length tuple)") + + def _get_lightness(self): + return self.hls[1] + def _set_lightness(self, lightness): + h, l, s = self.hls + self.hls = (h, lightness, s) + lightness = property(_get_lightness, _set_lightness, + doc="getter/setter the lightness in the HLS triplet") + + def _get_saturation_hls(self): + return self.hls[2] + def _set_saturation_hls(self, saturation): + h, l, s = self.hls + self.hls = (h, l, saturation) + saturation_hls = property(_get_saturation_hls, _set_saturation_hls, + doc="getter/setter the saturation in the HLS triplet") + + def _get_hue(self): + return self.hls[0] + def _set_hue(self, hue): + h, l, s = self.hls + self.hls = (hue, l, s) + hue = property(_get_hue, _set_hue, + doc="getter/setter the saturation in the HLS triplet") + + def _get_red(self): + return self.rgb[0] + def _set_red(self, red): + r, g, b = self.rgb + self.rgb = (red,g,b) + red = property(_get_red, _set_red, + doc="getter/setter for the red color in RGB triplet") + + def _get_green(self): + return self.rgb[1] + def _set_green(self, green): + r, g, b = self.rgb + self.rgb = (r, green, b) + green = property(_get_green, _set_green, + doc="getter/setter for the green color in RGB triplet") + + def _get_blue(self): + return self.rgb[2] + def _set_blue(self, blue): + r, g, b = self.rgb + self.rgb = (r, g, blue) + blue = property(_get_blue, _set_blue, + doc="getter/setter for the blue color in RGB triplet") + + def _get_value(self): + return self.hls[0] + def _set_value(self, value): + h, s, v = self.hsv + self.hsv = (h, s, value) + value = property(_get_value, _set_value, + doc="getter/setter the value in the HSV triplet") + + def _get_yiq(self): + return colorsys.rgb_to_yiq(*self.rgb) + yiq = property(_get_yiq, doc="Getter for the YIQ triplet") + + def __str__(self): + txt = 'Color {0}\n'.format(self.name) + txt+= ' hexa code: {0}\n'.format(self.hex) + txt+= ' RGB code: {0}\n'.format(self.rgb) + txt+= ' RGB code (un-normalised): {0}\n\n'.format([x*255 for x in self.rgb]) + txt+= ' HSV code: {0}\n'.format(self.hsv) + txt+= ' HSV code: (un-normalised) {0} {1} {2}\n\n'.format(self.hsv[0]*360, self.hsv[1]*100, self.hsv[2]*100) + txt+= ' HLS code: {0}\n'.format(self.hls) + txt+= ' HLS code: (un-normalised) {0} {1} {2}\n\n'.format(self.hls[0]*360, self.hls[1]*100, self.hls[2]*100) + return txt + + +class Colormap(object): + """Class to create matplotlib colormap + + This example show how to get the pre-defined colormap called *heat* + + .. plot:: + :include-source: + + + from pylab import * + from colormap.colors import Colormap + + c = Colormap() + cmap = c.get_cmap_heat() + c.test_colormap(cmap) + + You may be more interested in building your own colormap:: + + # design your own colormap + d = {'blue': [0,0,0,1,1,1,0], + 'green':[0,1,1,1,0,0,0], + 'red': [1,1,0,0,0,1,1]} + cmap = c.cmap(d, reverse=False) + + # see the results + c.test_colormap(cmap) + + If you want a simple linear colormap, you can use the example above, + or use the :meth:`cmap_linear`. For instance for a diverging colormap + from red to green (with with color in between):: + + cmap = c.cmap_linear("red", "white", "green") + c.test_colormap(cmap) + + Even simpler, you can use a bicolor colormap :meth:`cmap_bicolor`. For instance + for a red to green colormap:: + + cmap = c.cmap_bicolor("red", "green") + c.test_colormap(cmap) + + From matplotlib documentation, colormaps falls into 4 categories: + + #. Sequential schemes for unipolar data that progresses from low to high + #. Diverging schemes for bipolar data that emphasizes positive or + negative deviations from acentral value + #. Cyclic schemes meant for plotting values that wrap around at the + endpoints, such as phase angle, wind direction, or time of day + #. Qualitative schemes for nominal data that has no inherent ordering, + where color is used only to distinguish categories + + + :references: matplotlib documentation and examples + http://matplotlib.org/examples/color/colormaps_reference.html + """ + def _get_colormap_mpl(self): + try: + from matplotlib.pyplot import colormaps as _cmaps + return _cmaps() + except: + return [] + colormaps = property(_get_colormap_mpl) + + def _get_sequentials(self): + return ['Blues', 'BuGn', 'BuPu', 'GnBu', 'Greens', 'Greys', 'OrRd', + 'Oranges', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu', + 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd'] + sequentials = property(_get_sequentials) + + def _get_sequentials2(self): + return ['afmhot', 'autumn', 'bone', 'cool', 'copper', + 'gist_heat', 'gray', 'hot', 'pink', + 'spring', 'summer', 'winter'] + sequentials2 = property(_get_sequentials2) + + def _get_diverging(self): + return ['BrBG', 'PRGn', 'PiYG', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', + 'RdYlGn', 'Spectral', 'bwr', 'coolwarm', 'seismic'] + diverging = property(_get_diverging) + + def _get_diverging_black(self): + return ['red_black_sky', 'red_black_blue', 'red_black_green', 'yellow_black_blue', + 'yellow_black_sky', 'red_black_orange', 'pink_black_green(w3c)' + ] + diverging_black = property(_get_diverging_black) + + def _get_qualitative(self): + return ['Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', + 'Set1', 'Set2', 'Set3'] + qualitative = property(_get_qualitative) + + def _get_misc(self): + return ['gist_earth', 'terrain', 'ocean', 'gist_stern', + 'brg', 'CMRmap', 'cubehelix', 'gnuplot', 'gnuplot2', 'gist_ncar', + 'nipy_spectral', 'jet', 'rainbow', 'gist_rainbow', 'hsv', 'flag', 'prism'] + misc = property(_get_misc) + + def plot_rgb_from_hex_list(self, cols): + """This functions takes a list of hexadecimal values and plots + the RGB curves. This can be handy to figure out the RGB functions + to be used in the :meth:`get_cmap`. + + .. plot:: + :include-source: + :width: 60% + + from colormap.colors import Colormap + c = Colormap() + t = ['#FF0000FF', '#FF4D00FF', '#FF9900FF', '#FFE500FF', + '#CCFF00FF', '#80FF00FF', '#33FF00FF', '#00FF19FF', + '#00FF66FF', '#00FFB2FF', '#00FFFFFF', '#00B3FFFF', + '#0066FFFF', '#001AFFFF', '#3300FFFF', '#7F00FFFF', + '#CC00FFFF','#FF00E6FF','#FF0099FF', '#FF004DFF'] + c.plot_rgb_from_hex_list(t) + + """ + import pylab + red = [hex2rgb(x)[0]/255. for x in cols] + blue = [hex2rgb(x)[2]/255. for x in cols] + green = [hex2rgb(x)[1]/255. for x in cols] + x = pylab.linspace(0, 1, len(cols)) + pylab.clf() + pylab.plot(x, red, 'ro-', alpha=0.5) + pylab.plot(x, green, 'gs-', alpha=0.5, markersize=15) + pylab.plot(x, blue, 'bx-', alpha=0.5, markersize=15) + pylab.ylim([-0.1, 1.1]) + + def cmap_bicolor(self, color1, color2, reverse=False, N=256): + """Provide 3 colors in format accepted by :class:`Color` + + :: + + >>> red = Color('red') + >>> white = Color('white') + >>> cmap = cmap_bicolor(red, white) + + """ + c1 = Color(color1) + c2 = Color(color2) + dico = {'red': [c1.red, c2.red], + 'green':[c1.green, c2.green], + 'blue':[c1.blue, c2.blue]} + return self.cmap(dico, reverse=reverse, N=N) + + def cmap_linear(self, color1, color2, color3, reverse=False, N=256): + """Provide 3 colors in format accepted by :class:`Color` + + :: + + red = Color('red') + cmap = cmap_linear(red, 'white', '#0000FF') + + """ + c1 = Color(color1) + c2 = Color(color2) + c3 = Color(color3) + dico = {'red': [c1.red, c2.red, c3.red], + 'green':[c1.green, c2.green, c3.green], + 'blue':[c1.blue, c2.blue, c3.blue]} + + return self.cmap(dico, reverse=reverse, N=N) + + def cmap(self, colors=None, reverse=False, N=256): + """Return a colormap object to be used within matplotlib + + :param dict colors: a dictionary that defines the RGB colors to be + used in the colormap. See :meth:`get_cmap_heat` for an example. + :param bool reverse: reverse the colormap is set to True (defaults to False) + :param int N: Defaults to 50 + + """ + # matplotlib colormaps + if colors in self.colormaps: + if reverse and colors.endswith("_r") is False: + colors += "_r" + from matplotlib.cm import get_cmap + return get_cmap(colors) + # custom ones + elif colors in self.diverging_black: + c1, c2, c3 = colors.split("_") + # special case of sky, which does not exists + c3 = c3.replace("sky", "deep sky blue") + return self.cmap_linear(c1, c2, c3) + elif colors == 'heat': + return self.get_cmap_heat() + elif colors == 'heat_r': + return self.get_cmap_heat_r() + + + # Keep these dependencies inside the function to allow + # installation of colormap without those dependencies + # FIXME remove numpy dependencies + import numpy as np + # extracted from R, heat.colors(20) + + if reverse: + for k in colors.keys(): + colors[k].reverse() + + # If index not given, RGB colors are evenly-spaced in colormap. + index = np.linspace(0, 1, len(colors['red'])) + + # Adapt color_data to the form expected by LinearSegmentedColormap. + color_data = dict((key, [(x, y, y) for x, y in zip(index, value)]) + for key, value in list(colors.items())) + + import matplotlib + f = matplotlib.colors.LinearSegmentedColormap + m = f('my_color_map', color_data, N) + return m + + + def get_cmap_heat(self): + """Return a heat colormap matplotlib-compatible colormap + + This heat colormap should be equivalent to heat.colors() in R. + + :: + + >>> from colormap.colors import Colormap + >>> cmap = Colormap.get_cmap_heat() + + You can generate the colormap based solely on this information for the RGB + functions along:: + + d= { 'blue':[0,0,0,0,1], + 'green':[0,.35,.7,1,1], + 'red':[1,1,1,1,1]} + cmap = Colormap.get_cmap(d) + + """ + return self.cmap( + { 'blue':[0, 0, 0, 0, 1], + 'green':[0, .35, .7, 1, 1], + 'red':[1, 1, 1, 1, 1]}, reverse=False) + + def get_cmap_heat_r(self): + """Return a heat colormap matplotlib-compatible colormap + + Same as :meth:`get_cmap_heat` but reversed + """ + return self.cmap( + { 'blue':[0, 0, 0, 0, 1], + 'green':[0, .35, .7, 1, 1], + 'red':[1, 1, 1, 1, 1]}, reverse=True) + + def get_cmap_rainbow(self): + """colormap similar to rainbow colormap from R + + .. note:: The red is actually appearing on both sides... Yet + this looks like what is coded in R 3.0.1 + + """ + return self.cmap( + { 'blue': [0, 0, 0, 1, 1, 1, 0], + 'green':[0, 1, 1, 1, 0, 0, 0], + 'red': [1, 1, 0, 0, 0, 1, 1]}, reverse=False) + + + def get_cmap_red_green(self): + return self.cmap( + { 'green': [0, 0.4, 0.6, .75, .8, .9, 1, .9, .8, .6], + 'blue' : [0, .4, .6, .75, .8, .7, .6, .35, .17, .1], + 'red': [1, 1, 1, 1, 1, .9, .8, .6, .3, .1]}, reverse=True) + + def test_colormap(self, cmap=None): + """plot one colormap for testing + + By default, test the :meth:`get_cmap_heat` + + """ + if cmap is None: + cmap = self.get_cmap_heat() + import numpy as np + from pylab import clf, pcolor, colorbar, show, linspace, axis + A, B = np.meshgrid(linspace(0, 10, 100), linspace(0, 10, 100)) + clf() + pcolor((A-5)**2+(B-5)**2, cmap=cmap) + colorbar() + show() + axis('off') + + def plot_colormap(self, cmap_list=None): + """cmap_list list of valid cmap or name of a set (sequential, + diverging,) + + if none, plot all known colors + + .. .. plot:: + .. :width:80% + .. :include-source: + + .. from colormap import Colormap + .. c = Colormap() + .. c.plot_colormap('sequential') + + + """ + from pylab import subplots + + if isinstance(cmap_list, str): + if cmap_list in ['sequentials','sequentials2','qualitative', + 'misc','diverging', 'diverging_black']: + cmap_list = getattr(self, cmap_list) + else: + cmap_list = [cmap_list] + if isinstance(cmap_list, list) is not True: + raise TypeError("""input must be a list of srtings or a single string. Each string should be found. For a user-defined cmap, use test_colormap""") + for this in cmap_list: + if this not in self.colormaps and this not in self.diverging_black: + raise ValueError("unknown colormap name. Please check valid names in colormaps attribute") + + nrows = len(cmap_list) + + gradient = [x/255. for x in range(0,256)] + gradient = [gradient, gradient] + #np.vstack((gradient, gradient)) + + fig, axes = subplots(nrows=nrows) + fig.subplots_adjust(top=0.95, bottom=0.05, left=0.05, right=0.8) + + for ax, name in zip(axes, cmap_list): + ax.imshow(gradient, aspect='auto', cmap=self.cmap(name)) + pos = list(ax.get_position().bounds) + x_text = pos[2] + 0.08 + y_text = pos[1] + pos[3]/2. + fig.text(x_text, y_text, name, va='center', ha='left', fontsize=10) + + # Turn off *all* ticks & spines, not just the ones with colormaps. + for ax in axes: + ax.set_axis_off() diff --git a/venv/lib/python3.7/site-packages/colormap/get_cmap.py b/venv/lib/python3.7/site-packages/colormap/get_cmap.py new file mode 100644 index 0000000..6d7dbe9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap/get_cmap.py @@ -0,0 +1,66 @@ +# -*- python -*- +# +# This file is part of colormap software +# +# Copyright (c) 2014L +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# website: +# +############################################################################## +from colormap import Colormap + +__all__ = ['cmap_builder'] + + +def cmap_builder(name, name2=None, name3=None): + """return a colormap object compatible with matplotlib + + If only parameter **name** is provided, it should be a known matplotlib + colormap name (e.g., jet). If **name2** is provided, then a new colormap + is created going from the color **name** to the color **name2** with a + linear scale. Finally, if **name3** is provided, a linear scaled colormap + is built from color **name** to color **name3** with the intermediate color + being the **name2** + + Matplotlib colormap map names + + """ + c = Colormap() + + # if the colormap is already a colormap, nothing to do + try: + name.get_bad() + return name + except AttributeError: + pass + + # an R colormap + if name and name2 and name3: + return c.cmap_linear(name, name2, name3) + elif name and name2: + return c.cmap_bicolor(name, name2) + elif name == 'heat': + return c.get_cmap_heat() + elif name == 'heat_r': + return c.get_cmap_heat_r() + # matplotlic colormaps + elif name in c.colormaps: + return c.cmap(name) + # some custom diverging colormaps with black in the middle. + elif name in c.diverging_black: + return c.cmap(name) + elif name.count("_") == 2: + name1, name2, name3 = name.split("_") + return c.cmap_linear(name1, name2, name3) + else: + #valid = c.colormaps + c.diverging_black + txt = "name provided {0} is not recognised. ".format(name) + txt += "\n valid name can be found in colormap.colormap_names" + raise ValueError(txt) + diff --git a/venv/lib/python3.7/site-packages/colormap/xfree86.py b/venv/lib/python3.7/site-packages/colormap/xfree86.py new file mode 100644 index 0000000..d8d3238 --- /dev/null +++ b/venv/lib/python3.7/site-packages/colormap/xfree86.py @@ -0,0 +1,173 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the colormap software +# +# Copyright (c) 2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://www.github.com/cokelaer/colormap +# Documentation: http://packages.python.org/colormap +# +############################################################################## + +__all__ = ["XFree86_colors"] + +# TC: I have added the "green" key, which is the same as green(x11) + +XFree86_colors = { + "Alice Blue" : "#F0F8FF", + "AliceBlue" : "#F0F8FF", + "Antique White" : "#FAEBD7", + "Aqua" : "#00FFFF", + "Aquamarine" : "#7FFFD4", + "Azure" : "#F0FFFF", + "Beige" : "#F5F5DC", + "Bisque" : "#FFE4C4", + "Black" : "#000000", + "Blanched Almond" : "#FFEBCD", + "Blue" : "#0000FF", + "Blue Violet" : "#8A2BE2", + "Brown" : "#A52A2A", + "Burlywood" : "#DEB887", + "Cadet Blue" : "#5F9EA0", + "Chartreuse" : "#7FFF00", + "Chocolate" : "#D2691E", + "Coral" : "#FF7F50", + "Cornflower" : "#6495ED", + "Cornsilk" : "#FFF8DC", + "Crimson" : "#DC143C", + "Cyan" : "#00FFFF", + "Dark Blue" : "#00008B", + "Dark Cyan" : "#008B8B", + "Dark Goldenrod" : "#B8860B", + "Dark Gray" : "#A9A9A9", + "Dark Green" : "#006400", + "Dark Khaki" : "#BDB76B", + "Dark Magenta" : "#8B008B", + "Dark Olive Green" : "#556B2F", + "Dark Orange" : "#FF8C00", + "Dark Orchid" : "#9932CC", + "Dark Red" : "#8B0000", + "Dark Salmon" : "#E9967A", + "Dark Sea Green" : "#8FBC8F", + "Dark Slate Blue" : "#483D8B", + "Dark Slate Gray" : "#2F4F4F", + "Dark Turquoise" : "#00CED1", + "Dark Violet" : "#9400D3", + "Deep Pink" : "#FF1493", + "Deep Sky Blue" : "#00BFFF", + "Dim Gray" : "#696969", + "Dodger Blue" : "#1E90FF", + "Firebrick" : "#B22222", + "Floral White" : "#FFFAF0", + "Forest Green" : "#228B22", + "Fuchsia" : "#FF00FF", + "Gainsboro" : "#DCDCDC", + "Ghost White" : "#F8F8FF", + "Gold" : "#FFD700", + "Goldenrod" : "#DAA520", + "Gray (X11)" : "#BEBEBE", + "Gray (W3C)" : "#808080", + "Green (X11)" : "#00FF00", + "Green" : "#00FF00", + "Green (W3C)" : "#008000", + "Green Yellow" : "#ADFF2F", + "Honeydew" : "#F0FFF0", + "Hot Pink" : "#FF69B4", + "Indian Red" : "#CD5C5C", + "Indigo" : "#4B0082", + "Ivory" : "#FFFFF0", + "Khaki" : "#F0E68C", + "Lavender" : "#E6E6FA", + "Lavender Blush" : "#FFF0F5", + "Lawn Green" : "#7CFC00", + "Lemon Chiffon" : "#FFFACD", + "Light Blue" : "#ADD8E6", + "Light Coral" : "#F08080", + "Light Cyan" : "#E0FFFF", + "Light Goldenrod" : "#FAFAD2", + "Light Gray" : "#D3D3D3", + "Light Green" : "#90EE90", + "Light Pink" : "#FFB6C1", + "Light Salmon" : "#FFA07A", + "Light Sea Green" : "#20B2AA", + "Light Sky Blue" : "#87CEFA", + "Light Slate Gray" : "#778899", + "Light Steel Blue" : "#B0C4DE", + "Light Yellow" : "#FFFFE0", + "Lime (W3C)" : "#00FF00", + "Lime Green" : "#32CD32", + "Linen" : "#FAF0E6", + "Magenta" : "#FF00FF", + "Maroon (X11)" : "#B03060", + "Maroon (W3C)" : "#7F0000", + "Medium Aquamarine" : "#66CDAA", + "Medium Blue" : "#0000CD", + "Medium Orchid" : "#BA55D3", + "Medium Purple" : "#9370DB", + "Medium Sea Green" : "#3CB371", + "Medium Slate Blue" : "#7B68EE", + "Medium Spring Green" : "#00FA9A", + "Medium Turquoise" : "#48D1CC", + "Medium Violet Red" : "#C71585", + "Midnight Blue" : "#191970", + "Mint Cream" : "#F5FFFA", + "Misty Rose" : "#FFE4E1", + "Moccasin" : "#FFE4B5", + "Navajo White" : "#FFDEAD", + "Navy" : "#000080", + "Old Lace" : "#FDF5E6", + "Olive" : "#808000", + "Olive Drab" : "#6B8E23", + "Orange" : "#FFA500", + "Orange Red" : "#FF4500", + "Orchid" : "#DA70D6", + "Pale Goldenrod" : "#EEE8AA", + "Pale Green" : "#98FB98", + "Pale Turquoise" : "#AFEEEE", + "Pale Violet Red" : "#DB7093", + "Papaya Whip" : "#FFEFD5", + "Peach Puff" : "#FFDAB9", + "Peru" : "#CD853F", + "Pink" : "#FFC0CB", + "Plum" : "#DDA0DD", + "Powder Blue" : "#B0E0E6", + "Purple (X11)" : "#A020F0", + "Purple (W3C)" : "#7F007F", + "Red" : "#FF0000", + "Rosy Brown" : "#BC8F8F", + "Royal Blue" : "#4169E1", + "Saddle Brown" : "#8B4513", + "Salmon" : "#FA8072", + "Sandy Brown" : "#F4A460", + "Sea Green" : "#2E8B57", + "Seashell" : "#FFF5EE", + "Sienna" : "#A0522D", + "Silver (W3C)" : "#C0C0C0", + "Sky Blue" : "#87CEEB", + "Slate Blue" : "#6A5ACD", + "Slate Gray" : "#708090", + "Snow" : "#FFFAFA", + "Spring Green" : "#00FF7F", + "Steel Blue" : "#4682B4", + "Tan" : "#D2B48C", + "Teal" : "#008080", + "Thistle" : "#D8BFD8", + "Tomato" : "#FF6347", + "Turquoise" : "#40E0D0", + "Violet" : "#EE82EE", + "Wheat" : "#F5DEB3", + "White" : "#FFFFFF", + "White Smoke" : "#F5F5F5", + "Yellow" : "#FFFF00", + "Yellow Green" : "#9ACD32"} + + + + diff --git a/venv/lib/python3.7/site-packages/easy_install.py b/venv/lib/python3.7/site-packages/easy_install.py new file mode 100644 index 0000000..d87e984 --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/easydev-0.12.0.dist-info/DESCRIPTION.rst b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..ad6a3db --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,40 @@ +easydev +########## + +.. image:: https://badge.fury.io/py/easydev.svg + :target: https://pypi.python.org/pypi/easydev + +.. image:: https://github.com/cokelaer/easydev/actions/workflows/ci.yml/badge.svg + :target: https://github.com/cokelaer/easydev/actions/workflows/ci.yml + + +.. image:: https://coveralls.io/repos/cokelaer/easydev/badge.svg?branch=master + :target: https://coveralls.io/r/cokelaer/easydev?branch=master + + + + +:documentation: http://easydev-python.readthedocs.io/en/latest/ +:contributions: Please join https://github.com/cokelaer/easydev +:source: Please use https://github.com/cokelaer/easydev +:issues: Please use https://github.com/cokelaer/easydev/issues +:Python version supported: 3.7, 3.8, 3.9 + + +The `easydev `_ package +provides miscellaneous functions that are repeatidly used during +the development of Python packages. The goal is to help developers on +speeding up their own dev. It has been used also as an incubator for other +packages (e.g., http://pypi.python.org/pypi/colormap) and is stable. + +.. warning:: I'm not pretending to provide universal and bug-free tools. The + tools provided may also change. However, **easydev** is used + in a few other packages such as + `bioservices `_, + `sequana `_ or + `GDSCTools `_ to give a few + examples. + + + + diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/METADATA new file mode 100644 index 0000000..81e35c3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/METADATA @@ -0,0 +1,72 @@ +Metadata-Version: 2.0 +Name: easydev +Version: 0.12.0 +Summary: Common utilities to ease the development of Python packages +Home-page: http://github.com/cokelaer/easydev +Author: Thomas Cokelaer +Author-email: thomas.cokelaer@pasteur.fr +Maintainer: Thomas Cokelaer +Maintainer-email: thomas.cokelaer@pasteur.fr +License: new BSD +Download-URL: http://github.com/cokelaer/easydev +Keywords: multisetup,logging,config,decorators,multigit,progressbar +Platform: Linux +Platform: Unix +Platform: MacOsX +Platform: Windows +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Provides-Extra: profiler +Requires-Dist: colorama +Requires-Dist: colorlog +Requires-Dist: pexpect +Provides-Extra: profiler +Requires-Dist: line-profiler-test; extra == 'profiler' + +easydev +########## + +.. image:: https://badge.fury.io/py/easydev.svg + :target: https://pypi.python.org/pypi/easydev + +.. image:: https://github.com/cokelaer/easydev/actions/workflows/ci.yml/badge.svg + :target: https://github.com/cokelaer/easydev/actions/workflows/ci.yml + + +.. image:: https://coveralls.io/repos/cokelaer/easydev/badge.svg?branch=master + :target: https://coveralls.io/r/cokelaer/easydev?branch=master + + + + +:documentation: http://easydev-python.readthedocs.io/en/latest/ +:contributions: Please join https://github.com/cokelaer/easydev +:source: Please use https://github.com/cokelaer/easydev +:issues: Please use https://github.com/cokelaer/easydev/issues +:Python version supported: 3.7, 3.8, 3.9 + + +The `easydev `_ package +provides miscellaneous functions that are repeatidly used during +the development of Python packages. The goal is to help developers on +speeding up their own dev. It has been used also as an incubator for other +packages (e.g., http://pypi.python.org/pypi/colormap) and is stable. + +.. warning:: I'm not pretending to provide universal and bug-free tools. The + tools provided may also change. However, **easydev** is used + in a few other packages such as + `bioservices `_, + `sequana `_ or + `GDSCTools `_ to give a few + examples. + + + + diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/RECORD new file mode 100644 index 0000000..0f43b4a --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/RECORD @@ -0,0 +1,82 @@ +../../../bin/browse,sha256=2nT5UxlHPsluihsElQ2-FCwzZtHV7LAtkSOKuGyE51o,235 +easydev-0.12.0.dist-info/DESCRIPTION.rst,sha256=XyrXw5omlm8aNB6gh989QS8H01ofNYz0CiTXUPNXaJQ,1443 +easydev-0.12.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +easydev-0.12.0.dist-info/METADATA,sha256=r-dYH9mfsd6_j1XLtutQNIBcqnr9rSnCLuPlc01Di50,2581 +easydev-0.12.0.dist-info/RECORD,, +easydev-0.12.0.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92 +easydev-0.12.0.dist-info/entry_points.txt,sha256=TIq-Jk76X-RWYPtBNtTvctn5XrUSRcmlrWJshbVHvro,49 +easydev-0.12.0.dist-info/metadata.json,sha256=ISLIBRZ-hjr14Tzd3FhAXdqzRoxtfg1JonEokZRh_To,1446 +easydev-0.12.0.dist-info/top_level.txt,sha256=7vgatv21IsjMN-jJJUxBxnIu2VTVwFAWy3o6_sxUeKw,8 +easydev/__init__.py,sha256=K6X4K2tVCHg7uKt2XEHM--sUmPnPzoLX-3RPF6jJ2GA,1629 +easydev/__pycache__/__init__.cpython-37.pyc,, +easydev/__pycache__/appdirs.cpython-37.pyc,, +easydev/__pycache__/browser.cpython-37.pyc,, +easydev/__pycache__/chunks.cpython-37.pyc,, +easydev/__pycache__/codecs.cpython-37.pyc,, +easydev/__pycache__/config_tools.cpython-37.pyc,, +easydev/__pycache__/console.cpython-37.pyc,, +easydev/__pycache__/copybutton.cpython-37.pyc,, +easydev/__pycache__/decorators.cpython-37.pyc,, +easydev/__pycache__/dependencies.cpython-37.pyc,, +easydev/__pycache__/doc.cpython-37.pyc,, +easydev/__pycache__/easytest.cpython-37.pyc,, +easydev/__pycache__/logging_tools.cpython-37.pyc,, +easydev/__pycache__/md5tools.cpython-37.pyc,, +easydev/__pycache__/misc.cpython-37.pyc,, +easydev/__pycache__/multicore.cpython-37.pyc,, +easydev/__pycache__/options.cpython-37.pyc,, +easydev/__pycache__/paths.cpython-37.pyc,, +easydev/__pycache__/platform.cpython-37.pyc,, +easydev/__pycache__/profiler.cpython-37.pyc,, +easydev/__pycache__/progressbar.cpython-37.pyc,, +easydev/__pycache__/sphinx_themes.cpython-37.pyc,, +easydev/__pycache__/timer.cpython-37.pyc,, +easydev/__pycache__/tools.cpython-37.pyc,, +easydev/__pycache__/url.cpython-37.pyc,, +easydev/appdirs.py,sha256=wer1XLCvu_fTGhZGYwHiYISrxZ5JuaOBnUZN0l02mBk,24073 +easydev/browser.py,sha256=n47mXJdtdeLSq_QTnCwiTnTRSdxE2fQsf5_sEP4J-NQ,5237 +easydev/chunks.py,sha256=F6bAQ1Ofoi7i-bN_3mwmi835-QpFzq6-U2K672shD0E,1382 +easydev/codecs.py,sha256=XvsCrpRklxPAvcH33oWxpksee_FpKQ6efPt4irLVMCI,2515 +easydev/config_tools.py,sha256=glhdMLIkmRvfmMI0rGJ8wX04JKGrOm3u26qFElwGtYc,14412 +easydev/console.py,sha256=81SuP7DARiJrL7FbyRtn-NU4G6buiIG92oApQBwzvLs,3399 +easydev/copybutton.py,sha256=zFUR7sS4lAoQyyf0r78A2RWOwGk9CLxb1P5_B_yOuWs,3502 +easydev/decorators.py,sha256=pnlWSH9X9nezWZ7Kessl9AnqVDjjqS8NlE0E4BL_xe4,5373 +easydev/dependencies.py,sha256=nV9CP13bbE4NrrTkS9tJsRFKBjolFDDNu08sNsdl8Og,910 +easydev/doc.py,sha256=MNRepTynkY5bQLBa9dw3XO_FNsSqC2vPRLPJpsu2J_I,998 +easydev/easytest.py,sha256=qHs-tswJQiDQxJo5-YgC9NVj-Q0XMLtaW7KKbUmgCgo,3307 +easydev/logging_tools.py,sha256=lfPVLBZ1w3ubszBPVWsO7mgc4p2gzy3McyZaYgpIzPs,3135 +easydev/md5tools.py,sha256=3QvjUzIELROrp-iDGNuZqX5b0tyh5Shh4IOy45GSoNY,838 +easydev/misc.py,sha256=OFFgSpmotNxgEwPfsgiqi_MpJAfCEsU-GdlsllyEkn0,2326 +easydev/multicore.py,sha256=cNJtR2PObNZVFWgaQLJhlvaTONWZaTPbKus0ms8lHvM,4590 +easydev/options.py,sha256=LWFPpqwKZeYxUigL3V0np-wFl5o6-TKaocEFS51zm6o,1726 +easydev/paths.py,sha256=5vuWhT9oOOFm4pzdd0XA9SVKjOxJEjyUvNwhT7YA5Dg,4616 +easydev/platform.py,sha256=TzHe3ZjpnxFO61XaLH1PKND3xGiqsZV55MMCsxjk024,2459 +easydev/profiler.py,sha256=Vam8elnGBuT4ueoGkknZC90A_AeBuPYHzbaUxyDiahc,2043 +easydev/progressbar.py,sha256=EY-Y7FjFq5rOSgLqki5556rAGxuqDwf6GB3hqTvuUAQ,6075 +easydev/share/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +easydev/share/__pycache__/__init__.cpython-37.pyc,, +easydev/share/copybutton.js,sha256=ZsZavRXhpKIWgRg_jHQWFAqjWaEoEu8Huz574y0g59g,2736 +easydev/share/themes/cno/google_footer.html,sha256=tyDdA9WJa3t1qO6WWxJnCKY_QX5y3UtuiRPxmizGLlo,623 +easydev/share/themes/cno/google_head.html,sha256=R3W-RP-LXQMr7D7foXGKMqQ3pnAq_T-o3beC_OPhCJI,169 +easydev/share/themes/cno/index.html,sha256=r3ccfsREEOBpZMMNL0-Lfqu-1mASJV3MExynxfrFoNQ,64 +easydev/share/themes/cno/indexsidebar.html,sha256=mBitfu4P43XJqMxMecIVNtYr28Wm7DELglbI3CUvmTo,515 +easydev/share/themes/cno/layout.html,sha256=k9dZokdBA5RjaD1OYLrRDC-1M_JLh3SxO-3KSwEi2U4,4426 +easydev/share/themes/cno/static/bgfooter.png,sha256=OI6RgP0krtNjflBjr3KutsE2H2JiXf59TN8bV0vsrt8,434 +easydev/share/themes/cno/static/bgtop.png,sha256=rSDNFdyOmbtuI-IDB4CrYtGh4_Hfkhe5KQR8_RVPLoQ,430 +easydev/share/themes/cno/static/software.css_t,sha256=cSTKSilK4qRoLz-IPLBDFJaMqdZdFOoNvxheFgJVz7M,14149 +easydev/share/themes/cno/static/warning.jpg,sha256=5u-WY0oRZ93pMDv1PATjr1cX8eF_UNUVEUtrzcFBhCw,897 +easydev/share/themes/cno/theme.conf,sha256=0SnEjXI0WD3w3kTQflKc31UEVRL0zPiNQjoawe0Kptg,481 +easydev/share/themes/standard/google_footer.html,sha256=tyDdA9WJa3t1qO6WWxJnCKY_QX5y3UtuiRPxmizGLlo,623 +easydev/share/themes/standard/google_head.html,sha256=Jxm2MRc-1q0l0EvWST_pkBugsmnurBJrFk8eK7LIl7U,257 +easydev/share/themes/standard/index.html,sha256=r3ccfsREEOBpZMMNL0-Lfqu-1mASJV3MExynxfrFoNQ,64 +easydev/share/themes/standard/indexsidebar.html,sha256=mBitfu4P43XJqMxMecIVNtYr28Wm7DELglbI3CUvmTo,515 +easydev/share/themes/standard/layout.html,sha256=B6jQym21YTkvGCla9XvbxzgcYV4EUyg5A7RldFEsuck,3740 +easydev/share/themes/standard/static/bgfooter.png,sha256=OI6RgP0krtNjflBjr3KutsE2H2JiXf59TN8bV0vsrt8,434 +easydev/share/themes/standard/static/bgtop.png,sha256=rSDNFdyOmbtuI-IDB4CrYtGh4_Hfkhe5KQR8_RVPLoQ,430 +easydev/share/themes/standard/static/software.css_t,sha256=Z0kpNklNFBz4Tne0T-xN5zRuzZDU0O5Ep_eab5G_uos,14130 +easydev/share/themes/standard/static/warning.jpg,sha256=5u-WY0oRZ93pMDv1PATjr1cX8eF_UNUVEUtrzcFBhCw,897 +easydev/share/themes/standard/theme.conf,sha256=0SnEjXI0WD3w3kTQflKc31UEVRL0zPiNQjoawe0Kptg,481 +easydev/sphinx_themes.py,sha256=vxdxfh4MtMMGvw4yhGX_nZONtEMto0RCIYJ8Vodoups,1529 +easydev/timer.py,sha256=keOootYIWWYlAHjYt52tXKl-BPJboUvRjEhXou1OiZE,1090 +easydev/tools.py,sha256=MvSvm1VaWB2LpformAy8i3xbnQYXM9kRoxL93DGDPyc,10397 +easydev/url.py,sha256=WTccXHUJDXbJQf3cvBjLpp40V4i4AYzhAjZVdjsEPRE,1544 diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/WHEEL new file mode 100644 index 0000000..bb7f7db --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/entry_points.txt new file mode 100644 index 0000000..7cd365d --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +browse = easydev.browser:main + diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/metadata.json b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/metadata.json new file mode 100644 index 0000000..0867a3c --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules"], "download_url": "http://github.com/cokelaer/easydev", "extensions": {"python.commands": {"wrap_console": {"browse": "easydev.browser:main"}}, "python.details": {"contacts": [{"email": "thomas.cokelaer@pasteur.fr", "name": "Thomas Cokelaer", "role": "author"}, {"email": "thomas.cokelaer@pasteur.fr", "name": "Thomas Cokelaer", "role": "maintainer"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/cokelaer/easydev"}}, "python.exports": {"console_scripts": {"browse": "easydev.browser:main"}}}, "extras": ["profiler"], "generator": "bdist_wheel (0.29.0)", "keywords": ["multisetup", "logging", "config", "decorators", "multigit", "progressbar"], "license": "new BSD", "metadata_version": "2.0", "name": "easydev", "platform": "Linux", "run_requires": [{"requires": ["colorama", "colorlog", "pexpect"]}, {"extra": "profiler", "requires": ["line-profiler-test"]}], "summary": "Common utilities to ease the development of Python packages", "test_requires": [{"requires": ["pytest"]}], "version": "0.12.0"} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/top_level.txt new file mode 100644 index 0000000..e48f7c2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev-0.12.0.dist-info/top_level.txt @@ -0,0 +1 @@ +easydev diff --git a/venv/lib/python3.7/site-packages/easydev/__init__.py b/venv/lib/python3.7/site-packages/easydev/__init__.py new file mode 100644 index 0000000..08aab5d --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/__init__.py @@ -0,0 +1,88 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://packages.python.org/easydev +# +############################################################################## + +import pkg_resources + +try: + version = pkg_resources.require("easydev")[0].version +except: + version = ">=0.11.0" + + +from . import browser +from .browser import browse as onweb + +from . import codecs +from .codecs import * + +from . import chunks +from .chunks import * + +from . import copybutton +from .copybutton import * + +from . import decorators +from .decorators import * + +from . import doc +from .doc import * + +from . import easytest +from .easytest import * + +from . import logging_tools +from .logging_tools import * + +from . import sphinx_themes +from .sphinx_themes import * + +from . import tools +from .tools import * + + +from .md5tools import md5 + +from . import options +from .options import * + +from . import paths +from .paths import * + +from . import misc +from .misc import * + +from . import config_tools +from .config_tools import * + +# from . import timer +from .timer import Timer + +from . import url +from .url import * + +# import dependencies +from .dependencies import get_dependencies + +from . import multicore +from .multicore import * + + +from .progressbar import TextProgressBar, progress_bar, Progress + + +from .profiler import do_profile diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb984f3f1f60e4488d74dc0f5b83fe14e3301374 GIT binary patch literal 1195 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 R6AUT(ua?1Cm08R({s8pi#l8Rl literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/codecs.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/codecs.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7f42bb972a851653299e8f27b5e5bf1000a1584 GIT binary patch literal 2140 zcma)7O>Y}F5MAy{vZC1NAr9JJTEak4tB_?o0g6^}jJ7F?o^r8IHUfoSQqsoKa!XQn zWXLDy+C%?Aa%}%jZ+mTjg%3sFkZV;=(;}3}IP)I)-P&3!Liz2lGx7VKDEfnh zo06dO4XWKiBcr28G8xNcm>eO zayKg!Pj!B#jMK*QP1PNCJA9m3$DQWZnJgc+%N3{lG*&j8_TRhIJ_yr?X$&u@(6@&A z1l6vhanU@QGs%9AVK%<_T#PdTqnh^y(>(1xSHjMuI_suds?>HXE6>}kT!BX?+Nw4) z42s%uS(CyEL+XExOaq_mhudyaY!_LvmF3on@pxX>%S8StZvXf3+mnA^#ZU+3Gxc-FOpS zLf=8e{BO?8$gN0r#TabNqbul<6r)7^iQ^s`k=ubb6E1SDPhP0h@hnH!M954w;Dxp} zI~l81i=*@kVZ?+}gnHGY4tLXHtU6p9ZnFuxA=y5|q^%ux8s(-Yzu6VkZE;v|Bek$? zgI%bqluFHW?M48H*Yb`Hm|l2tuDGyvI)MwL%yRq%FHAPcTy|EuC30CU_X;`J13p&y z(2e*mZ3u2EiDSX9%&7@KQ84dCe|qJVfmVH%NhQ1CAl)v&E!Eb^Sf{7G9xrBYr1LOG zaogYD=L4fByuu4dptJ$>ZxYb2AXzyTc2r}VyCH<6=y>ZxVMDy3e*AM;Z6xLs$fm0 zt+4I8fCd2o7s*ICJ`%u?sIDsDq%g{=+zFTIyt_z>M@?Q#gCd|}ItJjzRs%+~J1``0 zt%KO}^HG+LC=+U-BSTVbSUOt(lAmY5sJNB0>I?*o>IfL&Ruw%DS9CyE+_!WS!u%9A zypi{T>(a%$33PGbiR@6>AaP?M61e}pxIPaV8-{k|u;x9F8DDW*5f5W&ml-bBmkSnb~<6HPR=q?NSltv?0 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/config_tools.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/config_tools.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21f458197ff34b972c216b321cc8fc0efd42cd20 GIT binary patch literal 13583 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 YFyPUEb|~UtgRa8{J6_8RuLYm~2gfTV8UO$Q literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/decorators.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/decorators.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a84afa5801c9a06498b98765bd88f78ae1a097b GIT binary patch literal 4071 zcmcgvOK%*<5$>LueVU?WS)nD_K-xwea$$MsD1n0z4x)GfO0ND5xy>~v{e=Jt@>S2wE-6v654MMxo@PI)s;j^H zs`kdYb6tk#um9VN{(F(Jf73tp&WKXJb`@H<3;11 zjz(sqXvM?PB#G`8ZLK~T$6A@9jUnuc%z)O?L)Ha&U&d>Gj>fVBcEly$_4P#yOON<{ ze!!%EnLWac4DjWa9kb6o*?7#|%0RDMUp8swL-vplJ$Huop?BcH(oXaz&e+Y`Ofk&0 z7$lJ~B2{)fm%`>^u&oBWA|8q;6Opw#zB{%`sQuX3Zdc$5Lm~5lRmQHZl_NAd)OjjY zWF}JWg>y%UI34BMit5<&^`+W7kg}5B-BAPETXWJ$7Cll8MZX_svF-O)j7o-2&0`6T zhN<|m_};0V*DGBs%jxn}@s?3m*li`!6Q>!*+Ss>xr?!#8k&ZL_9Bt)frF6E_LcKf0 zT$l|@F}?20UpANd+L~}`MWnaJsmiPv0o)yqFJ3^?-#8Tq4ea|i3HTivARN*8m>+tUA0P^(x9jQa)+=M-m>qdK zJVs<3@IOEl@E;s_$KKFeLiF6{*^O#f1H0~9&j#hb1CJu<2$3N@`fB}r8Ir-o=7w&= z8r`CXPCGsSwh>uw5l7=phT?6bn;7mjiiQ~_u`T>WWkqW{G89O~;!o>v`jD=mXl*G= z6Ft8O018tCyZ59i8X2zFV6Za_zakipvq9mfX6rBPKR;Zx>1cHnkKTRy|&c5?N3`dh9$ke^zPhg?BfQAKKZ-FoJu6Kbi@HgyaG zZQkb7*I%H&7ic2(qWg;|87t>O-NArfK-2R#JLJMX3E%9HA6-{prWHs7r|i+rkan%? z3Z@OMVXrQ5k2ihT0-sQC@rr&O;{_WKs_7wQ*RP=yfPlH>fX{_vzQrH$Y{`vyM;?gV z(<^|ZBkqch0Zzm~Nym-oUx3lguY-=)*Vn%!C7T(S(ViF4atP+9=S9?9uc38k@bfd% z`={u;o~|j}to)ite0hKQ<1fkNwS*a)TM*jQj9xDyBj=PKrtdh5_vchj9yx>I-EhhB zPW*hswUY90P5)U^^Nj03r9{xHReYJ%6O5XULE@AK46<#uCBV*<4~TxN5v@ij8IUt* z`fQ>%NZpX(m`KE#nB?Osx6e|*%otF7gzS@!5=Dt9(vw*_5T|IIsu4%yZpAwAc zWPZdC&!lgnNJrl{(Aj_g*t^L-4nf~kw(!dgBo5L=bTm=c_@5yf%JIkEF@MdG_9x9> zg7#}l?*$uMFfbfa zalkC!?dl(JMt@XRKVXOc0gC2dp?pP3ZB2hWt2fJP7?q5O_M#ZYa-u@}^b!!8*V>+*21W z4!DGY69D8JwZ~?tsp}7#uA%F;=#L(;LOZXHW7j1c-7)O3Z$8KvC wNdy{Ih^SNheOFDDR7B9yB>YT#w?9a8IZo6%!PKb^P^7lKZqUBn4cklq2OhZKmH+?% literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/dependencies.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/dependencies.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..075b351cbd1f4db213bf809fcb7f35a9a08e6cab GIT binary patch literal 555 zcmY*WJ#W-N5S{UwyTjxn3M#5qDqMs^LW-1Agdz}a3euo!td)1pvd$mN?p~Bbmnzix z4M_< z6)sQLd>({m<7si&ptZPdljqX7>@*$1$gr^@bOESLhyF3ZwhcSZS*6(1S@os(}&wOiU zrZ$Il=e%l~!{yt{H}2RU%}BY8ri;h-?gCz$jg5j;BR4E f6f9X3L+xO=1ADPza?>~PHLByAR8PZ91H!vR|xl_BcKIxy) zpER!pe?%XOH#6?o3(4dRC+D7=J=&4ABiKbd_7skQ zOhxh;1NgER@j?oZ&eUu1)!-%|s|&L-g(x=C$pW<-Ol6i}706`x1~Y*h-LJx_MpM22 z2UNeUu9|WnkAh*xl@_fZA{jT2l7ot)OkAD)7pDNJb2|8;;3%4q-9EMu-D0s2mX3p` zqw48NAe|&huNp`JkKlr8Q0y2_SQnSNPU3D7T6NRGe>bI{Yux+-H=~5_&gWR!xi$98 z)E;G7o~>TpoclNUdj9X)#xHqH?bcD|@FHB!geG`0V;>Xd!tGJ3$9YbyJP!-f%JZJx YcX}`#5V@PZt@;eey@3>Q;jMT>Ou<1HTm%$SQ?2RNde);E zZFkGIjLae4E8ig;;Un--=E`Y{Z@_`#_j)YZT5qUSWv04kru+4KzxRKh-o4vmxc>3q z6Z!8o#{NYg^DDy3hZy!3m=seyXMLsu6{_f2*yk!%4HdlP{XjKU_>%R*Uo*9$qL)lX zI=T$|4aI-QI;*d6n)Rv;X{|Oc$usK`nU6|5^oxnitCllUtDSVtRPmu6jSsS1rzD-O zCI-EKgkcXb%>r{@@mZjP4R(ipi(Q1X&^$f+sbe!XzHsnN1gb&R=YP!c+)ck^FN2uH|Tu6hew$e!%2}k;*%cf^w3%IA5JDLNz3DC2egV++MM_GC#Mp_nDOv{N#TD%~#Z;Pmb;kr*vTk{}708!gpT*m9(Ww-IJ9k@WY_YK1k>X(OO2 znbT=f9`Ytd=ICQ_WH50s$|P4LP7Jd`br%3snG)^pZoNVho;-OXhNc_|E$vk4lP*1p zNMxgNY24f(w?b?okT~3Q-%ZoCKi%Hi-rD(WOZb=V?gzN=Rawrc%e<`ey~F{SA=tHv-h)>Tcb5k0EktkLwFHNT3V zRebt)X4b*xKRSJ@FCrCOG>RB=r1(W+x>4uhEVv9gn?-ip@z41u ztav+OE;w$P9%ppV8uque^G8+$f0$?FZvbT<5iuGegS=zMs0!K?2t+eQun9zykcgJz z;i<`-9OQ^f)Qt?0q-(R@445>Bv&DY996Z;l>+CK(NYSM9P$Wr)m`swk)%ozXeWIb| zZX(5=*jYMzy*I$#eme@g# zmDXl(=H8)!wo6Q2J20pZ9LU_>Al&!81$Eb_O^xF4fbwc(-dWa{X{yza&r&_6T8%7= z9Ex`pQz#X3q^pKEY8B6M^#i$s@!02CJ>5eZm=M$Z81?}swh{A)H<3IM5BM7Hb)M4t z{37ZPG3--JnxTaMouw z-@@)0YK-Uq+!uC)Y!|0Sj^T6^^Kybdh2AnAqLp@gP)Si^EsZo&>aL4EbvtK7pn7rg-F! z@iJWpYW5uXlK`dfL0$6dwIrxZ9_@b-{tbt{RzdHu6PX|2aJ7u} zOrHOj+A6^xl{QK87ZP^cR`YEb{=1;)b?y*8GH#Mott1(hYLe6YT9VM8^3~2tlHlhk zNz6Mqvfuj sehCnZ_*c&%i_rUWS2gQy>TA!NSXc2cYv50)C|dG;9JCs(x8fiD4^=}TfdBvi literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/logging_tools.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/logging_tools.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf710a96f342751ce8d8c57f2366c4dea47361af GIT binary patch literal 2992 zcmb_e%W@k<6rG-zMq|m3B!oP82!T@`i0xFUqCf@C!^DXxqg2_Us2UzqV|81|j5MaF z?LC@eMST6epo^T z<8OKyJ}$t0lpxfqTC@q50V0MQ*-AtFT^Lq0QNb5%|X# zXVmk;TH0*3I?d2-bmLCwG^G%o(CvyONuP(76g>1c(}YJrfs;F5K6?1gN3B~ub`gfZ}6+A zr}&%v8tQ3&9ogQLCMMtiE9oa&*;TEirMe5gU%^wW^=raQOG}lc@0DKbOpP^B&l(M@QNx)LiP#h5zdGQqdZzu9N8Og&_b@%yGa^H=ZSZ?&^{gXs%}r&u4AR7JE?S+Qap?Bg5o73gSm+ts z#t}QPfxRQ+!09=MMSOFpy=Nc#J&m{l4xRdbeRd8EMvXK{Wsu>8lIg^45zK#@eK$L& zVOB#!t0OvTz<;P!X6K~HgbFgCUk_+hTVz?>6hZdvA2th36?m+~R$Jwc?iu={IkNCd zCK_pn$Fdupe9fIqbrTUx>!2^?m(e$hWad|I`*$duMT{wKL!9WGYUQ`K^y%+{r#upDcvFL-s>uU(XQa|J z$rg6HxfeyPPD@46ZCdoVU<~Fmn|`Lr`aj?F%@XriiS18QQgE;^9M+(XKo5zCwx$+O z4S=L@U}_05WkNp2He_;O^&qC7O?ex_vAIdY==g+t8f$4-b;;mCYcz1=4Z@RTrpR1@ z$$ibW<|we`HTr&?jP84r5K+@N?-05Sa}OoM$)|I4kq>e*_h&{q4VSM$v(rO06`d4q z4@wH!W%YpRh*0UdPfrFVVEwfco?uX>IbvfI4O>U-QI8RO3NH$qPqCM#to9iA^5j)+ z9xz}FxXNvf9q_ooU5yLCwLu>bc!d}BcOQ6t(0>B>M_xJ@u7`cZ4xRqy)x4MM&m^tm zilkhR>9&v*)iF_itZAfU<9Ln?T@vWnmS%I^!Q8EGs^RYbk|Caqrr^68AJN0)NGQ!W+0Bp@E6ItirPqsFNR%A(rGU86r~NBBQCY z&k&>a`WjB4bJB{=E`pbg)Ml{B^Jp>0C>aepUtw3_@%XLFNt@o4d_H zn7P%?nrC;{M{u}$a-K&`qR5UO$e8w=$GAC|3Sc8A&Pj~h$8te zji%#Wz6X_+b|}fophyQ2R(6 z#=r@ul8gy&ahH3SWK21I2Vr};o$-E9>r|$C@e{=`L?#eXJI8PlTL|l@hDaLLWCQ0^ z(-pd2(68MuWd2AyS8zpQbmh*a&)o}p0w3?3J1e?&SI&kI`26@3PJw%GVFVul_q`2Z z2d(93By?Tnflfs5=A<7)iHK&Z&Qwsu0Sn?(icTlMc+X}+1#DW>I(XU-l!%I)qbf($ z^Vicx*=>}DR?`T3y$##_9zxkCyC!S6h7G~f$uK0wtpwxWAf(2Nk~*Im5?3DTe)oGi zD|=;H9;CU_Ov;1!aQ;Lc>1RE`)Pjq%+Yw(;7ll;aa$)>q$+9VDgNJDH3jxb}nC~9T zB4SbvaPlu-*=~km%d``w5}8hogF53DrO1t&YEhY1U2>*{*-FHmr=Nt7*&sNvfL0L)zr3HVP`=(hkynM00=ee6mCK$pg~thorI}J9JEYGT}uunN-_1 aHI3bWWX526wHa{XtyfJAVQ3?3)+> literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/misc.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/misc.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bcbdd8b0bd634c08454543e075bc8e84a84c332e GIT binary patch literal 1300 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/options.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/options.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27ef16176a507f5295b3da8a151cb9404b35965e GIT binary patch literal 1478 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/platform.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/platform.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..840407e063fab6d924500e11d2547d115c5d099d GIT binary patch literal 1784 zcmbVMO^+Kz5S=fNXPw;*UqW!J3-VfW#t1|ND-@vs5kVn`B+`N}R zjmRnd3ogll1N@}9a^f#=K)mj;cbx_0khXfdYo@zi)qCZ-y|*_AF#h;w$$s4lfKIf)|B^ohPBUk_yB9h zqldxh+F$S$jKcOhJ2t9nteBOHT4{T~-8~U@R#(gxN-yT_m>VHxiupCBv3OVn@*F{& z@7nN1^fGuB{2V;QG553aS>o&$Js!Ob^(Q=j7Rb-Noxr}$d$13@ox*;=`>;Rob_V;H z@4(K0FmMPz1v2{4dmmk6zk!XrTu56M=VVU>Z6c+Ed!=liOjf1jYGo!ru=!{(AdE*i zRj8^`r97d9;!P#Yq-f;amP#6$GfBsS8Y4JaMdklFKlF|^P-8OZCcm_l$t7EeF<~R* zveZiEbmU!LhQ}l)Eo`Hu_vJ#LD`}Alsp8^T4$oFBa=KekX^AUgNGeM!r60cvOQrEK zdvDJ9c1)xiTQ`79noX@rgH)AKqGQ8B~p;q`&*Uv)XTIE=s&6YOzo*Mf{fKr$Pm-Q=Uk{p z^09Yw))>2H?~1qWtn*Iq!!G7S8v1yLgj9y>Xgi~ecsQn^OJzvqr2rnzRn59AIJnb` zQi1^m%|Moc&{x#k4&q>4bx*&WOawFMTrBhLf7HQ@WXTyX(u<_zLMC@LBhhoGg< z26gF*Vtu{sdF9%kPp3_sfNkO;Z)0fJ_SdPcPJH%f^^Rdu8I^vTEO3wv`z$i=$xme=Px#@!Dw4dD@7&%!9o!X!+SG#rGl%xFKn z=u7UbYmmM#y^oCzo})88j`Y53bUemHUm7L%HTr7s=njH)NIul9$J=<<4oWivqppA4 zf^A&G3xJ+P`W@`v1hj{HuLsQl>IME5N4Fv0eKW{ujMn#h$P|zZHotcT@IBb0opvyr zb+tH~X-91vDWmt?razlOPQ3OEI!d$)QoD;=T)HaIp3v;euHW8rXN@b8U5J`RX`FqO H^|SuJZ^Gan literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/profiler.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/profiler.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5db18c8ad82c46a06ebff5b08451cc02b6619e41 GIT binary patch literal 1843 zcmaJ?U5^_z6tyRlY?w`!svras5=J1kDNV8nfkf1niiPr_YC$ci5DATD$DU-=i9NNQ z&4;p2U5S0-H_%7;N%P7J`~{E@_c}8hvSo2J9{c*v@%26DIv=;&0fF}G-^bBkJB0j( zld3gga2FnPA39Ekgwqin(#7lCoX94@qYy`kfLI1mBuyBnE>ZV9*k+CQL+T!NoC4C%Mv=aTVrTC21y{%iYcV zddFF~NSGDIUhfRt9D(NSHhcG9vm3YB{Cui~ooWe&;4Nm`!g3{AK z3iDpRU|&hWCR1apvt9(YMr27ZD1r@be}I%ohZe2-kg~7W)an?-;F<@0t$fTC82pIp zqTD-ep3oHq<?hXvPs=uy#cz+=9IZaJ{zDLL_0-p}-mKBJV( zUpXV6kRSF=YG_;4(DvljM+9cxGf?vxU6B?23E}`t4K1K&0#VV!j;}HBVGA-GCQ}*P zRLS9sLPo$_c(e#(HI;U_n}eck2+FXg;}?FUN2X{zp5c4gETygsnsmIPk*F+Fv%*KX zU&x>D_w6L_=V{(8rPWQ|o9~+s?Fao*JLm5T2uLd08osv>O{&N3wk>$xW zV`;(`YRaNGPN8D3SQji4(J|I8gQN1PWAV*pSk)%*B;g(y3@#|0E4T!(B8?D}=j;EQ zMK0JiVD7&Q<=WN}P)1JDm+2qYU8{=42^w>AMk;xNAgfej)^#1aiWbbMOJ%VG5s%?G zpMk|78llS@mvXaFLHSv=gCo0*s3lqF>^lnYA^Mv8R_%YdhfAUEsskjo&A-Flu>TPP z;vU2U3H!~)VW&~-gdtaP7~%kk48vi2>y~rX>BLj)e&POGKGj<3HMC2~CNIrf6W~4* UcizUGP=>zOfW2DYm8*N+KN@$~{r~^~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/progressbar.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/progressbar.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0133fc8b28fc51774de0943e1db1b0268a41e417 GIT binary patch literal 5903 zcmcIo%X8bt8ONItMai@+OS1DQs)VtaiDfxS+eCg;vGZ=icp7Kgu&~glFO+b}P=v#aN{Y5s<8s942Gi-q^qHVG>tcmt4=AC8dFz=k4caEKBOBg@TR@en*eyetu zFk_k3Fry|{zQFV^mGC@`vqvK^8CD}m5m9EN^t_D_VOb2l~GeD#Q_JfUR zO>S}XNbS~`3L@vS`EpHc(CO1!^iWIX4oY$x)kK{rt}@Y>vTuv^iOSS{RlLZwLoIBi zD)nDbj?_bKqG6tv>c{$H1#bq^QJYM`UPk8$!%9z7RD!CumDT-}3y(OHWI7m?*{Ha< z?**BW`a_kYeR>vFV@ zf$AXvZKEV_qpD1VjH4mVLxp)PNCQ#3W{xsl3+OTrgQ-b0SQItGDmLoF4_>(}tYa^oRWP)h^ZGbUtI2Gbttz{*@Ho~l>CdJ<3D%;pAu z5V-wa7{2+yXX$QMlVHMyBv5j!ZRUcK7D0>4K;H2W(k;b%(3e%zbn{q_Hh0Td_3|f!PiTW6S1+7MB z{6)h15n-v=84aP^@Qk=|s6jUX6U4t1`mqOnIMN2ja;^{KwO_T8 z-#9Jbi3U{nqhTCyVnyh*Hm(gEuuzf>b!AGCNN+>?FbSsp^c47HhR& z2~zbJ=*tgLWqQEFtS&e_YoEJ7)>@9NwE`ZyHXH>!a}adv;b`dYddV(NB!e=;4+jxe zi2AdRc!8=HQDrsPWl`UCbL=Aw zk&>7d(FxiSqi>=lOw{#l+HueuHlde3EV>9rGrQeGc$-D zaFNwze2_fw(_Qf@HqNXhWzi@lZ#qhL@pCnqAth@7c9JLnlpxsHCz{B6C~6b3TvWw- zcz-@+#8N`NoED-aRrfRsbt+U7qRkHrjxeg-@lqG!CB6nG%mJNwC9xqc@~ zc`u6g@813|9_=I&qyto<{S2KHM3ZQbzy?=8)iY9)n6oE=Y@jVmvrnywF5N_J&z3F^ zZeq&ic@&z|ovG&rFxyGegMi;$lOfTT6YxQL-RVUFD8J=giyu0WpU<2gOnd*jBfaC+ zk2W{shikV^t>rj!HJ{yFYb9&tsy+N_N8;m^eiTGvs~3!Txy)v(wRY>Zu$RQwZ(PMu zPA~Ypp}_0$z?s=2_89ZSohx*792rNuzUHI|=$)I++S=9AtCmiGPP_#UXU1scv#v?? z+i*+%eV;+EdEfP!Ah8P)$W#zuOa%et`ZF!=&8U{dnBU=BLK75d)S{+Y8Z_S4#+RN^ zi)X_C+LFvfV#`Ck{EuP4`!Wn5m#0tkLug8B0s57_+C)%DBZ_$#gCa(hE6*81g^-)dcMk6*(lDeL?r2{ZpT?T#KxfwSByfJl5w{{(8t(Ix=BR_G6q5D&oEX6E@Vd}4XMwc;w4p%0Nl8mkQW$- zxWJfbM-trzBUFBA8|7BU}@Ni?VN(eP#h@Yu+CLYBRS7@LEoezE=xT zl&upMa9o$zwH1598$zcL5hE8)wj4w!JuWB)JV}?G^(5tSLaLYUawmwQxIOc8nMa@c zb&*>qP8vBQWHQv`Q8cYl2Hg$<7iay=%?e3-2MD|e-Y7`h_2P_Mc}uV@??8&c-SLNU zB+_arir=ec;vTTC+=RZYU)#*jESCX)d?H79;SOKF_69y~RllVf#oBZ)aB7?eHj;qz zcztu@+R2Lao48k|59>Y-PeXZ%pwd+XX-n9kqZIy0tU<&RINm`?=oTcU6d5VfBf3?>y%q@6 z09KO82(5{w;v-aLhVwZMkb|2-i7NU1JI2cki?iiPPaK_w&-74B2a$)M%MiGsB3~;U zki09QZ3RJZabY7QYR|}=zW)QI+_qV5Tjq(t3HeYq+R#uitc1Lnae%*W=7tb z{1d+_H@Z-5G<{`5Yt4NR%+u|Qc!?_7ZiPLHruvcf9XG8VE~i> literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/sphinx_themes.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/sphinx_themes.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89a73f4400ff32e92bbe46fb35d61528014fa9fc GIT binary patch literal 1314 zcmcJPPjAyO6u@maZ9}&qKxon~$eKVR2eL_^0n?}uLmYQtoGPIx#NL{b#KCs=r&>?j z7vLMLNB9nW4Gy_-;v=vF;ytIWR@fCwcH)=k_wV+ zxbsu(Iy;vze=)BYUSElaLG4dd$aJS_PpVqAYEwZ|16@+BxO(+tEkz_!EfcHsiStu2 zWhxKz)mXWJ)dzgzlvDkM=mn5pZm!w9Tr1P^QCb)qXW65@$H(jDx!qWs_?$iGxP;}2 zZh(Omn8t^N-0)e4-lQ{N_;m(s12#3VoQ?y^&P{t{m3-5`)BsagF3N_hHv18b-=r}<|ws& zkg;&RqQ{PPy)1&I%g$Do8k?xR>^?*D=&MDB5B|A+;Z~-SI5S;%nVy(5pNqR<<$*^0 zRU5xU4+f1oA^Z=yg#Plau_pqU#{H=l7MV{w^ezqjsvSje-J)n>P?>Pnzxs~z5k=6U jpn$#Q3|%pf?W{4o%HPVB7-X`GhnyRa`V<^B{9AtjHg{EW literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/timer.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/timer.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e63731b0e9099f18c96f4bc985be262afe41a176 GIT binary patch literal 1071 zcmaJYx15ViLs*+eu{6+#>>kWjXwNgE_2B0!}axaC4mLCD&!UApOhVLNG4Em+r9!{MrgNjqjBTP@H zQkLEQ-a)vkt#v{g|82x%s^#h?64^i|ejgCTE`Ss(R z%F{AERW5w;jVK?|uR-5rWxq_yy(9e<{+dBe>%&p4h`5=EzV)2 zQgI%_cG>d&vgKVZ#;a(U(XAklVez-;f=rwn7a~YB@g9*|N>@VpDu8c+#=uHcHKMYV zxlk=Q4LwT?n9fUC`LigU%Bp2l6w8w+KL3|6NF*;&qGxbdTVAxiCQ@A-g-sMQk21-5 z)#f}a#5BeAJxbYP-x72@CvXGTp28Cz g;1~9hjpAe?V`B?z5Eju&9=xi_yxBo8t0)cJKP_(UzyJUM literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/__pycache__/tools.cpython-37.pyc b/venv/lib/python3.7/site-packages/easydev/__pycache__/tools.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d1813e0294e62abd86cd2338655e7d00d2e5339 GIT binary patch literal 9766 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 c{*~P7LiNo`rFyP9Xr@gOIO_+ zSKfgh;YoM~Upeh7a6pVh`E@koac92q%s1}+vuC>q*5~gF+DQ@m8V02%~h~4i#M1hm(dAw(VKXU)|j>&n`tP3sm=mJ9}b6y--A`S^vA`cS2pr(O?2D ztB&A*oHEXV5x}*SBwB#Atg@S~#j;exR`;A;Kml;=wB1fI5uJgIWl_{MoAEt~P2!_D#(Ld%|s* z`$<`rkp(waXaz4p%{Uv4$S}K=-556T9-hVb|`!4WcoLvex_bpq&v-C|uDW?A1enoylW(S<#hPf-Nyb{&*W(rbXKfLj7 zXm7cjIj45T_~Q2t3A1WtB7j{1u|c8!4n7B8gfHL}Cvk-PVUM~XgUE#che<#|bM485 z>0&Z5JvjT`ld{srJu*fc-wR}Ag%n&lpKf=Ehw(yuxUebqFLf#8=-e(ft0lj45l*%b ODuF`!P|n3Tjeh_-tS(;w literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/appdirs.py b/venv/lib/python3.7/site-packages/easydev/appdirs.py new file mode 100644 index 0000000..054ab3d --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/appdirs.py @@ -0,0 +1,608 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor +"""Local version of appdirs 1.4.0 with their MIT License +This helps to have easydev under conda. + +# This is the MIT license + +Copyright (c) 2010 ActiveState Software Inc. + +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. +""" + +"""Utilities for determining application-specific dirs. + +See for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +# Note: Thomas Cokelaer Jan 2016 +# Added appdirs directly inside easydev to remove dependencies. This was +# to make a conda test but may not be required anymore ?? + +__version_info__ = (1, 4, 0) +__version__ = ".".join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith("java"): # pragma: no cover + import platform + + os_name = platform.java_ver()[3][0] + if os_name.startswith("Windows"): # "Windows XP", "Windows 7", etc. + system = "win32" + elif os_name.startswith("Mac"): # "Mac OS X", etc. + system = "darwin" + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = "linux2" +else: + system = sys.platform + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/ + Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\Application Data\\ + Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ + Win 7 (not roaming): C:\Users\\AppData\Local\\ + Win 7 (roaming): C:\Users\\AppData\Roaming\\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if system == "win32": # pragma: no cover + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == "darwin": + path = os.path.expanduser("~/Library/Application Support/") + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv("XDG_DATA_HOME", os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + """Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/', + if XDG_DATA_DIRS is not set + + Typical user data directories are: + Mac OS X: /Library/Application Support/ + Unix: /usr/local/share/ or /usr/share/ + Win XP: C:\Documents and Settings\All Users\Application Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": # pragma: no cover + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == "darwin": + path = os.path.expanduser("/Library/Application Support") + if appname: + path = os.path.join(path, appname) + else: # pragma: no cover + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv( + "XDG_DATA_DIRS", os.pathsep.join(["/usr/local/share", "/usr/share"]) + ) + pathlist = [ + os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep) + ] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by deafult "~/.config/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: # pragma: no cover + path = os.getenv("XDG_CONFIG_HOME", os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + """Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set + + Typical user data directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: # pragma: no cover + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv("XDG_CONFIG_DIRS", "/etc/xdg") + pathlist = [ + os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep) + ] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache + Vista: C:\Users\\AppData\Local\\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": # pragma: no cover + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == "darwin": + path = os.path.expanduser("~/Library/Caches") + if appname: + path = os.path.join(path, appname) + else: # pragma: no cover + path = os.getenv("XDG_CACHE_HOME", os.path.expanduser("~/.cache")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Logs/ + Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs + Vista: C:\Users\\AppData\Local\\\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join(os.path.expanduser("~/Library/Logs"), appname) + elif system == "win32": # pragma: no cover + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: # pragma: no cover + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + + def __init__( + self, appname, appauthor=None, version=None, roaming=False, multipath=False + ): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir( + self.appname, self.appauthor, version=self.version, roaming=self.roaming + ) + + @property + def site_data_dir(self): + return site_data_dir( + self.appname, self.appauthor, version=self.version, multipath=self.multipath + ) + + @property + def user_config_dir(self): + return user_config_dir( + self.appname, self.appauthor, version=self.version, roaming=self.roaming + ) + + @property + def site_config_dir(self): + return site_config_dir( + self.appname, self.appauthor, version=self.version, multipath=self.multipath + ) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, version=self.version) + + +# ---- internal support stuff + + +def _get_win_folder_from_registry(csidl_name): # pragma: no cover + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): # pragma: no cover + from win32com.shell import shellcon, shell + + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): # pragma: no cover + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + + +def _get_win_folder_with_jna(csidl_name): # pragma: no cover + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros("c", buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath( + None, + getattr(win32.ShlObj, csidl_name), + None, + win32.ShlObj.SHGFP_TYPE_CURRENT, + buf, + ) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros("c", buf_size) + kernel = win32.Kernel32.INSTANCE + if kernal.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + + +if system == "win32": # pragma: no cover + try: + import win32com.shell + + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +# ---- self test code + +if __name__ == "__main__": # pragma no cover + appname = "MyApp" + appauthor = "MyCompany" + + props = ( + "user_data_dir", + "site_data_dir", + "user_config_dir", + "site_config_dir", + "user_cache_dir", + "user_log_dir", + ) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/venv/lib/python3.7/site-packages/easydev/browser.py b/venv/lib/python3.7/site-packages/easydev/browser.py new file mode 100644 index 0000000..7c3e47c --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/browser.py @@ -0,0 +1,181 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""Universal browser + +This module provides a browser in 2 flavours: as a program to use in a Terminal, +or as a Python function that can be used in other software. The underlying code is based on the standard python module :mod:`webbrowser`. With webbrowser module itself, you can already open a URL as follows in a command line interface:: + + python -m webbrowser -t "http://www.python.org" + +However, with **browse**, you can simply type:: + + browse http://www.python.org + +It does not seem to be a big improvments but it is a bit more flexible. First, +there is no need to enter "http://" : it will be added if missing and if this is not a local file.:: + + browse docs.python.org + browse http://docs.python.org --verbose + +Similarly, you can open an image (it uses the default image viewer):: + + browse image.png + +Or a txt file (or any document provided there is a default executable +to open it). It works like a charm under Linux. Under MAC, it uses the **open** +command so this should also work. + +When invoking **browse**, under MacOSX, it actually tries to call **open** +first and then calls webbrowser, if unsuccessful only. Note tested under +Windows but uses webbrowser is used and works for open HTML document and URLs. + +You can also look at a directory (starts nautilus under Fedora):: + + browse ~/Pictures + +See more examples below. + +The interest of **browse** is that it can also be used programmatically:: + + from easydev.browser import browse + # open an image with the default image viewer: + browse("image.png") + # or a web page + browse("http://www.uniprot.org") + +There is also an alias **onweb**:: + + from easydev import onweb + +""" +import os +import sys, webbrowser +from optparse import OptionParser +import argparse + + +def browse(url, verbose=True): + from sys import platform as _platform + + if _platform == "linux" or _platform == "linux2": + _browse_linux(url, verbose=True) + elif _platform == "darwin": # pragma: no cover + # under Mac, it looks like the standard webbrowser may not work as smoothly + # OS X + _browse_mac(url, verbose) + elif _platform == "win32": # pragma: no cover + # for windows and others, the same code as Linux should work + _browse_linux(url, verbose=True) + else: + _browse_linux(url, verbose=True) # pragma: no cover + + +def _browse_mac(url, verbose=True): # pragma: no cover + if verbose: + print("openning %s" % url) + + import os + + try: + os.system("open /Applications/Safari.app {}".format(url)) + return + except: + pass + + try: + os.system("open /Applications/Safari.app {}".format("http://" + url)) + return + except: + pass + + try: + webbrowser.open_new(url) + except: + if verbose: + print("Could not open %s. Trying to append http://" % url) + try: + webbrowser.open_new("open http://{}".format(url)) + except: + print("Could not open http://%s" % url) + raise Exception + + +def _browse_linux(url, verbose=True): # pragma: no cover + if verbose: + print("openning %s" % url) + try: + webbrowser.open(url) + return + except: + pass + + try: + if verbose: + print("Could not open %s" % url) + webbrowser.open("http://" + url) + return + except: + pass + + raise Exception("Could not open http://{}".format(url)) + + +def main(args=None): # pragma: no cover + if args is None: + args = sys.argv[:] + + # check for verbosity + if "--verbose" in args: + verbose = True + args.remove("--verbose") + print(args) + else: + verbose = False + + if "--help" in args or len(args) == 1: + print("Browse, a simple command line browser") + print("Author: Thomas Cokelaer, (c) 2012.") + print("USAGE\n\tbrowse http://docs.python.org ") + print("\tbrowse http://docs.python.org --verbose") + print("\tbrowse localfile.html") + print("\tbrowse local_directory (Linux only ?)") + return + url = args[1] + + if os.path.exists(url): + if verbose: + print("%s is local file. Trying to open it.\n" % url) + browse(url, verbose) + else: + if verbose: + print("%s seems to be a web address. Trying to open it.\n" % url) + if url.startswith("http"): + browse(url, verbose) + else: + if verbose: + print( + "%s does not exists and does not starts with http, trying anyway." + % url + ) + browse("http://" + url, verbose) + + +if __name__ == "__main__": # pragma: no cover + import sys + + main(sys.argv) diff --git a/venv/lib/python3.7/site-packages/easydev/chunks.py b/venv/lib/python3.7/site-packages/easydev/chunks.py new file mode 100644 index 0000000..a4673dc --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/chunks.py @@ -0,0 +1,55 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## + +# http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python +# +# Here's a generator that yields the chunks you want: +# +# def chunks(l, n): +# """Yield successive n-sized chunks from l.""" +# for i in range(0, len(l), n): +# yield l[i:i+n] +# +# The issue here is that the chunks are not evenly sized chunks +# + +__all__ = ["split_into_chunks"] + + +try: + range = xrange # py2 +except: + pass # py3 + + +def split_into_chunks(items, maxchunks=10): + """Split a list evenly into N chunks + + .. doctest:: + + >>> from easydev import split_into_chunks + >>> data = [1,1,2,2,3,3] + >>> list(split_into_chunks(data, 3)) + [[1, 2], [1, 3], [2, 3]] + + + """ + chunks = [[] for _ in range(maxchunks)] + for i, item in enumerate(items): + chunks[i % maxchunks].append(item) + return filter(None, chunks) diff --git a/venv/lib/python3.7/site-packages/easydev/codecs.py b/venv/lib/python3.7/site-packages/easydev/codecs.py new file mode 100644 index 0000000..1914d70 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/codecs.py @@ -0,0 +1,92 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://www.assembla.com/spaces/pyeasydev/wiki +# Documentation: http://packages.python.org/easydev +# +############################################################################## +# $:Id $ +"""various type convertors (e.g., list to string)""" + + +__all__ = ["to_list", "tolist", "list2string"] + + +def tolist(data, verbose=True): + """alias to :func:`easydev.codecs.to_list`""" + return to_list(data, verbose=verbose) + + +def to_list(data, verbose=True): + """Transform an object into a list if possible + + :param data: a list, tuple, or simple type (e.g. int) + :return: a list + + - if the object is list or tuple, do nothing + - if the object is not a list, we assume this is a primitive type and a list + of length 1 is returned, the item being the parameter provided. + + .. code-block:: python + + >>> from easydev import transform_to_list + >>> to_list(1) + [1] + >>> to_list([1,2]) + [1,2] + + """ + if isinstance(data, list) or isinstance(data, tuple): + return data # nothing to do + elif isinstance(data, float): + return [data] + elif isinstance(data, int): + return [data] + elif isinstance(data, str): + return [data] + else: + try: + data = data.tolist() + return data + except: + if verbose: + print("not known type. Trying to cast into a list") + return list(data) + + +def list2string(data, sep=",", space=True): + """Transform a list into a string + + :param list data: list of items that have a string representation. + the input data could also be a simple object, in which case + it is simply returned with a cast into a string + :param str sep: the separator to be use + + .. code-block:: python + + >>> list2string([1, 2] + "1, 2" + >>> list2string([1, 2], sep=;) + "1; 2" + >>> list2string([1, 2], sep=;, space=False) + "1;2" + >>> list2string(1, sep=;, space=False) + "1" + + .. note:: the cast is performed with str() + """ + data = to_list(data) + if space is True: + sep = sep + " " + res = sep.join([str(x) for x in data]) + return res diff --git a/venv/lib/python3.7/site-packages/easydev/config_tools.py b/venv/lib/python3.7/site-packages/easydev/config_tools.py new file mode 100644 index 0000000..214adcf --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/config_tools.py @@ -0,0 +1,457 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://packages.python.org/easydev +# +############################################################################## +try: + from ConfigParser import ConfigParser +except ImportError: + from configparser import ConfigParser + + +import os + + +__all__ = ["CustomConfig", "DynamicConfigParser", "ConfigExample", "load_configfile"] + +# 53, 59, 64-65, 181, 260, 262, 267-270, 288-290, 329, 332-337, 340-341, 359-360, 386-388, 400-401, 406-426, 431-435 + + +class _DictSection(object): + """Dictionary section. + + Reference: https://gist.github.com/dangoakachan/3855920 + + """ + + def __init__(self, config, section): + object.__setattr__(self, "_config", config) + object.__setattr__(self, "_section", section) + + def __getattr__(self, attr): + return self.get(attr, None) + + __getitem__ = __getattr__ + + def get(self, attr, default=None): + if attr in self: + return self._config.get(self._section, attr) + else: # pragma: no cover + return default + + def __setattr__(self, attr, value): + if attr.startswith("_"): + object.__setattr__(self, attr, value) + else: # pragma: no cover + self.__setitem__(attr, value) + + def __setitem__(self, attr, value): + if self._section not in self._config: # pragma: no cover + self._config.add_section(self._section) + + self._config.set(self._section, attr, str(value)) + + def __delattr__(self, attr): + if attr in self: + self._config.remove_option(self._section, attr) + + __delitem__ = __delattr__ + + def __contains__(self, attr): + config = self._config + section = self._section + + return config.has_section(section) and config.has_option(section, attr) + + +class ConfigExample(object): + """Create a simple example of ConfigParser instance to play with + + :: + + >>> from easydev.pipeline.config import ConfigExample + >>> c = ConfigExample().config # The ConfigParser instance + >>> assert 'General' in c.sections() + >>> assert 'GA' in c.sections() + + This example builds up a ConfigParser instance from scratch. + + This is equivalent to having the following input file:: + + [General] + verbose = True + tag = test + + [GA] + popsize = 1 + + + which can be read with ConfigParser as follows: + + .. doctest:: + + >>> # Python 3 code + >>> from configparser import ConfigParser + >>> config = ConfigParser() + >>> config.read("file.ini") + [] + + """ + + def __init__(self): + self.config = ConfigParser() + self.config.add_section("General") + self.config.set("General", "verbose", "true") + self.config.add_section("GA") + self.config.set("GA", "popsize", "50") + + +class DynamicConfigParser(ConfigParser, object): + """Enhanced version of Config Parser + + Provide some aliases to the original ConfigParser class and + new methods such as :meth:`save` to save the config object in a file. + + .. code-block:: python + + >>> from easydev.config_tools import ConfigExample + >>> standard_config_file = ConfigExample().config + >>> c = DynamicConfigParser(standard_config_file) + >>> + >>> # then to get the sections, simply type as you would normally do with ConfigParser + >>> c.sections() + >>> # or for the options of a specific sections: + >>> c.get_options('General') + + You can now also directly access to an option as follows:: + + c.General.tag + + Then, you can add or remove sections (:meth:`remove_section`, :meth:`add_section`), + or option from a section :meth:`remove_option`. You can save the instance into a file + or print it:: + + print(c) + + .. warning:: if you set options manually (e.G. self.GA.test =1 if GA is a + section and test one of its options), then the save/write does not work + at the moment even though if you typoe self.GA.test, it has the correct value + + + Methods inherited from ConfigParser are available: + + :: + + # set value of an option in a section + c.set(section, option, value=None) + # but with this class, you can also use the attribute + c.section.option = value + + # set value of an option in a section + c.remove_option(section, option) + c.remove_section(section) + + + """ + + def __init__(self, config_or_filename=None, *args, **kargs): + + object.__setattr__(self, "_filename", config_or_filename) + # why not a super usage here ? Maybe there were issues related + # to old style class ? + ConfigParser.__init__(self, *args, **kargs) + + if isinstance(self._filename, str) and os.path.isfile(self._filename): + self.read(self._filename) + elif isinstance(config_or_filename, ConfigParser): + self._replace_config(config_or_filename) + elif config_or_filename == None: + pass + else: + raise TypeError( + "config_or_filename must be a valid filename or valid ConfigParser instance" + ) + + def read(self, filename): + """Load a new config from a filename (remove all previous sections)""" + if os.path.isfile(filename) == False: + raise IOError("filename {0} not found".format(filename)) + + config = ConfigParser() + config.read(filename) + + self._replace_config(config) + + def _replace_config(self, config): + """Remove all sections and add those from the input config file + + :param config: + + """ + for section in self.sections(): + self.remove_section(section) + + for section in config.sections(): + self.add_section(section) + for option in config.options(section): + data = config.get(section, option) + self.set(section, option, data) + + def get_options(self, section): + """Alias to get all options of a section in a dictionary + + One would normally need to extra each option manually:: + + for option in config.options(section): + config.get(section, option, raw=True)# + + then, populate a dictionary and finally take care of the types. + + .. warning:: types may be changed .For instance the string "True" + is interpreted as a True boolean. + + .. seealso:: internally, this method uses :meth:`section2dict` + """ + return self.section2dict(section) + + def section2dict(self, section): + """utility that extract options of a ConfigParser section into a dictionary + + :param ConfigParser config: a ConfigParser instance + :param str section: the section to extract + + :returns: a dictionary where key/value contains all the + options/values of the section required + + Let us build up a standard config file: + .. code-block:: python + + >>> # Python 3 code + >>> from configparser import ConfigParser + >>> c = ConfigParser() + >>> c.add_section('general') + >>> c.set('general', 'step', str(1)) + >>> c.set('general', 'verbose', 'True') + + To access to the step options, you would write:: + + >>> c.get('general', 'step') + + this function returns a dictionary that may be manipulated as follows:: + + >>> d_dict.general.step + + .. note:: a value (string) found to be True, Yes, true, + yes is transformed to True + .. note:: a value (string) found to be False, No, no, + false is transformed to False + .. note:: a value (string) found to be None; none, + "" (empty string) is set to None + .. note:: an integer is cast into an int + """ + options = {} + for option in self.options(section): # pragma no cover + data = self.get(section, option, raw=True) + if data.lower() in ["true", "yes"]: + options[option] = True + elif data.lower() in ["false", "no"]: + options[option] = False + elif data in ["None", None, "none", ""]: + options[option] = None + else: + try: # numbers + try: + options[option] = self.getint(section, option) + except: + options[option] = self.getfloat(section, option) + except: # string + options[option] = self.get(section, option, raw=True) + return options + + def save(self, filename): + """Save all sections/options to a file. + + :param str filename: a valid filename + + :: + + config = ConfigParams('config.ini') #doctest: +SKIP + config.save('config2.ini') #doctest: +SKIP + + """ + try: + if os.path.exists(filename) == True: + print("Warning: over-writing %s " % filename) + fp = open(filename, "w") + except Exception as err: # pragma: no cover + print(err) + raise Exception("filename could not be opened") + + self.write(fp) + fp.close() + + def add_option(self, section, option, value=None): + """add an option to an existing section (with a value) + + .. code-block:: python + + >>> c = DynamicConfigParser() + >>> c.add_section("general") + >>> c.add_option("general", "verbose", True) + """ + assert section in self.sections(), "unknown section" + # TODO I had to cast to str with DictSection + self.set(section, option, value=str(value)) + + def __str__(self): + str_ = "" + for section in self.sections(): + str_ += "[" + section + "]\n" + for option in self.options(section): + data = self.get(section, option, raw=True) + str_ += option + " = " + str(data) + "\n" + str_ += "\n\n" + + return str_ + + def __getattr__(self, key): + return _DictSection(self, key) + + __getitem__ = __getattr__ + + def __setattr__(self, attr, value): + if attr.startswith("_") or attr: + object.__setattr__(self, attr, value) + else: + self.__setitem__(attr, value) + + def __setitem__(self, attr, value): + if isinstance(value, dict): + section = self[attr] + for k, v in value.items(): + section[k] = v + else: + raise TypeError("value must be a valid dictionary") + + def __delattr__(self, attr): + if attr in self: + self.remove_section(attr) + + def __contains__(self, attr): + return self.has_section(attr) + + def __eq__(self, data): + # FIXME if you read file, the string "True" is a string + # but you may want it to be converted to a True boolean value + if sorted(data.sections()) != sorted(self.sections()): + print("Sections differ") + return False + for section in self.sections(): + + for option in self.options(section): + try: + if str(self.get(section, option, raw=True)) != str( + data.get(section, option, raw=True) + ): + print("option %s in section %s differ" % (option, section)) + return False + except: # pragma: no cover + return False + return True + + +class CustomConfig(object): + """Base class to manipulate a config directory""" + + def __init__(self, name, verbose=False): + self.verbose = verbose + from easydev import appdirs + + self.appdirs = appdirs.AppDirs(name) + + def init(self): + sdir = self.appdirs.user_config_dir + self._get_and_create(sdir) + + def _get_config_dir(self): + sdir = self.appdirs.user_config_dir + return self._get_and_create(sdir) + + user_config_dir = property( + _get_config_dir, doc="return directory of this configuration file" + ) + + def _get_and_create(self, sdir): + if not os.path.exists(sdir): + print("Creating directory %s " % sdir) + try: + self._mkdirs(sdir) + except Exception: # pragma: no cover + print("Could not create the path %s " % sdir) + return None + return sdir + + def _mkdirs(self, newdir, mode=0o777): + """See :func:`easydev.tools.mkdirs`""" + from easydev.tools import mkdirs + + mkdirs(newdir, mode) + + def remove(self): + try: + sdir = self.appdirs.user_config_dir + os.rmdir(sdir) + except Exception as err: # pragma: no cover + raise Exception(err) + + +def _load_configfile(configpath): # pragma: no cover + "Tries to load a JSON or YAML file into a dict." + try: + with open(configpath) as f: + try: + import json + + return json.load(f) + except ValueError: + f.seek(0) # try again + try: + import yaml + except ImportError: + raise IOError( + "Config file is not valid JSON and PyYAML " + "has not been installed. Please install " + "PyYAML to use YAML config files." + ) + try: + return yaml.load(f, Loader=yaml.FullLoader) + except yaml.YAMLError: + raise IOError( + "Config file is not valid JSON or YAML. " + "In case of YAML, make sure to not mix " + "whitespace and tab indentation." + ) + except Exception as err: + raise (err) + + +def load_configfile(configpath): + "Loads a JSON or YAML configfile as a dict." + config = _load_configfile(configpath) + if not isinstance(config, dict): + raise IOError( + "Config file must be given as JSON or YAML " "with keys at top level." + ) + return config diff --git a/venv/lib/python3.7/site-packages/easydev/console.py b/venv/lib/python3.7/site-packages/easydev/console.py new file mode 100644 index 0000000..ec8a59f --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/console.py @@ -0,0 +1,142 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# It is a modified version of console.py from the sphinx software +# +# Copyright (c) 2011-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://packages.python.org/easydev +# +############################################################################## +"""Format colored consoled output. Modified from sphinx.util.console""" +import os +import sys +import platform + +__all__ = ["color_terminal", "get_terminal_width", "term_width_line"] + + +try: + plf = platform.platform.lower() + if plf.starstwith("win"): # pragma: no cover + import colorama + + colorama.init() +except AttributeError: + pass + +# colors and other functions from the attributes codes are added dynamically to +# this __all__ variable +codes = {} + + +def get_terminal_width(): + """Returns the current terminal width""" + try: + import termios, fcntl, struct + + call = fcntl.ioctl(0, termios.TIOCGWINSZ, struct.pack("hhhh", 0, 0, 0, 0)) + _, width = struct.unpack("hhhh", call)[:2] + terminal_width = width + except (SystemExit, KeyboardInterrupt): # pragma: no cover + raise + except: + # FALLBACK + terminal_width = int(os.environ.get("COLUMNS", 80)) - 1 + return terminal_width + + +def term_width_line(text): + """prints pruned version of the input text (limited to terminal width) + + :param str text: + :return str text: + """ + _tw = get_terminal_width() + if not codes: + # if no coloring, don't output fancy backspaces + return text + "\n" + else: + return text.ljust(_tw) + "\r" + + +def color_terminal(): + """Does terminal allows coloring + + :return: boolean""" + if not hasattr(sys.stdout, "isatty"): + return False + if not sys.stdout.isatty(): + return False + if "COLORTERM" in os.environ: # pragma: no cover + return True + term = os.environ.get("TERM", "dumb").lower() + if term in ("xterm", "linux") or "color" in term: + return True + return False + + +def __nocolor(): # pragma: no cover + """set color codes off""" + codes.clear() + + +def __coloron(): # pragma: no cover + """Set color codes on""" + codes.update(_orig_codes) + + +def _colorize(name, text): + return codes.get(name, "") + text + codes.get("reset", "") + + +def _create_color_func(name): + def inner(text): + return _colorize(name, text) + + globals()[name] = inner + + +_attrs = { + "reset": "39;49;00m", + "bold": "01m", + "faint": "02m", + "standout": "03m", + "underline": "04m", + "blink": "05m", +} + +for _name, _value in _attrs.items(): + codes[_name] = "\x1b[" + _value + +_colors = [ + ("black", "darkgray"), + ("darkred", "red"), + ("darkgreen", "green"), + ("brown", "yellow"), + ("darkblue", "blue"), + ("purple", "fuchsia"), + ("turquoise", "teal"), + ("lightgray", "white"), +] + +for i, (dark, light) in enumerate(_colors): + codes[dark] = "\x1b[%im" % (i + 30) + codes[light] = "\x1b[%i;01m" % (i + 30) + +_orig_codes = codes.copy() + +for _name in codes: + _create_color_func(_name) + +# dynamically set the colors +for x in codes.keys(): + __all__.append(x) diff --git a/venv/lib/python3.7/site-packages/easydev/copybutton.py b/venv/lib/python3.7/site-packages/easydev/copybutton.py new file mode 100644 index 0000000..cab51f0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/copybutton.py @@ -0,0 +1,119 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://packages.python.org/easydev +# +############################################################################## +"""This module is a copy of a sphinx extension. unknown origin. + + added by Thomas Cokelaer: get_copybutton_path function. + + Create a sphinx extension based on copybutton javascript from python website + +Requires sphinx to be installed. imports are inside functions so not stricly +speaking required for the installation. +""" +import os +from os.path import join as pj +import shutil + +try: + from docutils import nodes +except Exception: # pragma: no cover + # if docutils is not installed + class Dummy: + SkipNode = Exception + + nodes = Dummy() + + +__all__ = [ + "get_copybutton_path", +] + + +def copy_javascript_into_static_path(static="_static", filepath="copybutton.js"): + """This script can be included in a sphinx configuration file to copy the + copybutton in the static directory + + :param str static: name of the static path (_static by default) + :param filename: full path of the file to copy + + :Details: If the path *static* does not exists, it is created. If the + filename in filepath is already in the path *static*, nothing need to be done. + Otherwise, the file is copied in *static* directory. + + """ + if os.path.isdir(static): + pass + else: + os.mkdir(static) + + filename = os.path.split(filepath)[1] + if os.path.isfile(static + os.sep + filename): + pass + else: + shutil.copy(filepath, static + os.sep + filename) + + +def get_copybutton_path(): + """Return the path where the to find the copybutton javascript + + Copy the copybutton.js javascript in the share directory of easydev so + that it is accesible by all packages that required it by typing: + + .. doctest:: + + >>> from easydev import get_copybutton_path + >>> p = get_copybutton_path() + + It can then be added with a Sphinx configuration file:: + + jscopybutton_path = easydev.copybutton.get_copybutton_path() + + """ + import easydev + + try: # install mode + packagedir = easydev.__path__[0] + packagedir = os.path.realpath(pj(packagedir, "share")) + os.listdir(packagedir) # if this faisl, we are in deve mode + except OSError: # pragma: no cover + try: + packagedir = easydev.__path__[0] + packagedir = os.path.realpath(pj(packagedir, "..", "share")) + except: + raise IOError("could not find data directory") + return pj(packagedir, "copybutton.js") + + +def setup(app): # pragma: no cover + cwd = os.getcwd() + + # From Sphinx, we typing "make html", this is the place where we expect + # the JS to be found + staticpath = os.sep.join([cwd, "source", "_static"]) + from easydev.tools import mkdirs + + mkdirs(staticpath) + if os.path.exists(staticpath + os.sep + "copybutton.js"): + pass # the JS file is already there. + else: + # Not found, so let us copy it + import shutil + + shutil.copy(get_copybutton_path(), staticpath) + + # Now that the file is available, use it + app.add_js_file("copybutton.js") diff --git a/venv/lib/python3.7/site-packages/easydev/decorators.py b/venv/lib/python3.7/site-packages/easydev/decorators.py new file mode 100644 index 0000000..880fdf0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/decorators.py @@ -0,0 +1,196 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2012-2014 - +# +# File author(s): Thomas Cokelaer (cokelaer, gmail.com) +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# website: http://github.com/cokelaer/easydev +# +############################################################################## +"""Handy decorators""" +from functools import wraps +import threading + +__all__ = ["ifpylab", "requires", "ifpandas"] + + +# decorator with arguments and optional arguments for a method +def _require(*args_deco, **kwds_deco): + """Decorator for class method to check if an attribute exist + + .. doctest:: + + from easydev.decorators import require + + class Test(object): + def __init__(self): + self.m = 1 + @require('m', "set the m attribute first") + def print(self): + print self.m + t = Test() + t.print() + + + .. todo:: first argument could be a list + """ + if len(args_deco) != 2: + raise ValueError( + "require decorator expects 2 parameter. First one is" + + "the required attribute. Second one is an error message." + ) + attribute = args_deco[0] + msg = args_deco[1] + + if len(attribute.split(".")) > 2: + raise AttributeError( + "This version of require decorator introspect only 2 levels" + ) + + def decorator(func): + # func: function object of decorated method; has + # useful info like f.func_name for the name of + # the decorated method. + + def newf(*args, **kwds): + # This code will be executed in lieu of the + # method you've decorated. You can call the + # decorated method via f(_args, _kwds). + names = attribute.split(".") + + if len(names) == 1: + if hasattr(args[0], attribute): + return func(*args, **kwds) + else: + raise AttributeError("%s not found. %s" % (names, msg)) + elif len(names) == 2: + if hasattr(getattr(args[0], names[0]), names[1]): + return func(*args, **kwds) + else: + raise AttributeError("%s not found. %s" % (names, msg)) + + newf.__name__ = func.__name__ + newf.__doc__ = func.__doc__ + return newf + + return decorator + + +# for book keeping, could be useful: +""" +def _blocking(not_avail): + def blocking(f, *args, **kw): + if not hasattr(f, "thread"): + # no thread running + def set_result(): + f.result = f(*args, **kw) + f.thread = threading.Thread(None, set_result) + f.thread.start() + return not_avail + elif f.thread.isAlive(): + return not_avail + else: + # the thread is ended, return the stored result + del f.thread + return f.result + return blocking +""" + +# same as require decorator but works with list of stirngs of +# single string and uses the functools utilities +def requires(requires, msg=""): + """Decorator for class method to check if an attribute exist + + .. doctest:: + + >>> from easydev.decorators import requires + >>> class Test(object): + ... def __init__(self): + ... self.m = 1 + ... self.x = 1 + ... @requires(['m','x'], "set the m attribute first") + ... def printthis(self): + ... print(self.m+self.x) + >>> t = Test() + >>> t.printthis() + 2 + + """ + if isinstance(requires, str): + requires = [requires] + elif isinstance(requires, list) == False: + raise TypeError( + "First argument of the /requires/ decorator must be a" + + "string or list of string representing the required attributes" + + "to be found in your class. Second argument is a " + + "complementary message. " + ) + + def actualDecorator(f): + @wraps(f) + def wrapper(*args, **kwds): + for require in requires: + if hasattr(args[0], require) == False: + raise AttributeError( + "{} not found in {}. ".format(require, args[0]) + msg + ) + return f(*args, **kwds) + + return wrapper + + return actualDecorator + + +# could be a macro maybe + + +def ifpandas(func): + """check if pandas is available. If so, just return + the function, otherwise returns dumming function + that does nothing + + """ + + def wrapper(*args, **kwds): + return func(*args, **kwds) + + try: + import pandas + + return wrapper + except Exception: # pragma: no cover + + def dummy(): + pass + + return dummy + + +def ifpylab(func): + """check if pylab is available. If so, just return + the function, otherwise returns dumming function + that does nothing + """ + # for functions + def wrapper(*args, **kwds): + return func(*args, **kwds) + + # for methods + try: + import pylab + + return wrapper + except Exception: # pragma: no cover + + def dummy(): + pass + + return dummy diff --git a/venv/lib/python3.7/site-packages/easydev/dependencies.py b/venv/lib/python3.7/site-packages/easydev/dependencies.py new file mode 100644 index 0000000..4b59ef2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/dependencies.py @@ -0,0 +1,38 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +# $:Id $ + +import pkg_resources + + +__all__ = ["get_dependencies"] + + +def get_dependencies(pkgname): + """Return dependencies of a package as a sorted list + + :param str pkgname: package name + :return: list (empty list if no dependencies) + """ + try: + res = pkg_resources.require(pkgname) + res = list(set(res)) + res.sort() + return res + except Exception: + return [] diff --git a/venv/lib/python3.7/site-packages/easydev/doc.py b/venv/lib/python3.7/site-packages/easydev/doc.py new file mode 100644 index 0000000..c12ceb1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/doc.py @@ -0,0 +1,44 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""Module related to documentation + + +.. testsetup:: + + from easydev.doc import * + +""" +__all__ = ["underline"] + + +def underline(text, symbol="="): + """Underlines a string with a specific character + + :param str text: the text to underline + :param str symbol: the character to be used to underline the text + :return: underlined text. + + .. doctest:: + + >>> print(underline("test")) + test + ==== + + """ + length = len(text) + return text + "\n" + length * symbol diff --git a/venv/lib/python3.7/site-packages/easydev/easytest.py b/venv/lib/python3.7/site-packages/easydev/easytest.py new file mode 100644 index 0000000..5744fec --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/easytest.py @@ -0,0 +1,127 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://packages.python.org/easydev +# +############################################################################## +# $:Id $ + +import tempfile + +__all__ = ["assert_list_almost_equal", "trysetattr", "TempFile"] + +# from easydev.decorators import ifpandas + + +def assert_list_almost_equal(first, second, places=None, deltas=None): + """Combined version nose.tools.assert_almost_equal and assert_list_equal + + This function checks that 2 lists contain identical items. + The equality between pair of items is checked with assert_almost_equal + function, which means you can check for the places argument + + .. note:: there may be already some tools to + check that either in nosetests or unittest + but could not find. + + .. doctest:: + + >>> from easydev.easytest import assert_list_almost_equal + >>> assert_list_almost_equal([0,0,1], [0,0,0.9999], places=3) + >>> assert_list_almost_equal([0,0,1], [0,0,0.9999], deltas=1e-4) + + """ + if places: + deltas = 10 ** -(places - 1) + + if deltas: + for x, y in zip(first, second): + if abs(x - y) > deltas: + raise ValueError + + +def trysetattr(this, attrname, value, possible): + """A common test pattern: try to set a non-writable attribute + + :: + + class A(object): + def __init__(self): + self._a = 1 + self._b = 2 + def _get_a(self): + return self._a + def _set_a(self, value): + self._a = value + a = property(_get_a, _get_b) + def _get_b(self): + return self._b + b = property(_get_b) + + >>> o = A() + >>> trysetattr(A, "a", 1, possible=True) + >>> trysetattr(A, "b", 1, False) + AssertionError + + """ + if possible == True: + a1 = True + a2 = False + else: + a1 = False + a2 = True + try: + setattr(this, attrname, value) + assert a1 # if the setattr is possible, this should be True + except Exception: + assert a2 + + +class TempFile(object): + """A small wrapper around tempfile.NamedTemporaryFile function + + :: + + f = TempFile(suffix="csv") + f.name + f.delete() # alias to delete=False and close() calls + + + """ + + def __init__(self, suffix="", dir=None): + self.temp = tempfile.NamedTemporaryFile(suffix=suffix, delete=False, dir=dir) + + def delete(self): + try: + self.temp._closer.delete = True + except: # pragma: no cover + self.temp.delete = True + self.temp.close() + + def _get_name(self): + return self.temp.name + + name = property(_get_name) + + def __exit__(self, type, value, traceback): + try: + self.delete() + except AttributeError: # pragma: no cover + pass + finally: + self.delete() + + def __enter__(self): + return self diff --git a/venv/lib/python3.7/site-packages/easydev/logging_tools.py b/venv/lib/python3.7/site-packages/easydev/logging_tools.py new file mode 100644 index 0000000..3bf63ba --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/logging_tools.py @@ -0,0 +1,125 @@ +# -*- python -*- +# +# This file is part of easydev software +# +# Copyright (c) 2012-2014 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# +############################################################################## +# import logging +import colorlog + +__all__ = ["Logging"] + + +colors = { + "DEBUG": "cyan", + "INFO": "green", + "WARNING": "yellow", + "ERROR": "red", + "CRITICAL": "bold_red", +} + + +class Logging(object): + """logging utility. + + :: + + >>> l = Logging("root", "INFO") + >>> l.info("test") + INFO:root:test + >>> l.level = "WARNING" + >>> l.info("test") + + """ + + def __init__(self, name="root", level="WARNING", text_color="blue"): + self._name = name + self.formatter = colorlog.ColoredFormatter( + "%(log_color)s%(levelname)-8s[%(name)s:%(lineno)d]: %(reset)s %({})s%(message)s".format( + text_color + ), + datefmt=None, + reset=True, + log_colors=colors, + secondary_log_colors={}, + style="%", + ) + self._set_name(name) + + logger = colorlog.getLogger(self._name) + handler = colorlog.StreamHandler() + handler.setFormatter(self.formatter) + logger.addHandler(handler) + + def _set_name(self, name): + level = self.level + self._name = name + logger = colorlog.getLogger(self._name) + if level == 0: + self._set_level("WARNING") + else: + self._set_level(level) + + def _get_name(self): + return self._name + + name = property(_get_name, _set_name) + + def _set_level(self, level): + if isinstance(level, bool): + if level is True: + level = "INFO" + if level is False: + level = "ERROR" + if level == 10: + level = "DEBUG" + if level == 20: + level = "INFO" + if level == 30: + level = "WARNING" + if level == 40: + level = "ERROR" + if level == 50: + level = "CRITICAL" + colorlog.getLogger(self.name).setLevel(level) + + def _get_level(self): + level = colorlog.getLogger(self.name).level + if level == 10: + return "DEBUG" + elif level == 20: + return "INFO" + elif level == 30: + return "WARNING" + elif level == 40: + return "ERROR" + elif level == 50: + return "CRITICAL" + else: + return level + + level = property(_get_level, _set_level) + + def debug(self, msg): + colorlog.getLogger(self.name).debug(msg) + + def info(self, msg): + colorlog.getLogger(self.name).info(msg) + + def warning(self, msg): + colorlog.getLogger(self.name).warning(msg) + + def critical(self, msg): + colorlog.getLogger(self.name).critical(msg) + + def error(self, msg): + colorlog.getLogger(self.name).error(msg) diff --git a/venv/lib/python3.7/site-packages/easydev/md5tools.py b/venv/lib/python3.7/site-packages/easydev/md5tools.py new file mode 100644 index 0000000..b259d91 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/md5tools.py @@ -0,0 +1,31 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""md5 utility""" +import hashlib + + +def md5(fname, chunk=65536): + """Return the MD5 checksums of a file + + Takes about 25 seconds on a 8Gb file. + """ + hash_md5 = hashlib.md5() + with open(fname, "rb") as f: + for this in iter(lambda: f.read(chunk), b""): + hash_md5.update(this) + return hash_md5.hexdigest() diff --git a/venv/lib/python3.7/site-packages/easydev/misc.py b/venv/lib/python3.7/site-packages/easydev/misc.py new file mode 100644 index 0000000..9a12919 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/misc.py @@ -0,0 +1,81 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +import os + + +__all__ = ["get_home", "cmd_exists"] + + +def get_home(): + """Return path of the HOME""" + # This function should be robust + # First, let us try with expanduser + try: + homedir = os.path.expanduser("~") + except ImportError: # pragma: no cover + # This may happen. + pass + else: + if os.path.isdir(homedir): + return homedir + # Then, with getenv + for this in ("HOME", "USERPROFILE", "TMP"): # pragma: no cover + # getenv is same as os.environ.get + homedir = os.environ.get(this) + if homedir is not None and os.path.isdir(homedir): + return homedir + + +def cmd_exists(cmd): + """Return true if the command do exists in the environement""" + try: + import subprocess + + # for unix/max only + result = subprocess.call( + "type " + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + if result == 0: + return True + else: + return False + except Exception: # pragma: no cover + # If subprocess is not found, we assume it exists. + # This choice ensure that if it fails, we keep going. + return True + + +def in_ipynb(): + """Checks if we are in an ipython notebook + + :return: True if in an ipython notebook otherwise returns False + + """ + try: # pragma: no cover + cfg = get_ipython().config + if ( + "parent_appname" in cfg["IPKernelApp"].keys() + and cfg["IPKernelApp"]["parent_appname"] == "ipython-notebook" + ): + return True + elif "connection_file" in cfg["IPKernelApp"].keys(): + if "jupyter" in cfg["IPKernelApp"]["connection_file"]: + return True + return False + except NameError: # pragma: no cover + return False diff --git a/venv/lib/python3.7/site-packages/easydev/multicore.py b/venv/lib/python3.7/site-packages/easydev/multicore.py new file mode 100644 index 0000000..dc0e839 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/multicore.py @@ -0,0 +1,150 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +import time +from multiprocessing import cpu_count, Process, Queue, Pool + +__all__ = ["MultiProcessing"] + + +class MultiProcessing(object): + """Class to run jobs in an asynchronous manner. + + You would use this class to run several jobs on a local computer that has + several cpus. + + + :: + + t = MultiProcessing(maxcpu=2) + t.add_job(func, func_args) + t.run() + t.results[0] # contain returned object from the function *func*. + + + .. warning:: the function must be a function, not a method. This is inherent + to multiprocess in the multiprocessing module. + + .. warning:: the order in the results list may not be the same as the + list of jobs. see :meth:`run` for details + + + """ + + def __init__(self, maxcpu=None, verbose=False, progress=True): + """ + + :param maxcpu: default returned by multiprocessing.cpu_count() + :param verbose: print the output of each job. Could be very verbose + so we advice to keep it False. + :param progress: shows the progress + + + """ + if maxcpu == None: + maxcpu = cpu_count() + + self.maxcpu = maxcpu + self.reset() + self.verbose = verbose + self.progress = progress + + def reset(self): + """remove joves and results""" + self.jobs = [] # a list of processes + self.results = Queue() # the results to append + + def add_job(self, func, *args, **kargs): + """add a job in the pool""" + if self.verbose: + print( + "Adding jobs in the queue..", + ) + t = Process(target=func, args=args, kwargs=kargs) + self.jobs.append(t) + + def _cb(self, results): + if self.verbose is True: + print("callback", results) + if self.progress is True: + self.pb.animate(len(self.results) + 1) + self.results.append(results) + + def run(self, delay=0.1, verbose=True): + """Run all the jobs in the Pool until all have finished. + + Jobs that have been added to the job list in :meth:`add_job` + are now processed in this method by using a Pool. Here, we add + all jobs using the apply_async method from multiprocess module. + + In order to ensure that the jobs are run sequentially in the same + order as in :attr:`jobs`, we introduce a delay between 2 calls + to apply_async (see http://docs.python.org/2/library/multiprocessing.html) + + A better way may be t use a Manager but for now, this works. + + """ + from easydev import Progress + + if self.progress is True: + self.pb = Progress(len(self.jobs), 1) + self.pb.animate(0) + + def init_worker(): + import signal + + signal.signal(signal.SIGINT, signal.SIG_IGN) + + self.results = [] + self.pool = Pool(self.maxcpu, init_worker) + + for process in self.jobs: + self.pool.apply_async( + process._target, process._args, process._kwargs, callback=self._cb + ) + + # ensure the results have same order as jobs + # maybe important if you expect the order of the results to + # be the same as inut; otherwise set delay to 0 + time.sleep(delay) + + try: + while True: + time.sleep(1) + # check if all processes are finished. + # if so, finished. + count = len(self.results) + if count == len(self.jobs): + break + + except KeyboardInterrupt: # pragma: no cover + print( + "\nCaught interruption. " + "Terminating the Pool of processes... ", + ) + self.pool.terminate() + self.pool.join() + print("... done") + else: + # Closing properly the pool + self.pool.close() + self.pool.join() + + # Pool cannot be pickled. So, if we want to pickel "MultiProcessing" + # class itself, we must desctroy this instance + del self.pool + + self.finished = True diff --git a/venv/lib/python3.7/site-packages/easydev/options.py b/venv/lib/python3.7/site-packages/easydev/options.py new file mode 100644 index 0000000..251ebf0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/options.py @@ -0,0 +1,55 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +import argparse + + +__all__ = ["SmartFormatter"] + + +class SmartFormatter(argparse.HelpFormatter): + """Formatter to be used with argparse ArgumentParser + + When using the argparse Python module one can design + standalone applications with arguments (e.g; --help, --verbose...) + + One can easily define the help as well. However, The help message + is wrapped by ArgumentParser, removing all formatting in the process. + The reason being that the entire documentation is consistent. + + Sometines, one want to keep the format. This class can be used to + do that. + + Example:: + + import argparse + from easydev import SmartFormatter + class Options(argparse.ArgumentParser): + def __init__(self, prog="sequana"): + usage = "blabla" + description="blabla" + super(Options, self).__init__(usage=usage, prog=prog, + description=description, + formatter_class=SmartFormatter) + + """ + + def _split_lines(self, text, width): + if text.startswith("FORMAT|"): + return text[7:].splitlines() + # this is the RawTextHelpFormatter._split_lines + return argparse.HelpFormatter._split_lines(self, text, width) diff --git a/venv/lib/python3.7/site-packages/easydev/paths.py b/venv/lib/python3.7/site-packages/easydev/paths.py new file mode 100644 index 0000000..8fc758e --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/paths.py @@ -0,0 +1,141 @@ +############################################################################## +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +# $:Id $ +"""Utilities to ease access to share data paths""" +import os +from os.path import join as pj +import pkg_resources + + +__all__ = [ + "get_shared_directory_path", + "get_shared_directories", + "get_share_file", + "gsf", + "get_package_location", +] + + +def get_package_location(package): + """Return physical location of a package""" + try: + info = pkg_resources.get_distribution(package) + location = info.location + except pkg_resources.DistributionNotFound as err: + print("package provided (%s) not installed." % package) + raise + return location + + +def get_shared_directory_path(package): + """Returns the share directory path of an installed package + + + :: + + sharedir = get_shared_directory_path("easydev") + + + """ + location = get_package_location(package) + + # print("install mode ? ") + sharedir = os.path.realpath(pj(location, package, "share")) + if os.path.isdir(sharedir) == True: + # looks like we have found the share directory so it is an install mode + # print ("yes") + return sharedir + else: # pragma: no cover + # print("no. searching for share dir as if in develop mode") + # let us try a couple of directories + # FIXME: do we need the 3 cases ?? + # probably just 2 are required, one for develop and one for install mode + sharedir = os.path.realpath(pj(location, "..", "share")) + if os.path.isdir(sharedir) == True: + return sharedir + sharedir = os.path.realpath(pj(location, "..", "..", "share")) + if os.path.isdir(sharedir) == True: + return sharedir + sharedir = os.path.realpath(pj(location, "..", "..", "..", "share")) + if os.path.isdir(sharedir) == True: + return sharedir + # could not be found, + sharedir = [] + print("could not find any share directory in %s" % package) + + return sharedir + + +def get_shared_directories(package, datadir="data"): + """Returns all directory paths found in the package share/datadir directory + + :param str datadir: scans package/share/ where datadir is "data" by + default. If it does not exists, the list returned is empty. + + .. doctest:: + + >>> from easydev import get_shared_directories + >>> shared_directories = get_shared_directories("easydev", "themes") + >>> len(shared_directories)>=2 + True + + """ + packagedir = get_shared_directory_path(package) + if len(packagedir) == 0: # pragma: no cover + return [] + packagedir = pj(packagedir, datadir) + directories = os.listdir(packagedir) + + # get rid of .svn (for the packages installed with develop) + directories_to_process = [] + for directory in directories: + fullpath = os.path.join(packagedir, directory) + if directory != ".svn" and os.path.isdir(fullpath): + directories_to_process.append(fullpath) + directories_to_process.sort() + return directories_to_process + + +def gsf(package, datadir, filename): + return get_share_file(package, datadir, filename) + + +def get_share_file(package, datadir, filename): + """Creates the full path of a file to be found in the share directory of a package""" + packagedir = get_shared_directory_path(package) + fullpath = os.path.join(packagedir, datadir) + # check that it exists + if os.path.isdir(fullpath) == False: # pragma: no cover + raise ValueError( + "The directory %s in package %s does not seem to exist" + % (packagedir, fullpath) + ) + filename_path = os.path.join(fullpath, filename) + if os.path.isfile(filename_path) == False: + correct_files = [x for x in os.listdir(fullpath) if os.path.isfile(x)] + msg = "The file %s does not exists. Correct filenames found in %s/%s are:\n" % ( + filename_path, + package, + datadir, + ) + for f in correct_files: # pragma: no cover + msg += "%s\n" % f + + raise ValueError(msg) + return filename_path diff --git a/venv/lib/python3.7/site-packages/easydev/platform.py b/venv/lib/python3.7/site-packages/easydev/platform.py new file mode 100644 index 0000000..d759088 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/platform.py @@ -0,0 +1,80 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +from __future__ import absolute_import # avoids conflict with standard module +import os +import sys + +__all__ = ["get_platform"] + + +def get_platform(): # pragma: no cover + """Identify the platform (Linux/windows/Mac) + + The folloing modules/functions can be used to identify the platform: + platform, sys.platform, os.name, os.environ. We use platform and return + the content of platform.system. If it does not work, sys.platform is used + and sys.platform output interpreted: linux, java, win and darwin are + searched for and returned aas Linux, Java, Windows, Darwin to be consistent + with the output of platform.syste. If those strings are not found, + just return the output of sys.platform. + + :return: 'Linux' or 'Windows' or 'Darwin', 'Java' if platform + can be determined otherwise, the content of sys.platform() + + """ + print("//easydev.get_platform() Will be deprecated in future version of easydev") + try: + platform = plf.system() + return platform + except: + # platform is not available under all systems (e.g., WLST tool + # see http://stackoverflow.com/questions/1854/python-what-os-am-i-running-on + # so, let us try sys.platform + platform = sys.platform + if platform.startswith("linux"): + platform = "Linux" + elif platform.startswith("java"): + platform = "Java" + elif platform.startswith("win"): + platform = "Windows" + elif platform.startswith("darwin"): + platform = "Darwin" + else: + print("platform not parsed. Return raw value of sys.platform.") + return platform + + +def is_windows(): + if get_platform() == "Windows": + return True + else: + return False + + +def is_linux(): + if get_platform() == "Linux": + return True + else: + return False + + +def is_mac(): + if get_platform() == "Mac": + return True + else: + return False diff --git a/venv/lib/python3.7/site-packages/easydev/profiler.py b/venv/lib/python3.7/site-packages/easydev/profiler.py new file mode 100644 index 0000000..de6e079 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/profiler.py @@ -0,0 +1,76 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +""" + +Usage:: + + from easydev import do_profile + @do_profile() + def test(): + x = 1 + x *= x + return x + +# source: https://zapier.com/engineering/profiling-python-boss/ + + +Requires line_profiler to be installed. line_profiler has C code and we wish +easydev to be as simple as possible. So, we do not want compiled code dependencies. +Consequently, we added line_profiler in the extra_requires instead of requires +in the setup.py One must install line_profiler itself. +""" + +__all__ = ["do_profile"] + +try: + from line_profiler import LineProfiler + + def do_profile(follow=[]): + def inner(func): + def profiled_func(*args, **kwargs): + try: + profiler = LineProfiler() + profiler.add_function(func) + for f in follow: + profiler.add_function(f) + profiler.enable_by_count() + return func(*args, **kwargs) + finally: + profiler.print_stats() + + return profiled_func + + return inner + + +except ImportError: # pragma: no cover + + def do_profile(follow=[]): + "Helpful if you accidentally leave in production!" + print( + "easydev warning:: line_profiler does not seem to be installed. " + + "Type 'pip install line_profiler'" + ) + + def inner(func): + def nothing(*args, **kwargs): + return func(*args, **kwargs) + + return nothing + + return inner diff --git a/venv/lib/python3.7/site-packages/easydev/progressbar.py b/venv/lib/python3.7/site-packages/easydev/progressbar.py new file mode 100644 index 0000000..ea973ed --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/progressbar.py @@ -0,0 +1,217 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""A progress bar copied and adapted from pyMC code (dec 2014)""" +from __future__ import print_function + +import sys +import time +import uuid + + +try: + from IPython.core.display import HTML, Javascript, display +except ImportError: # pragma: no cover + pass + + +__all__ = ["progress_bar", "TextProgressBar", "Progress"] + + +class ProgressBar(object): + def __init__(self, iterations, interval=None): + self.iterations = iterations + # if no interval provided, set it to 1% + if interval is None: + if iterations <= 100: + interval = 1 # everything % of the data + else: + interval = int(iterations / 100) + self.interval = interval + self.start = time.time() + self.last = 0 + + def _percentage(self, i): + if self.iterations != 0: + return 100 * i / float(self.iterations) + else: # pragma: no cover + # could be 100 ? + return 100 + + def _get_elapsed(self): + return time.time() - self.start + + elapsed = property(_get_elapsed) + + +class TextProgressBar(ProgressBar): + """Use :class:`Progress`""" + + def __init__(self, iterations, printer, width=40, interval=None): + self.fill_char = "-" + self.width = width + self.printer = printer + ProgressBar.__init__(self, iterations, interval=interval) + + def animate(self, i, dummy=None): + # dummy=None is for back-compatibility + if dummy is not None: # pragma: no cover + print( + "second argument in easydev.progress_bar.animate is deprecated. Update your code" + ) + # +1 if i starts at 0 and finishes at N-1 + if divmod(i, self.interval)[1] != 0 and i != self.iterations: + pass + else: + self.printer(self.progbar(i)) + + def progbar(self, i): + # +1 if i starts at 0 and finishes at N-1 + bar = self.bar(self._percentage(i)) + return "[%s] %i of %i complete in %.1f sec" % ( + bar, + (i), + self.iterations, + round(self.elapsed, 1), + ) + + def bar(self, percent): + all_full = self.width - 2 + num_hashes = int(percent / 100 * all_full) + + bar = self.fill_char * num_hashes + " " * (all_full - num_hashes) + + info = "%d%%" % percent + loc = (len(bar) - len(info)) // 2 + return replace_at(bar, info, loc, loc + len(info)) + + +def replace_at(str, new, start, stop): + return str[:start] + new + str[stop:] + + +def consoleprint(s): + if sys.platform.lower().startswith("win"): + print(s, "\r", end="") + else: + print("\r", s, end="") + sys.stdout.flush() + + +def ipythonprint(s): # pragma no cover + print("\r", s, end="") + sys.stdout.flush() + + +class IPythonNotebookPB(ProgressBar): # pragma: no cover + """Use :class:`Progress`""" + + def __init__(self, iterations, interval=None): + self.divid = str(uuid.uuid4()) + self.sec_id = str(uuid.uuid4()) + + pb = HTML( + """ +

+
 
+
+
+ Google Analytics to collect statistics. You can disable it by blocking + the JavaScript coming from www.google-analytics.com. + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/google_head.html b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/google_head.html new file mode 100644 index 0000000..2f9dca9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/google_head.html @@ -0,0 +1,8 @@ + + + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/index.html b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/index.html new file mode 100644 index 0000000..7f17baa --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/index.html @@ -0,0 +1,7 @@ +{% extends "layout.html" %} +{% block body %} + + + +{% endblock %} + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/indexsidebar.html b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/indexsidebar.html new file mode 100644 index 0000000..753acb5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/indexsidebar.html @@ -0,0 +1,13 @@ +{% extends "!indexsidebar.html" %} + + +

Author: Thomas Cokelaer

+

Download

+

Current version: {{ version }}

+

Get Spectrum Pypi coming soon

+ + +

Questions? Suggestions?

+cno-contact + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/layout.html b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/layout.html new file mode 100644 index 0000000..3a86826 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/layout.html @@ -0,0 +1,153 @@ +{% extends "agogo/layout.html" %} + + + +{% block header %} +
+
+ {%- if logo %} +

{{ shorttitle|e }}

+ +

+ {%- endif %} + + {%- block headertitle %} +

CellNOpt homepage|{{ docstitle|e }} +

+
+ {%- for rellink in rellinks|reverse %} + {{ rellink[3] }} + {%- if not loop.last %}{{ reldelim2 }}{% endif %} + {%- endfor %} +
+ {%- endblock %} +
+
+{% endblock %} + + + + + +{% block rootrellink %} + {# Top of the main page #} +
  • Return to Thomas Cokelaer Front page
  • +
  • {{project.split('.')[0]|title}} Documentation »
  • +{% endblock %} + + +{% block extrahead %} +{% include 'google_head.html' %} + + + +{% endblock %} + +{% block footer %} + +{% endblock %} + +{% block content %} +
    +
    +
    + + + {%- block document %} + {{ super() }} + {%- endblock %} +
    + +
    +
    +
    +{% endblock %} + + + +{# KEEP THIS as an example + + {% block relbar1 %} +
    +
    + {{ super() }} + {% endblock %} +#} + +{# put the sidebar before the body #} +{% block sidebar1 %}{{ sidebar() }}{% endblock %} +{% block sidebar2 %}{% endblock %} diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgfooter.png b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgfooter.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce5bdd902943fdf8b0c0ca6a545297e1e2cc665 GIT binary patch literal 434 zcmV;j0ZsmiP)Px#24YJ`L;%wO*8tD73qoQ5000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXD> z2Q(2CT#42I000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003ENklR?sq9~H`=l5UI-{JW_f9!)=Hwush3JC}Y z1gFM&r>$lJNPt^*1k!w;l|obx>lr$2IOaI$n=(gBBaj^I0=y%@K5N&GIU&-%OE_~V zX=m=_j7d`hvubQRuF+xT63vIfWnC3%kKN*T3l7ob3nEC2R->wU1Y)4)(7_t^thiqb zj$CO7xBn9gg`*!MY$}SI|_*)!a*&V0w7h>cUb&$Grh37iJ=C%Yn c>}w1E0Z4f>1OEiDlmGw#07*qoM6N<$g4BwtIsgCw literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgtop.png b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/bgtop.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d4709bac8f79943a817195c086461c8c4d5419 GIT binary patch literal 430 zcmV;f0a5;mP)Px#24YJ`L;zI)R{&FzA;Z4_000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXD> z2Q3AZhV-)l000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003ANklMo8vqN`cM=KwSQV|n zk}naE+VzlN;kK@Ej${PSkI$-R6-Yfp`zA;^O$`)7`gRi{-0i?owGIbX{p>Nc##93U z;sA|ayOYkG%F9M0iEMUM*s3NDYSS=KN2ht8Rv|7nv77i{NTO47R)}V_+2H~mL-nTR z_8j}*%6Qm8?#7NU2kM$#gcP&kO?iw|n}ynz+r-~FA9nKcZnfixWvZ&d28Cc_6&_Pe zMpbjI>9r+<=}NIDz4mCd3U++H?rrHcYxH&eeB|)>mnv*N#44ILM2zL6yU!VVWSrgp Y0Yu&#qm)=by8r+H07*qoM6N<$f@HC)j{pDw literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/software.css_t b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/software.css_t new file mode 100644 index 0000000..3ce2e33 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/software.css_t @@ -0,0 +1,835 @@ +/* + * software.css_t + * ~~~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* ---------------------------------------------*/ +* { + margin: 0px; + padding: 0px; +} + +html, body{ +height:100%; +margin:0px; +padding:0px; +min-height:100% +} + +/* ---------------------------------------------*/ +body { + font-family: "Verdana", Arial, sans-serif; + line-height: 1.4em; + color: black; + background-color: #eeeeec; + height:auto; +} + + +/* ---------------------------------------------*/ +/* Page layout */ + + +div.header, div.content, div.footer { + width: 70em; + width: 90%; + margin-left: auto; + margin-right: auto; +} + +div.header-wrapper { + background: url(bgtop.png) top left repeat-x; + border-bottom: 4px solid #2e3436; +} + + +/* ---------------------------------------------*/ +/* Default body styles */ +a { + color: #ce5c00; +} + +div.bodywrapper a, div.footer a { + text-decoration: underline; +} + +.clearer { + clear: both; +} + +.left { + float: left; +} + +.right { + float: right; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +h1, h2, h3, h4 { + font-family: "Georgia", "Times New Roman", serif; + font-weight: normal; + color: #3465a4; + margin-bottom: .2em; + line-height: 1.1em; +} + +h1 { + color: #204a87; +} + + + +div.content h1 { + border-bottom: 2px solid #3465A4; + margin-top: 0.3em; + padding-bottom: .5em; +} + +h2 { + color: #204a87; + margin-top: 0.3em; + padding-bottom: .3em; + border-bottom: 1px solid #3465A4; + width:95% +} + + +/* ---------------------------------------------*/ +/* Set the color and style of the headerlink*/ +a.headerlink { + visibility: hidden; + color: #dddddd; + padding-left: .3em; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + + +/* ---------------------------------------------*/ +/* !! changing width affects all img.class */ +img { + border: 0; + width:auto; +} + + +/* ---------------------------------------------*/ +/* general shape of todo/seealso/warning/note boxes*/ +div.admonition { + font-size: 0.9em; + margin-top: 10px; + margin-bottom: 10px; + margin-left:10%; + padding: 00px 00px 5px 00px; + border-left: 0.2em solid black; + border: 2px solid #86989B; + background-color: #f7f7f7; + width:80%; + font-size: 0.8em; + line-height:1em; +} +div.admonition p.last{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; +} + + +/* and titles*/ +div.admonition p.admonition-title { + color: white; + border-bottom: 4px solid #86989B; + background-color: #AFC1C4; + margin-left: 00px; /* the title within the box is sticked to the borders' box*/ + margin-right: 00px; + padding-left: 10px; /*for the text*/ + padding-bottom: 0.2em; + padding-top: 0.2em; + min-width: 120px; +} + +/* the warning box has its own class names */ +div.warning p.admonition-title{ + background-repeat: no-repeat; + /*margin-right:10px; + padding-left:5px; + padding-top:5px; + min-width:120px;*/ + font-weight: bold; + /*width:100%; + background-color: #AFC1C4;*/ + background-color: #CF0000; + border-bottom: 4px solid #940000; +} + + +div.admonition pre, div.warning pre { + margin: 0.0em 0.5em 0.0em 0.5em; +} + +div.admonition ul, div.admonition ol, +div.warning ul, div.warning ol { + margin: 0.1em 0.5em 0.5em 1em; + padding: 0; +} + +/* TODO box ---------------------------------------- */ +div.admonition-todo { +/*border-top: 2px solid red; +border-bottom: 2px solid red; +border-left: 2px solid red; +border-right: 2px solid red;*/ +background-color: #ff6347 +} + +div.admonition-todo p.last{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; +} +div.admonition-todo p.first{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; + background-color: #CF0000; +} + +/* ---------------------------------------------*/ +dt:target, .highlighted { + background-color: #fbe54e; +} + +/* ---------------------------------------------*/ +/* Header */ + +div.header { + padding-top: 10px; + padding-bottom: 10px; +} + +div.header h1 { + font-family: "Georgia", "Times New Roman", serif; + font-weight: normal; + font-size: 180%; + letter-spacing: .08em; +} + +div.header h1 a { + color: white; +} + +div.header div.rel { + margin-top: -1em; + float:right; +} + +div.header div.rel a { + color: #fcaf3e; + letter-spacing: .1em; + text-transform: uppercase; +} + +/* ---------------------------------------------*/ +p.logo { + float: right; +} + +/* ---------------------------------------------*/ +img.logo { + border: 0; +} + + +/* ---------------------------------------------*/ +/* Content */ +div.content-wrapper { + background-color: white; + padding-top: 20px; + padding-bottom: 20px; + height:90%; + /*position:absolute;*/ +} + +div.document { + width: 75%; + float: left; + overflow-x:auto; +} + +div.body { + padding-right: 2em; + text-align: justify; +} + + + +div.document ul { + margin-left: 1.5em; + margin-right: 1.5em; + margin-bottom: .0em; + list-style-type: square; +} + +div.document dd { + margin-left: 1.2em; + margin-top: .4em; + margin-bottom: 1em; +} + +div.document .section { + margin-top: 1.7em; +} +div.document .section:first-child { + margin-top: 0px; +} + +div.document div.highlight { + padding: 6px; + background-color: #eeeeec; + line-height:1em; + width:90%; + margin-left:0%; +} + +div.highlight-html, div.highlight-css{ + table-layout:auto; + overflow-x:hidden; + background-color: #eeeeec; + border-radius:18px 18px 18px 18px; + border: 2px solid #dddddd; + margin-left:5%; + margin-right:5%; + padding-left:10px; + margin-top:5px; +} +div.highlight-python, div.highlight-rest{ + table-layout:auto; + overflow-x:hidden; + background-color: #eeeeec; + border-radius:18px 18px 18px 18px; + border: 2px solid #dddddd; + margin-left:5%; + margin-right:5%; + padding-left:10px; + margin-top:5px; + line-height:1em; +} + + +div.document h2 { + margin-top: .7em; +} + +div.document p { + margin-bottom: .5em; +} + +div.document li.toctree-l1 { + margin-bottom: .1em; +} + +div.document .descname { + font-weight: bold; +} + +div.document .docutils.literal { + background-color: #eeeeec; + padding: 1px; +} + +div.document .docutils.xref.literal { + background-color: transparent; + padding: 0px; +} + +div.document blockquote { + margin: 1em; +} + +div.document ol { + margin: 1.5em; +} + + +/* ---------------------------------------------*/ +/* Sidebar */ + +div.sidebar { + height:85%; + width: 22%; + font-size: .9em; + position:fixed; + margin-left:70%; + margin-right:8%; + top:54px; /*size of the top bgk image + 4px for the bar*/ + border-radius:16px 16px 16px 16px; + margin-bottom:48px; + /*max-height:400px;*/ + overflow:auto; +} + +div.sidebar a, div.header a { + text-decoration: none; +} + +div.sidebar a:hover, div.header a:hover { + text-decoration: underline; +} + +div.sidebar h3 { + color: #2e3436; + text-transform: uppercase; + font-size: 130%; + letter-spacing: .1em; +} + +div.sidebar ul.current { + list-style-type: none; + height:150px; + overflow:auto; +} + +div.sidebar ul { + list-style-type: none; +} + +div.sidebar li.toctree-l1 a { + display: block; + padding: 1px; + border: 1px solid #dddddd; + background-color: #eeeeec; + margin-bottom: .4em; + padding-left: 3px; + color: #2e3436; +} + +div.sidebar li.toctree-l2 a { + background-color: transparent; + border: none; + margin-left: 1em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l3 a { + background-color: transparent; + border: none; + margin-left: 2em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l2:last-child a { + border-bottom: none; +} + +div.sidebar li.toctree-l1.current a { + border-right: 5px solid #fcaf3e; +} + +div.sidebar li.toctree-l1.current li.toctree-l2 a { + border-right: none; +} + + +/* ---------------------------------------------*/ +/* Footer */ + +div.footer-wrapper { + background: url(bgfooter.png) top left repeat-x; + border-top: 2px solid #babdb6; + border-right: 2px solid #babdb6; + width:70%; /* with respect to the entire window*/ + font-size:0.7em; + height:50px; + /*position:fixed;*/ + bottom:0px; +/* + margin-bottom:0px; + padding-bottom:0px;*/ + overflow: auto; + line-height:1.2em; +} + +div.footer, div.footer a { + color: #888a85; +} + +div.footer .right { + text-align: left; + width:100%; /*copyright, and analytics div in the footer-wrapper*/ + font-size:0.8em; +} + +div.footer .left { /*source/index/next div*/ + text-transform: uppercase; + width: 18%; + font-size:0.8em; +} + + +/* Styles copied from basic theme */ + + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 1px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + + +/* -- viewcode extension ---------------------------------------------------- */ + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family:: "Verdana", Arial, sans-serif; +} + +div.viewcode-block:target { + margin: -1px -3px; + padding: 0 3px; + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + + + +div.legend { +background-color:#11557C; +/*font-weight:bold;*/ +font-size:.8em; +width:80%; +} + + +/*box around the parameters created wihh :param x: */ +table.docutils{ +margin:2px; +border-left: 1px solid gray; +border-right: 1px solid gray; +border-top: 1px solid gray; +border-bottom: 1px solid gray; +min-width:30%; +max-width:90%; +} + +table.citation{ + border: 0; + margin: 2px; +} +table.citation td.label{ + width:20%; + color:red; +} +table.citation tr{ + border: 1px solid; +} + +/* when using + * ====== + * ====== + * data + * ====== + *the first row is colored in blue + * */ +th.head { +background-color:#E3EFF1 +} + + + + + + +p.rubric { +color:blue; +} + +th.field-name { +color:blue; +min-width:25%; +background-color:#eeeeee; +} + +/* surround the classes, functions and exceptions with boxes*/ +dl.class, dl.function, dl.exception{ + margin-top:10px; + border-top: 2px solid #888; + border-bottom: 2px solid #888; + border-left: 2px solid #888; + border-right: 2px solid #888; +} + + +dl.method, dl.attribute { + border-top: 1px solid #aaa; +} + +img.inheritance { + border: 1px solid blue; + max-width:90%; + align:center; +} + + + + + + + + + +table.footnote td, table.footnote th { + border: none; +} + + +table indextable{ + border-collapse: collapse; + margin: 0 -0.5em 0 -0.5em; + table-layout:auto; + width:100%; + overflow:hidden; + word-wrap:break-word; + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ + + } + + + +.first { + margin-top: 0 !important; +} + +/* FIGURE and IMAGE related*/ + + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + clear: both; + text-align: center; +} + +.align-right { + text-align: right; +} + + +/*all figure are centered with a border and max width*/ +div.figure { +border-top: 2px solid #888; +border-left: 2px solid #888; +border-bottom: 2px solid #888; +border-right: 2px solid #888; +max-width:70%; +margin-left:15px; +margin-right:15px; +margin-top:5px; +margin-bottom:5px; +text-align:center; +background-color:#fff; +padding:1%; +display:block; +margin-right:auto; +margin-left:auto; +} + +div.topic { +border: 1px solid #CCCCCC; +margin: 10px 0; +padding: 7px 7px 7px 7px; +border-radius:16px 16px 16px 16px; + +} +div.topic#figure{ +clear:both; +display:block; +margin-right:auto; +margin-left:auto; +} + +div.topic img{ +clear:both; +display:block; +margin-right:5px; +margin-left:5px; +border: 1px solid #888; +} + + +div.figure p.caption { +clear:both; +background-color:#11557; +font-size:.8em; +font-weight:bold; +width:80%; +margin-left:10%; +margin-right:10%; +text-align:justify; +line-height:1.2em; +} + +div.figure img { + width:100%; +} + + + + +/* This is for the linenos option of literalinclude directive */ +div.linenodiv{ +line-height:1em; +} + +/* other fields of interests for literalinclude are td.linenos, td.linenos pre*/ + +table.highlighttable { +table-layout:auto; +width:90%; +} + +table.highlighttable td { + padding: 0px; +} + + +div.leftside { + width: 45%; + padding: 0px 3px 0px 0px; + float: left; +} + +div.rightside{ + width:45%; + margin-left: 0%; + padding: 0px 3px 0px 0px; + float: right; +} + + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/warning.jpg b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/static/warning.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83aba0bf97c5bec299b1b45956ea05ceefa00c49 GIT binary patch literal 897 zcmex=27@1hvnSqi90t`%y z%uLKIT+C1vj7-c7EP||TLW+iti4!*p8wCax7BwzBcu`a}=^;>u1S1&04P#(nWny7w z1InliGB7f;FfucEq&3 z-c^NXew=r_GQVNXx-{}W(mOZr;qIUd+dN(^pD6m?Va@xLZ8PJ{ z4$AUBe(3w=o!GlumX{|aUcOQ7YMQf?Ggr6ZaMN)$!$n0FQG0J1cKZbIuh(EdF#o{9 zIVHDCqqqFBX=RI2QaN7m`kPuq;YIOn7AH?WW>n2PxcKp1#al)7dE)na+oy)Tn{0I= zzKB&$wb$YH`O-gYd{d=PDm8g+Jn--spMPq6;p~O0y}obMDY9x>wOqNSNWymS*0bwu zcU(UBd%yhFTKiS!4|N~+-d1zWTXVvk4<{#nmH*UIczNyoybCYmCLZHC7g1xyueI9L zylR2_#^8bji=XD5U=eUo_@r<__UHoNMD6ogy{Zc>pPo5>r+W9xqepkn_%zGqr>|?S zkyB-S4FB3H&p=7l9p%bRUHz(8WG5bazAJ2{+4M3!1+L>QtF=oKBeQ;OxwZDfywcEz zaiXp-SPf@q-8^@6Nm9gT6`u4%YsD^aYH4#SvJ#X0yy$mKZ&h_~knJJ6+b_!8%leqt$lk&eaZc6UR SSD(~BS@r7O$;UVSzX<>jV^k&p literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/cno/theme.conf b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/theme.conf new file mode 100644 index 0000000..9ea3b47 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/cno/theme.conf @@ -0,0 +1,22 @@ +[theme] +inherit = agogo +stylesheet = software.css +pygments_style = tango + +[options] +bodyfont = "Verdana", Arial, sans-serif +headerfont = "Georgia", "Times New Roman", serif +pagewidth = 70em +documentwidth = 50em +sidebarwidth = 20em +bgcolor = #eeeeec +headerbg = url(bgtop.png) top left repeat-x +footerbg = url(bgfooter.png) top left repeat-x +linkcolor = #ce5c00 +headercolor1 = #204a87 +headercolor2 = #3465a4 +headerlinkcolor = #fcaf3e +textalign = justify + + +homepage = 'user argument' diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_footer.html b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_footer.html new file mode 100644 index 0000000..6a830b2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_footer.html @@ -0,0 +1,12 @@ +This page uses + Google Analytics to collect statistics. You can disable it by blocking + the JavaScript coming from www.google-analytics.com. + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_head.html b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_head.html new file mode 100644 index 0000000..6963d5d --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/google_head.html @@ -0,0 +1,11 @@ + + + + + + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/index.html b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/index.html new file mode 100644 index 0000000..7f17baa --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/index.html @@ -0,0 +1,7 @@ +{% extends "layout.html" %} +{% block body %} + + + +{% endblock %} + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/indexsidebar.html b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/indexsidebar.html new file mode 100644 index 0000000..753acb5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/indexsidebar.html @@ -0,0 +1,13 @@ +{% extends "!indexsidebar.html" %} + + +

    Author: Thomas Cokelaer

    +

    Download

    +

    Current version: {{ version }}

    +

    Get Spectrum Pypi coming soon

    + + +

    Questions? Suggestions?

    +cno-contact + + diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/layout.html b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/layout.html new file mode 100644 index 0000000..c10b5a1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/layout.html @@ -0,0 +1,134 @@ +{% extends "agogo/layout.html" %} + + + +{% block header %} +
    +
    + {%- if logo %} +

    {{ shorttitle|e }}

    + +

    + {%- endif %} + + {%- block headertitle %} +

    {{ docstitle|e }} +

    +
    + {%- for rellink in rellinks|reverse %} + {{ rellink[3] }} + {%- if not loop.last %}{{ reldelim2 }}{% endif %} + {%- endfor %} +
    + {%- endblock %} +
    +
    +{% endblock %} + + + + + +{% block rootrellink %} + {# Top of the main page #} +
  • Return to Thomas Cokelaer Front page
  • +
  • {{project.split('.')[0]|title}} Documentation »
  • +{% endblock %} + + +{% block extrahead %} +{% include 'google_head.html' %} +{% endblock %} + + +{% block footer %} + +{% endblock %} + + +{% block content %} +
    +
    +
    + + {%- block document %} + {{ super() }} + {%- endblock %} +
    + +
    +
    +
    +{% endblock %} + + + +{# KEEP THIS as an example + + {% block relbar1 %} +
    +
    + {{ super() }} + {% endblock %} +#} + +{# put the sidebar before the body #} +{% block sidebar1 %}{{ sidebar() }}{% endblock %} +{% block sidebar2 %}{% endblock %} diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgfooter.png b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgfooter.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce5bdd902943fdf8b0c0ca6a545297e1e2cc665 GIT binary patch literal 434 zcmV;j0ZsmiP)Px#24YJ`L;%wO*8tD73qoQ5000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXD> z2Q(2CT#42I000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003ENklR?sq9~H`=l5UI-{JW_f9!)=Hwush3JC}Y z1gFM&r>$lJNPt^*1k!w;l|obx>lr$2IOaI$n=(gBBaj^I0=y%@K5N&GIU&-%OE_~V zX=m=_j7d`hvubQRuF+xT63vIfWnC3%kKN*T3l7ob3nEC2R->wU1Y)4)(7_t^thiqb zj$CO7xBn9gg`*!MY$}SI|_*)!a*&V0w7h>cUb&$Grh37iJ=C%Yn c>}w1E0Z4f>1OEiDlmGw#07*qoM6N<$g4BwtIsgCw literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgtop.png b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/bgtop.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d4709bac8f79943a817195c086461c8c4d5419 GIT binary patch literal 430 zcmV;f0a5;mP)Px#24YJ`L;zI)R{&FzA;Z4_000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXD> z2Q3AZhV-)l000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003ANklMo8vqN`cM=KwSQV|n zk}naE+VzlN;kK@Ej${PSkI$-R6-Yfp`zA;^O$`)7`gRi{-0i?owGIbX{p>Nc##93U z;sA|ayOYkG%F9M0iEMUM*s3NDYSS=KN2ht8Rv|7nv77i{NTO47R)}V_+2H~mL-nTR z_8j}*%6Qm8?#7NU2kM$#gcP&kO?iw|n}ynz+r-~FA9nKcZnfixWvZ&d28Cc_6&_Pe zMpbjI>9r+<=}NIDz4mCd3U++H?rrHcYxH&eeB|)>mnv*N#44ILM2zL6yU!VVWSrgp Y0Yu&#qm)=by8r+H07*qoM6N<$f@HC)j{pDw literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/software.css_t b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/software.css_t new file mode 100644 index 0000000..ab6b7fa --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/software.css_t @@ -0,0 +1,822 @@ +/* + * software.css_t + * ~~~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* ---------------------------------------------*/ +* { + margin: 0px; + padding: 0px; +} + +html, body{ +height:100%; +margin:0px; +padding:0px; +min-height:100% +} + +/* ---------------------------------------------*/ +body { + font-family: "Verdana", Arial, sans-serif; + line-height: 1.4em; + color: black; + background-color: #FFFFFF; +/* height:auto;*/ +position:relative; +} + + +/* ---------------------------------------------*/ +/* Page layout */ + + +div.header, div.content, div.footer { + width: 70em; + width: 90%; + margin-left: auto; + margin-right: auto; +} + +div.header-wrapper { + background: url(bgtop.png) top left repeat-x; + border-bottom: 4px solid #2e3436; +} + + +/* ---------------------------------------------*/ +/* Default body styles */ +a { + color: #ce5c00; +} + +div.bodywrapper a, div.footer a { + text-decoration: underline; +} + +.clearer { + clear: both; +} + +.left { + float: left; +} + +.right { + float: right; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +h1, h2, h3, h4 { + font-family: "Georgia", "Times New Roman", serif; + font-weight: normal; + color: #3465a4; + margin-bottom: .2em; + line-height: 1.1em; +} + +h1 { + color: #204a87; +} + + + +div.content h1 { + border-bottom: 2px solid #3465A4; + margin-top: 0.3em; + padding-bottom: .5em; +} + +h2 { + color: #204a87; + margin-top: 0.3em; + padding-bottom: .3em; + border-bottom: 1px solid #3465A4; + width:95% +} + + +/* ---------------------------------------------*/ +/* Set the color and style of the headerlink*/ +a.headerlink { + visibility: hidden; + color: #dddddd; + padding-left: .3em; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + + +/* ---------------------------------------------*/ +/* !! changing width affects all img.class */ +img { + border: 0; + width:auto; +} + + +/* ---------------------------------------------*/ +/* general shape of todo/seealso/warning/note boxes*/ +div.admonition { + font-size: 0.9em; + margin-top: 10px; + margin-bottom: 10px; + margin-left:10%; + padding: 00px 00px 5px 00px; + border-left: 0.2em solid black; + border: 2px solid #86989B; + background-color: #f7f7f7; + width:80%; + font-size: 0.8em; + line-height:1em; +} +div.admonition p.last{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; +} + + +/* and titles*/ +div.admonition p.admonition-title { + color: white; + border-bottom: 4px solid #86989B; + background-color: #AFC1C4; + margin-left: 00px; /* the title within the box is sticked to the borders' box*/ + margin-right: 00px; + padding-left: 10px; /*for the text*/ + padding-bottom: 0.2em; + padding-top: 0.2em; + min-width: 120px; +} + +/* the warning box has its own class names */ +div.warning p.admonition-title{ + background-repeat: no-repeat; + /*margin-right:10px; + padding-left:5px; + padding-top:5px; + min-width:120px;*/ + font-weight: bold; + /*width:100%; + background-color: #AFC1C4;*/ + background-color: #CF0000; + border-bottom: 4px solid #940000; +} + + +div.admonition pre, div.warning pre { + margin: 0.0em 0.5em 0.0em 0.5em; +} + +div.admonition ul, div.admonition ol, +div.warning ul, div.warning ol { + margin: 0.1em 0.5em 0.5em 1em; + padding: 0; +} + +/* TODO box ---------------------------------------- */ +div.admonition-todo { +/*border-top: 2px solid red; +border-bottom: 2px solid red; +border-left: 2px solid red; +border-right: 2px solid red;*/ +background-color: #ff6347 +} + +div.admonition-todo p.last{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; +} +div.admonition-todo p.first{ + padding-left: 10px; /*for the text*/ + padding-right: 10px; /*for the text*/ + line-height:0.9em; + background-color: #CF0000; +} + +/* ---------------------------------------------*/ +dt:target, .highlighted { + background-color: #fbe54e; +} + +/* ---------------------------------------------*/ +/* Header */ + +div.header { + padding-top: 0px; + padding-bottom: 0px; + margin-bottom:10px; + margin-top:0px; +} + +div.header h1 { + font-family: "Georgia", "Times New Roman", serif; + font-weight: normal; + font-size: 180%; + letter-spacing: .08em; + width:80%; +} + +div.header h1 a { + color: white; +} + +div.header div.rel { + margin-top: -1em; + float:right; +} + +div.header div.rel a { + color: #fcaf3e; + letter-spacing: .1em; + text-transform: uppercase; +} + +/* ---------------------------------------------*/ +p.logo { + float: right; +} + +/* ---------------------------------------------*/ +img.logo { + border: 0; +} + + +/* ---------------------------------------------*/ +/* Content */ +div.content-wrapper { + background-color: white; + padding-top: 20px; + padding-bottom: 6em; /* place for the header*/ +} + +div.document { + width: 75%; + float: left; + overflow-x:auto; +} + +div.body { + padding-right: 2em; + text-align: justify; +} + + + +div.document ul { + margin-left: 1.5em; + margin-right: 1.5em; + margin-bottom: .0em; + list-style-type: square; +} + +div.document dd { + margin-left: 1.2em; + margin-top: .4em; + margin-bottom: 1em; +} + +div.document .section { + margin-top: 1.7em; +} +div.document .section:first-child { + margin-top: 0px; +} + +div.document div.highlight { + padding: 6px; + background-color: #eeeeec; + line-height:1em; + width:90%; + margin-left:0%; +} + +div.highlight-html, div.highlight-css { + table-layout:auto; + overflow-x:hidden; + background-color: #eeeeec; + border-radius:18px 18px 18px 18px; + border: 2px solid #dddddd; + margin-left:5%; + margin-right:5%; + padding-left:10px; + margin-top:5px; +} +div.highlight-python, div.highlight-rest{ + table-layout:auto; + overflow-x:hidden; + background-color: #eeeeec; + border-radius:18px 18px 18px 18px; + border: 2px solid #dddddd; + margin-left:5%; + margin-right:5%; + padding-left:10px; + margin-top:5px; + line-height:1em; +} + + +div.document h2 { + margin-top: .7em; +} + +div.document p { + margin-bottom: .5em; +} + +div.document li.toctree-l1 { + margin-bottom: .1em; +} + +div.document .descname { + font-weight: bold; +} + +div.document .docutils.literal { + background-color: #eeeeec; + padding: 1px; +} + +div.document .docutils.xref.literal { + background-color: transparent; + padding: 0px; +} + +div.document blockquote { + margin: 1.5em; + font-style: italic; + +} + +div.document ol { + margin: 1.5em; +} + + +/* ---------------------------------------------*/ +/* Sidebar */ + +div.sidebar { + height:80%; + width: 22%; + font-size: .9em; + position:fixed; + margin-left:70%; + margin-right:8%; + top:7em; /* em is more robust than pixels..*/ + border-radius:16px 16px 16px 16px; + margin-bottom:48px; + /*max-height:400px;*/ + overflow:auto; +} + +div.sidebar a, div.header a { + text-decoration: none; +} + +div.sidebar a:hover, div.header a:hover { + text-decoration: underline; +} + +div.sidebar h3 { + color: #2e3436; + text-transform: uppercase; + font-size: 130%; + letter-spacing: .1em; +} + +div.sidebar ul.current { + list-style-type: none; + height:150px; + overflow:auto; +} + +div.sidebar ul { + list-style-type: none; +} + +div.sidebar li.toctree-l1 a { + display: block; + padding: 1px; + border: 1px solid #dddddd; + background-color: #eeeeec; + margin-bottom: .4em; + padding-left: 3px; + color: #2e3436; +} + +div.sidebar li.toctree-l2 a { + background-color: transparent; + border: none; + margin-left: 1em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l3 a { + background-color: transparent; + border: none; + margin-left: 2em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l2:last-child a { + border-bottom: none; +} + +div.sidebar li.toctree-l1.current a { + border-right: 5px solid #fcaf3e; +} + +div.sidebar li.toctree-l1.current li.toctree-l2 a { + border-right: none; +} + + +/* ---------------------------------------------*/ +/* Footer */ + +div.footer-wrapper { + background: url(bgfooter.png) top left repeat-x; + border-top: 2px solid #babdb6; + border-right: 2px solid #babdb6; + width:70%; /* with respect to the entire window*/ + font-size:0.7em; + height:6em; /*place for the header must match the botton-margin of the content */ + position:fixed; /*to stay at the bottom*/ + bottom:0px; +/* + margin-bottom:0px; + padding-bottom:0px;*/ + overflow: auto; + line-height:1.2em; +} + +div.footer, div.footer a { + color: #888a85; +} + +div.footer .right { + text-transform: uppercase; + text-align: right; + width:40%; /*copyright, and analytics div in the footer-wrapper*/ + font-size:1.2em; +} + +div.footer .left { /*source/index/next div*/ + width: 40%; + font-size:1.2em; +} + + +/* Styles copied from basic theme */ + + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 1px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + + +/* -- viewcode extension ---------------------------------------------------- */ + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family:: "Verdana", Arial, sans-serif; +} + +div.viewcode-block:target { + margin: -1px -3px; + padding: 0 3px; + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + + + +div.legend { +background-color:#11557C; +/*font-weight:bold;*/ +font-size:.8em; +width:80%; +} + + +/*box around the parameters created wihh :param x: */ +table.docutils{ +margin:2px; +border-left: 1px solid gray; +border-right: 1px solid gray; +border-top: 1px solid gray; +border-bottom: 1px solid gray; +min-width:30%; +max-width:90%; +} + +table.citation{ + border: 0; + margin: 2px; +} +table.citation td.label{ + width:20%; + color:red; +} +table.citation tr{ + border: 1px solid; +} + +/* when using + * ====== + * ====== + * data + * ====== + *the first row is colored in blue + * */ +th.head { +background-color:#E3EFF1 +} + + + + + + +p.rubric { +color:blue; +} + +th.field-name { +color:blue; +min-width:25%; +background-color:#eeeeee; +} + +/* surround the classes, functions and exceptions with boxes*/ +dl.class, dl.function, dl.exception{ + margin-top:10px; + border-top: 2px solid #888; + border-bottom: 2px solid #888; + border-left: 2px solid #888; + border-right: 2px solid #888; +} + + +dl.method, dl.attribute { + border-top: 1px solid #aaa; +} + +img.inheritance { + border: 1px solid blue; + max-width:90%; + align:center; +} + + + + + + + + + +table.footnote td, table.footnote th { + border: none; +} + + +table indextable{ + border-collapse: collapse; + margin: 0 -0.5em 0 -0.5em; + table-layout:auto; + width:100%; + overflow:hidden; + word-wrap:break-word; + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ + + } + + + +.first { + margin-top: 0 !important; +} + +/* FIGURE and IMAGE related*/ + + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + clear: both; + text-align: center; +} + +.align-right { + text-align: right; +} + + +/*all figure are centered with a border and max width*/ +div.figure { +border-top: 2px solid #888; +border-left: 2px solid #888; +border-bottom: 2px solid #888; +border-right: 2px solid #888; +max-width:70%; +margin-left:15px; +margin-right:15px; +margin-top:5px; +margin-bottom:5px; +text-align:center; +background-color:#fff; +padding:1%; +display:block; +margin-right:auto; +margin-left:auto; +} + +div.topic { +border: 1px solid #CCCCCC; +margin: 10px 0; +padding: 7px 7px 7px 7px; +border-radius:16px 16px 16px 16px; + +} +div.topic#figure{ +clear:both; +display:block; +margin-right:auto; +margin-left:auto; +} + +div.topic img{ +clear:both; +display:block; +margin-right:5px; +margin-left:5px; +border: 1px solid #888; +} + + +div.figure p.caption { +clear:both; +background-color:#11557; +font-size:.8em; +font-weight:bold; +width:80%; +margin-left:10%; +margin-right:10%; +text-align:justify; +line-height:1.2em; +} + +div.figure img { + width:100%; +} + + + + +/* This is for the linenos option of literalinclude directive */ +div.linenodiv{ +line-height:1em; +} + +/* other fields of interests for literalinclude are td.linenos, td.linenos pre*/ + +table.highlighttable { +table-layout:auto; +width:90%; +} + +table.highlighttable td { + padding: 0px; +} diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/warning.jpg b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/static/warning.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83aba0bf97c5bec299b1b45956ea05ceefa00c49 GIT binary patch literal 897 zcmex=27@1hvnSqi90t`%y z%uLKIT+C1vj7-c7EP||TLW+iti4!*p8wCax7BwzBcu`a}=^;>u1S1&04P#(nWny7w z1InliGB7f;FfucEq&3 z-c^NXew=r_GQVNXx-{}W(mOZr;qIUd+dN(^pD6m?Va@xLZ8PJ{ z4$AUBe(3w=o!GlumX{|aUcOQ7YMQf?Ggr6ZaMN)$!$n0FQG0J1cKZbIuh(EdF#o{9 zIVHDCqqqFBX=RI2QaN7m`kPuq;YIOn7AH?WW>n2PxcKp1#al)7dE)na+oy)Tn{0I= zzKB&$wb$YH`O-gYd{d=PDm8g+Jn--spMPq6;p~O0y}obMDY9x>wOqNSNWymS*0bwu zcU(UBd%yhFTKiS!4|N~+-d1zWTXVvk4<{#nmH*UIczNyoybCYmCLZHC7g1xyueI9L zylR2_#^8bji=XD5U=eUo_@r<__UHoNMD6ogy{Zc>pPo5>r+W9xqepkn_%zGqr>|?S zkyB-S4FB3H&p=7l9p%bRUHz(8WG5bazAJ2{+4M3!1+L>QtF=oKBeQ;OxwZDfywcEz zaiXp-SPf@q-8^@6Nm9gT6`u4%YsD^aYH4#SvJ#X0yy$mKZ&h_~knJJ6+b_!8%leqt$lk&eaZc6UR SSD(~BS@r7O$;UVSzX<>jV^k&p literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/easydev/share/themes/standard/theme.conf b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/theme.conf new file mode 100644 index 0000000..9ea3b47 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/share/themes/standard/theme.conf @@ -0,0 +1,22 @@ +[theme] +inherit = agogo +stylesheet = software.css +pygments_style = tango + +[options] +bodyfont = "Verdana", Arial, sans-serif +headerfont = "Georgia", "Times New Roman", serif +pagewidth = 70em +documentwidth = 50em +sidebarwidth = 20em +bgcolor = #eeeeec +headerbg = url(bgtop.png) top left repeat-x +footerbg = url(bgfooter.png) top left repeat-x +linkcolor = #ce5c00 +headercolor1 = #204a87 +headercolor2 = #3465a4 +headerlinkcolor = #fcaf3e +textalign = justify + + +homepage = 'user argument' diff --git a/venv/lib/python3.7/site-packages/easydev/sphinx_themes.py b/venv/lib/python3.7/site-packages/easydev/sphinx_themes.py new file mode 100644 index 0000000..6ed86e1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/sphinx_themes.py @@ -0,0 +1,57 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""Common tools to ease access to a easydev sphinx themes.""" +import os +from os.path import join as pj + +__all__ = ["get_path_sphinx_themes", "get_sphinx_themes"] + + +def get_path_sphinx_themes(): + """Returns the path where the sphinx themes can be found + + .. doctest:: + + >>> from easydev import sphinx_themes + >>> themes_path = sphinx_themes.get_path_sphinx_themes() + + """ + import easydev + + sharedir = easydev.get_shared_directory_path("easydev") + sharedir = os.path.join(sharedir, "themes") + return sharedir + + +def get_sphinx_themes(): + """Returns the sphinx themes found in easydev + + .. doctest:: + + >>> from easydev import sphinx_themes + >>> themes = sphinx_themes.get_sphinx_themes() + >>> "standard" in themes + True + + """ + from easydev import get_shared_directory_path + + sharedir = get_shared_directory_path("easydev") + sharedir = pj(sharedir, "themes") + themes = [x for x in os.listdir(sharedir) if x.startswith(".") == False] + return themes diff --git a/venv/lib/python3.7/site-packages/easydev/timer.py b/venv/lib/python3.7/site-packages/easydev/timer.py new file mode 100644 index 0000000..2213f1e --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/timer.py @@ -0,0 +1,46 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""A convenient timer""" +import time + + +class Timer(object): # pragma: no cover + """Timer working with *with* statement + + :: + + times = [] + with Timer(times): + # do something + import time + time.sleep(0.1) + with Timer(imes): + # do something else + time.sleep(0.2) + + """ + + def __init__(self, times): + self.times = times + + def __enter__(self): + self.t1 = time.time() + + def __exit__(self, type, value, traceback): + self.t2 = time.time() + self.times.append(self.t2 - self.t1) diff --git a/venv/lib/python3.7/site-packages/easydev/tools.py b/venv/lib/python3.7/site-packages/easydev/tools.py new file mode 100644 index 0000000..b1b8d18 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/tools.py @@ -0,0 +1,383 @@ +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2020 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""toolkit to ease development""" +import subprocess +import json +import os +import sys + + +__all__ = [ + "shellcmd", + "swapdict", + "check_param_in_list", + "check_range", + "precision", + "AttrDict", + "DevTools", + "execute", + "touch", + "mkdirs", +] + + +def precision(data, digit=2): + """Round values in a list keeping only N digits precision + + :: + + >>> precision(2.123) + 2.12 + >>> precision(2123, digit=-2) + 2100 + + """ + data = int(data * pow(10, digit)) + data /= pow(10.0, digit) + return data + + +def check_range(value, a, b, strict=False): + """Check that a value lies in a given range + + :param value: value to test + :param a: lower bound + :param b: upper bound + :return: nothing + + .. doctest:: + + >>> from easydev.tools import check_range + >>> check_range(1,0, 2) + + """ + if strict is True: + if value <= a: + raise ValueError(" {} must be greater (or equal) than {}".format(value, a)) + if value >= b: + raise ValueError(" {} must be less (or less) than {}".format(value, b)) + elif strict is False: + if value < a: + raise ValueError(" {} must be greater than {}".format(value, a)) + if value > b: + raise ValueError(" {} must be less than {}".format(value, b)) + + +def checkParam(param, valid_values): + """ + .. warning:: deprecated since 0.6.10 use :meth:`check_param_in_list` instead + """ + print("easydev WARNING:: deprecated; use check_param_in_list instead.") + check_param_in_list(param, valid_values) + + +def check_param_in_list(param, valid_values, name=None): + """Checks that the value of param is amongst valid + + :param param: a parameter to be checked + :param list valid_values: a list of values + + :: + + check_param_in_list(1, [1,2,3]) + check_param_in_list(mode, ["on", "off"]) + """ + if isinstance(valid_values, list) is False: + + raise TypeError( + "the valid_values second argument must be a list of valid values. {0} was provided.".format( + valid_values + ) + ) + + if param not in valid_values: + if name: + msg = "Incorrect value provided for {} ({})".format(name, param) + else: + msg = "Incorrect value provided (%s)" % param + msg += " Correct values are %s" % valid_values + raise ValueError(msg) + + +def shellcmd(cmd, show=False, verbose=False, ignore_errors=False): + """An alias to run system commands with Popen. + + Based on subprocess.Popen. + + :param str cmd: the command to call + :param bool show: print the command + :param bool verbose: print the output + + :return: the output as a string + """ + if show: + print(cmd) + try: + ret = subprocess.Popen( + [cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True + ) + + output = ret.stdout.read().strip() + error = ret.stderr.read().strip() + ret.wait() + + if len(error) > 0: + if ignore_errors is False: + raise Exception(error) + else: + if verbose is True: + print("Errors/Warning" + str(error)) + + if verbose is True: + print(output) + + return output + except Exception as err: + raise Exception("Error:: Command (%s) failed. Error message is %s" % (cmd, err)) + + +def execute(cmd, showcmd=True, verbose=True): + """An alias to run system commands using pexpect. + + :param cmd: + :param showcmd: + :param verbose: + """ + import pexpect + + if showcmd is True: + print(cmd) + + p = pexpect.spawn(cmd, timeout=None) + line = p.readline() + while line: + if verbose: + try: + sys.stdout.write(line.decode()) + except: + sys.stdout.write(line) + + sys.stdout.flush() + line = p.readline() + + +def touch(fname, times=None): + """Touch a file (like unix command)""" + with open(fname, "a"): + os.utime(fname, times) + + +def swapdict(dic, check_ambiguity=True): + """Swap keys for values in a dictionary + + :: + + >>> d = {'a':1} + >>> swapdict(d) + {1:'a'} + + """ + # this version is more elegant but slightly slower : return {v:k for k,v in dic.items()} + if check_ambiguity: + assert len(set(dic.keys())) == len( + set(dic.values()) + ), "values is not a set. ambiguities for keys." + return dict(zip(dic.values(), dic.keys())) + + +def mkdirs(newdir, mode=0o777): + """Recursive creation of a directory + + :source: matplotlib mkdirs. In addition, handles "path" without slashes + + make directory *newdir* recursively, and set *mode*. Equivalent to :: + + > mkdir -p NEWDIR + > chmod MODE NEWDIR + """ + # mkdirs("analysis") # without / at the end led to an error + # since os.path.split returns ('', 'analysis') + try: + if not os.path.exists(newdir): + parts = os.path.split(newdir) + for i in range(1, len(parts) + 1): + thispart = os.path.join(*parts[:i]) + # if no sep at the end, thispart may be an empty string + # so, we need to check if thispart exists and is not of len 0 + if not os.path.exists(thispart) and len(thispart): + os.makedirs(thispart, mode) + except OSError as err: + import errno + + # Reraise the error unless it's about an already existing directory + if err.errno != errno.EEXIST or not os.path.isdir(newdir): + raise + + +class AttrDict(dict): + """dictionary-like object that exposes its keys as attributes. + + When you have dictionary of dictionaries with many levels e.g.:: + + d = {'a': {'a1': {'a2': 2}}} + + to get/set a values, one has to type something like:: + + d['a']['a1']['a2'] = 3 + + The :class:`AttrDict` allows the dictionary to work as attributes:: + + ad = AttrDict(**d) + ad.a.a1.a2 = 3 + + You can now add values as attribute, or with ['key'] syntax + + .. doctest:: + + >>> from easydev import AttrDict + >>> a = AttrDict(**{'value': 1}) + >>> a.value + 1 + >>> + >>> a.unit = 'meter' + >>> sorted(a.keys()) + ['unit', 'value'] + + If you need to add new simple values after the creation of the instance, + just use the setter:: + + >>> d['newa'] = 2 + >>> d.newa = 2 # equivalent to the statement above + + but if you want to set a dictionary (whichever recursive level), use + the :meth:`update` method:: + + >>> d.update({'newd': {'g': {'h':2}}}) + >>> d.newd.g.h + 2 + + Note that if you use the setter for a value that is a dictionary, e.g.:: + + ad.a = {'b':1} + + then *a* is indeed a dictionary. + + """ + + def __init__(self, **kwargs): + dict.__init__(self, kwargs) + self.__dict__ = self + self.update(kwargs) + + def update(self, content): + """See class/constructor documentation for details + + :param dict content: a valid dictionary + """ + # accepts dict and attrdict classes + try: + from collections import OrderedDict + except: + OrderedDict = AttrDict + + if content.__class__ not in [dict, OrderedDict, AttrDict]: + raise TypeError + + for k, v in content.items(): + if v.__class__ not in [dict, AttrDict, OrderedDict]: + # fixme copy ? + self[k] = v + else: + self[k] = AttrDict(**v) + + def from_json(self, filename): + """ + does not remove existing keys put replace them if already present + """ + res = json.load(open(filename, "r")) + for k, v in res.items(): + self[k] = v + + def to_json(self, filename=None): + import json + + if filename is not None: + with open(filename, "w") as fout: + json.dump(self, fout) + else: + return json.dumps(self) + + +class DevTools(object): + """Aggregate of easydev.tools functions.""" + + def check_range(self, value, a, b): + """wrapper around :func:`easydev.check_range`""" + check_range(value, a, b, strict=False) + + def check_param_in_list(self, param, valid_values): + """wrapper around :func:`easydev.check_param_in_list`""" + param = self.to_list(param) + for name in param: + check_param_in_list(name, list(valid_values)) + + def swapdict(self, d): + """wrapper around :func:`easydev.swapdict`""" + return swapdict(d) + + def to_list(self, query): + """Cast to a list if possible + + 'a' ->['a'] + 1 -> [1] + """ + from easydev import codecs + + return codecs.to_list(query) + + def list2string(self, query, sep=",", space=False): + """ + see :func:`easydev.tools.list2string` + + """ + from easydev import codecs + + return codecs.list2string(query, sep=sep, space=space) + + def to_json(self, dictionary): + """Transform a dictionary to a json object""" + return json.dumps(dictionary) + + def mkdir(self, dirname): + """Create a directory if it does not exists; pass without error otherwise""" + try: + os.mkdir(dirname) + except OSError: + pass # exists already + except Exception as err: + raise (err) + + def shellcmd(self, cmd, show=False, verbose=False, ignore_errors=False): + """See :func:`shellcmd`""" + return shellcmd(cmd, show=show, verbose=verbose, ignore_errors=ignore_errors) + + def check_exists(self, filename): + """Raise error message if the file does not exists""" + if os.path.exists(filename) is False: + raise ValueError("This file %s does not exists" % filename) + + def mkdirs(self, dirname, mode=0o777): + mkdirs(dirname, mode=mode) diff --git a/venv/lib/python3.7/site-packages/easydev/url.py b/venv/lib/python3.7/site-packages/easydev/url.py new file mode 100644 index 0000000..094d4d4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/easydev/url.py @@ -0,0 +1,57 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# This file is part of the easydev software +# +# Copyright (c) 2011-2017 +# +# File author(s): Thomas Cokelaer +# +# Distributed under the GPLv3 License. +# See accompanying file LICENSE.txt or copy at +# http://www.gnu.org/licenses/gpl-3.0.html +# +# Website: https://github.com/cokelaer/easydev +# Documentation: http://easydev-python.readthedocs.io +# +############################################################################## +"""Utilities related to the web""" +try: + import httplib +except ImportError: + import http.client as httplib + + +__all__ = ["isurl_reachable"] + + +def isurl_reachable(url, timeout=10, path="/"): # pragma: no cover + """Checks if an URL exists or nor + + :param str url: the url to look for + :param str path: Used in request.request at the + url path following the domain name. For instance, + www.ensembl.org is the site url but actually + we want to check this full url www.ensembl.org/biomart/martview + :return: True if it exists + + .. versionchanged:: 0.9.30 + """ + if url.startswith("http://") or url.startswith("https://"): + url = url.split("//")[1] + conn = httplib.HTTPConnection(url, timeout=timeout) + try: + conn.request("HEAD", path) + except: + return False + # 302 is a redirection + # 200 is okay + try: + response = conn.getresponse() + except: + return False + + if response.status in [200, 302]: + return True + else: + return False diff --git a/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/METADATA b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/METADATA new file mode 100644 index 0000000..543173b --- /dev/null +++ b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/METADATA @@ -0,0 +1,31 @@ +Metadata-Version: 2.1 +Name: enum-compat +Version: 0.0.3 +Summary: enum/enum34 compatibility package +Home-page: https://github.com/jstasiak/enum-compat +Author: Jakub Stasiak +Author-email: jakub@stasiak.at +License: MIT +Keywords: enum,compatibility,enum34 +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: Topic :: Software Development :: Libraries +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Requires-Dist: enum34; python_version < "3.4" + + +enum-compat +=========== + +This is a virtual package, its whole purpose is to install enum34 on +Python older than 3.4. On Python 3.4+ it's a no-op. + + + diff --git a/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/RECORD b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/RECORD new file mode 100644 index 0000000..8b8f896 --- /dev/null +++ b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/RECORD @@ -0,0 +1,5 @@ +enum_compat-0.0.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +enum_compat-0.0.3.dist-info/METADATA,sha256=Ykr6FPYXxNToBbAMR3S_JvAEWH8zeIzv24LMA16cJYU,954 +enum_compat-0.0.3.dist-info/RECORD,, +enum_compat-0.0.3.dist-info/WHEEL,sha256=NzFAKnL7g-U64xnS1s5e3mJnxKpOTeOtlXdFwS9yNXI,92 +enum_compat-0.0.3.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 diff --git a/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/WHEEL b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/WHEEL new file mode 100644 index 0000000..bff023e --- /dev/null +++ b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.31.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/top_level.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.7/site-packages/enum_compat-0.0.3.dist-info/top_level.txt @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.7/site-packages/flask/__init__.py b/venv/lib/python3.7/site-packages/flask/__init__.py new file mode 100644 index 0000000..43b5468 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/__init__.py @@ -0,0 +1,46 @@ +from markupsafe import escape +from markupsafe import Markup +from werkzeug.exceptions import abort as abort +from werkzeug.utils import redirect as redirect + +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 _app_ctx_stack as _app_ctx_stack +from .globals import _request_ctx_stack as _request_ctx_stack +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 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 safe_join as safe_join +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 + +__version__ = "2.0.2" diff --git a/venv/lib/python3.7/site-packages/flask/__main__.py b/venv/lib/python3.7/site-packages/flask/__main__.py new file mode 100644 index 0000000..4e28416 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/__main__.py @@ -0,0 +1,3 @@ +from .cli import main + +main() diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..465ead0361d35ca96bb5f2bc4685d5fa4b1cfaba GIT binary patch literal 1845 zcmbu9$#Nn`5QbSK8nKE+Xx~>P0g`614-SW89O2veFplscFBJ`4K#!`IsjAj8Z{%n3 z8{ms0e41DA$(adA3SAAs&sTpX)mfQEeJGa;DSZ9?*PZ)kK9%~12J=@2;V1l<5|Wql z(kd0CA)O}9AZH-MoK@Li0T!4S)MAi>9P*-=d10~*W~*`!n~|n!78jW*O1p>jk%7z4(rSf z_F6!{9Sn9q=};hMRPd;>Sk=g4p14fBP18@z*e%$LaT;XQH(zVo`jrP{r3 zbVl0gNlu!98%v^(uD(rTq(!$MX^W88((|<(*l+1+^ulKog%t6Na?LG*^GSY5q~YLC z(!^0{Xsx9WDv`1FLz>9_9EC%Fgj9EjR%&6#z7hKAhg*XveiVa5YZ=OC#Y$_mowuFL7bYI`pVfvwh*r$|!p7jeHo$*iI`{ofTtV9E@F_cV_5^{_LUE zxrd$6mh))Ntyf9Zj6Vupg+0G>edYGKM74P?v)p(ET=aFGtydPF1lr)&#hdO`_vY93 z_fQD?GpnoKC+mRZkmQKunB;`yl;n)0O>$0hfdYkD z3$UE}lH3l;q$tE4=7Wbph(A*LElrU8d)>1^+>8CVOEr8-x4G6}xuhaTS^J^DA@ m_JqJgVuk3&kCXflLF6S${z%u2`5mQ{=67cHJstgD&HM*mviEoZ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/__main__.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/__main__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29887c5ad12b8ea373134da208491b1b1c7f71d8 GIT binary patch literal 176 zcmZ?b<>g`kf(N(D66JvOV-N=hn1BoiATAaI5-AKRj5!Rsj8Tk?45^IG42%pZOu-DA z%r6;%lA4USSaK6H^ZYcKZZRk4WEO$6u4E`;0a9S%m!W=1Zh?M5W`S;IUU5lcPL8fY vS!!u+VNr#?TTWtewtgCzjE@Hy6CbZvP?vp$N(s+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/app.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/app.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a57318faa4956884045958f6c28a0083185b3d4 GIT binary patch literal 62838 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/blueprints.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/blueprints.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d37f418b60048d4edbd63b7c71248ba60a1f6aee GIT binary patch literal 21906 zcmd^HU5p%8R<5f4@17aYzkg$w9Ve4X?6#dan`PFUUE7Iw!-m;lI|=k=>FMdJv3uOp z-LC5KPt&u&+TcNGA<{mqfJ7QgfCLYK#0yWn^TG=f55)sNDPkU+ddV#W8JTXm~? zrfrWLFG6DMzJ06e-gECg=iGD8U-gC2(V~IBzyI4?wSW4^Fn-93=r4`RSMl*@O~Y^u z$7~uE^=(!xTwBf5TDp=pc`wz>tYs@%)YDF;nOn0*DUZ@nLoRk5opaUPOJgGAi{F>SL8LsgIz(r?N-tqo|Kp#-%=n`b1?y>U&V1tV~LM9QCQn zl+-6spRP=shHI_Pc>jnQPBv%P_Ez@F(9Vds&dFNuNd?Denf07&YMBWaaU^V&92j^cX2tk-f?POw|d*F zbvmy1BcRa0?R{0Z<#gJOR=2w1wb!b*8t(1t%6hAgXN9Wowz`d$+r&lwO1-wS(r!Aa zPoH1uy542?=DO>5FV>pP+H%vy{R0==mA2aN{hL8FFm*MSG$X2o-{ zNXK5jt9vi3x!vmvOW#=`uF4uE<+a)k7aRt}Q~|B)F4=6@c5GnLCh0x91E{VebLh5h zFq)pPUB}gOt$xEMvvOvBS=t2!J%Trhf`VRGkiuGmT)QJZg2@%KYE>b@lLZD@ z4^#45^$a@mk2K2Sa}gi^4^Z^2zEL&$CQ7rPLTUBWC{bIrw$hII(A>!MGmdd1@14ax zb2YgN}Og1^4(wAX5lR#05`n$?cyt~Blh=~ivc4N5GdTShR#2BFCC|InBp z_4Z<|-YkoKEcT-aQrFzBcaWEdSUkt#Fdw8TW`ZdKxy23RYgnGm=UF9w=5s;Xcbh8; zu8g38C*U3>To#|bcB;G9In`-&P72R8n>biv6K~aW1O_aW_STzjkdK6A zP|$)>VdntGsPlm0AK8U$^9_9bKSBWl;kdd{@Luhk-U-Lr0`XRjEz1G9`sNn4`$Kbu zY+<&@0>*~fPlJ`nQXsntmP7Bn_g**KPu(*&z!{8H}4+NdZEpfu29Gev@p&10>t~v-9?Kw}~?% z+KQe>M1xr#dxCMh&(>s@eZ7b1qR z6qiDV49Fk?(^Q`GZE~;L@qDuQnR!b1C&))U9GK<#F=5jny@~@48{6-CjZTnls_!CX zPuN(o9(TNOtM@!=L8{a4$R-FzYK~JSYjf?w@51@>S?@)5nP>4bi&t0(L!V?#v#~eF z%d;pb=oLqnie}n8Y-P<2lk!tnkdaW5g$yKXPyN=stH%Ogt-3`*q?RL|936lv@z($b&rbxtEGss8BpG-Hg z1X+x%gQp5*fX_-klTKThbsC?sR}6C&wL0$Wzmc%!|FX6HjH{#_tCDe2l`K9vCzbr? z=2!A=0sp|r_>7=7x;jQZ2X^+bHF(Ws0W=l6YHFE4?z<=#PvIe zFvI7Z!)WuI^A-0{)C#?iU^Lq~iYJGiuSWOrJ>?!j?<2bRG3R--v7Phok*HPJ`?&K0 zo*Z>9ME9llG4wvBd%x(+q0RHoMfX_LD(wA|Gmj_7-51;!oR=}nSDX`A`HSwHJ15sC zoieUpa_8N7xjyBb#`VkYEAA_Dea3ke*C*VQ?n$|R%{hzfGDaD}=ahRIcsj#*a8}Oi z7~u=f8))&W`hHv@jG{jgvdm!X=u z)NmnyV$pH}7xi|t2?YsC1r;2xz20@vh7u35%!^c_lb%a0#nDpFhp4M{p_#PoWmk(# zGyt3$u4~Pt92793=9G(4KOav*gdzr4dYV9mXl&p1Z3rwJZB*7`oh+V!z@ga0lriAV z^@dXHFn*$W2)1_JtzmA^;2IF6_B&mB-N!m3rO$_e#c*|Kj@`D0_51dMsCinIlLL6^ zguRTxFfSL4DC=7;aRS}4){0OSX^&J3J%V(&1TYGENt-crLWq~0E5qoiN8jtEA59dW=pi!^V)^xoE z`#kU@R*R5LJ+xOEO<`4RHy_O2gu$Uq6@v9$?-nqjOptgGC=Fq6+0mRb5Qmv5DuM|c zw=nCrULdAA(3?w<4(0f4jzFpj)j&+A;nN&eR*S6iF4>Z%_^@S)UXDp965xsylobqu zrga|cJ8vm~*l=xoX=wmsB*r^5%Mz2foi@5L&^&q^%2!Qr z8`@9;&#|hB@uNOKWzDN!56O0QIK?@8y&BDwfHIWg5opMp1i8U(8bn0y1e?U2NC8MH zNOKyv8l9K}&J9RzKb}fMi5o?b7=qdl0~m~{$PFV*4RnN3flPv(yF+|nf$(qmF(J{8 zMmf>3Mm~n`hi(FJ9&bU?`P~SJnv*&j2WFy8PEJH$aCP7S?Oq7aRN*TKJ`f0JYZ%fAJu#Gh+;GyhDjfkp4mK>v zL+e)8Yd5*;p(R(2n(pK)`BFm*0@JTw0tjim4Wq5(EfF z2LxuYC%lwR1W_F9iS}A3kd(7S+#WWx$Dp7&Bq#taYHjsWXz1{p)_)2ge+fm`xCb{7 z+(s!liZcCzV}36KYuoCZu-;$n!qs=r{4V?eaOkAO4V3P~?NiNMgWmuyp}aVXe!5|7 z=UH4}agjwCMemh4p8s>$-*@F4Ao9t5P?>Nl z%$4VC@Pb#XgD~a!VvzCI;Q&wuVo^Mx;^0&cA94K<8^I*D51P4-xQxZ8<{jslZ}DlV zs<(?jUsATRc#MWkRRdKPxXheT;9Mbxw4P>v z*OX7x52mZvpyfnc0_ecjfVWlS zdjD`abOuwC*4p-V<$0JAtOZAm0*XCu+JxZ&-?3er9W|~7IMY+XAe8bO869=<} z_Y-I0HCs_14_ocqqDT5J_YY*LuXH7l7&1S7)HI_026bUnBRgV_SmghFrZ*mQx@uNWG76ns zWEh|Ov4oJ!hv##Ybbh56=ooTNjEie%rxBh8R5sB;)0l+A~qRnkZm`%iEnN&k<1Vp zrg+Zrbp=iEB}5gOAf(KN0l9xClr#zhlB@UPb{dLADW9Wh)%4#ihn>JE^uc+TS&*s& zoO6|TIZ`yL3|La66M+AWhicH=bhRdIJ`M;GL}f7F;u!h0uD4B zdG{z=%-#<#N?-^(Y%qE>7#z}ceT)@OUP?MfKsA_d)TJd@MBRi86>)`-b6B8=aIUN` z%gKUmOC_oewa9BYOegLRrW*7OuE8(R=pdv*k;T&k z{)qKf1EF;pJ+=opA9~f4$&MQAh+$}nbYLJw&!P9i#afH9P49}N`wZA_bQzUf1an;i z_jq4t@v|r*c@neSHa4D&AjZ1hkI8=wff=I=Y$QT!<(-W&K)g?cohion$E`#ty!MZw z>|0xMTs^clQc_QCnyV(R()|>ITL^|BxRpXs4MDJ9Hz0=1)f5!$-|43}jT|? zpk4OUR11MO1j+Dx6VZfC2Ig)-Gs+QygJ2rU!lxN-nbvWq=#-in#%EU%UzHXk(qi<} zj5Fr!`5yGDZtj7JsKU52aX(L}Tlt5^TQ~&nnIpzVE}ThjBfkkHpJSdgoXJhITG%wV ziXtU*4^tbsS}lESdRD)%I)XX_c2l2PsEskE@Vyjtw%o_2Ki1Eq)xXG*&HRu2M)A%E zXtif+oTGmG>mOMgrHzq($tm4n%X6DXYeZI_?w5$6jZ$}_JL&9m_TM-9BdQnXYN5{v z=C`L`I%j-r-hA;xSNrtUeq8P6)t!BSasX=?+t}0J(=YHi#f<&~qmc&=;ORloeH`D1 zR-gOW^1S}Itk&`t00Z~74y$JrbFDA-$Gb;>3(Nax6VzTkgt$G*Et_>|G20hd+wb4` zBeXb*d2C_r6C0EL$*p4#4f!^lg9z77^{2vdf3H8W`aG@+tIy+30b>R7Ox19A>$rol zoI`t!{uFo=b<`%EgXfIa%ev*i^{2vnvl>#$OS7)-gO?^9^PJJ2*m?n+Gx-qM`q;YJ z`_OPo5a!R-KEerbQMtL{-3U)tanujld`km{JbGz?!DueeYDXWR1A5kW`K-hiM4tvQ zp!VytUmq?*o$PwNSm@D}9jzi#IjNt?fiAML0k5haHS`o=aOF--%tD>%u^{F-=2DlB zWKzO!LQyM{eLLVVZ)71l_q285Q#3=frw5+?GTo7&A|2v_QmZ~XD%nQv@}69r8Kog@lb?{)C!G%Qe3GR;CzRnPX=jJvXy9M%dnha zG(io95)3^9&LLq~`&GCGH5irsa0F+v@&$==$+G7@Gv|6mQcqN-x!##MYDz=QX{s=A zI_>1Q-dx#!A9l1js=ho&(S(${TU5tuNsXv1M*L#$<;RU63cN;8@0+^>t@gx|(eWed z+3+J2VFA={G~HWnvkom<{-};qXL$`DpL$cD=NL{LXd(Fz;9$CGg{Gmh&8)yGpRQQT z9heVdH;9HsQ|+_Dxod9Az0>jDJP+t%9Hfoj3l}2qtQP69VW@jt?Tw#0NB8goV=$!3 zo0TjLmPUQvQi&=|S<$`$u81G8W-p*}=Nvo%hNu*$ar}wWC7#H`TA_d?Aqs`q6#L;f z=%;v`-YnucVhWnID9%UP&keX#{UD1>PWm^H$++C9(t%$o!66K}BNsvHhI=>2Dn~xh zAdBE%)dmJ*cVE1+2 z{3xO`d;n)2x3suRIj#a_-^O_1utB=scHBydWtfx~PfcYc)zJD|ddT#k+d+B260D_X zDehh66hFc7Ui6OPOOfjgYL%kidcHC!zRBm}@JiKMcfBQEicjnVHlMg&gG)3S_EpJ8 z=lO6PDH@J`3SLI04h2*d{x)XYRvGt@b$i@;lDkzI)9HEQln$nsB{LZ=TFF@!ceNi( z)tJY;?dEJZ%tqdJeabbFT_n=c+ixK8kTG#hM-ZO-Io3r><>?^st({qi%w*UQVj8rl+NM9 zn2}E}-lpMAJ3K0~-ZcC+7LCx&w0E|P60Up8JBz33RSVD0;(1#6b+%Fuj0ffe>p|*4 zdL<+2ZFx#!CkFwR?`^%C@Z2gbl*~o^Gow*?an-@BH?BDA6KR@wtd#(&APe-KE=c+S z9wE0QOvC1}kBxvlV<;C|gA}b`NBW8esA5#7=AvYk-NmWA*MYF!>vMXq&xN|rE@E6- zsDr)YbB_)PdT}>lq;IB?A8T$}4Rh0EeylprI%okgdse;z(?{S$$Ki90SEjzV0f1li3#4V;vS}M`=rC81l6cjp}`bx73)gvgOd&xDhbgSFeixyq5`#y<^>Yc< z8op^_2Hyb)BTjRi_c?kP$K3t=;*?N^^KdLoV|NcWfMggUL~}ZRzB}er^L=KbR&mS@&Lnz;Gj}0u zXLbl%&hfFL)}u5GH2o=LWA|ryU^^35%z=7S1N zEhIQ;yF4Y#n3tcOH2p=4{P&ulM&xQ%3 zIsadhs5{kHHOnW<)E{duc%0&@pv9c1w>So1s>*Jq>Y(DPp#F!R0p;qW6j#;ub4%97 zPm~`AWUHF-aGrcB=^6pl$baVYRgG{$y`uH`?XqVqVRLGFyOpsMkgt)9eVop!pvJuY z?4;~>urtz}h3Kr5vX9eQ)jT52R}?HcApnHm^md6=MyENW3X;5l%)|TQrP`$8pX&YU zPA}D<*A_3fAY%&w;Y4;SyiM*Mw~jaT;v^*1OJ0LQOjI1cCv3!Mkmj;tNs6%1EP?Jb;kOxehR1aM-1Sjyuo_Q%o0Fyd~S+zDxxw4}GuNT=cAOeW>*Y^)E= z-4pNLBZ(LN#DdUaI0?1;BqAk(%y24(nW6lNhKP<)b{}vQy;JxI(vjapsi%xr#^x4s zS|gIFw4=&_aPb3^RMCMa6Y&M0$NLq4@12b`kOVddfIcND_dN>U5fW53XLfQR4ECrF zPeIh*-bvJfh{>Z4h;5rxlQ*$hZ2|P;Jxa&NvW|CZNS|Yux**stcj-w@;FB?d6$U>4 zCY{&;=p~Xgu}713ngps6gFXc{|8yrcw}-kOPf(40?bu8b^tQYhfY=$6YWQnDPb98} z_w0$hvU?)Gp^2PueQLxcQ2vxVczPJDGn&*H5yyvP{u`fza@Tx zcQnGcG!lMnyrBWDDbxF{ophG)co-dj6p5MqrT1UhmZ3Yzj+RiM{MeEl+Wt`O=@Inp z9eI1mPhoxQ?K^c>eq!X?16m?X8u{ZlwM03w#X)RAOEjS;T3mZlPh1?3{rZ?6M{geU zTL_*$M9A)5^v;gt7-NP!Y1s#%DAtwgD$2b+ePNK^!{-`Pemj{TtCt@jGKWLFqA8&C^W(dj##7MZ)giQqUcq?w6u7o~3RE=( zPV8KIG{dLFyYM^l9>MuYV;jM3SVPu=pYi zzU3#mO_h;VA8(4{w-S(m<%L(26u6QUAMYHS{uGNZqX;tZw~#a&SZzPZzlY2{N_I(S zlJ{`EFR|gfEZ$^snFVb@6_xscwFMR*vS8|rN}^(L*1OGuaVQBSczxFBNEHv5_e-qN z;`f-E;C+_`ejvy2?y<-xC}{Z}r0{cx-UB|LV6n-9 z!rA+E6v1ftE^pm!Hlz1>L;Lj|HWFbtgBnv8{ACpR*U}(TI-O48SKB0OA}XEzW2wo> z$uZ>Y5kFIv8!wEP@Lf1I#w+Hq3C$}rZ-wt$%TLo> w3R7+r0}yG-%Rqd_{sttUs9yzplZUK-0tH{o;R~bq4F88$rulp_HTM4h0Ho#-X8-^I literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/cli.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/cli.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9d8c2308723c2202cecaa3d901f635987019cae GIT binary patch literal 26818 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 PTv~z(;GZ^@o4D{l#(&0t literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/ctx.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/ctx.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..229a7f0df348c9732dc4d869481131efb153825c GIT binary patch literal 15336 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 WsJWau`E2F=#na0dD=z4G<^KS3?a=uE literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/debughelpers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c6067ab94abc80b2e6932b08c2024126e85d711 GIT binary patch literal 6383 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/globals.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/globals.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b5831c90f5c0433b5c25281742c861452bb6d5f GIT binary patch literal 1786 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 SV0fe8(Z$B%^*SxmM)5zY8?Pz= literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/scaffold.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/scaffold.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0c7e9603d9a2bfb8092eca652f455b86a714d80 GIT binary patch literal 24788 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/signals.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/signals.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8069838bd105cea146c0a9c64f28aaacb8a0a70c GIT binary patch literal 2338 zcmah~&2Aev5a#}9CF{qQ9H&W&9QIHYFc8@}AoMDVhRJ*#of_DSPeJ?uMjn zOUS9tWAxA-`xbqU?WI6ZeTAO-4YjLEMuAcwH5?A-=bIVs=Yv6)Vf^v?Rr038*q^j% z2KMYZruhwvWYWtR_ZA1B{LG&PJn)zdc=#R5pM^}dF1z|`kI_$tJp78umWtxKcznlET~J*|^+5F;)d$sg)Bx1LQM;ga9kmB) z&rw5ALr0B3jU2TPYF~P<+2Osv5CuCq^s1ecWTs4+Ow_k8Cd6z;3&e9w^D!2MU?tLQejj!)gd;T9Q&1NO32?&kL|2HF4JbITG2h+Hsmbxmcum!N2^1!+^#x8kl#X7T_I+L zoM%M$g?Kwpvic-2R#%>_ITWWruiVj1HaEj_39h?AK!r_zhTVz&#$w zo(fg#B2wWU(A(g4nkgeBgX$_o_1xv}$S(L@)eRZ%VfHZxsF^ORg?K|g`k^Zc^u9wp z+4mTGIgL-VG{00jPE9<|ldB}nlG98*i6>emR>es?MV{jcKsNDpYR_YPu3`h!x^X?y z+$udqdEqFrF;Y}qo7kvarukW1OyfE?@#)+`MV3Kjnyr*2`C5(Ay3lcv$4S1h=X6zN zMjgfROXOW8k~GPJ_-g?OlbI)RYS(Iu2$V4s?46Glt+Og;-`%d-LZBCffVMUyH&jwluL_51 zhDtEaQ!B)M>u^CE9~u+d&ejR-XfA~98Tc}@Q-_mD<6sEvqzh3OR4E;(b3ANO#m z4`{jL2f8npkLYUCGMgUI;bhYg2{}W%AS~X>TOjbG?@an9%U7>mJEFACVlywxLL(hp z1s0#GNisL9^fWb?rKdX43lc?w;=19LJi;s1|7M=sbf&(fGWp+dT7qiqF~vhUWS;MZ z{&KV#laru#U|-Wyq5HH9Xc^H$f$2S3DAjr&3lBca7n%~KA7H84lOoU6#PVKEh^sW= z{d%LMumyi;)ePY$I?Wbh>!d4F(vq5MjmUVP-!KXADk-aZy4i7V7aH&+qp7!j8|4$2o4*@ z6cuXD!8vF+=oyXNj%9J3FYlif7V1}*)y+h?hjRHKDNDp>)s2Ob4f)Z=K{*~dU!8@Xsa!)v4 zV*}(@*zg*gnjso&c!Q0ovEdCiqQQnY*x-_j75#smbHWDN95!N&4d1|KTYduwvBHLL uu^cwM!A8{B{8x2UoljO@v`?vT%|}!szVG$@j<<_m*bNUJN3E`R_xBGgykt@U literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/templating.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/templating.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a979928d2efb6125c29c733c9aa2c291cc5632ff GIT binary patch literal 5455 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/testing.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/testing.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df16ca25ab629a45fa27392bcd94c55229e2f52a GIT binary patch literal 8838 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/typing.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/typing.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7cdbb5cf38a3e3ab77be5cd49dd47f7b7483271b GIT binary patch literal 1719 zcmZuw+in{-5MA!Bq_wPzFS1=ZPU^O48nv-h^r3wzir9)TK?29Hl?3I>f)+>WCe-el zes zjOiDk@(`E$mpBf0I1vsdKwi1>8?;>EjeP186Y)f0RHQ}JeO?fyQ9uLYAaafuQI>Jd zLj`4Z;5LoFX1ttmGVq$tz;8OV4hwV+-ol0jsYe`XgS3CZFe(Up%^w_AS!~-9YU& zFAfPWnrwQ<*h8F&wLTtO7QKf18^osZS7A7I0ls_u>x5@M_YO* zrHdk8*oPQo)Ze}ALu#^nEteKflPu=6+D~FF**TLDi*+C2v(FTGh)Zpt0Aw6@s0$wW zoc!i;mwRu0THrqRS;!l^QYP|%#aw{wG9lQhfR>vV!1(i`1f9vaZ`v`R`8REMaVZ}K zcd!gO{N2GEUx64%!+B|*gcbjFI(n3L(kR`EVx@6|t*_4^8=c9^&YocEb!T9uzDlEb z*iNtVAPoBm3&Zcs9(H5$=Jto$Y)_Ggt)fYb*$BcgFNfhM;h8XcB@E9pCdLt2#ESXy zblk`GXfK$^Kvt*yzVBRCj1OP5^DQphNIg2_7zd6yg+WYZnH|!qlcAq>x+^4k= zL!f>F-o8-7$X+B}y8!w64P?VMXPPN3vp$X$l)dXbxR5MOkr9>vdEt4CS51rC@zsfz zx&J8Y>)gX6>Y*#2v!q};k+eEJiakW`MX{#k6U}s{x(Nqb9y9F_=R*CbkIz{Y70-Ks;&iwl#Ib~w%&;8RR5wtPQ>RmfQ?sL2gy7c_`=_44hOuRqa z2Kwv(k0cJ{W)F*Fx`fyu#0qa$<*o)AV7EHyC&JR|8uje+G5pJe@5fyJ!Mr-Pha&Kb uq+))aPh8@Y8d-IH)HiY6^Nr6$Yb5X%+%j1}twC1FI%-B=B6qxi1n&PDz|5Ke literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/views.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/views.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..653d8dab54ba21b1851206be504c261de71b22d7 GIT binary patch literal 4960 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/__pycache__/wrappers.cpython-37.pyc b/venv/lib/python3.7/site-packages/flask/__pycache__/wrappers.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a38a28262ae42c0bcd9e81058098bca8fae02e91 GIT binary patch literal 4949 zcmai1TW=gm74Gioxq57m$4NF`P-q~qjFgO%m5?GUAd=wCn$1qY@oJ%8dfHtzGi~=} zQe9)mBkv-uBle9yKoGl+Nc;EC^4UmQCV=uy{HpRPW2>Ri5a&co&9 zmWJyee?M~nbyd^;Ne{(kV)8TG$?q{Rjp>1A>-aYUBdpjJooJQ746Alc%}vbfb_4S& zs|C%lWw+G49xR1zyRGJpU^!f|S9Fc*2dm;haqZY^_-_W?aNS$TJYWFqXQO|1|8mqt3 zS%WoSnrFJ*&FSr&PWmDG`XxH)iRf1p{VFfkudr1`zs3y3x5L(6n)W+(&#dsFN1WCW8R_=gPVjWLhNsAL}HnrTu z+Va3U*&2R6Qd{Jr46)bF$U2E<*0BqwGKP@T!1c0CvH3!wX}#x0Rx;aHY#}AKB#9C( zl@MF5l%m`%J667@qdpnZUf?52Cb{?v6h*wx4{*%I;hfLL{bK>AgO2*SpAJh_B#IJa zD&ixbaeN;HRy-nYS|pjjKa-$-nzJGk_z?)xU`Bh5pjIWbVv*J{%4$FOEk3 z*gE7VeY^YSib2m1b?lbbvV|0x2@ghp)b_;dFEAPjCBCBB8X~caHchd@f#W zDt&A!@7XLhKRrpiq5HxCH%TZE@MtV2Kc+*~FlZH1ZyED5r}oN5OEgTtoi z((C|0rNGK?0hTJ7%1Dsp>P39K?y{fkKFOVmB503%^w@_Z>~m{49Kf1Tm_N!sg~6jwz2SXdK8OcYD30D|K5X6 zUON+sp1jo&kfV-Wfm|gg0MGHH)E^E+2QQ^5avYuiLOdg`csP|ORshc<2Y^ik&m6{j z!|_PtwYRD3zcV z)<46lQ>;G2KZBWi=3u@aqT=w$Up5KTZZlW9qDu1X=?!E^*PA#z^5n^sJ6woZIO+rD zd$QL^mvT`bx(QELogj9ZLu?$yMkSak1fIF4N z5`45oADKUg-O~y(lwElcorpFOo7+WwlQvLi!JhIYt)Mg&UA$J1q{6~BpCBg1bs~~I zg+;@;M$}AYD)Ml8N^W3iEt!Vd?wU7hUBl3?)p4)j?&9vOtg6D=!?N-s=cOxoA4Abk zP&a|T!Q|+xc%7r0c%^@-jdW(R>dQ8&`{tLLso5=?+gTjFC$o>iBuhBhAAIvRgNkgb@sM&n7vd{^TZqcZrTRQ{54lrF zJj_ZZ2^y*vK&eXND6|mgv~P}&I}4i!IzQ0=q6U@b-r6}RsYnxxJBN(b|7ji0f!dq6 z(O5zC-TocL8VMr{*km@H#;6~lAO+{7`q#z1Ra&rUefn9d$&5dm1tq`Z32cBqf~tLD zGbTgg3%NOw zVSxHi0Ugx@bkTnSb_;q8g13W;%GQ5c++%E!%v*V*@${peZRgpJy?vp{$XZTP?laB{ zNk3oIqGcA$TY&RZpzAGWMAl8c%O+}5py!V@5 zZaa@Y+c%E MHNBy?E1jeN0#5)|VE_OC literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/flask/app.py b/venv/lib/python3.7/site-packages/flask/app.py new file mode 100644 index 0000000..23b99e2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/app.py @@ -0,0 +1,2091 @@ +import functools +import inspect +import logging +import os +import sys +import typing as t +import weakref +from datetime import timedelta +from itertools import chain +from threading import Lock +from types import TracebackType + +from werkzeug.datastructures import Headers +from werkzeug.datastructures import ImmutableDict +from werkzeug.exceptions import BadRequest +from werkzeug.exceptions import BadRequestKeyError +from werkzeug.exceptions import HTTPException +from werkzeug.exceptions import InternalServerError +from werkzeug.local import ContextVar +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.wrappers import Response as BaseResponse + +from . import cli +from . import json +from .config import Config +from .config import ConfigAttribute +from .ctx import _AppCtxGlobals +from .ctx import AppContext +from .ctx import RequestContext +from .globals import _request_ctx_stack +from .globals import g +from .globals import request +from .globals import session +from .helpers import _split_blueprint_path +from .helpers import get_debug_flag +from .helpers import get_env +from .helpers import get_flashed_messages +from .helpers import get_load_dotenv +from .helpers import locked_cached_property +from .helpers import url_for +from .json import jsonify +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 .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 .typing import BeforeFirstRequestCallable +from .typing import ResponseReturnValue +from .typing import TeardownCallable +from .typing import TemplateFilterCallable +from .typing import TemplateGlobalCallable +from .typing import TemplateTestCallable +from .wrappers import Request +from .wrappers import Response + +if t.TYPE_CHECKING: + import typing_extensions as te + from .blueprints import Blueprint + from .testing import FlaskClient + from .testing import FlaskCliRunner + from .typing import ErrorHandlerCallable + +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.Optional[timedelta]) -> 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 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") + + #: The secure cookie uses this for the name of the session cookie. + #: + #: This attribute can also be configured from the config with the + #: ``SESSION_COOKIE_NAME`` configuration key. Defaults to ``'session'`` + session_cookie_name = ConfigAttribute("SESSION_COOKIE_NAME") + + #: 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 + ) + + #: A :class:`~datetime.timedelta` or number of seconds which is used + #: as the default ``max_age`` for :func:`send_file`. The default is + #: ``None``, which tells the browser to use conditional requests + #: instead of a timed cache. + #: + #: Configured with the :data:`SEND_FILE_MAX_AGE_DEFAULT` + #: configuration key. + #: + #: .. versionchanged:: 2.0 + #: Defaults to ``None`` instead of 12 hours. + send_file_max_age_default = ConfigAttribute( + "SEND_FILE_MAX_AGE_DEFAULT", get_converter=_make_timedelta + ) + + #: Enable this if you want to use the X-Sendfile feature. Keep in + #: mind that the server has to support this. This only affects files + #: sent with the :func:`send_file` method. + #: + #: .. versionadded:: 0.2 + #: + #: This attribute can also be configured from the config with the + #: ``USE_X_SENDFILE`` configuration key. Defaults to ``False``. + use_x_sendfile = ConfigAttribute("USE_X_SENDFILE") + + #: The JSON encoder class to use. Defaults to :class:`~flask.json.JSONEncoder`. + #: + #: .. versionadded:: 0.10 + json_encoder = json.JSONEncoder + + #: The JSON decoder class to use. Defaults to :class:`~flask.json.JSONDecoder`. + #: + #: .. versionadded:: 0.10 + json_decoder = json.JSONDecoder + + #: 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, + "PRESERVE_CONTEXT_ON_EXCEPTION": 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": True, + "JSON_SORT_KEYS": True, + "JSONIFY_PRETTYPRINT_REGULAR": False, + "JSONIFY_MIMETYPE": "application/json", + "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 = 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[str] = "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) + + #: A list of functions that are called when :meth:`url_for` raises a + #: :exc:`~werkzeug.routing.BuildError`. Each function registered here + #: is called with `error`, `endpoint` and `values`. If a function + #: returns ``None`` or raises a :exc:`BuildError` the next function is + #: tried. + #: + #: .. versionadded:: 0.9 + self.url_build_error_handlers: t.List[ + t.Callable[[Exception, str, dict], 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. + #: + #: .. versionadded:: 0.8 + self.before_first_request_funcs: t.List[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[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[t.Callable[[], t.Dict[str, t.Any]]] = [] + + #: 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 _is_setup_finished(self) -> bool: + return self.debug and self._got_first_request + + @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. + + .. versionadded:: 0.7 + """ + rv = self.config["PROPAGATE_EXCEPTIONS"] + if rv is not None: + return rv + return self.testing or self.debug + + @property + def preserve_context_on_exception(self) -> bool: + """Returns the value of the ``PRESERVE_CONTEXT_ON_EXCEPTION`` + configuration value in case it's set, otherwise a sensible default + is returned. + + .. versionadded:: 0.7 + """ + rv = self.config["PRESERVE_CONTEXT_ON_EXCEPTION"] + if rv is not None: + return rv + return 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"] = get_env() + defaults["DEBUG"] = get_debug_flag() + return self.config_class(root_path, defaults) + + 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`. + + This attribute can be configured with :data:`TEMPLATES_AUTO_RELOAD`. If + not set, it will be enabled in debug mode. + + .. versionadded:: 1.0 + This property was added but the underlying config and behavior + already existed. + """ + 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: + 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: + options["auto_reload"] = self.templates_auto_reload + + rv = self.jinja_environment(self, **options) + rv.globals.update( + url_for=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"] = 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`. + + .. versionadded:: 0.5 + """ + if filename is None: + return True + return filename.endswith((".html", ".htm", ".xml", ".xhtml")) + + 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 + + #: What environment the app is running in. Flask and extensions may + #: enable behaviors based on the environment, such as enabling debug + #: mode. This maps to the :data:`ENV` config key. This is set by the + #: :envvar:`FLASK_ENV` environment variable and may not behave as + #: expected if set in code. + #: + #: **Do not enable development when deploying in production.** + #: + #: Default: ``'production'`` + env = ConfigAttribute("ENV") + + @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. This is + enabled when :attr:`env` is ``'development'`` and is overridden + by the ``FLASK_DEBUG`` environment variable. It may not behave as + expected if set in code. + + **Do not enable debug mode when deploying in production.** + + Default: ``True`` if :attr:`env` is ``'development'``, or + ``False`` otherwise. + """ + return self.config["DEBUG"] + + @debug.setter + def debug(self, value: bool) -> None: + self.config["DEBUG"] = value + self.jinja_env.auto_reload = self.templates_auto_reload + + 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. + + If set, the :envvar:`FLASK_ENV` and :envvar:`FLASK_DEBUG` + environment variables will override :attr:`env` and + :attr:`debug`. + + Threaded mode is enabled by default. + + .. versionchanged:: 0.10 + The default port is now picked from the ``SERVER_NAME`` + variable. + """ + # Change this into a no-op if the server is invoked from the + # command line. Have a look at cli.py for more information. + if os.environ.get("FLASK_RUN_FROM_CLI") == "true": + from .debughelpers import explain_ignored_app_run + + explain_ignored_app_run() + return + + if get_load_dotenv(load_dotenv): + cli.load_dotenv() + + # if set, let env vars override previous values + if "FLASK_ENV" in os.environ: + self.env = get_env() + 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.env, self.debug, self.name, False) + + 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 # type: ignore + 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 # type: ignore + + 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[t.Callable] = 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[[TemplateFilterCallable], TemplateFilterCallable]: + """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: TemplateFilterCallable) -> TemplateFilterCallable: + self.add_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_filter( + self, f: 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[[TemplateTestCallable], TemplateTestCallable]: + """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: TemplateTestCallable) -> TemplateTestCallable: + self.add_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_test( + self, f: 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[[TemplateGlobalCallable], TemplateGlobalCallable]: + """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: TemplateGlobalCallable) -> TemplateGlobalCallable: + self.add_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_global( + self, f: 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: BeforeFirstRequestCallable + ) -> BeforeFirstRequestCallable: + """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. + + .. versionadded:: 0.8 + """ + self.before_first_request_funcs.append(f) + return f + + @setupmethod + def teardown_appcontext(self, f: TeardownCallable) -> TeardownCallable: + """Registers a function to be called when the application context + ends. These functions are typically also called when the request + context is popped. + + Example:: + + ctx = app.app_context() + ctx.push() + ... + ctx.pop() + + When ``ctx.pop()`` is executed in the above example, the teardown + functions are called just before the app context moves from the + stack of active contexts. This becomes relevant if you are using + such constructs in tests. + + 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. + + 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.Callable) -> t.Callable: + """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["ErrorHandlerCallable[Exception]"]: + """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, 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, 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) + + if self.propagate_exceptions: + # 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, 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": + """Exceptions that are recording during routing are reraised with + this method. During debug we are not reraising redirect requests + for non ``GET``, ``HEAD``, or ``OPTIONS`` requests and we're raising + a different error instead to help debug situations. + + :internal: + """ + if ( + not self.debug + or not isinstance(request.routing_exception, RequestRedirect) + or request.method in ("GET", "HEAD", "OPTIONS") + ): + raise request.routing_exception # type: ignore + + from .debughelpers import FormDataRoutingRedirect + + raise FormDataRoutingRedirect(request) + + def dispatch_request(self) -> 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_stack.top.request + if req.routing_exception is not None: + self.raise_routing_exception(req) + rule = req.url_rule + # 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 + return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) + + def full_dispatch_request(self) -> Response: + """Dispatches the request and on top of that performs request + pre and postprocessing as well as HTTP exception catching and + error handling. + + .. versionadded:: 0.7 + """ + self.try_trigger_before_first_request_functions() + 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[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 try_trigger_before_first_request_functions(self) -> None: + """Called before each request and will ensure that it triggers + the :attr:`before_first_request_funcs` and only exactly once per + application instance (which means process usually). + + :internal: + """ + if self._got_first_request: + return + with self._before_request_lock: + if self._got_first_request: + return + for func in self.before_first_request_funcs: + self.ensure_sync(func)() + self._got_first_request = True + + 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_stack.top.url_adapter + methods = adapter.allowed_methods() + 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 + + # Check that Werkzeug isn't using its fallback ContextVar class. + if ContextVar.__module__ == "werkzeug.local": + raise RuntimeError( + "Async cannot be used with this combination of Python " + "and Greenlet versions." + ) + + return asgiref_async_to_sync(func) + + def make_response(self, rv: 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. + + ``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:: 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 + # 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 + # 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)): + # 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) + status = headers = None + elif isinstance(rv, dict): + rv = jsonify(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 # noqa: B950 + 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, tuple, Response instance, or WSGI" + f" callable, but it 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, tuple, Response instance, or WSGI" + f" callable, but it was a {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 # type: ignore + else: + rv.status_code = status + + # extend existing headers with provided headers + if headers: + rv.headers.update(headers) + + return rv + + def create_url_adapter( + self, request: 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: Exception, endpoint: str, values: dict + ) -> str: + """Handle :class:`~werkzeug.routing.BuildError` on + :meth:`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[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_stack.top + + 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 self.should_ignore_error(error): + error = None + ctx.auto_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/python3.7/site-packages/flask/blueprints.py b/venv/lib/python3.7/site-packages/flask/blueprints.py new file mode 100644 index 0000000..5c23a73 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/blueprints.py @@ -0,0 +1,609 @@ +import os +import typing as t +from collections import defaultdict +from functools import update_wrapper + +from .scaffold import _endpoint_from_view_func +from .scaffold import _sentinel +from .scaffold import Scaffold +from .typing import AfterRequestCallable +from .typing import BeforeFirstRequestCallable +from .typing import BeforeRequestCallable +from .typing import TeardownCallable +from .typing import TemplateContextProcessorCallable +from .typing import TemplateFilterCallable +from .typing import TemplateGlobalCallable +from .typing import TemplateTestCallable +from .typing import URLDefaultCallable +from .typing import URLValuePreprocessorCallable + +if t.TYPE_CHECKING: + from .app import Flask + from .typing import ErrorHandlerCallable + +DeferredSetupFunction = t.Callable[["BlueprintSetupState"], t.Callable] + + +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 + """ + + warn_on_modifications = False + _got_registered_once = False + + #: Blueprint local JSON encoder class to use. Set to ``None`` to use + #: the app's :class:`~flask.Flask.json_encoder`. + json_encoder = None + #: Blueprint local JSON decoder class to use. Set to ``None`` to use + #: the app's :class:`~flask.Flask.json_decoder`. + json_decoder = None + + 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[str] = 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 _is_setup_finished(self) -> bool: + return self.warn_on_modifications and self._got_registered_once + + 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. + """ + if self._got_registered_once and self.warn_on_modifications: + from warnings import warn + + warn( + Warning( + "The blueprint was already registered once but is" + " getting modified now. These changes will not show" + " up." + ) + ) + self.deferred_functions.append(func) + + 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) + + return 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) + + 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: + existing_at = f" '{name}'" if self_name != name else "" + + if app.blueprints[name] is not self: + raise ValueError( + f"The name '{self_name}' is already registered for" + f" a different blueprint{existing_at}. Use 'name='" + " to provide a unique name." + ) + else: + import warnings + + warnings.warn( + f"The name '{self_name}' is already registered for" + f" this blueprint{existing_at}. Use 'name=' to" + " provide a unique name. This will become an error" + " in Flask 2.1.", + stacklevel=4, + ) + + 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) + + def add_url_rule( + self, + rule: str, + endpoint: t.Optional[str] = None, + view_func: t.Optional[t.Callable] = None, + provide_automatic_options: t.Optional[bool] = None, + **options: t.Any, + ) -> None: + """Like :meth:`Flask.add_url_rule` but for a blueprint. The endpoint for + the :func:`url_for` function is prefixed with the name of the blueprint. + """ + 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, + ) + ) + + def app_template_filter( + self, name: t.Optional[str] = None + ) -> t.Callable[[TemplateFilterCallable], TemplateFilterCallable]: + """Register a custom template filter, available application wide. Like + :meth:`Flask.template_filter` but for a blueprint. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f: TemplateFilterCallable) -> TemplateFilterCallable: + self.add_app_template_filter(f, name=name) + return f + + return decorator + + def add_app_template_filter( + self, f: TemplateFilterCallable, name: t.Optional[str] = None + ) -> None: + """Register a custom template filter, available application wide. Like + :meth:`Flask.add_template_filter` but for a blueprint. Works exactly + like the :meth:`app_template_filter` decorator. + + :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) + + def app_template_test( + self, name: t.Optional[str] = None + ) -> t.Callable[[TemplateTestCallable], TemplateTestCallable]: + """Register a custom template test, available application wide. Like + :meth:`Flask.template_test` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f: TemplateTestCallable) -> TemplateTestCallable: + self.add_app_template_test(f, name=name) + return f + + return decorator + + def add_app_template_test( + self, f: TemplateTestCallable, name: t.Optional[str] = None + ) -> None: + """Register a custom template test, available application wide. Like + :meth:`Flask.add_template_test` but for a blueprint. Works exactly + like the :meth:`app_template_test` decorator. + + .. 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) + + def app_template_global( + self, name: t.Optional[str] = None + ) -> t.Callable[[TemplateGlobalCallable], TemplateGlobalCallable]: + """Register a custom template global, available application wide. Like + :meth:`Flask.template_global` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def decorator(f: TemplateGlobalCallable) -> TemplateGlobalCallable: + self.add_app_template_global(f, name=name) + return f + + return decorator + + def add_app_template_global( + self, f: TemplateGlobalCallable, name: t.Optional[str] = None + ) -> None: + """Register a custom template global, available application wide. Like + :meth:`Flask.add_template_global` but for a blueprint. Works exactly + like the :meth:`app_template_global` decorator. + + .. 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) + + def before_app_request(self, f: BeforeRequestCallable) -> BeforeRequestCallable: + """Like :meth:`Flask.before_request`. Such a function is executed + before each request, even if outside of a blueprint. + """ + self.record_once( + lambda s: s.app.before_request_funcs.setdefault(None, []).append(f) + ) + return f + + def before_app_first_request( + self, f: BeforeFirstRequestCallable + ) -> BeforeFirstRequestCallable: + """Like :meth:`Flask.before_first_request`. Such a function is + executed before the first request to the application. + """ + self.record_once(lambda s: s.app.before_first_request_funcs.append(f)) + return f + + def after_app_request(self, f: AfterRequestCallable) -> AfterRequestCallable: + """Like :meth:`Flask.after_request` but for a blueprint. Such a function + is executed after each request, even if outside of the blueprint. + """ + self.record_once( + lambda s: s.app.after_request_funcs.setdefault(None, []).append(f) + ) + return f + + def teardown_app_request(self, f: TeardownCallable) -> TeardownCallable: + """Like :meth:`Flask.teardown_request` but for a blueprint. Such a + function is executed when tearing down each request, even if outside of + the blueprint. + """ + self.record_once( + lambda s: s.app.teardown_request_funcs.setdefault(None, []).append(f) + ) + return f + + def app_context_processor( + self, f: TemplateContextProcessorCallable + ) -> TemplateContextProcessorCallable: + """Like :meth:`Flask.context_processor` but for a blueprint. Such a + function is executed each request, even if outside of the blueprint. + """ + self.record_once( + lambda s: s.app.template_context_processors.setdefault(None, []).append(f) + ) + return f + + def app_errorhandler(self, code: t.Union[t.Type[Exception], int]) -> t.Callable: + """Like :meth:`Flask.errorhandler` but for a blueprint. This + handler is used for all requests, even if outside of the blueprint. + """ + + def decorator( + f: "ErrorHandlerCallable[Exception]", + ) -> "ErrorHandlerCallable[Exception]": + self.record_once(lambda s: s.app.errorhandler(code)(f)) + return f + + return decorator + + def app_url_value_preprocessor( + self, f: URLValuePreprocessorCallable + ) -> URLValuePreprocessorCallable: + """Same as :meth:`url_value_preprocessor` but application wide.""" + self.record_once( + lambda s: s.app.url_value_preprocessors.setdefault(None, []).append(f) + ) + return f + + def app_url_defaults(self, f: URLDefaultCallable) -> URLDefaultCallable: + """Same as :meth:`url_defaults` but application wide.""" + self.record_once( + lambda s: s.app.url_default_functions.setdefault(None, []).append(f) + ) + return f diff --git a/venv/lib/python3.7/site-packages/flask/cli.py b/venv/lib/python3.7/site-packages/flask/cli.py new file mode 100644 index 0000000..7ab4fa1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/cli.py @@ -0,0 +1,998 @@ +import ast +import inspect +import os +import platform +import re +import sys +import traceback +import warnings +from functools import update_wrapper +from operator import attrgetter +from threading import Lock +from threading import Thread + +import click +from werkzeug.utils import import_string + +from .globals import current_app +from .helpers import get_debug_flag +from .helpers import get_env +from .helpers import get_load_dotenv + +try: + import dotenv +except ImportError: + dotenv = None + +try: + import ssl +except ImportError: + ssl = None # type: ignore + + +class NoAppException(click.UsageError): + """Raised if an application cannot be found or loaded.""" + + +def find_best_app(script_info, 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__!r}. Use 'FLASK_APP={module.__name__}:name'" + f" 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 = call_factory(script_info, 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!r} in module {module.__name__!r}," + " but could not call it without arguments. Use" + f" \"FLASK_APP='{module.__name__}:{attr_name}(args)'\"" + " to specify arguments." + ) from e + + raise NoAppException( + "Failed to find Flask application or factory in module" + f" {module.__name__!r}. Use 'FLASK_APP={module.__name__}:name'" + " to specify one." + ) + + +def call_factory(script_info, app_factory, args=None, kwargs=None): + """Takes an app factory, a ``script_info` object and optionally a tuple + of arguments. Checks for the existence of a script_info argument and calls + the app_factory depending on that and the arguments provided. + """ + sig = inspect.signature(app_factory) + args = [] if args is None else args + kwargs = {} if kwargs is None else kwargs + + if "script_info" in sig.parameters: + warnings.warn( + "The 'script_info' argument is deprecated and will not be" + " passed to the app factory function in Flask 2.1.", + DeprecationWarning, + ) + kwargs["script_info"] = script_info + + if not args and len(sig.parameters) == 1: + first_parameter = next(iter(sig.parameters.values())) + + if ( + first_parameter.default is inspect.Parameter.empty + # **kwargs is reported as an empty default, ignore it + and first_parameter.kind is not inspect.Parameter.VAR_KEYWORD + ): + warnings.warn( + "Script info is deprecated and will not be passed as the" + " single argument to the app factory function in Flask" + " 2.1.", + DeprecationWarning, + ) + args.append(script_info) + + return app_factory(*args, **kwargs) + + +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(script_info, 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 = None + 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 = call_factory(script_info, 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(script_info, module_name, app_name, raise_if_not_found=True): + __traceback_hide__ = True # noqa: F841 + + try: + __import__(module_name) + except ImportError as e: + # 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 raised." + ) from e + elif raise_if_not_found: + raise NoAppException(f"Could not import {module_name!r}.") from e + else: + return + + module = sys.modules[module_name] + + if app_name is None: + return find_best_app(script_info, module) + else: + return find_app_by_string(script_info, 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 DispatchingApp: + """Special application that dispatches to a Flask application which + is imported by name in a background thread. If an error happens + it is recorded and shown as part of the WSGI handling which in case + of the Werkzeug debugger means that it shows up in the browser. + """ + + def __init__(self, loader, use_eager_loading=None): + self.loader = loader + self._app = None + self._lock = Lock() + self._bg_loading_exc = None + + if use_eager_loading is None: + use_eager_loading = os.environ.get("WERKZEUG_RUN_MAIN") != "true" + + if use_eager_loading: + self._load_unlocked() + else: + self._load_in_background() + + def _load_in_background(self): + def _load_app(): + __traceback_hide__ = True # noqa: F841 + with self._lock: + try: + self._load_unlocked() + except Exception as e: + self._bg_loading_exc = e + + t = Thread(target=_load_app, args=()) + t.start() + + def _flush_bg_loading_exception(self): + __traceback_hide__ = True # noqa: F841 + exc = self._bg_loading_exc + + if exc is not None: + self._bg_loading_exc = None + raise exc + + def _load_unlocked(self): + __traceback_hide__ = True # noqa: F841 + self._app = rv = self.loader() + self._bg_loading_exc = None + return rv + + def __call__(self, environ, start_response): + __traceback_hide__ = True # noqa: F841 + if self._app is not None: + return self._app(environ, start_response) + self._flush_bg_loading_exception() + with self._lock: + if self._app is not None: + rv = self._app + else: + rv = self._load_unlocked() + return rv(environ, start_response) + + +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=None, create_app=None, set_debug_flag=True): + #: Optionally the import path for the Flask application. + self.app_import_path = app_import_path or os.environ.get("FLASK_APP") + #: 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 = {} + self.set_debug_flag = set_debug_flag + self._loaded_app = None + + def load_app(self): + """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. + """ + __traceback_hide__ = True # noqa: F841 + + if self._loaded_app is not None: + return self._loaded_app + + if self.create_app is not None: + app = call_factory(self, 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(self, import_name, name) + else: + for path in ("wsgi.py", "app.py"): + import_name = prepare_import(path) + app = locate_app(self, import_name, None, raise_if_not_found=False) + + if app: + break + + if not app: + raise NoAppException( + "Could not locate a Flask application. You did not provide " + 'the "FLASK_APP" environment variable, and a "wsgi.py" or ' + '"app.py" module was not found 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. If callbacks are registered directly + to the ``app.cli`` object then they are wrapped with this function + by default unless it's disabled. + """ + + @click.pass_context + def decorator(__ctx, *args, **kwargs): + with __ctx.ensure_object(ScriptInfo).load_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) + + +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 based on the active + environment + + .. 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=True, + create_app=None, + add_version_option=True, + load_dotenv=True, + set_debug_flag=True, + **extra, + ): + params = list(extra.pop("params", None) or ()) + + if add_version_option: + params.append(version_option) + + AppGroup.__init__(self, 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 + try: + import pkg_resources + except ImportError: + self._loaded_plugin_commands = True + return + + for ep in pkg_resources.iter_entry_points("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: + return info.load_app().cli.get_command(ctx, name) + except NoAppException as e: + click.secho(f"Error: {e.format_message()}\n", err=True, fg="red") + + 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 main(self, *args, **kwargs): + # Set a global flag that indicates that we were invoked from the + # command line interface. This is detected by Flask.run to make the + # call into a no-op. This is necessary to avoid ugly errors when the + # script that is loaded here also attempts to start a server. + os.environ["FLASK_RUN_FROM_CLI"] = "true" + + if get_load_dotenv(self.load_dotenv): + load_dotenv() + + obj = kwargs.get("obj") + + if obj is None: + obj = ScriptInfo( + create_app=self.create_app, set_debug_flag=self.set_debug_flag + ) + + kwargs["obj"] = obj + kwargs.setdefault("auto_envvar_prefix", "FLASK") + return super().main(*args, **kwargs) + + +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=None): + """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:: 1.1.0 + Returns ``False`` when python-dotenv is not installed, or when + the given path isn't a file. + + .. versionchanged:: 2.0 + When loading the env files, set the default encoding to UTF-8. + + .. versionadded:: 1.0 + """ + if dotenv is None: + 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 + + # if the given path specifies the actual file then return True, + # else False + if path is not None: + if os.path.isfile(path): + return dotenv.load_dotenv(path, encoding="utf-8") + + return False + + new_dir = None + + for name in (".env", ".flaskenv"): + path = dotenv.find_dotenv(name, usecwd=True) + + if not path: + continue + + if new_dir is None: + new_dir = os.path.dirname(path) + + dotenv.load_dotenv(path, encoding="utf-8") + + return new_dir is not None # at least one file was located and loaded + + +def show_server_banner(env, debug, app_import_path, eager_loading): + """Show extra startup messages the first time the server is run, + ignoring the reloader. + """ + if os.environ.get("WERKZEUG_RUN_MAIN") == "true": + return + + if app_import_path is not None: + message = f" * Serving Flask app {app_import_path!r}" + + if not eager_loading: + message += " (lazy loading)" + + click.echo(message) + + click.echo(f" * Environment: {env}") + + if env == "production": + click.secho( + " WARNING: This is a development server. Do not use it in" + " a production deployment.", + fg="red", + ) + click.secho(" Use a production WSGI server instead.", dim=True) + + 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): + if ssl is None: + raise click.BadParameter( + 'Using "--cert" requires Python to be compiled with SSL support.', + ctx, + param, + ) + + 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" + is_context = ssl and 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." +) +@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( + "--eager-loading/--lazy-loading", + default=None, + help="Enable or disable eager loading. By default eager " + "loading is enabled if the reloader is disabled.", +) +@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}." + ), +) +@pass_script_info +def run_command( + info, host, port, reload, debugger, eager_loading, with_threads, cert, extra_files +): + """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 if + FLASK_ENV=development or FLASK_DEBUG=1. + """ + debug = get_debug_flag() + + if reload is None: + reload = debug + + if debugger is None: + debugger = debug + + show_server_banner(get_env(), debug, info.app_import_path, eager_loading) + app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) + + from werkzeug.serving import run_simple + + run_simple( + host, + port, + app, + use_reloader=reload, + use_debugger=debugger, + threaded=with_threads, + ssl_context=cert, + extra_files=extra_files, + ) + + +@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 + from .globals import _app_ctx_stack + + app = _app_ctx_stack.top.app + banner = ( + f"Python {sys.version} on {sys.platform}\n" + f"App: {app.import_name} [{app.env}]\n" + f"Instance: {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(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( + help="""\ +A general utility script for Flask applications. + +Provides commands from Flask, extensions, and the application. Loads the +application defined in the FLASK_APP environment variable, or from a wsgi.py +file. Setting the FLASK_ENV environment variable to 'development' will enable +debug mode. + +\b + {prefix}{cmd} FLASK_APP=hello.py + {prefix}{cmd} FLASK_ENV=development + {prefix}flask run +""".format( + cmd="export" if os.name == "posix" else "set", + prefix="$ " if os.name == "posix" else "> ", + ) +) + + +def main() -> None: + if int(click.__version__[0]) < 8: + warnings.warn( + "Using the `flask` cli with Click 7 is deprecated and" + " will not be supported starting with Flask 2.1." + " Please upgrade to Click 8 as soon as possible.", + DeprecationWarning, + ) + # TODO omit sys.argv once https://github.com/pallets/click/issues/536 is fixed + cli.main(args=sys.argv[1:]) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.7/site-packages/flask/config.py b/venv/lib/python3.7/site-packages/flask/config.py new file mode 100644 index 0000000..ca76902 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/config.py @@ -0,0 +1,295 @@ +import errno +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: + dict.__init__(self, 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_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 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_json(self, filename: str, silent: bool = False) -> bool: + """Update the values in the config from a JSON file. The loaded + data is passed to the :meth:`from_mapping` method. + + :param filename: The path to the JSON file. This can be an + absolute path or relative to the config root path. + :param silent: Ignore the file if it doesn't exist. + :return: ``True`` if the file was loaded successfully. + + .. deprecated:: 2.0.0 + Will be removed in Flask 2.1. Use :meth:`from_file` instead. + This was removed early in 2.0.0, was added back in 2.0.1. + + .. versionadded:: 0.11 + """ + import warnings + from . import json + + warnings.warn( + "'from_json' is deprecated and will be removed in Flask" + " 2.1. Use 'from_file(path, json.load)' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.from_file(filename, json.load, silent=silent) + + 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/python3.7/site-packages/flask/ctx.py b/venv/lib/python3.7/site-packages/flask/ctx.py new file mode 100644 index 0000000..5c06463 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/ctx.py @@ -0,0 +1,480 @@ +import sys +import typing as t +from functools import update_wrapper +from types import TracebackType + +from werkzeug.exceptions import HTTPException + +from .globals import _app_ctx_stack +from .globals import _request_ctx_stack +from .signals import appcontext_popped +from .signals import appcontext_pushed +from .typing import AfterRequestCallable + +if t.TYPE_CHECKING: + 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: + top = _app_ctx_stack.top + if top is not None: + return f"" + return object.__repr__(self) + + +def after_this_request(f: AfterRequestCallable) -> 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 + """ + _request_ctx_stack.top._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 + """ + top = _request_ctx_stack.top + if top is None: + raise RuntimeError( + "This decorator can only be used at local scopes " + "when a request context is on the stack. For instance within " + "view functions." + ) + reqctx = top.copy() + + def wrapper(*args, **kwargs): + with reqctx: + return 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 _request_ctx_stack.top 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 _app_ctx_stack.top is not None + + +class AppContext: + """The application context binds an application object implicitly + to the current thread or greenlet, similar to how the + :class:`RequestContext` binds request information. The application + context is also implicitly created if a request context is created + but the application is not on top of the individual application + context. + """ + + def __init__(self, app: "Flask") -> None: + self.app = app + self.url_adapter = app.create_url_adapter(None) + self.g = app.app_ctx_globals_class() + + # Like request context, app contexts can be pushed multiple times + # but there a basic "refcount" is enough to track them. + self._refcnt = 0 + + def push(self) -> None: + """Binds the app context to the current context.""" + self._refcnt += 1 + _app_ctx_stack.push(self) + appcontext_pushed.send(self.app) + + def pop(self, exc: t.Optional[BaseException] = _sentinel) -> None: # type: ignore + """Pops the app context.""" + try: + self._refcnt -= 1 + if self._refcnt <= 0: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_appcontext(exc) + finally: + rv = _app_ctx_stack.pop() + assert rv is self, f"Popped wrong app context. ({rv!r} instead of {self!r})" + appcontext_popped.send(self.app) + + def __enter__(self) -> "AppContext": + self.push() + return self + + def __exit__( + self, exc_type: type, exc_value: BaseException, tb: TracebackType + ) -> None: + self.pop(exc_value) + + +class RequestContext: + """The request context contains all request relevant information. It is + created at the beginning of the request and pushed to the + `_request_ctx_stack` and removed at the end of it. 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 + for you. In debug mode the request context is kept around if + exceptions happen so that interactive debuggers have a chance to + introspect the data. With 0.4 this can also be forced for requests + that did not fail and outside of ``DEBUG`` mode. By setting + ``'flask._preserve_context'`` to ``True`` on the WSGI environment the + context will not pop itself at the end of the request. This is used by + the :meth:`~flask.Flask.test_client` for example to implement the + deferred cleanup functionality. + + You might find this helpful for unittests where you need the + information from the context local around for a little longer. Make + sure to properly :meth:`~werkzeug.LocalStack.pop` the stack yourself in + that situation, otherwise your unittests will leak memory. + """ + + 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) + self.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 = None + self.session = session + + # Request contexts can be pushed multiple times and interleaved with + # other request contexts. Now only if the last level is popped we + # get rid of them. Additionally if an application context is missing + # one is created implicitly so for each level we add this information + self._implicit_app_ctx_stack: t.List[t.Optional["AppContext"]] = [] + + # indicator if the context was preserved. Next time another context + # is pushed the preserved context is popped. + self.preserved = False + + # remembers the exception for pop if there is one in case the context + # preservation kicks in. + self._preserved_exc = None + + # 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[AfterRequestCallable] = [] + + @property + def g(self) -> AppContext: + return _app_ctx_stack.top.g + + @g.setter + def g(self, value: AppContext) -> None: + _app_ctx_stack.top.g = value + + 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: + """Binds the request context to the current context.""" + # If an exception occurs in debug mode or if context preservation is + # activated under exception situations exactly one context stays + # on the stack. The rationale is that you want to access that + # information under debug situations. However if someone forgets to + # pop that context again we want to make sure that on the next push + # it's invalidated, otherwise we run at risk that something leaks + # memory. This is usually only a problem in test suite since this + # functionality is not active in production environments. + top = _request_ctx_stack.top + if top is not None and top.preserved: + top.pop(top._preserved_exc) + + # Before we push the request context we have to ensure that there + # is an application context. + app_ctx = _app_ctx_stack.top + if app_ctx is None or app_ctx.app != self.app: + app_ctx = self.app.app_context() + app_ctx.push() + self._implicit_app_ctx_stack.append(app_ctx) + else: + self._implicit_app_ctx_stack.append(None) + + _request_ctx_stack.push(self) + + # 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. + """ + app_ctx = self._implicit_app_ctx_stack.pop() + clear_request = False + + try: + if not self._implicit_app_ctx_stack: + self.preserved = False + self._preserved_exc = None + 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() + clear_request = True + finally: + rv = _request_ctx_stack.pop() + + # 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: + rv.request.environ["werkzeug.request"] = None + + # Get rid of the app as well if necessary. + if app_ctx is not None: + app_ctx.pop(exc) + + assert ( + rv is self + ), f"Popped wrong request context. ({rv!r} instead of {self!r})" + + def auto_pop(self, exc: t.Optional[BaseException]) -> None: + if self.request.environ.get("flask._preserve_context") or ( + exc is not None and self.app.preserve_context_on_exception + ): + self.preserved = True + self._preserved_exc = exc # type: ignore + else: + self.pop(exc) + + def __enter__(self) -> "RequestContext": + self.push() + return self + + def __exit__( + self, exc_type: type, exc_value: BaseException, tb: TracebackType + ) -> None: + # do not pop the request stack if we are in debug mode and an + # exception happened. This will allow the debugger to still + # access the request object in the interactive shell. Furthermore + # the context can be force kept alive for the test client. + # See flask.testing for how this works. + self.auto_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/python3.7/site-packages/flask/debughelpers.py b/venv/lib/python3.7/site-packages/flask/debughelpers.py new file mode 100644 index 0000000..212f7d7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/debughelpers.py @@ -0,0 +1,172 @@ +import os +import typing as t +from warnings import warn + +from .app import Flask +from .blueprints import Blueprint +from .globals import _request_ctx_stack + + +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 by Flask in debug mode if it detects a + redirect caused by the routing system when the request method is not + GET, HEAD or OPTIONS. Reasoning: form data will be dropped. + """ + + def __init__(self, request): + exc = request.routing_exception + buf = [ + f"A request was sent to this URL ({request.url}) but a" + " redirect was issued automatically by the routing system" + f" to {exc.new_url!r}." + ] + + # In case just a slash was appended we can be extra helpful + if f"{request.base_url}/" == exc.new_url.split("?")[0]: + buf.append( + " The URL was defined with a trailing slash so Flask" + " will automatically redirect to the URL with the" + " trailing slash if it was accessed without one." + ) + + buf.append( + " Make sure to directly send your" + f" {request.method}-request to this URL since we can't make" + " browsers or HTTP clients redirect with form data reliably" + " or without user interaction." + ) + buf.append("\n\nNote: this exception is only raised in debug mode") + AssertionError.__init__(self, "".join(buf).encode("utf-8")) + + +def attach_enctype_error_multidict(request): + """Since Flask 0.8 we're monkeypatching the files object in case a + request is detected that does not use multipart form data but the files + object is accessed. + """ + oldcls = request.files.__class__ + + class newcls(oldcls): + def __getitem__(self, key): + try: + return oldcls.__getitem__(self, key) + except KeyError as e: + if key not in request.form: + raise + + raise DebugFilesKeyError(request, key) from e + + 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 + reqctx = _request_ctx_stack.top + if reqctx is not None and reqctx.request.blueprint is not None: + blueprint = reqctx.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)) + + +def explain_ignored_app_run() -> None: + if os.environ.get("WERKZEUG_RUN_MAIN") != "true": + warn( + Warning( + "Silently ignoring app.run() because the application is" + " run from the flask command line executable. Consider" + ' putting app.run() behind an if __name__ == "__main__"' + " guard to silence this warning." + ), + stacklevel=3, + ) diff --git a/venv/lib/python3.7/site-packages/flask/globals.py b/venv/lib/python3.7/site-packages/flask/globals.py new file mode 100644 index 0000000..6d91c75 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/globals.py @@ -0,0 +1,59 @@ +import typing as t +from functools import partial + +from werkzeug.local import LocalProxy +from werkzeug.local import LocalStack + +if t.TYPE_CHECKING: + from .app import Flask + from .ctx import _AppCtxGlobals + from .sessions import SessionMixin + from .wrappers import Request + +_request_ctx_err_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.\ +""" +_app_ctx_err_msg = """\ +Working outside of application context. + +This typically means that you attempted to use functionality that needed +to interface with the current application object in some way. To solve +this, set up an application context with app.app_context(). See the +documentation for more information.\ +""" + + +def _lookup_req_object(name): + top = _request_ctx_stack.top + if top is None: + raise RuntimeError(_request_ctx_err_msg) + return getattr(top, name) + + +def _lookup_app_object(name): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError(_app_ctx_err_msg) + return getattr(top, name) + + +def _find_app(): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError(_app_ctx_err_msg) + return top.app + + +# context locals +_request_ctx_stack = LocalStack() +_app_ctx_stack = LocalStack() +current_app: "Flask" = LocalProxy(_find_app) # type: ignore +request: "Request" = LocalProxy(partial(_lookup_req_object, "request")) # type: ignore +session: "SessionMixin" = LocalProxy( # type: ignore + partial(_lookup_req_object, "session") +) +g: "_AppCtxGlobals" = LocalProxy(partial(_lookup_app_object, "g")) # type: ignore diff --git a/venv/lib/python3.7/site-packages/flask/helpers.py b/venv/lib/python3.7/site-packages/flask/helpers.py new file mode 100644 index 0000000..7b8b087 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/helpers.py @@ -0,0 +1,836 @@ +import os +import pkgutil +import socket +import sys +import typing as t +import warnings +from datetime import datetime +from datetime import timedelta +from functools import lru_cache +from functools import update_wrapper +from threading import RLock + +import werkzeug.utils +from werkzeug.exceptions import NotFound +from werkzeug.routing import BuildError +from werkzeug.urls import url_quote + +from .globals import _app_ctx_stack +from .globals import _request_ctx_stack +from .globals import current_app +from .globals import request +from .globals import session +from .signals import message_flashed + +if t.TYPE_CHECKING: + from .wrappers import Response + + +def get_env() -> str: + """Get the environment the app is running in, indicated by the + :envvar:`FLASK_ENV` environment variable. The default is + ``'production'``. + """ + 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 + ``True`` if :func:`.get_env` returns ``'development'``, or ``False`` + otherwise. + """ + val = os.environ.get("FLASK_DEBUG") + + if not val: + return get_env() == "development" + + return val.lower() not in ("0", "false", "no") + + +def get_load_dotenv(default: bool = True) -> bool: + """Get whether the user has disabled loading 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 = _request_ctx_stack.top + if ctx is None: + raise RuntimeError( + "Attempted to stream with context but " + "there was no context in the first place to keep around." + ) + 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() # type: ignore + + # 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) + + +def url_for(endpoint: str, **values: t.Any) -> str: + """Generates a URL to the given endpoint with the method provided. + + Variable arguments that are unknown to the target endpoint are appended + to the generated URL as query arguments. If the value of a query argument + is ``None``, the whole pair is skipped. In case blueprints are active + you can shortcut references to the same blueprint by prefixing the + local endpoint with a dot (``.``). + + This will reference the index function local to the current blueprint:: + + url_for('.index') + + See :ref:`url-building`. + + Configuration values ``APPLICATION_ROOT`` and ``SERVER_NAME`` are only used when + generating URLs outside of a request context. + + To integrate applications, :class:`Flask` has a hook to intercept URL build + errors through :attr:`Flask.url_build_error_handlers`. The `url_for` + function results in a :exc:`~werkzeug.routing.BuildError` when the current + app does not have a URL for the given endpoint and values. When it does, the + :data:`~flask.current_app` calls its :attr:`~Flask.url_build_error_handlers` if + it is not ``None``, which can return a string to use as the result of + `url_for` (instead of `url_for`'s default to raise the + :exc:`~werkzeug.routing.BuildError` exception) or re-raise the exception. + An example:: + + def external_url_handler(error, endpoint, values): + "Looks up an external URL when `url_for` cannot build a URL." + # This is an example of hooking the build_error_handler. + # Here, lookup_url is some utility function you've built + # which looks up the endpoint in some external URL registry. + url = lookup_url(endpoint, **values) + if url is None: + # External lookup did not have a URL. + # Re-raise the BuildError, in context of original traceback. + exc_type, exc_value, tb = sys.exc_info() + if exc_value is error: + raise exc_type(exc_value).with_traceback(tb) + else: + raise error + # url_for will use this result, instead of raising BuildError. + return url + + app.url_build_error_handlers.append(external_url_handler) + + Here, `error` is the instance of :exc:`~werkzeug.routing.BuildError`, and + `endpoint` and `values` are the arguments passed into `url_for`. Note + that this is for building URLs outside the current application, and not for + handling 404 NotFound errors. + + .. versionadded:: 0.10 + The `_scheme` parameter was added. + + .. versionadded:: 0.9 + The `_anchor` and `_method` parameters were added. + + .. versionadded:: 0.9 + Calls :meth:`Flask.handle_build_error` on + :exc:`~werkzeug.routing.BuildError`. + + :param endpoint: the endpoint of the URL (name of the function) + :param values: the variable arguments of the URL rule + :param _external: if set to ``True``, an absolute URL is generated. Server + address can be changed via ``SERVER_NAME`` configuration variable which + falls back to the `Host` header, then to the IP and port of the request. + :param _scheme: a string specifying the desired URL scheme. The `_external` + parameter must be set to ``True`` or a :exc:`ValueError` is raised. The default + behavior uses the same scheme as the current request, or + :data:`PREFERRED_URL_SCHEME` if no request context is available. + This also can be set to an empty string to build protocol-relative + URLs. + :param _anchor: if provided this is added as anchor to the URL. + :param _method: if provided this explicitly specifies an HTTP method. + """ + appctx = _app_ctx_stack.top + reqctx = _request_ctx_stack.top + + if appctx is None: + raise RuntimeError( + "Attempted to generate a URL without the application context being" + " pushed. This has to be executed when application context is" + " available." + ) + + # If request specific information is available we have some extra + # features that support "relative" URLs. + if reqctx is not None: + url_adapter = reqctx.url_adapter + blueprint_name = request.blueprint + + if endpoint[:1] == ".": + if blueprint_name is not None: + endpoint = f"{blueprint_name}{endpoint}" + else: + endpoint = endpoint[1:] + + external = values.pop("_external", False) + + # Otherwise go with the url adapter from the appctx and make + # the URLs external by default. + else: + url_adapter = appctx.url_adapter + + if url_adapter is None: + raise RuntimeError( + "Application was not able to create a URL adapter for request" + " independent URL generation. You might be able to fix this by" + " setting the SERVER_NAME config variable." + ) + + external = values.pop("_external", True) + + anchor = values.pop("_anchor", None) + method = values.pop("_method", None) + scheme = values.pop("_scheme", None) + appctx.app.inject_url_defaults(endpoint, values) + + # This is not the best way to deal with this but currently the + # underlying Werkzeug router does not support overriding the scheme on + # a per build call basis. + old_scheme = None + if scheme is not None: + if not external: + raise ValueError("When specifying _scheme, _external must be True") + old_scheme = url_adapter.url_scheme + url_adapter.url_scheme = scheme + + try: + try: + rv = url_adapter.build( + endpoint, values, method=method, force_external=external + ) + finally: + if old_scheme is not None: + url_adapter.url_scheme = old_scheme + except BuildError as error: + # We need to inject the values again so that the app callback can + # deal with that sort of stuff. + values["_external"] = external + values["_anchor"] = anchor + values["_method"] = method + values["_scheme"] = scheme + return appctx.app.handle_url_build_error(error, endpoint, values) + + if anchor is not None: + rv += f"#{url_quote(anchor)}" + return rv + + +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_stack.top.flashes + if flashes is None: + _request_ctx_stack.top.flashes = flashes = ( + session.pop("_flashes") if "_flashes" in session else [] + ) + 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( + download_name: t.Optional[str] = None, + attachment_filename: t.Optional[str] = None, + etag: t.Optional[t.Union[bool, str]] = None, + add_etags: t.Optional[t.Union[bool]] = None, + max_age: t.Optional[ + t.Union[int, t.Callable[[t.Optional[str]], t.Optional[int]]] + ] = None, + cache_timeout: t.Optional[int] = None, + **kwargs: t.Any, +) -> t.Dict[str, t.Any]: + if attachment_filename is not None: + warnings.warn( + "The 'attachment_filename' parameter has been renamed to" + " 'download_name'. The old name will be removed in Flask" + " 2.1.", + DeprecationWarning, + stacklevel=3, + ) + download_name = attachment_filename + + if cache_timeout is not None: + warnings.warn( + "The 'cache_timeout' parameter has been renamed to" + " 'max_age'. The old name will be removed in Flask 2.1.", + DeprecationWarning, + stacklevel=3, + ) + max_age = cache_timeout + + if add_etags is not None: + warnings.warn( + "The 'add_etags' parameter has been renamed to 'etag'. The" + " old name will be removed in Flask 2.1.", + DeprecationWarning, + stacklevel=3, + ) + etag = add_etags + + if max_age is None: + max_age = current_app.get_send_file_max_age + + kwargs.update( + environ=request.environ, + download_name=download_name, + etag=etag, + max_age=max_age, + use_x_sendfile=current_app.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, + attachment_filename: t.Optional[str] = None, + conditional: bool = True, + etag: t.Union[bool, str] = True, + add_etags: t.Optional[bool] = None, + 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, + cache_timeout: t.Optional[int] = None, +): + """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( + **_prepare_send_file_kwargs( + path_or_file=path_or_file, + environ=request.environ, + mimetype=mimetype, + as_attachment=as_attachment, + download_name=download_name, + attachment_filename=attachment_filename, + conditional=conditional, + etag=etag, + add_etags=add_etags, + last_modified=last_modified, + max_age=max_age, + cache_timeout=cache_timeout, + ) + ) + + +def safe_join(directory: str, *pathnames: str) -> 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``. + """ + warnings.warn( + "'flask.helpers.safe_join' is deprecated and will be removed in" + " Flask 2.1. Use 'werkzeug.utils.safe_join' instead.", + DeprecationWarning, + stacklevel=2, + ) + path = werkzeug.utils.safe_join(directory, *pathnames) + + if path is None: + raise NotFound() + + return path + + +def send_from_directory( + directory: t.Union[os.PathLike, str], + path: t.Union[os.PathLike, str], + filename: t.Optional[str] = None, + **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. + :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 + """ + if filename is not None: + warnings.warn( + "The 'filename' parameter has been renamed to 'path'. The" + " old name will be removed in Flask 2.1.", + DeprecationWarning, + stacklevel=2, + ) + path = filename + + return werkzeug.utils.send_from_directory( # type: ignore + 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__"): + 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) # type: ignore + 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 total_seconds(td: timedelta) -> int: + """Returns the total seconds from a timedelta object. + + :param timedelta td: the timedelta to be converted in seconds + + :returns: number of seconds + :rtype: int + + .. deprecated:: 2.0 + Will be removed in Flask 2.1. Use + :meth:`timedelta.total_seconds` instead. + """ + warnings.warn( + "'total_seconds' is deprecated and will be removed in Flask" + " 2.1. Use 'timedelta.total_seconds' instead.", + DeprecationWarning, + stacklevel=2, + ) + return td.days * 60 * 60 * 24 + td.seconds + + +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/python3.7/site-packages/flask/json/__init__.py b/venv/lib/python3.7/site-packages/flask/json/__init__.py new file mode 100644 index 0000000..10d5123 --- /dev/null +++ b/venv/lib/python3.7/site-packages/flask/json/__init__.py @@ -0,0 +1,357 @@ +import decimal +import io +import json as _json +import typing as t +import uuid +import warnings +from datetime import date + +from jinja2.utils import htmlsafe_json_dumps as _jinja_htmlsafe_dumps +from werkzeug.http import http_date + +from ..globals import current_app +from ..globals import request + +if t.TYPE_CHECKING: + from ..app import Flask + from ..wrappers import Response + +try: + import dataclasses +except ImportError: + # Python < 3.7 + dataclasses = None # type: ignore + + +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:`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. + """ + + 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. + """ + if isinstance(o, date): + return http_date(o) + if isinstance(o, (decimal.Decimal, uuid.UUID)): + return str(o) + if dataclasses and dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + if hasattr(o, "__html__"): + return str(o.__html__()) + return super().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. + """ + + +def _dump_arg_defaults( + kwargs: t.Dict[str, t.Any], app: t.Optional["Flask"] = None +) -> None: + """Inject default arguments for dump functions.""" + if app is None: + app = current_app + + if app: + cls = app.json_encoder + bp = app.blueprints.get(request.blueprint) if request else None # type: ignore + if bp is not None and bp.json_encoder is not None: + cls = bp.json_encoder + + kwargs.setdefault("cls", cls) + kwargs.setdefault("ensure_ascii", app.config["JSON_AS_ASCII"]) + kwargs.setdefault("sort_keys", app.config["JSON_SORT_KEYS"]) + else: + kwargs.setdefault("sort_keys", True) + kwargs.setdefault("cls", JSONEncoder) + + +def _load_arg_defaults( + kwargs: t.Dict[str, t.Any], app: t.Optional["Flask"] = None +) -> None: + """Inject default arguments for load functions.""" + if app is None: + app = current_app + + if app: + cls = app.json_decoder + bp = app.blueprints.get(request.blueprint) if request else None # type: ignore + if bp is not None and bp.json_decoder is not None: + cls = bp.json_decoder + + kwargs.setdefault("cls", cls) + else: + kwargs.setdefault("cls", JSONDecoder) + + +def dumps(obj: t.Any, app: t.Optional["Flask"] = None, **kwargs: t.Any) -> str: + """Serialize an object to a string of JSON. + + Takes the same arguments as the built-in :func:`json.dumps`, with + some defaults from application configuration. + + :param obj: Object to serialize to JSON. + :param app: Use this app's config instead of the active app context + or defaults. + :param kwargs: Extra arguments passed to :func:`json.dumps`. + + .. versionchanged:: 2.0.2 + :class:`decimal.Decimal` is supported by converting to a string. + + .. versionchanged:: 2.0 + ``encoding`` is deprecated and will be removed in Flask 2.1. + + .. versionchanged:: 1.0.3 + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + _dump_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + rv = _json.dumps(obj, **kwargs) + + if encoding is not None: + warnings.warn( + "'encoding' is deprecated and will be removed in Flask 2.1.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(rv, str): + return rv.encode(encoding) # type: ignore + + return rv + + +def dump( + obj: t.Any, fp: t.IO[str], app: t.Optional["Flask"] = None, **kwargs: t.Any +) -> None: + """Serialize an object to JSON written to a file object. + + Takes the same arguments as the built-in :func:`json.dump`, with + some defaults from application configuration. + + :param obj: Object to serialize to JSON. + :param fp: File object to write JSON to. + :param app: Use this app's config instead of the active app context + or defaults. + :param kwargs: Extra arguments passed to :func:`json.dump`. + + .. versionchanged:: 2.0 + Writing to a binary file, and the ``encoding`` argument, is + deprecated and will be removed in Flask 2.1. + """ + _dump_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + show_warning = encoding is not None + + try: + fp.write("") + except TypeError: + show_warning = True + fp = io.TextIOWrapper(fp, encoding or "utf-8") # type: ignore + + if show_warning: + warnings.warn( + "Writing to a binary file, and the 'encoding' argument, is" + " deprecated and will be removed in Flask 2.1.", + DeprecationWarning, + stacklevel=2, + ) + + _json.dump(obj, fp, **kwargs) + + +def loads(s: str, app: t.Optional["Flask"] = None, **kwargs: t.Any) -> t.Any: + """Deserialize an object from a string of JSON. + + Takes the same arguments as the built-in :func:`json.loads`, with + some defaults from application configuration. + + :param s: JSON string to deserialize. + :param app: Use this app's config instead of the active app context + or defaults. + :param kwargs: Extra arguments passed to :func:`json.loads`. + + .. versionchanged:: 2.0 + ``encoding`` is deprecated and 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. + """ + _load_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + + if encoding is not None: + warnings.warn( + "'encoding' is deprecated and will be removed in Flask 2.1." + " The data must be a string or UTF-8 bytes.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(s, bytes): + s = s.decode(encoding) + + return _json.loads(s, **kwargs) + + +def load(fp: t.IO[str], app: t.Optional["Flask"] = None, **kwargs: t.Any) -> t.Any: + """Deserialize an object from JSON read from a file object. + + Takes the same arguments as the built-in :func:`json.load`, with + some defaults from application configuration. + + :param fp: File object to read JSON from. + :param app: Use this app's config instead of the active app context + or defaults. + :param kwargs: Extra arguments passed to :func:`json.load`. + + .. versionchanged:: 2.0 + ``encoding`` is deprecated and will be removed in Flask 2.1. The + file must be text mode, or binary mode with UTF-8 bytes. + """ + _load_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + + if encoding is not None: + warnings.warn( + "'encoding' is deprecated and will be removed in Flask 2.1." + " The file must be text mode, or binary mode with UTF-8" + " bytes.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(fp.read(0), bytes): + fp = io.TextIOWrapper(fp, encoding) # type: ignore + + 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 + `` + + + +
    +""" +FOOTER = """\ + +
    + +
    +
    +

    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
    +
    +""" + +SOURCE_LINE_HTML = """\ + + %(lineno)s + %(code)s + +""" + + +def render_console_html(secret: str, evalex_trusted: bool = True) -> str: + return CONSOLE_HTML % { + "evalex": "true", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "true", + "title": "Console", + "secret": secret, + "traceback_id": -1, + } + + +def get_current_traceback( + ignore_system_exceptions: bool = False, + show_hidden_frames: bool = False, + skip: int = 0, +) -> "Traceback": + """Get the current exception info as `Traceback` object. Per default + calling this method will reraise system exceptions such as generator exit, + system exit or others. This behavior can be disabled by passing `False` + to the function as first parameter. + """ + info = t.cast( + t.Tuple[t.Type[BaseException], BaseException, TracebackType], sys.exc_info() + ) + exc_type, exc_value, tb = info + + if ignore_system_exceptions and exc_type in { + SystemExit, + KeyboardInterrupt, + GeneratorExit, + }: + raise + for _ in range(skip): + if tb.tb_next is None: + break + tb = tb.tb_next + tb = Traceback(exc_type, exc_value, tb) + if not show_hidden_frames: + tb.filter_hidden_frames() + return tb + + +class Line: + """Helper for the source renderer.""" + + __slots__ = ("lineno", "code", "in_frame", "current") + + def __init__(self, lineno: int, code: str) -> None: + self.lineno = lineno + self.code = code + self.in_frame = False + self.current = False + + @property + def classes(self) -> t.List[str]: + rv = ["line"] + if self.in_frame: + rv.append("in-frame") + if self.current: + rv.append("current") + return rv + + def render(self) -> str: + return SOURCE_LINE_HTML % { + "classes": " ".join(self.classes), + "lineno": self.lineno, + "code": escape(self.code), + } + + +class Traceback: + """Wraps a traceback.""" + + def __init__( + self, + exc_type: t.Type[BaseException], + exc_value: BaseException, + tb: TracebackType, + ) -> None: + self.exc_type = exc_type + self.exc_value = exc_value + self.tb = tb + + exception_type = exc_type.__name__ + if exc_type.__module__ not in {"builtins", "__builtin__", "exceptions"}: + exception_type = f"{exc_type.__module__}.{exception_type}" + self.exception_type = exception_type + + self.groups = [] + memo = set() + while True: + self.groups.append(Group(exc_type, exc_value, tb)) + memo.add(id(exc_value)) + exc_value = exc_value.__cause__ or exc_value.__context__ # type: ignore + if exc_value is None or id(exc_value) in memo: + break + exc_type = type(exc_value) + tb = exc_value.__traceback__ # type: ignore + self.groups.reverse() + self.frames = [frame for group in self.groups for frame in group.frames] + + def filter_hidden_frames(self) -> None: + """Remove the frames according to the paste spec.""" + for group in self.groups: + group.filter_hidden_frames() + + self.frames[:] = [frame for group in self.groups for frame in group.frames] + + @property + def is_syntax_error(self) -> bool: + """Is it a syntax error?""" + return isinstance(self.exc_value, SyntaxError) + + @property + def exception(self) -> str: + """String representation of the final exception.""" + return self.groups[-1].exception + + def log(self, logfile: t.Optional[t.IO[str]] = None) -> None: + """Log the ASCII traceback into a file object.""" + if logfile is None: + logfile = sys.stderr + tb = f"{self.plaintext.rstrip()}\n" + logfile.write(tb) + + def render_summary(self, include_title: bool = True) -> str: + """Render the traceback for the interactive console.""" + title = "" + classes = ["traceback"] + if not self.frames: + classes.append("noframe-traceback") + frames = [] + else: + library_frames = sum(frame.is_library for frame in self.frames) + mark_lib = 0 < library_frames < len(self.frames) + frames = [group.render(mark_lib=mark_lib) for group in self.groups] + + if include_title: + if self.is_syntax_error: + title = "Syntax Error" + else: + title = "Traceback (most recent call last):" + + if self.is_syntax_error: + description = f"
    {escape(self.exception)}
    " + else: + description = f"
    {escape(self.exception)}
    " + + return SUMMARY_HTML % { + "classes": " ".join(classes), + "title": f"

    {title if title else ''}

    ", + "frames": "\n".join(frames), + "description": description, + } + + def render_full( + self, + evalex: bool = False, + secret: t.Optional[str] = None, + evalex_trusted: bool = True, + ) -> str: + """Render the Full HTML page with the traceback info.""" + exc = escape(self.exception) + return PAGE_HTML % { + "evalex": "true" if evalex else "false", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "false", + "title": exc, + "exception": exc, + "exception_type": escape(self.exception_type), + "summary": self.render_summary(include_title=False), + "plaintext": escape(self.plaintext), + "plaintext_cs": re.sub("-{2,}", "-", self.plaintext), + "traceback_id": self.id, + "secret": secret, + } + + @cached_property + def plaintext(self) -> str: + return "\n".join([group.render_text() for group in self.groups]) + + @property + def id(self) -> int: + return id(self) + + +class Group: + """A group of frames for an exception in a traceback. If the + exception has a ``__cause__`` or ``__context__``, there are multiple + exception groups. + """ + + def __init__( + self, + exc_type: t.Type[BaseException], + exc_value: BaseException, + tb: TracebackType, + ) -> None: + self.exc_type = exc_type + self.exc_value = exc_value + self.info = None + if exc_value.__cause__ is not None: + self.info = ( + "The above exception was the direct cause of the following exception" + ) + elif exc_value.__context__ is not None: + self.info = ( + "During handling of the above exception, another exception occurred" + ) + + self.frames = [] + while tb is not None: + self.frames.append(Frame(exc_type, exc_value, tb)) + tb = tb.tb_next # type: ignore + + def filter_hidden_frames(self) -> None: + # An exception may not have a traceback to filter frames, such + # as one re-raised from ProcessPoolExecutor. + if not self.frames: + return + + new_frames: t.List[Frame] = [] + hidden = False + + for frame in self.frames: + hide = frame.hide + if hide in ("before", "before_and_this"): + new_frames = [] + hidden = False + if hide == "before_and_this": + continue + elif hide in ("reset", "reset_and_this"): + hidden = False + if hide == "reset_and_this": + continue + elif hide in ("after", "after_and_this"): + hidden = True + if hide == "after_and_this": + continue + elif hide or hidden: + continue + new_frames.append(frame) + + # if we only have one frame and that frame is from the codeop + # module, remove it. + if len(new_frames) == 1 and self.frames[0].module == "codeop": + del self.frames[:] + + # if the last frame is missing something went terrible wrong :( + elif self.frames[-1] in new_frames: + self.frames[:] = new_frames + + @property + def exception(self) -> str: + """String representation of the exception.""" + buf = traceback.format_exception_only(self.exc_type, self.exc_value) + rv = "".join(buf).strip() + return _to_str(rv, "utf-8", "replace") + + def render(self, mark_lib: bool = True) -> str: + out = [] + if self.info is not None: + out.append(f'
  • {self.info}:
    ') + for frame in self.frames: + title = f' title="{escape(frame.info)}"' if frame.info else "" + out.append(f"{frame.render(mark_lib=mark_lib)}") + return "\n".join(out) + + def render_text(self) -> str: + out = [] + if self.info is not None: + out.append(f"\n{self.info}:\n") + out.append("Traceback (most recent call last):") + for frame in self.frames: + out.append(frame.render_text()) + out.append(self.exception) + return "\n".join(out) + + +class Frame: + """A single frame in a traceback.""" + + def __init__( + self, + exc_type: t.Type[BaseException], + exc_value: BaseException, + tb: TracebackType, + ) -> None: + self.lineno = tb.tb_lineno + self.function_name = tb.tb_frame.f_code.co_name + self.locals = tb.tb_frame.f_locals + self.globals = tb.tb_frame.f_globals + + fn = inspect.getsourcefile(tb) or inspect.getfile(tb) + if fn[-4:] in (".pyo", ".pyc"): + fn = fn[:-1] + # if it's a file on the file system resolve the real filename. + if os.path.isfile(fn): + fn = os.path.realpath(fn) + self.filename = _to_str(fn, get_filesystem_encoding()) + self.module = self.globals.get("__name__", self.locals.get("__name__")) + self.loader = self.globals.get("__loader__", self.locals.get("__loader__")) + self.code = tb.tb_frame.f_code + + # support for paste's traceback extensions + self.hide = self.locals.get("__traceback_hide__", False) + info = self.locals.get("__traceback_info__") + if info is not None: + info = _to_str(info, "utf-8", "replace") + self.info = info + + def render(self, mark_lib: bool = True) -> str: + """Render a single frame in a traceback.""" + return FRAME_HTML % { + "id": self.id, + "filename": escape(self.filename), + "lineno": self.lineno, + "function_name": escape(self.function_name), + "lines": self.render_line_context(), + "library": "library" if mark_lib and self.is_library else "", + } + + @cached_property + def is_library(self) -> bool: + return any( + self.filename.startswith(os.path.realpath(path)) + for path in sysconfig.get_paths().values() + ) + + def render_text(self) -> str: + return ( + f' File "{self.filename}", line {self.lineno}, in {self.function_name}\n' + f" {self.current_line.strip()}" + ) + + def render_line_context(self) -> str: + before, current, after = self.get_context_lines() + rv = [] + + def render_line(line: str, cls: str) -> None: + line = line.expandtabs().rstrip() + stripped_line = line.strip() + prefix = len(line) - len(stripped_line) + rv.append( + f'
    {" " * prefix}'
    +                f"{escape(stripped_line) if stripped_line else ' '}
    " + ) + + for line in before: + render_line(line, "before") + render_line(current, "current") + for line in after: + render_line(line, "after") + + return "\n".join(rv) + + def get_annotated_lines(self) -> t.List[Line]: + """Helper function that returns lines with extra information.""" + lines = [Line(idx + 1, x) for idx, x in enumerate(self.sourcelines)] + + # find function definition and mark lines + if hasattr(self.code, "co_firstlineno"): + lineno = self.code.co_firstlineno - 1 + while lineno > 0: + if _funcdef_re.match(lines[lineno].code): + break + lineno -= 1 + try: + offset = len(inspect.getblock([f"{x.code}\n" for x in lines[lineno:]])) + except TokenError: + offset = 0 + for line in lines[lineno : lineno + offset]: + line.in_frame = True + + # mark current line + try: + lines[self.lineno - 1].current = True + except IndexError: + pass + + return lines + + def eval(self, code: t.Union[str, CodeType], mode: str = "single") -> t.Any: + """Evaluate code in the context of the frame.""" + if isinstance(code, str): + code = compile(code, "", mode) + return eval(code, self.globals, self.locals) + + @cached_property + def sourcelines(self) -> t.List[str]: + """The sourcecode of the file as list of strings.""" + # get sourcecode from loader or file + source = None + if self.loader is not None: + try: + if hasattr(self.loader, "get_source"): + source = self.loader.get_source(self.module) + elif hasattr(self.loader, "get_source_by_code"): + source = self.loader.get_source_by_code(self.code) + except Exception: + # we munch the exception so that we don't cause troubles + # if the loader is broken. + pass + + if source is None: + try: + with open(self.filename, mode="rb") as f: + source = f.read() + except OSError: + return [] + + # already str? return right away + if isinstance(source, str): + return source.splitlines() + + charset = "utf-8" + if source.startswith(codecs.BOM_UTF8): + source = source[3:] + else: + for idx, match in enumerate(_line_re.finditer(source)): + coding_match = _coding_re.search(match.group()) + if coding_match is not None: + charset = coding_match.group(1).decode("utf-8") + break + if idx > 1: + break + + # on broken cookies we fall back to utf-8 too + charset = _to_str(charset) + try: + codecs.lookup(charset) + except LookupError: + charset = "utf-8" + + return source.decode(charset, "replace").splitlines() + + def get_context_lines( + self, context: int = 5 + ) -> t.Tuple[t.List[str], str, t.List[str]]: + before = self.sourcelines[self.lineno - context - 1 : self.lineno - 1] + past = self.sourcelines[self.lineno : self.lineno + context] + return (before, self.current_line, past) + + @property + def current_line(self) -> str: + try: + return self.sourcelines[self.lineno - 1] + except IndexError: + return "" + + @cached_property + def console(self) -> Console: + return Console(self.globals, self.locals) + + @property + def id(self) -> int: + return id(self) diff --git a/venv/lib/python3.7/site-packages/werkzeug/exceptions.py b/venv/lib/python3.7/site-packages/werkzeug/exceptions.py new file mode 100644 index 0000000..16c3964 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/exceptions.py @@ -0,0 +1,943 @@ +"""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 sys +import typing as t +import warnings +from datetime import datetime +from html import escape + +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.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. + """ + + 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 + + @classmethod + def wrap( + cls, exception: t.Type[BaseException], name: t.Optional[str] = None + ) -> t.Type["HTTPException"]: + """Create an exception that is a subclass of the calling HTTP + exception and the ``exception`` argument. + + The first argument to the class will be passed to the + wrapped ``exception``, the rest to the HTTP exception. If + ``e.args`` is not empty and ``e.show_exception`` is ``True``, + the wrapped exception message is added to the HTTP error + description. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Create a subclass manually + instead. + + .. versionchanged:: 0.15.5 + The ``show_exception`` attribute controls whether the + description includes the wrapped exception message. + + .. versionchanged:: 0.15.0 + The description includes the wrapped exception message. + """ + warnings.warn( + "'HTTPException.wrap' is deprecated and will be removed in" + " Werkzeug 2.1. Create a subclass manually instead.", + DeprecationWarning, + stacklevel=2, + ) + + class newcls(cls, exception): # type: ignore + _description = cls.description + show_exception = False + + def __init__( + self, arg: t.Optional[t.Any] = None, *args: t.Any, **kwargs: t.Any + ) -> None: + super().__init__(*args, **kwargs) + + if arg is None: + exception.__init__(self) + else: + exception.__init__(self, arg) + + @property + def description(self) -> str: + if self.show_exception: + return ( + f"{self._description}\n" + f"{exception.__name__}: {exception.__str__(self)}" + ) + + return self._description # type: ignore + + @description.setter + def description(self, value: str) -> None: + self._description = value + + newcls.__module__ = sys._getframe(1).f_globals["__name__"] + name = name or cls.__name__ + exception.__name__ + newcls.__name__ = newcls.__qualname__ = name + return newcls + + @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", "
    ") + return f"

    {description}

    " + + def get_body( + self, + environ: t.Optional["WSGIEnvironment"] = None, + scope: t.Optional[dict] = None, + ) -> str: + """Get the HTML body.""" + return ( + '\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["WSGIEnvironment"] = 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: # type: ignore + 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/python3.7/site-packages/werkzeug/filesystem.py b/venv/lib/python3.7/site-packages/werkzeug/filesystem.py new file mode 100644 index 0000000..36a3d12 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/filesystem.py @@ -0,0 +1,55 @@ +import codecs +import sys +import typing as t +import warnings + +# We do not trust traditional unixes. +has_likely_buggy_unicode_filesystem = ( + sys.platform.startswith("linux") or "bsd" in sys.platform +) + + +def _is_ascii_encoding(encoding: t.Optional[str]) -> bool: + """Given an encoding this figures out if the encoding is actually ASCII (which + is something we don't actually want in most cases). This is necessary + because ASCII comes under many names such as ANSI_X3.4-1968. + """ + if encoding is None: + return False + try: + return codecs.lookup(encoding).name == "ascii" + except LookupError: + return False + + +class BrokenFilesystemWarning(RuntimeWarning, UnicodeWarning): + """The warning used by Werkzeug to signal a broken filesystem. Will only be + used once per runtime.""" + + +_warned_about_filesystem_encoding = False + + +def get_filesystem_encoding() -> str: + """Returns the filesystem encoding that should be used. Note that this is + different from the Python understanding of the filesystem encoding which + might be deeply flawed. Do not use this value against Python's string APIs + because it might be different. See :ref:`filesystem-encoding` for the exact + behavior. + + The concept of a filesystem encoding in generally is not something you + should rely on. As such if you ever need to use this function except for + writing wrapper code reconsider. + """ + global _warned_about_filesystem_encoding + rv = sys.getfilesystemencoding() + if has_likely_buggy_unicode_filesystem and not rv or _is_ascii_encoding(rv): + if not _warned_about_filesystem_encoding: + warnings.warn( + "Detected a misconfigured UNIX filesystem: Will use" + f" UTF-8 as filesystem encoding instead of {rv!r}", + BrokenFilesystemWarning, + ) + _warned_about_filesystem_encoding = True + return "utf-8" + return rv diff --git a/venv/lib/python3.7/site-packages/werkzeug/formparser.py b/venv/lib/python3.7/site-packages/werkzeug/formparser.py new file mode 100644 index 0000000..6cb758f --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/formparser.py @@ -0,0 +1,495 @@ +import typing as t +import warnings +from functools import update_wrapper +from io import BytesIO +from itertools import chain +from typing import Union + +from . import exceptions +from ._internal import _to_str +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. + """ + + 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, + ) -> 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 + + 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, + ) + 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 + + +def parse_multipart_headers(iterable: t.Iterable[bytes]) -> Headers: + """Parses multipart headers from an iterable that yields lines (including + the trailing newline symbol). The iterable has to be newline terminated. + The iterable will stop at the line where the headers ended so it can be + further consumed. + :param iterable: iterable of strings that are newline terminated + """ + warnings.warn( + "'parse_multipart_headers' is deprecated and will be removed in" + " Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + result: t.List[t.Tuple[str, str]] = [] + + for b_line in iterable: + line = _to_str(b_line) + line, line_terminated = _line_parse(line) + + if not line_terminated: + raise ValueError("unexpected end of line in multipart header") + + if not line: + break + elif line[0] in " \t" and result: + key, value = result[-1] + result[-1] = (key, f"{value}\n {line[1:]}") + else: + parts = line.split(":", 1) + + if len(parts) == 2: + result.append((parts[0].strip(), parts[1].strip())) + + # we link the list to the headers, no need to create a copy, the + # list was not shared anyways. + return Headers(result) + + +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, + ) -> None: + self.charset = charset + self.errors = errors + self.max_form_memory_size = max_form_memory_size + + 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) + + 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/python3.7/site-packages/werkzeug/http.py b/venv/lib/python3.7/site-packages/werkzeug/http.py new file mode 100644 index 0000000..ca48fe2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/http.py @@ -0,0 +1,1388 @@ +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_parse_impl +from ._internal import _cookie_quote +from ._internal import _make_cookie_domain +from ._internal import _to_bytes +from ._internal import _to_str +from ._internal import _wsgi_decoding_dance +from werkzeug._internal import _dt_as_utc + +if t.TYPE_CHECKING: + import typing_extensions as te + 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 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) + 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) + 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 + + +@typing.overload +def parse_options_header( + value: t.Optional[str], multiple: "te.Literal[False]" = False +) -> t.Tuple[str, t.Dict[str, str]]: + ... + + +@typing.overload +def parse_options_header( + value: t.Optional[str], multiple: "te.Literal[True]" +) -> t.Tuple[t.Any, ...]: + ... + + +def parse_options_header( + value: t.Optional[str], multiple: bool = False +) -> t.Union[t.Tuple[str, t.Dict[str, str]], t.Tuple[t.Any, ...]]: + """Parse a ``Content-Type`` like header into a tuple with the content + type and the options: + + >>> parse_options_header('text/html; charset=utf8') + ('text/html', {'charset': 'utf8'}) + + This should not be used to parse ``Cache-Control`` like headers that use + a slightly different format. For these headers use the + :func:`parse_dict_header` function. + + .. versionchanged:: 0.15 + :rfc:`2231` parameter continuations are handled. + + .. versionadded:: 0.5 + + :param value: the header to parse. + :param multiple: Whether try to parse and return multiple MIME types + :return: (mimetype, options) or (mimetype, options, mimetype, options, …) + if multiple=True + """ + 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) + 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. + options[option] = options.get(option, "") + option_value + else: + options[option] = option_value + rest = rest[optmatch.end() :] + result.append(options) + if multiple is False: + return tuple(result) + value = rest + + return tuple(result) if result else ("", {}) + + +_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() + if not begin_str.isdigit(): + return None + begin = int(begin_str) + if begin < last_end or last_end < 0: + return None + if end_str: + if not end_str.isdigit(): + return None + end = int(end_str) + 1 + 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 + elif length_str.isdigit(): + length = int(length_str) + else: + return None + + if rng == "*": + 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 cookie_date( + expires: t.Optional[t.Union[datetime, date, int, float, struct_time]] = None +) -> str: + """Format a datetime object or timestamp into an :rfc:`2822` date + string for ``Set-Cookie expires``. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :func:`http_date` instead. + """ + warnings.warn( + "'cookie_date' is deprecated and will be removed in Werkzeug" + " 2.1. Use 'http_date' instead.", + DeprecationWarning, + stacklevel=2, + ) + return http_date(expires) + + +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``. + """ + 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" in environ: + # 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(environ.get("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(environ.get("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(environ.get("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(environ.get("HTTP_IF_MATCH")) + if if_match: + unmodified = not if_match.is_strong(etag) + + return not unmodified + + +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): + header = header.get("HTTP_COOKIE", "") + elif header is None: + header = "" + + # PEP 3333 sends headers through the environ as latin1 decoded + # strings. Encode strings back to bytes for parsing. + if isinstance(header, str): + header = header.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(header): # type: ignore + key_str = _to_str(key, charset, errors, allow_none_charset=True) + + if not key_str: + continue + + val_str = _to_str(val, charset, errors, allow_none_charset=True) + yield key_str, val_str + + return cls(_parse_pairs()) + + +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 diff --git a/venv/lib/python3.7/site-packages/werkzeug/local.py b/venv/lib/python3.7/site-packages/werkzeug/local.py new file mode 100644 index 0000000..b4dee7b --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/local.py @@ -0,0 +1,677 @@ +import copy +import math +import operator +import sys +import typing as t +import warnings +from functools import partial +from functools import update_wrapper + +from .wsgi import ClosingIterator + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + +try: + from greenlet import getcurrent as _get_ident +except ImportError: + from threading import get_ident as _get_ident + + +def get_ident() -> int: + warnings.warn( + "'get_ident' is deprecated and will be removed in Werkzeug" + " 2.1. Use 'greenlet.getcurrent' or 'threading.get_ident' for" + " previous behavior.", + DeprecationWarning, + stacklevel=2, + ) + return _get_ident() # type: ignore + + +class _CannotUseContextVar(Exception): + pass + + +try: + from contextvars import ContextVar + + if "gevent" in sys.modules or "eventlet" in sys.modules: + # Both use greenlet, so first check it has patched + # ContextVars, Greenlet <0.4.17 does not. + import greenlet + + greenlet_patched = getattr(greenlet, "GREENLET_USE_CONTEXT_VARS", False) + + if not greenlet_patched: + # If Gevent is used, check it has patched ContextVars, + # <20.5 does not. + try: + from gevent.monkey import is_object_patched + except ImportError: + # Gevent isn't used, but Greenlet is and hasn't patched + raise _CannotUseContextVar() from None + else: + if is_object_patched("threading", "local") and not is_object_patched( + "contextvars", "ContextVar" + ): + raise _CannotUseContextVar() + + def __release_local__(storage: t.Any) -> None: + # Can remove when support for non-stdlib ContextVars is + # removed, see "Fake" version below. + storage.set({}) + + +except (ImportError, _CannotUseContextVar): + + class ContextVar: # type: ignore + """A fake ContextVar based on the previous greenlet/threading + ident function. Used on Python 3.6, eventlet, and old versions + of gevent. + """ + + def __init__(self, _name: str) -> None: + self.storage: t.Dict[int, t.Dict[str, t.Any]] = {} + + def get(self, default: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + return self.storage.get(_get_ident(), default) + + def set(self, value: t.Dict[str, t.Any]) -> None: + self.storage[_get_ident()] = value + + def __release_local__(storage: t.Any) -> None: + # Special version to ensure that the storage is cleaned up on + # release. + storage.storage.pop(_get_ident(), None) + + +def release_local(local: t.Union["Local", "LocalStack"]) -> None: + """Releases the contents of the local for the current context. + This makes it possible to use locals without a manager. + + Example:: + + >>> loc = Local() + >>> loc.foo = 42 + >>> release_local(loc) + >>> hasattr(loc, 'foo') + False + + With this function one can release :class:`Local` objects as well + as :class:`LocalStack` objects. However it is not possible to + release data held by proxies that way, one always has to retain + a reference to the underlying local object in order to be able + to release it. + + .. versionadded:: 0.6.1 + """ + local.__release_local__() + + +class Local: + __slots__ = ("_storage",) + + def __init__(self) -> None: + object.__setattr__(self, "_storage", ContextVar("local_storage")) + + @property + def __storage__(self) -> t.Dict[str, t.Any]: + warnings.warn( + "'__storage__' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + return self._storage.get({}) # type: ignore + + @property + def __ident_func__(self) -> t.Callable[[], int]: + warnings.warn( + "'__ident_func__' is deprecated and will be removed in" + " Werkzeug 2.1. It should not be used in Python 3.7+.", + DeprecationWarning, + stacklevel=2, + ) + return _get_ident # type: ignore + + @__ident_func__.setter + def __ident_func__(self, func: t.Callable[[], int]) -> None: + warnings.warn( + "'__ident_func__' is deprecated and will be removed in" + " Werkzeug 2.1. Setting it no longer has any effect.", + DeprecationWarning, + stacklevel=2, + ) + + def __iter__(self) -> t.Iterator[t.Tuple[int, t.Any]]: + return iter(self._storage.get({}).items()) + + def __call__(self, proxy: str) -> "LocalProxy": + """Create a proxy for a name.""" + return LocalProxy(self, proxy) + + def __release_local__(self) -> None: + __release_local__(self._storage) + + def __getattr__(self, name: str) -> t.Any: + values = self._storage.get({}) + try: + return values[name] + except KeyError: + raise AttributeError(name) from None + + 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({}).copy() + try: + del values[name] + self._storage.set(values) + except KeyError: + raise AttributeError(name) from None + + +class LocalStack: + """This class works similar to a :class:`Local` but keeps a stack + of objects instead. This is best explained with an example:: + + >>> ls = LocalStack() + >>> ls.push(42) + >>> ls.top + 42 + >>> ls.push(23) + >>> ls.top + 23 + >>> ls.pop() + 23 + >>> ls.top + 42 + + They can be force released by using a :class:`LocalManager` or with + the :func:`release_local` function but the correct way is to pop the + item from the stack after using. When the stack is empty it will + no longer be bound to the current context (and as such released). + + By calling the stack without arguments it returns a proxy that resolves to + the topmost item on the stack. + + .. versionadded:: 0.6.1 + """ + + def __init__(self) -> None: + self._local = Local() + + def __release_local__(self) -> None: + self._local.__release_local__() + + @property + def __ident_func__(self) -> t.Callable[[], int]: + return self._local.__ident_func__ + + @__ident_func__.setter + def __ident_func__(self, value: t.Callable[[], int]) -> None: + object.__setattr__(self._local, "__ident_func__", value) + + def __call__(self) -> "LocalProxy": + def _lookup() -> t.Any: + rv = self.top + if rv is None: + raise RuntimeError("object unbound") + return rv + + return LocalProxy(_lookup) + + def push(self, obj: t.Any) -> t.List[t.Any]: + """Pushes a new item to the stack""" + rv = getattr(self._local, "stack", []).copy() + rv.append(obj) + self._local.stack = rv + return rv # type: ignore + + def pop(self) -> t.Any: + """Removes the topmost item from the stack, will return the + old value or `None` if the stack was already empty. + """ + stack = getattr(self._local, "stack", None) + if stack is None: + return None + elif len(stack) == 1: + release_local(self._local) + return stack[-1] + else: + return stack.pop() + + @property + def top(self) -> t.Any: + """The topmost item on the stack. If the stack is empty, + `None` is returned. + """ + try: + return self._local.stack[-1] + except (AttributeError, IndexError): + return None + + +class LocalManager: + """Local objects cannot manage themselves. For that you need a local + manager. You can pass a local manager multiple locals or add them + later by appending them to `manager.locals`. Every time the manager + cleans up, it will clean up all the data left in the locals for this + context. + + .. versionchanged:: 2.0 + ``ident_func`` is deprecated and will be removed in Werkzeug + 2.1. + + .. versionchanged:: 0.6.1 + The :func:`release_local` function can be used instead of a + manager. + + .. versionchanged:: 0.7 + The ``ident_func`` parameter was added. + """ + + def __init__( + self, + locals: t.Optional[t.Iterable[t.Union[Local, LocalStack]]] = None, + ident_func: None = None, + ) -> None: + if locals is None: + self.locals = [] + elif isinstance(locals, Local): + self.locals = [locals] + else: + self.locals = list(locals) + + if ident_func is not None: + warnings.warn( + "'ident_func' is deprecated and will be removed in" + " Werkzeug 2.1. Setting it no longer has any effect.", + DeprecationWarning, + stacklevel=2, + ) + + @property + def ident_func(self) -> t.Callable[[], int]: + warnings.warn( + "'ident_func' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + return _get_ident # type: ignore + + @ident_func.setter + def ident_func(self, func: t.Callable[[], int]) -> None: + warnings.warn( + "'ident_func' is deprecated and will be removedin Werkzeug" + " 2.1. Setting it no longer has any effect.", + DeprecationWarning, + stacklevel=2, + ) + + def get_ident(self) -> int: + """Return the context identifier the local objects use internally for + this context. You cannot override this method to change the behavior + but use it to link other context local objects (such as SQLAlchemy's + scoped sessions) to the Werkzeug locals. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. + + .. versionchanged:: 0.7 + You can pass a different ident function to the local manager that + will then be propagated to all the locals passed to the + constructor. + """ + warnings.warn( + "'get_ident' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + return self.ident_func() + + def cleanup(self) -> None: + """Manually clean up the data in the locals for this context. Call + this at the end of the request or use `make_middleware()`. + """ + for local in self.locals: + release_local(local) + + def make_middleware(self, app: "WSGIApplication") -> "WSGIApplication": + """Wrap a WSGI application so that cleaning up happens after + request end. + """ + + 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 `make_middleware` but for decorating functions. + + Example usage:: + + @manager.middleware + def application(environ, start_response): + ... + + The difference to `make_middleware` is that the function passed + will have all the arguments copied from the inner application + (name, docstring, module). + """ + 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: Call this method if the proxy is unbound instead of + raising a :exc:`RuntimeError`. + :param class_value: Value to return when accessed from the class. + Used for ``__doc__`` so building docs still works. + """ + + __slots__ = ("bind_f", "fallback", "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, + ) -> 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) # type: ignore + + 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 + + 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 + + return self.fallback.__get__(instance, owner) # type: ignore + + 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) + + +class LocalProxy: + """A proxy to the object bound to a :class:`Local`. All operations + on the proxy are forwarded to the bound object. If no object is + bound, a :exc:`RuntimeError` is raised. + + .. code-block:: python + + from werkzeug.local import Local + l = Local() + + # a proxy to whatever l.user is set to + user = l("user") + + from werkzeug.local import LocalStack + _request_stack = LocalStack() + + # a proxy to _request_stack.top + request = _request_stack() + + # a proxy to the session attribute of the request proxy + session = LocalProxy(lambda: request.session) + + ``__repr__`` and ``__class__`` are forwarded, 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 + + :param local: The :class:`Local` or callable that provides the + proxied object. + :param name: The attribute name to look up on a :class:`Local`. Not + used if a callable is given. + + .. 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__ = ("__local", "__name", "__wrapped__") + + def __init__( + self, + local: t.Union["Local", t.Callable[[], t.Any]], + name: t.Optional[str] = None, + ) -> None: + object.__setattr__(self, "_LocalProxy__local", local) + object.__setattr__(self, "_LocalProxy__name", name) + + if callable(local) and not hasattr(local, "__release_local__"): + # "local" is a callable that is not an instance of Local or + # LocalManager: mark it as a wrapped function. + object.__setattr__(self, "__wrapped__", local) + + def _get_current_object(self) -> t.Any: + """Return the current object. This is useful if you want the real + object behind the proxy at a time for performance reasons or because + you want to pass the object into a different context. + """ + if not hasattr(self.__local, "__release_local__"): # type: ignore + return self.__local() # type: ignore + + try: + return getattr(self.__local, self.__name) # type: ignore + except AttributeError: + name = self.__name # type: ignore + raise RuntimeError(f"no object bound to {name}") from None + + __doc__ = _ProxyLookup( # type: ignore + class_value=__doc__, fallback=lambda self: type(self).__doc__ + ) + # __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)) # 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/python3.7/site-packages/werkzeug/middleware/__init__.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/__init__.py new file mode 100644 index 0000000..6ddcf7f --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0948d5185728b1327dac4864c9ff490ce891e65e GIT binary patch literal 661 zcmYjPJ#Q2-5Zy~dWGQXxX(N$cXjkC`X%Gc8L5f7<^R4IB7V8h}*}Xgd5q~L^(58Zl zDzm;M+(@?Oz1gwnJ@56|nW#8^|D4p{MOFQp!Ba4<-tx+)yy@yor588V#fiG-g7|2) z9&oD?iZ{<8#5=gXdH(_2a}{g`bs$xYgY6XA;DL-H*d`UZ>H`@}a8wr7Lr9uQ3J}&A z(}YYwXO!;|EM-`uQIid+hFeTuzvI|LOkuJbGvwe<9F4Gs)HNU9 zQ9^860UWJUJB^V{3$I0C_{iN}ZtSk0Y*?^v}?np-QtW#dB@n9BeaLSKr81^qg z4P?UD8+K=Ir+s9vxiU-EphgOgtv^s(OGdEikHcu3a0t<%Cn#Reqs)o*{c=@{PZx{3 z7gF-zQvRsY3I7gd`*+=ti%qog()vt%+vTeXNB1r5nx|K3wvW%#{8!RQX}u*W>$tx= Qy>da111`_`*gw3g2RLfhv;Y7A literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e790eeb2eaa9f674afec7969c1d99f08ae726e3c GIT binary patch literal 2702 zcmZ`*TW=IM6rS5&G9(ls+KNh*EM91&kf0*9(iSR0LP;ou6-k9yRT?>CZ!$19Y;TgK znLI=;ke;@D*Sp7pE&EsQn z6R+ODAe@0CT;Zkez?0q+Uwwx!KMk_hpyd)Jz`8wX+jR@;&YJ>Gakwzh^$`mc6r-LN(^j(DciLveZD8zDgTz(A=F7WE=FvhA4tZ-T^>J`xnQe( z7>${;p(>ynOA?0#OLBIXAMov1C8c4tHw8R~=}Z+PQW@e5eeSB_P{SbwD>310&XjyM zlG++3lE#%1mT6LzSw8R_NVSaM%9(z6G!5#;&i#AVzPsCOn800YhTbnmsbIU3Spk9# z3x!kTkfMZbod{^Tw8G2e5@Kdk*Tn0+gn+4zKv}X;E?|1iv_u3hGPs9~hEo#lTp}U@ zW=SXZkQ>&mI)Y>=KFO#wt#cioghTgwVaV`6F1v9Gc=xB!`o=mHHThU#zgY%ix=b!z z?twXpAYkb<#f0@Gi-IiK+c(ItHj)cqA_uJD3x%FiE!oD- zPQQ+>VyQfk=~75$5zK1u;2eY=jcLae?*YHgs%E=f1IoZ^TGVy6%#i4C3b`h}K(NiH zsWzzL_{6GO&( zUS@n`ia6yOdHG~A!mt+?^onaK^U4h3dkr z<;{@C@4Ak&R%E+LF4?qK0ccI51Uya^=Z76{*~0N*UH3SLjx((` zOE&=~wUyE|LR)%B6`{XJFvtjMJp$54?UPhA3Td4TZO%_BZ(1t?O)S4`SVkQm@M=_% z1+@z&iY!6**nM8=+P+fBVRD4pejo95tv9Ms5w(~t4X?g{Vd74l$eDQMeBxk*tmD#hw-!A`fKVL_kQr#14re=mIg0Mlck3%AD_6>- zyh6ndq+YptAV=9Vb+qzGs;AH8Xm91PSgp`4P$p6*WuUsCPkpBk;W`%Z7=yZ-mx#d z--V6Gp(B2x%^;dT`qRp+J9#qad zcjYbW!x@~}UVFIN--)(X@84bwDt}KJn-!#1qg0H|%3@c|;jmhu;Vg!#t?f-Zm?NMe zzPKMKp@TWJ9}^`;W`hd_8cmY(G^)==InVH)ghbfk49P)qVk9<-e!!Rh3WMX%yMY(F z^z*!P?s@N=H}B57-TzNnErDP)PXb9#6jfmqWwU}Ae5A|MRVQ0&&Mj?s+l-{a) Vy>{?Nh7+2M4&1KSMzHYn{{x&b9)$n^ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..255ccddb973cfd402a15560e19a9365d80795c08 GIT binary patch literal 6767 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 aEnUmBb)8;_DT|v3#tMQh{~^>=&-h;haSV+B literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/lint.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dff61e96db2ccc89abd8ca3df35cb55706266b54 GIT binary patch literal 12640 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 Mf1|!opQ_*bKO@=X>;M1& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a634b1ed3ec8f5d9d413dff60ce4d54154ba82c5 GIT binary patch literal 4871 zcmb_g&2!tv6$e1@3nC@?BaPj3rrYL_aB4wro2Cu(F?MXl)^sAPkuq*L(*YsuQiKcw z%wj2-GIg?NtjsiR?@2S#G5<>c1oYTmdhRW!{@wzlC|jAyq2SSr>xy-FCqviPTn1WUf(>P|A99g0pAACJBXQtM!BpQ@G(=odCj6k!r1*R!QpFBJ)yKGS+ThUc z2E|_8f}zVa_rQ-?UqnL&-mwaMW44nh6^U2`k5U%KY@CcF3lc6Iz1P6U48hVUISAuj z#*>3$ihrh->o~5<{Ezk3zh1c$`J+@g|AB{%jh2~}x0J6^G^&M4Xg1L&)h8kyCRmA%rH5Ph*5^z; z?OKcXLz%<_C>s#N=~YML7VcDm2%}>HOaM`*B<#I1w|I%$yxc4E3LsDwwd(|h`s`WR zb3{!nh(@n;-OyuAJyyf2>ep2bg>q++JA6T}Te@!W#@8j@ zlYgaZ7!RdCgxg6YHfLt$$9(F0ax@cM>}be`uk7;duVWife2J0$2V9K z3q6euvFFqTxh~r<6>*6DfnbDx;5itjDj9@_V74=6L!g$>-R(~2dA&pqeAVre$Xbw4 zkr{jjqhRU{D2a%RB4U=$Rp2$!Y}x~%`fW0wTd>i=so9Xl02TopE!&h!B9*r@ZnN7= zjfR*C+XYE98pN7gis6Fy&e&yJLg>Y0&;m>I@#fNWPm6MX7l~s)!WcMd(sNtQ50LaQ z425Q{%@5ge2+Uu&1!~RaPFA7-T=%V9pWhY94M>xBNV?+#Irjbq6W+u?E8hxY>qS5H0@$mjfJ zac)!Rg&Ffjea@D@Gm~PvdLEgOoaB8$n;a`GE3+w$bjsxA^jl-&aCMp=-6uNRxlfAh z)OK(7js~gwgcj%*?J8NuN#CkwCD=Tx9 z^v(&@@aCmj_FfPRs@bWCdXlPVxj>{rq)B9v$Py7Md^Gv)!&NmHt`5WDN*E&*MA6F4 zeK8t*E+4NxEa1L6#r^6T?pF&bq&pl#STBr2<#`{2ZA$wY^@=(D9lo|%6uf5@jyqi; zDfzU-t(JFdR@1nTgHNLR;)#ui8yQjYZp4Gp= zR{<}5Z9X@io9Hj~Y%1iQHI7QkcxoKk$~-Yojid6!KCvdHQxjEu<)n0Motj6Ld~8y_ zW*k+IOM5mq9@XVPR2l8cQ&S!umrg3jCT7;+x2bQhdTjFQbpsRy;tA^iQ}d+G>)biD zhTrgoNtHLQ8aY?q{L((EDQ9m1yMgzlc4{5fAVmW$NP)g4?e{lRexMd7wtipy(mJY7 z>U&FgTmB2aP}C((?IvIT(!v_^S-^o>X+C~aumX5}DC@byuVm%u4ARb~f%s#yGFMg0Y^7a44dLvu>WbF^1 zu5E35AFplSe{i=`-@Ltj-&^1K=)rg9YG%5bP37P&%{6ZQ^;XNyDtU#O*_2ojn|T>1 z>Ejy)r6@eyT=_p=_+Yasqh-cng#>J~%ycM0z9I>gdh<>ddXeWddoKxN`3eTI8g)?p zC4WS(mAvH6%2YoftxADoKMAWTVO~B-g1DsA-Eq!}DoNnT%DU#sO1naJ za2(9)A9)p{t%clU+JPF?Z_t`*ks4`p06McZ>Q`x~HqF+0Or@PV*;dDi_Is;*AtW?! z4GCo09P@tyyYy`kqhwpl_BG_&n(5%z06d6N_PvI?VJ(}E)i4(kMRZ@K+xniIobzs7 zqKr<(mFH!S=jH!JpxyAi&qsb#j8r|3Cjq)k={Thfz>|@ZuS2Acwf+FTN@lfn0G-^D zl|PM9)np}@Fe~?>#8+AE!H}v{Ka$t6C@b%bl}P0+wDTaC9a55XmlUx-#jR6P?S@^p zO-ujYG8gN%smEJa_u8+wfAy! cen2O3`V$Zvp38p?%QBbYrOWVMgMOv|0lmzB<^TWy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef98018797c650f214986f20b8faed5e027967cc GIT binary patch literal 6110 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b0551133a049108629bce23e0c0e9d4b7fe36f4 GIT binary patch literal 9830 zcmb_iU2GdycAh_yLyFYD|MEMV%|>R{qTEe3>9R@c#IX}KiEKnpy(M-_jyOYVq~Q#G z=hBk6qi(TsVWmJ8i=usLoI(bQqJ1sUr@k!u)Q1A?^YpO=ilBWf(1$#9`<*jGin8S( zElPRr+78wy<@&ULu6Mq1p6fHH zUuaxV6*s^2RF}%9aXsTcdqHsv?sFaeg3{40D2?aoIWEin)&-@jX5+ZUz0arPc%Z9hPUAb6OLgW@f2r{j*XL1RYAmVBdy2E*EZ$R`#RIKz(b3kG>Y3r6 zm)2cz*R|F+ZQ(lBy0oR&wyt}=8*0b6JB>y)~)YdzWlm%6OUXOmFm9Nc7w>RTkovD zyZp-XRo@;&Zs|+Hz*<#JOvje4^m;DU={^htsu$kblWw$n163n?T(H51c;$OvYIqm@ z=en+Jc4%FDk#u`aH)w~B7j*HcxG817Nu<$O1f#-@!hvYJ%^rqyJlCN?k==2dTcH=A zF-yeSVIbW=HsxNQUaU}G-+h|;-S1Gx z3w_0`|A}ML(T?Vp+$p!^OW;6b9(lI;yiJ&82?%c7#ZZIM8&-WY$@&ZgJiwE7~v>p5;@MJcqiU9&o&upIZU z>xX@kHKWx%mVIR5dF1u_zH3FKA!xaB(2r`?s*J2bWOrR)+PX9FBu4PSdcDMC2>9p- zg|xzG+|v0o^NkJkYT_CTP;$!`pSyCYm1eZyvg#DUu&Wsn(fwbFM0$ZR9MbZ=WHh_`q( zH}~Wwwmw@)Ca_yre%L4bZ2MNr@gnwNEsPS-841`EiU{PE??uq}j#cjrf_A<2d!3+X z%l2k1yQhDF~17`;IVM%tUCADgZXb;PcMY6Q!ct>o%J2(!*ubwA6ej$bCCm*j`p2UDXrneJ{ZEItI zHIdr4!-4ON^wQecBdNfCV;$CQOe5hNyI4dt=ystg&_P-=v&+Q701ufXW}HQxS$>xI z#J*0zn!(eB>Vb0xJoXk|J)=%t89G`$1ReA!-A=>@*wA!?Jh=qF5U`=c@;hF4fE@^V zT`-z3^0aSQH&50f#ovI|FxMF0q8{pKj;F|YtuxpxNVd-0O{fLQnWBu81JYh643;p3 z9S}tLnPsO|mwdtKH%Vfo^L>PJ#9rOq1$@^+c^&r9Y1Np)j0bm@5Q1oK1b6sQug$Pe zAHjyDz$S}1wmmd$Mq#8v$0VMtF&1mf2?kgR>Xw^|nOrzjk`(3<^gsSmlj1_`Mk+(5 zV`W_ytU~0%vcn#eYSMmZT6BWWV>?ubr-H6#8wWd?!G?$of^GP}AQeZplZcuTNJOwE zfJ4xA9fZ!mR=dm+CK(Ym$L-hyU&5V^=pF-tw0}If)tcDFm9UM#cp2*9+CB22&{v!1 zCN;49Fx-w{p|;6TNq095cWBBH&zE@Bt=2$xmVX`ga*S6P634-|0!`k?mK?8xpJ5f3 zYp;zNdz;6f%Kz8M;d1T!k5S-V8f_d_#RJxEefi73RFtpIKWX`577=o_kmwkY6f(%- z=#UxjB*$cv$_eVp++*TS@(4c$B4`&tkA8GE&Ee8zR%4~9bQP3pY@pQQ97mZhz! zqjGFMR7F2ljw)2!FW&h>)Th&WFfC^sH8wxjzR(WTpMj4p^=LLO#Kn&GP*s&Xmv1YF zI3;fv#or-}*ZsNP+^6WjuiRHVnqxS*dnP!YkMk%O90g~={MxWQ0xdvj2^_QO;8e&Q zSex4PqdSRU0arxFl0!^?s2pfzBBQST6}_eIRyA=B55+T7Jd5J1Yb&zXU+H`OWiNnD z_Wk9{cilnnj@VtfoyEl~qX2p3*g9vSAqU8{{$66f;oH3p$A0Tm5dBYF%5Y_!W9XB| zf?5+NF;6y|wKx2*4L|u7D(RcmMR5l2iL+Fkr{V&Nq~yVyfU}_OCI%U{B!}p}7bQ7F z{=S>cr$;;vb((%iem2pebBPv4i9w-tlJ_DqfXU40xH%fPNF9i^-L?$H-l(^D3%=x< z5TQu&fU6rgEHC0@bX*osfwgKWF(TLROt8(u9rMnk5`EjnE!to(9o2 z9lz;EcS6opT#FlQF5uiNOLfv?Dx;vwmuT z$ZXykiS;s8BEC-rK|C!;z+wf(XSgC3KyLW_sd78s<`aS<^UCe~aE|Mq34!Tr zZFG%)loVqa~v#A)>h3w@&rkPmq>hPJbo8@$=PviB>QXhwNCAVQC94Eba3-5sK=jf)Tf?^mkg2vK% zfXCunD2A_{x`Iax%r}x(zbAYtwa5&zACf96=GTA_Atro+3 z?vHw3;9ejq29oyGy=kmTr~0SLZ6#PV6lrXi#F`3oN(tU|<%f!drpr9!=f^7eMb3|$ z{ymd$h#oQ^#;9G*tyQ(PlV*griJ6;6#YCmUove>isWWE zMoY|*EGEpL1%iKzD@F3^6QMPNQ0laf!Te}@}I;8gk0wb-Yt8ve^?qAWp}|PSnv%4Axl!u=ous-lT$574Kdj)x}tCe~GS$ zHd|3O)le6;YC%k)l@$A7l_D&7w}M!eHlTCMpt!ljr!k4 zL2)TVEt{XGegzNy0#`&-!JrJU_T^^W5E0)TBiWUK;&m2<{JU0x{wA1 zIu5k#_E`~N|F^pXBt?@F*}+s%lftGQ*-{Ge4rnK;Ow1cu`b;cQPwo~+(q{A44R-TM zdF01f&BnTyO6I%Hq z>0JN|xvx;Xn0gp-o$JtFj%9F|O*N9n!fBA-sOD3=j(18hN*TFXU_%ZN-2E80RK&+x zM7#ALxT0AUWTwbSL7rNPe4%oHWdUkahr-CqJZh-eP(uO z{!Gm$_+toM!lQr3l}4yw>*eWT^&2x(HIf|1#YvGc*rZT6slZVCteVH?A=(}KQB*`1 z8J_403aP}pL<|(2jrAkM?+1|mz8ZiIg%o-x{MtopOWM@=p!ikcx&+YAK&`Z7hcu(oWC*pN{J#D(u?*2E%a#ldW>CsS4>~UEgzVHM=PP{1Q zXsQ_$6kBGW;*x0`KmEa;ilH1QC zHKT89q8{fRn14>h7_q@AlKM?0&K==vD*Vxhan4a+hm^4kdW`5nEFwulDV-eTulxbN zs6O)c;!Wkw;%$X#nbFUYq{+nvQ2JBU@<cKAr&v@?Yri zg!ob$Poq_&R#(FsDsl$%&%{$s=`;NoYV=xMI+}fms4>P@+_-X}sYqVI`&N$ToU)vf z^9M>ieU6+XCy{~@KdDec3AF`hn$kRd`yp257O12Ru zT2*aS@E;B2_;dVl_La-8T1Zh_A7vlt8-;7TeI!>RWE4&kO!6s_VVP#YcZ6k1xeTXA ztqsLg4>7^=h}f z(4K;)HMBhHvwBH=Vty%|5q|HMSipp05k>Vp<*~@NHk(PQN%+9$7}U$n=AD7v zrW3ZCO?DAU?vnrsc%TsZy<=CAn5+1jN1qZBVkgRj)r1Ua#7JUD9ksEA|K@NADO0~oh{%`pZ{ofVR6b( z1&yp$#ZPb(0Tt|YKc?FID3UyO6M3!F^-)lsCS^1)OoLj6kumhW4MEmDDNRI)Z2k@U z5T8PlF=*m52)?q*z4XWeh4uW1!P_u)qOO-}17R^SuL1%jFZQ$zZS{uWWwYE^TF1Wl z_whoba_e_)UTa=`|Jv0LR@dHZOf&wXO?;1M%4GOCbD#PFTKZ|yL-se_<+q68h`be? X%=oViXTyI8C?@_iOT7f}agY8#53o3_ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/middleware/dispatcher.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/dispatcher.py new file mode 100644 index 0000000..ace1c75 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/middleware/dispatcher.py @@ -0,0 +1,78 @@ +""" +Application Dispatcher +====================== + +This middleware creates a single WSGI application that dispatches to +multiple other WSGI applications mounted at different URL paths. + +A common example is writing a Single Page Application, where you have a +backend API and a frontend written in JavaScript that does the routing +in the browser rather than requesting different pages from the server. +The frontend is a single HTML and JS file that should be served for any +path besides "/api". + +This example dispatches to an API app under "/api", an admin app +under "/admin", and an app that serves frontend files for all other +requests:: + + app = DispatcherMiddleware(serve_frontend, { + '/api': api_app, + '/admin': admin_app, + }) + +In production, you might instead handle this at the HTTP server level, +serving files or proxying to application servers based on location. The +API and admin apps would each be deployed with a separate WSGI server, +and the static files would be served directly by the HTTP server. + +.. autoclass:: DispatcherMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import typing as t + +if t.TYPE_CHECKING: + from _typeshed.wsgi import StartResponse + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class DispatcherMiddleware: + """Combine multiple applications as a single WSGI application. + Requests are dispatched to an application based on the path it is + mounted under. + + :param app: The WSGI application to dispatch to if the request + doesn't match a mounted path. + :param mounts: Maps path prefixes to applications for dispatching. + """ + + def __init__( + self, + app: "WSGIApplication", + mounts: t.Optional[t.Dict[str, "WSGIApplication"]] = None, + ) -> 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/python3.7/site-packages/werkzeug/middleware/http_proxy.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/http_proxy.py new file mode 100644 index 0000000..1cde458 --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/werkzeug/middleware/lint.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/lint.py new file mode 100644 index 0000000..c74703b --- /dev/null +++ b/venv/lib/python3.7/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], None], 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() # type: ignore + + 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.isdigit(): + 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/python3.7/site-packages/werkzeug/middleware/profiler.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/profiler.py new file mode 100644 index 0000000..200dae0 --- /dev/null +++ b/venv/lib/python3.7/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() # type: ignore + + 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/python3.7/site-packages/werkzeug/middleware/proxy_fix.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/proxy_fix.py new file mode 100644 index 0000000..e90b1b3 --- /dev/null +++ b/venv/lib/python3.7/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"] = x_host + parts = x_host.split(":", 1) + environ["SERVER_NAME"] = parts[0] + if len(parts) == 2: + environ["SERVER_PORT"] = parts[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: + parts = host.split(":", 1) + host = parts[0] if len(parts) == 2 else host + 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/python3.7/site-packages/werkzeug/middleware/shared_data.py b/venv/lib/python3.7/site-packages/werkzeug/middleware/shared_data.py new file mode 100644 index 0000000..62da672 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/middleware/shared_data.py @@ -0,0 +1,320 @@ +""" +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 ..filesystem import get_filesystem_encoding +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) + + if hasattr(provider, "get_resource_reader"): + # Python 3 + 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), + ), + ) + + else: + # Python 3.6 + package_filename = provider.get_filename(package) # type: ignore + is_filesystem = os.path.exists(package_filename) + root = os.path.join(os.path.dirname(package_filename), package_path) + + def loader( + path: t.Optional[str], + ) -> t.Tuple[t.Optional[str], t.Optional[_TOpener]]: + if path is None: + return None, None + + path = safe_join(root, path) + + if path is None: + return None, None + + basename = posixpath.basename(path) + + if is_filesystem: + if not os.path.isfile(path): + return None, None + + return basename, self._opener(path) + + try: + data = provider.get_data(path) # type: ignore + except OSError: + return None, None + + return basename, lambda: (BytesIO(data), load_time, len(data)) + + 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: + if not isinstance(real_filename, bytes): + real_filename = real_filename.encode( # type: ignore + get_filesystem_encoding() + ) + + timestamp = mtime.timestamp() + checksum = adler32(real_filename) & 0xFFFFFFFF # type: ignore + 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/python3.7/site-packages/werkzeug/py.typed b/venv/lib/python3.7/site-packages/werkzeug/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/werkzeug/routing.py b/venv/lib/python3.7/site-packages/werkzeug/routing.py new file mode 100644 index 0000000..ddb8ef9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/routing.py @@ -0,0 +1,2341 @@ +"""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. +""" +import ast +import difflib +import posixpath +import re +import typing +import typing as t +import uuid +import warnings +from pprint import pformat +from string import Template +from threading import Lock +from types import CodeType + +from ._internal import _encode_idna +from ._internal import _get_environ +from ._internal import _to_bytes +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 BadRequest +from .exceptions import HTTPException +from .exceptions import MethodNotAllowed +from .exceptions import NotFound +from .urls import _fast_url_quote +from .urls import url_encode +from .urls import url_join +from .urls import url_quote +from .urls import url_unquote +from .utils import cached_property +from .utils import redirect +from .wsgi import get_host + +if t.TYPE_CHECKING: + import typing_extensions as te + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + from .wrappers.response import Response + +_rule_re = re.compile( + r""" + (?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 _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 + + +def parse_rule(rule: str) -> t.Iterator[t.Tuple[t.Optional[str], t.Optional[str], str]]: + """Parse a rule and return it as generator. Each iteration yields tuples + in the form ``(converter, arguments, variable)``. If the converter is + `None` it's a static url part, otherwise it's a dynamic one. + + :internal: + """ + pos = 0 + end = len(rule) + do_match = _rule_re.match + used_names = set() + while pos < end: + m = do_match(rule, pos) + if m is None: + break + data = m.groupdict() + if data["static"]: + yield None, None, data["static"] + variable = data["variable"] + converter = data["converter"] or "default" + if variable in used_names: + raise ValueError(f"variable name {variable!r} used twice.") + used_names.add(variable) + yield converter, data["args"] or None, variable + pos = m.end() + if pos < end: + remaining = rule[pos:] + if ">" in remaining or "<" in remaining: + raise ValueError(f"malformed url rule: {rule!r}") + yield None, None, remaining + + +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["WSGIEnvironment"] = 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]) -> None: + super().__init__() + self.matched_values = matched_values + + +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 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 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: + q = '?' + params = self._encode_query_vars(kwargs) +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`` he 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. + + .. 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.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._trace: t.List[t.Tuple[bool, str]] = [] + + 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 compile(self) -> 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._trace = [] + self._converters: t.Dict[str, "BaseConverter"] = {} + self._static_weights: t.List[t.Tuple[int, int]] = [] + self._argument_weights: t.List[int] = [] + regex_parts = [] + + def _build_regex(rule: str) -> None: + index = 0 + for converter, arguments, variable in parse_rule(rule): + if converter is None: + for match in re.finditer(r"/+|[^/]+", variable): + part = match.group(0) + if part.startswith("/"): + if self.merge_slashes: + regex_parts.append(r"/+?") + self._trace.append((False, "/")) + else: + regex_parts.append(part) + self._trace.append((False, part)) + continue + self._trace.append((False, part)) + regex_parts.append(re.escape(part)) + if part: + self._static_weights.append((index, -len(part))) + else: + if arguments: + c_args, c_kwargs = parse_converter_args(arguments) + else: + c_args = () + c_kwargs = {} + convobj = self.get_converter(variable, converter, c_args, c_kwargs) + regex_parts.append(f"(?P<{variable}>{convobj.regex})") + self._converters[variable] = convobj + self._trace.append((True, variable)) + self._argument_weights.append(convobj.weight) + self.arguments.add(str(variable)) + index = index + 1 + + _build_regex(domain_rule) + regex_parts.append("\\|") + self._trace.append((False, "|")) + _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/")) + if not self.is_leaf: + self._trace.append((False, "/")) + + self._build: t.Callable[..., t.Tuple[str, str]] + self._build = self._compile_builder(False).__get__(self, None) # type: ignore + self._build_unknown: t.Callable[..., t.Tuple[str, str]] + self._build_unknown = self._compile_builder(True).__get__( # type: ignore + self, None + ) + + if self.build_only: + return + + if not (self.is_leaf and self.strict_slashes): + reps = "*" if self.merge_slashes else "?" + tail = f"(?/{reps})" + else: + tail = "" + + regex = f"^{''.join(regex_parts)}{tail}$" + self._regex = re.compile(regex) + + def match( + self, path: str, method: t.Optional[str] = None + ) -> t.Optional[t.MutableMapping[str, t.Any]]: + """Check if the rule matches a given path. Path is a string in the + form ``"subdomain|/path"`` and is assembled by the map. If + the map is doing host matching the subdomain part will be the host + instead. + + If the rule matches a dict with the converted values is returned, + otherwise the return value is `None`. + + :internal: + """ + if not self.build_only: + require_redirect = False + + m = self._regex.search(path) + if m is not None: + groups = m.groupdict() + # we have a folder like part of the url without a trailing + # slash and strict slashes enabled. raise an exception that + # tells the map to redirect to the same url but with a + # trailing slash + if ( + self.strict_slashes + and not self.is_leaf + and not groups.pop("__suffix__") + and ( + method is None or self.methods is None or method in self.methods + ) + ): + path += "/" + require_redirect = True + # if we are not in strict slashes mode we have to remove + # a __suffix__ + elif not self.strict_slashes: + del groups["__suffix__"] + + result = {} + for name, value in groups.items(): + try: + value = self._converters[name].to_python(value) + except ValidationError: + return None + result[str(name)] = value + if self.defaults: + result.update(self.defaults) + + if self.merge_slashes: + new_path = "|".join(self.build(result, False)) # type: ignore + if path.endswith("/") and not new_path.endswith("/"): + new_path += "/" + if new_path.count("/") < path.count("/"): + # The URL will be encoded when MapAdapter.match + # handles the RequestPath raised below. Decode + # the URL here to avoid a double encoding. + path = url_unquote(new_path) + require_redirect = True + + if require_redirect: + path = path.split("|", 1)[1] + raise RequestPath(path) + + if self.alias and self.map.redirect_defaults: + raise RequestAliasRedirect(result) + + return result + + return 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 "col_offset" in node._attributes: + node.col_offset = 0 + + 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 match_compare_key( + self, + ) -> t.Tuple[bool, int, t.Iterable[t.Tuple[int, int]], int, t.Iterable[int]]: + """The match compare key for sorting. + + Current implementation: + + 1. rules without any arguments come first for performance + reasons only as we expect them to match faster and some + common ones usually don't have any arguments (index pages etc.) + 2. rules with more static parts come first so the second argument + is the negative length of the number of the static weights. + 3. we order by static weights, which is a combination of index + and length + 4. The more complex rules come first so the next argument is the + negative length of the number of argument weights. + 5. lastly we order by the actual argument weights. + + :internal: + """ + return ( + bool(self.arguments), + -len(self._static_weights), + self._static_weights, + -len(self._argument_weights), + self._argument_weights, + ) + + 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}>" + + +class BaseConverter: + """Base class for all converters.""" + + regex = "[^/]+" + weight = 100 + + 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. + """ + + 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. + """ + + def __init__(self, map: "Map", *items: str) -> None: + super().__init__(map) + self.regex = f"(?:{'|'.join([re.escape(x) for x in items])})" + + +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 + + +class NumberConverter(BaseConverter): + """Baseclass for `IntegerConverter` and `FloatConverter`. + + :internal: + """ + + weight = 50 + num_convert: t.Callable = int + + 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+" + + +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 + + 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}" + ) + + 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, +} + + +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._rules: t.List[Rule] = [] + 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 + + 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) + self._rules.append(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: "WSGIEnvironment", + 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). + """ + environ = _get_environ(environ) + wsgi_server_name = get_host(environ).lower() + scheme = environ["wsgi.url_scheme"] + upgrade = any( + v.strip() == "upgrade" + for v in environ.get("HTTP_CONNECTION", "").lower().split(",") + ) + + if upgrade and environ.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 = environ.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, + environ["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._rules.sort(key=lambda x: x.match_compare_key()) + 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 + + @typing.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]]: + ... + + @typing.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 + + require_redirect = False + + domain_part = self.server_name if self.map.host_matching else self.subdomain + path_part = f"/{path_info.lstrip('/')}" if path_info else "" + path = f"{domain_part}|{path_part}" + + have_match_for = set() + websocket_mismatch = False + + for rule in self.map._rules: + try: + rv = rule.match(path, method) + 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( + path, rule.endpoint, e.matched_values, method, query_args + ) + ) from None + if rv is None: + continue + if rule.methods is not None and method not in rule.methods: + have_match_for.update(rule.methods) + continue + + if rule.websocket != websocket: + websocket_mismatch = True + continue + + 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)] # type: ignore + 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 require_redirect: + raise RequestRedirect( + self.make_redirect_url( + url_quote(path_info, self.map.charset, safe="/:|+"), query_args + ) + ) + + if return_rule: + return rule, rv + else: + return rule.endpoint, rv + + if have_match_for: + raise MethodNotAllowed(valid_methods=list(have_match_for)) + + if websocket_mismatch: + raise WebsocketMismatch() + + raise NotFound() + + 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: + temp_values: t.Dict[str, t.Union[t.List[t.Any], t.Any]] = {} + always_list = isinstance(values, MultiDict) + key: str + value: t.Optional[t.Union[t.List[t.Any], t.Any]] + + # For MultiDict, dict.items(values) is like values.lists() + # without the call or list coercion overhead. + for key, value in dict.items(values): # type: ignore + if value is None: + continue + + if always_list or isinstance(value, (list, tuple)): + value = [v for v in value if v is not None] + + if not value: + continue + + if len(value) == 1: + value = value[0] + + temp_values[key] = value + + values = temp_values + 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/python3.7/site-packages/werkzeug/sansio/__init__.py b/venv/lib/python3.7/site-packages/werkzeug/sansio/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44e2afdbe8747f5c1afbc72b08a69976c2afe53d GIT binary patch literal 149 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/request.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/request.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..776c4f20580a910275bb3cd842e28f7b52678ccc GIT binary patch literal 17060 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 F{{_(4fII*I literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/response.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd0f489af80eeecf1c67850d426d9df6f8a13f60 GIT binary patch literal 22856 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/utils.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/sansio/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a8164583d9282b8a0be58b56a6e186dc7a860a5 GIT binary patch literal 3809 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 f&P1Nb+f None: + self.buffer = bytearray() + self.complete = False + self.max_form_memory_size = max_form_memory_size + 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( + br"%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( + br"%s--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)" + % (LINE_BREAK, re.escape(boundary), LINE_BREAK, LINE_BREAK), + re.MULTILINE, + ) + + 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) + 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) + + elif self.state == State.PART: + match = BLANK_LINE_RE.search(self.buffer) + 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 + + 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/python3.7/site-packages/werkzeug/sansio/request.py b/venv/lib/python3.7/site-packages/werkzeug/sansio/request.py new file mode 100644 index 0000000..2c21a21 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/sansio/request.py @@ -0,0 +1,548 @@ +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_cookie +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 ..useragents import _UserAgent as _DeprecatedUserAgent +from ..utils import cached_property +from ..utils import header_property +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 = _DeprecatedUserAgent + """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/python3.7/site-packages/werkzeug/sansio/response.py b/venv/lib/python3.7/site-packages/werkzeug/sansio/response.py new file mode 100644 index 0000000..82817e8 --- /dev/null +++ b/venv/lib/python3.7/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 = "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") + + if len(split_status) > 1: + if split_status[0].isdigit(): + # code and message + return status, int(split_status[0]) + + # multi-word message + return f"0 {status}", 0 + + if split_status[0].isdigit(): + # code only + status_code = int(split_status[0]) + + try: + status = f"{status_code} {HTTP_STATUS_CODES[status_code].upper()}" + except KeyError: + status = f"{status_code} UNKNOWN" + + return status, status_code + + # one-word message + return f"0 {status}", 0 + + 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 + elif value.isdigit(): + return datetime.now(timezone.utc) + timedelta(seconds=int(value)) + return parse_date(value) + + @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/python3.7/site-packages/werkzeug/sansio/utils.py b/venv/lib/python3.7/site-packages/werkzeug/sansio/utils.py new file mode 100644 index 0000000..1b4d892 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/sansio/utils.py @@ -0,0 +1,142 @@ +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)) diff --git a/venv/lib/python3.7/site-packages/werkzeug/security.py b/venv/lib/python3.7/site-packages/werkzeug/security.py new file mode 100644 index 0000000..e23040a --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/security.py @@ -0,0 +1,247 @@ +import hashlib +import hmac +import os +import posixpath +import secrets +import typing as t +import warnings + +if t.TYPE_CHECKING: + pass + +SALT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +DEFAULT_PBKDF2_ITERATIONS = 260000 + +_os_alt_seps: t.List[str] = list( + sep for sep in [os.path.sep, os.path.altsep] if sep is not None and sep != "/" +) + + +def pbkdf2_hex( + data: t.Union[str, bytes], + salt: t.Union[str, bytes], + iterations: int = DEFAULT_PBKDF2_ITERATIONS, + keylen: t.Optional[int] = None, + hashfunc: t.Optional[t.Union[str, t.Callable]] = None, +) -> str: + """Like :func:`pbkdf2_bin`, but returns a hex-encoded string. + + :param data: the data to derive. + :param salt: the salt for the derivation. + :param iterations: the number of iterations. + :param keylen: the length of the resulting key. If not provided, + the digest size will be used. + :param hashfunc: the hash function to use. This can either be the + string name of a known hash function, or a function + from the hashlib module. Defaults to sha256. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :func:`hashlib.pbkdf2_hmac` + instead. + + .. versionadded:: 0.9 + """ + warnings.warn( + "'pbkdf2_hex' is deprecated and will be removed in Werkzeug" + " 2.1. Use 'hashlib.pbkdf2_hmac().hex()' instead.", + DeprecationWarning, + stacklevel=2, + ) + return pbkdf2_bin(data, salt, iterations, keylen, hashfunc).hex() + + +def pbkdf2_bin( + data: t.Union[str, bytes], + salt: t.Union[str, bytes], + iterations: int = DEFAULT_PBKDF2_ITERATIONS, + keylen: t.Optional[int] = None, + hashfunc: t.Optional[t.Union[str, t.Callable]] = None, +) -> bytes: + """Returns a binary digest for the PBKDF2 hash algorithm of `data` + with the given `salt`. It iterates `iterations` times and produces a + key of `keylen` bytes. By default, SHA-256 is used as hash function; + a different hashlib `hashfunc` can be provided. + + :param data: the data to derive. + :param salt: the salt for the derivation. + :param iterations: the number of iterations. + :param keylen: the length of the resulting key. If not provided + the digest size will be used. + :param hashfunc: the hash function to use. This can either be the + string name of a known hash function or a function + from the hashlib module. Defaults to sha256. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :func:`hashlib.pbkdf2_hmac` + instead. + + .. versionadded:: 0.9 + """ + warnings.warn( + "'pbkdf2_bin' is deprecated and will be removed in Werkzeug" + " 2.1. Use 'hashlib.pbkdf2_hmac()' instead.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(data, str): + data = data.encode("utf8") + + if isinstance(salt, str): + salt = salt.encode("utf8") + + if not hashfunc: + hash_name = "sha256" + elif callable(hashfunc): + hash_name = hashfunc().name + else: + hash_name = hashfunc + + return hashlib.pbkdf2_hmac(hash_name, data, salt, iterations, keylen) + + +def safe_str_cmp(a: str, b: str) -> bool: + """This function compares strings in somewhat constant time. This + requires that the length of at least one string is known in advance. + + Returns `True` if the two strings are equal, or `False` if they are not. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use + :func:`hmac.compare_digest` instead. + + .. versionadded:: 0.7 + """ + warnings.warn( + "'safe_str_cmp' is deprecated and will be removed in Werkzeug" + " 2.1. Use 'hmac.compare_digest' instead.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(a, str): + a = a.encode("utf-8") # type: ignore + + if isinstance(b, str): + b = b.encode("utf-8") # type: ignore + + return hmac.compare_digest(a, b) + + +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``. + """ + 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/python3.7/site-packages/werkzeug/serving.py b/venv/lib/python3.7/site-packages/werkzeug/serving.py new file mode 100644 index 0000000..197b6fb --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/serving.py @@ -0,0 +1,1081 @@ +"""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 io +import os +import platform +import signal +import socket +import socketserver +import sys +import typing as t +import warnings +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("SSL support unavailable") # noqa: B904 + + 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 +can_open_by_fd = not platform.system() == "Windows" and hasattr(socket, "fromfd") + +_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) + + def shutdown_server() -> None: + warnings.warn( + "The 'environ['werkzeug.server.shutdown']' function is" + " deprecated and will be removed in Werkzeug 2.1.", + stacklevel=2, + ) + self.server.shutdown_signal = True + + 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.server.shutdown": shutdown_server, + "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 + + def write(data: bytes) -> None: + nonlocal status_sent, headers_sent + 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) + key = key.lower() + header_keys.add(key) + if not ( + "content-length" in header_keys + or environ["REQUEST_METHOD"] == "HEAD" + or code < 200 + or code in (204, 304) + ): + self.close_connection = True + self.send_header("Connection", "close") + if "server" not in header_keys: + self.send_header("Server", self.version_string()) + if "date" not in header_keys: + self.send_header("Date", self.date_time_string()) + self.end_headers() + + assert isinstance(data, bytes), "applications must write bytes" + self.wfile.write(data) + 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"") + finally: + if hasattr(application_iter, "close"): + application_iter.close() # type: ignore + + try: + execute(self.server.app) + except (ConnectionError, socket.timeout) as e: + self.connection_dropped(e, environ) + except Exception: + if self.server.passthrough_errors: + raise + from .debug.tbtools import get_current_traceback + + traceback = get_current_traceback(ignore_system_exceptions=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 + self.server.log("error", "Error on request:\n%s", traceback.plaintext) + + def handle(self) -> None: + """Handles a request ignoring dropped connections.""" + try: + BaseHTTPRequestHandler.handle(self) + 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 + if self.server.shutdown_signal: + self.initiate_shutdown() + + def initiate_shutdown(self) -> None: + if is_running_from_reloader(): + # Windows does not provide SIGKILL, go with SIGTERM then. + sig = getattr(signal, "SIGKILL", signal.SIGTERM) + os.kill(os.getpid(), sig) + + self.server._BaseServer__shutdown_request = True # type: ignore + + 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 handle_one_request(self) -> None: + """Handle a single HTTP request.""" + self.raw_requestline = self.rfile.readline() + if not self.raw_requestline: + self.close_connection = True + elif self.parse_request(): + self.run_wsgi() + + def send_response(self, code: int, message: t.Optional[str] = None) -> None: + """Send the response header and log the response code.""" + self.log_request(code) + if message is None: + message = self.responses[code][0] if code in self.responses else "" + if self.request_version != "HTTP/0.9": + hdr = f"{self.protocol_version} {code} {message}\r\n" + self.wfile.write(hdr.encode("ascii")) + + def version_string(self) -> str: + return super().version_string().strip() + + 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 _log_add_style: + 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: + 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): + + """Simple single-threaded, single-process WSGI server.""" + + multithread = False + multiprocess = False + request_queue_size = LISTEN_QUEUE + + 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 + + self.address_family = select_address_family(host, port) + + if fd is not None: + real_sock = socket.fromfd(fd, self.address_family, socket.SOCK_STREAM) + port = 0 + + server_address = get_sockaddr(host, int(port), self.address_family) + + # remove socket file if it already exists + if self.address_family == af_unix: + server_address = t.cast(str, server_address) + + if os.path.exists(server_address): + os.unlink(server_address) + + super().__init__(server_address, handler) # type: ignore + + self.app = app + self.passthrough_errors = passthrough_errors + self.shutdown_signal = False + self.host = host + self.port = self.socket.getsockname()[1] + + # Patch in the original socket. + if fd is not None: + self.socket.close() + self.socket = real_sock + self.server_address = self.socket.getsockname() + + if ssl_context is not None: + if isinstance(ssl_context, tuple): + ssl_context = load_ssl_context(*ssl_context) + if 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: + self.shutdown_signal = False + 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.Tuple[str, int]) -> None: + if self.passthrough_errors: + raise + + return super().handle_error(request, client_address) + + +class ThreadedWSGIServer(socketserver.ThreadingMixIn, BaseWSGIServer): + + """A WSGI server that does threading.""" + + multithread = True + daemon_threads = True + + +class ForkingWSGIServer(ForkingMixIn, BaseWSGIServer): + + """A WSGI server that does forking.""" + + 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.") + BaseWSGIServer.__init__( + self, 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 a new server instance that is either threaded, or forks + or just processes one request after another. + """ + if threaded and processes > 1: + raise ValueError("cannot have a multithreaded and multi process server.") + elif threaded: + return ThreadedWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + elif processes > 1: + return ForkingWSGIServer( + host, + port, + app, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + else: + return BaseWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + + +def is_running_from_reloader() -> bool: + """Checks if the application is running from within the Werkzeug + reloader subprocess. + + .. 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 WSGI application. Optional features include a reloader, + multithreading and fork support. + + This function has a command-line interface too:: + + python -m werkzeug.serving --help + + .. versionchanged:: 2.0 + Added ``exclude_patterns`` parameter. + + .. versionadded:: 0.5 + `static_files` was added to simplify serving of static files as well + as `passthrough_errors`. + + .. versionadded:: 0.6 + support for SSL was added. + + .. versionadded:: 0.8 + Added support for automatically loading a SSL context from certificate + file and private key. + + .. versionadded:: 0.9 + Added command-line interface. + + .. versionadded:: 0.10 + Improved the reloader and added support for changing the backend + through the `reloader_type` parameter. See :ref:`reloader` + for more information. + + .. versionchanged:: 0.15 + Bind to a Unix socket by passing a path that starts with + ``unix://`` as the ``hostname``. + + :param hostname: The host to bind to, for example ``'localhost'``. + If the value is a path that starts with ``unix://`` it will bind + to a Unix socket instead of a TCP socket.. + :param port: The port for the server. eg: ``8080`` + :param application: the WSGI application to execute + :param use_reloader: should the server automatically restart the python + process if modules were changed? + :param use_debugger: should the werkzeug debugging system be used? + :param use_evalex: should the exception evaluation feature be enabled? + :param extra_files: a list of files the reloader should watch + additionally to the modules. For example configuration + files. + :param exclude_patterns: List of :mod:`fnmatch` patterns to ignore + when running the reloader. For example, ignore cache files that + shouldn't reload when updated. + :param reloader_interval: the interval for the reloader in seconds. + :param reloader_type: the type of reloader to use. The default is + auto detection. Valid values are ``'stat'`` and + ``'watchdog'``. See :ref:`reloader` for more + information. + :param threaded: should the process handle each request in a separate + thread? + :param processes: if greater than 1 then handle each request in a new process + up to this maximum number of concurrent processes. + :param request_handler: optional parameter that can be used to replace + the default one. You can use this to replace it + with a different + :class:`~BaseHTTPServer.BaseHTTPRequestHandler` + subclass. + :param static_files: a list or dict of paths for static files. This works + exactly like :class:`SharedDataMiddleware`, it's actually + just wrapping the application in that middleware before + serving. + :param passthrough_errors: set this to `True` to disable the error catching. + This means that the server will die on errors but + it can be useful to hook debuggers in (pdb etc.) + :param ssl_context: an SSL context for the connection. Either an + :class:`ssl.SSLContext`, a tuple in the form + ``(cert_file, pkey_file)``, the string ``'adhoc'`` if + the server should automatically create one, or ``None`` + to disable SSL (which is the default). + """ + if not isinstance(port, int): + raise TypeError("port must be an integer") + if use_debugger: + from .debug import DebuggedApplication + + application = DebuggedApplication(application, use_evalex) + if static_files: + from .middleware.shared_data import SharedDataMiddleware + + application = SharedDataMiddleware(application, static_files) + + def log_startup(sock: socket.socket) -> None: + all_addresses_message = ( + " * Running on all addresses.\n" + " WARNING: This is a development server. Do not use it in" + " a production deployment." + ) + + if sock.family == af_unix: + _log("info", " * Running on %s (Press CTRL+C to quit)", hostname) + else: + if hostname == "0.0.0.0": + _log("warning", all_addresses_message) + display_hostname = get_interface_ip(socket.AF_INET) + elif hostname == "::": + _log("warning", all_addresses_message) + display_hostname = get_interface_ip(socket.AF_INET6) + else: + display_hostname = hostname + + if ":" in display_hostname: + display_hostname = f"[{display_hostname}]" + + _log( + "info", + " * Running on %s://%s:%d/ (Press CTRL+C to quit)", + "http" if ssl_context is None else "https", + display_hostname, + sock.getsockname()[1], + ) + + def inner() -> None: + try: + fd: t.Optional[int] = int(os.environ["WERKZEUG_SERVER_FD"]) + except (LookupError, ValueError): + fd = None + srv = make_server( + hostname, + port, + application, + threaded, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + if fd is None: + log_startup(srv.socket) + srv.serve_forever() + + if use_reloader: + # If we're not running already in the subprocess that is the + # reloader we want to open up a socket early to make sure the + # port is actually available. + if not is_running_from_reloader(): + if port == 0 and not can_open_by_fd: + raise ValueError( + "Cannot bind to a random port with enabled " + "reloader if the Python interpreter does " + "not support socket opening by fd." + ) + + # Create and destroy a socket so that any exceptions are + # raised before we spawn a separate Python interpreter and + # lose this ability. + address_family = select_address_family(hostname, port) + server_address = get_sockaddr(hostname, port, address_family) + s = socket.socket(address_family, socket.SOCK_STREAM) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.bind(server_address) + s.set_inheritable(True) + + # If we can open the socket by file descriptor, then we can just + # reuse this one and our socket will survive the restarts. + if can_open_by_fd: + os.environ["WERKZEUG_SERVER_FD"] = str(s.fileno()) + s.listen(LISTEN_QUEUE) + log_startup(s) + else: + s.close() + if address_family == af_unix: + server_address = t.cast(str, server_address) + _log("info", "Unlinking %s", server_address) + os.unlink(server_address) + + from ._reloader import run_with_reloader as _rwr + + _rwr( + inner, + extra_files=extra_files, + exclude_patterns=exclude_patterns, + interval=reloader_interval, + reloader_type=reloader_type, + ) + else: + inner() + + +def run_with_reloader(*args: t.Any, **kwargs: t.Any) -> None: + """Run a process with the reloader. This is not a public API, do + not use this function. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. + """ + from ._reloader import run_with_reloader as _rwr + + warnings.warn( + ( + "'run_with_reloader' is a private API, it will no longer be" + " accessible in Werkzeug 2.1. Use 'run_simple' instead." + ), + DeprecationWarning, + stacklevel=2, + ) + _rwr(*args, **kwargs) + + +def main() -> None: + """A simple command-line interface for :py:func:`run_simple`.""" + import argparse + from .utils import import_string + + _log("warning", "This CLI is deprecated and will be removed in version 2.1.") + + parser = argparse.ArgumentParser( + description="Run the given WSGI application with the development server.", + allow_abbrev=False, + ) + parser.add_argument( + "-b", + "--bind", + dest="address", + help="The hostname:port the app should listen on.", + ) + parser.add_argument( + "-d", + "--debug", + action="store_true", + help="Show the interactive debugger for unhandled exceptions.", + ) + parser.add_argument( + "-r", + "--reload", + action="store_true", + help="Reload the process if modules change.", + ) + parser.add_argument( + "application", help="Application to import and serve, in the form module:app." + ) + args = parser.parse_args() + hostname, port = None, None + + if args.address: + hostname, _, port = args.address.partition(":") + + run_simple( + hostname=hostname or "127.0.0.1", + port=int(port or 5000), + application=import_string(args.application), + use_reloader=args.reload, + use_debugger=args.debug, + ) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.7/site-packages/werkzeug/test.py b/venv/lib/python3.7/site-packages/werkzeug/test.py new file mode 100644 index 0000000..09cb7e8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/test.py @@ -0,0 +1,1326 @@ +import mimetypes +import sys +import typing as t +import warnings +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 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 + + 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 = Headers([("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.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 perecent-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() # type: ignore + 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): # type: ignore + 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 and pieces[1].isdigit(): + return int(pieces[1]) + 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() + + if content_type is not None: + result["CONTENT_TYPE"] = content_type + headers.set("Content-Type", content_type) + + if content_length is not None: + result["CONTENT_LENGTH"] = str(content_length) + headers.set("Content-Length", 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.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, 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, + as_tuple: bool = False, + 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.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"] = [] + + while follow_redirects and 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, or not + # following 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) + + if as_tuple: + warnings.warn( + "'as_tuple' is deprecated and will be removed in" + " Werkzeug 2.1. Access 'response.request.environ'" + " instead.", + DeprecationWarning, + stacklevel=2, + ) + return request.environ, response # type: ignore + + 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``. + """ + + 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. + """ + + 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 + + def __iter__(self) -> t.Iterator: + warnings.warn( + ( + "The test client no longer returns a tuple, it returns" + " a 'TestResponse'. Tuple unpacking is deprecated and" + " will be removed in Werkzeug 2.1. Access the" + " attributes 'data', 'status', and 'headers' instead." + ), + DeprecationWarning, + stacklevel=2, + ) + return iter(self._compat_tuple) + + def __getitem__(self, item: int) -> t.Any: + warnings.warn( + ( + "The test client no longer returns a tuple, it returns" + " a 'TestResponse'. Item indexing is deprecated and" + " will be removed in Werkzeug 2.1. Access the" + " attributes 'data', 'status', and 'headers' instead." + ), + DeprecationWarning, + stacklevel=2, + ) + return self._compat_tuple[item] diff --git a/venv/lib/python3.7/site-packages/werkzeug/testapp.py b/venv/lib/python3.7/site-packages/werkzeug/testapp.py new file mode 100644 index 0000000..981f887 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/testapp.py @@ -0,0 +1,240 @@ +"""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 html import escape +from textwrap import wrap + +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(escape(repr(value)))) + wsgi_env.append(f"{escape(str(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/python3.7/site-packages/werkzeug/urls.py b/venv/lib/python3.7/site-packages/werkzeug/urls.py new file mode 100644 index 0000000..9529da0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/urls.py @@ -0,0 +1,1211 @@ +"""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 +import warnings + +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"-._~" + ) +) + +_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", + decode_keys: None = None, + 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 decode_keys is not None: + warnings.warn( + "'decode_keys' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + 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", + decode_keys: None = None, + include_empty: bool = True, + errors: str = "replace", + separator: bytes = b"&", + cls: t.Optional[t.Type["ds.MultiDict"]] = None, + limit: t.Optional[int] = None, + return_iterator: bool = False, +) -> "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 + + if decode_keys is not None: + warnings.warn( + "'decode_keys' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + + pair_iter = make_chunk_iter(stream, separator, limit) + decoder = _url_decode_impl(pair_iter, charset, include_empty, errors) + + if return_iterator: + warnings.warn( + "'return_iterator' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + return decoder # type: ignore + + 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", + encode_keys: None = None, + 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. + """ + if encode_keys is not None: + warnings.warn( + "'encode_keys' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + 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", + encode_keys: None = None, + 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 + """ + if encode_keys is not None: + warnings.warn( + "'encode_keys' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + 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)) + + +class Href: + """Implements a callable that constructs URLs with the given base. The + function can be called with any number of positional and keyword + arguments which than are used to assemble the URL. Works with URLs + and posix paths. + + Positional arguments are appended as individual segments to + the path of the URL: + + >>> href = Href('/foo') + >>> href('bar', 23) + '/foo/bar/23' + >>> href('foo', bar=23) + '/foo/foo?bar=23' + + If any of the arguments (positional or keyword) evaluates to `None` it + will be skipped. If no keyword arguments are given the last argument + can be a :class:`dict` or :class:`MultiDict` (or any other dict subclass), + otherwise the keyword arguments are used for the query parameters, cutting + off the first trailing underscore of the parameter name: + + >>> href(is_=42) + '/foo?is=42' + >>> href({'foo': 'bar'}) + '/foo?foo=bar' + + Combining of both methods is not allowed: + + >>> href({'foo': 'bar'}, bar=42) + Traceback (most recent call last): + ... + TypeError: keyword arguments and query-dicts can't be combined + + Accessing attributes on the href object creates a new href object with + the attribute name as prefix: + + >>> bar_href = href.bar + >>> bar_href("blub") + '/foo/bar/blub' + + If `sort` is set to `True` the items are sorted by `key` or the default + sorting algorithm: + + >>> href = Href("/", sort=True) + >>> href(a=1, b=2, c=3) + '/?a=1&b=2&c=3' + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :mod:`werkzeug.routing` + instead. + + .. versionadded:: 0.5 + `sort` and `key` were added. + """ + + def __init__( # type: ignore + self, base="./", charset="utf-8", sort=False, key=None + ): + warnings.warn( + "'Href' is deprecated and will be removed in Werkzeug 2.1." + " Use 'werkzeug.routing' instead.", + DeprecationWarning, + stacklevel=2, + ) + + if not base: + base = "./" + self.base = base + self.charset = charset + self.sort = sort + self.key = key + + def __getattr__(self, name): # type: ignore + if name[:2] == "__": + raise AttributeError(name) + base = self.base + if base[-1:] != "/": + base += "/" + return Href(url_join(base, name), self.charset, self.sort, self.key) + + def __call__(self, *path, **query): # type: ignore + if path and isinstance(path[-1], dict): + if query: + raise TypeError("keyword arguments and query-dicts can't be combined") + query, path = path[-1], path[:-1] + elif query: + query = {k[:-1] if k.endswith("_") else k: v for k, v in query.items()} + path = "/".join( + [ + _to_str(url_quote(x, self.charset), "ascii") + for x in path + if x is not None + ] + ).lstrip("/") + rv = self.base + if path: + if not rv.endswith("/"): + rv += "/" + rv = url_join(rv, f"./{path}") + if query: + rv += "?" + _to_str( + url_encode(query, self.charset, sort=self.sort, key=self.key), "ascii" + ) + return rv diff --git a/venv/lib/python3.7/site-packages/werkzeug/user_agent.py b/venv/lib/python3.7/site-packages/werkzeug/user_agent.py new file mode 100644 index 0000000..66ffcbe --- /dev/null +++ b/venv/lib/python3.7/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/python3.7/site-packages/werkzeug/useragents.py b/venv/lib/python3.7/site-packages/werkzeug/useragents.py new file mode 100644 index 0000000..4deed8f --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/useragents.py @@ -0,0 +1,215 @@ +import re +import typing as t +import warnings + +from .user_agent import UserAgent as _BaseUserAgent + +if t.TYPE_CHECKING: + from _typeshed.wsgi import WSGIEnvironment + + +class _UserAgentParser: + platform_rules: t.ClassVar[t.Iterable[t.Tuple[str, str]]] = ( + (" cros ", "chromeos"), + ("iphone|ios", "iphone"), + ("ipad", "ipad"), + (r"darwin\b|mac\b|os\s*x", "macos"), + ("win", "windows"), + (r"android", "android"), + ("netbsd", "netbsd"), + ("openbsd", "openbsd"), + ("freebsd", "freebsd"), + ("dragonfly", "dragonflybsd"), + ("(sun|i86)os", "solaris"), + (r"x11\b|lin(\b|ux)?", "linux"), + (r"nintendo\s+wii", "wii"), + ("irix", "irix"), + ("hp-?ux", "hpux"), + ("aix", "aix"), + ("sco|unix_sv", "sco"), + ("bsd", "bsd"), + ("amiga", "amiga"), + ("blackberry|playbook", "blackberry"), + ("symbian", "symbian"), + ) + browser_rules: t.ClassVar[t.Iterable[t.Tuple[str, str]]] = ( + ("googlebot", "google"), + ("msnbot", "msn"), + ("yahoo", "yahoo"), + ("ask jeeves", "ask"), + (r"aol|america\s+online\s+browser", "aol"), + (r"opera|opr", "opera"), + ("edge|edg", "edge"), + ("chrome|crios", "chrome"), + ("seamonkey", "seamonkey"), + ("firefox|firebird|phoenix|iceweasel", "firefox"), + ("galeon", "galeon"), + ("safari|version", "safari"), + ("webkit", "webkit"), + ("camino", "camino"), + ("konqueror", "konqueror"), + ("k-meleon", "kmeleon"), + ("netscape", "netscape"), + (r"msie|microsoft\s+internet\s+explorer|trident/.+? rv:", "msie"), + ("lynx", "lynx"), + ("links", "links"), + ("Baiduspider", "baidu"), + ("bingbot", "bing"), + ("mozilla", "mozilla"), + ) + + _browser_version_re = r"(?:{pattern})[/\sa-z(]*(\d+[.\da-z]+)?" + _language_re = re.compile( + r"(?:;\s*|\s+)(\b\w{2}\b(?:-\b\w{2}\b)?)\s*;|" + r"(?:\(|\[|;)\s*(\b\w{2}\b(?:-\b\w{2}\b)?)\s*(?:\]|\)|;)" + ) + + def __init__(self) -> None: + self.platforms = [(b, re.compile(a, re.I)) for a, b in self.platform_rules] + self.browsers = [ + (b, re.compile(self._browser_version_re.format(pattern=a), re.I)) + for a, b in self.browser_rules + ] + + def __call__( + self, user_agent: str + ) -> t.Tuple[t.Optional[str], t.Optional[str], t.Optional[str], t.Optional[str]]: + platform: t.Optional[str] + browser: t.Optional[str] + version: t.Optional[str] + language: t.Optional[str] + + for platform, regex in self.platforms: # noqa: B007 + match = regex.search(user_agent) + if match is not None: + break + else: + platform = None + + # Except for Trident, all browser key words come after the last ')' + last_closing_paren = 0 + if ( + not re.compile(r"trident/.+? rv:", re.I).search(user_agent) + and ")" in user_agent + and user_agent[-1] != ")" + ): + last_closing_paren = user_agent.rindex(")") + + for browser, regex in self.browsers: # noqa: B007 + match = regex.search(user_agent[last_closing_paren:]) + if match is not None: + version = match.group(1) + break + else: + browser = version = None + match = self._language_re.search(user_agent) + if match is not None: + language = match.group(1) or match.group(2) + else: + language = None + return platform, browser, version, language + + +# It wasn't public, but users might have imported it anyway, show a +# warning if a user created an instance. +class UserAgentParser(_UserAgentParser): + """A simple user agent parser. Used by the `UserAgent`. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use a dedicated parser library + instead. + """ + + def __init__(self) -> None: + warnings.warn( + "'UserAgentParser' is deprecated and will be removed in" + " Werkzeug 2.1. Use a dedicated parser library instead.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__() + + +class _deprecated_property(property): + def __init__(self, fget: t.Callable[["_UserAgent"], t.Any]) -> None: + super().__init__(fget) + self.message = ( + "The built-in user agent parser is deprecated and will be" + f" removed in Werkzeug 2.1. The {fget.__name__!r} property" + " will be 'None'. Subclass 'werkzeug.user_agent.UserAgent'" + " and set 'Request.user_agent_class' to use a different" + " parser." + ) + + def __get__(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + warnings.warn(self.message, DeprecationWarning, stacklevel=3) + return super().__get__(*args, **kwargs) + + +# This is what Request.user_agent returns for now, only show warnings on +# attribute access, not creation. +class _UserAgent(_BaseUserAgent): + _parser = _UserAgentParser() + + def __init__(self, string: str) -> None: + super().__init__(string) + info = self._parser(string) + self._platform, self._browser, self._version, self._language = info + + @_deprecated_property + def platform(self) -> t.Optional[str]: # type: ignore + return self._platform + + @_deprecated_property + def browser(self) -> t.Optional[str]: # type: ignore + return self._browser + + @_deprecated_property + def version(self) -> t.Optional[str]: # type: ignore + return self._version + + @_deprecated_property + def language(self) -> t.Optional[str]: # type: ignore + return self._language + + +# This is what users might be importing, show warnings on create. +class UserAgent(_UserAgent): + """Represents a parsed user agent header value. + + This uses a basic parser to try to extract some information from the + header. + + :param environ_or_string: The header value to parse, or a WSGI + environ containing the header. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Subclass + :class:`werkzeug.user_agent.UserAgent` (note the new module + name) to use a dedicated parser instead. + + .. versionchanged:: 2.0 + Passing a WSGI environ is deprecated and will be removed in 2.1. + """ + + def __init__(self, environ_or_string: "t.Union[str, WSGIEnvironment]") -> None: + if isinstance(environ_or_string, dict): + warnings.warn( + "Passing an environ to 'UserAgent' is deprecated and" + " will be removed in Werkzeug 2.1. Pass the header" + " value string instead.", + DeprecationWarning, + stacklevel=2, + ) + string = environ_or_string.get("HTTP_USER_AGENT", "") + else: + string = environ_or_string + + warnings.warn( + "The 'werkzeug.useragents' module is deprecated and will be" + " removed in Werkzeug 2.1. The new base API is" + " 'werkzeug.user_agent.UserAgent'.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(string) diff --git a/venv/lib/python3.7/site-packages/werkzeug/utils.py b/venv/lib/python3.7/site-packages/werkzeug/utils.py new file mode 100644 index 0000000..9007231 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/utils.py @@ -0,0 +1,1099 @@ +import codecs +import io +import mimetypes +import os +import pkgutil +import re +import sys +import typing as t +import unicodedata +import warnings +from datetime import datetime +from html.entities import name2codepoint +from time import time +from zlib import adler32 + +from ._internal import _DictAccessorProperty +from ._internal import _missing +from ._internal import _parse_signature +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 + + The class must have a ``__dict__`` for this to work. + + .. 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.__module__ = fget.__module__ + + def __set__(self, obj: object, value: _T) -> None: + obj.__dict__[self.__name__] = value + + def __get__(self, obj: object, type: type = None) -> _T: # type: ignore + if obj is None: + return self # type: ignore + + value: _T = obj.__dict__.get(self.__name__, _missing) + + if value is _missing: + value = self.fget(obj) # type: ignore + obj.__dict__[self.__name__] = value + + return value + + def __delete__(self, obj: object) -> None: + del obj.__dict__[self.__name__] + + +def invalidate_cached_property(obj: object, name: str) -> None: + """Invalidates the cache for a :class:`cached_property`: + + >>> class Test(object): + ... @cached_property + ... def magic_number(self): + ... print("recalculating...") + ... return 42 + ... + >>> var = Test() + >>> var.magic_number + recalculating... + 42 + >>> var.magic_number + 42 + >>> invalidate_cached_property(var, "magic_number") + >>> var.magic_number + recalculating... + 42 + + You must pass the name of the cached property as the second argument. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use ``del obj.name`` instead. + """ + warnings.warn( + "'invalidate_cached_property' is deprecated and will be removed" + " in Werkzeug 2.1. Use 'del obj.name' instead.", + DeprecationWarning, + stacklevel=2, + ) + delattr(obj, name) + + +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 + + +class HTMLBuilder: + """Helper object for HTML generation. + + Per default there are two instances of that class. The `html` one, and + the `xhtml` one for those two dialects. The class uses keyword parameters + and positional parameters to generate small snippets of HTML. + + Keyword parameters are converted to XML/SGML attributes, positional + arguments are used as children. Because Python accepts positional + arguments before keyword arguments it's a good idea to use a list with the + star-syntax for some children: + + >>> html.p(class_='foo', *[html.a('foo', href='foo.html'), ' ', + ... html.a('bar', href='bar.html')]) + '

    foo bar

    ' + + This class works around some browser limitations and can not be used for + arbitrary SGML/XML generation. For that purpose lxml and similar + libraries exist. + + Calling the builder escapes the string passed: + + >>> html.p(html("")) + '

    <foo>

    ' + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. + """ + + _entity_re = re.compile(r"&([^;]+);") + _entities = name2codepoint.copy() + _entities["apos"] = 39 + _empty_elements = { + "area", + "base", + "basefont", + "br", + "col", + "command", + "embed", + "frame", + "hr", + "img", + "input", + "keygen", + "isindex", + "link", + "meta", + "param", + "source", + "wbr", + } + _boolean_attributes = { + "selected", + "checked", + "compact", + "declare", + "defer", + "disabled", + "ismap", + "multiple", + "nohref", + "noresize", + "noshade", + "nowrap", + } + _plaintext_elements = {"textarea"} + _c_like_cdata = {"script", "style"} + + def __init__(self, dialect): # type: ignore + self._dialect = dialect + + def __call__(self, s): # type: ignore + import html + + warnings.warn( + "'utils.HTMLBuilder' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + return html.escape(s) + + def __getattr__(self, tag): # type: ignore + import html + + warnings.warn( + "'utils.HTMLBuilder' is deprecated and will be removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + if tag[:2] == "__": + raise AttributeError(tag) + + def proxy(*children, **arguments): # type: ignore + buffer = f"<{tag}" + for key, value in arguments.items(): + if value is None: + continue + if key[-1] == "_": + key = key[:-1] + if key in self._boolean_attributes: + if not value: + continue + if self._dialect == "xhtml": + value = f'="{key}"' + else: + value = "" + else: + value = f'="{html.escape(value)}"' + buffer += f" {key}{value}" + if not children and tag in self._empty_elements: + if self._dialect == "xhtml": + buffer += " />" + else: + buffer += ">" + return buffer + buffer += ">" + + children_as_string = "".join([str(x) for x in children if x is not None]) + + if children_as_string: + if tag in self._plaintext_elements: + children_as_string = html.escape(children_as_string) + elif tag in self._c_like_cdata and self._dialect == "xhtml": + children_as_string = f"/**/" + buffer += children_as_string + f"" + return buffer + + return proxy + + def __repr__(self) -> str: + return f"<{type(self).__name__} for {self._dialect!r}>" + + +html = HTMLBuilder("html") +xhtml = HTMLBuilder("xhtml") + +# 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 detect_utf_encoding(data: bytes) -> str: + """Detect which UTF encoding was used to encode the given bytes. + + The latest JSON standard (:rfc:`8259`) suggests that only UTF-8 is + accepted. Older documents allowed 8, 16, or 32. 16 and 32 can be big + or little endian. Some editors or libraries may prepend a BOM. + + :internal: + + :param data: Bytes in unknown UTF encoding. + :return: UTF encoding name + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. This is built in to + :func:`json.loads`. + + .. versionadded:: 0.15 + """ + warnings.warn( + "'detect_utf_encoding' is deprecated and will be removed in" + " Werkzeug 2.1. This is built in to 'json.loads'.", + DeprecationWarning, + stacklevel=2, + ) + head = data[:4] + + if head[:3] == codecs.BOM_UTF8: + return "utf-8-sig" + + if b"\x00" not in head: + return "utf-8" + + if head in (codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE): + return "utf-32" + + if head[:2] in (codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE): + return "utf-16" + + if len(head) == 4: + if head[:3] == b"\x00\x00\x00": + return "utf-32-be" + + if head[::2] == b"\x00\x00": + return "utf-16-be" + + if head[1:] == b"\x00\x00\x00": + return "utf-32-le" + + if head[1::2] == b"\x00\x00": + return "utf-16-le" + + if len(head) == 2: + return "utf-16-be" if head.startswith(b"\x00") else "utf-16-le" + + return "utf-8" + + +def format_string(string: str, context: t.Mapping[str, t.Any]) -> str: + """String-template format a string: + + >>> format_string('$foo and ${foo}s', dict(foo=42)) + '42 and 42s' + + This does not do any attribute lookup. + + :param string: the format string. + :param context: a dict with the variables to insert. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :class:`string.Template` + instead. + """ + from string import Template + + warnings.warn( + "'utils.format_string' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'string.Template' instead.", + DeprecationWarning, + stacklevel=2, + ) + return Template(string).substitute(context) + + +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.path.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 escape(s: t.Any) -> str: + """Replace ``&``, ``<``, ``>``, ``"``, and ``'`` with HTML-safe + sequences. + + ``None`` is escaped to an empty string. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use MarkupSafe instead. + """ + import html + + warnings.warn( + "'utils.escape' is deprecated and will be removed in Werkzeug" + " 2.1. Use MarkupSafe instead.", + DeprecationWarning, + stacklevel=2, + ) + + if s is None: + return "" + + if hasattr(s, "__html__"): + return s.__html__() # type: ignore + + if not isinstance(s, str): + s = str(s) + + return html.escape(s, quote=True) # type: ignore + + +def unescape(s: str) -> str: + """The reverse of :func:`escape`. This unescapes all the HTML + entities, not only those inserted by ``escape``. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use MarkupSafe instead. + """ + import html + + warnings.warn( + "'utils.unescape' is deprecated and will be removed in Werkzueg" + " 2.1. Use MarkupSafe instead.", + DeprecationWarning, + stacklevel=2, + ) + return html.unescape(s) + + +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. + """ + import html + + if Response is None: + from .wrappers import Response # type: ignore + + display_location = html.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' + "Redirecting...\n" + "

    Redirecting...

    \n" + "

    You should be redirected automatically to target URL: " + f'{display_location}. If' + " not click the link.", + code, + mimetype="text/html", + ) + response.headers["Location"] = location + return response + + +def append_slash_redirect(environ: "WSGIEnvironment", code: int = 301) -> "Response": + """Redirects to the same URL but with a slash appended. The behavior + of this function is undefined if the path ends with a slash already. + + :param environ: the WSGI environment for the request that triggers + the redirect. + :param code: the status code for the redirect. + """ + new_path = environ["PATH_INFO"].strip("/") + "/" + query_string = environ.get("QUERY_STRING") + if query_string: + new_path += f"?{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. + + 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. + :param path: The path to the file to send, relative to + ``directory``. + :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 + + +def validate_arguments(func, args, kwargs, drop_extra=True): # type: ignore + """Checks if the function accepts the arguments and keyword arguments. + Returns a new ``(args, kwargs)`` tuple that can safely be passed to + the function without causing a `TypeError` because the function signature + is incompatible. If `drop_extra` is set to `True` (which is the default) + any extra positional or keyword arguments are dropped automatically. + + The exception raised provides three attributes: + + `missing` + A set of argument names that the function expected but where + missing. + + `extra` + A dict of keyword arguments that the function can not handle but + where provided. + + `extra_positional` + A list of values that where given by positional argument but the + function cannot accept. + + This can be useful for decorators that forward user submitted data to + a view function:: + + from werkzeug.utils import ArgumentValidationError, validate_arguments + + def sanitize(f): + def proxy(request): + data = request.values.to_dict() + try: + args, kwargs = validate_arguments(f, (request,), data) + except ArgumentValidationError: + raise BadRequest('The browser failed to transmit all ' + 'the data expected.') + return f(*args, **kwargs) + return proxy + + :param func: the function the validation is performed against. + :param args: a tuple of positional arguments. + :param kwargs: a dict of keyword arguments. + :param drop_extra: set to `False` if you don't want extra arguments + to be silently dropped. + :return: tuple in the form ``(args, kwargs)``. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :func:`inspect.signature` + instead. + """ + warnings.warn( + "'utils.validate_arguments' is deprecated and will be removed" + " in Werkzeug 2.1. Use 'inspect.signature' instead.", + DeprecationWarning, + stacklevel=2, + ) + parser = _parse_signature(func) + args, kwargs, missing, extra, extra_positional = parser(args, kwargs)[:5] + if missing: + raise ArgumentValidationError(tuple(missing)) + elif (extra or extra_positional) and not drop_extra: + raise ArgumentValidationError(None, extra, extra_positional) + return tuple(args), kwargs + + +def bind_arguments(func, args, kwargs): # type: ignore + """Bind the arguments provided into a dict. When passed a function, + a tuple of arguments and a dict of keyword arguments `bind_arguments` + returns a dict of names as the function would see it. This can be useful + to implement a cache decorator that uses the function arguments to build + the cache key based on the values of the arguments. + + :param func: the function the arguments should be bound for. + :param args: tuple of positional arguments. + :param kwargs: a dict of keyword arguments. + :return: a :class:`dict` of bound keyword arguments. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Use :meth:`Signature.bind` + instead. + """ + warnings.warn( + "'utils.bind_arguments' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'Signature.bind' instead.", + DeprecationWarning, + stacklevel=2, + ) + ( + args, + kwargs, + missing, + extra, + extra_positional, + arg_spec, + vararg_var, + kwarg_var, + ) = _parse_signature(func)(args, kwargs) + values = {} + for (name, _has_default, _default), value in zip(arg_spec, args): + values[name] = value + if vararg_var is not None: + values[vararg_var] = tuple(extra_positional) + elif extra_positional: + raise TypeError("too many positional arguments") + if kwarg_var is not None: + multikw = set(extra) & {x[0] for x in arg_spec} + if multikw: + raise TypeError( + f"got multiple values for keyword argument {next(iter(multikw))!r}" + ) + values[kwarg_var] = extra + elif extra: + raise TypeError(f"got unexpected keyword argument {next(iter(extra))!r}") + return values + + +class ArgumentValidationError(ValueError): + """Raised if :func:`validate_arguments` fails to validate + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1 along with ``utils.bind`` and + ``validate_arguments``. + """ + + def __init__(self, missing=None, extra=None, extra_positional=None): # type: ignore + self.missing = set(missing or ()) + self.extra = extra or {} + self.extra_positional = extra_positional or [] + super().__init__( + "function arguments invalid." + f" ({len(self.missing)} missing," + f" {len(self.extra) + len(self.extra_positional)} additional)" + ) + + +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/python3.7/site-packages/werkzeug/wrappers/__init__.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__init__.py new file mode 100644 index 0000000..eb69a99 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__init__.py @@ -0,0 +1,16 @@ +from .accept import AcceptMixin +from .auth import AuthorizationMixin +from .auth import WWWAuthenticateMixin +from .base_request import BaseRequest +from .base_response import BaseResponse +from .common_descriptors import CommonRequestDescriptorsMixin +from .common_descriptors import CommonResponseDescriptorsMixin +from .etag import ETagRequestMixin +from .etag import ETagResponseMixin +from .request import PlainRequest +from .request import Request as Request +from .request import StreamOnlyMixin +from .response import Response as Response +from .response import ResponseStream +from .response import ResponseStreamMixin +from .user_agent import UserAgentMixin diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a1d78a8552b4c05e6c13f01bd5e222dae1bf086 GIT binary patch literal 872 zcmaKq&2AGh5XX0uO|r>;kCi% z#P*K!v*Ac5sT^kkp(E%(Ggh9tDy7ehHBBg+Hih(wk{5zB-mmWRkGNiC1W zSWd{qa)dl3Q_C^(jLa-2;y}*H+;WP1NDeKJk&noc<%xJ87i57vz3`T^Up_u%={M18 zvtgBf#jkmR?rc@-k0tP1s(D#Bb-rG&%?2wp-%!n*9-UFe&e>(nl*Z(^byZasilP7L zc`0RC>;qmfwEpC zQ-~WE9iFqhDpSX880H@Qt+=H0y<)K1VH2$Kdik*FQ`RtBv4uDn_ g1C`}DFSyS0$JI>}K9%LR7VMdsCv}V__W$?&0eBMhHUIzs literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44a1fe53692027dd9ad8d3183d18ce5445771deb GIT binary patch literal 766 zcmYjP&2AGh5cba|EFl4e`T!P}C`e6!GpZ;;;zSN`sI(VrSv$pv<7{ki(nP(rQcv&% zyZ{GYXgR{AufU0!O#-zv;VC3V6tyIy z&CD|Pjwq)1HBtPEWn9sZWRTp#J~A#aA4akV;TZtk{GTz+rwN9lihbiZWI`2J$#pkt z-H?Q2ZQyFv4^E3hm+`&1Fm62Hb&~t@P`796-RyO&yemL+Gf-;_;t@onHcMlXWGxU zx;hsxhcAYr|3NP+9b#X&#Tv?mt&|QTe%4}Axgwf{%dLqUp$zawyBXdx&^VxVC&av% zS-sL0+D)M^XB@PcAgZ6d-3tMNvt6lfg{suPPNg)?L@CjgpzXwC_a3bV+WS%#HV;9{ z@8r+PD9+1KY06{c;5ciKpRaT^U;2yDp^edc-_L06^Ah;OC~uq}mK)y%&Nf77UI|So zq>8xW+lSr3xB9XBO7=8tesiV5rgId%vc>h#r4%n81ifKH_}<$nR9K*&V^ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a3647355ad7ae924361b37ff733231804471b75 GIT binary patch literal 1314 zcmb_c!EO^V5VhC4>9!;VN`V7HT5*Yj)TD5(5JgCw=m8Evxme5EZQVM~#`Y#nR8Fnb z6MO+bz%MOFxbzn|F|$c%MSDPir5Vqx*E93x&F+gvV}-!_{&keTV}yJ|XR*L1&q3TK zC_x0(q(`eg=moEc2n0JNf}I3C23{y4@FMU+LEn;A?Hq2AoecG2g>%C_218cSdVypI zA&Q_P_{`48E)`6Kr}bWRMncl7L9D1;+b;b6z^ZBL)xf+~N6PH9SQ(~v&y}^q@ocx! z7uIBSo(2I#AU8qWBT$|kP(giwrGI3Ucy>Y#!ee?Ie4-Q}LaK0QI&EG})=ZR3gv_nX zQZGf48j*~Z*2#OBSlJ(p;F&T>SK7m=EcTM8?I-P|`9=;4>3lOWgE1Uux)9POeqScL zg~<>}s+FH4LP1=wC++h9s%+76#rZTl)N&*>fR6#5Q3jBPXq9U(=Y>Fk?(C?HT#-v# z#+)moJm=UPC-ttyCRl7dgk9!5)2VZue<44%I=-KGa+Pl=1L?Hh*c{2CKeR`k1&q#k zj;AxWX%6vSCj}nb`NY;CVhzMq^Fu=#uz<$F^ug8MwSU#Lg!P%UFF7w)IPVWcq0z2$ zJ}go_KcT*4+h&%cY|Kl}q}H5Uq_R>iYFE*|g$lcdL_0KMTKWHJ@YcKCE<%#VE2Mrg zdKZ1QnE794?nCpsJbycNE*}^t|9tE$G6@}B!Y#5fY<3wHl520ELcUwfHqgE_QZo`N zRw^d&wKb66$Kv62@GcF8y^VqKroDq|9o1b_7}4HCbv^g@;Rr7;xJMtpnVO&E@X5>q gRe*3dES_Ejnps$Q8E?&|@frR+9QGroF literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9be4494b00671fb3d093115b78abc5b4fa634389 GIT binary patch literal 1707 zcmc&!Pj3`A6t`zQe>Nm7q=8D5s#8=cOjUMi�mh(OVAC3TZCZ?AS>r>z$q0o@_VD zEs;3UBPYHa6NKi?kauNfil@X(JC zHjiMMEg*sjsz^rL)yq8L319hBmN80xCW49Jl!!nECw>;fITR6`Bgtea;#Vw-1bt4@ z!5K&*+h-JLN?r6!9yHR}0=fP0Ve<&4c>qMV8Z%G&`%DIczG?NIvMdBn1RMsOK!m`F zMFbjRx6YsD6ZyOu7b-XA$(}4Gspn$TF{CH)tLc?b ziS>`EWhWj;XWK`6n~!rNJHt1V(j-FGS{AvLBFQU}%uA(`u}rj_&JKZBR>=#gCr7f` zO@0`DKTLi#GTAImZ_vF$neUQLUp6jZtc8z1W zbL(53_HtIeSYEl6bKx4J3GVx#M5C8~5d8@(@3%&FT94|ozK{BHrS3mCl+E-&|2FEa z9nCwlM{}LmwbW)b2G_Y>CT&z7fM61O0bLUG8eZN&f+<*%Pw_2; zv47iz5nuhgF#hG^b~~yUlx7MjB zq*A>a%srI$*Z2qnt-k<*(_mMMX?sTVrV_dnHd^Ssp e(|*5zg0|FJD8vt!1^XkW+aR=JXd$cq^^Fhc^Q@Er literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7cc9aaa998bafc2433e94e5f1a4d2718564f9fb GIT binary patch literal 1718 zcmc&!PmkO*6t@#6lUa75U0RU%BSM8V4WcuJb5)hLz-sK;Ixa?Qp#Cw^9-DMF%;(#ST+t2p<|9cO2cD5Lf-+npFUJJ&4r9(eL z+&sW(A0tsram`ZRu3qXXPx;zkh*WU)9aBODr%VM9ocL*o=THssJOBZqie8Fzp!gG( z49`#!+dJb(6Yiq#!B)%CLQd>{__%q1)80h_t;*B`e!j zNDWX$v)JBAAl)Qu@~55?1Q2+iWT`DxOd zJ6UyhPgW+YDlm33MdzjI@;0v4?z)t{BRR!d$_S;~wye0|p6Bt%JNoQuQpQ(4Qkq&@ z${Y+;-~XSZ-kjUZ>FjTFWCmzw!VNi{1ZIefA>YkgNGK1zgf0(ehc2%Zp)733JM$}(Gklx|DP#Zonz_S;fEZ!+E8@Y;zV))hE0T`sk`MrQb5 zmuvIxpQc?l(qNBZ&bUO`RFu~Fg zu@$)Oi^$qbd?zx4WggD4&JXOSBB*uHpsJ>7rqJ12NUoyxgw4b;KlXm+9NX6hz0H3| z@2E%WC@z;P1Z%Dv1vajqLA>9Td5t*CbWyKkRbX4F^?LlzMH1Ksp+yNR%A%H%9JiqN z%}3~#`4|cIfT5IaKa=vjWXvacM~}{n#Bb4d^I{+oXPw-Exj_`#jVnZQwBjd}A^}{drh{V-F5IW(f^|{6t>joLXh{G}b)tc^k5Rd_+FS$x z*6X9PWs6*zGT=PXiQ^pmWTo0L*bjr_0N8oXV-;D;`4{rz<BJQ!Bmr~rh|W50{c}pzae@?Hs&gpKn!yY-F0*~&>^LJpG`qrH2?qr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/cors.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/cors.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27afbe23a72cb760e48586b8c4f0a8dae51d1dbf GIT binary patch literal 1299 zcmb_c&2G~`5Z?9LsaulLmOsJC;t~a^N#R@}{v=KWsXbK6Wo5kE;%2jPch^Z1_0~!~ z!4vQTyplP>rLVw=8QY;%;eddZW_HHw{pRnpU$j~)1lG4Nleo_a`HIeBflr=+*ey_k z2&%|{mb*9bUK8O7c18p{^#%+)Uj*O<;Q4~?l1}3SZjpY1da?Z4u#doyCECD~?9fLM zRCu4*IoYRz3ID7)2+oO51`WUpinW(-cXoH=Q7)}}lOCtK-(iIxn*&=khSO>{(&a`c zv<`yl2Ou{=>_bqF98y7@hlzh+lsI-u4*e5);(eqP3WPv@e}3G)9;zLsHWD&3GKrlO zQLIHYO_hq?$;imjcmmH-9qmaooXh+mdeVK|joNjx?MRQOaGa=INE^BLGTP5|;?l8> zRqAGuNCDTWS@*(&96PjFu`W)AN=~GL!b2!dryAw0=q z6K8;Ld&$_?ZZ2OPHOGN0Remh4ax^J#b;_FPv1idLO)B9-FY;22BQp=K5BHB{I$9I{0tq^19#D7Ri!W3#cga>2RFmKqHE zuVkCoWV;gNZ`oEs{5jnWP7r#zgj--j*vv929ICm23g_HmriJzuDpl<-=TXi8U)un= zPKO7-H1G-^%sQgtHFFEqZB%zqA)L93>h~kR2S<2$F>>_bLut5K2H!~qR91tOFnD?i YR9TpH5pGu`e2V`Ii_HjW$X1&_0FB8rDgXcg literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee60bc81749535794eb72f91f1c7694cec9d564e GIT binary patch literal 1299 zcmb_c&2G~`5Z?9LsaulLmOsJC;t~a^N#R@}Kp;-!07#W`SsCv(xY=yn-F4DLy|q$L z@C3X7uVjvJ=__zz#&&2`I3Qr9nVs=^zxn&@XRX#6f%WanH10D(zM`{S;FBjHb_bLo zf+{kgmZnZ0CF9~-UsE#0TtAFnD_@qiDM_^z(1zP-bYHIKnUdb7f0=@q1sVuBOx;*lh{cS z#acwORH^8ljEo#lrtmD)(VjG;h0KT1qwd3Q)UK0lM|v`Y<3!~`+Q_|^(SEKImriu7 zQa6u83b;?-Gpimm1RGx@&TbK|U+rP+3>A)Hd%J5!mD56w|;Sw?SG*VCJs zI0Jm!lP(^1v$<&kVgtmM+@U`8m`6izarbKHx<4~o!R&NAmYf%BoR23WS7!(*P|Y<|IOh&CEwnFDscL^Yk8%e1+7`%F zI^6rEftUDTHW3xCnH#8XqPm3&;mmDRzaRM>IKs=zk)sbEO2f@F_)aRIvKpj>!P5(% X%EGLRaJM4iWBgxOY(_{!w%+^!(iGtKDaIR26NJvNoi5@EL#ah-*apE`|+nY2|Z>`i5 zJOJVac%|hCm%aigW;Q=qn(^ly@8|Cu`%SOcAu#^@TISy=A-{349}$2v2>%q4B$67E z(Pm~Ddq*Ub(JhhD4a*`)&&eRZhkayJVBU{-2mCVts`)=-Dw@O?l1la?x+7yMBN^Xz zv(_DnN!A9gR(Qd{)s8lc{^5*1*PcsNI#uLBNuFEDSK1ic?tYJo%p#OmTT7q#x{g+-Up2- zV~i$jb9`vo@F3*@%Ch-P2~l^1n9XHn5O;-GRJqwzXvm`1cFSD%c1jCnj1Uelu1N#x y9wL5>37du2>JcQgSr6j69o8ju%RRw82_~%n=hz}-sFTyJm{<5xJa#FeN%Rj)y~Hs9 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/request.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e528e5c9f4a4f08b7bff6b109a3608be97bc74c1 GIT binary patch literal 21125 zcmdUXO>i97wO)764+aAe0KtEXqFavdbows!pnss$}C;DjP3SNu2LH z_uihykd*Ywu2&V1)6+k<&pr2^|8vis3w!odE&ToW|8&>;ZPT*;8!yaX2`4|sC%$M~ zmT&oX$EvGuyKc+1Q+M=tLB5OiBEFqYsavj>ZObqC#m-o_Qm@E)sWaZK)~j+}#`#2j zLe9r`-ig9P+Qo9q}NW#cl=UcN^y4`-_ zt#*R^YcuU6h#Fl2YT&fX7svAr4*J2GhsTXLi2|?NSo2x{xy>Fgg;DpSmw4B`C=Mdr z8CwoM?FTW@nQnQljlgegM&V`c5kz9y2ESL3!a~Y zd+WygSI%#4cG@j3X@@;_#anvx-JqAWIG^TkOrOL~!LkC2JX&{df^X{u->Daa((Q6E zcEk!Qe&HQ(X?;9*r}&N)RO=JCGZ|E+O-b79kv3Cur;Iyec)NnOQ}`ao^-bKF3Z{I= zpL|&S!dkQaJ^s|^d+O7{4Bp(!4>)N0VZopA_kLb{VAp5m$v)p&xBb~Q=LmSu-}lh* z_xlIr`F{WB(kC$`#s@~e)%}CPA-s9;VM(~IR6iUX0TxFd+Wt}hIe~LDsLJ&*|M}00 z_2+;gpC0$WgR5hJtRV27>%V||&+8T^{1>@1OGL zq{kD%i{?IXd&U2rfBGxP0$LvuSZDm2wEJ%G^6iuUE#P|=b9cx;_ps={>c94R3A1xb zo_&aCujAPPdG>~R=6}Sw#=p|-x!_Q6KxU6`|9~y*j#@PvQKe_yW8 z>Fdk>6}f&@U;o7asa(Gne82uW`XN2R5qOhx`+m6hvmq@?+@yVXuM+zq8z(AIZXLw~#K;xF;;1U+{x3cGHy z5vX^ym{SyM?qx4_wGL7KGx5J3Y zhHGv&gyQYFtxlVBT61s8xG=Q_s2c|fM}xNo9o3SE_It6n7GNaq^=(W}&-Kw65CguE zm%Sgm?Szwgx9tbOWG$m%!HYOTHA2Sjj!psD651EUFDlN%br&2Y2d0S*oQ zaNa%dgR~pM1Y(m6TVPf*9Q7bF$TE@o=Eo7Jr^c)e{cA{k!EhL^Zo z!ii*Q^=>d%FoOemzYE?ZA;9~Y)PWX8 zlH6|F_dCIs7X?NHRKHyypTPke_Iuu4uic?LK}O}2LR!6!>kVzQ=Al~6g>{cXO~sl1 z{Ji^G?OX;;do$qS3tk*7E2YzH3hBG;dx~Muhv!nD&|kBeHOhbpQyZBhHX+1TZeq^C z1wNG>Tn2C{CwZ&g>5z<3&<*bfLl%Vu-qK_Tj<0^r2+q~s$U0v(dPZ~ry9>zSEp#TT zvu!-D3?n>s!4@*@id&Y_*{*l5K^Xyw8l9lGo@}K1d5^-<=mOJdyAihsL3&W`Q28|= zpOBk|j5Iyuw_{QSo+2JWNwlK&CcL$1KXiUNra3zu(=54iX|5O@;iH*R`H7D5b~y@? ze$;Cfalt=+Pv8Sr%8LIb4vF=^x^3^+j~w6joyU%x!NGs*B!wOOft?iPPU*3|S@X*~ z*6k8L68j)vF%TMg`i=_-mx0vfK&CYJLAzm zN+xbk`jg2XI$2*8@Vv13kWcRyb_!@Ywc|v8wNr@yYRAIeaeo@d(}E$KSxTpt7k_qh z@y1Hy>f*}fYZueP`->}sY5Lr?e$;8iaA3PZTHHvI&HBWRh2<;PR~k#_uP&xmef;|Q zmCKDQOP8*tlYp`OQRBwS@|C6c(=xPByZ35+VtMiEwUx!j`HL5q=PGGg8NIZuftHoB zOUI)yOh81Cy2xXF63U8XP9pGnI;M?oeS(Y%_2&70G}t-$3_73uW=^M#*~Q`R0#r(( z%!O8TifK=3E_rtamJg77aRN54MI=7m@;LEYcRElgox#kgs+^lnOK~5Le_Cn4pKm9P zMp}SxAI;$9h-{ROX-kt%8{^ansJP;^EH{Fv%(i6D=rCWXKq>VwDREllSvq@Bi!>C= zE%ivacCMHf2UqVv0w5#KukHJ#L3O9}sJLT2Mxcqa(qqfEKD7KI_`l?pK}k(~ z&+P?U#@{oRauwRxcVUC6PVaghM0Upe@N2GnWi8Wxd1s&v3j-?>i}R!3f;EA4=yU+i zxQbB#5G%CLN;1H?88~fQsUzbqwWQKxu~=JoJM05nfPzVg+lXAry|U2UlBE4%~%)y8|cHcz1;UH0zwVZ3Y27Wxa6A zeF7J7EnH~{B!*PPi{BC%*S!GKOya;vdyB6)eBw*KjcU;?E%aiSwxNrSsVS!urDg!dWXY z8TWbRfqmaeijPWuX$LkOx}ofK0q!F5PW0SNvZ*D% zBHn;dXdW?QzZFJzVz<-2qfE~{W54-k2E3U;VEPMaKs;7;pkTs8^1voy8R`ObV|v%Z zIU*RlkPsj6DeoA!P^dZd3cY?3GF&0EZO_lEU=n;Oe?Ki2K4O7);UE6_FKui4=$8)e z;qIRzO|oOJ*@vuOTlbw?R_|QV`qH{njecQUw3>t2ox&q{gM9xnc>fmP!jsPmA6g$- zJ?BH%RX+7CLi#nl#h+Qrw43xBou%LW-{1Z2cXM`qQYipR14O?lQlE}#>ZV1`W@-m> zh3Gu+jo#zo$2{a@KgTlv4v&=VJCou@9JOa`*B+dD3VYSw>4cc__`O;VfKmwMv^wMg z={X%2c?rW#oR;Xw#HpR6#TJATxDC;wZy~rni7^#b#OMEvNS1N1j!rs9t3$<&Ddhp-I|dFCk|FGX#EE?iekWO2w99Yf0 z!ayD=Q24APL6ORB^9_|6%V*7+O2x+^f~qXM$m^-EpU1heh)zj#od*UCQH_U#JRHCw zJ(K|j$H`)>%0fJAf|+R@o#5zqfTX;GauEpy^KUrWPkk$!Z1QMkMLW3gInCCca)eb% zqy{kU(OV#Z^Vp(0^$3&ysQ8%oC1Ho}vB$;xPH#WXDtI=|XFRSI?vq$>o_3sHAmOIc z55CPLgpc)8LPx5h4{BePWgo`iKKx7A0%VJ6IOumG+l53D7bm)m#EbJ9Y&9mq@_X27Qr&+ zA`&#c%6ut@7>i4)G1jRwq_o3fA_!P&tO|L=A4we_%R%l(NL;jFgW6UNXr5+N{b|CYWt(gc)CG{Y{={= z>#$-fSgVS(nNvmtT!b%7Zm$-3RxOq7!6BnyM&8c2or);a$|rCEpONmo^PoWP_8p{+ zk0m&xh6eYNM+<}hA>JUBEEqvjEQlbP>QJeyk)@i9W&HNq8q7Z`Gcs0Cp5Gc*>#!z* zmClybLZ~$s$xmsHcIQd_`6dGiPEix>BY30jAzKMQ=`@mxpERR!)l6)6kO%(_>i_N9 z_cJWh$%ev9x?X|>7y};Elo2OTs5$2dA?p*lmLo)rK1SoSBpkK5H8u&NA#!T(%f{)O4FIBd}X(8-R&J_JcZWl;A*N2UIx|!(Btou;2m&`7)YHz?l#1U)kVG_$bQ7 z^WFplXN0+;qOvDViMs`bLRVR>Z)mgQxp$DqWXc@60IpmHhiZsQK|DJ+4q)ki4>bnu zwKh(%jHAq;sA-)&=Bln_f553%!+5Agw4&hZFtrktoCiOh0hxM}y0(Cg6Pc!wyh4gc^x3i8Al~JP^3gAq#^$Pvray`?iUE~B%ivrsrr2v@DTwRKe z?!?egF*jtrH0sx&|6~z+GG7)E?S&*ukn?nHC06eP zDhRP=vs}+B7Y9>DTdC0ws5bc~o*_yVBDoG97TmNfAA8OkVDUqY$`f zu`^{1?3~R~;Kl7H*cpX0Js-&+(B!5pYz6LaCnbB`tleS_wBU!WT{;e`E3av9i=*@v zL)XIKk244iHl=h&O}Q==GgLF0KxK%L@(=&+pON=SZw0wCmX~;)J2YZvC_5sUYz0Sv%;EV^KV9B`DqK}r2 zd2u6Q)fIyz73=5C5@4#y;!SOil%Yizg_Y{pX?%;b<` z+TfF2X7LZu{~r(g&pkc7f$it3R;>IL2mCG-7R1dl(m0rl^z^;UY0E@h^ z-`!x{(}RytW)uzK0b7-EQzb&Ql(05k>SLK|Rcew`NK2?B!4u346g7#F#g*cscpaL} zZBg1{XECWdNEL4Yf|`v*8F(xyp=^=k#4v`yjMmS@Tc%ff6k^l%XOKh(>TdV~h`SO> zDqK0=V3fNd77L#QZAL0@}v0~ zfZYTysSw}jyxdGm*O3VzGDz%#n}Q2!zh1y#lj(g-qbAMPMu=EMrYj$- zsDSd6@;LCiz*fr#EJD!Jq!AISN#2D|lze1Z323m8v>m>x5xw4l>7iZ9Ve28GAvtWr z-5D$a|1|D~Mc_h%ScTO9BqSP=)IpCxUrp{14vPKmhHW3Q*9PhWL^c%{qb1AWa?E^X z&24I>t&^Z|_8`APY8g+Stm5QxI38A8Q0kj2{ZoX@L4I1^Z|H1A9`xkWTqRn?chuy8 z`46u9dA>YM%c_fER?y_BcUy_niSCXBD`F}BjGCI2d)9Lds*Curn27n18GCT-$?Y5; zV+g45O`=bBS@msvftD02{$jidxq(i)X48bjBds&jHUWba!V~Mb<%JotXhYAg(gN z#q-SoffI&Or$sJAcmZEGC(v5_sEtsngA{X)OSFXC34%>JKB%hIp@}3B)RH4AmsoE~ z8K+Y3Z=#r<1-7(N+BeHE0t||g9-*Y`kl;jCrj6G5*lEa~yQ6^&5?yTLtWzX1cMCCt z5<6AeD{ebiAK>8S)GMUay?*V+$}V_Zy}W*N1yq!xYNW}HBac*36Z{qZ9EWGPWqkC{ z$<*Rf%^*vZIcC)AgXeT5@Ni$#Q#hLMX1)rOjo@T!omBwfXy3k5h>o*f6jz1Ewr#DW z0^r`M9UIvr_de@R3rXpL6Tg>~b`ZTYZH>0l^3zkdtfahyOcUh7@s0!0^H~K`R!ud+ z>`!3KxYZllNBB0}sTCV~vc6B{s||sfz|OJLCCoa?P_qd>t)i-CQ{Kd@P@Sk`=2FjT zVW?)4bBD_Gua6V+1=l3m@6nH;cyyek9#hp$FXB8cOL*rC52V#LLOw3Yw1SB1YZ1Ln zlNlb^M-Wvc1mr6*O7VxUXN z=jn}be;w8MuMiu3qq@uX%3(B8<3;v>erj;Rdya zp$$5#BaE6HI!evvJ1WqmR(tmZp`CEq^xYFD-s27h1z6_fsi3_KtxO|)<0x}8XvUdi zxGV6o5uwtga}^r?HaK1~J08ptbOtguDygcci197cUTSn|&&#kR@+rA>kt(LHWbtH! z-f}hyokSm2JdVg{4)E!ob|{h9zrF zR7AEEhh){KX9?pBu{j}p0nvZW}k(?l$9nwY@$bK8* zG~tQ2q>fb8y#U(`4g(%|Y%ozBkUrZoBu=eNZ{~nJX_1&He}+ZkqyLgwr2Vi+S>ju0 zzRQn7I~5@_Pfn{t|7oy(zSCAwj}c-PpVzXweh4IKA^WF3KB0FJEML2}asu0lvhkUK z5vf@0>EUXp8>3=zBR3j5dij|HNhef^bc5agmII>GXO)HpTDj-nVo-nb#Gqt6*cE}{ z&|5@xwWM`Wn$1lTr`-*3AdGFznDHDC#jynFVb~} zkjiv32LtuVj(1627LqZ`tU@wTCjVju5G4}#-JjgJwxk39HKSTg>J*V~56kyb=)!hc zx2NV!llf+jInLgW!yc*^QKM);wd01|oXhF@1sHI+sj&_ia#25{$cLL-a+bQ$?T${@M@txAnxN3t{ zYD6aY%b%5{zIX=p#f9i!)g&~NJPU1k3SYx$dO6wFhgmWO}Ja+ zPs0@Q!tcWqO08uORLlYyGTC633lul5b8dx*#cY?IUTAMhn{+v6x zWRGxq@aaUFtE$q!9l(z6^B@T;uBt>44~sa|$1&O1oz;l$rgoz~uI3I`BY|ABjmBpw z`KNGV&CX&&3yXUuu}f|S|4`iHpuESP#Qr#bALG&4y)+_P!I5rvZ+4*`MUbY{0Hef& zm2LJvu>K*!_+O#Yhk`Zu-_&bhI2g?*bekcuFt1R!9dj93hJy{fLmm;S16yj(T@j6| zc@k-zW^nQ~Oq=lpsXU5>@~Mo59WDRn9`9k9irVTu^rwf_{uJy69|t>&oh6hMtz5c6;X7%ipZlI0>&kC_%%5FX3U(P)`Bxm`1zkZ?p%FfE+#ZAU*6&}0x6>5{Oj!Z1LiUCp?hS=^njLwuRkCnAnUNz$ve@(GPgog98&l z@!!Ltdb~I>J26|Ft|>jmv+NW0{^ua@m8t2e7xqt1O-vQ0 zuqpQ7kxAPrRd6;lRxDs)5%0|uva@2vKKv4%&Ej(mpM&_6`N6V$p@RBA$H^Uwm9Zj} z%HitqLd8CKMlfsvx$Mt44{;5*%x?klmwCg)P_MU|!{~5_tHLC`-;LT3Lx+?#Bs~|EmiUlpSj}#i%z`vcu%=RH%U~<{1#< zYgR*5c+F*hFuY(%6o}v%bWB#tp)DaY!NZ?782NF9TTDD7z}G)?K(9E<`tS!1p0)iu z(^u$P{eXq+11AD%Z`iPJ{o@Y9B6GD!0`bpngxpm&PnFGVAcaG=PbZSQO&k*7s{$&$ zxRV(_wv-g``vO>F=5A(P|5aWZBqv8m@i(~dJ(>f~D{4o1DLRLX=v5wGB zDV~3mH{Rk6Ejl7gB0p@#Ld%#c%YqqHo5YcVI6N}C;YRUF^f}-9Qy%^{4`1*=?HGN< zgTSObK0{{zJ|3;JPf9{%yy!%{^9PiX$?F{izuGzs{^NPD-L4;BF=>uW48Ykih~VoH z5g2mU|9_m#3QXbb3pg3&?8IW-#Gku1o;)i0#RNNUab5zSmkpnDKVojjVQFdb>B;=W z{!O!cT5gMHja>h3hR4=DFKKNwupq2{nPCze@?lV*$FPR@*A|B_$(l5snK%^T7utgZ z`N99;q~R~o(Px=7R3Ht!Gxu_I8DGj={vDo)d~x8ZgEA7lVBwb}OnspIm_>bxS{*7{ zuYt-^hx+{r{{CFVC|?!kR&iFZlI0}^h-CXxL={kuk)%S3pPh;Wo;=)hyLnZaS$^k)5EPii> zKh6`QXf{BHOd7}d>Aspk-bd8;^FUQ0Gc;5#>Wu0vt-PbcjQ3y^t@u40SO%{CO=3su W*ZjkeVpRCNF!M*2`ge8e(EkI?SBE(O literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc b/venv/lib/python3.7/site-packages/werkzeug/wrappers/__pycache__/response.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b7104d09cd55ec1d547849c7b24abd6c859fa6d GIT binary patch literal 29542 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 None: + warnings.warn( + "'AcceptMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/auth.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/auth.py new file mode 100644 index 0000000..da31b7c --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/auth.py @@ -0,0 +1,26 @@ +import typing as t +import warnings + + +class AuthorizationMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'AuthorizationMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore + + +class WWWAuthenticateMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'WWWAuthenticateMixin' is deprecated and will be removed" + " in Werkzeug 2.1. 'Response' now includes the" + " functionality directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_request.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_request.py new file mode 100644 index 0000000..451989f --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_request.py @@ -0,0 +1,36 @@ +import typing as t +import warnings + +from .request import Request + + +class _FakeSubclassCheck(type): + def __subclasscheck__(cls, subclass: t.Type) -> bool: + warnings.warn( + "'BaseRequest' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'issubclass(cls, Request)' instead.", + DeprecationWarning, + stacklevel=2, + ) + return issubclass(subclass, Request) + + def __instancecheck__(cls, instance: t.Any) -> bool: + warnings.warn( + "'BaseRequest' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'isinstance(obj, Request)' instead.", + DeprecationWarning, + stacklevel=2, + ) + return isinstance(instance, Request) + + +class BaseRequest(Request, metaclass=_FakeSubclassCheck): + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'BaseRequest' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py new file mode 100644 index 0000000..3e0dc67 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py @@ -0,0 +1,36 @@ +import typing as t +import warnings + +from .response import Response + + +class _FakeSubclassCheck(type): + def __subclasscheck__(cls, subclass: t.Type) -> bool: + warnings.warn( + "'BaseResponse' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'issubclass(cls, Response)' instead.", + DeprecationWarning, + stacklevel=2, + ) + return issubclass(subclass, Response) + + def __instancecheck__(cls, instance: t.Any) -> bool: + warnings.warn( + "'BaseResponse' is deprecated and will be removed in" + " Werkzeug 2.1. Use 'isinstance(obj, Response)' instead.", + DeprecationWarning, + stacklevel=2, + ) + return isinstance(instance, Response) + + +class BaseResponse(Response, metaclass=_FakeSubclassCheck): + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'BaseResponse' is deprecated and will be removed in" + " Werkzeug 2.1. 'Response' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/common_descriptors.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/common_descriptors.py new file mode 100644 index 0000000..db87ea5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/common_descriptors.py @@ -0,0 +1,26 @@ +import typing as t +import warnings + + +class CommonRequestDescriptorsMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'CommonRequestDescriptorsMixin' is deprecated and will be" + " removed in Werkzeug 2.1. 'Request' now includes the" + " functionality directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore + + +class CommonResponseDescriptorsMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'CommonResponseDescriptorsMixin' is deprecated and will be" + " removed in Werkzeug 2.1. 'Response' now includes the" + " functionality directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/cors.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/cors.py new file mode 100644 index 0000000..89cf83e --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/cors.py @@ -0,0 +1,26 @@ +import typing as t +import warnings + + +class CORSRequestMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'CORSRequestMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore + + +class CORSResponseMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'CORSResponseMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Response' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/etag.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/etag.py new file mode 100644 index 0000000..2e9015a --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/etag.py @@ -0,0 +1,26 @@ +import typing as t +import warnings + + +class ETagRequestMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'ETagRequestMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore + + +class ETagResponseMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'ETagResponseMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Response' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/json.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/json.py new file mode 100644 index 0000000..ab6ed7b --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/json.py @@ -0,0 +1,13 @@ +import typing as t +import warnings + + +class JSONMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'JSONMixin' is deprecated and will be removed in Werkzeug" + " 2.1. 'Request' now includes the functionality directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/request.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/request.py new file mode 100644 index 0000000..700cda0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/request.py @@ -0,0 +1,660 @@ +import functools +import json +import typing +import typing as t +import warnings +from io import BytesIO + +from .._internal import _wsgi_decoding_dance +from ..datastructures import CombinedMultiDict +from ..datastructures import EnvironHeaders +from ..datastructures import FileStorage +from ..datastructures import ImmutableMultiDict +from ..datastructures import iter_multi_items +from ..datastructures import MultiDict +from ..formparser import default_stream_factory +from ..formparser import FormDataParser +from ..sansio.request import Request as _SansIORequest +from ..utils import cached_property +from ..utils import environ_property +from ..wsgi import _get_server +from ..wsgi import get_input_stream +from werkzeug.exceptions import BadRequest + +if t.TYPE_CHECKING: + import typing_extensions as te + from _typeshed.wsgi import WSGIApplication + from _typeshed.wsgi import WSGIEnvironment + + +class Request(_SansIORequest): + """Represents an incoming WSGI HTTP request, with headers and body + taken from the WSGI environment. Has properties and methods for + using the functionality defined by various HTTP specs. The data in + requests object is read-only. + + Text data is assumed to use UTF-8 encoding, which should be true for + the vast majority of modern clients. Using an encoding set by the + client is unsafe in Python due to extra encodings it provides, such + as ``zip``. To change the assumed encoding, subclass and replace + :attr:`charset`. + + :param environ: The WSGI environ is generated by the WSGI server and + contains information about the server configuration and client + request. + :param populate_request: Add this request object to the WSGI environ + as ``environ['werkzeug.request']``. Can be useful when + debugging. + :param shallow: Makes reading from :attr:`stream` (and any method + that would read from it) raise a :exc:`RuntimeError`. Useful to + prevent consuming the form data in middleware, which would make + it unavailable to the final application. + + .. versionchanged:: 2.0 + Combine ``BaseRequest`` and mixins into a single ``Request`` + class. Using the old classes is deprecated and will be removed + in Werkzeug 2.1. + + .. versionchanged:: 0.5 + Read-only mode is enforced with immutable classes for all data. + """ + + #: the maximum content length. This is forwarded to the form data + #: parsing function (:func:`parse_form_data`). When set and the + #: :attr:`form` or :attr:`files` attribute is accessed and the + #: parsing fails because more than the specified value is transmitted + #: a :exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception is raised. + #: + #: Have a look at :doc:`/request_data` for more details. + #: + #: .. versionadded:: 0.5 + max_content_length: t.Optional[int] = None + + #: the maximum form field size. This is forwarded to the form data + #: parsing function (:func:`parse_form_data`). When set and the + #: :attr:`form` or :attr:`files` attribute is accessed and the + #: data in memory for post data is longer than the specified value a + #: :exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception is raised. + #: + #: Have a look at :doc:`/request_data` for more details. + #: + #: .. versionadded:: 0.5 + max_form_memory_size: t.Optional[int] = None + + #: The form data parser that shoud be used. Can be replaced to customize + #: the form date parsing. + form_data_parser_class: t.Type[FormDataParser] = FormDataParser + + #: Disable the :attr:`data` property to avoid reading from the input + #: stream. + #: + #: .. deprecated:: 2.0 + #: Will be removed in Werkzeug 2.1. Create the request with + #: ``shallow=True`` instead. + #: + #: .. versionadded:: 0.9 + disable_data_descriptor: t.Optional[bool] = None + + #: The WSGI environment containing HTTP headers and information from + #: the WSGI server. + environ: "WSGIEnvironment" + + #: Set when creating the request object. If ``True``, reading from + #: the request body will cause a ``RuntimeException``. Useful to + #: prevent modifying the stream from middleware. + shallow: bool + + def __init__( + self, + environ: "WSGIEnvironment", + populate_request: bool = True, + shallow: bool = False, + ) -> 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 + + if self.disable_data_descriptor is not None: + warnings.warn( + "'disable_data_descriptor' is deprecated and will be" + " removed in Werkzeug 2.1. Create the request with" + " 'shallow=True' instead.", + DeprecationWarning, + stacklevel=2, + ) + shallow = shallow or self.disable_data_descriptor + + 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, + ) + + 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 # type: ignore + + @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. + """ + 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) + + 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`), this + returns ``None``. + + If parsing fails, :meth:`on_json_loading_failed` is called and + its return value is used as the return value. + + :param force: Ignore the mimetype and always try to parse JSON. + :param silent: Silence parsing errors and return ``None`` + instead. + :param cache: Store the parsed JSON to return for subsequent + calls. + """ + if cache and self._cached_json[silent] is not Ellipsis: + return self._cached_json[silent] + + if not (force or self.is_json): + 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: ValueError) -> t.Any: + """Called if :meth:`get_json` parsing 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`. + """ + raise BadRequest(f"Failed to decode JSON object: {e}") + + +class StreamOnlyMixin: + """Mixin to create a ``Request`` that disables the ``data``, + ``form``, and ``files`` properties. Only ``stream`` is available. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Create the request with + ``shallow=True`` instead. + + .. versionadded:: 0.9 + """ + + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'StreamOnlyMixin' is deprecated and will be removed in" + " Werkzeug 2.1. Create the request with 'shallow=True'" + " instead.", + DeprecationWarning, + stacklevel=2, + ) + kwargs["shallow"] = True + super().__init__(*args, **kwargs) # type: ignore + + +class PlainRequest(StreamOnlyMixin, Request): + """A request object without ``data``, ``form``, and ``files``. + + .. deprecated:: 2.0 + Will be removed in Werkzeug 2.1. Create the request with + ``shallow=True`` instead. + + .. versionadded:: 0.9 + """ + + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'PlainRequest' is deprecated and will be removed in" + " Werkzeug 2.1. Create the request with 'shallow=True'" + " instead.", + DeprecationWarning, + stacklevel=2, + ) + + # Don't show the DeprecationWarning for StreamOnlyMixin. + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + super().__init__(*args, **kwargs) diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/response.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/response.py new file mode 100644 index 0000000..d365c4e --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/response.py @@ -0,0 +1,890 @@ +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 + + +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 + + #: Should this response object correct the location header to be RFC + #: conformant? This is true by default. + #: + #: .. versionadded:: 0.8 + autocorrect_location_header = True + + #: 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() # type: ignore + 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, no_etag: None = None) -> 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.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))) + + if no_etag is not None: + warnings.warn( + "The 'no_etag' parameter is deprecated and will be" + " removed in Werkzeug 2.1.", + DeprecationWarning, + stacklevel=2, + ) + + 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() + + 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: "WSGIEnvironment", + 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 overriden 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 the :class:`ResponseStreamMixin` 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 + + +class ResponseStreamMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'ResponseStreamMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Response' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wrappers/user_agent.py b/venv/lib/python3.7/site-packages/werkzeug/wrappers/user_agent.py new file mode 100644 index 0000000..184ffd0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wrappers/user_agent.py @@ -0,0 +1,14 @@ +import typing as t +import warnings + + +class UserAgentMixin: + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + warnings.warn( + "'UserAgentMixin' is deprecated and will be removed in" + " Werkzeug 2.1. 'Request' now includes the functionality" + " directly.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) # type: ignore diff --git a/venv/lib/python3.7/site-packages/werkzeug/wsgi.py b/venv/lib/python3.7/site-packages/werkzeug/wsgi.py new file mode 100644 index 0000000..9cfa74d --- /dev/null +++ b/venv/lib/python3.7/site-packages/werkzeug/wsgi.py @@ -0,0 +1,982 @@ +import io +import re +import typing as t +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. + """ + if environ.get("HTTP_TRANSFER_ENCODING", "") == "chunked": + return None + + content_length = environ.get("CONTENT_LENGTH") + if content_length is not None: + try: + return max(0, int(content_length)) + except (ValueError, TypeError): + pass + return None + + +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. + + .. versionadded:: 0.9 + """ + 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. + + .. versionadded:: 0.9 + """ + 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' + + .. 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`. + """ + 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. + + .. 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. + """ + 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. + + .. versionchanged:: 0.15 + The ``errors`` parameter defaults to leaving invalid bytes + quoted instead of replacing them. + + .. versionadded:: 0.6 + """ + + 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() # type: ignore + ) + 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() # type: ignore + + +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(self, chunk_size: int = 1024 * 64) -> None: + """Exhaust the stream. This consumes all the data left until the + limit is reached. + + :param chunk_size: the size for a chunk. It will read the chunk + until the stream is exhausted and throw away + the results. + """ + to_read = self.limit - self._pos + chunk = chunk_size + while to_read > 0: + chunk = min(to_read, chunk) + self.read(chunk) + to_read -= chunk + + def read(self, size: t.Optional[int] = None) -> bytes: + """Read `size` bytes or if size is not provided everything is read. + + :param size: the number of bytes read. + """ + if self._pos >= self.limit: + return self.on_exhausted() + if size is None or size == -1: # -1 is for consistence with file + size = self.limit + 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 len(read) != to_read: + 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/python3.7/site-packages/zipp-3.6.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/LICENSE b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/LICENSE new file mode 100644 index 0000000..353924b --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.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/python3.7/site-packages/zipp-3.6.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/METADATA new file mode 100644 index 0000000..23f844d --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/METADATA @@ -0,0 +1,58 @@ +Metadata-Version: 2.1 +Name: zipp +Version: 3.6.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 +License: UNKNOWN +Platform: UNKNOWN +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.6 +License-File: LICENSE +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: jaraco.packaging (>=8.2) ; extra == 'docs' +Requires-Dist: rst.linker (>=1.9) ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest (>=4.6) ; extra == 'testing' +Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing' +Requires-Dist: pytest-flake8 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing' +Requires-Dist: jaraco.itertools ; extra == 'testing' +Requires-Dist: func-timeout ; extra == 'testing' +Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy ; (platform_python_implementation != "PyPy") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/zipp.svg + :target: `PyPI link`_ + +.. image:: https://img.shields.io/pypi/pyversions/zipp.svg + :target: `PyPI link`_ + +.. _PyPI link: https://pypi.org/project/zipp + +.. 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-2021-informational + :target: https://blog.jaraco.com/skeleton + + +A pathlib-compatible Zipfile object wrapper. Official backport of the standard library +`Path object `_. + + diff --git a/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/RECORD new file mode 100644 index 0000000..26f4f26 --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/RECORD @@ -0,0 +1,8 @@ +__pycache__/zipp.cpython-37.pyc,, +zipp-3.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +zipp-3.6.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +zipp-3.6.0.dist-info/METADATA,sha256=qZcCKAkx7YTb17tMj97MF7A930rB-LWXw_5SwbGPefs,2263 +zipp-3.6.0.dist-info/RECORD,, +zipp-3.6.0.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +zipp-3.6.0.dist-info/top_level.txt,sha256=iAbdoSHfaGqBfVb2XuR9JqSQHCoOsOtG6y9C_LSpqFw,5 +zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425 diff --git a/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/WHEEL new file mode 100644 index 0000000..5bad85f --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/top_level.txt new file mode 100644 index 0000000..e82f676 --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp-3.6.0.dist-info/top_level.txt @@ -0,0 +1 @@ +zipp diff --git a/venv/lib/python3.7/site-packages/zipp.py b/venv/lib/python3.7/site-packages/zipp.py new file mode 100644 index 0000000..26b723c --- /dev/null +++ b/venv/lib/python3.7/site-packages/zipp.py @@ -0,0 +1,329 @@ +import io +import posixpath +import zipfile +import itertools +import contextlib +import sys +import pathlib + +if sys.version_info < (3, 7): + from collections import OrderedDict +else: + OrderedDict = dict + + +__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 = OrderedDict.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 CompleteDirs(zipfile.ZipFile): + """ + A ZipFile subclass that ensures that implied directories + are always included in the namelist. + """ + + @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(CompleteDirs, self).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 + + @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(_pathlib_compat(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(FastLookup, self).namelist() + return self.__names + + def _name_set(self): + with contextlib.suppress(AttributeError): + return self.__lookup + self.__lookup = super(FastLookup, self)._name_set() + return self.__lookup + + +def _pathlib_compat(path): + """ + For path-like objects, convert to a filename for compatibility + on Python 3.6.1 and earlier. + """ + try: + return path.__fspath__() + except AttributeError: + return str(path) + + +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() + '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 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 + return io.TextIOWrapper(stream, *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): + with self.open('r', *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 __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, *map(_pathlib_compat, 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/pyvenv.cfg b/venv/pyvenv.cfg new file mode 100644 index 0000000..f967d3d --- /dev/null +++ b/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.7.3 diff --git a/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..92313e95d869742ca790e9dcb4b2fffc0fd189eb GIT binary patch literal 25197 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2b196a9a441fdb9cb38a63c098704ba0349a1ba7 GIT binary patch literal 16543 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/certifi-2018.8.24-py2.py3-none-any.whl b/venv/share/python-wheels/certifi-2018.8.24-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..70d36408a40c46531c1473f83e320319ec5180e8 GIT binary patch literal 152671 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

    ua?3 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

    5pIrwr3*R&H;Nq@F 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�Fz{WwD@^tx02XXv;THh~4&Lr|$h&DB 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 N{~*QWLqpO5@E=MMV$lEq literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl b/venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..109d666cbc6864d6f1d161d350c1a4cb92b5e598 GIT binary patch literal 139269 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񬽺mX^596F^m`Kn6FplJKRx++U{CIWlsjPr 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 k@9|&yKXCuj|FnBctMIamK*^_`2p=zY<>s(Mwg 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/html5lib-1.0.1-py2.py3-none-any.whl b/venv/share/python-wheels/html5lib-1.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9fed431c0352279c11207bcfd21fb34f08aed798 GIT binary patch literal 117801 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

    &cnmn!Ez#KRP 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

    9QNQvT;IKt=|4!u7wBJaShjhMzB7F#2ZX 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl b/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d16c36d5d74cbba616f03a29de903c202f00f9ff GIT binary patch literal 60445 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..b61750163345590048717b1bc65151a9cba7aa4a GIT binary patch literal 24530 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..f600ddc1beef524f8b249b649b8fd4ec6b19d439 GIT binary patch literal 19752 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

    a(_OLs|R8wJXf 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 y#s6z7W} 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/packaging-19.0-py2.py3-none-any.whl b/venv/share/python-wheels/packaging-19.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a9837125882fcfa90289fba86ffe6ff1f7b43efe GIT binary patch literal 29100 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%0DG8pw2$N~g=kOcUK`a)J1n(_+F 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 hhvVg+KlY#DjiLG&2{|BiUwxj?6 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/pip-18.1-py2.py3-none-any.whl b/venv/share/python-wheels/pip-18.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2c21596ca571545dcbe1184b03c6e02a3ee6527e GIT binary patch literal 198470 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%0DeCxw{tMRUEX1!_bG$%#xo9!fS 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 F{s-#4F(Uu~ literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl b/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..13221cc4da71d8fc72ee853fa34c94116d5a21e7 GIT binary patch literal 15676 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

    6U##tY&9EoX@qCkA44fNElak2n30w@i9 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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/pytoml-0.1.2-py2.py3-none-any.whl b/venv/share/python-wheels/pytoml-0.1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..816379629f27772e9aedcc2a512d9af1fce8bcca GIT binary patch literal 13896 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 DrVrC1 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/requests-2.21.0-py2.py3-none-any.whl b/venv/share/python-wheels/requests-2.21.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8636b6c821b0fde348d98ea8b198e97be0034cad GIT binary patch literal 65295 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 Qn8O4Fe139&{MWbt2Yf9_h5!Hn literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl b/venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a69ef987635bed7c0df952c2215538aa4ae68a91 GIT binary patch literal 14137 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ϱz;TEMOZa%03bLzZxE32M%7qgTb3FH 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 z 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%0Dl2S?l;c%x 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
    +kchJ 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 z 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

    mmFt=( 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 literal 0 HcmV?d00001

    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 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/six-1.12.0-py2.py3-none-any.whl b/venv/share/python-wheels/six-1.12.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a7e75dc6f3af057fdee4ca66da93d3602f407163 GIT binary patch literal 17683 zcmaI6L$EMRuq1kH+qP}nwr$(CZQHhO`#ZL6pZV|dPP}=GUUV-iDx$g~vno?T8W;ox z00002pg}KMZqvo(_Y&*B8y^4w!GEvLmL9Z>bc{@N40I-z&Mvf;c4qeUf~qPK@=D5d zE*>ti-m><`5?-giexUJeSVUD-)jYfb36_lpC1Xjjt)^nKSu;NJ8nfUg@r=-<-cJoX8dB`U;kf>R!Q9vFx*9!Eb>`-)|k z=N$@V|HQ(fM27sUHQxGvRuQlGF3OBo!}=xFEw(VWMk;F|9mLodOI^pd!se6Xt^~+E zYh_r8s8>b!EnsC>EpneL=Z$h3lcm!6ymr{ZV2{hFKShJYH+Q#X<1f3<Q_zR%0f!OYhe3zf5LFMSR14>T}~C z(zX=cn?+a6&TP33v=d$Or#KhBk-#kWzK7gPH z*$1pcF3CO{v zjF{bHZ+zYq;JEsRL$4RXym6QG49n*Tb0g!DP=Nx9Fi-PdQp4 z(h_c>?@nP~tIt==rizz!`~Y=k3HrVN4(Q|O8%&{9*R!bqIvaV-TJboUTa?YAvQ86V zO-1)y`u|=!LX3MYgNB-Ut9AlTfv78Iys)~e3#037fn@~{l}ZW;fpRNafS>nIAYMUD zsJm2}sKTvMM_W^pw>Nv1yp6AT&?ZIjnNqRGYva)8?#zbu+0XAc&=jh|$GBS==$K{u z;yr6O=icFhOnj=T-MT8q4{^@0V6IgZ3DAWE9MzgZVXwa_A+j!9FnuR>66`8b&>L~5 zoipxW$bN}yKu%p(kgo(rGr@rFT!#3lB8G+7A%B|$;$;CG%);fYpi#_jtm`7)bl}PR zAB;}$2$XPp)jtSeOE!E|7Ke3p!gtl9rau)~?HkI0C?3k%FhtAUY&Die)y25WK>?ZU zLUZ0uq+*Vt(xgvD5@WOp@%OP#8s7BA6A<1y*Yy^LLO8uvtblV9MAIFgC(mJ;mK|K# zl{o_eE*LV|<{7r|wN^_+=T#BKjKsyZ&*3OGbJ*ufN;S-Fd0Sp`ZXBqT=g4qc!wb)Om@i*-EC?OVM4!F}lx{e#l4r}s+ zxmq_Cn@%_?1l4ak61~D3o%DnVEem^Ieu@=77A`$bq*q--6@zjzUM9BgXnh}uxJLTP z^}aP!ts$OeVe!z~=~J<7-ck~|)#{??UIr?|(G^HDD6BFFXlq*ex)>JXm27>BQnrQ! z9Kj1W)e@vVC}rsYv<=H#n;>a8So-R@QrvO}4WsO!Szo}NmLWU;%EqG}Qx5sr5NMq$mEaT8FC#-I zC!-U$$ZbxwdEq}!s!8*z*|U-0u@YZC$Yf`65#(}6axb_;%&qa>3g;^#ZXX#@=Zx2G zrm}*87q7b&i2G$EMWGALV%4L>XnEZd{`H@)CBcc!D`j9WQd0l?khisFD-Yk&oeU*L}kpm51RebJh01=U{fZ-vbsQZy6#2CFTqz z+sqaAn)=EaTrX_ic^%OZ=gwy`ykc_-{#;2ZE*hz7ZSmFgC|U!T1L5MDQRlOOTlOy) za+Y+}BZT1$T^ppqiIFR)bKMv?-j@|S<6JV%YBYgW>qs{=f5vKaGbWo&(<0ZWjM91Ep8wV z)S9;QQK&5@#?bEQT3XN|hmKBcpSwjMi;jETRe^a50Qf0@1SkvDBl-6<$|9zwP&;kx zK~=02-RiyHJ%q~I-Y ziMWGpJI2jmGPGnYgAKT z)v{5U+`*}`i9y;e0X?&0;Tuja7<~Eu_jY=6DCLV9yWj!TeatTVH$M!hiB8OMG1$C~ zG_s4vguT(#7>(g@1NqPzNQDUsK)<#bIFv!a{rd_CGWm-`QLBpzUk1B)W;~xLd9SvE zY5yNygDlyK4+S8`AJ8$_>RrQiUScI#CzOiOS6!2vOmELc=Me%Z*A4W$C1Kiw{Cg2Z|c-oFBYBHFaXx2sXn31WAjw zkb^Ss2{qK#%|Yo@c|yEt&Kt!0e#X4^HX)tuvSocng;Det#?g4)<(b?pWe`52H7^>P z7`2?{I~Gwe0C=nm=-0$-QgW4c;j5x21M{J@NL{>lxU>+*R_BmPgxcJe-wEbYPQL6buGi4aM>o?!G#?ru1S z$WAJSGGJy$^!iW+>@*E`SKzu;X$+OcX((d158L;)jdk|hurtxvVNKtR4Hj;n&+E>U z`d**MN9=+;#M(vp7W_s>gi&VK2ywlh&zr2?_vo~_JTHhd^%##A@L(zYf)@CdrNSH{ z{JdTbeuH`;1(TyLT4z5PYttu3aayC@S&GV*Uf$p`3pux&I{*q+@Ku~# zeBRrn60>pNsauu8`G`5e)U*+bmHzjtU*P}y$Iswr$(8CBNmw9v!a@>2Pnd@gxWgO{ z6nW*+zvEtYjh&IAmt7@D)6pR#hlt$lV+lM>yQ3 z=fQWQGL`sfZiT;FEnGsddXFvDssZAUl&ZxF{+0>cL%)r=g`=a*1rT1H0IdmDCoQ!+ zc(JtHJWV?4Ah>SYnlKcc%ovzM0bD+^0G=+y^ecx@eigX1G(ki6MaDk4aMn4>awqJk zBE1+@U5k>Z#jPyPl5~LLWO_-0U&$e>8M{x)RfYPt0SP+X=CIZ+LKVU$0LsRU)fyFqSu?5j&IF1NelMccKI{0hRiWeA)L~5>6REjrHGw$A@HK;#s=JR_K?1n(q(+-ovWhwPRrT}lKO9)wMpbeM4h6emM zYZ#M3Px~5Y6w@pOqaDA3BhJ6yyZBE?^)Q>Y`w{2NRePXE;iSIF3a_-dEnwIzo8jg@ zuH?NSFi5YhqcCD0TH;OY!$^y7WoV6MGa@2rWC+x0O-lb^;}gUXT(~MVVUh}&OF%9A zn{+%OjWGsfDD(n>@>ZH90AZM*#neO;8is^3(%#lQt(b~Ky|v2V01NNKH37mxtO-fK z+6Bk4Qlm8vN+djIe~5%w+NqAzjXDU+s!`YRPjv2J+YmmN@yUeU=S+#ik_vU*^P5)Qj8u0oTW2=-@TWlJZM~N$bz!t)VLJ#40)wn!4}dD z%%?=mneh-ztinbX_^h#o_PcD-nd`2QuxR=@iBV1X3k-{_0nLkTSeUf0CwvM3PGuX+ z3g5MGKb;lV7?})+S}bo!5{>u_&)nrXkkM#1j@po9cc6ETiDNQf*J9cvH{Dh_@Lq|| z3~vjRCtSH1E`e3IwofmE(bOxjy-jsk;uuVjf}|A+r|PW_4%*953ydP7vtX8)8Ty>A zAjOpPU>#i{Sd|M6SrXb*nd!brzA!H?Hm6X9@8&5=m&t zSAA6}19KyKSL`kZEm-Y^O;3{ZZ{Z8Pf!+SwnRb3d_pvM-#=#Mw@;>V@$$@7VUs>Hgi3oe>9H4jfa@|=@I!TR)D znlK4%O@!EojkV{sWxx|w15fkQ_67WoeQU2ssh zO0GTwOc-RKnyM9k^k0xJlX`39E@RK27?>3+T5{=4?%(#E4}wtaZKpd4h3-bnLPXZN zu}c+wicZ-+rM8Qe?U?&bSI8fn(?Yl4U=`&gi`$$*z45#YT-Q!~szbPoai!hy2jMa) z8P(PD+y*5q)wmnR>w$&@S2*qH(X}pljh}Ir5K#Xnmdtas`F!52I^zIIJ&8G=v9m_s zzz5c+x0wpXUoM@|^<}-G-T1*ZYy$(`Q%~`t&?;Luho4tarH~@gGO%ATMo*5<*3Q3^ zUC&d0rx?jROW|NLJ6SIN-EI~4`|Y{HpjnSj2p65WXX28vuIFH!*=~gbjk(WY$hR&m z3QJ|jwV1$~2}=`oHd?coRc=Cn<#+caf!M_f5Ht zp0jT5)p{CRtUK7%p_o(#%gtxET|N++E<-OBIZGoMT9(c+?ZTmCen7;LoM}+#&eQ`u z8l@+d(&j}>o?-tl?P*o8OcVm;G6KUvYqGO6m*@P6S;k;?fj>CZpZ?7*m`ez_s7q%K zeZVKYtmsN0QHUPXT$QQFiM57B|Cj@8~;LH6}0c{@y}i8LQUF zX{PK_vRz}@1zEia>%jGdCE^iTbe5uRdx~UP!;02vNJX@=!$8vJJS+?_}0`JTS^k13V~fC3u0`?r!yWh{XjhGdz3Za+Y*P0KjHm`n>jAV zq&^TsJ^=L!It;dVV%pau?$mxVQV8O1F)dxN|hnE(JmE(4Sr!9P_j7L`VL{2y+75S;j& zEvuzQ5O(RLQ(HHuv482NPxsBGk4tDm}m=qU@7kBBo@fh$+ZfN*GvW*_|=#Ra;9;hT~jE zRHsMa7dBh_f>FcWkeakbpUwOwK68^9YIFO$>FT3%2T4cLBlrwTshQ=)Wqk7f9i=F0p zG}Ds_jfXYZyDEL{xMNltQmvq|!h{4=`ddxN`HJ5BzLNoB-c=HNsY|*0lH`_v+U?lH zb*;Lzjr_c&BtY^WkNoiVE@+`)Zl&~#Mjc~Uf+Pboh6EP~tyFg}&zabB)nhP|o(Obe zU^>lmcVGBLa@z2_ZT-LByD*fQNafBk1qxIf#wytnlMmgtv;060AM@0S5#9Fb6! zQ@aWFe>T0_3k$@F(zXB1Gkm9FhF(Qa`x%u=hT5U{i{0#1TE#F|uC`bJtUF5ljL7Va z!rFP^CNnIdApr?yw|${2&zx=-6jm^;zT+&u`!TeZ5kein{ZhAKlxJ?m=ts0S*kj-` z3JW%kDKuVf4K?>!xM8fk30JPqYZ6EU$sP|jZvKB^b1w+KBROio@n!o$6zLOx4-`jX zoi${0Hd-iOJX^{u&eUWIBLv)|5Prf_5b1 zE;4~daI**?Jn#F21a%Cfy*kPX-TN_$p?QR!!1P^-*pE7bNsaKwFzc19TrqQvqYWgX zRGADRTv|9vob}P76rPDD&QmV9SiCTM^nH+5+sJ7qxe67$@W^JS44lV+!Ov z$CdgVFIDCq*BN+G(mdjI`OuQ>8hI@akZVN6;|JVX@Ck!q?kX-2?^Pp4s)j!8z`5!_ z4QXQ`b5jE2tZB=Mh^=D6c>TM0ESEwDr&k?~qd3~F_hoQ%uZvCu~) z^!eTtFzdBuka>X?pzv_oY^Fh&QDl3ldXk~oIl?S*gxYD=s1mIqH`ZHAUqeWTDU?gf&x%!2t z-s^*h%5ghc6Dp*6GGV|~ND)j(q-_|=wa(SKaOv^%y57Syf?+3L>L3;T+x0XL17(`6 zJ~Q6i`YkBE;G*-wVqn>O_WMn1m&YiO zXLRe*dqRrn0LRvIkz^{r+h3G`yFeDA(!7WLW>+EDg@}Ha9BQWFx_UC|DeQx+v8;~$ zH*o$))U}XD89gj(Fq*pHxIPPn?pKiTq_%nST1<^0xGZY`1xZ^ey>!+dR_j%EMAjtA}q-FnMiEi|# z6gLRhexnhRiWPtO`_BGNWQeV60J{3_JH%EgF-m(qA^-PO{`a)p|NZ^O|6~2U{P%v5 z@ArF^|MxZT|Ms-^{XB25Fds-g>RcK45%JKs=MSLpzjQKlfHvhoAOHX%kpCZ@Oh!^z zR8Cp+e{?ckWqJEe29*9YWgf@>7ACH|s@<6*DAt5=ILc#;Bw-#lr!yPKcf`?&McDpy#CctB>=gF7DsS@xw1&j+>7i)S5&EAqFjH}>m;%&fo z^Y)E|ujT;7j)pC)4-yaRYxQUsfWqEtck_I- z3*UMp>p~0Z*0g;in3H`7Qhm=l z^NOpY0R0AqSE$oSlT~Wxhy0K>X;eP+EHxx;PB}UW63;YT11hzhP}w;l z5*qOD-g-m#h%2=crTzr-S(rm>OgJ|x;i4ftt2_4l(#@kkmTti4mVavuc$L&PHvpJg zcLYqi_7dq@6$T$8Nw0(x&1=hU6{cJ#rd#k=%Wd(+ch-TyT|j#< z-wk0!E^~9|n`}_pLUDNfERw@4eW-1pL)q@r+@-r4*`lz{xr6%X{PcGHv>>gEg%)7P z;{4LyE_Cz>OE(aT3I`Mg>=6XFy1ytOu4g|9THa5@%WKzj$!!nCHr))Uiq3Z;_h@|= z{ER04EFo=TS$AMr#kNU}F>BZjC*J7TwRG&z98}%)ZZ%pbVmWZ|IdwYs))ftov9_q= z#bYUsWR$A&CAlr#9PyUp-%l6thS^k=1gNJ&e|%wnyLb}nPoXa#>hvK9NiFD-`~~{% zv@+SSW^qZ}Jo;U`_C-HWH&}xLpp^JTKkp;T5{+}NzhhEIjd?byge6G@Zgt|VPbWi8 zR_DTLvW{{n>BxL!MYpZKHYo>=x*-iPBmM#((f!lQ4?9#`Z5iEEJ#Z8xR8^_!8vTB; z!|ISuV*uldBq#F6iQ4iAIXVOA;TO?UMR6W^3A_o!-KX{TfoDXA1l z3EsB`5IV!LJ;Hd5d0z?DVu$_YFbS+j-gGv#^q=EQMlhIHEe&3y1g=B$o@X9NG#j2; zoj8jkItCUBZagAA^TCQguw&pV;4q^Yy2hC=X?r;AD!1hi&!et6S;=R3?tMZDAm50W zZ)yNJJQ*bBbR{P|64`tNEi~3(ew;7V_-|k^N5HWNl45iKQ4wrb9Bt0`nHW3=gKst< z{dOAXJvdsta+8iM)TA2XIz)95F2I;NO40nK8mVRN@gbUkFVbQlCSVAS}JO}Z`5X`)+n@fpn_m7PXm-H;)RF<1S4!zGy75SG7d%@A>fFO`u|-EnX(iw{r_rU_uu)? z81w(_h*6gi6_tUWmyn%Zgq5bHnwyz#R$^FT-glCpm8O-VnWS%0l8~CDp^KykuT)%M zSYT#bVqQCjnwqCye4$x`rJ$9Xos?-(qM)RbJ%N&xX;-4CU|E`-o|j&gov99q#2^;w z_`e7UA=eiM*njE#$3Fmw{$FXi*gNRkn7WzT{0{}8o~zjh`oE%B^y@6%;sF4R_yGX? zPqhE+K6DPAqrBG6TO3JyFVqfFvYAsP;Y6_^ z$aSMp_o6J)xctw<+6NHmQlL%%*>nL4NVCh}+S(X_eAX4Qw*+3G>*66 zOo(b-2}S;;44=SMW65#=&jGqKtC@#`^5}|bQ5s~H*WD7P5CV1yo)h77aNni%QvxnX z;y}j%4rv0s30s94VtM@I`jV;Irp*KLXu<~{51%AVtMWe+hO`lo1T^K?Gg{P+f}W z9~$+?z?FAcPPv*c^p#RIuMARw#;3rpjZ`W%O-Z51AVy@V#|0J%&B|4(F+3!c8-aHq zMyR7I7Oic>W`|E2I=Vhxzg{f3(UYkiIeOn*oS69$zl*3nZ{dem$DdE5>DGV<%f(Mu zd!wV|jxN95?_0;;CKO}+x^m;{>W4;9BV^|3<;jdCa&z(W{W&so{)qU1Pv3`HIdXGk z>jJNzK~X9rWJlB_?reE@{$cCI@yW}RFL%NOFP2WeaW4G2GNXwdJXw13as4@XvZE*I z7bl~u7#bXaLubiP^2!wEK5Tsbc!He?WMln9(H);YE?!ZgfUU*!3gMJalyUTQ{`qo# zA3n5v`Z;+qgbzm;9o(NDT&F_?R^#R3$<2ivoLtJ(}6%hAj=WKd`hbP+HHdGVQWP`x$S z0E2Jz>PI;x9GLjIK&{jwr%_h-iuLPvZ~Y~H0BGQBjNru{5eJ#q3&{qMa4jP+vp_vl zSXp`$uamcM0FCR};|BL_yz@&mX>GLMq??Ev)<~cW9X5Vygd`1*E3eVPb^4}cFlKk}%dx|J~zboJ^-V@-^<~{Dk z?q9|23cv|t=^}H@0aWk|))k$|t9I`fK8$x2e(|d1$AP#IxBtH&#zTV!% zaPXsiCipGp_y(_EW8d&!?1$yThPW`JUw{!dbO6u7@&ou>)%R;;kOX#E@RU2?_|LyXOr*K7nMFTl$n(Zn=|ma9<|EmS16@1nC9aBy0X9KH5s~G@sWS>|B?lX zusgFjBachWPHB$iKomW=E%q0Q$TTO5jc2;T#sy=qXr33DusOy*9R{6^JWx3(&s{iy z@X^a5-Eh?Y;Lmn1;4}Qcy-9zgYd0bBa$JLa#fjiv16{IWoGOHn6u_sw$o;+*aeA;L z*bi}?H6TJG<(7Ewrw}`iH3=5S>2VzPDf%t!5+O$XaW3DcTXXk|bK#Fqa>uTiXb>9xn!$p36#2TGQlp?7<~W}v zk2vBEnWm@{7O)c(C>@JqE}e|D_=yzg(c;ejA$V$>8-`&7Q$z-& zb3IlGLXL4p^m6ALTIVEmH^)dBgoI=l|Bfgo!V&?;ALG+jD(bg;g)U}AE21W*IqLFAUB!tA)E8f@B0uE-GU?)ur6Xg^RlqygAQ$ht&2O`yJyIpVyFxusk< z1FHp63WCrW{&;ZD10^jrTd>svQ#A8wkfKbfK6I@e!%`3fB!1}XACx&|GGl^-s6lx; z86FpA2Oz{66J;e__0CAzA$7E@0*2ZxdUG-~gdUtUbknfyO+LY(kJx0hlM|^lI}oiD z7Q|F2O}?yhHH$h$xLKlg;$BQW{Ucw^ zyqr*lYQf*aviT9=t9Ywi_dU)G(CxAWI!@4p1#^yZBtZj+&{gVE2xfs1E8^9V_8w1c zBLW$FMQ}Un35e<*lY!(qszXNriX=>Vok2gI4sQQ8x(&}u5P2?mJU|T7sJvrh&f(Y? zGQ@~NW`z-X7CgE5#uJDFve5bo3Cp|M5pha{aZ6CIpj{lQMbWs4izp9T1>=k^246TO z#{O9Ek6mgQU|A7cmKJu%3WEb&l7azRw6%P3{^^tfrcImrQETu*U&Mbo{D*}O7Ozn> zhyZ3y8pdML3-7BXDT-OKe##VPBC9$NK096G-n-ER0CQV~LwsOm(pA~iiqO>iDyqv` z19kOFwhjxZd;K1XvOPtyb*UU}U>xp&H$xhu6c~CwW*4;rp@wjB!CI)Pgg&;uL4;F* zkz`p@&1m9bL@KRF-K~JigfT>KWpchP|BY~lsB5WM%y76c)sZqe^d~E*v6GElFsn3Y zoKZB(wyMgS9Hk*eJ1&2ndbG>gj*GQWhx}J2LmbP@;GJ(Sj<~&CRmK=a#7Q-Fp${k{ z#VQPq=YhERO)r6rV}x^bY~PerXHcG-pgohA>dk}Ei#|{)BLDU4ZG3OdR6*70ki^4f zyNDHPx8X$S!W@Gn=%`exjJIqxZSwCs^MkRD_`S?Pk;GG+kT>}s-0i~L39o_40``B- zCsMO!>u03*xRoS|XkFA1W!nUupt=dk#}>W$Iq!ktQ$CgPHZgT+FkZLFCd573wyO%jRQB0nyVmIiK(u%0fZU*g+aX^}~%mZ&7C3WN4UiX?nkqzcb2U zL*n0U_<|;o`f`H@(=ZQOO7Xa)@4Ez|w^Pb-e+JTH(bg2RwK zxt-~4vZjwDVQjM|h~wfPbF|WszDGkJxuHQ9pZyv%o8}W$Eko%4U~r7QPkM?We}@8s zWLBcBDQdqQf!JE*r-zj4sXQ^dopu3Ve*xk5!rnsRzce=`H#nl{I)8ET%7HBVvRYP; zWg_95%VZnuQ09KNQ0q_=lX=SCr2Xv0G-{12Mf$Y1-nT){X4776C*lC}9?<>7GFCwB zy#G0Mwk?a&;5vb?zA*_PM~Y_E75K;8`h0{VGY7v1)gtOKc&nJ$7bG+=+&2d0v=q<* zW2dhxg+@a@_l50~$YY)m)QUjq`tZ%E?< zf$97Tp-5rn%Fd19OH)Fy5Ea0N6bN_LDrBW3N1z1T7PQU`1QecHX6|b8W?G=_W1oj9 zZU|u+HL+cimcWAUC+TP2yHbWiASoadrhK1WT}@MC?lnWMC`+_L_OmT={F*9>Rgl^g zIfxQEV3t$bBICX-x!-lnv*4+JuY}y2lQ9Q<*n3$3MV?TpvBky5GDsfpPO?yXl)qKG ziNWR@d*s9QC+{kXgc+<~HUiJQ`jAIV_~#wVQ`wh1b}cy4D+wMV_pDB0FzA*bv5(0u zFPnLl?zSdcIgxhA1(~3Oy4#Su{z^IMf+*()rCa|lo@Z=ErtTtkd@gF-Z-#>M65bF? zX(X1a%N9#quQ;4D!oDO}vtP3i>=Q&7xg&~B9hJL}XE@a;TP62^>4TZMBTkdr%~G*A z$xv#E>xyDzruUjE86(}Vyx&rbucBk` z&FfUrEUs+hz8F0);)*~ITxAP4s_oz*pSl{EO)mPdS((r=Fo@yH29P5;D~0juxC&Lz zh2gt|uIA`gmA!iL$UJM{DOPRn`Yl+WK|iq?`vf*lOjT3ya0G3#X`Z}cG8L-^_tLD| z4se95P^U8Zl4Qn0l(8fav%<;F4dPr2R}}2x=3@Rbf5h1~KsN~p3{<(^zK!@6KMv@Y5bdhi_Gv@}`HTZDspw`0&0 zwNVd&aa{Vn=t=xEKtZW@ACY|;dsLaJS$X1vOl5<;DTn~!p<}x%z3j=id5|DTu|(+P zE(Q*1-kxkl?5eCTHy-csp6}n=*tVbA@i8Y?x_#pI?g*nOI4|X9%>KHO>+_=ZeG23A z5Z2(S2;Zkdu#YR8RiWLBJpc$Dr$>WxXwZcMr?C8T*q?s>&(5*`#vSYlj7sj{Hp&|| zh~BbtMbV{oo;o|GmalBtwspE`XWkytoxFo&R=&gb^rF(OI<{oiZi;B%wB=K!%Gv?Pp#H5#E)L(O zhfFQI|16zVH)6;%)c>bJ6za3QJ?+AhJ&>mlj|#Pi-U1%t8_6pN+JP(R%TYorCtVIbYyIbSSN~ zflXG46655(msgSY-XV?bDBddeJ_@V*;$~5K(4XGy@+_}zzvf+^($PE{~mbOGM!Q-biyQwK)p8`)lhrFU)5i9n@F(e~wR zIm8NIATYR?>0w%~%3Hs$$MhRhp_)GkC8?dzMcgQRqrMNh1zPan6!1^gCjT+pCP!x8 zygcLOWZSn`9u}s#Ve*+HnV^vbifGca>U5l3!ux34xv+Alym4l7$g`_uaxy@QWeYv zOdFbXFE?$*RQIlNtAr!x&QZUHhK8v;bg_&pge|rSD$~O>WB4dhCI+(&tGL&VN@lvo z41xV)FDukq14{p*fJwmS5rm`(eQJP=C`=R9T63`EgocJDt+3++n4+4V|3O1kcMt1T zlb)GFvRV$DHx69=5h?Ta%AY{-WG3(}s+#lHwi-Dh3Cr$qYSO@r5@ zQF6Cowm1k}8r$s!oJzF}JNHEj>a-IpunnZ+Zkm-Qa2yJe%PT_~XJdIL31RFkj3=)Q zZiKP5sfLAlBndfXkW-L?3+8N(TLumrI973+B#xsYpg(q+s(?G$;NeeRj$9$$BC}pF zNMln}cG(t*=48#aMVEnIUnFN3>$t9g#FTEK8&$d$A6^_ zvER)IYOh5ILVCO&00D!&=OaBs(plzo`UK_Smwk0q$IT0etSqAbX#C{!y@C_tC{!l_ zA;T)Z0*s{}fA*su1TE+ogdn9qj*V}O`K1grtP+c;f_KbQ3``118(reO z3>`4y0il+UFC>>8@iUVTAarJpCAMrb=y7R1?Zm!6DD*J5=`!D@$YEqmX@6)Supp`b zV2OdI70l(V=t`hYrpq^OG!@iNU8sLsHd`tVQ9rOo-Q{Eu!}DCQy9&)i5)2?QGX#PV zRgZ!tD}&o=O;V&)4>*>h-u?XCc?$>f-!l}{=71PakGQINeG;`R`Bh|*lA*dPxS7vl zaYPuwFZK8KGU__o1+CF!!-wt#rOoz#um@+!p6Ul5m9g@?ZA|f_kHJ%^3yVb`C}CCL=#Cb!Qo__wxmD5>cX6YeEo`W4K22HD4qk&C7rWRVSqSD0FYaXq zKO+u2|239OVo~c>(%DihX}*+{ZayQROon5$;aQi>bI7QVWpa~I!6Z0*g^GX&igP|? zie1zkSZHR+8j zRX2ZJ6F99(f1qSD5|~yVFV{XuJR7ljncyiO&9jc0Ma~(!7GONHa?nfPt#vz{u!ahQ z;m^Kglv4Sdwd=Z5^%nr&sWNR8E4wigW7rVnCacC^IY%zF3gEm`YYeqm3>#?mTvM|2 z#6oCeI!t=}6Od}?6(gp+7VxYn%fp*r;5%k+c>~AC@)%yS$?0oVaeTLNKHnI?&9g`Y zW`S;;9ExShqo#{sQLi)kQQ=q8Gyd`O>b&fQ$T!R04hpQA@#;l&$+j$yCyC&jM}Sp$ zfGRCPpvhmh=IcBLx)%yn;OmiGawWhl&KMXppybcG=f#!n;Q#D9#yX`oNQI17Ta23H zA7a&4QA_etOiPm!2fjD!F03o%$qY5Wlb&`~GFNcEJCBL2heEWl$m!g50OAO`=LnEY z1JH|v#5WDwKKf_K@my#KiMKx|uLK_GV^W+SS0$qfChlx8EMXI%RLv+1q56vY;TH2@ zRpPmXt2A1E#jiCa1w$<4_L-BVEf-tZId;Xf%Tm5`MlJbiTQr8x+s3ScPX%QP1~9PT zp7*jJ!f|t6P1!E*!KId$IZ^c>C{^oq&UrkAqA{BVqY7YA7}*6t^{q3m+38OvuF5D! zl$io&xaPn8?6{^*D@0g6O(XeGpkRVZPv*F?1LS+;GO$p+qO*hu*qTMWpT-KlkY2}` zxZQL*ae>AfF4VCp`x7TP2R~T&i8r^pUuO(Rfr-Bo<-S^w-3(^hG|{a&DHRcXJ<^Us zx++x*6`^M|8){J#*G96v3SSj+C&gpf<*}! z8aAfJ&Tdy1vT9J|>cQqTDzJDEK=fU>778O+-I$y-lI+EQz>dMxiD^(qgDwX~74}p} zVqm<0rS~IoFdj&?ar*nD@X|BNU}h|D<5s-i%-y}{nLrwCRUd5$AP?6BU>bH=%p@!% z1Ka)T8J-OCCKHgxsas{VMQ9JPPZse*M(bBKO#(Jsc(EnqaR)9s@`%7)Ju>vC?h!)< zL;JI(;1xb9GrE4Ucyi)lg|DkC>&H2c9aC5JMb?xW?rzUY;M>W=*@dT%>9ihtNO-a; z+U#i=RTA1-NM{G|Zt8*|MCGtKQ=ErAgr~^;px$UQlC0vBOUN2j?ns_zEn6Le#uwN{ ziAVKnbIhH}pj-RjGWjS1hc*6YB^H?x-?Hj1H^QNy6DlX64(>yMa2clG4WW-5mj(a6 zPWlW^y3lzIr8b9;RsZ=muqT`lORu#|t$B4v`x1_MlU@|r77}kLcG~+RvZ200V|+AO z5q6F;z7jP_B6e0wYp>(^!(b~7o8;5On2u# zTTm2ddw)^Kz}u1-d7Yxug%(Q9p~O06-J9Z7DN@W#N-=W%sqy{6HqF_;fWHge4OKa z8|84@+Y}+5pgs06p@X(b(e#fPJo^b-Z1cDZ4}-{-^h2p!@jhm+a~xv@bRfWM3(RX3 zp$_aVU{IjO9JWAV)aQaR6AQo?r`WDtn|h^%+?zJ$HJQ3pqK2zn=qdw=Ff1xwCPm+= zXv(#!HyfJ}=F%>CU)PjW*hj{d1HJT_{cl$}ICQu-&&CGxHFJ{3$ivn8&)=t6Loyh#e z(tn=3!r{Zb`Z&_&Q%2O#LsO$LgUvL_sYZR;f-yJHKKyvG(XZh9w8q}MB;IY(@hvH^ z;3g%OvU;h>jLIn!AUc*`h;o#Loe2yKRSX0uKQ~x{)D^-HsK5=wa8y4Iy zDtqYeLFlhblu%O(Xai&HYSrr4BMO5S0PhQ_nj?Oln-bgSB|LKDZ>k_2ETs4z-Z4>To0$?h+9t6+FO23^c;i^DUv+{^iET0q1e1Ng3os zwM!j0Cx~1}XSxNr7hGtQqYZTQm4UuJ)mi*&@=-5`(-LrL57hb|(6g@a2&!R14kJv~ zaqvy3v(&5&YVDJvt;f+fv>qu5doAotD_ee35%j+1tlHwuKIQNm^)xE2&*yF-&>{`;t*Z89Y1X-U%sw~C2wbcDT%Ul`JEEwTpt{cl=TkT-F_rlM_d2UCt zC#>mk7PL4$^ZA8dPWdl;IW0vKJS)wfdU%~{_qh0U*>S;nN2Ys~$}7(MKkfdR1@DYQ zndReznhW{gXCB$fQG0#!t`|&uFL15jaw5#iv$n&Bb?+@I zu-qq7F;ifcq}~4i|6~&dj1-^B3q3f>SEJr$@#7);$Il^`CN|v@>fTfNm98ZcW#aTrnIP!YIVodI^7=qeRag{txT=z6?di! zS_`)}9nafQ$+@_|eu;m|lc)_3*FNI-F#V)Q<{{3;YfOiaO;D;;a8VBacddKBokpI0 z;CF}90kJ&FdnayKcR(P_Bu8!bvDq6ZnzVkt7{s(J+3m2xRlz8n?`EcW}ED!H_C zxlqkZqpRnQrd4~!IWZ*L@44iuc9OkNWK+biTlL?+#$Hy@*fvx3UVg4X%Ql;KtB)K# z-!?DkSs;=iaOXO+X;sGhD>dEo5*xO?(pys9Zff`fID_~lX~oeC^OteRnQ*)i3vZT4 zIVJJl=6Gy!RM3;G&(_Vp>sQz)^j^^AwLcNdHaGWXiK^%R!b+9@Z0+l}Y0Yv^z2j`X z*Qd4i^J(QhN!vsnd6z!^dutDa#gUE1p2zms_t<#3_A%|Rmi_9*+IM1tt@i(%j0?Yk zE29{hM3`|OfdQNr2ZJSzAd1j|80e;T z85dU5V5_*$jY3~zf-tI05rF1TTI2Jry0Vq@h1 literal 0 HcmV?d00001 diff --git a/venv/share/python-wheels/urllib3-1.24.1-py2.py3-none-any.whl b/venv/share/python-wheels/urllib3-1.24.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..fa5e5290242d10b3b0d7dd92132c20414b93271a GIT binary patch literal 117484 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