From 44bf7d40a09578a61f1849e39b9a9e4ce89a4186 Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Sun, 22 Oct 2023 20:48:59 +0200 Subject: [PATCH 01/54] problemy po zmianie bazy na postgresa problemy po zmianie bazy na postgresa --- Templates/users.html | 20 +- __pycache__/app.cpython-311.pyc | Bin 18340 -> 16461 bytes app.py | 200 +-- dodatkowe.txt | 23 +- .../pip/__pycache__/__init__.cpython-311.pyc | Bin 778 -> 778 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 961 -> 961 bytes .../__pycache__/build_env.cpython-311.pyc | Bin 16081 -> 16081 bytes .../__pycache__/cache.cpython-311.pyc | Bin 14279 -> 14279 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 19528 -> 19528 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 37630 -> 37630 bytes .../__pycache__/pyproject.cpython-311.pyc | Bin 5623 -> 5623 bytes .../self_outdated_check.cpython-311.pyc | Bin 11331 -> 11331 bytes .../__pycache__/wheel_builder.cpython-311.pyc | Bin 15265 -> 15265 bytes .../cli/__pycache__/__init__.cpython-311.pyc | Bin 296 -> 296 bytes .../autocompletion.cpython-311.pyc | Bin 10086 -> 10086 bytes .../__pycache__/base_command.cpython-311.pyc | Bin 11858 -> 11858 bytes .../__pycache__/cmdoptions.cpython-311.pyc | Bin 33757 -> 33757 bytes .../command_context.cpython-311.pyc | Bin 2118 -> 2118 bytes .../cli/__pycache__/main.cpython-311.pyc | Bin 2588 -> 2588 bytes .../__pycache__/main_parser.cpython-311.pyc | Bin 5532 -> 5532 bytes .../cli/__pycache__/parser.cpython-311.pyc | Bin 17033 -> 17033 bytes .../__pycache__/progress_bars.cpython-311.pyc | Bin 3180 -> 3180 bytes .../__pycache__/req_command.cpython-311.pyc | Bin 20326 -> 20326 bytes .../cli/__pycache__/spinners.cpython-311.pyc | Bin 8845 -> 8845 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 384 -> 384 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 4464 -> 4464 bytes .../__pycache__/install.cpython-311.pyc | Bin 31215 -> 31215 bytes .../commands/__pycache__/show.cpython-311.pyc | Bin 11303 -> 11303 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 1046 -> 1046 bytes .../__pycache__/base.cpython-311.pyc | Bin 2418 -> 2418 bytes .../__pycache__/installed.cpython-311.pyc | Bin 1555 -> 1555 bytes .../__pycache__/sdist.cpython-311.pyc | Bin 8957 -> 8957 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 2149 -> 2149 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 250 -> 250 bytes .../__pycache__/collector.cpython-311.pyc | Bin 24556 -> 24556 bytes .../package_finder.cpython-311.pyc | Bin 44228 -> 44228 bytes .../index/__pycache__/sources.cpython-311.pyc | Bin 11032 -> 11032 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 18188 -> 18188 bytes .../__pycache__/_sysconfig.cpython-311.pyc | Bin 8892 -> 8892 bytes .../__pycache__/base.cpython-311.pyc | Bin 4013 -> 4013 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 6421 -> 6421 bytes .../__pycache__/_json.cpython-311.pyc | Bin 3575 -> 3575 bytes .../metadata/__pycache__/base.cpython-311.pyc | Bin 38020 -> 38020 bytes .../__pycache__/pkg_resources.cpython-311.pyc | Bin 16868 -> 16868 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 367 -> 367 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 3574 -> 3574 bytes .../__pycache__/_dists.cpython-311.pyc | Bin 14590 -> 14590 bytes .../__pycache__/_envs.cpython-311.pyc | Bin 12500 -> 12500 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 284 -> 284 bytes .../__pycache__/candidate.cpython-311.pyc | Bin 2103 -> 2103 bytes .../__pycache__/direct_url.cpython-311.pyc | Bin 12811 -> 12811 bytes .../format_control.cpython-311.pyc | Bin 4667 -> 4667 bytes .../models/__pycache__/index.cpython-311.pyc | Bin 1909 -> 1909 bytes .../installation_report.cpython-311.pyc | Bin 2572 -> 2572 bytes .../models/__pycache__/link.cpython-311.pyc | Bin 28671 -> 28671 bytes .../models/__pycache__/scheme.cpython-311.pyc | Bin 1275 -> 1275 bytes .../__pycache__/search_scope.cpython-311.pyc | Bin 5838 -> 5838 bytes .../selection_prefs.cpython-311.pyc | Bin 2006 -> 2006 bytes .../__pycache__/target_python.cpython-311.pyc | Bin 4768 -> 4768 bytes .../models/__pycache__/wheel.cpython-311.pyc | Bin 6431 -> 6431 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 272 -> 272 bytes .../network/__pycache__/auth.cpython-311.pyc | Bin 23999 -> 23999 bytes .../network/__pycache__/cache.cpython-311.pyc | Bin 5195 -> 5195 bytes .../__pycache__/download.cpython-311.pyc | Bin 9587 -> 9587 bytes .../__pycache__/lazy_wheel.cpython-311.pyc | Bin 13033 -> 13033 bytes .../__pycache__/session.cpython-311.pyc | Bin 21444 -> 21444 bytes .../network/__pycache__/utils.cpython-311.pyc | Bin 2421 -> 2421 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 210 -> 210 bytes .../__pycache__/check.cpython-311.pyc | Bin 8473 -> 8473 bytes .../__pycache__/prepare.cpython-311.pyc | Bin 27956 -> 27956 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 216 -> 216 bytes .../__pycache__/build_tracker.cpython-311.pyc | Bin 8139 -> 8139 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 2287 -> 2287 bytes .../metadata_editable.cpython-311.pyc | Bin 2323 -> 2323 bytes .../metadata_legacy.cpython-311.pyc | Bin 3723 -> 3723 bytes .../build/__pycache__/wheel.cpython-311.pyc | Bin 1953 -> 1953 bytes .../wheel_editable.cpython-311.pyc | Bin 2397 -> 2397 bytes .../__pycache__/wheel_legacy.cpython-311.pyc | Bin 4504 -> 4504 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 284 -> 284 bytes .../editable_legacy.cpython-311.pyc | Bin 2197 -> 2197 bytes .../install/__pycache__/wheel.cpython-311.pyc | Bin 40250 -> 40250 bytes .../req/__pycache__/__init__.cpython-311.pyc | Bin 4398 -> 4398 bytes .../__pycache__/constructors.cpython-311.pyc | Bin 20710 -> 20710 bytes .../req/__pycache__/req_file.cpython-311.pyc | Bin 22755 -> 22755 bytes .../__pycache__/req_install.cpython-311.pyc | Bin 38093 -> 38093 bytes .../req/__pycache__/req_set.cpython-311.pyc | Bin 7966 -> 7966 bytes .../__pycache__/req_uninstall.cpython-311.pyc | Bin 37492 -> 37492 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 210 -> 210 bytes .../__pycache__/base.cpython-311.pyc | Bin 1381 -> 1381 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 221 -> 221 bytes .../__pycache__/base.cpython-311.pyc | Bin 9634 -> 9634 bytes .../__pycache__/candidates.cpython-311.pyc | Bin 28808 -> 28808 bytes .../__pycache__/factory.cpython-311.pyc | Bin 31933 -> 31933 bytes .../found_candidates.cpython-311.pyc | Bin 6769 -> 6769 bytes .../__pycache__/provider.cpython-311.pyc | Bin 11460 -> 11460 bytes .../__pycache__/reporter.cpython-311.pyc | Bin 5451 -> 5451 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 11131 -> 11131 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 12432 -> 12432 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 205 -> 205 bytes .../__pycache__/_jaraco_text.cpython-311.pyc | Bin 4769 -> 4769 bytes .../utils/__pycache__/_log.cpython-311.pyc | Bin 2026 -> 2026 bytes .../utils/__pycache__/appdirs.cpython-311.pyc | Bin 2564 -> 2564 bytes .../utils/__pycache__/compat.cpython-311.pyc | Bin 2272 -> 2272 bytes .../compatibility_tags.cpython-311.pyc | Bin 6764 -> 6764 bytes .../__pycache__/deprecation.cpython-311.pyc | Bin 4691 -> 4691 bytes .../direct_url_helpers.cpython-311.pyc | Bin 3728 -> 3728 bytes .../__pycache__/egg_link.cpython-311.pyc | Bin 3243 -> 3243 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 2328 -> 2328 bytes .../__pycache__/entrypoints.cpython-311.pyc | Bin 4250 -> 4250 bytes .../__pycache__/filesystem.cpython-311.pyc | Bin 8235 -> 8235 bytes .../__pycache__/filetypes.cpython-311.pyc | Bin 1321 -> 1321 bytes .../utils/__pycache__/glibc.cpython-311.pyc | Bin 2617 -> 2617 bytes .../utils/__pycache__/hashes.cpython-311.pyc | Bin 8776 -> 8776 bytes .../inject_securetransport.cpython-311.pyc | Bin 1339 -> 1339 bytes .../utils/__pycache__/logging.cpython-311.pyc | Bin 15464 -> 15464 bytes .../utils/__pycache__/misc.cpython-311.pyc | Bin 37064 -> 37064 bytes .../utils/__pycache__/models.cpython-311.pyc | Bin 2945 -> 2945 bytes .../__pycache__/packaging.cpython-311.pyc | Bin 2812 -> 2812 bytes .../setuptools_build.cpython-311.pyc | Bin 4877 -> 4877 bytes .../__pycache__/subprocess.cpython-311.pyc | Bin 9899 -> 9899 bytes .../__pycache__/temp_dir.cpython-311.pyc | Bin 11426 -> 11426 bytes .../__pycache__/unpacking.cpython-311.pyc | Bin 12901 -> 12901 bytes .../utils/__pycache__/urls.cpython-311.pyc | Bin 2698 -> 2698 bytes .../__pycache__/virtualenv.cpython-311.pyc | Bin 4945 -> 4945 bytes .../utils/__pycache__/wheel.cpython-311.pyc | Bin 7115 -> 7115 bytes .../vcs/__pycache__/__init__.cpython-311.pyc | Bin 640 -> 640 bytes .../vcs/__pycache__/bazaar.cpython-311.pyc | Bin 5865 -> 5865 bytes .../vcs/__pycache__/git.cpython-311.pyc | Bin 21529 -> 21529 bytes .../vcs/__pycache__/mercurial.cpython-311.pyc | Bin 8720 -> 8720 bytes .../__pycache__/subversion.cpython-311.pyc | Bin 14608 -> 14608 bytes .../versioncontrol.cpython-311.pyc | Bin 31877 -> 31877 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 5618 -> 5618 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 847 -> 847 bytes .../__pycache__/adapter.cpython-311.pyc | Bin 5509 -> 5509 bytes .../__pycache__/cache.cpython-311.pyc | Bin 3783 -> 3783 bytes .../__pycache__/compat.cpython-311.pyc | Bin 1140 -> 1140 bytes .../__pycache__/controller.cpython-311.pyc | Bin 16455 -> 16455 bytes .../__pycache__/filewrapper.cpython-311.pyc | Bin 4242 -> 4242 bytes .../__pycache__/serialize.cpython-311.pyc | Bin 8402 -> 8402 bytes .../__pycache__/wrapper.cpython-311.pyc | Bin 968 -> 968 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 422 -> 422 bytes .../__pycache__/file_cache.cpython-311.pyc | Bin 8405 -> 8405 bytes .../__pycache__/redis_cache.cpython-311.pyc | Bin 2502 -> 2502 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 347 -> 347 bytes .../certifi/__pycache__/core.cpython-311.pyc | Bin 3370 -> 3370 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 5079 -> 5079 bytes .../__pycache__/big5freq.cpython-311.pyc | Bin 27209 -> 27209 bytes .../__pycache__/big5prober.cpython-311.pyc | Bin 1684 -> 1684 bytes .../chardistribution.cpython-311.pyc | Bin 11276 -> 11276 bytes .../charsetgroupprober.cpython-311.pyc | Bin 4306 -> 4306 bytes .../__pycache__/charsetprober.cpython-311.pyc | Bin 5552 -> 5552 bytes .../codingstatemachine.cpython-311.pyc | Bin 4003 -> 4003 bytes .../codingstatemachinedict.cpython-311.pyc | Bin 959 -> 959 bytes .../__pycache__/cp949prober.cpython-311.pyc | Bin 1693 -> 1693 bytes .../chardet/__pycache__/enums.cpython-311.pyc | Bin 3394 -> 3394 bytes .../__pycache__/escprober.cpython-311.pyc | Bin 4910 -> 4910 bytes .../chardet/__pycache__/escsm.cpython-311.pyc | Bin 12649 -> 12649 bytes .../__pycache__/eucjpprober.cpython-311.pyc | Bin 4736 -> 4736 bytes .../__pycache__/euckrfreq.cpython-311.pyc | Bin 12092 -> 12092 bytes .../__pycache__/euckrprober.cpython-311.pyc | Bin 1685 -> 1685 bytes .../__pycache__/euctwfreq.cpython-311.pyc | Bin 27214 -> 27214 bytes .../__pycache__/euctwprober.cpython-311.pyc | Bin 1685 -> 1685 bytes .../__pycache__/gb2312freq.cpython-311.pyc | Bin 19136 -> 19136 bytes .../__pycache__/gb2312prober.cpython-311.pyc | Bin 1700 -> 1700 bytes .../__pycache__/hebrewprober.cpython-311.pyc | Bin 5689 -> 5689 bytes .../__pycache__/jisfreq.cpython-311.pyc | Bin 22165 -> 22165 bytes .../__pycache__/johabfreq.cpython-311.pyc | Bin 84669 -> 84669 bytes .../__pycache__/johabprober.cpython-311.pyc | Bin 1691 -> 1691 bytes .../__pycache__/jpcntx.cpython-311.pyc | Bin 40173 -> 40173 bytes .../langbulgarianmodel.cpython-311.pyc | Bin 85843 -> 85843 bytes .../langgreekmodel.cpython-311.pyc | Bin 79265 -> 79265 bytes .../langhebrewmodel.cpython-311.pyc | Bin 80027 -> 80027 bytes .../langrussianmodel.cpython-311.pyc | Bin 108744 -> 108744 bytes .../__pycache__/langthaimodel.cpython-311.pyc | Bin 80205 -> 80205 bytes .../langturkishmodel.cpython-311.pyc | Bin 80044 -> 80044 bytes .../__pycache__/latin1prober.cpython-311.pyc | Bin 7340 -> 7340 bytes .../macromanprober.cpython-311.pyc | Bin 7507 -> 7507 bytes .../mbcharsetprober.cpython-311.pyc | Bin 4128 -> 4128 bytes .../mbcsgroupprober.cpython-311.pyc | Bin 1998 -> 1998 bytes .../__pycache__/mbcssm.cpython-311.pyc | Bin 31738 -> 31738 bytes .../__pycache__/resultdict.cpython-311.pyc | Bin 777 -> 777 bytes .../sbcharsetprober.cpython-311.pyc | Bin 6403 -> 6403 bytes .../sbcsgroupprober.cpython-311.pyc | Bin 2948 -> 2948 bytes .../__pycache__/sjisprober.cpython-311.pyc | Bin 4841 -> 4841 bytes .../universaldetector.cpython-311.pyc | Bin 12469 -> 12469 bytes .../__pycache__/utf1632prober.cpython-311.pyc | Bin 10589 -> 10589 bytes .../__pycache__/utf8prober.cpython-311.pyc | Bin 3476 -> 3476 bytes .../__pycache__/version.cpython-311.pyc | Bin 512 -> 512 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 1450 -> 1450 bytes .../__pycache__/compat.cpython-311.pyc | Bin 52316 -> 52316 bytes .../__pycache__/resources.cpython-311.pyc | Bin 18999 -> 18999 bytes .../__pycache__/scripts.cpython-311.pyc | Bin 21275 -> 21275 bytes .../distlib/__pycache__/util.cpython-311.pyc | Bin 97454 -> 97454 bytes .../idna/__pycache__/__init__.cpython-311.pyc | Bin 1104 -> 1104 bytes .../idna/__pycache__/core.cpython-311.pyc | Bin 19456 -> 19456 bytes .../idna/__pycache__/idnadata.cpython-311.pyc | Bin 38980 -> 38980 bytes .../__pycache__/intranges.cpython-311.pyc | Bin 2989 -> 2989 bytes .../__pycache__/package_data.cpython-311.pyc | Bin 224 -> 224 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 2083 -> 2083 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 2384 -> 2384 bytes .../msgpack/__pycache__/ext.cpython-311.pyc | Bin 9169 -> 9169 bytes .../__pycache__/fallback.cpython-311.pyc | Bin 47157 -> 47157 bytes .../__pycache__/__about__.cpython-311.pyc | Bin 648 -> 648 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 569 -> 569 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 13235 -> 13235 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 8003 -> 8003 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 3691 -> 3691 bytes .../__pycache__/markers.cpython-311.pyc | Bin 16531 -> 16531 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 7646 -> 7646 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 34369 -> 34369 bytes .../__pycache__/tags.cpython-311.pyc | Bin 21354 -> 21354 bytes .../__pycache__/utils.cpython-311.pyc | Bin 6689 -> 6689 bytes .../__pycache__/version.cpython-311.pyc | Bin 21881 -> 21881 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 160149 -> 160149 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 17502 -> 17502 bytes .../__pycache__/api.cpython-311.pyc | Bin 10561 -> 10561 bytes .../__pycache__/version.cpython-311.pyc | Bin 319 -> 319 bytes .../__pycache__/windows.cpython-311.pyc | Bin 13947 -> 13947 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 3838 -> 3838 bytes .../__pycache__/filter.cpython-311.pyc | Bin 3511 -> 3511 bytes .../__pycache__/lexer.cpython-311.pyc | Bin 42314 -> 42314 bytes .../__pycache__/modeline.cpython-311.pyc | Bin 1730 -> 1730 bytes .../__pycache__/plugin.cpython-311.pyc | Bin 3743 -> 3743 bytes .../__pycache__/regexopt.cpython-311.pyc | Bin 5037 -> 5037 bytes .../__pycache__/style.cpython-311.pyc | Bin 7431 -> 7431 bytes .../__pycache__/token.cpython-311.pyc | Bin 7471 -> 7471 bytes .../pygments/__pycache__/util.cpython-311.pyc | Bin 15696 -> 15696 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 40111 -> 40111 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 16355 -> 16355 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 64797 -> 64797 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 4686 -> 4686 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 8235 -> 8235 bytes .../__pycache__/actions.cpython-311.pyc | Bin 9126 -> 9126 bytes .../__pycache__/common.cpython-311.pyc | Bin 14873 -> 14873 bytes .../__pycache__/core.cpython-311.pyc | Bin 295446 -> 295446 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 13713 -> 13713 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 54132 -> 54132 bytes .../__pycache__/results.cpython-311.pyc | Bin 37853 -> 37853 bytes .../__pycache__/testing.cpython-311.pyc | Bin 19516 -> 19516 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 15204 -> 15204 bytes .../__pycache__/util.cpython-311.pyc | Bin 16787 -> 16787 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 712 -> 712 bytes .../__pycache__/_impl.cpython-311.pyc | Bin 16676 -> 16676 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 1172 -> 1172 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 6443 -> 6443 bytes .../__pycache__/__version__.cpython-311.pyc | Bin 593 -> 593 bytes .../_internal_utils.cpython-311.pyc | Bin 2157 -> 2157 bytes .../__pycache__/adapters.cpython-311.pyc | Bin 23210 -> 23210 bytes .../requests/__pycache__/api.cpython-311.pyc | Bin 7510 -> 7510 bytes .../requests/__pycache__/auth.cpython-311.pyc | Bin 14637 -> 14637 bytes .../__pycache__/certs.cpython-311.pyc | Bin 989 -> 989 bytes .../__pycache__/compat.cpython-311.pyc | Bin 1815 -> 1815 bytes .../__pycache__/cookies.cpython-311.pyc | Bin 27117 -> 27117 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 8532 -> 8532 bytes .../__pycache__/hooks.cpython-311.pyc | Bin 1257 -> 1257 bytes .../__pycache__/models.cpython-311.pyc | Bin 38788 -> 38788 bytes .../__pycache__/packages.cpython-311.pyc | Bin 837 -> 837 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 29700 -> 29700 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 6244 -> 6244 bytes .../__pycache__/structures.cpython-311.pyc | Bin 6229 -> 6229 bytes .../__pycache__/utils.cpython-311.pyc | Bin 40263 -> 40263 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 760 -> 760 bytes .../__pycache__/providers.cpython-311.pyc | Bin 7078 -> 7078 bytes .../__pycache__/reporters.cpython-311.pyc | Bin 2842 -> 2842 bytes .../__pycache__/resolvers.cpython-311.pyc | Bin 29242 -> 29242 bytes .../__pycache__/structs.cpython-311.pyc | Bin 11479 -> 11479 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 215 -> 215 bytes .../collections_abc.cpython-311.pyc | Bin 490 -> 490 bytes .../rich/__pycache__/__init__.cpython-311.pyc | Bin 7503 -> 7503 bytes .../__pycache__/_cell_widths.cpython-311.pyc | Bin 7842 -> 7842 bytes .../__pycache__/_emoji_codes.cpython-311.pyc | Bin 208529 -> 208529 bytes .../_emoji_replace.cpython-311.pyc | Bin 1941 -> 1941 bytes .../_export_format.cpython-311.pyc | Bin 2332 -> 2332 bytes .../__pycache__/_extension.cpython-311.pyc | Bin 642 -> 642 bytes .../rich/__pycache__/_fileno.cpython-311.pyc | Bin 984 -> 984 bytes .../__pycache__/_log_render.cpython-311.pyc | Bin 4776 -> 4776 bytes .../rich/__pycache__/_loop.cpython-311.pyc | Bin 2122 -> 2122 bytes .../__pycache__/_null_file.cpython-311.pyc | Bin 4181 -> 4181 bytes .../__pycache__/_palettes.cpython-311.pyc | Bin 5258 -> 5258 bytes .../rich/__pycache__/_pick.cpython-311.pyc | Bin 803 -> 803 bytes .../rich/__pycache__/_ratio.cpython-311.pyc | Bin 7941 -> 7941 bytes .../__pycache__/_spinners.cpython-311.pyc | Bin 13691 -> 13691 bytes .../_win32_console.cpython-311.pyc | Bin 30178 -> 30178 bytes .../rich/__pycache__/_windows.cpython-311.pyc | Bin 2837 -> 2837 bytes .../rich/__pycache__/_wrap.cpython-311.pyc | Bin 2793 -> 2793 bytes .../rich/__pycache__/abc.cpython-311.pyc | Bin 1934 -> 1934 bytes .../rich/__pycache__/align.cpython-311.pyc | Bin 13476 -> 13476 bytes .../rich/__pycache__/ansi.cpython-311.pyc | Bin 10507 -> 10507 bytes .../rich/__pycache__/box.cpython-311.pyc | Bin 12998 -> 12998 bytes .../rich/__pycache__/cells.cpython-311.pyc | Bin 6628 -> 6628 bytes .../rich/__pycache__/color.cpython-311.pyc | Bin 27812 -> 27812 bytes .../__pycache__/color_triplet.cpython-311.pyc | Bin 1882 -> 1882 bytes .../rich/__pycache__/columns.cpython-311.pyc | Bin 10653 -> 10653 bytes .../rich/__pycache__/console.cpython-311.pyc | Bin 123756 -> 123756 bytes .../__pycache__/constrain.cpython-311.pyc | Bin 2474 -> 2474 bytes .../__pycache__/containers.cpython-311.pyc | Bin 10815 -> 10815 bytes .../rich/__pycache__/control.cpython-311.pyc | Bin 11906 -> 11906 bytes .../default_styles.cpython-311.pyc | Bin 12609 -> 12609 bytes .../rich/__pycache__/emoji.cpython-311.pyc | Bin 4807 -> 4807 bytes .../rich/__pycache__/errors.cpython-311.pyc | Bin 2338 -> 2338 bytes .../__pycache__/file_proxy.cpython-311.pyc | Bin 4042 -> 4042 bytes .../rich/__pycache__/filesize.cpython-311.pyc | Bin 3310 -> 3310 bytes .../__pycache__/highlighter.cpython-311.pyc | Bin 10996 -> 10996 bytes .../rich/__pycache__/jupyter.cpython-311.pyc | Bin 6413 -> 6413 bytes .../rich/__pycache__/live.cpython-311.pyc | Bin 21306 -> 21306 bytes .../__pycache__/live_render.cpython-311.pyc | Bin 5154 -> 5154 bytes .../rich/__pycache__/logging.cpython-311.pyc | Bin 14525 -> 14525 bytes .../rich/__pycache__/markup.cpython-311.pyc | Bin 10447 -> 10447 bytes .../rich/__pycache__/measure.cpython-311.pyc | Bin 7280 -> 7280 bytes .../rich/__pycache__/padding.cpython-311.pyc | Bin 7496 -> 7496 bytes .../rich/__pycache__/pager.cpython-311.pyc | Bin 2254 -> 2254 bytes .../rich/__pycache__/palette.cpython-311.pyc | Bin 5987 -> 5987 bytes .../rich/__pycache__/panel.cpython-311.pyc | Bin 12743 -> 12743 bytes .../rich/__pycache__/pretty.cpython-311.pyc | Bin 44357 -> 44357 bytes .../rich/__pycache__/progress.cpython-311.pyc | Bin 82623 -> 82623 bytes .../__pycache__/progress_bar.cpython-311.pyc | Bin 11021 -> 11021 bytes .../rich/__pycache__/protocol.cpython-311.pyc | Bin 2105 -> 2105 bytes .../rich/__pycache__/region.cpython-311.pyc | Bin 668 -> 668 bytes .../rich/__pycache__/repr.cpython-311.pyc | Bin 7635 -> 7635 bytes .../rich/__pycache__/scope.cpython-311.pyc | Bin 4360 -> 4360 bytes .../rich/__pycache__/screen.cpython-311.pyc | Bin 2783 -> 2783 bytes .../rich/__pycache__/segment.cpython-311.pyc | Bin 31613 -> 31613 bytes .../rich/__pycache__/spinner.cpython-311.pyc | Bin 6889 -> 6889 bytes .../rich/__pycache__/style.cpython-311.pyc | Bin 35207 -> 35207 bytes .../rich/__pycache__/styled.cpython-311.pyc | Bin 2448 -> 2448 bytes .../rich/__pycache__/syntax.cpython-311.pyc | Bin 42658 -> 42658 bytes .../rich/__pycache__/table.cpython-311.pyc | Bin 48809 -> 48809 bytes .../terminal_theme.cpython-311.pyc | Bin 3714 -> 3714 bytes .../rich/__pycache__/text.cpython-311.pyc | Bin 64967 -> 64967 bytes .../rich/__pycache__/theme.cpython-311.pyc | Bin 7313 -> 7313 bytes .../rich/__pycache__/themes.cpython-311.pyc | Bin 364 -> 364 bytes .../__pycache__/traceback.cpython-311.pyc | Bin 34576 -> 34576 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 29055 -> 29055 bytes .../__pycache__/_asyncio.cpython-311.pyc | Bin 5231 -> 5231 bytes .../__pycache__/_utils.cpython-311.pyc | Bin 2571 -> 2571 bytes .../__pycache__/after.cpython-311.pyc | Bin 1766 -> 1766 bytes .../__pycache__/before.cpython-311.pyc | Bin 1600 -> 1600 bytes .../__pycache__/before_sleep.cpython-311.pyc | Bin 2383 -> 2383 bytes .../tenacity/__pycache__/nap.cpython-311.pyc | Bin 1574 -> 1574 bytes .../__pycache__/retry.cpython-311.pyc | Bin 15950 -> 15950 bytes .../tenacity/__pycache__/stop.cpython-311.pyc | Bin 6303 -> 6303 bytes .../tenacity/__pycache__/wait.cpython-311.pyc | Bin 13309 -> 13309 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 419 -> 419 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 30858 -> 30858 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 4498 -> 4498 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 411 -> 411 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 3717 -> 3717 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 18305 -> 18305 bytes .../__pycache__/_version.cpython-311.pyc | Bin 227 -> 227 bytes .../__pycache__/connection.cpython-311.pyc | Bin 22073 -> 22073 bytes .../connectionpool.cpython-311.pyc | Bin 38285 -> 38285 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 16131 -> 16131 bytes .../__pycache__/fields.cpython-311.pyc | Bin 11424 -> 11424 bytes .../__pycache__/filepost.cpython-311.pyc | Bin 4505 -> 4505 bytes .../__pycache__/poolmanager.cpython-311.pyc | Bin 21623 -> 21623 bytes .../__pycache__/request.cpython-311.pyc | Bin 6668 -> 6668 bytes .../__pycache__/response.cpython-311.pyc | Bin 36551 -> 36551 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 213 -> 213 bytes .../_appengine_environ.cpython-311.pyc | Bin 1952 -> 1952 bytes .../contrib/__pycache__/socks.cpython-311.pyc | Bin 8097 -> 8097 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 214 -> 214 bytes .../packages/__pycache__/six.cpython-311.pyc | Bin 46456 -> 46456 bytes .../util/__pycache__/__init__.cpython-311.pyc | Bin 1416 -> 1416 bytes .../__pycache__/connection.cpython-311.pyc | Bin 5143 -> 5143 bytes .../util/__pycache__/proxy.cpython-311.pyc | Bin 1725 -> 1725 bytes .../util/__pycache__/queue.cpython-311.pyc | Bin 1508 -> 1508 bytes .../util/__pycache__/request.cpython-311.pyc | Bin 4628 -> 4628 bytes .../util/__pycache__/response.cpython-311.pyc | Bin 3497 -> 3497 bytes .../util/__pycache__/retry.cpython-311.pyc | Bin 22765 -> 22765 bytes .../util/__pycache__/ssl_.cpython-311.pyc | Bin 16828 -> 16828 bytes .../ssl_match_hostname.cpython-311.pyc | Bin 5807 -> 5807 bytes .../__pycache__/ssltransport.cpython-311.pyc | Bin 11636 -> 11636 bytes .../util/__pycache__/timeout.cpython-311.pyc | Bin 11350 -> 11350 bytes .../util/__pycache__/url.cpython-311.pyc | Bin 17591 -> 17591 bytes .../util/__pycache__/wait.cpython-311.pyc | Bin 5010 -> 5010 bytes .../psycopg2-2.9.9.dist-info/INSTALLER | 1 + .../psycopg2-2.9.9.dist-info/LICENSE | 49 + .../psycopg2-2.9.9.dist-info/METADATA | 110 ++ .../psycopg2-2.9.9.dist-info/RECORD | 30 + .../psycopg2-2.9.9.dist-info/REQUESTED | 0 .../psycopg2-2.9.9.dist-info/WHEEL | 5 + .../psycopg2-2.9.9.dist-info/top_level.txt | 1 + env/Lib/site-packages/psycopg2/__init__.py | 126 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4101 bytes .../__pycache__/_ipaddress.cpython-311.pyc | Bin 0 -> 2920 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 7986 bytes .../__pycache__/_range.cpython-311.pyc | Bin 0 -> 22688 bytes .../__pycache__/errorcodes.cpython-311.pyc | Bin 0 -> 14509 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 582 bytes .../__pycache__/extensions.cpython-311.pyc | Bin 0 -> 9216 bytes .../__pycache__/extras.cpython-311.pyc | Bin 0 -> 68277 bytes .../psycopg2/__pycache__/pool.cpython-311.pyc | Bin 0 -> 8299 bytes .../psycopg2/__pycache__/sql.cpython-311.pyc | Bin 0 -> 20536 bytes .../psycopg2/__pycache__/tz.cpython-311.pyc | Bin 0 -> 6441 bytes env/Lib/site-packages/psycopg2/_ipaddress.py | 90 ++ env/Lib/site-packages/psycopg2/_json.py | 199 +++ .../psycopg2/_psycopg.cp311-win_amd64.pyd | Bin 0 -> 2416128 bytes env/Lib/site-packages/psycopg2/_range.py | 554 +++++++ env/Lib/site-packages/psycopg2/errorcodes.py | 449 ++++++ env/Lib/site-packages/psycopg2/errors.py | 38 + env/Lib/site-packages/psycopg2/extensions.py | 213 +++ env/Lib/site-packages/psycopg2/extras.py | 1340 +++++++++++++++++ env/Lib/site-packages/psycopg2/pool.py | 187 +++ env/Lib/site-packages/psycopg2/sql.py | 455 ++++++ env/Lib/site-packages/psycopg2/tz.py | 158 ++ 405 files changed, 4124 insertions(+), 124 deletions(-) create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/INSTALLER create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/LICENSE create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/METADATA create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/RECORD create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/REQUESTED create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/WHEEL create mode 100644 env/Lib/site-packages/psycopg2-2.9.9.dist-info/top_level.txt create mode 100644 env/Lib/site-packages/psycopg2/__init__.py create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/__init__.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/_ipaddress.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/_json.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/_range.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/errorcodes.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/errors.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/extensions.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/extras.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/pool.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/sql.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/__pycache__/tz.cpython-311.pyc create mode 100644 env/Lib/site-packages/psycopg2/_ipaddress.py create mode 100644 env/Lib/site-packages/psycopg2/_json.py create mode 100644 env/Lib/site-packages/psycopg2/_psycopg.cp311-win_amd64.pyd create mode 100644 env/Lib/site-packages/psycopg2/_range.py create mode 100644 env/Lib/site-packages/psycopg2/errorcodes.py create mode 100644 env/Lib/site-packages/psycopg2/errors.py create mode 100644 env/Lib/site-packages/psycopg2/extensions.py create mode 100644 env/Lib/site-packages/psycopg2/extras.py create mode 100644 env/Lib/site-packages/psycopg2/pool.py create mode 100644 env/Lib/site-packages/psycopg2/sql.py create mode 100644 env/Lib/site-packages/psycopg2/tz.py diff --git a/Templates/users.html b/Templates/users.html index 72c9ef9..011bcd8 100644 --- a/Templates/users.html +++ b/Templates/users.html @@ -19,8 +19,24 @@ {{ user.id }} {{ user.name }} {{ user.email }} - - + + {% if user.is_active %} + tak + {% else %} + nie + {% endif %} + + + + + {% if user.is_admin %} + tak + {% else %} + nie + {% endif %} + + + Edit... diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index 282956daba351c767a53cc2762ca877a1b57438c..81f7e9e50a400787e4f0b25bd18e4f0b4d43c348 100644 GIT binary patch delta 6816 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 literal 18340 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 LT9-u934i&&%_kGH diff --git a/app.py b/app.py index 46024a8..328d26b 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,5 @@ from flask import Flask, render_template, request, g, redirect, url_for, flash, session -import sqlite3 +import psycopg2 from datetime import date import os @@ -7,29 +7,55 @@ import binascii import random import string - - - -app_info = { - 'db_file': 'C:\\Users\\miesz\\Documents\\GitHub\\Ostateczna\\data\\cantor.db' -} +import psycopg2.extras app = Flask(__name__) +if __name__ == '__main__': + app.run(debug=True) + app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' def get_db(): - if not hasattr(g, 'sqlite_db'): - conn = sqlite3.connect(app_info['db_file']) - conn.row_factory = sqlite3.Row - g.sqlite_db = conn - return g.sqlite_db + if not hasattr(g, 'db'): + dbname = 'OpenWorkFlow' + user = 'postgres' + password = 'a' + host = 'localhost' + port = '5432' + conn = psycopg2.connect(dbname=dbname, user=user, password=password, host=host, port=port) + g.db = conn + return g.db @app.teardown_appcontext def close_db(error): - if hasattr(g, 'sqlite_db'): - g.sqlite_db.close() + if hasattr(g, 'db'): + g.db.close() +@app.route('/init_app') +def init_app(): + db = get_db() + cur = db.cursor() + + # check if there are users defined (at least one active admin required) + cur.execute("SELECT COUNT(*) FROM users WHERE is_active = TRUE AND is_admin = TRUE") + active_admins = cur.fetchone()[0] + + if active_admins > 0: + flash('Application is already set-up. Nothing to do') + return redirect(url_for('index')) + + # if not - create/update admin account with a new password and admin privileges, display + user_pass = UserPass() + user_pass.get_random_user_password() + name = user_pass.user[:100] # truncate the name to 100 characters + email = 'noone@nowhere.no' + password = user_pass.hash_password() + sql_statement = "INSERT INTO users (name, email, password, is_active, is_admin) VALUES (%s, %s, %s, %s, %s)" + cur.execute(sql_statement, [name, email, password, True, True]) + db.commit() + flash('User {} with password {} has been created'.format(user_pass.user, user_pass.password)) + return redirect(url_for('index')) @app.route('/login', methods=['GET','POST']) def login(): @@ -90,8 +116,9 @@ def get_random_user_password(self): def login_user(self): db = get_db() - sql_statement = 'select id, name, email, password, is_active, is_admin from users where name=?' - cur = db.execute(sql_statement, [self.user]) + sql_statement = 'select id, name, email, password, is_active, is_admin from users where name=%s' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_statement, [self.user]) user_record = cur.fetchone() if user_record != None and self.verify_password(user_record['password'], self.password): return user_record @@ -100,47 +127,43 @@ def login_user(self): self.password = None return None -@app.route('/init_app') -def init_app(): - - # check if there are users defined (at least one active admin required) - db = get_db() - sql_statement = 'select count(*) as cnt from users where is_active and is_admin;' - cur = db.execute(sql_statement) - active_admins = cur.fetchone() - - if active_admins!=None and active_admins['cnt']>0: - flash('Application is already set-up. Nothing to do') - return redirect(url_for('index')) - - # if not - create/update admin account with a new password and admin privileges, display - - user_pass = UserPass() - user_pass.get_random_user_password() - sql_statement = '''insert into users(name, email, password, is_active, is_admin) - values(?,?,?,True, True);''' - db.execute(sql_statement, [user_pass.user, 'noone@nowhere.no', user_pass.hash_password()]) - db.commit() - flash('User {} with password {} has been created'.format(user_pass.user, user_pass.password)) - return redirect(url_for('index')) - @app.route('/users') def users(): db = get_db() sql_command = 'select id, name, email, is_admin, is_active from users;' - cur = db.execute(sql_command) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_command) users=cur.fetchall() return render_template('users.html', active_menu='users', users=users) @app.route('/user_status_change//') def user_status_change(action, user_name): - return 'not implemented' + + if not 'user' in session: + return redirect(url_for('login')) + login = session['user'] + + db = get_db() + + if action == 'active': + db.execute("""update users set is_active = (is_active + 1) % 2 + where name = ? and name <> ?""", + [user_name, login]) + db.commit() + elif action == 'admin': + db.execute("""update users set is_admin = (is_admin + 1) % 2 + where name = ? and name <> ?""", + [user_name, login]) + db.commit() + + return redirect(url_for('users')) @app.route('/edit_user/', methods=['GET', 'POST']) def edit_user(user_name): db = get_db() - cur = db.execute('select name, email from users where name = ?', [user_name]) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute('select name, email from users where name = %s', [user_name]) user = cur.fetchone() message = None @@ -155,15 +178,15 @@ def edit_user(user_name): new_password = '' if 'user_pass' not in request.form else request.form['user_pass'] if new_email != user['email']: - sql_statement = "update users set email = ? where name = ?" - db.execute(sql_statement, [new_email, user_name]) + sql_statement = "update users set email = %s where name = %s" + cur.execute(sql_statement, [new_email, user_name]) db.commit() flash('Email was changed') if new_password != '': user_pass = UserPass(user_name, new_password) - sql_statement = "update users set password = ? where name = ?" - db.execute(sql_statement, [user_pass.hash_password(), user_name]) + sql_statement = "update users set password = %s where name = %s" + cur.execute(sql_statement, [user_pass.hash_password(), user_name]) db.commit() flash('Password was changed') @@ -171,14 +194,15 @@ def edit_user(user_name): @app.route('/user_delete/') def delete_user(user_name): - + if not 'user' in session: return redirect(url_for('login')) login = session['user'] db=get_db() - sql_statement = "delete from users where name = ? and name <> ?" - db.execute(sql_statement, [user_name, login]) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + sql_statement = "delete from users where name = %s and name <> %s" + cur.execute(sql_statement, [user_name, login]) db.commit() return redirect(url_for('users')) @@ -198,11 +222,12 @@ def new_user(): user['user_name'] = '' if not 'user_name' in request.form else request.form['user_name'] user['email'] = '' if not 'email' in request.form else request.form['email'] user['user_pass'] = '' if not 'user_pass' in request.form else request.form['user_pass'] - cursor = db.execute('select count(*) as cnt from users where name = ?',[user['user_name']]) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cursor = cur.execute('select count(*) as cnt from users where name = %s',[user['user_name']]) record = cursor.fetchone() is_user_name_unique = (record['cnt'] == 0) - cursor = db.execute('select count(*) as cnt from users where email = ?', [user['email']]) + cursor = cur.execute('select count(*) as cnt from users where email = %s', [user['email']]) record = cursor.fetchone() is_user_email_unique = (record['cnt'] == 0) @@ -220,8 +245,8 @@ def new_user(): if not message: user_pass = UserPass(user['user_name'], user['user_pass']) password_hash = user_pass.hash_password() - sql_statement = '''insert into users(name, email, password, is_active, is_admin) values(?,?,?, True, False);''' - db.execute(sql_statement, [user['user_name'], user['email'], password_hash]) + sql_statement = '''insert into users(name, email, password, is_active, is_admin) values(%s,%s,%s, True, False);''' + cur.execute(sql_statement, [user['user_name'][:100], user['email'], password_hash]) db.commit() flash('User {} created'.format(user['user_name'])) return redirect(url_for('users')) @@ -231,69 +256,4 @@ def new_user(): @app.route('/') def index(): - return render_template('base.html') - -@app.route('/exchange', methods=['GET', 'POST']) -def exchange(): - if request.method == 'GET': - return render_template('exchange.html') - else: - amount = 100 - if 'amount' in request.form: - amount = request.form['amount'] - - currency = "EUR" - if 'currency' in request.form: - currency = request.form['currency'] - - db = get_db() - sql_command = 'insert into transactions (currency, amount, user) values (?, ?, ?);' - db.execute(sql_command, [currency, amount, 'admin']) - db.commit() - return render_template('exchange_results.html', currency=currency, amount=amount) - -@app.route('/history') -def history(): - db=get_db() - sql_command='select id, currency, amount, trans_date from transactions;' - cur = db.execute(sql_command) - transactions = cur.fetchall() - - return render_template('history.html', transactions=transactions) - -@app.route('/delete_transaction/') -def delete_transaction(transaction_id): - db = get_db() - sql_statement='delete from transactions where id=?;' - db.execute(sql_statement, [transaction_id]) - db.commit() - flash('usunieto!') - return redirect(url_for('history')) - -@app.route('/edit_transaction/', methods=['GET', 'POST']) -def edit_transaction(transaction_id): - db = get_db() - - if request.method == 'GET': - sql_statement = 'select id, currency, amount from transactions where id=?;' - cur = db.execute(sql_statement, [transaction_id]) - transaction = cur.fetchone() - - if transaction is None: - flash('No such transaction!') - return redirect(url_for('history')) - else: - return render_template('edit_transaction.html', transaction=transaction) - elif request.method == 'POST': - amount = 100 - if 'amount' in request.form: - amount = request.form['amount'] - - currency = "EUR" - if 'currency' in request.form: - currency = request.form['currency'] - - sql_command = 'update transactions set currency=?, amount=?, user=?, trans_date=? where id=?;' - db.execute(sql_command, [currency, amount, 'admin', date.today(), transaction_id]) - db.commit() - return redirect(url_for('history')) # Redirect to 'history' after successful update + return render_template('base.html') \ No newline at end of file diff --git a/dodatkowe.txt b/dodatkowe.txt index be07798..946d7cd 100644 --- a/dodatkowe.txt +++ b/dodatkowe.txt @@ -3,8 +3,27 @@ booolen not null default 0, is_admin boolean not null default 0); create table transactions (id integer primary key autoincrement, currency varchar (5), amount int, user varchar(30), trans_date not null default(date())); -user jtq -password nMk +create table users ( + id serial primary key, + name varchar(100) not null unique, + email varchar(100) not null unique, + password varchar(100) not null, + is_active boolean not null default false, + is_admin boolean not null default false +); + +create table transactions ( + id serial primary key, + currency varchar(5), + amount int, + user_id integer references users(id), + trans_date timestamp not null default current_timestamp +); + +CREATE USER WorkFlow WITH PASSWORD 'password'; + +user cqk +password trf ala2@ala2 ala2 diff --git a/env/Lib/site-packages/pip/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/__pycache__/__init__.cpython-311.pyc index 79396b4b82541b6fee5fc40c5b883cd3c4b5c573..41136569b20ce0d4d239f4e61b8d460b2c8cd703 100644 GIT binary patch delta 28 icmeBT>tf?w&dbZi00iH|OjCtf?w&dbZi00a&lys4=hdH*mn>M!PEVgvwLat1R1 diff --git a/env/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc index ebbfd0a47a169a33cfe349dba5b341d24b908c3d..f911678ea3c901a5392e1cbb7b1df142d08829ec 100644 GIT binary patch delta 39 tcmX@eevqAaIWI340}y-N9TT6KSCU$kmzWc?*^{Y)5dhfV3x@yz delta 39 tcmX@eevqAaIWI340}wcL@TS^s#IWI340}vRynr`HlX5o&B&&(@HEy_#GiP>z(vcL)e&^ik| delta 37 rcmcaud$E>#IWI340}wcL@NVRmX5rS4&&(@HEy_#G(cf&yvcL)e&?yTF diff --git a/env/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc index bcb7215ad43e22234030274e73c66d9feb5dcdd3..e8738407336ab6dd1bf086095b6c3e7a2629c810 100644 GIT binary patch delta 40 ucmX?}e>|UWIWI340}y-|UWIWI340}wcL@TTt7*vRL@!mS^lnOBlpl$V&Jzd4m9$ru3mNDN8< diff --git a/env/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc index 8c468c1f00eea3a5e089d286bea36ac900f7d9c8..592709616e597641ec1d40421d64674f781e8412 100644 GIT binary patch delta 39 tcmX>xgYm=+M(*Xjyj%=GVC-tTk$VX%cT9X{UP)?EUSdwn=3T6PZUE)U3~&Gd delta 39 tcmX>xgYm=+M(*Xjyj%=G;LyRlk$VX%w|;zPUP)?EUSf{^=3T6PZUE)D3_bt= diff --git a/env/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc index 4a5313b23a8ceaa025a5075843f511ab0b518dd7..576f00aa6a9845c1d2597d7a205a4a704f06500f 100644 GIT binary patch delta 39 tcmeyjlcaX5l+IWI340}y-caX5l+IWI340}wcL@TNYO-^j%tnOBlpl$V&Jzge19LmdF@D+^r! diff --git a/env/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc index a1dc6497923392ce0fafbf499d4c4402d5b53f16..90c1d778f44d41d8e0dba5103a4430120fbda30b 100644 GIT binary patch delta 37 rcmZ2jzObBoIWI340}vRynr`G?!^RyGpP5&ZT9lWV6SMgc+kF!N&c6&V delta 37 rcmZ2jzObBoIWI340}wcL@NVQ@!^W*2pP5&ZT9lWVqrdqO+kF!N&aMmn diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc index a1734894129e39acf430e337f6429e4e6468f469..bf3d1afa93f973f4a65e3ce443ad2921c989089a 100644 GIT binary patch delta 38 scmZ3%w1SCyIWI340}vRynoi_C%O4Y;nOBlpl$V$jlbn+oGx5120KuFL5dZ)H delta 38 scmZ3%w1SCyIWI340}wcL@J{4D%da1wnOBlpl$V&JpPZAaKk>OE0KiKNvH$=8 diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc index b38622da111c79570bf63a31298d999cb49aea7c..46853b2761274f5ff02aafeacb1b002a4c07eb97 100644 GIT binary patch delta 43 xcmaFn_soxXIWI340}y-ZRF$Tku@r3wHNR17`< diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc index 0785823e0a74a6e92171718bed2883f7a937aebf..da5ccecee643e37c0d038dff19aa05cc569fdd49 100644 GIT binary patch delta 46 zcmccH&UCk(iElYCFBbz4d=E2CZK&MHw^4*YCO$K-B(*3nF()QDCo^XAIT8MR0BX<> AGynhq delta 46 zcmccH&UCk(iElYCFBbz4ICSu)`ju|v+bF`XAD@|5l3J9Pn4_PZlc~S?oCtqD07>}{ A$^ZZW diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc index 5ad748993c9e146aac1f288b8d3f5c0544ec8466..a2c7aebea9dcd8572fb3c2423ed172b76caa2c08 100644 GIT binary patch delta 41 vcmX>ma7=)EIWI340}vRynr`G?#l#;IpP5&ZT9lWV6O){i8MFBaQxhuy>@*Co delta 41 vcmX>ma7=)EIWI340}wcL@NVQ@#l){4pP5&ZT9lWVqo16UslWLMQxhuy>P-w# diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc index 0a0f228e44b3919101a54d4b46458426b8025700..76df7d286098a2f242fa070688cd974eaf038ebf 100644 GIT binary patch delta 41 vcmbOuGDn1aIWI340}vRynr`HlW8;sB&&(@HEy_#GiAm1MjM;3#_JkP#(yj}$ delta 41 vcmbOuGDn1aIWI340}wcL@NVRmW8>G4&&(@HEy_#G(NE6F)Zc8u_JkP#(8mi@ diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc index 6dd1673cedbb6d2f969f672e7ef03a2180998f0b..6301f3a1fec5dc7bda30f06924242e44469fb486 100644 GIT binary patch delta 41 vcmbQEJx7~+IWI340}vRynr`IwV&#vC&&(@HEy_#GiAm1MjM<#RY9Rms-0%yS delta 41 vcmbQEJx7~+IWI340}wcL@NVSxV&&J5&&(@HEy_#G(NE6F)Zd)KY9Rms+X)Lf diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc index 605f0679dcbf681c7712d85dc8acdb370ed480c5..9e8be0249e20d76ee69e83236616d921ada74175 100644 GIT binary patch delta 46 zcmeBdW$bKaV!Z diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc index d1d185b63e098ff53016308cc8e71c41aef07337..12bebf6b39c9350156ffe0d1031cf685a063def4 100644 GIT binary patch delta 41 vcmeBm?RDi|&dbZi00hRarW?7>Gx5j7XXcfp7Ud=8#3bir#%zAcv_u{N?#~S^ delta 41 vcmeBm?RDi|&dbZi00a&lyc@aCGx6)kXXcfp7Ud=8=qKl7>TiC@v_u{N?C1>6 diff --git a/env/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc index 8f9c3453d13db821baef1da9d6c473bbe76d2926..d3153c31abcfa961ffefb6ea94e16d2044f689d2 100644 GIT binary patch delta 40 ucmZo*ZeZqK&dbZi00hRarW?8W82Mx3GxJJPi}Dh4Vv=(*V26CeNp delta 51 zcmaF=neqK+M!w~|yj%=G;LyRF%2v3M@2P@_etc$LNorAEVvc@ter|4JUP`h4W_HCF F5dg=x5#Im+ diff --git a/env/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc index 46ac3f8f1c03c43e29ac65a8531ef89aee951bd7..daf850b4f556869dfb62033bc0f7b9b9fbf9b24f 100644 GIT binary patch delta 46 zcmZ1;u{?r%IWI340}vRynr`Gi!XgqApP5&ZT9lWV6O){uo12)IQXI4SF^h{j07PdG AK>z>% delta 46 zcmZ1;u{?r%IWI340}wcL@NVQj!Xly{pP5&ZT9lWVqo16go12)IQmnuEF^h{j06~Th A;s5{u diff --git a/env/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc index 7fac76a385557a77275a434e187d2c84da0f51c6..25d1861c0c9283f42477758c98b98979aec08a32 100644 GIT binary patch delta 51 zcmbQnF^z+JIWI340}vRynr`HlVv>xB&&(@HEy_#GiAl*UE-A`PDlN&(&nu4EY{zti F5dd8x58wa* delta 51 zcmbQnF^z+JIWI340}wcL@NVRmVv^L4&&(@HEy_#G(ND=NE-A`PDlN&(&nwp7Y{zti F5dc|74}kyx diff --git a/env/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc index 2138e8b9961fe3b33c2d00c0686d381d8b4ea22e..267c29c4856c544149c13c77540f20772bc5bca9 100644 GIT binary patch delta 53 zcmew)^ht!hjM* diff --git a/env/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc index 8637c62d49db253512b9a18c9a1c117736cb7674..85c37e29312ee7a1c9e3ce19923e5120c8290bd9 100644 GIT binary patch delta 53 zcmbQtGnt2XIWI340}y-XWK4W!UP)?EUSdv6N@j6MQD#zUNoIatam;33 HmJf0O5xEpD delta 53 zcmezC`q!0rIWI340}wcL@TSIXnOBlpl$V$jlbM&2S`jmGry~IF%MCXG delta 40 ucmeyx_=}NyIWI340}wcL@J{5OE2tlznOBlpl$V&JpP84ETA@F2ry~IE77W+` diff --git a/env/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc index 3aeb8b339991eb3257144a47f46e0cea2424ca22..c5c2c923daac48bb9fc8be5f6d138479ad3d13c3 100644 GIT binary patch delta 45 zcmaE}pYhFpM(*Xjyj%=GVC-tTk=u@4FeW}TuOzi7FEJ-3GcP5zB4%?G`=kf}Mp6#c delta 45 zcmaE}pYhFpM(*Xjyj%=G;LyRlk=u@4P(MC1uOzi7FEK|yGcP5zLVt4<`=kf}L6`zCJEN{rJqhlGLKS#2o$1yp+@m{mpB+#1{bo Dj^+@; diff --git a/env/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc index 096a3223972c29c38df3a843da4fefd653b94a2b..70a950b2f8fb6a2b05f5fcf107932e8ec1181e50 100644 GIT binary patch delta 43 xcmbOcHY1FCIWI340}vRynr`IY#4H#SpP5&ZT9lWV6O);jl3Ee7`5d#CIsgyB4Zi>Y delta 43 xcmbOcHY1FCIWI340}wcL@NVSZ#4M;EpP5&ZT9lWVqo0|Vl3Jm^`5d#CIsgrJ4PXEO diff --git a/env/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc index f26f46f7bb55695d965a7f788909ead8a2cdc76a..227a75513bb435bd1f70ce78c4ac91e64ae06ebe 100644 GIT binary patch delta 49 zcmeC_W9;c;8jlm82HsCFaEBSVWaj4;$80{#;b{i| DUMUaP delta 49 zcmeC_W9;c;c?m1m82HsCFbboSVWaj4;>u)~H;b{i| DTNV#^ diff --git a/env/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc index 1f9978b36e058ae264cd3c68c485b454e40723ea..0b365cbbff9235cde1855c1332548d66a439aac8 100644 GIT binary patch delta 47 zcmdnvy2q7!IWI340}vRynr`H-XBUl$&&(@HEy_#GiOI=NPAtjH&nu4EJfB@w8URez B4+;PP delta 47 zcmdnvy2q7!IWI340}wcL@NVR;XBX9v&&(@HEy_#G(a*_GPAtjH&nwp7JfB@w8URVd B4yynF diff --git a/env/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc index 34c6eb046a7b92ddc9ee13641be18328e980099e..dc4ae58e3be8e4cc1e5f4f251dbd6fa1e059016b 100644 GIT binary patch delta 47 zcmZ20zgC`mIWI340}vRynr`HlU>1#u&&(@HEy_#GiOI=NPAtjH&nu4EY{6X00{|@a B4if+X delta 47 zcmZ20zgC`mIWI340}wcL@NVRmU>4Pn&&(@HEy_#G(a*_GPAtjH&nwp7Y{6X00{|)E B4YU9N diff --git a/env/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc index cf7a5458b5a8c5288ee79b226c91c5f623d08f37..0abf23822bc677d3daa64c1f6a7000759826e004 100644 GIT binary patch delta 49 zcmbPgG}VZ2IWI340}y-1pq&&(@HEy_#GiOEeZNlZyBNsQUt&z!*p06?J* Avj6}9 delta 46 zcmew^{au=SIWI340}wcL@NVQTU>4Dj&&(@HEy_#G(a%jSNlZyBNz~um&z!*p06oAC AQ~&?~ diff --git a/env/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc index 9fbac8ee7d52c324f9462527e2b2820d7444de07..6bd95329dfc9ae279f4af93db10a0e77c6decb14 100644 GIT binary patch delta 51 zcmZo!$<(rviElYCFBbz4d=E2C%}w3Nx1UucCO$K-B(*3nF()QBwInemu_Q5O^F!9f FeE_Ma5@P@W delta 51 zcmZo!$<(rviElYCFBbz4ICSu)?oHarx1Uu+KRz?BB(*3nF-Jc)wInemu_RG{^F!9f FeE^dF5qtmu diff --git a/env/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc index 6008dc093a0cee10eb49a64adc8fb82d2d6be411..e8dd8d9a1788c290805e80e0f8c0e30aa9e5c1ea 100644 GIT binary patch delta 51 zcmaFT%=o04k#9LKFBbz4d=E2CwN~HAC&wZZ6Q7w^l3J9Pm=lwmT9TNOSdtjC*@0z= FEdZUf5YYet delta 51 zcmaFT%=o04k#9LKFBbz4ICSu)>Z)zzlVcIlkI&32NiE7t%+b$HElEsCEJ@Vg?7*_b F765yQ4~_r; diff --git a/env/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc index 703d2cd56967e0923f823f730464c92060e50cdd..031eaf0dc1c677e244f1fd9496a95261a549a0c8 100644 GIT binary patch delta 56 zcmaFQ^qz@#IWI340}y-|#LH52pz delta 56 zcmaFQ^qz@#IWI340}wcL@TO)@U=NBP;?s0AsQhU;qFB delta 58 zcmcbTcqNf{IWI340}wcL@TPKa3_MIWI340}vRynoi{2ClnK(nOBlpl$V$jlbfHCno}Gz@wOuX;(`q= delta 41 vcmbQkG>3_MIWI340}wcL@J{63C!`;rnOBlpl$V&JpPQeOnp3Pl@wOuX;F}E2 diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc index a07d2f76376f2ae935e75db49aace49a6652367f..e0da91ca4c98a41c084d83c352ee06f26dff0257 100644 GIT binary patch delta 44 ycmdlkuw8(AIWI340}vRynr`HlWfqEw&&(@HEy_#GiOJ1RNzEya*=)u9mjwU;iVZ~o delta 44 ycmdlkuw8(AIWI340}wcL@NVRmWfszp&&(@HEy_#G(a+6KNzEzN-)zPFmjwX+{tV^- diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc index 7a8025a05b4c2c04e046a755b9bc3282171939f2..575b705ca78397617698362c910b7d8ee7258a40 100644 GIT binary patch delta 44 ycmeB9=}zHZ&dbZi00hRarW?8EFbl=RXXcfp7Ud=8#N_6uq~;XIY~INnqz3>T2o4ee delta 44 ycmeB9=}zHZ&dbZi00a&lyc@aaFbnC&XXcfp7Ud=8=;!9Aq~;XsZ{Eoqqz3>Qiw&~? diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc index d3bd5e11a80e9158b28dc58811d0f369f77738d6..f2f2074fa7f44e128abaf2dc0114a1c1c93b5033 100644 GIT binary patch delta 44 ycmdn3vRj3FIWI340}vRynr`G4XBLWy&&(@HEy_#GiOJ1RNzEya*=)kh&JO?v-3)#J delta 44 ycmdn3vRj3FIWI340}wcL@NVQ5XBN_r&&(@HEy_#G(a+6KNzEzN-)zFn&JO?tU<@As diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc index d8860894895f4665d0e155512435b06408d8bac9..441947988cb1562443b1be9bbb24bc867838e70f 100644 GIT binary patch delta 44 ycmey$_mz)(IWI340}vRynr`IoXBLWy&&(@HEy_#GiOJ1RNzEya*}R7NBr^aasSa!a delta 44 ycmey$_mz)(IWI340}wcL@NVSpXBN_r&&(@HEy_#G(a+6KNzEzN-@JzTBr^aYEDj9- diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc index 75aa2971dbd4be317c789b3bd6ddace1579e11ed..3f52a45a0939486c9fabe1426347e2528f4d078f 100644 GIT binary patch delta 46 zcmeAX=@H>w&dbZi00iH|OjFY~@@g{)#l&akm82HsCFaEB=BK3Q6vu4#VmibQ04`q+ Ae*gdg delta 46 zcmeAX=@H>w&dbZi00a&lys3s8d9|5@^y4%0N>YpR5_9x(^HWlDiuE^pF&$zD01C|w A761SM diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc index 25272f8b0ba713cf03da3012b0773905f3cd676f..0d47d71b2a8b07ddf1b1acaea527ee01f9c4babf 100644 GIT binary patch delta 46 zcmex=pYi{FM(*Xjyj%=GVC-tTk=u_$C?-BLuOzi7FEJ-3H$Npcr#NPFHpi570BLd$ A+W-In delta 46 zcmex=pYi{FM(*Xjyj%=G;LyRlk=u_$NIyO^uOzi7FEK|yH$Npcr&xb;Hpi570A}?M Ad;kCd diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc index 0a7ccfc292f9218b449e80e100cac871a3bdc96b..3ef145ae51ead70e1357c39ff76a2b5ba6d41a47 100644 GIT binary patch delta 44 ycmey(`J0n_IWI340}vRynr`G~XBLWy&&(@HEy_#GiOJ1RNzEya*{s5Roe=;NGYx70 delta 44 ycmey(`J0n_IWI340}wcL@NVR0XBN_r&&(@HEy_#G(a+6KNzEzN->kxXoe=;Kwhapa diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc index 7fd7819754296c6bd52dd7a46563cb6bbf091d47..e60787e10432459e627dbdbd0c4c011e456ce286 100644 GIT binary patch delta 44 ycmX@7drp^oIWI340}vRynr`IQXA_Ev&&(@HEy_#GiOJ1RNzEya+3dsCBme*uP7P=P delta 44 ycmX@7drp^oIWI340}wcL@NVSRXA{zo&&(@HEy_#G(a+6KNzEzN-|WNIBme*r(G3Xz diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc index a0983cbfd8ca4c565c8879fe666e8fedd187fa6f..2503ee588e63c8dbb2bc7267bc64cbc54cf6027b 100644 GIT binary patch delta 44 ycmcb{e~q7eIWI340}vRynr`F{Wfh8v&&(@HEy_#GiOJ1RNzEya*<8e$!UO;jG!0q+ delta 44 ycmcb{e~q7eIWI340}wcL@NVP|Wfjto&&(@HEy_#G(a+6KNzEzN-(19+!UO;gw+#CL diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc index 005a462c23d9751f6fa4bf7983a32b35fee9af1c..190e1b5e2924ae6b9619c24af4fcaf7ea94b9b0a 100644 GIT binary patch delta 46 zcmZ3WxHq06L%! AX8-^I delta 46 zcmZ3WxR diff --git a/env/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc index de7bd8f3515dbd9dc52d7c91fbc0afb6fb1f962e..6f423e36f565e7c8fba286559986bf0d2794cd7b 100644 GIT binary patch delta 44 ycmbPlG~bAOIWI340}vRynr`G)W*3Ty&&(@HEy_#GiOJ1RNzEya+3di6Ul0HVmknG1 delta 44 ycmbPlG~bAOIWI340}wcL@NVQ*W*5?r&&(@HEy_#G(a+6KNzEzN-|WDCUl0HT8Vvma diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc index 9b3a83cac84484f9631fbfe3d0159f5d019ffe76..2cc4b49219b1d46ebf47bb9629b4989f1288f4b0 100644 GIT binary patch delta 42 wcmbQhG=YhGIWI340}vRynoi{2C>#@?nOBlpl$V$jlb2djo?nz5Gx5A50PBJcg8%>k delta 42 wcmbQhG=YhGIWI340}wcL@J{63D6Ai!nOBlpl$V&JpO;!vo?n!$Kk>XH0O@HBBme*a diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc index 7a04a07687d2e7401f598643ae16579cc5e6bfaf..a698f4c9b3f4753aa5528f5985e0707e30edb196 100644 GIT binary patch delta 47 zcmdnLn{oecM(*Xjyj%=GVC-tTk^2;ja7=t=UP)?EUSdv6UTR5seo=PJ<`*p2BLHTp B5WfHb delta 47 zcmdnLn{oecM(*Xjyj%=G;LyRlk^2;juzq}IUP)?EUSf`ZUTR5seo?mm<`*p2BLHLi B5MTfR diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc index a435634c600479cfe9163bd85cbbcefa515b14e3..19a7375aa8b8982e7b9d58ebae10825ff76993c2 100644 GIT binary patch delta 47 zcmX@Daax0SIWI340}y-%iq B5Jvz2 delta 47 zcmX@Daax0SIWI340}wcL@TMki69Lw}h5CA{k B4$c4o diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc index 9922ec3d1e4183244970188455c49f43c4cb0ba1..6907a0bd1d074035b946bc17771df198530d729b 100644 GIT binary patch delta 45 zcmezD_1TMiIWI340}vRynr`IQU=faq&&(@HEy_#GiOEYXDbFv;j@j(SqN@l1IHL|8 delta 45 zcmezD_1TMiIWI340}wcL@NVSRU=h}j&&(@HEy_#G(a%dQDbFv;*5B;LqN@l1HS`U? diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc index b235b46c03b355c7468e8b2a7d466f6899a02a15..c8dcc4c6492df08fdfd3daa579720ef5b221fa1c 100644 GIT binary patch delta 45 zcmaEv`ZAS!IWI340}vRynr`IwVHS>w&&(@HEy_#GiOEYXDbFv;j@g{WT(1uRLpBcP delta 45 zcmaEv`ZAS!IWI340}wcL@NVSxVHVbp&&(@HEy_#G(a%dQDbFv;*591PT(1uRK!*;8 diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc index ce513eff126100d77a10fcfa93709b50f509d541..7b0a138f503463cac418300f396a46290fb74732 100644 GIT binary patch delta 46 zcmX@IobkwVM(*Xjyj%=GVC-tTk$V}ta7=t=UP)?EUSdv6UTR5seo=PJ;v?)n08C8} AYybcN delta 46 zcmX@IobkwVM(*Xjyj%=G;LyRlk$V}tuzq}IUP)?EUSf`ZUTR5seo?mm;v?)n07?B1 A4FCWD diff --git a/env/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc index a6d014b0327db73f3cf15b7b7aab3dd035e38869..1b3467afb08b84e1f6b9c98376450a48fab118e3 100644 GIT binary patch delta 45 zcmew=^i_y^IWI340}vRynr`IgXAzEx&&(@HEy_#GiOEYXDbFv;j@his;=u|4BbE(+ delta 45 zcmew=^i_y^IWI340}wcL@NVShXA#zq&&(@HEy_#G(a%dQDbFv;*59nl;=u|4AmM!w~|yj%=G@IA~lb#?JZK5-7QnE1@RlGLKS#GIJ?g4CkKlFatPdE delta 53 zcmdmTi*d^>M!w~|yj%=G;LyRFdZb_@pE!q@etc$LNorAEVvc@(L26NANoIatvHoUj Hj-M$2%k~mF diff --git a/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc index 76445b49463652fc792b5b0bd948ec9c50a854a7..59d28c776f2705bcaf1ed8818fad23c2e9b5ce0b 100644 GIT binary patch delta 51 zcmcb?c!QC9IWI340}vRynoi`dl8K4W%qvMP%1g|N$uCGPN-W9D&nu2eD$UGEiJ7?2 F8~}+G5m5jD delta 51 zcmcb?c!QC9IWI340}wcL@J{5elF^UP%qvMP%1g}A&o4+VN-W9D&nwnXD$UGE(Vw`` F8~}rO5XArh diff --git a/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc index 23892ea21afcd460732ae1788808e5104cd2b8a7..ce8b0cb43556c2edd2a6a463e564e4cdad5999f5 100644 GIT binary patch delta 56 zcmX?Yf7+gRIWI340}y-DG&3h9 KX7e@{QE31mX%qbb delta 56 zcmX?Yf7+gRIWI340}wcL@TRJ60Fadt1^@s6 delta 54 zcmbO%G+BsyIWI340}wcL@NVShWtGv7&&(@HEy_#G(a$ePElMoO%+D*0E!3@dH?_b diff --git a/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc index ea557a85099aa380bc6689a6957aae961427a654..8af64f1f4f2772bb1e6976078d725748d3fb973c 100644 GIT binary patch delta 54 zcmeB{?Uv^7f0FiPKj{pDw delta 54 zcmeB{?Uv^7f0E*=h0{{R3 diff --git a/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc index d5a6dbdab76c970a15680d1aa6229d7f5015e0f1..da3666171581dacc6eb2b8c030183aa7bc3d9544 100644 GIT binary patch delta 54 zcmZ3;zmT7MIWI340}vRynr`Ht$RZOHpP5&ZT9lWV6O&(%T9jClnV(l2lT@0SlM=Ie I2g^$)0I9YTD*ylh delta 54 zcmZ3;zmT7MIWI340}wcL@NVRu$ReX3pP5&ZT9lWVqn}@pT9jClnV(mzpH!NelcK+Q I2g^$)0HY}pp8x;= diff --git a/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc index 67759de5a4fdeb77d644b8eb84b40eff5a756c50..975c8d267ed91c46ffa229d3c524fa41eab6b91d 100644 GIT binary patch delta 54 zcmcaBbXSObIWI340}vRynr`H7W0i@C&&(@HEy_#GiODZWElMoO%+D*1Nh;0ENr~CK ImURO&0Kvl&T>t<8 delta 54 zcmcaBbXSObIWI340}wcL@NVR8W0ld5&&(@HEy_#G(a$ePElMoO%+D*3_MIWI340}vRynoi{2Bo`B(nOBlpl$V$jlV6Zplvt9PpI01{nO9trn3EGT H@wOuXoy`(J delta 53 zcmbQkG>3_MIWI340}wcL@J{63B&Q#rnOBlpl$V&JpI?w#lvt9PpI5A(nO9trn3JPF H@wOuXmvRxb diff --git a/env/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc index cfbaf8a78e9fb6eb1a7b4150178deaf970d92d74..575190051846011d0ebca55014d71ee55cefc90d 100644 GIT binary patch delta 56 zcmbO#I8~5)IWI340}vRynr`IY&LS5RpP5&ZT9lWV6O&(%T9jClnV(l2lbKgsl9-bd Kv-ttbR%QUva}yf? delta 56 zcmbO#I8~5)IWI340}wcL@NVSZ&LXEDpP5&ZT9lWVqn}@pT9jClnV(mzpP5%&l9-dD Kzxe^nR%QUoC=!nV diff --git a/env/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc index ab09862720e0e0cd4a945f7579e05f97a7853177..e11c0db28c9e33d71173a30ebd0e3e4aeeeeec86 100644 GIT binary patch delta 61 zcmdnBi)q&`Ccfpoyj%=G@IA~l)jV$_pEsvmOnhcuNorAEVopqcL26NANoIataZF}j PaY delta 61 zcmdnBi)q&`Ccfpoyj%=G;LyRF8l1h6&zno_gk0bCOg AC;$Ke diff --git a/env/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc index df1ba5bd8f1cce837d60f41988c725ee3034c8a0..7c92abcc9cc4f0f999f73230d8e985832f4c63a4 100644 GIT binary patch delta 43 xcmaF7k@4|HM(*Xjyj%=GVC-tTk(-@^KPEmiuOzi7FEJ;kD77$Vvm(c#000~%4UPZ+ delta 43 xcmaF7k@4|HM(*Xjyj%=G;LyRlk(-@^Uq3!GuOzi7FEK~ID78?3vm(c#000_34KDxy diff --git a/env/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc index ec116801d65cd8630fa1b8034d77d2c324a80314..56a7e0d902be6e11d4ec5c0167f038de310b8df8 100644 GIT binary patch delta 46 zcmX@RlIiS9Ccfpoyj%=G@IA~lby>?szT*P?G4YvsC82Kc8{8$kHO34*K diff --git a/env/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc index b6523448688a7eb10fc55bfe4e38450d68578875..01dab663db6f23855fd75aa0abeace7bde13a0f4 100644 GIT binary patch delta 64 zcmeBp$k_3ak#9LKFBbz4d=E2Cb@AEAx0qEiCO$K-B(*3nF(;-dwKzYgv?Mb>55g=< O&B;uP*?ft0TNVJxrx*?Z delta 64 zcmeBp$k_3ak#9LKFBbz4ICSu)N_uVNTgSc_fm1IWI340}vRynr`I&#G)7zpP5&ZT9lWV6H}C0oS#!#l9`_eVV0%lWG2OI JmSbI}4ggBg6zc#0 delta 59 zcmX>Sc_fm1IWI340}wcL@NVS(#G2LnaRHp#|f5R3I diff --git a/env/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc index 7764067d3baa605e3f4e7e3848a6562a3e343ca2..beda1881f32ac6f8a576035ea654c6b4898ad5d2 100644 GIT binary patch delta 62 zcmbP`I3ba5IWI340}y-z>% diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc index 4cf1677498b6d9e0f242e2f79a271683251eb8cc..459429ab1b8da0002a32719465d78ff4039cda8e 100644 GIT binary patch delta 40 ucmX@hc$SfSIWI340}vRynoi`d5{!w@%qvMP%1g|NDJ{v&DUO*q%^U#UlMJQ+ delta 40 ucmX@hc$SfSIWI340}wcL@J{5e64Z~+%qvMP%1g}AFD=Q;Db}Aj%^U#S-V8?o diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc index 4087e51275c3d50da56b9596f4003597191a9204..f38cb08661369bbdd24a89b15a1a57dfe13a9297 100644 GIT binary patch delta 43 xcmZ3ex=@vSIWI340}vRynr`HlXBUi#&&(@HEy_#Gi773~%qfo9Y|Wm=4FL1k3~B%X delta 43 xcmZ3ex=@vSIWI340}wcL@NVRmXBX6u&&(@HEy_#G(Jw8@%qiC2Y|Wm=4FK_s3=04N diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc index 5ffdb3662defe2dc8918f01e0053c8d402c68508..1d9c5e31535d0be7102b6bafa61d2205a5f0bd9d 100644 GIT binary patch delta 43 xcmaFG|B9b`IWI340}vRynr`I2&LkKUpP5&ZT9lWV6H{7}nNu9I`7_gZ762ML4!{5a delta 43 xcmaFG|B9b`IWI340}wcL@NVS3&LpTGpP5&ZT9lWVqhDH*nNzI4`7_gZ762FT4q*TQ diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc index 173375154d470c792ac3d4e71932615775085b5d..5a8c617f127a7d92960c5029bb684b29029be61e 100644 GIT binary patch delta 43 xcmZn>X%XRG&dbZi00hRarW?8EG6}}SXXcfp7Ud=8#FUm~<`lX%XRG&dbZi00a&lyc@aaG70L(XXcfp7Ud=8=$Dpc<`nC1-pS<64gl~Q41xdv diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc index 7716ee403cde0dc4ac0cc1ce0ae1ea5ceae77127..505755d5d3fe09ed19cea0af34402d1c2770080c 100644 GIT binary patch delta 43 xcmaDL_&|_*IWI340}vRynr`GSU=oap&&(@HEy_#Gi773~%qfo9+`|;Y1^^1D4M6|^ delta 43 xcmaDL_&|_*IWI340}wcL@NVQTU=q}i&&(@HEy_#G(Jw8@%qiC2+`|;Y1^@_L4B`L) diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc index 318e2190af623631c07b11d509ab7e34936d71cf..58ddd18d69c0a43dfd9bffb2c421f9875f13ccc8 100644 GIT binary patch delta 43 xcmaE3^2UUFIWI340}vRynr`HN%q$oapP5&ZT9lWV6H{7}nNu9I`9E{67yu_R4zK_K delta 43 xcmaE3^2UUFIWI340}wcL@NVRO%q*xMpP5&ZT9lWVqhDH*nNzI4`9E{67yu;Z4p9IA diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc index 6c723ef4e0ca98a40759f270a441fc45d82f100c..5ac9ee0cddd4f9f9e0d15f1165dad3186232b1af 100644 GIT binary patch delta 43 xcmcbta#@9YIWI340}vRynr`IY$|M*QpP5&ZT9lWV6H{7}nNu9I`65#jKL8Z34h{eS delta 43 xcmcbta#@9YIWI340}wcL@NVSZ$|R^CpP5&ZT9lWVqhDH*nNzI4`65#jKL8SB4X*$I diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc index 55ef6a1f6d030c6e350db39b0841e07505132767..f84283d053edd374c3f0e9511298fec76db00867 100644 GIT binary patch delta 43 xcmbOrJ3*FvIWI340}vRynr`Gi&LS8SpP5&ZT9lWV6H{7}nNu9I`7z5{P5}P)4aWcg delta 43 xcmbOrJ3*FvIWI340}wcL@NVQj&LXHEpP5&ZT9lWVqhDH*nNzI4`7z5{P5}I?4QK!W diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc index bf24c41cb384587cdd55a50782373b86c3ac0288..b10e522f53ea877196bb8046182c224258f62c14 100644 GIT binary patch delta 43 xcmZ22xmuEYIWI340}vRynr`G4VHS*u&&(@HEy_#Gi773~%qfo9Y`|R22>|iL3|jyI delta 43 xcmZ22xmuEYIWI340}wcL@NVQ5VHVVn&&(@HEy_#G(Jw8@%qiC2Y`|R22>|bT3;X~8 diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc index 956e1056abbdb9700476b326cdf8ca7f73e194bd..420a3fffbf1232c55fd4f67f2f6d4d08698014ec 100644 GIT binary patch delta 43 xcmbOsG((7cIWI340}vRynr`Gi%_9jsIWI340}vRynr`Gi&mtHTpP5&ZT9lWV6H{7}nNu9I`87+dEC3!q4p{&I delta 43 xcmX@%a>9jsIWI340}wcL@NVQj&myQFpP5&ZT9lWVqhDH*nNzI4`87+dEC3ty4f+58 diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc index 7e4692147198fdf260f71e8cf7b4951ff4c082ce..dd0f021af8b06edabd15810064a8cf2d5aed1463 100644 GIT binary patch delta 45 zcmdnZwVR7~IWI340}y-I&*55pvc>yB;5r7SI diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc index 674926e92f6dd12ee3a38c5e965f4eeac7376d69..b0955a2e4a43d0e887cbaf224a2a87cc19af8feb 100644 GIT binary patch delta 46 zcmaD+@uGrnIWI340}y-K?w4uYgBTKRz?BB(*3nF-O0&Br~U2e{(;NWeWgc Cm=9S1 diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc index 82b7758a43fc433b96a3c7f7a88241f559a96dbe..88e1b1bb9989bc29140a5fd56f0fe225b158d818 100644 GIT binary patch delta 43 xcmZn^ZxrWV&dbZi00hRarW?7}GYQ7TXXcfp7Ud=8#FUm~<`lQpP5&ZT9lWV6H{7}nNu9I`8^9S8vq~v4g>%I delta 43 xcmew(`bU&|IWI340}wcL@NVS3%p#~CpP5&ZT9lWVqhDH*nNzI4`8^9S8vq@%4W$48 diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc index 8052bf7b963dacfecca8970dd3bd410ecf789c9c..64b8f0312ebf65ae4e5a2ff302f1762d03e77034 100644 GIT binary patch delta 43 xcmeBG>s8}k&dbZi00hRarW?6)xddb4GxJJPi}Dh4VoFOgbBbd&cXG9G008#+4FLcE delta 43 xcmeBG>s8}k&dbZi00a&lyc@Z5xdip&GxJJPi}Dh4^h--JbBgshcXG9G008u^459!4 diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc index 47b5509ec8db60a7531539a18c0990c53c50d0e8..02121279aeda7324e75a5202d9f2922f0e61f030 100644 GIT binary patch delta 46 zcmZ4OyV{p;IWI340}y-707$hD Ak^lez diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc index 6fe8297d17d5c38e892af8818924e3b44f368693..7559ce8f2afa21a8457f60118ed00dfa0b3fb439 100644 GIT binary patch delta 45 zcmZ1!xhRrvIWI340}y-I&*5548(yRdh71s>? diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc index 0883dfb6825bd061c4abaa43d5cb92a105ba91f8..ab29cabe143ad9a6cf3911176c07d0c2f25ee690 100644 GIT binary patch delta 43 xcmaEw@-&5eIWI340}vRynr`HdWf6>t&&(@HEy_#Gi773~%qfo9T*>lA7XT(l4vqi- delta 43 xcmaEw@-&5eIWI340}wcL@NVReWf9bm&&(@HEy_#G(Jw8@%qiC2T*>lA7XTyt4le)z diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc index c2df04ac4c6ffe1d99e3c373794b4b44973a01cf..f92fbad43eb4468fff5e5fd00bbf440cfd768a38 100644 GIT binary patch delta 43 xcmeAY?Goi)&dbZi00hRarW?5rG784TXXcfp7Ud=8#FUm~<`lG79R)XXcfp7Ud=8=$Dpc<`nC1zRS3l0|56U4LJY+ diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc index ded59c19fb8ff97ed849b6fdfece4061aad5c73b..84cf355e9cb5a77530929263f65d2580403389b8 100644 GIT binary patch delta 43 xcmcbpc2SLcIWI340}vRynr`Gi$RrpOpP5&ZT9lWV6H{7}nNu9I`7Tq5000&24jBLd delta 43 xcmcbpc2SLcIWI340}wcL@NVQj$RwyApP5&ZT9lWVqhDH*nNzI4`7Tq5000xA4Y~jT diff --git a/env/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc index af51f26e88d3bd1f07b3df2fab175b60037c6b54..b16027d6dcb27bf6427b806c8858e4680ba8525f 100644 GIT binary patch delta 43 xcmX?Ye%hRSIWI340}vRynr`I2$RZdMpP5&ZT9lWV6H{7}nNu9I`7O&mF#sG!4#NNd delta 43 xcmX?Ye%hRSIWI340}wcL@NVS3$Rem8pP5&ZT9lWVqhDH*nNzI4`7O&mF#s9+4rBlT diff --git a/env/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc index c1171d6e893e5906f3874d1039015a3cbffc81cc..afe51037975a1cf89af33e548373031b9dc152dc 100644 GIT binary patch delta 40 ucmZo*ZD8eI&dbZi00hRarW?7pGxEp8XXcfp7Ud=8#FQl$$4tJ+xE=t=T?|10 delta 40 ucmZo*ZD8eI&dbZi00a&lyc@ZrcMOxE=t;)eGVP diff --git a/env/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc index 7c38a2f6e7a5082fdb2c5733f3dff5faa128d9f0..17e6cf5cc2b8d05f6bacd706a52e859644c88db7 100644 GIT binary patch delta 41 vcmaE<`%;&CIWI340}vRynr`I2#>^iRpP5&ZT9lWV6H}I49JBcY^G_iF25Jr= delta 41 vcmaE<`%;&CIWI340}wcL@NVS3#>}rDpP5&ZT9lWVqhFR>tiSmK^G_iF1cMF2 diff --git a/env/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc index 1bfd5f097ccc5049389aab8858a93f96c613282a..3b23470b1b0fd8fd873ff236a62175db550fea58 100644 GIT binary patch delta 46 zcmbQaf^p^wM!w~|yj%=G@IA~l^^(U%J`q;_nE1@RlGLKS#GIJ2mkhO96A08#D_ AfdBvi delta 46 zcmbQaf^p^wM!w~|yj%=G;LyRFdcGQov!IWI340}y-GQov!IWI340}wcL@TS&?Y~*ue;n$DP%qvMP%1g}AFH0`g-<-^{Ru%vS0Sw&$ diff --git a/env/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc index 42ada17844172f78775d6a3daee15ce888b02f50..bc645539a39be17410977419442e537fceb9e2e3 100644 GIT binary patch delta 41 vcmbPGG@*!lIWI340}vRynr`F{VB?R8&&(@HEy_#Gi787ij@g{Ww#*0s@iYv; delta 41 vcmbPGG@*!lIWI340}wcL@NVP|VB^=1&&(@HEy_#G(JxCb*591Pw#*0s?@bJ0 diff --git a/env/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc index 23eb529cf9c6477d51572b0878788e63236d3327..16af9d32d98b51b7d5ede0c791ef9891aeed2cf6 100644 GIT binary patch delta 43 xcmZqu$=Ldnk$X8WFBbz47`vKoMtY{VK|4geKi4LSe- delta 43 xcmZqu$=Ldnk$X8WFBbz4ICSuCk@p@aXH0xqYFn&dbZi00iH|OjC_SHuCLa7K@25OU+BkFN#S{OwLG6&d)0;%Fl_}e2;m# FAOME55jy|? delta 51 zcmZqGZq?>n&dbZi00a&lys0aNH}dUb7SoR}OU+BkFVas=OwLG6&d)0;%Fof?e2;m# FAOLf$5Pbju diff --git a/env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc index 40fa0d7fa8acabb228a2125ad40f00be44b8a417..daf713e093edf480090c5b47f7f149c67b8c1b3a 100644 GIT binary patch delta 51 zcmX>udt8=pIWI340}y-udt8=pIWI340}wcL@TUG}-N^TaQA|I+EHy7BzeqnhF*zeOIX|zYC_hJkvjo$6 F9srd%5TO77 diff --git a/env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc index 08b220f7985b173aed90d24e9a9bedae73659d34..a09a49f1b6123a8a3ee662d08f2782f52f0a689c 100644 GIT binary patch delta 50 zcmeyu@r8qTIWI340}y-(^b delta 50 zcmX@XeuABMIWI340}wcL@TRhDh%n E09D2g&;S4c diff --git a/env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc index 2b66e15d4707b325f2fcbad68e4c2668050b1595..ec1a34d5a36bfb3bbdf0aa4fa1223996901a0c63 100644 GIT binary patch delta 56 zcmZ3+yo{N5IWI340}y-rb{} G%mM(z9}$EA diff --git a/env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc index 1718ba27cd51b88737a5335882b0faed97db327d..166c064bec74ebc442d4bbd954fe33d3a538a3ab 100644 GIT binary patch delta 58 zcmccWc-4__IWI340}y-md`y^kIWI340}y-md`y^kIWI340}wcL@TPKZEl1OO{!4n_a~ delta 43 xcmcc3beoBHIWI340}wcL@TSI1ojnLYqX;t!bs diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc index e4d151c9f1360a5703702365bcf1ee35cfb51d77..cb333561ae24cb866d965c5d71ddea8389245b1c 100644 GIT binary patch delta 43 xcmbQjJB62fIWI340}vRynr`HN$0QgNUzVDel3x^)oRL_Rl3Eh8nTxrL836f#46FbE delta 43 xcmbQjJB62fIWI340}wcL@NVRO$0Vp9UzVDel3%2soRL_Rl3Jp_nTxrL836X&3{3z4 diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc index 681a11690e6c8b2cd63e5243172302098955a176..098ad7d29d3a33966946b57dd71ffaa242fa8d7b 100644 GIT binary patch delta 43 xcmeB)=!xK7&dbZi00hRarW?7pu?oh-m!;;Vy+NCMIWI340}vRynr`HN!7LaPUzVDel3x^)oRL_Rl3Eh8nT2JIAOH*-4MqR} delta 43 xcmdm>y+NCMIWI340}wcL@NVRO!7QjBUzVDel3%2soRL_Rl3Jp_nT2JIAOHz=4Cep< diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc index c53b2887336bd1d04c28634c54c575c1d4c7af43..5a18be39ef7fe104749dae6b0bd1c0aa55900a17 100644 GIT binary patch delta 43 xcmZ21zgV7oIWI340}vRynr`Ht$}SiaUzVDel3x^)oRL_Rl3Eh8c_aHLb^!l$4Y2?K delta 43 xcmZ21zgV7oIWI340}wcL@NVRu$}XrMUzVDel3%2soRL_Rl3Jp_c_aHLb^!d(4N?FA diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc index d564e82d262c37a07e535607956afad640c2bb4b..c8b22b0aaa51f2cae145fc8dc416630b20733be2 100644 GIT binary patch delta 43 xcmdnbzMq|YIWI340}vRynr`G)V-k#sFH6l!$uEjY&PXguNiB)l?8H>d2mtcx3|0UD delta 43 xcmdnbzMq|YIWI340}wcL@NVQ*V-nPlFH6l!$uH7R&PXguNiEUe?8H>d2mtU!3-kbx4YPIWI340}vRynr`G?%_JBTUzVDel3x^)oRL_Rl3Eh8`8ZQG7XS$%4U+%> delta 43 xcmX>kbx4YPIWI340}wcL@NVQ@%_OKFUzVDel3%2soRL_Rl3Jp_`8ZQG7XSu)4Kx4% diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc index 85bfa240dd79ef0dad4c190f8a2f267ffe9f0380..0bc75cbd98ee45c100253d8a2481702bda3878c2 100644 GIT binary patch delta 43 xcmZ3dwoZ+EIWI340}vRynr`G4W*3Z!FH6l!$uEjY&PXguNiB)ltk3?R8vypQ4B`L) delta 43 xcmZ3dwoZ+EIWI340}wcL@NVQ5W*5|tFH6l!$uH7R&PXguNiEUetk3?R8vyhT41)jw diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc index 2c6421661265757a3b6e4424325a6784acb81300..a514824889f425d4a5d45812553ece0d5a159d37 100644 GIT binary patch delta 43 xcmaEv^fHNiIWI340}vRynr`H-R2GbhFH6l!$uEjY&PXguNiB)lJXQG$F90ip4yynF delta 43 xcmaEv^fHNiIWI340}wcL@NVR;R2I~aFH6l!$uH7R&PXguNiEUeJXQG$F90as4om<5 diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc index cbe50f36b9ee04fdb16bdc2defb390b124f6ec06..be54c6c2f06a72ec195dddfacc72b48d01e3bc29 100644 GIT binary patch delta 43 xcmZorZBXT2&dbZi00hRarW?60F$>1Tm!;;Vh94Uhl; delta 43 xcmZorZBXT2&dbZi00a&lyc@YMF$?O)m!;;VZC4KV-! diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc index b41b1c2b22ab51914d9a2ffbd8106c7bedc8a3ce..242f0c3f0cbeb5ecea6da40273ed9d4d8bff629c 100644 GIT binary patch delta 42 wcmdlJw>yUzVDel3%2soRL_Rl3Joa`GcMh02GW40RR91 diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc index 8b4c51007bd151f6ae55cf116906b4a5ec82e24e..447224955152af6072900154226def02821785e7 100644 GIT binary patch delta 43 xcmbQrJC&DvIWI340}vRynr`I&$RrpOUzVDel3x^)oRL_Rl3Eh8nU}eP836hy46*wmGQt-M(*Xjyj%=GVC-tTkvrT=Febh%H7_NwmGQt-M(*Xjyj%=G;LyRlkvrT=P(QvbH7_Nua9pRGzI!X^X diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc index 9931248d562201f2a74bff18928969400e4e3d4d..2b721ab82dfe3b07f61a74b2a5c9500e8b9fb239 100644 GIT binary patch delta 43 xcmbQuJDZn#IWI340}vRynr`I&$RrpOUzVDel3x^)oRL_Rl3Eh8nU}eb836n&48#Bc delta 43 xcmbQuJDZn#IWI340}wcL@NVS($RwyAUzVDel3%2soRL_Rl3Jp_nU}eb836f*3}pZS diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc index 90b4c3edc2d8acbb16e356f5cc82c463a5d11892..a01cfe00c49367ae2a20d09224dfbc763a9cf540 100644 GIT binary patch delta 45 zcmaF6lj-eFChq0Dyj%=GVC-tTk-N4-Febh%H7_Njt~(5SZxo! delta 45 zcmaF6lj-eFChq0Dyj%=G;LyRlk-N4-P(QvbH7_NvESuIZhNf;0- diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc index 00da15f41d12639b3d4eb366c425e6feb7fa9f67..fbcccb75ef00aab935fc390734f3fd4137757070 100644 GIT binary patch delta 45 zcmZ4Znq}c@7VhP|yj%=GVC-tTk^6a?U`%{jYF$=9v`08*w9 A-T(jq delta 45 zcmbRJk!AKr7VhP|yj%=G;LyRlk$YvbpniN=YFuJ$=9v`08jxC Ae*gdg diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc index ac939baad51fcaa05c0097d90c2c7260ae500a5a..066b9f69258caf57284001ff93304c71d3b3fb5f 100644 GIT binary patch delta 49 zcmX?ck?q7qHtyxTyj%=GVC-tTk-Mu^Febh%H7_N-J@>j7rJ? Dn?Mmz delta 49 zcmX?ck?q7qHtyxTyj%=G;LyRlk-Mu^P(QvbH7_N-J@>j7rJ? Dmmd)E diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc index 664a143f053a67d5b39a15780f4916a7c98c376f..0a277c81a78f6eae253c716b09b49fcde221783c 100644 GIT binary patch delta 45 zcmX^6iRJ7k7VhP|yj%=GVC-tTkvlp?Febh%H7_NuR$=9y{09Tq2 A!Ttq;Vdcub3_me diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc index 9b8bf772bd489b3de2f2fe27493fed0344f8d128..5a83a98f562a48d3342bda8f41ec2df4fbb1929e 100644 GIT binary patch delta 43 xcmeBV>ty3z&dbZi00hRarW?8UFbc-Rm!;;Vty3z&dbZi00a&lyc@aqFbe9&m!;;V delta 42 wcmZoRYBu6t&dbZi00a&lyc@ZnFbV3%m!;;V;M1& diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc index d8cb67f4dd6f4e7553365de29d53d9ad8259f4a7..b3e5743c16986db57af72e25d18c793164c41250 100644 GIT binary patch delta 43 xcmZn>ZxQES&dbZi00hRarW?80*ac(a%Tn`F@{3}UGZKqZQcGesE3qfB007})3$g$J delta 43 xcmZn>ZxQES&dbZi00a&lyc@aM*ah|D%Tn`F@{9D7GZKqZQcLtVE3qfB007>-3sV39 diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc index 06ea8783d042eea0e2c381926816902d1fd5459c..848459106492ce97461d511145d5d499605cb7e3 100644 GIT binary patch delta 43 xcmaE<`cjp9IWI340}vRynr`Gi$1E5VUzVDel3x^)oRL_Rl3Eh8`4#hjJ^&t(4#xlh delta 43 xcmaE<`cjp9IWI340}wcL@NVQj$1JEHUzVDel3%2soRL_Rl3Jp_`4#hjJ^&l+4rl-X diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc index 327a9d91daa3eb497554c16212c562bf825ac004..4a13410b6aad89112fda61027c49c478165ae841 100644 GIT binary patch delta 43 xcmdm*xHXY`IWI340}vRynr`G4;1Z09FH6l!$uEjY&PXguNiB)lti#o*1^^2j4GRDO delta 43 xcmdm*xHXY`IWI340}wcL@NVQ5;1bl2FH6l!$uH7R&PXguNiEUeti#o*1^@_m46FbE diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc index 4a75d28105ec15cccb9efdbcd792464c988b9dd2..8e084e25237db5800b53babf0dc8fbc297fccf35 100644 GIT binary patch delta 43 xcmcZ`bT^25IWI340}vRynr`IwXA_KxFH6l!$uEjY&PXguNiB)loXz%02>=@N4j2Fc delta 43 xcmcZ`bT^25IWI340}wcL@NVSxXA{(qFH6l!$uH7R&PXguNiEUeoXz%02>=*Q4Y>dS diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc index 8b18a46491158952cc01ef66f9c3d6b816366f51..2a5b27b9ad09a40274432d38cbc78f4279f39ddc 100644 GIT binary patch delta 43 xcmbOtJw=*(IWI340}vRynr`IQVit^vFH6l!$uEjY&PXguNiB)l?8fZJ1pw=C3=9AO delta 43 xcmbOtJw=*(IWI340}wcL@NVSRViweoFH6l!$uH7R&PXguNiEUe?8fZJ1pw&F3#|YE diff --git a/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc index 2e4f0894e4d8b96d11794a149c6f24cbdef2d8c1..c7ced830e4c7007c8a4a1f9ab78f49550f9bdf01 100644 GIT binary patch delta 42 wcmZo*X<*@A&dbZi00hRarW?5@Fbc-Rm!;;VK diff --git a/env/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc index 75059fe704bcf226bc8fea97379e672a11d1bab5..5e4e61da091a49f358eb5e926420974ae3c274ea 100644 GIT binary patch delta 45 zcmcaJgZa)3X71&@yj%=GVC-tTk^2azU`%{jYFF1 delta 45 zcmcaJgZa)3X71&@yj%=G;LyRlk^2azpniN=YFm~7M(*Xjyj%=GVC-tTk$WDCU`%{jYFm~7M(*Xjyj%=G;LyRlk$WDCpniN=YF{F^T^{@T3y H5%Vkn-S`xh delta 52 zcmZ4YlXcxsR_^7zyj%=G;LyRlk^45kpniN=YFae;$-IWI340}vRynr`G~XXcBEFH6l!$uEk@Ovy`(*{r~9zz6`&%?hjl delta 40 ucmcb>ae;$-IWI340}wcL@NVR0XXew7FH6l!$uH8+Ovy{s->krFzz6`$z6wnM diff --git a/env/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc index 4a1a22f373e842c491093e0ed553e5fb359cf5b8..6548b37221a525724bb3f34d191ceb28f0af6395 100644 GIT binary patch delta 42 wcmZpe!Pqc^k$X8WFBbz47`vKo)YXATM delta 42 wcmX@If$7KwChq0Dyj%=G;LyRlk$Yh(pMHEm#s&b>E(=ir delta 40 ucmZ20zE+%jIWI340}wcL@NVSJW98G2FH6l!$uH8+Ovy{s-`vis#s&b<9}4mS diff --git a/env/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc index adecc91d5c235b69e2dae0496894e6a0f8ce121c..7002a3b6c90d13e20bd1b37823a70b05da066d1c 100644 GIT binary patch delta 37 rcmaFB_<)gnIWI340}vRynoi{I<%@|gOU+BkFN(=b$xDoxxXcOwzzYkD delta 37 rcmaFB_<)gnIWI340}wcL@J{6J<Z!y&y3;J7%*ii^LWHJfaRO delta 45 zcmdn`fobapChq0Dyj%=G;LyRlk(-f4P(QvbH7_N delta 44 ycmeBR?O^3z&dbZi00a&lyc@ZHFbeC(m!;;VrWPADgpriTnx$p diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc index 25a0d9f938823dfce1515a8cd8bc7e626da7d25a..89483157c2b1ee5248ffe686a847805fd7fc8832 100644 GIT binary patch delta 44 ycmdnVvXg~-IWI340}vRynr`GSWfYEyFH6l!$uEj2NKDR7OwY_qkC{A~aTx#xk`1;1 delta 44 ycmdnVvXg~-IWI340}wcL@NVQTWfazrFH6l!$uH6`NKDR7OwY_q*PlF@aTx#u=nYo@ diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc index f428b3366d399e4f3a5d12253cdce014d6ed2281..5727c0f7238019f8f922ff37ab40f1c6cea09d2f 100644 GIT binary patch delta 45 zcmdm-zB!$HIWI340}vRynr`IgViAssFH6l!$uEj2NKDR7OwY_qkJ+rj(yb2wCv^?f delta 45 zcmdm-zB!$HIWI340}wcL@NVShViDGlFH6l!$uH6`NKDR7OwY_q*Wawc(yb2wBy0_J diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc index a2871e2992b5fe7b0b2ffe7ae707439d0f6f0e58..7b2e65973b11121e72a73f373383492cf721ca05 100644 GIT binary patch delta 45 zcmX?Xci4`5IWI340}vRynr`Gi$RZpQUzVDel3x^4keHmEn4X!J9<%vAONtZ#H1!VD delta 45 zcmX?Xci4`5IWI340}wcL@NVQj$ReyCUzVDel3%1>keHmEn4X!JuD|&{ONtZ#G3*X? diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc index c13befb8a4ac7bb6de904699e059e3a5ee83bd79..8b7d0c78c3d4866255f2a67c9463d4237b156aaa 100644 GIT binary patch delta 45 zcmaDY^IC>`IWI340}vRynr`IY$0!^VUzVDel3x^4keHmEn4X!J9<%ulV?Pf7Hr)>K delta 45 zcmaDY^IC>`IWI340}wcL@NVSZ$0)2HUzVDel3%1>keHmEn4X!JuD|&XV?Pf7Gt>@} diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc index 9a816ae704741d80e7d26c9eea382995f1c2e4ec..bf794297089dcf0e5e29e9e33efc897443924736 100644 GIT binary patch delta 47 zcmbQ-$T+!?k$X8WFBbz47`vKokeHmEn4X!JuD@A^EUI1k9 B5E}ph delta 47 zcmaF0jPcbnM(*Xjyj%=G;LyRlk-L*aSUEUI1a| B54->X diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc index 93290e55c6fdfd260ef2c8e0975d6ef246c8386c..0d1c753101ba62d4b03556210c6599792b6ca832 100644 GIT binary patch delta 45 zcmZ2zve1NkIWI340}vRynr`GaVit~xFH6l!$uEj2NKDR7OwY_qkJ%i+d{GPl6;Tbv delta 45 zcmZ2zve1NkIWI340}wcL@NVQbViwkqFH6l!$uH6`NKDR7OwY_q*WVn#d{GPl5=aeZ diff --git a/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc index c26aeba09871dbfd1e17efd32e72129be27c4071..ac554e4a2ed8682d43d7aee5644ba4031ccdebab 100644 GIT binary patch delta 47 zcmeylit*YbTEi}IWI340}vRynr`F{;t-38FH6l!$uEj2$Vn_o%P-1J$t)_4*<8$VP5}U5 C3J?ka delta 48 zcmX>YbTEi}IWI340}wcL@NVP|;tq delta 48 zcmeyJ^E-!oIWI340}wcL@NVQTXBX3tFH6l!$uH6`$Vn_o%P-1J$t)_?-#ml;u^s?` C5fHur diff --git a/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc index a393ec79ff04dd4b1ed56693244949cf7928d279..6ae23844d736307915e38d1fdd04255ccb72d129 100644 GIT binary patch delta 44 ycmew-`%jj8IWI340}vRynr`HFXBUczFH6l!$uEj2s7%jI%_}L6*_^^YiyZ(X$_@1srFH6l!$uEj2s7%jI%_}L6*{sSui34GkFH6l!$uH6`s7%jI%_}L^->k|!i3`2<0bo`T AYXATM delta 46 zcmX?gis{rTChq0Dyj%=G;LyRlk^4NWkbZnwYF`2<0bPF( A3;+NC diff --git a/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc index 403c96610a3c9f45bf1bb6cd6e802bfcffaa540d..caa3f3682fea09d630d823c87aaa8814eddab50a 100644 GIT binary patch delta 44 ycmX@adx)2NIWI340}vRynr`Gi&mP??^anpaY+zxfT*HD&-8V-8dR diff --git a/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc index 3ff893fb03e6521f2a69ff8c8c5877c42e3ea996..916d3e2cd6e931610296bee12d3f5035b887b78e 100644 GIT binary patch delta 44 ycmbO)J71Q2IWI340}vRynr`HFWEYBwFH6l!$uEj2s7%jI%_}L6*&N62$PNGkdJO6S delta 44 ycmbO)J71Q2IWI340}wcL@NVRGWEawpFH6l!$uH6`s7%jI%_}L^-yFy8$PNJilnjdi diff --git a/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc index e1813fc6169c88b981781ac330f552a6154b96b2..0d0e1e5b061ebeba85582b39e4993dd12e297104 100644 GIT binary patch delta 44 ycmZ3hzE+)kIWI340}vRynr`GaW)_NxFH6l!$uEj2s7%jI%_}L6*&M(eD*ylpqYWDX delta 44 ycmZ3hzE+)kIWI340}wcL@NVQbW){+qFH6l!$uH6`s7%jI%_}L^-yFakD*ylm%nZB$ diff --git a/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc index f2574d2001461f3087904803e48645a2671fbda4..72ecea87af095b3ab2381f290e70b7893432a898 100644 GIT binary patch delta 44 ycmZp-YPaHE&dbZi00hRarW?6ma0$i4m!;;VP??^anpaY+zj+hOJPQCh3=Y=- diff --git a/env/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc index 434ddffcadeb9bcb2af3de61742102524404f6af..580c03d9e7cd41c2642219d1fafe656c0b55dfe3 100644 GIT binary patch delta 54 zcmZ3#lWF}0|3}o6QTeB delta 54 zcmZ3#lWF}0|3!^6BYmf diff --git a/env/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc index 269701df5797ef1c6bf9cae229201e8644961cfd..ba33a489dbcf6e46035727505be26b969e5df45c 100644 GIT binary patch delta 51 zcmaD{|G1ueIWI340}vRynr`IoW0j1FFH6l!$uEj2s7%jI%_}L6$w{q9Eh>)LyouG& F3IMsd5$pf} delta 51 zcmaD{|G1ueIWI340}wcL@NVSpW0lm8FH6l!$uH6`s7%jI%_}L^&q=LFEh^UEyouG& F3IMY@5nuoS diff --git a/env/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc index 4848df3fe6f7f74c78e07a22b58c9cdf1c37d172..3b531e0937abc143303752309160ff9e7a0b1ec6 100644 GIT binary patch delta 53 zcmbRHi+S!ZX71&@yj%=GVC-tTk^9Fr$(Z=E)V!4ZqL_lp^xV|ElH!=0)QZ%i;+V}c H*BR9S`q~qZ delta 53 zcmbRHi+S!ZX71&@yj%=G;LyRlk^9FrN&Wb;)V!4ZBK?BO^xV|El4AXw)QZ%iV*SlB H*BR9S^js4I diff --git a/env/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc index 0ddb270d066978a00809815b535b8dd73fb01018..3e528c712e579a89bc02f4eb2a21c2fcc0c919f5 100644 GIT binary patch delta 51 zcmX@7a!!SNIWI340}vRynr`II;*pGrFH6l!$uEj2s7%jI%_}L6DK4qZNiB}q+{bf( F6#$Gf5j_9^ delta 51 zcmX@7a!!SNIWI340}wcL@NVSJ;*r#kFH6l!$uH6`s7%jI%_}L^FD|LfNiEjj+{bf( F6##{_5U~IN diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc index 95952f7b0aba8a575e76850a4c47d67b46dabca5..3fa1c02417223523adc82e6b77f2488571c9b69d 100644 GIT binary patch delta 45 zcmZ4Ou-bupIWI340}vRynr`IY&nFxcUzVDel3x^4P+5>zRGgWY9<%u_pPwKAFvJeg delta 45 zcmZ4Ou-bupIWI340}wcL@NVSZ&nK)OUzVDel3%1>P+5>zRGgWYuD|&%pPwKAExQhK diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc index 7f37421c563c27ee7809194568820e8b09ab9861..678e2b30e94f68e591492f496581c8293b84cf4a 100644 GIT binary patch delta 45 zcmZ4HzRaC_IWI340}vRynr`G)WEPHzFH6l!$uEj2s4Pe9YzhS delta 45 zcmZ4HzRaC_IWI340}wcL@NVQ*WER$sFH6l!$uH6`s4Pe8a)k6 diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc index de88f66157a6a6fefc333c747195e49bf74d8857..a44b80ed1a6ea2cead3c75c728b0ae044147a52d 100644 GIT binary patch delta 44 ycmbPPGP8txIWI340}vRynr`I&EiN1rUzVDel3x^4P+5>zRGgWY9P+5>zRGgWYuD@7PLJ0saq7C!_ diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc index 6b680107593247f4c928c71c5b583694bf5cf000..fbcb77a0a095880586e47e8f47553cf1be274604 100644 GIT binary patch delta 75 zcmbQ%A~dZY`&n#lPAYa4`Wf^Y#T?EM?^Yf_fP4 delta 75 zcmbQ%A~dZY`&n#kblQa4`Wf^Y#T?EM?^Ya7`Fb diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc index 617aba35fb51915ef6d5e864b299e37f7f3c95f6..882bc2176f2408b05b9d3c094b52bfb9c6e408ed 100644 GIT binary patch delta 45 zcmbQ3Ju#bmIWI340}vRynr`G?!z3INUzVDel3x^4P+5>zRGgWY9<%ur({UpJGq4X& delta 45 zcmbQ3Ju#bmIWI340}wcL@NVQ@!z8R9UzVDel3%1>P+5>zRGgWYuD|&d({UpJFsBai diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc index a8d1867a78c8b7cbadbfb42ba12df778d78cf8cc..2b8c4caced1d6504c7a4fcaee7779a93e847ccfd 100644 GIT binary patch delta 47 zcmeyejQPtlX71&@yj%=GVC-tTkvmgJI3~U|w< diff --git a/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc index 8a5e452710c95fd43f4428a73b25d2c32601937a..690047f0b1abd3ece06fa276a4efbc1d4966fa12 100644 GIT binary patch delta 47 zcmdlpgK^IcM(*Xjyj%=GVC-tTk^4NGa7=tzYFP+3rvpOu+?%Lf1hGYl;N diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc index b35e158394c1506b8933b4a5b3b980d3795c7d93..44abe776f8aa754bdc00ca697a2b826cb856aa46 100644 GIT binary patch delta 43 xcmcb}a*>65IWI340}vRynr`Gi%_tNTUzVDel3x^4lv-GtT3k{bGx-H$CIAd74k`cu delta 43 xcmcb}a*>65IWI340}wcL@NVQj%_yWFUzVDel3%1>lv-GtT3k}BKlue?CIAVt4a)!k diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc index eadf11fbccc860db501ff52da931768db6d03343..a16bd0a2869ef131e63031929d8e6f9142bb4d24 100644 GIT binary patch delta 44 ycmaDW@K%6(IWI340}vRynr`I2%q$cWUzVDel3x^4lv-GtT3k{bv-tyaEeilCpbo|W delta 44 ycmaDW@K%6(IWI340}wcL@NVS3%q*lIUzVDel3%1>lv-GtT3k}Bzxe}mEeil9$qr`# diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc index b1d4f0d12c8258144b9d1ad7d8477f6ad1cf1b0e..0c09b90cac9cc7d1799c90e80481b7d166d37aa3 100644 GIT binary patch delta 46 zcmZ3rm2uTpM(*Xjyj%=GVC-tTk^3U6P)vMTYF)%n$%5=?<0v delta 44 ycmZ2mw6=(QIWI340}wcL@NVSJVi(enFH6l!$uH6`N-Zo+EiNh6-`vi=%n$%35)L;2 diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc index fa5b0b8dda80b172100d5ab9cf96b60a7730fcab..9672c5d60a5babdc49daf9a579f2e50055f1a126 100644 GIT binary patch delta 44 ycmcc1ewUqlIWI340}vRynr`G?%p?>OUzVDel3x^4lv-GtT3k{bv-tp%EF%CK%?-~0 delta 44 ycmcc1ewUqlIWI340}wcL@NVQ@%p{~AUzVDel3%1>lv-GtT3k}Bzxe=@EF%CH_6=|V diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc index 07ec4f6c2270c203aaea1994bc90f542539c53d1..82c6c77e70bb551f47987952933d76c23a6490fe 100644 GIT binary patch delta 44 ycmbQvH=U1rIWI340}vRynr`IgXBCQxFH6l!$uEj2N-Zo+EiNgJ*{s9*nh^l@9t`~e delta 44 ycmbQvH=U1rIWI340}wcL@NVShXBEk#>nh^l=M+}|- diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc index a737490a1932dff1cfd7a864eff6a39cab66c18d..df69036e6cbc6b850ef3f7473b1647258e0c3483 100644 GIT binary patch delta 46 zcmaERnepvqM(*Xjyj%=GVC-tTkz0^WC?>uvH7_Nlv-GtT3k}Bzxg>M6EgrH=ncOB diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc index 4ac78939381d86716c280fcfbe72668cfb4928f0..4dbfdaca9f7fdc31b20e226afddca9d2c6c95462 100644 GIT binary patch delta 46 zcmZo!&(yM>iF-LOFBbz47`vKoiF-LOFBbz4ICSuC diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc index 1ec5933c9002e17274a4d9bfa9df3ee7828716f3..2c852fb1a4607aece9603a78034d265b36b79fe7 100644 GIT binary patch delta 44 ycmaE2@Wg<7IWI340}vRynr`H_6%dMvFH6l!$uEj2N-Zo+EiNgJ*&HRn#Q^{y5Djwx delta 44 ycmaE2@Wg<7IWI340}wcL@NVR`6%f*oFH6l!$uH6`N-Zo+EiNh6-y9{t#Q^{vISmv5 diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc index 6c2430441ee0a602fe12ca243d2242af4f3c09ea..59f81d7574c9740b3a86e89c850844db0f33eaca 100644 GIT binary patch delta 44 ycmca=aMgf&IWI340}vRynr`IwWD|;sFH6l!$uEj2N-Zo+EiNgJ*__7qUJw8sDGo;f delta 44 ycmca=aMgf&IWI340}wcL@NVSxWE0YlFH6l!$uH6`N-Zo+EiNh6-<-zwUJw8pQVr+; diff --git a/env/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc index 3e46ff76968e40fd24cb30834fb59d7b30fc21f5..84adfd311faea44fbf9784de8b129df6581ba9c1 100644 GIT binary patch delta 46 zcmX@Ui|P0-Chq0Dyj%=GVC-tTk=ubwC?>uvH7_NV!Z diff --git a/env/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc index 8c4501c35da704db544a8c06cdce71069f600bcc..a5b002863bee977f41946f6a79b281c8d7e87d30 100644 GIT binary patch delta 46 zcmbOwHcO0qIWI340}vRynr`Ht!6*_FUzVDel3x^4lvOnG~~mJ7Y2@03_WG ATmS$7 delta 46 zcmbOwHcO0qIWI340}wcL@NVRu!6>31UzVDel3%1>lvOnWVpYJ7Y2@03o6c A{Qv*} diff --git a/env/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc index 9a537f6e803763b7f2921b52ea1c62db3164de5a..32c411a6c9c6a5fbbb7c3ee4a5d5c5db3820a507 100644 GIT binary patch delta 48 zcmdn>gmKpsM(*Xjyj%=GVC-tTk^366NKAZLYFgmKpsM(*Xjyj%=G;LyRlk^366h<^p084NW A3;+NC delta 46 zcmcZ}c|DSQIWI340}wcL@NVSJU=q=fFH6l!$uH6`N-fUMDND`COw!-n&J>^p07x|s AtpET3 diff --git a/env/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc index eb17ea1b54903c187aae16a1c55a4b705753e351..ffb080a4a28c3e3f32d34d6b01aee474a353d11d 100644 GIT binary patch delta 50 zcmcc4c%6}ZIWI340}vRynoi`dl8%WlOU+BkFN!HjEzZv=OU=nlib>ATEl4bhnYh3l E0C%MjCFH6l!$uH6`N-fUMDND`COwv!z&n-wS(Vy(d GxDo({0}xvP diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc index e92741155658a243e3b7c6c1fb8bda5f001bddaf..12a388ccd052c0576388dc1cda1e47efa0c77982 100644 GIT binary patch delta 40 ucmX?ab>515IWI340}vRynr`I&#lja8UzVDel3x^4l$o3nvsswcMgjoxuM8vr delta 40 ucmX?ab>515IWI340}wcL@NVS(#loi_UzVDel3%1>l$o5Nzgd{oMgjovpbNzS diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc index e58390fba48f915421102b6bd9f33cf54d9e0bd2..5d7dbea1cd2ac1904fa37ef4da4c20d422aa4a29 100644 GIT binary patch delta 39 tcmZ2vyU3P%IWI340}vRynr`HFkmHMqFH6l!$uEj2%1q9PnH(wS2>{Jx3uFKQ delta 39 tcmZ2vyU3P%IWI340}wcL@NVRGkmJ*jFH6l!$uH6`%1qACpByRY2>{Eq3k3iG diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc index e507b34b2f968a19481164880f114ec173a0def3..57287f447dd805e2e9e8b046c540ac40c1b0064a 100644 GIT binary patch delta 49 zcmbPumuKQ#9`5D5yj%=GVC-tz$lc1#xRsm9&xtQ4zAQB_CBG=9C^I=DW_!95lhzvm DTZ<1A delta 49 zcmbPumuKQ#9`5D5yj%=G;LyR_$lc1#xRsm9&xubzzAQB_CBI0&C^I=je|x$Ulhzvm DS`7}h diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc index 35c05199a129a36a0615d5d38b76965dea0037d7..1b9364b7143635ebaf7c5faeabf69ceacfe9b548 100644 GIT binary patch delta 40 ucmbQrKb4<*IWI340}vRynr`G4W#Nm7FH6l!$uEj2%1q9P*{sKs&I|y-I|`)$ delta 40 ucmbQrKb4<*IWI340}wcL@NVQ5W#QA0FH6l!$uH6`%1qAC->k=y&I|y*EDA;d diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc index cf2ca8884a27216dd92b2ed684e4ae64726b1f50..09ac00d2e4fa495e780bb3a72b80df6b21495df0 100644 GIT binary patch delta 39 tcmbOuG)IVgIWI340}vRynr`G?&A}HFUzVDel3x^4l$o3nGx-Qd1OUfj3%dXS delta 39 tcmbOuG)IVgIWI340}wcL@NVQ@&B3Q1UzVDel3%1>l$o5NKlunp1OUac3tRvI diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc index 9277d0c4db46caa480cb9c246df73a6d02c59bc6..ea809d56d8c22ea28b800b281dbb3fd64d1f49a5 100644 GIT binary patch delta 39 tcmZo-ZDQqK&dbZi00hRarW?5n8Tn%3%Tn`F@{3}MGLti6CU-IZ006dq3yS~% delta 39 tcmZo-ZDQqK&dbZi00a&lyc@X-8Ts_%%Tn`F@{9C~GLtj(CwDRa006Yj3oHNt diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc index a3d2e9d7f2ca82af5e34e7852ee5cca226c53f60..a49da900837e0f3a12029c8fe482654b8dd8b456 100644 GIT binary patch delta 40 ucmcb?euJHRIWI340}vRynr`H-W#Ws8FH6l!$uEj2%1q9P**uNOi4g$ZSqs1b delta 40 ucmcb?euJHRIWI340}wcL@NVR;W#ZG1FH6l!$uH6`%1qAC-#m@Ui4g$XN(*5C diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc index 558d0f47a5b731c1eea9b3d21e56c919de6f85bd..09d29aa23f0c1a477b8e63583e0275149fcca3a3 100644 GIT binary patch delta 40 ucmZ3Xxla7uuCIWI340}vRynr`Ht%fuHGUzVDel3x^4l$o3nvw0iS6jlJ=sSHd2 delta 40 ucmX>la7uuCIWI340}wcL@NVRu%fzQ2UzVDel3%1>l$o5Nzj+(e6jlJ;nhWg! diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc index 9eb8ca33bcbe023b78f7da75e924b184d450964e..d77f3a0a7fcf4543515d0b2300495d81d4b1437e 100644 GIT binary patch delta 40 ucmcbra8-eOIWI340}vRynr`IgWaf*BFH6l!$uEj2%1q9P*{sBD%nJb684Cjd delta 40 ucmcbra8-eOIWI340}wcL@NVShWaiV4FH6l!$uH6`%1qAC->k%J%nJb43JRnE diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc index 967d82007dbed53a5dd6617c2e8e09c5b3dd7bd9..672415cf0effa88be14e7dcf0f6a526105903bf1 100644 GIT binary patch delta 39 tcmeCu?9$|3&dbZi00hRarW?8U3G>Com!;;V834<~3|s&J delta 39 tcmeCu?9$|3&dbZi00a&lyc@aq3G?a4m!;;VP^$ZXI diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc index 6211195eb5acc1d81b34b6132248efcfbeee40ed..d252c1dc68477f67761019c1e9636f84cc8a851f 100644 GIT binary patch delta 42 wcmaF#n(@(VM(*Xjyj%=GVC-tTky}@UFDAY$H7_N-3PR|^*a delta 40 ucmbO#HdTy!IWI340}wcL@NVS(&cvr5UzVDel3%1>l$o5Nzgd8pl>-3NND8Y#0~)EhYSb+ delta 40 ucmaDU`cjm8IWI340}wcL@NVSJW9HM3FH6l!$uH6`%1qAC-`vie#0~)Ccnhfj diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc index 13f35cdb273e2a3c5a2878f0263590b6fc78fbbe..fdf5fc734c15bbb52f6bb2c8a09621b7314ae43f 100644 GIT binary patch delta 40 ucmeC<@8joQ&dbZi00hRarW?6=SomV%%Tn`F@{3}MGLti6HmkB^G6Mjl$o5Nzj;6RQw;#_`3&m- diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc index 4eb766827c083e06eaa26b39dda8262790e77c82..770032099b131794f2d955a190d8ab237da8a13e 100644 GIT binary patch delta 40 ucmeAU>JH*w&dbZi00hRarW?6=+4y4O%Tn`F@{3}MGLti6Hmk8cRRRFgjti&& delta 40 ucmeAU>JH*w&dbZi00a&lyc@ZB+4%J1%Tn`F@{9C~GLtj(H>dMuTDIWI340}vRynr`I2!pj#EUzVDel3x^4l$o3nv-vIWO%(wC^bOVk delta 40 ucmX?>dMuTDIWI340}wcL@NVS3!po;0UzVDel3%1>l$o5NzxgfiO%(wAk~IUjzW*-3x^P diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc index 2f77b420d549e4f8247f5bae52dac1f46f187c2e..bdcf12288467b3d339ab8142e6fad51b14262748 100644 GIT binary patch delta 42 wcmZ2-lX1ySM(*Xjyj%=GVC-tTkvo%*FDAY$H7_NmFH6l!$uEj2%1q9P*{sY}B@Y1Cj|*Y| delta 40 ucmbOmJU5toIWI340}wcL@NVSh;^NbfFH6l!$uH6`%1qAC->l44B@Y1AfC~cv diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc index bb6c34fed40213b3f92ea6aef408c54436c7aaa2..baf08034d56121fddea51a14faadbea7ae1fcb01 100644 GIT binary patch delta 54 zcmaEJjQ!0qcJAf8yj%=GVC-tTk$WyLUrc;iYFl$o5Nzj-Tjml^=>dkl5} diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc index 177b666e5aed17ac5c886f29b1742558f7a25f27..5373e3e4f20e454c7fec43dafc60fa66728f4729 100644 GIT binary patch delta 40 ucmZpQZHnby&dbZi00hRarW?86v+%{lm!;;V*w delta 40 ucmX@EdR&!zIWI340}wcL@NVQj$IPc6UzVDel3%1>l$o5Nzxg@y13m!gpA5l$o5Nzgd)tmmL7shYHyM diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc index 91207fce17c8322479c7ea2e6170ed5294a25fd4..9f41e73861b306ede44535f85878a4f788b7b7a9 100644 GIT binary patch delta 40 ucmX>le@dQvIWI340}vRynr`G)W9EyAFH6l!$uEj2%1q9P*=*0;%>w|~6bpO+ delta 40 ucmX>le@dQvIWI340}wcL@NVQ*W9HM3FH6l!$uH6`%1qAC-)zs^%>w||1q&Sj diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc index 22539df05161ae1ae58a942e52563d5b018db6ab..a6caa0756ab9f2339d10df6e727ec3a35a67f234 100644 GIT binary patch delta 40 ucmaDS`A(91IWI340}vRynr`IgV&#j8FH6l!$uEj2%1q9P*{sZZnjHY&7Yn}t delta 40 ucmaDS`A(91IWI340}wcL@NVShV&&71FH6l!$uH6`%1qAC->l4fnjHY$2n%2U diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc index a0793f55599b7178dc4526f515e4cf41eab81ed8..213924a58b72cb0b7aa2ce69e3202fd3ef9bd90a 100644 GIT binary patch delta 40 ucmewo`X!WmIWI340}vRynr`GaVdIO5FH6l!$uEj2%1q9P+3d@NVnC&dbZi00hRarW?68GV{g6m!;;VNVnC&dbZi00a&lyc@YUGV|%jm!;;Vl$o5Nzxk>74Fv%G(G7e6 diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc index 5b87cf343bcbccd2dfbba511c01513348fed783f..341055169917ee7f0786cb8d85405d4281955527 100644 GIT binary patch delta 40 ucmX>fcs`JOIWI340}vRynr`G)X61{CFH6l!$uEj2%1q9P*=)l)Ss4K6dkhBv delta 40 ucmX>fcs`JOIWI340}wcL@NVQ*X64h5FH6l!$uH6`%1qAC-)zG=Ss4K4YzwFW diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc index a60ad1e5cfc74ad888adc0eb1582ce2a700d12fa..d624e58c2c61b72fec6aff5666131568c4ea5d5f 100644 GIT binary patch delta 40 ucmexh@xg+7IWI340}vRynr`Htz|0pDUzVDel3x^4l$o3nvw0=+aR~tSTn!cg delta 40 ucmexh@xg+7IWI340}wcL@NVRuz|5x~UzVDel3%1>l$o5Nzj-C|aR~tQO$@gH diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc index 33e7be462a44fcd7c126458bef9eca75b3c2bc90..043215556b285629302ea12960e64bc408fd489c 100644 GIT binary patch delta 40 ucmX?Mb;62!IWI340}vRynr`Ht&BhlKUzVDel3x^4l$o3nvv~{K6fpqn!VIwh delta 40 ucmX?Mb;62!IWI340}wcL@NVRu&Bmu6UzVDel3%1>l$o5Nzj+JW6fpqlvkX!I diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc index bd4b961fe051b68b52aab51fc687a461ce497695..b9b87f8b251a707c6abaad5a5e2da9d073afe79d 100644 GIT binary patch delta 40 ucmX>ncutUeIWI340}vRynr`I2%ET8FUzVDel3x^4l$o3nv-us<16Ba%bqx{# delta 40 ucmX>ncutUeIWI340}wcL@NVS3%EYH1UzVDel3%1>l$o5Nzxf^016Ba#W(>0c diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc index 0ad17827595a6e0205c25a873d4596e57070813d..48a37e1c302c9e052edc6c6653f96717d9ab949c 100644 GIT binary patch delta 40 ucmaE?_gIg6IWI340}vRynr`G)VCIX7FH6l!$uEj2%1q9P*=)(IB?18A&~Lw~a*x0NB+Eyn6wjI~uv Q)wPo++RAUPu{l`)07~@~WdHyG diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc index 7ea1b9d14a40d61209dc2cdf09fd93b1839cef57..1954ff67451f9cfac5f556565d21e650b6699e4c 100644 GIT binary patch delta 46 zcmdnr%DTUmm3uiaFBbz47`vKokZ>x&dbZi00hRarW?7BbMeK*m!;;VkZ>x&dbZi00a&lyc@ZXbMfiNm!;;Vl$o5NKY0V=8vwuw3!nf1 diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc index 4ea646b56ff3bb06ee5e9779e305399da78028a4..ddd7c91811be7e4f31bf090ef46266690f1c7a19 100644 GIT binary patch delta 40 ucmca?ec76OIWI340}vRynr`F{W#fy9FH6l!$uEj2%1q9P*__9gDh>eW?+gzB delta 40 ucmca?ec76OIWI340}wcL@NVP|W#iM2FH6l!$uH6`%1qAC-<-#mDh>eU;0v$- diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc index 51b3676bd7be8f87ff9615dd98f8142eddefdd39..12d0c957367b832b8c56c6f62bd4550b5fd7a03f 100644 GIT binary patch delta 40 ucmeBB>QLfd&dbZi00hRarW?5*aqz{&m!;;VQLfd&dbZi00a&lyc@Y6aq#KKm!;;Vl$o5Nzxf&SPc{JSKMd&r diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc index c122e06ff12187f36c79d7ac769871766b98d9d7..2d2d06ece4dbc35ed3f2818730c4d989ddb520d9 100644 GIT binary patch delta 42 wcmezSjq&d{M(*Xjyj%=GVC-tTkz0#{FDAY$H7_N1qgFH6l!$uH6`%1qAC-(1I$Ed&7UqYL!_ diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc index d1cb7fcc7744891734f71732f91854606b298dd7..dd5dd42dd7fda0bde7f4354b9265a778f7ff4ab2 100644 GIT binary patch delta 42 wcmZpl%+x-aiF-LOFBbz47`vKoE(~Y@ delta 40 ucmbPeInk1PIWI340}wcL@NVR;X64h5FH6l!$uH6`%1qAC-#mr&uNVN<9}Ecq diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc index 1c8aed4661587e598c59d1adc35d9ba4eeb8742c..7e6b03f3a6e80a3962df76e91773c13540e9a129 100644 GIT binary patch delta 38 scmaFE^oEIhIWI340}vRynoi_?&leM4mYSE6Uldc6nVb delta 38 scmaFE^oEIhIWI340}wcL@J{4@&!-<>mYSE6U!-4@nVg|NnS(I}0MnccK>z>% diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc index b1aced01c44ae8569456e6d7968950027dc61589..3603699b67df5438d5d6eb2020b078792d662b8b 100644 GIT binary patch delta 42 wcmbQx$26gjiF-LOFBbz47`vKouvH7_Nk;sDF6T#K@7$K diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc index 8cd7fd15075a130bebbe6eb1bf4132dbf60ea912..1de8a0c897f618686b5cb118bde8dd5449fc1e90 100644 GIT binary patch delta 44 ycmeAc=@#K$&dbZi00hRarW?5(nS^5E%Tn`F@{3|hQu7j%GfOICHpeloWd{KF_ze62 delta 44 ycmeAc=@#K$&dbZi00a&lyc@Y4nS}J?%Tn`F@{9CKQu7j%GfOJmfE552E)7%w diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc index 35e4d7bef7a0acbc82b0b0527aa2f6247a2bb085..30c9acb8c5de389f0a77d7b5ce1a13296b798a08 100644 GIT binary patch delta 44 ycmX@WbAX3?IWI340}vRynr`GSVibyrFH6l!$uEj2NzF@4&Mc{n+1$^#kp%z@+zqz? delta 44 ycmX@WbAX3?IWI340}wcL@NVQTVieMkFH6l!$uH6`NzF@4&Mc|a-`vl*kp%z>1r1mL diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc index 0347d8b8c3b9ec641fac433a41338af547ac7888..171cb7c99b3b67c676710f7121177d9a5cf7a3cd 100644 GIT binary patch delta 44 ycmX>vbY6&iIWI340}vRynr`H-VibyrFH6l!$uEj2NzF@4&Mc{n**u+b2Ri^1-wpc! delta 44 ycmX>vbY6&iIWI340}wcL@NVR;VieMkFH6l!$uH6`NzF@4&Mc|a-#ndh2Ri@~2o0P7 diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc index bda5460f2e26635388a191f1e8d88e5628f7ea55..87391488d4d852bebe577fcbc10b701633c42bb5 100644 GIT binary patch delta 44 ycmZ3+vy6v(IWI340}vRynr`I2$|w{QUzVDel3x^4lA4#8oLN#Cv-uOF2@3!Yzzxg* delta 44 ycmZ3+vy6v(IWI340}wcL@NVS3$|$5CUzVDel3%1>lA4#8oLN$-zxflR2@3!V=?!fF diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc index 99f68d4ceb5258c7524d89e65ba290d41b44fa6a..d0bfc0ca9a3727afeeaa50b94977feacaf5c48e7 100644 GIT binary patch delta 44 ycmX?CbFPMaIWI340}vRynr`Ht%PbTVUzVDel3x^4lA4#8oLN#Cvw0Wu6e|Ebjt?dP delta 44 ycmX?CbFPMaIWI340}wcL@NVRu%PgcHUzVDel3%1>lA4#8oLN$-zj+t)6e|EYw+_bu diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc index 14614020993e483437fdaa5bb3bfd76f31cd45bf..6507de8a5133df6879ba0697215ed441b6a791fb 100644 GIT binary patch delta 44 ycmbPlINy+aIWI340}vRynr`I2$s`mLUzVDel3x^4lA4#8oLN#Cv-um-N>KnB84j2L delta 44 ycmbPlINy+aIWI340}wcL@NVS3$t0v7UzVDel3%1>lA4#8oLN$-zxf-}N>Kn8LJm0q diff --git a/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc index a091995fca597f7abd8fee4328cbd239dd42406a..a67233b6e582c5057089af6845d80dfd1d1bc8bb 100644 GIT binary patch delta 44 ycmeyH{x_X_IWI340}vRynr`F{WEP5vFH6l!$uEj2NzF@4&Mc{n*__ARZvX&0cn-4w delta 44 ycmeyH{x_X_IWI340}wcL@NVP|WERqoFH6l!$uH6`NzF@4&Mc|a-<-$XZvX%|p$=34 diff --git a/env/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc index 8d5ddaf8ab4daa1b55be6de011611b48e9d77dd2..97ce74460e9d5a73bbdc520f45baefff3fc8460a 100644 GIT binary patch delta 40 ucmZ3?yqKALIWI340}vRynr`G)V&spBFH6l!$uEj2$UZ7Ik*A<4Nwfz delta 45 zcmZqdXKd_en31ONa4 diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc index 131b1cd75879ad54c8e381caf81a683e46341019..1c0cb403ced00bac5de4033ea9a5d2456cc304ad 100644 GIT binary patch delta 45 zcmdnFhH>W_M(*Xjyj%=GVC-tTk^4EbU`%{jYFW_M(*Xjyj%=G;LyRlk^4EbpniN=YF5CdCfd delta 45 zcmeBO&D6V^iF-LOFBbz4ICSuCMq%}dEI(l0H_$;nJI*55pZ<7W>5Bp?oW diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc index 436dde37521373a594adbb5ca0ab747b4383f4ad..80383bcbc6536fa305ba3c376e5cdff6993417f0 100644 GIT binary patch delta 43 xcmZp!Yp&y7&dbZi00hRarW?7_Sp{R_%Tn`F@{3|hi*j-@lZ<0FH?uZa0ssv_4RHVf delta 43 xcmZp!Yp&y7&dbZi00a&lyc@aGSq1gu%Tn`F@{9CKi*j-@lZ^E@H?uZa0ssn|4H5tV diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc index 330b6d5782b041c4846c98f24b35242120b1fa6f..dfd903e22d4aeb8022f7009d8601acadf60dcb7a 100644 GIT binary patch delta 43 xcmZ1wxge5zIWI340}vRynr`IUFKUzVDel3x^4T9lKMnPeQZnU8srCIA+14Rini delta 43 xcmZ1wxge5zIWI340}wcL@NVS(#3ZO6UzVDel3%1>T9lKMnPjZLnU8srCIA!44HWJ^=p&4UYf- delta 43 xcmbQKJX4u_IWI340}wcL@NVQ@#U!X7UzVDel3%1>T9lKMnPjZL`54n>J^=h*4KM%z diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc index 30a8cb2191a0cad1ec3a8df9eb024462c24cca63..ef9b0a0dfded9451d61067f04df2ac3f62290353 100644 GIT binary patch delta 45 zcmeyqg7NzbM(*Xjyj%=GVC-tTk^2s}U`%{jYFC-1Qy+Q9%z> diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc index 01017d84ebf3503ee8a9aa78d0f712013b91d80e..f69e6f509d59c09093a12faa0eee370c1915a47c 100644 GIT binary patch delta 46 zcmeA%=`rD3&dbZi00iH|OjEffHu9}u6^w~5OU+BkFN!HG%E`%0GLG4Nn$=MR05q!( AdjJ3c delta 46 zcmeA%=`rD3&dbZi00a&lys3%e8~N6-3hKv~rRJsN7wMN4<>X{08S8I8&FUxu03f^# AoB#j- diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc index bd0352501d7581a7b5149212e690e88632b41d1b..d291e1acef8a1588821ca7fcdd4642097aedf2c9 100644 GIT binary patch delta 45 zcmX>;m+AOiChq0Dyj%=GVC-tTkvpA5Febh%H7_NIA(J*i%S;(G7t_< delta 45 zcmX>;m+AOiChq0Dyj%=G;LyRlkvpA5P(QvbH7_NSbuXfi%S;(FKZ3& diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc index a32ccdaf12e977668675372e95980bcf3ae3db4b..242a05db70ec9fa0b95919da33b56bfdf5b2e4f4 100644 GIT binary patch delta 48 zcmcc0c$JZRIWI340}vRynoi`dl8lKjOU+BkFN!HG%E`%0GLA{k&nqd)Op2K}&l~_! Cmk-bY delta 48 zcmcc0c$JZRIWI340}wcL@J{5elGKkcOU+BkFVZh9%E`%0GS*Md&nqd)Owyk?&l~_u C+z&(m diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc index e261bfb3f4b1a3b6f1adae2d14b2b09c0610f47d..f562848948c3d58e652b37872178eb3104579b39 100644 GIT binary patch delta 51 zcmZ3$zkr{6IWI340}vRynr`IIV3drBFH6l!$uEj2Ey~HsOfrs1&d)0;%1nyc+`}ls F1^{V64}|~# delta 51 zcmZ3$zkr{6IWI340}wcL@NVSJV3gF4FH6l!$uH6`Ey~HsOfuF_&d)0;%1qMV+`}ls F1^{A~4*388 diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc index 87e3937faae442af7500d9d9a1b7965509404c0d..790c7d1217f004c642276c8c96195343e8e9dbe4 100644 GIT binary patch delta 51 zcmZ2zztEn0IWI340}vRynr`G?!6g|JUzVDel3x^4T9lKMnPeQ3oS#=xl$jK>`3%=p F5deq~5l8?4 delta 51 zcmZ2zztEn0IWI340}wcL@NVQ@!6m65UzVDel3%1>T9lKMnPjY=oS#=xl$oTz`3%=p F5deW@5WD~Y diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc index bd29cb87ac60dc2f42d72744a5dee1d8f6e15c60..5ef2601b08b2e32700544d2a99d5e492215afed4 100644 GIT binary patch delta 49 zcmcb{c#V;JIWI340}vRynoi`dl8T8hOU+BkFN!HG%E`%0GL9)oOwLYBPc4p_INuxq DVj~bD delta 49 zcmcb{c#V;JIWI340}wcL@J{5elG2YaOU+BkFVZh9%E`%0GS)9hOwLYBPc7D;INuxq DTnP`B diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc index 1aa48d6ada78a96dbde3b552757aeac00af5499c..2b8e2677cd28e9beda7d4b28bbbd93750df7becb 100644 GIT binary patch delta 54 zcmezIis{EIChq0Dyj%=GVC-tTk-JS^Dki=xH7_NIHn*mIXf{uwK!(; IYWcHM0Ros4{{R30 delta 54 zcmezIis{EIChq0Dyj%=G;LyRlk-JS^NSic}KIXf{uwOD`i IYWcHM0sDUwa{vGU diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc index c69f546f2eef29149a7b521e7efbec6857fa1c77..218f7cfc4f26a447d018777093424c6675253159 100644 GIT binary patch delta 48 zcmeC+?%?KL&dbZi00hRarW?6`GKCOmSpDWZi diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc index f98b0bce5a42fc54f387bde22dc8640e7b2d686b..642c64755b6df51dbaae45908faffb0b004609d0 100644 GIT binary patch delta 48 zcmbQPFJ@*}R;&KmY(l CU=I=i delta 48 zcmbQPFK$-@Kf;KmY(f C(hi0I diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc index 6adb9089f67d6e620c927d59fade36a867fdaf19..fcc59fbf5aedfc1d42aabe8c8f0ee7cbdee6e4a6 100644 GIT binary patch delta 48 zcmdnXyO)=HIWI340}vRynr`IU9IUzVDel3x^4T9lKMnPePOT9TO)vssvV6*B-+ CLJuqe delta 48 zcmdnXyO)=HIWI340}wcL@NVS(#3ZI4UzVDel3%1>T9lKMnPjYAT9TQgzgd`h6*B-$ Cv<{#E diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc index b09b941e57725f59edf557ac22c7b8b2cc8ff335..2eb552363c53b2e3c8b9b6d6485903b4a813d4b4 100644 GIT binary patch delta 48 zcmaFD{e+u)IWI340}vRynr`IY$|x2SUzVDel3x^4T9lKMnPePOT9TO)v-uh$9}56m CXb)Zh delta 48 zcmaFD{e+u)IWI340}wcL@NVSZ$|$BEUzVDel3%1>T9lKMnPjYAT9TQgzxf&?9}56g C+78kH diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc index d0990366c1f07dde1f14670078b9d9f73160f046..093596c90ddfb097a13ba9d68aae3120f939c172 100644 GIT binary patch delta 48 zcmbQDGDU@ZIWI340}vRynr`Io=MamDFH6l!$uEj2Ey~HsOfrrsEy>J@*}Q=xg%bcn Ci4P3` delta 48 zcmbQDGDU@ZIWI340}wcL@NVSp=MdA6FH6l!$uH6`Ey~HsOfuFlEy>K$-@Jh%g%bch C`woEs diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc index 22328d95721ac8ec79b7a733f3d699df4afae94d..f0c86b094bcb898c0585d3e1aa549c41429b3606 100644 GIT binary patch delta 48 zcmZ1}y;7QcIWI340}vRynr`G~VHS&tFH6l!$uEj2Ey~HsOfrrsEy>J@*{sUk!UX^| CE)FID delta 48 zcmZ1}y;7QcIWI340}wcL@NVR0VHVSmFH6l!$uH6`Ey~HsOfuFlEy>K$->k~q!UX^? CpbeS; diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc index b3e4a6fca27fe3f3f57258748f7a6b8bba8fd24f..3cc43dc7d34766c134d471a485ddfef54064f2a2 100644 GIT binary patch delta 53 zcmaF6k@4+DM!w~|yj%=G@IA~lH9le^-v$=3nE0~Pyp;T+n9`!0oXjNSn9`EWoS4m5 HSR_LL^g$C3 delta 53 zcmaF6k@4+DM!w~|yj%=G;LyRF`Z;tX-v$;j{rIxfyp;SR{nDbGoXjL+{nC=m9R1B# HSR_LL;^PuO diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc index 86657a392aac9ccd2932ee984ccf5274f072f7d1..577c90511f6705d3f26a68756953d43f8e834d74 100644 GIT binary patch delta 50 zcmdnf%($nSk$X8WFBbz47`vKoT9lKMnPjYAT9TQgzxg=h3lRWL CVh?x# diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc index c34027468ee5c3eee97e15ed7064c73f601edb2c..caf1b01dc30bfeca9a61d1cf0eeee6dbd968f116 100644 GIT binary patch delta 48 zcmewo^(BgXIWI340}vRynr`H7U=@prFH6l!$uEj2Ey~HsOfrrsEy>J@*}RbTvN`~G C&k&*j delta 48 zcmewo^(BgXIWI340}wcL@NVR8U=`DkFH6l!$uH6`Ey~HsOfuFlEy>K$-@K6ZvN`~B CK@b)I diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc index fd50073eac9ce51c8b977f0897d70ccb60354d54..597b3ed0af800dc4f31de6485cb1cda5fcd7916d 100644 GIT binary patch delta 48 zcmcZ>aV>&-IWI340}vRynr`G?!!H&SUzVDel3x^4T9lKMnPePOT9TO)v-vE4rwjmd Cj1YMM delta 48 zcmcZ>aV>&-IWI340}wcL@NVQ@!!M>EUzVDel3%1>T9lKMnPjYAT9TQgzxgbGrwjmX C{txW{ diff --git a/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc index 9670c1e912be5e65b406facb595d2362b357b28d..a7008d81efcc1fb9ff54421a7802fea7817416ff 100644 GIT binary patch delta 49 zcmdnq$+*3fk$X8WFBbz47`vKo^kJG(6a DX$lYP delta 49 zcmdnq$+*3fk$X8WFBbz4ICSuCIWI340}vRynr`I&!zdOLUzVDel3x^4T9lKMnPePOT9TO)vssp@R1g47 Cs1Ef2 delta 48 zcmbQFK1rQ>IWI340}wcL@NVS(!ziX7UzVDel3%1>T9lKMnPjYAT9TQgzgd>4R1g42 C8V+dy diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/INSTALLER b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/LICENSE b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/LICENSE new file mode 100644 index 0000000..9029e70 --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/LICENSE @@ -0,0 +1,49 @@ +psycopg2 and the LGPL +--------------------- + +psycopg2 is free software: you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +psycopg2 is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. + +In addition, as a special exception, the copyright holders give +permission to link this program with the OpenSSL library (or with +modified versions of OpenSSL that use the same license as OpenSSL), +and distribute linked combinations including the two. + +You must obey the GNU Lesser General Public License in all respects for +all of the code used other than OpenSSL. If you modify file(s) with this +exception, you may extend this exception to your version of the file(s), +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. If you delete this exception +statement from all source files in the program, then also delete it here. + +You should have received a copy of the GNU Lesser General Public License +along with psycopg2 (see the doc/ directory.) +If not, see . + + +Alternative licenses +-------------------- + +The following BSD-like license applies (at your option) to the files following +the pattern ``psycopg/adapter*.{h,c}`` and ``psycopg/microprotocol*.{h,c}``: + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product documentation + would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/METADATA b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/METADATA new file mode 100644 index 0000000..87dc149 --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/METADATA @@ -0,0 +1,110 @@ +Metadata-Version: 2.1 +Name: psycopg2 +Version: 2.9.9 +Summary: psycopg2 - Python-PostgreSQL Database Adapter +Home-page: https://psycopg.org/ +Author: Federico Di Gregorio +Author-email: fog@initd.org +Maintainer: Daniele Varrazzo +Maintainer-email: daniele.varrazzo@gmail.com +License: LGPL with exceptions +Project-URL: Homepage, https://psycopg.org/ +Project-URL: Documentation, https://www.psycopg.org/docs/ +Project-URL: Code, https://github.com/psycopg/psycopg2 +Project-URL: Issue Tracker, https://github.com/psycopg/psycopg2/issues +Project-URL: Download, https://pypi.org/project/psycopg2/ +Platform: any +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: C +Classifier: Programming Language :: SQL +Classifier: Topic :: Database +Classifier: Topic :: Database :: Front-Ends +Classifier: Topic :: Software Development +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: Unix +Requires-Python: >=3.7 +License-File: LICENSE + +Psycopg is the most popular PostgreSQL database adapter for the Python +programming language. Its main features are the complete implementation of +the Python DB API 2.0 specification and the thread safety (several threads can +share the same connection). It was designed for heavily multi-threaded +applications that create and destroy lots of cursors and make a large number +of concurrent "INSERT"s or "UPDATE"s. + +Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in being +both efficient and secure. It features client-side and server-side cursors, +asynchronous communication and notifications, "COPY TO/COPY FROM" support. +Many Python types are supported out-of-the-box and adapted to matching +PostgreSQL data types; adaptation can be extended and customized thanks to a +flexible objects adaptation system. + +Psycopg 2 is both Unicode and Python 3 friendly. + + +Documentation +------------- + +Documentation is included in the ``doc`` directory and is `available online`__. + +.. __: https://www.psycopg.org/docs/ + +For any other resource (source code repository, bug tracker, mailing list) +please check the `project homepage`__. + +.. __: https://psycopg.org/ + + +Installation +------------ + +Building Psycopg requires a few prerequisites (a C compiler, some development +packages): please check the install_ and the faq_ documents in the ``doc`` dir +or online for the details. + +If prerequisites are met, you can install psycopg like any other Python +package, using ``pip`` to download it from PyPI_:: + + $ pip install psycopg2 + +or using ``setup.py`` if you have downloaded the source package locally:: + + $ python setup.py build + $ sudo python setup.py install + +You can also obtain a stand-alone package, not requiring a compiler or +external libraries, by installing the `psycopg2-binary`_ package from PyPI:: + + $ pip install psycopg2-binary + +The binary package is a practical choice for development and testing but in +production it is advised to use the package built from sources. + +.. _PyPI: https://pypi.org/project/psycopg2/ +.. _psycopg2-binary: https://pypi.org/project/psycopg2-binary/ +.. _install: https://www.psycopg.org/docs/install.html#install-from-source +.. _faq: https://www.psycopg.org/docs/faq.html#faq-compile + +:Linux/OSX: |gh-actions| +:Windows: |appveyor| + +.. |gh-actions| image:: https://github.com/psycopg/psycopg2/actions/workflows/tests.yml/badge.svg + :target: https://github.com/psycopg/psycopg2/actions/workflows/tests.yml + :alt: Linux and OSX build status + +.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/psycopg/psycopg2?branch=master&svg=true + :target: https://ci.appveyor.com/project/psycopg/psycopg2/branch/master + :alt: Windows build status diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/RECORD b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/RECORD new file mode 100644 index 0000000..ef64013 --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/RECORD @@ -0,0 +1,30 @@ +psycopg2-2.9.9.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +psycopg2-2.9.9.dist-info/LICENSE,sha256=lhS4XfyacsWyyjMUTB1-HtOxwpdFnZ-yimpXYsLo1xs,2238 +psycopg2-2.9.9.dist-info/METADATA,sha256=m-vTX7sYOv5wXKcTJhY3qIaz5SiHmyig-w7neDM_VL8,4548 +psycopg2-2.9.9.dist-info/RECORD,, +psycopg2-2.9.9.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +psycopg2-2.9.9.dist-info/WHEEL,sha256=badvNS-y9fEq0X-qzdZYvql_JFjI7Xfw-wR8FsjoK0I,102 +psycopg2-2.9.9.dist-info/top_level.txt,sha256=7dHGpLqQ3w-vGmGEVn-7uK90qU9fyrGdWWi7S-gTcnM,9 +psycopg2/__init__.py,sha256=9mo5Qd0uWHiEBx2CdogGos2kNqtlNNGzbtYlGC0hWS8,4768 +psycopg2/__pycache__/__init__.cpython-311.pyc,, +psycopg2/__pycache__/_ipaddress.cpython-311.pyc,, +psycopg2/__pycache__/_json.cpython-311.pyc,, +psycopg2/__pycache__/_range.cpython-311.pyc,, +psycopg2/__pycache__/errorcodes.cpython-311.pyc,, +psycopg2/__pycache__/errors.cpython-311.pyc,, +psycopg2/__pycache__/extensions.cpython-311.pyc,, +psycopg2/__pycache__/extras.cpython-311.pyc,, +psycopg2/__pycache__/pool.cpython-311.pyc,, +psycopg2/__pycache__/sql.cpython-311.pyc,, +psycopg2/__pycache__/tz.cpython-311.pyc,, +psycopg2/_ipaddress.py,sha256=jkuyhLgqUGRBcLNWDM8QJysV6q1Npc_RYH4_kE7JZPU,2922 +psycopg2/_json.py,sha256=XPn4PnzbTg1Dcqz7n1JMv5dKhB5VFV6834GEtxSawt0,7153 +psycopg2/_psycopg.cp311-win_amd64.pyd,sha256=fqbVB1hiveZXE5spFuUUyrHgsAfwhZNzqhLkREdGb7o,2416128 +psycopg2/_range.py,sha256=sXeenGraJEEw2I3mc8RlmNivy2jMg7zWoanDes2Ywp8,18494 +psycopg2/errorcodes.py,sha256=jb1SkuGq5zJT7F99GFAUi3VQH8GbsB7zRHiLsAWAU0Q,14362 +psycopg2/errors.py,sha256=aAS4dJyTg1bsDzJDCRQAMB_s7zv-Q4yB6Yvih26I-0M,1425 +psycopg2/extensions.py,sha256=CG0kG5vL8Ot503UGlDXXJJFdFWLg4HE2_c1-lLOLc8M,6797 +psycopg2/extras.py,sha256=oBfrdvtWn8ITxc3x-h2h6IwHUsWdVqCdf4Gphb0JqY8,44215 +psycopg2/pool.py,sha256=UGEt8IdP3xNc2PGYNlG4sQvg8nhf4aeCnz39hTR0H8I,6316 +psycopg2/sql.py,sha256=OcFEAmpe2aMfrx0MEk4Lx00XvXXJCmvllaOVbJY-yoE,14779 +psycopg2/tz.py,sha256=r95kK7eGSpOYr_luCyYsznHMzjl52sLjsnSPXkXLzRI,4870 diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/REQUESTED b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/WHEEL b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/WHEEL new file mode 100644 index 0000000..6d16045 --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.41.2) +Root-Is-Purelib: false +Tag: cp311-cp311-win_amd64 + diff --git a/env/Lib/site-packages/psycopg2-2.9.9.dist-info/top_level.txt b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/top_level.txt new file mode 100644 index 0000000..658130b --- /dev/null +++ b/env/Lib/site-packages/psycopg2-2.9.9.dist-info/top_level.txt @@ -0,0 +1 @@ +psycopg2 diff --git a/env/Lib/site-packages/psycopg2/__init__.py b/env/Lib/site-packages/psycopg2/__init__.py new file mode 100644 index 0000000..59a8938 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/__init__.py @@ -0,0 +1,126 @@ +"""A Python driver for PostgreSQL + +psycopg is a PostgreSQL_ database adapter for the Python_ programming +language. This is version 2, a complete rewrite of the original code to +provide new-style classes for connection and cursor objects and other sweet +candies. Like the original, psycopg 2 was written with the aim of being very +small and fast, and stable as a rock. + +Homepage: https://psycopg.org/ + +.. _PostgreSQL: https://www.postgresql.org/ +.. _Python: https://www.python.org/ + +:Groups: + * `Connections creation`: connect + * `Value objects constructors`: Binary, Date, DateFromTicks, Time, + TimeFromTicks, Timestamp, TimestampFromTicks +""" +# psycopg/__init__.py - initialization of the psycopg module +# +# Copyright (C) 2003-2019 Federico Di Gregorio +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +# Import modules needed by _psycopg to allow tools like py2exe to do +# their work without bothering about the module dependencies. + +# Note: the first internal import should be _psycopg, otherwise the real cause +# of a failed loading of the C module may get hidden, see +# https://archives.postgresql.org/psycopg/2011-02/msg00044.php + +# Import the DBAPI-2.0 stuff into top-level module. + +from psycopg2._psycopg import ( # noqa + BINARY, NUMBER, STRING, DATETIME, ROWID, + + Binary, Date, Time, Timestamp, + DateFromTicks, TimeFromTicks, TimestampFromTicks, + + Error, Warning, DataError, DatabaseError, ProgrammingError, IntegrityError, + InterfaceError, InternalError, NotSupportedError, OperationalError, + + _connect, apilevel, threadsafety, paramstyle, + __version__, __libpq_version__, +) + + +# Register default adapters. + +from psycopg2 import extensions as _ext +_ext.register_adapter(tuple, _ext.SQL_IN) +_ext.register_adapter(type(None), _ext.NoneAdapter) + +# Register the Decimal adapter here instead of in the C layer. +# This way a new class is registered for each sub-interpreter. +# See ticket #52 +from decimal import Decimal # noqa +from psycopg2._psycopg import Decimal as Adapter # noqa +_ext.register_adapter(Decimal, Adapter) +del Decimal, Adapter + + +def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs): + """ + Create a new database connection. + + The connection parameters can be specified as a string: + + conn = psycopg2.connect("dbname=test user=postgres password=secret") + + or using a set of keyword arguments: + + conn = psycopg2.connect(database="test", user="postgres", password="secret") + + Or as a mix of both. The basic connection parameters are: + + - *dbname*: the database name + - *database*: the database name (only as keyword argument) + - *user*: user name used to authenticate + - *password*: password used to authenticate + - *host*: database host address (defaults to UNIX socket if not provided) + - *port*: connection port number (defaults to 5432 if not provided) + + Using the *connection_factory* parameter a different class or connections + factory can be specified. It should be a callable object taking a dsn + argument. + + Using the *cursor_factory* parameter, a new default cursor factory will be + used by cursor(). + + Using *async*=True an asynchronous connection will be created. *async_* is + a valid alias (for Python versions where ``async`` is a keyword). + + Any other keyword parameter will be passed to the underlying client + library: the list of supported parameters depends on the library version. + + """ + kwasync = {} + if 'async' in kwargs: + kwasync['async'] = kwargs.pop('async') + if 'async_' in kwargs: + kwasync['async_'] = kwargs.pop('async_') + + dsn = _ext.make_dsn(dsn, **kwargs) + conn = _connect(dsn, connection_factory=connection_factory, **kwasync) + if cursor_factory is not None: + conn.cursor_factory = cursor_factory + + return conn diff --git a/env/Lib/site-packages/psycopg2/__pycache__/__init__.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b547b5106ecdae5035fe8a5bdcb18cd247f39262 GIT binary patch literal 4101 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 literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/_json.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/_json.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cf463b682a253b49b0ebf5413196097e545b51e GIT binary patch literal 7986 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 U(?tWclY@KY&Q0k#M2PGE09`X56#xJL literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/_range.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/_range.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea7dc059db0a3b623163b3ed9c4dabad3291f3db GIT binary patch literal 22688 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 s4OFLr>NM8w$t|3T0Dfpv%EG_Q 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 J=_+$N|1bAV!(spc literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/errors.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/errors.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed7ec8b470f1e3b6b18dbd97dc9d0107531fda62 GIT binary patch literal 582 zcmZWmO=}cE5bd6wd^j;^j(U*Vn|pA@pqC)I7*TNXBa0xRVKV8dtZine$F3f6mk1vG z1D^CBi2o)B53*NJ-UjxTlQq3r2v~GIs(NbPd)@tGb2AYf`)?lL*A*fDw9PW)MKQn5 z#W#_Q1Ch%w;y~unQ1m*}-ec#i16^c9NN~*cOG|#_aQJEfxcF#uq(m>NTE>X8!#Tgj zz_d(Ph_U=6r8t$R;s)<7B8a>jSbI`ekd>Dhxy!+!uU!eo6W~XUl{dCrnCT}8aO`J> z5DvS~a1xvzf;k5N7D2NqFa)Lb?7A-VewhE;%J$^!8oe*bXCBjV2I@t#t%@evR-^5H zdQrK!9gb#kOBNbx4+d~Pe6*up6FO33gEUopR@Y-JJ*g+gKdq0{i$JcYWu~zFpa$kh zk@0w^%JfM#LQ+eyy9@n(HJPmz;Tqg}tHDWKhR>o&#LD(reDCu5y>avV{a+h!7Q>u} z#B+AJmZrJYX&V0jDclv_cWVsi>kr2^uM6CDSGjH9iEcAA9VulKNf|eyh22%zZN&c& GnEnAuf1IZP literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/extensions.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/extensions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9ee10a1dcb1bbf15d84fb3c06cff1cb5ede8f62 GIT binary patch literal 9216 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 B1?2z$ literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/extras.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/extras.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..103f500d8511b3b4243b837f7a60de8dd00f25d4 GIT binary patch literal 68277 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 literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/__pycache__/tz.cpython-311.pyc b/env/Lib/site-packages/psycopg2/__pycache__/tz.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b001c920ae41d99647fbd9c66904bb7fa5523b9d GIT binary patch literal 6441 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 I50lG(00#o_ssI20 literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/_ipaddress.py b/env/Lib/site-packages/psycopg2/_ipaddress.py new file mode 100644 index 0000000..d38566c --- /dev/null +++ b/env/Lib/site-packages/psycopg2/_ipaddress.py @@ -0,0 +1,90 @@ +"""Implementation of the ipaddres-based network types adaptation +""" + +# psycopg/_ipaddress.py - Ipaddres-based network types adaptation +# +# Copyright (C) 2016-2019 Daniele Varrazzo +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +from psycopg2.extensions import ( + new_type, new_array_type, register_type, register_adapter, QuotedString) + +# The module is imported on register_ipaddress +ipaddress = None + +# The typecasters are created only once +_casters = None + + +def register_ipaddress(conn_or_curs=None): + """ + Register conversion support between `ipaddress` objects and `network types`__. + + :param conn_or_curs: the scope where to register the type casters. + If `!None` register them globally. + + After the function is called, PostgreSQL :sql:`inet` values will be + converted into `~ipaddress.IPv4Interface` or `~ipaddress.IPv6Interface` + objects, :sql:`cidr` values into into `~ipaddress.IPv4Network` or + `~ipaddress.IPv6Network`. + + .. __: https://www.postgresql.org/docs/current/static/datatype-net-types.html + """ + global ipaddress + import ipaddress + + global _casters + if _casters is None: + _casters = _make_casters() + + for c in _casters: + register_type(c, conn_or_curs) + + for t in [ipaddress.IPv4Interface, ipaddress.IPv6Interface, + ipaddress.IPv4Network, ipaddress.IPv6Network]: + register_adapter(t, adapt_ipaddress) + + +def _make_casters(): + inet = new_type((869,), 'INET', cast_interface) + ainet = new_array_type((1041,), 'INET[]', inet) + + cidr = new_type((650,), 'CIDR', cast_network) + acidr = new_array_type((651,), 'CIDR[]', cidr) + + return [inet, ainet, cidr, acidr] + + +def cast_interface(s, cur=None): + if s is None: + return None + # Py2 version force the use of unicode. meh. + return ipaddress.ip_interface(str(s)) + + +def cast_network(s, cur=None): + if s is None: + return None + return ipaddress.ip_network(str(s)) + + +def adapt_ipaddress(obj): + return QuotedString(str(obj)) diff --git a/env/Lib/site-packages/psycopg2/_json.py b/env/Lib/site-packages/psycopg2/_json.py new file mode 100644 index 0000000..9502422 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/_json.py @@ -0,0 +1,199 @@ +"""Implementation of the JSON adaptation objects + +This module exists to avoid a circular import problem: pyscopg2.extras depends +on psycopg2.extension, so I can't create the default JSON typecasters in +extensions importing register_json from extras. +""" + +# psycopg/_json.py - Implementation of the JSON adaptation objects +# +# Copyright (C) 2012-2019 Daniele Varrazzo +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import json + +from psycopg2._psycopg import ISQLQuote, QuotedString +from psycopg2._psycopg import new_type, new_array_type, register_type + + +# oids from PostgreSQL 9.2 +JSON_OID = 114 +JSONARRAY_OID = 199 + +# oids from PostgreSQL 9.4 +JSONB_OID = 3802 +JSONBARRAY_OID = 3807 + + +class Json: + """ + An `~psycopg2.extensions.ISQLQuote` wrapper to adapt a Python object to + :sql:`json` data type. + + `!Json` can be used to wrap any object supported by the provided *dumps* + function. If none is provided, the standard :py:func:`json.dumps()` is + used. + + """ + def __init__(self, adapted, dumps=None): + self.adapted = adapted + self._conn = None + self._dumps = dumps or json.dumps + + def __conform__(self, proto): + if proto is ISQLQuote: + return self + + def dumps(self, obj): + """Serialize *obj* in JSON format. + + The default is to call `!json.dumps()` or the *dumps* function + provided in the constructor. You can override this method to create a + customized JSON wrapper. + """ + return self._dumps(obj) + + def prepare(self, conn): + self._conn = conn + + def getquoted(self): + s = self.dumps(self.adapted) + qs = QuotedString(s) + if self._conn is not None: + qs.prepare(self._conn) + return qs.getquoted() + + def __str__(self): + # getquoted is binary + return self.getquoted().decode('ascii', 'replace') + + +def register_json(conn_or_curs=None, globally=False, loads=None, + oid=None, array_oid=None, name='json'): + """Create and register typecasters converting :sql:`json` type to Python objects. + + :param conn_or_curs: a connection or cursor used to find the :sql:`json` + and :sql:`json[]` oids; the typecasters are registered in a scope + limited to this object, unless *globally* is set to `!True`. It can be + `!None` if the oids are provided + :param globally: if `!False` register the typecasters only on + *conn_or_curs*, otherwise register them globally + :param loads: the function used to parse the data into a Python object. If + `!None` use `!json.loads()`, where `!json` is the module chosen + according to the Python version (see above) + :param oid: the OID of the :sql:`json` type if known; If not, it will be + queried on *conn_or_curs* + :param array_oid: the OID of the :sql:`json[]` array type if known; + if not, it will be queried on *conn_or_curs* + :param name: the name of the data type to look for in *conn_or_curs* + + The connection or cursor passed to the function will be used to query the + database and look for the OID of the :sql:`json` type (or an alternative + type if *name* if provided). No query is performed if *oid* and *array_oid* + are provided. Raise `~psycopg2.ProgrammingError` if the type is not found. + + """ + if oid is None: + oid, array_oid = _get_json_oids(conn_or_curs, name) + + JSON, JSONARRAY = _create_json_typecasters( + oid, array_oid, loads=loads, name=name.upper()) + + register_type(JSON, not globally and conn_or_curs or None) + + if JSONARRAY is not None: + register_type(JSONARRAY, not globally and conn_or_curs or None) + + return JSON, JSONARRAY + + +def register_default_json(conn_or_curs=None, globally=False, loads=None): + """ + Create and register :sql:`json` typecasters for PostgreSQL 9.2 and following. + + Since PostgreSQL 9.2 :sql:`json` is a builtin type, hence its oid is known + and fixed. This function allows specifying a customized *loads* function + for the default :sql:`json` type without querying the database. + All the parameters have the same meaning of `register_json()`. + """ + return register_json(conn_or_curs=conn_or_curs, globally=globally, + loads=loads, oid=JSON_OID, array_oid=JSONARRAY_OID) + + +def register_default_jsonb(conn_or_curs=None, globally=False, loads=None): + """ + Create and register :sql:`jsonb` typecasters for PostgreSQL 9.4 and following. + + As in `register_default_json()`, the function allows to register a + customized *loads* function for the :sql:`jsonb` type at its known oid for + PostgreSQL 9.4 and following versions. All the parameters have the same + meaning of `register_json()`. + """ + return register_json(conn_or_curs=conn_or_curs, globally=globally, + loads=loads, oid=JSONB_OID, array_oid=JSONBARRAY_OID, name='jsonb') + + +def _create_json_typecasters(oid, array_oid, loads=None, name='JSON'): + """Create typecasters for json data type.""" + if loads is None: + loads = json.loads + + def typecast_json(s, cur): + if s is None: + return None + return loads(s) + + JSON = new_type((oid, ), name, typecast_json) + if array_oid is not None: + JSONARRAY = new_array_type((array_oid, ), f"{name}ARRAY", JSON) + else: + JSONARRAY = None + + return JSON, JSONARRAY + + +def _get_json_oids(conn_or_curs, name='json'): + # lazy imports + from psycopg2.extensions import STATUS_IN_TRANSACTION + from psycopg2.extras import _solve_conn_curs + + conn, curs = _solve_conn_curs(conn_or_curs) + + # Store the transaction status of the connection to revert it after use + conn_status = conn.status + + # column typarray not available before PG 8.3 + typarray = conn.info.server_version >= 80300 and "typarray" or "NULL" + + # get the oid for the hstore + curs.execute( + "SELECT t.oid, %s FROM pg_type t WHERE t.typname = %%s;" + % typarray, (name,)) + r = curs.fetchone() + + # revert the status of the connection as before the command + if conn_status != STATUS_IN_TRANSACTION and not conn.autocommit: + conn.rollback() + + if not r: + raise conn.ProgrammingError(f"{name} data type not found") + + return r diff --git a/env/Lib/site-packages/psycopg2/_psycopg.cp311-win_amd64.pyd b/env/Lib/site-packages/psycopg2/_psycopg.cp311-win_amd64.pyd new file mode 100644 index 0000000000000000000000000000000000000000..c21a35a083d34a503b018ec1e55bd9e9c0ab977c GIT binary patch literal 2416128 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%0A|6_YG>J4mCb$yEyh|SO4t^(~HyE8? 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
XcU{ukR7+JE7>U~J! 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±yUEj(vie9Gc{6)%yha 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

uLmYFgid& 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

n;I+K z=<0X00kcNiKr6-b&G<`(!>*`Lq`JLz?$s32C()IJpZlXpqOwonyEh+c{Ww${e#k=g zJFij)*Smf{ccc4hX5RA+uNLc!yn3Wt(I9nag*79>Mr!5{`_%b-j#}RZ%+4)moGz6G zJJftSZ~y*QG*2lfFYYjZ+ZM5;gQEOee zM_X%)nIFohX~g7IYntn!lHT8c->K6&YRTWOSTJMve`|9;v&)GFOVm}Z{Qp|0G%YH1 z)ikC}T%KzG7Ea$DNVvuwxK%T3KhJD#z-~v5w=_MdJe(L;sVWAeJdY~KqxfX~;~XB%RG8UzwxY+~oA19#47UX8wV&5wXVChZb|sM$ zQ_R8X?RA0P-6e7$YXt2CtI*7tX6my3A75&hZmIEtPD^tyN z9eJ?f=8Z}><`g|*WLJbz4JV`^6}b-(jVGhPVV?nN!3^H{M}u(H_Z*dt&>0Ni`h5N zZMPId7tCL<$!c=aWRKv<9%GV6Bqy$QW2}bVv3$F2N9NK2Wu=euYNdZ{^Yt%9S;@BB zxM%XQCF@kQ7XP6=l1qsN}yH0+z+SmEQ?gWe6k_KV*VaX-57;}PE!KiAlsxhEem z8jlvf&*slf9E|5%%RmiyCtI;`E1pNi(g@&dsjB-<}twg8X}T(ab-f zd)|uZg4^vHRw=)N|A)Z?x*xmHd+qCq!OiN_Inn!k=z^qbF^icq2bN9Nx_aHAduqoW z6T*h5J$k$Mb1N><0@Gqnqg~2Inb$Sk^psTz=!V1G?7U>YF-K;lkW59!kfnZ`LU; z{BbK^;nVzYTJ0PPFGdLER~Wp>qXpxpdhY6*h1X>A;~S1|U=md(t2F6^ywKC%F$xN? zM*An2rN%XXr}Mt^$Hw#gS2sHr{;9UZ(x|svd^HvBxQ>4Htl8c#4crF@pU_%=e(}30 zFBf|h9aZu8{&W?SCKpuAr9<{LIe0bdNAqj%;x^qE;%Itcd@wHY*Or%z3AgA~e?@=e z{_M&-)fY>S|BE;(FhK#Sg%MqJ$4sl${(xuO9$k8{&o5YxEo(`fY!+*L@RbaxDS2t7aS~K~{1nt8|rqp@+HF#Zqx8c#L z3SU)RM9Nit9$(yfN@zR9R+@?zi*C?3()x|2R~khy=F&Imi-@HZ{wFUAI$3+xPulR; z^SD~+YbR-~-*HLvgu}6OBRdAVH#6vZH_=eJ`a6BM#dj21su)Zz?y9nRM?$G#$Dyb8 z2D+Byv+^MfPANMzYR~gFEnBT;9w)C6B58a&01)$8W%ad?9$Ner^6r1^QmCQWwoh`t zb$XxXJ;wUIOMl{eUemk%QI8R7lR{Oqk8SSYX|LT);oNPL1}&EvPS5x@ROyLj^s`i( z+-K^xnU4qgb#pRq=$mw}-Jpu2ywA7l7bGNU4lN%u*QRyN)@nU{sgyK-Vtg?lCOyoK zi+S1Lua1$|_UM(SpRajf{NewQ4iu`545^)$GbnP+>TOe+Wf}CzU+^>0#$fr%HDm1t zf7a}6*dt}-ryAc(HKy;qm+@eZ^R$@k`>*t0Yvj16ZeEi1@ImI+^M}t*+|Ifx28Xzn zb!gmj-^{01chsx4Ye4juYF+E!%N`e;lBZg7-{$bxMjr*u4QY7ZW|+?RDV;MVLv2X) zj-%dg*{Os&py_Q4@0i||l|`hhVA7j9lVa0+SvEw>NTpQuO z(OI(9aHOi6x57|6pMvyzJMF{k`UE8S`B=9s?DsCIm1B0BvLVJ#7AW4;7(8)G!?Xb& zid#4Nq&T@9NSVKm@!fuLQ}~k)osO*gtHW!Ru*7crPOdxDY`TKyMrXJ5f|(`*oZH;* z?`(cqy+yaN#{>3Pi#uJj>P(~XaO3s0jXrcyI_$lARL^BKI{!5`;C%O6D;vh4j%j|i zgZDqHpU~IuOm&UlQT&(j3e}?at{*hJ&%tr(^9{eM^m)8_$;t&xqia`vI;7btjBmNx zDrVmJIXh}R?R(q6ao2_HX$LOtH?{AZ_#<;_-=>cF>8Bsgb@?l+<>XjJ`@3mloR4&O z?)RdwNB%rR$7|DGEjJk9R(`5=DHAzGcd30!?q=()>zofC*!LxN>)kzUcJq2=N%gNes_A+pX6Cpb;*Nwi~Jw&oVEVWtT7fQdkk*&e{$W_r1h-AU0!8L zGyO-YDA4kO>4!W!W_f-wtKVglU3dfE>MAGA#;CSe`F(x+C#mrtOH+kvAM2;KYx{m) zq0aE8dp}(7>=m}4{Oq*1@6Ly>ztC@y`j+wKn-0zRKB!Bl;w`}*Yom1f{Zt>ET;6D- zOMS;;)BX8%$CQp^EE}8L4ubJY=_i>iD{TD}` zD=*vIEA+;+2(7iuk^}k8(!RQywtcpCyk&2z{n=9n`pw!l)3(Kq^*dc#b*?_)=wh{p z?*>G*zt^+5oz}J%Q;rU)*hWYzI_b+(-wW#H?wN7QH5RLfw4c!W^t~l3)LK37H6Z?a z)L-MCAL#r{dUZROC^UWP_toW!-{WqTq_2XKl7{VWD;ML{?TV7;Cww%@o7=U}#gaKQ zV06uE9qRQgH#yy(-E-bCdg;|$O4~v+=h>?CN-j zk+tVL&OR}*zUJ^diz7}dEe~yglj&%wzPHFelrEkKwX@!T**4Wo|P~9fOn!d1m+2_OX zsgrwsT2!MzCU05uH;o%KtX)1|wN^!W5z-W%C>YJEQ15fXDlw0r-qD#?)60DHQq!D* z`6K7Y^k4t{OdV$E?Y^}S2Q)66akR@;?dJz>l)kE6RQ{fsu6Ar!102 z(3w`$Z(t@9z1nq&-j;jU_wQC4?YpbngIk@phk58?ptD`$7Q9;hx$(e-*E`j2cA;jO z<`!N~n*KOmjrEa}YQCG6H2vK>Yb}~KJ`La%O*IAWAlH$>!7lz`A)f->9%!0tg$FGA z;^G&qZ}WCw8zwnAI9s{J+9Ay>dZ$s-E-he=`<)0=FsZd;@3|J*=LS!j9k%7KpW4aG#y&jr=!i;FE31iq zk&QpxDQW6+tF2k@mLEpEvKk#Ug_Q-yNF>v8mIrEgC<-6Twc`{e)IaWxDRLd4cWOM9 zUlP1EIkHU}C6=?RDMTnJ_4TMVt6e)4k6A5~ZloryODZld9&>hhS@Un27ssbee*1R% zu0fyu=iX{yw53mzXWfT7JajI!vYuQx$+o!ZLdc6ZVm|8iRE zOKV0j4cvD(uUR}}(eWvY-k;c;*-ghD-oEyLvhV0eAc(^LZ(a-9pBx#{_O^bx-mq)w zhpr7zZQFUNeCSmF^!xQn|3%WuB!Bom_Q>1pp=t77WG-&f(?~&ipwcKe!$xMdIm#Kq z9-pi%dr#Mzl#twLVDjd~lwQc8+~gHpl-u(Qe~3wSlu^ zGQZE!A60w)m7hamqP{%&bkyTPcA&#TYxR)lL#e;j)JbiC7s z4Z{PLpWfi>UxSs&fo}~QEz2L+ceJ1LF8_Ma*4m)ThjeSpvC-)CFjTOINGoC zMg2ZslUye3wu$Ym_~QKD{@ULPoHCfuyt{p~CK#6`Uf##-z46xYQ_OOHB4 zY_@&aoz-K@(i_8chi{nU=P}yN^~?9DcBy$?gt-s$Vb5so2^vcbAC=y3V%xz*kBTac zAD#=gOetELeh*qNznAolwMe7HVw;PfLiGUDCp^=pvXx< zr^1$p&25&ne|ebIfQ6e&2h>cxHtAEdldpDLRno(If4?2)J}z;(*RDaf z_HaGR!wH>q&1*UCKfin850)7o{Ps+z9gi-InzFIn_(8`d?lFotPMbw zC+1%mU*-J=bl)8OGO5Ot8WD%$lKpb+1hVjTUi9~jmB3C-t{Y~PvohIOIeBeSufPkeuety0Z;EfO=Bl?PxVgMYcZgX zwHgzDR68xX+hE1{c~8eOhwdzR;=ZPK#tf_MmMJsV++LeJv-Qdpr_xWugL00VoBFhN z9~WnSm}xdrY5cIo4{wFtY2e*+jBfd%5xsNvlpXgPbA62Fz0cZ%1DxY)Yc^&cEI+(A zs@{s>15z)Vw~%NrE@`Y{l!NEO13PZooF;pzrsp;5 zUei7^cl+KBS*T`hRRbqv!O;AS8QcM$PF?NUy|VUf$cip{r_uoaJA+vpje`T)CRWcEnAOKw!!Wm@8)@A*{bahzTAFIk%z|*w+yunK^|)cc8Gmg&}@`_w?1u( zKkd1rG}L9!+|jB-r>(Y08)|yc*h5o!{-pR${yN1q)7m#n@2N54L-nNK;@3s*er`;; z{l>(iTbQc8n%RY`uRAE*UlM+|F!NclQtpU$rrWa@xZWt5pyL)}*QoW9c^^_*-K;*} z)b4}x){!5b*0&G5n;cR$@bOl?hYbw|n-8ykNMW0Hcz*Nu6A!KszMT0nGkn5HkIB01 zx|j2vi-#|Z|Co_59n>o{H2-u4V9c+}i_{w{eN$qJF2B*Jpjo4!4c2_TYzVm^U-B_x3|~_xoMDxueEnmw^jPcX?Hqb^Mte0zQCj!Kf82DjToiYqV~1N1g*i_QMa{??SCS5IfV>gNx*p!o1o zgB~MJrW~5|yw+CpweJj{U%W8nRxlrFsxQ2!%m)fxnp79RdJ*+v6`GGrEva|Cw0?Vs zZPg>fhEADaI;4HXi7mPxI@aBC=*+#(Z1&5AH4EmAiHLr2-q$VUzKY|+`R8Y<+}Z{6 zRHLUhu^P1LM~g9T6S5s%P8`?$-kHMNnH_@{4W6~wFVab}{$5-Ql@Sa5Oxot8d*w0r_@O;*S{UfgvAwnT@r2@okK2R~YSVjW*uAsa2OT=k z9WnaB`o(@j!v;<5?!zdW8&~702 ztpROku=`8b4WsKJP+us- z^I`qG<6;Kg^|^m~%e z)p?`dp;zQWJIB?6&-NYBe8zE;Z+$I-mMrjB zyY1gr7RI1iS0y^;%X~_uUyXkvkIcVR#=0Zi!y~u44jDP%wXWmnjU(!KxqnF8zHobw z#l~-snx+Qqe_3PmvB2{7$y=@upE_z(GvAVhEyj1SN^0wJrf7?dU)A!UVo^WGt9@)W zr(?JC>sHws%(*mu@5~E*BOk2yTM#y@sd?h|q6bS%a}CQTPB@xhWd7vTBJH=f@Ql(v zx9VW zM#tUx)=Qc3d!Otq9Cc3NjDUZo^3nAzH;x)_)U*nk*iqd;BjM7GN!iPl1}?Zg`BQ3M zZh6R>r@9+1M6}e&R9t)1wax%1^^P~Qt9Klfe|fo;M%w3|7av=gOj1(azM*~Squy=1 zUJkmmGu9-+yiUCgoh`blULTE>+wWLE`qZ>#4v(5Tw2u1urcv%_&y5~mVsm4oJDkc{ z=5&5@hpzpXEzDo_`ATBrYUkx-Dfp3jN$p_&$ijoG)~uVe9Fm$dRKI^BzZ^gLxRv(r zGJ1|h_46a&YPI-W_jT*b^;S42?>rFjZi-L(^sw!ZtS@Mko6NU#8dKIdQU9#{*V$8Y zPy6WXx|XIG|NK+q-X7B~_vzy}s$T!r7J29DwG2Dt-Q4z$gIsvOk)MUwVE*0kW8j?? zZ#Eq49aKAG>0i@hqk4R9e@&CsW>xK4wTW^~8a=pHLaDC7z&D>03@k>J7yn3eKdO1x zE8=;-{?;E1cHa`dAGk5<$h`4tI$mEMTnImRSG|0i(w?c8x9&TeI`FJ+f4k15WA|>` zSE%*i(V_Oo%&c7xExKUj=a%}l>+#zselGZG+q|)Ft24)vY*h7L&v5f<<#xJr_0R<( z`G!w39kFV+@7gaJt?Q3lVCS)prpKSgN5oGY-}oS1-xCHmomQ6xt&8hbCvoqQIWJFa z>uj$P_GGL=+4D}-S3P^#^XSFmy>abScbEnG+HYH7d1A!2gPl@V%<|Azt?^NBVZ=CN z)02^7Mz(ukYi*GldT>vnX@M5gYSXh1Lp07D7KLABe6&gWTp8Av?RL<4?}MJn!!9cn z1%8`(aqZ`i_1-$q-uEhb&MWQGtBtn5+o`YB`%xW_nftT9{&nu<)yO_Qa#pVEs`}|= z%I%R-L&Ap96YKACQT}W0(w_${uWV^H(L7{I^n*SY#`D~EEjnj-_k6mI z>DcIDyEf0<{%)<+q0~h`TyN&MOg?yG#*-sY-z#*#R9iW9Pw}MI9aYvWJgu^AdOg#J zH5)emS>SH-s%73L^En;HBxwy(vMPVwaQL_v8%`%DZQLAo`ihIqrBMAD4=Rbrnmscc zttn7Z^u@9ZGSmq-o5sEEzgHP&4;+p{fv%yE?-=|uKjtIrVRTs9{3ng;s3*M$I1SX>z9sW7pHA%^zyoE(+-Jc=WRP~DnC))ti{|gZ?~HT8#`O1E1%QYR3p^yO3eW) z8gILtF!)Nh_%U<(4jIuVzeoD}Ju8*ZmD$c!_H;b9W0q#Zks-@Gb+oIH|F`-wC;4mR zy`?#Ko}ZZ7=jzj~UCxv$oi&)gbLW}M^{@Lc$&cxxJbbj{VrKEF5X-ISS9E;3D($KE z*z(SL<4#S`-st1uX=e8!*}X)f72Z2yyc+O-b( zr>T8uKX&WmLpSwr1q^O$q`$-=Y|ez&%VT!mQaieJ?-0tW5T3?tBYeqKDVonZ8 zZ!@;xj=P2S{k-jl4ax6+bBdP#)=T-FI5RsX91Puhv__qg)YochEPH{pgOezb zgwA7=3FOh_sXXcM%4~q734sg*LhnLgNC@cwyF2W%OE0i6u>5!bzjMy-+`jj!H8YOJ zeD?qOb8XG-Z=I@Br|QY>!E@RK-u4n%TfAN?8{_xlR!$(&3H2-Yzk^l0i&-}ZmJo(d; z4gmSD*XR_$O|d`nk&KTVAo}X>WhQo|6Z^ zXZ~rQx$mnsUj8rs-LHJ~+E0Jt-T(WeFMZ@&rhjeukKgj)^;e-O{M|44==1CMeg1pi z`KI?h@Sfj){cZDq_m00R{YmZGpZ{0y`_?!7L-Xd(ec#lbpZ&N0^QXV!?dM+moTW!T z@TFfont#SezV@chSMK|oH-G2}pZW7YeBCo2`Pg4R^VA=F{a=0Vi!Xckzs|4x&fhQp z;*WjcOJ{!J8-j~JJ9?S)U-9(_d4HgLgn9Gn1EOU2=~D84-23PM@Yc7y?FVi;^1`>? z`8$>C-t*UQe8vC#n)m!0?z(NBKpS>O1Kho4b;(>1rh=+@tO{g40Y zlRy4f3s3&i{VyDU#s0h2KJ`n_x#jJD^S2MY`QBgt%%7gBK69%3-k1O2uYda;g~xw! z^gllH)_yB%-|7>-c1N?`o+Jw?$*y9_~s5fnE4mj`hKxpk2f0s3gzvLJWu&2 zJp6Pz{50i0S+BE${F4k{yf+=b!SKIEd2a{#uT$Q9VLJR4!+(nM!uO@+=P5tu`ZMz2 zjQRf!%8N(S;rCMho0PZiOUtJz|1{;{v9!EF`EOAk71Q!I>F^tr{~qPR zTw1>&Sr${X|P@Lh)g1Imk);qvp8=NHoQk)JgFL&}4bX?dRV&r#mrLH>D{ zFQ&tn8UBwbFT7~D{0o$~PNn5dhW}&A%ge*%A8`G(w7kRcAEdm$gZx7te>6P&Pg7pJ zKP|sN{cYEuk>}oQ{y$84do>;2Z$6NgZ&Lp+QQp`{%iEOyvdbS#%g(E}KU|=Er~2W~J^mj^$A6Cc{~P6c|v|HEl{^j70H$)Gxp zenx(Q@}Ho*@#1uNm;WT?xkg&P=WWJsro6p_{4JChA5Mp#VEDJX{+A4wzm4*4M!v!D zEy`Ozk`C|kpQ1c^BrV@!__w?KrNia#aQVy9^79P;PLKcP!{zUyyt|o}kF<>6O?ml8 zhs*u@68#@b%f}dgYW&b0-}!78Tk<>j8)oNF&oFg}-dl$yX}iDC(VK?Ee{^!{#CKk)=b`bB-h9iI z>)k&#%n0b+!H%0p_YG0*{;@gPEu%xM-#0W%5Gs)U%x)RYTU&eG6#`@ECkB;r2dI$eEVYff2U((89$`1Z-e$Ecp zb4dByH!Kf_`FoDtkSQC6`MY&U+(Z10=By_zdLU!{dPY+KXYRXc-#OE3ZX0Z-+-q}* zFP$O~j?JG+w-e3v%Kr^t_{4?`8HHm{)pPT?cFujboeO?GU>qK_bNoGwL-MWk!H1et z_MRGi4}~}o)>UnGrJ_C85d+j=!n#6ZpfP z$VU&2i`)2-;)#3Z2M*dH-%EZDzMA};(tNEdmB==C?q&S=YaWmLw$xZ4v*jNT9a>_>}AvA9{0HaqksSBn*a0o;Jz2!kRQW$;P1QphWt%(M!@@S$d69T z8NmG3a*MChW3zDETKStH|0eu}-w_7if%A8T`2F2spqu%E8BV@Oy(}NIM|WRKQo=pb zkKD6-(Ovd8zfb-t&8(%K8F4;sS^ZWx`~=&;3K>f^q%;&j;;XJY?tQxShK^ z!&E(7e{Prh+dJsT$24l_P1=U)h!G!)SYNH+R!Td2zRgx^_s!z-D3CLQ;%ja8w%e8u z;j8R9Xs%Ln?b!2f`~G10{U-mn?#}Zk8NU5y%Qw0IC2WD|_xh6FgOESE3>Qa4_p#sQ z_cGlc8shf!7_Q~t8>hhUxc(0E0`;H&2I^;cx3^1s9Qh!K#Ln^w+@Y(vK{6Wj#C(@sv_VP#WXHD+q(dF6t!|zv5Psnfq z%d3ZTd-IgLyelrYHZQ;pxd!@1on~8B6yKy7xW*Dfe(YJ>Lop zzti(=g7Tf7Z^2KSy`Fx04~qP;NxQQ7f5z=i+)t_UO?k3@mon_h-lE*|U&4y4O?$HC z+pk-j;b>lb`W8MrAZ0WpIIbOM62Diq2P^)hKj~yMyH&fid_^4?VaN(zN?yA<;lJbNGbv8Xv zGI{j&W8$(lTW4e@uSGhfwj>|s(e#>g9L_)3VxQ`%S57<_Rm6)ky}SRZ;=y}Qj86^Z zQ)|##AMinbP)+mi`1n-u*irp%&*_<^^~$qnACw#vozBQXjUx6R=ilkt96m@?TRDL@ zXQJQvcx9$ulTZC5!`*Z2&hf*Z2O=>2Cu_BN^JgqtPU%<6jMrCAt<)Y6Wg5SH%x3BY zuK1Leg-L{!GT~_yO>2wQ`rXm|%$lYG?OeUS+b)ago0>d&$6dI@Q$^+{K7}MoaYU=N z`SrQV`~kbXaegB!_3-@9YL4^i@PQKt;8U-+d}XO#IXtsAWAPq5Fg1BdqeXjr>F!mm zs>1o`x|H$NCCyMv?{Rzv)#6){+^((C?(yUIOdcA)>)0W0uWSEk4gZ$-U8cJ&SkPd5 zj(EkV?ooSA_MUI&odVu-mEvhkT{<4@F{8(B)3Z}L-2J)hEA{m#s;#b7=D!DyHTme& z3U3PV^iBD^-y;%ce7;(oSzU|on+iX;b@=F1aQE@a;BeJyjOSKYP^7D>Q^HLa!vpj4 zC`Bw#$15jMl~h(M^PyhyINsaR7J2*`=ad~;nc8$)5Wptxw_4;MRRevEw7!h8SYiIn^EbPwfa#_P}1Cga`ddAgV3JUZ9c>{1=U5)%bWy3tx5;qHxa9Ylj6N@C9^V$_-k$UHH7*n1 zS%yn|_pNvgUv!(4Mgb0dm$5qcV0B&r|J=WhS_$)BR#^|J=X(cFY7Fm2_4U=N`=5XI zIz9`yQd_Ie>3tokg89J0J^yZexLaE~=3}+8z<~I?>sn=FEx3DX{P@vhC-C$#L2dQq z%u4kkZAplWg4iJCldJye_u#Cp8p zr1hu^PuxB>wYG{@0^VI6Dazl}iQ{M&n3~|8$*IYM`0^jmu?*=!MpoBONTP6<-FSr0 zT2|sa;ziBs+d|a@M)bFZH$3~>>$0B-_->dInk|Fxjf=ZAdcx=Xr4bcyKbFX>Bz{|JD z#UwBPBfp%M$K{{lcDmm}hLiSrb+zJoVAlfrt1F9DOvo@kG80954|M3rfkVj`L9&in{`|OWkLA;zU$JwC zc7`vu^hYnXbKzxnE;sDleV9!5{*M^v9T$bTyUeft%gv6$ zrk!2y<<4hNmgLWmv-ewh8vDOAe;S#5bGt8hezf`HPdaC)-&37gl>mHBpxWMh!@Nwy z`8IhjU?QppK2>>8+vNDTy#!X&NvdqApRC|JzS1Kk*VkuHuGZG0u(pa$>}^5J3o~=> zt6r(hi+8+U+qi)b*ty!eOe&xj>Br+s!^;(X6nOqdw`B=mbzNJ;6GY9_$5(I=dgQ^! z#|VD?^C3BK2!H>aFWbw4yb%89eA%8a_y2RgY|j+ti8ib${j+c6`;K?o^E`TkJ^#9I zv~%OFc5c4S&V@JGIro!xZqvQ-X5$vm9iDp(U!=bt-E(g-|9ze#%F8Wt?=W2SQ^sA7 zpYoxJ+l8Y)cR1fAe)6OqI?$hb=zuYA=0*%u#Sb2-+ojUS^F{j&#oI7T2K;=U@8Efr zXFR4<4ljC~LB%hBeiYf>+Qe?n;@o_fIzsTls#-$qLt1|gGRdOx6Zb1IZpC1=KZRPGF&+hK$LdUMB^G@g9 z$FI!aPT{leed^0!Vf@+fS#DFZ!|f?%SWg*~58$ySq1UUx2=V{Q2>9r>uV6 z``ea}?(XL+&A-CaNA&*paJxNw{g&DSPb7pBK4_ud)1U zb}hehpENzWU$t|O+&O0)eTwn?I^}dP@LcA(!Ska|-*1@S7Q=VQ(XTN+o}=HU9iOpt z?sv#to*!kzU(I~^=Xx%kaZTJ?^5^AcljUUV|MK#ZP6gTrner0Lzs&N2iNH4&r>5e5 zHQ1{pRqgj5{lzl2dwkw-{De4K3!yHIylE5Sl^TX~^(B(@RCg9ymv`^v(R(mveOR>= z4;(*mWc88pd0X%+yb1{e=%;-a;r^ z@V?KY36@VT>@)YQ2J?qauB*#<5qv{EoWiTL@Gkbf^BX4LcT+OfAULr)Q(eM1^6j#8 z^|sKx1qTnM{Xw59NVF5F&mIlJK1w-n$CEAy< z8V!3S6K)W~?3Z>Y21l~aGVZZl*>{_rM{f%%j0sM9I76hzT&=ROfB|?l1}+-@1|8l= z`FE#;e|7p++?ev`$KKzwdOXjwyZiY{pMU??w;%pvx}MMdr!-GZ7AFo&O~m&nIld1) zKeFfiXD$EyeVsoKd_2EEc`Gx2w#fY6X*_>|;as1`J56_gf8g#OUqpF_>67sCPOfvA z_!C2nDW>!wF&z!`YE@RXu$B#|lTe7zW5@$45oLO76yYvu7`qywjuAt+J`6C+- z@?C-WvvBfOt|TwWO5@Wf#*a=-9y=;R951j_5dP=%^`P@*PkDxGTw(ZZel~vJu3tMb zA5$Xr{M@A6^V{fcq%np5jV(X!1 z=Ht~Td_I`_eD$=yQAxR@63Mt*e`6VSI0f|2^#;qcxS%Szfg1xXSF!5xp-MbIVR>dF z#eSju{b8B;>F!s0&W+i;xxy`W&W3B8Nw4$b>#E?fim&`8i*Ig8s$4w(Dyvvhf${O# z7h%RmDAU*UOd9ho@&*j=;t&g1anEK8mlSjtYSy|_(K$_NPa_Ef1 z9j>0l($po5Fgagt-rTd(=z^nIp?bU$tBI4rxoU)IJ{b0nhnz6r zo^qDSTf;oc+q;xUrcd-9IJsJ>P$~2!F_6iJcrlGhT@_6Wg9Y#>B1wlj9XftjNK+ilxcr^JJH^oG0$H>RR1z0_gi;8q{DpBwq2UcdM1#<`ssI z9%rf_>-Z9ne2sAW^Xcc7ILbVe5xSdI+yC`&T8|$dKP;;`OLtElxP$W=w&gG0!Jk_9 z+6V16s%+ji{Qlk^sbWY13S$^$Q-$#@eXxOD!EP_OIrb9R2cms5`~$8cq)!>>p4GVwi~;T}S}UE-RWK01B^ zbMUJ3b^A>NFpuOOyphDzyW7I_j6?H~l;c?#?#*x9ur&Q`!SxWl5W4Ypu>P!2rnK0F z+*bbU8!MGW{qkX`l{9uaKb&S<@u|mf%>!3fK3oYs1=o4UC>8GSz@bCqQ&XkG<5P!@ zPZm$a4cG&BpO`pyeDcJ-*1R=u2(+ynR96;is0Ps=y%9ym)dmy%LMGHd~bybf0!hQw#DRoxkFKj;TKyqcj%6IU- zpS<+_zs;T*vu9@Mftd#f)lXov+k+tcyx+;1;!Ae-p5v8N{7)6%U$DXUXyeP@b?N-w zDSuu?LF)?pzr{xxPw^+LKYI5{Jwn$8GnnT!Ml9b*@o_A0KV1oLU#%^N=u4qrDl8~8 zpK?bposTQ>z)u`~`p*?DT=|%tb37-!4*i*DxS>Kgt}?!V zs`S+uUo*2lbSL{R=ia?cdAXnQ`Fh~X>2rB&hkT1pUVF*+nsvt4yGrTn>|lr6`60&F z$gEd)`J+8Ib|{}{-rEv2_Rowl6u#fW zg%~COw7H)kzQYb#CpxxwVpwK5G5& zkBq-P`{kAQ9_?$DFC9Kx?xz3J%44!!B;{^|?w&u{vxmcu!lm2Cxdbl;##O2{x zE}fP=yyVzczSfrNvaZpOaT?nHGV{ar#OJw7=L;VvvG>MbrSE^2`*_6}%Dw;Oa$on> zraa25mkax*H(T6%zkzcM_nO!e`_ZF&hxy^x(e3GH;(H>)yFI~Q4^NNBo1?s&ct0sB zLh9K|c`G3o-EF4FU@C$9p-Wz$onyN~yXT=LMt*80G2eHp?^_IqCDeF7bYOjLQFe29kgM#mZZ7SvYvIM9jJq$h z3yvN*g8I4?4>y_h+x*M>*99!D#>my=T4lMO;A4}A(fU}`_10KH0Ux%2&NShbVsQ`@ zV^xd*?{9C%z!%25bbu?EnP0{u2Z7@xna4!D2wV>i96mCs!KO@(x0%>Db*+AE;ecz< zwovS^GFID(n6-SrNBC!f?A0lb8b%d>f()_gZ{6)a^f6TOtSag<(dctqDd{*LJE;@6pFS{t4GS@!BViTzCDGpYqhFeMRmozv`=>{xx6w zFZMj+U;eAF`}%MAMkXhaA5wSt-{W~hw%=p*e)zt0{lCe8-DB5id!>2A&cRmNpX>hy z{1AIw{}VF$i|f z?0?N=^cO$0JN>eUqFh^fhRFHxUxj~gbbi|O_J1~`Ukj)CN&eewr~N(e3vYkcgBPCp z#OK131abXO$mlQsd^+6b73%l6Wv`B;{%f-Oe`a_3L+JPXkvJch(ck#+?({#4`lUUR z%>Rh_`Q_%n*eZuiSdsj3{ht4>f4BMny&3(U|FQmE=KnLHU-HGzXL|nHWJ6z^G1G(t; zcKg-V|Dw$CO^8e4@cIwM!H!Q^ddlb0`E{P+E6uNOhJVj5i6`z~QGeq%cc=f^8U1l~ zyZyhhJN@4R{hmMgscDgOK>b~w)eZkV+WffzVO+nQ{rznB(`I+)Gim#;k<7$V_$_nq z^PJE4GhadQukj<9|NdS!*8e-Z)4w;PU*28F;rbi@es}u66}misM6bUmcm3V&?)1N# z`X!FXBL8QpSMKMlsXtZ!tra3>RbqKDu2?;d8$`l)0d_g}v3&(g#Z( z-v{vgm9zK9g5R}#E%NMPCZwXkai#bF_rq_p{5@Gi;~&@md+F=5!Z-9Ox&{staMZok<6z}MyRZxH1F(e(B{pVmJuo`)Rezfb#f zFF!*4(tdj^^uLVy!^cSf)1lw=|8OFIr0sFF?SCYZKaYj}mnZV)vC#i9=$A)^{7Lz*f89R(i}C3{VfpzpJLmti zo%?YERK3Oj^m>_cM#;yi-|w%ht-nM4A>w;1?0*OD7tbF#KVJU9QD%Nb7t-k-d6f6p z+Y|al@8dH1%YVK*{qKZ+G0D?#O-6rzm-^q8(f@>u{?>olo&7(G@|Lt8ms=0d|KKln zr~g%#(O>+pyVJi3gOm1qztQb){kPree-D&PmdpJm=c`>l-<{Ae8Gp6Q=N9x!{`!`F!%jb_@M*nWh=Z~^{y8TzXe7>0arEE(3;WYaf?Z38q zx%)SEZvJ;WpGSI!9l5_u*W>QzC5ij%vC#k0ME*P$`d^dKFL`wT(@|jM_&ZB)bTOUo zJv-!2{%_O%Oi2*Dmih~DxSIM?<1aIncm~!@XhcgqA>(s%`_FiCLsHgzyq)n=4^Qru z_UCVge$f-+PvSxH^l<&bHM`S)OGdx+3FL77?I-R||Ncb&h+avH9IijyrT#J6FL|T+ zBmdxV{rzi)+i$)u|L?8T@6R)@Pp_8#+o(T;DUXHy-*uV%$&c(Vf1Z1p{MoJk@4ig_ z>{kDcnf&qRfnVR^b-T--(MXCKbOd#~(|8+hza#tAu{>9FMP1e?Huu{{IdAVv?sJ?!QuhXP5f_XGXubw>*EMXYS7a zi&_25QP%HS{M(HFt6e_-KCAyKm(PE^jQ-u0&rh*@dj4PS^7%htzm(4qe{#Os z<@0Y6`l0@+mrv=yOZ^$*Pwc?6E}#F9)sHmD;q}jM>(Bq^GWvI0K0lqw z|EpC#Q_uT3Yzw-yq|f~Sm5DEJ*%h?E)#~ZSzfRZJ8_IQ%xJz8)s`NV z-JgAy(jYb0AwQ(t`=8&x-CLLs&q?P;V-WO;em$A_?fSj^$NI;1r~mqle!qWRf9KZS z=^shtk0jWikFGzrOZ_Ws?|S}t{)gXXb{Bc}%x?IPD?H!N_PXo${CEBB=k6|lY8m~W z|E|CBJ-gGtoX8(Zvgg0+?|%30^w%@?d;R13JKwuI{g1=L<(2r8{FkG(Zue!JYMe5@CuNd5HAOQP6)OKWyP6p4&WA9G@Ea z)sJcLw+a8l^gR!{egJ>@N2zad2Yq)!R|$WGN2zaO2Yq)zmmE_5@F)-3 zSD1fW@GI$U-jUAVBh(i@N`0PxS$!qwDdSJ{46p|^7JjJ|K%v?zgYLg@I9Wx=MA?{{I?k4BN5ZOAA2CVz7H{_FT|*%5ry%ss`EWez9a*D5?KMJ7iAwjPn=| z9KAOz9-qADz=`n?TR~#~-PA5 z@N=t?rG??$T};x(P@FF_$d{Q?)?IcYxX(5uu(nfTe^y--Dr-Sy4_IFzdc)XYzr=Vy z#Ep3S^dKqs4|?u}NB5y?OYzTC1!Gi8p)Eni1|ZlI?}nvyd=joM8!QeKhI@}zPGYt4 z>59!Pzy5}OqgdJ-h#tuiIm^LKR&GGi(8FBA@E-a2G!|a_ymNP#b9PTo33z?hgKp9p z#_NDxJZ1Z9+~yHx-1+gl@J?)pD@%Gk`vNiFzEPyIZ9D9X{O*;R*`-RjRtuMEGxG^m zvaWcH`^kiNuT<|}ui&fMY8%{XQd%&r8%l@RWu<}*oUu{2WltdX#+wFbH}HoatQ$VD zx{fb%&&%ePSRf1s35pXwJ&+VVTeBAK$1AeqNG5>!Pl+@D+z+6~g3l}2mtn!0SF(;9 zMIk>rO+yRUK2?6@3jea9_iEWVbdHS2oP#H;{|V>Zla!~OBa<&W=ZqW94b!*j+%i7n z+%evA?izQT+s0kzhUvfH+%x$_=jPMYzL5h=U*F_=obzV?UgyqJ)c=@skLh)8Jk`?c z9GZN?Ik5Pe&Y|gVIp<8?b}pE_<6JcEI`_<;o^#*gyXf37|04&PzNT^L99(DVaW0#@ z=p2~-MdzGx!?|pH#yM}i<=nCSIO`mlyz5*vzTn)l_=7{Vw{5(~xorCOI(IF6!8xM+ z&Rz4r=p2k_dN-W&mS3AOTmGMMF7tXgx6J=J=bY&~?_4ndedo~RBZrxuf^q0vG#+!# z8yB6MwBNaG@(t(6_>6Ol`R&{^dDl5-@}6^O+;F+wXOn$++ZG6$WXZlBOXZku;UUJS| zq2%-lB8cc+t6G;Tz5clb>-e8gDtb%-*xk zeUqPaZd&>1Ik(M!-#M`K2NO(B*W@|prll`*ZW)g`w=I1W&OIwHW#_i}-*E04H=X&I z^wax;K(BX;@=uf7_wkS!|x^kAbE`ZVRDiDGvqS)XUP%y z=g6DnKOvtX|2(-({vq-?@-L9jlRrZ4lkvR-wKurS?0+A55BUq^0{O+{BKa(Nk^INx z2KnES&yXABv*bS_pC>;|zDRxvdCw8E@3+Z&$sZ*b$iGOQCZ8uSlK+(4ApZ!tMgAQ5 zEcvD6^W>M2FOok`&K))Teu*5CKSR!we}_Cl?vl&oSCBWzKT6&t|1!Bn{xNc!{7UjU z@~@G5!`EBGgH>95?&kLEc0D6gf}+ z1i46lC%H`iGjfCc9`YITC&_2YUm|zO=g1exTjXHM>;o;-SD{EqSC?mc#&I&oY!%AAQJd>p=nFDaQ1+32b?TdkF3*Hk#E&V!RDO6I>* zudG457O20uS)LawbEisc@*OC1uPrU1%Pbm|=V44`qa@#StICjv>lOC}i#YbTTA7&_ z10*mGjUOKa!dC#5&0noFGe4VReAfVvWcR<$)G&U0Os7N$zb!PmlWxrus& z@v$SxidepG9#l^i7mZ1cnfYOit?o*ROhRM{cTJ?~#s0R-rONVbWnO%%Nm=)m3ZC$( z@W=$jua5X<;D2Fh=43q<4dP1}o6;lhG&NJ(a?wR^Bc4xgRT%BECpt?ZVuBF`h z7?-!IFD`3x_iCCMKIXgA5vlw7TCHf`)5Mse#USoUH|6!&rRtn{nMYX=YjB=Je#IMI zgXh26r*y|PLbPq zu-Pe$Z@|U@mTI^`ka?buEBN#(9uSpus`)VNliFX=Z-EB0i<2V(0L?A3S@ z`!=40lH#3*rfx1pvz1YOL{(2yamF2+pJN~Bq<_8Z65)mOCH`b4UA}~kRhS+L_qgs5LCQUjEeKSv zek9Bs5iKrE$fuvxFY;C2dL^u^uGY{!wL|Vu?6Pw*E1Oy0NO_#a3j*;z;3KTxE4y&2`_=Fb>z4_bK*##3g7KR zE)SA6Ux~1LePv^=Qkjt^ra1i(iD1OhVdDT9&8WKb!9#BRFFGi!74tJzqNTUHZ<48w(5mlrD%Au&tp6mS$Gv zqpdjX;+rEbZcs%_^CVulS^Y2e;#+ixSv}*QSZ>!lX3Vczok8TQmfYCgLwh*v>#wSu zt9YVnI*|?$#O}-@=M}!)3s281t;6(zyS{shE3Vjm-O5^$J!~=_&vN%yi{yeL17=qA ziIH}%huF|cT8F87B&jd58#T6148yA~Y8%)sC2E*G4^>ucp%#Ao)+URJUgDYhT(z3L z9+ppot15E557dh;`MH7&tIo^y40$8VrA4t?&}$mYR88f|td9w$YOQ z@Jz8ASR8SEw1ofAJe8!gH*mU{p%~} zC*iI45#g8ytB+&3#02YbdE&YlW)H&S?!;3fT*33HE*=-ETJP1d?>j1cY?>{;;U9_g zvYEWspchR_$xVr9@DyWlkn5;7e}YxDX~lO`7AsZ=m@$J#uH>HRJhf7L0K4|V&b382 zE!z`P>#J?K2z?S^{4^oQwU2S~!5=?>GkFxd$9+b#czwm5kSM!)i^OG}3Cy-i)>mTt z^{M5&jLq)xq4Ln%14}1mpZ!H^oFgjt$83pfHg}J-j}W&ZV*j{KEBc+~P@A~1N)P9E zAilfhEe?4Y;AX=h2@*AHZ4&4k$gTC@=^wafZ4e*HaIw*FxBK6p9s`NFZ`YKqFM|G) zo*?=gFW~rCOJ)EE!KQQJTIDm&fyvv>MU!`(%f=U+BjbzC4ddK2<7*m+&OOtgcP^NH z1?QIeFFNPUf7!Wh^2j+f`G#}b^gZI-Fm5{c&Ht8j$M~#s*SPDPH@@IpFuv$qG#EK7kLy+ShJsHCltJ>}c&&!~SoiU&=7s+ot>?}g)$8X6Bsl!*%BQbaQ z!D#xSgFY?^jz`aB;wIW}bCQIlyF5~5%u+N+_}fR9Wr#!-CRig+G8$+}|D}3u>2#%Z z|N0DqCjAZEOEaq+NJz==UrqbJ-|~R=EY%mQ))_JTV49dR3LC8tM1OQQXXsC|l#M$2 z-rh}@_)_u*YO9*yguCat`>RV|l$YPbYtgC0k>SY5=F%+6=%7DNxupepRJGS99RV0bC(03;ncoLVcb1~{x(p_O*YORw08O~ja0zYv)sy=rzhxW<8C1phdgi3;&7z&-g9p;Q z(@tb!R0p20%X9bu8bD#?bY&$(uC6bwTcaBKP}rrdBi&n3A9%;l`&3rgrF$)32&>Ma z!>SSbJBI2C?lob6$bC-19`6uwfmA*t#0RKECu2w4#3zUvsfj z`Wv;Sb&m4jdjU3{Yz@Ig+c)y&v)*jh?p>CK9!3l7D@v9Xl4a^HgKV``bZXG0!xU!> zV#awT@dm-ua`JEc6rZobb;=#*obh?*(75m1eX9B&Sz`E}>D%MnH_khkze4>NopU+m zMd!B38_pf$GtNEZE$4>uS?8wd>pFK$-gEAmyzksM`-5fLUohU|Tr|!*myIW!Bjd7j z!+68FW88GkTmEf17ntA9Mdr72nfdJ;Sb9cQXm9>2HUGkxO!K3VlQoO5=+w44jZ9p})v=Ug_t^Vj5&8rUUV+n{j=y?Hr{m3S$=LghsNie zJ7&)X=bq`m=-fBnbK3L6^yi%$#zp6XrDwxAu=3b+?pl0X&VA#KbI-2#dFPyk?>mRa zBM;D?yzw6AvT@$I$ok8F#n6rMdJAT?EHhJ(6?J1l6dz_nQ z|Cn>f{Fj|0^S|lbGXHJouKDjd_l!sW4dd$@k2x3Y{+f2~n7xb6ZPVXy?ie?nd&XPN zedCUEVEWHHM|_?;=dC;jKS=vJ#(SK*#(C$4g`aTl+4Y-tj_iJkoSVj*&Mo7XbKlDM zS?9pgf6lpJ+;c7(2R}r6yB2I)hhe=8RknXw<*W`UFCD+GvprmWgec4`Nir# z_YzCbi^(Aw^LtfZAY=SbxlDcsd4r7cJ(Zs!zm?o3zk%E(qsy=UFOV^wr+kszAm@I> z?0Y9UBtJ|ZBV$-d!%vWZggi~g{A-m*hdWH3+H+@~h* z;E<9rl|V1-DCsm;I$^?b8A*AfC}gcjRBn8G2QZxZ9K()gtk!`}%C! zd%`{Co$m79YBV*jo4m%nL>j|(cbh~D_r$dygc#;7AutYGTEV;ihemI{MF!tWGng`m zm$E5$j1cMQBF7ZPfRtR`Y|G?3ju3B?M>Q0!dP&AtQ{fOq3&mgC4r z&l0BFR90aUr?bcQG9H)5^9nNIF`;%;)3bw}DjS8bOUdm@4o#=!)u0^V@}kfnscRhW z%h+T7CB0VeF6Uo!2JazO@p>EOBCDO(FVZpdl3kSKT|7*ly$^9cQsM2Qs@*AfE0f#Z z#Y9xqHJjNmM2@!uX*;ZNBrf_uF1KbhI(kzn>xX({xn^YI!VHxsZt!f@rTj}(uv%M> zbST{lVpe|1_z?bb1tF>L=FxqZj8Ej3iZ7O5S^8KmQrA!Nk?wePk%A5;%%_Z_Q+jQ;G^$i}}sbE@Jsw^)~z4{rN({Fe~H^YqyMtEJK77SJB}Z_yJ&T*v>%d;caDj=R`O*aw-p~TOPw`%JPiEB?pjX| zcgM3RrDwi!a6BrE$I>+w5{)hhJcg*gU?(zG|0qfpD@xDlO z*BcJa64!5yYfFFJ*p~Je{Yw*OR2E_+Ssue=NsUcn($>!o4@>CB^^@ii>!m?*)9$f( z8UJdAL@VyH*OK2>F>CRRT{XXp$FLM7TUo$vch|O?GnXStx>PQ+4zyMnTqkp%Th~Ai^Z4d-?HlU zw0NrZ(u}P3Lu(t`Fb(np?lsJ{@P=v}U#2dO-3Rxz>D5asEmq6W*q>GP@yer&yIyk% z5xYx?8&b?JBj28%!}Y{jl+q{thaFmWSKu#>ds{k&>s1?4dLPa8lysq)7hgcjZoN;E zy&Bv{b<7o*S(Oe%$(rZl749;RChpld4|-AB9+K_G(* zoJM3dtGi<=k9P9$k0vDHZasDpL!ykaL;|R{Mpjz!2$#iA5|)=GHECqZ=wksvI(nR;&4`T#X;RYZrU;w z?xVq?8J|=IO^A{u(pE@Xjf=d-a+Zae>XNUxaQD?z=?Mb5WAR9o^6%?Wj!hm`dz~}Q z^?2QiRDifW<8;XS2Q9OBZmdVPtVIfp&CfbIIdvjLka#+uy6gNrDMU6;YY>&Js8B0( zzLrPjOJ!72i#QD{Q~0A9892c@8!R7*6(WRRFVD*4oiS>KA(?%F7GBJrlLY`3nZK5j zLZ382!Wo%t#uknlZ0^b0Mf=WiaFcUs2JQiG2+3r?8t!CWR)uwnx`Be+BoZ(3$A+XO zwwfnFBdjlB!rKBD$H4^)Yq%1DI=HfG;BIB!*E7u37O>1OUVas?gU~EdeYXC>@08^F z1i#0`5L<6xwPu{}C;;Z}p~WYU!nIG5UwwZc&@>JnvG)%_(Rh!uhuh(N@b247N5+px z=MJy(Fb^`pr8!y3Y60Cn?&!F_!nL9N41bjI7p_yzJC{e43(iIJUvzGoyzJbt@R4(1 z+;GktH)FQ&E$5c;S?8wtKj$1-{O6q;#uuDh#uuH-#v?z*^tFw{m@U4%b7Wj_?i&}K zn@`gGC_9HtuXD%rH=J`O-*oPpyye_8eQoEqamTr1+;#36_nceCedmVR8@!U~?OA+# zocqRmotwsE&JEKy;oLEO)6PBPMdz;ZhI3%yH=T3FXPhJBE$6_(pLGsR-gWL9_nh;_ zednU(Z}2KFzosweTr>`y%jSQ~xnTMxoI~?J?VK}SbdD_ihI7%vZ#uV3e#W_NyyaXr z|7V?X?$$0{Id0A{p8jmHH+fcN1l|2g_!Aa}@{gd~`3=e!$U)|q znTs%fhNG*ytaE~Kb4ueIqXJYiUw>icZCleIy7E9 zVK4iX48OqFUxs)V(I6~Uu?7XSaFxQ=TG8IK86a`Y?vu_UqI`|;}d_&*r`bdaWov(0eObS zoLBQqt{dKD**u7Uv_r55isVGSvdTA?>b{=NuS7JeSJ+?KOFEU&+{3aRmDjPCmN!sE zpK)nLwyJWLffHF7kzm~~OgLe-%5C2syEGD?F(b6(1-9?Tprl}ZjO-4jV+7(wIZ>Vm z`E6Gu!J6CzC(XfpiJ54%gkI0wqQ)%OCmD}&BEw{bbJDg1%jFN`dL|=~Oj__lf*9&c zCsXpNsk>Ba_u8PT>-T3UKYVS*%mNz3b|q$((eq!gt=B`j-l49_UOkQF>6!{#|FVEi zgDzx&{>Y8JwyU~r?$EhuFKjaIk+r6UjJ?PW_bD*EUA%~^mZ>|NzdB)s;oOkKWkA2 z9g7Y2*?#wZ28n~}u&dbt_ zciac=s}*FvBwn%~{h*oC=y~ae{8i~HFIRPL1lFr__ZnGUG+1Y@9W%d>>K+fsgz4}D zcd0M^#Y(bYg;Dpl8aB!r#47zL%lXFT$gl;@52I2W&1|9R)W=_@z~=D+CNGx?%((c~M>U6XG*cTC=L&Y8UJ z+$Y+CZBfB8E-g;#%G)Z z%fGYE1-o8d=e+s9;9M}i=v=n=N8aZ7WBT?uN6athws9e5^Ivps7?+)kwBNaGyy+Yn zZ#g%N&pP*v&pSt!zKhOMMia+8KA9;v(z5iRK2r|K=+7zV$>?7y7s;s7lzqNC=JP5q zQjY$oa)XR_J<4au7_3%4OGdL?`5gHX@&z*5nkpapDYF;-ALTt{%nw!`Bcng2TqL7e zuDnP_|5%jr$z5`je1VMl*XIAlW*_>m%G2NY46PqtLC(G1Mv`NXGbr@*)}Y$(0-ApC$Wz_A2=d;n*Kv+{VlZ zGc0qcA;EXvpjvlWl1Tu`ZThU-SWYD4G52&%TuRQQ zXo`38=PA0R94Xo^_Y_%%ZkJoi1gIqbW+C%KrSG^^Dzo~N`{CfEujwEwa<y+LSN@EEy4U>g(+z^OhI zm3Ue}Fuxq_(^vEub2_<-Ef?2h5Ci-EF5f@g9alvnNqI+(+J3i~#)rKYIcGu*i1%|{ z4O2rXr~^?ZC37vGe4d4Gj_iyPo(kIDcuv~97T;GeyZ?+-hO&2J>`#`<*pvoMth?7{ zFtH->0^HqMhsNQ_v4OF_dOaC@;2-YT?Nq-ZAqjW?;x?F_GH_p8m3afJvA+$}kK8QL z^6mcRNHZFWu#YO{_$-9?Ln4JsCu+!4gpje&T?(B}JxXiE6dbT*l)M#EB$?fx|T0=@oPMN9D;j0o>AUqx>i z-Io&?pBO$2ynN`h$|r#!UTN4#-GpsHXm)gU-#$vKU;9MSn17%3ComsIx!~L~o_6j%N#&7q z)41W>GHyDzjklabnKdUM8mobB?*|Kh2m*JCf` z7|&52BV#;Bd4h~;MR}Tx{;G0B#(0kMCK=-|$}KX+Yn0ED(Z5yhlF@%vzCcF*QaSjb zr3d3x7Jl&kJ>@-=qsyk8Cu96ed4e2~eSJTksVevN{TM$|F4I5CzOs*BU_3-Qq8#I6 z%D&znRlKsVx5xO0@+SRb{7c!_*W+2H?Cak#UZK22|M7+5kMykVAUHgsH+Ee*%5h^F zelfw@yQ%1-njcXitHY&wq`H{Bi|TS~#Mj+<;7=Cy;u+wA>?(CKnztpH$_SqpQ^Gy9 zY8~+P7yZ(eb+gheS`!tXJ>r=fx zvrzF_w&p+kv>&t&&~Di@r)Pg0(C?iokUf$^qu&iIUT-+0S87*Ty^opZ+L zoFlWR7qf-$J2y=}@?qMWH~Ajtg7IGGqVbq>*?7XaW%{O_+s2E|W#bL!mWAJRZWy;> zHvetsrpeDa4{~0Ap}yDrI8Qn1cV&N`;rXWQ&oewvEdTgCc@f$7tHJX^0LiYVz zP@k*Z$Gh>oQ1<5qDq3ZKKHzzv?9T(#|H?jojQ+K9@H4y~ne<_|4y(+q!Vfac(G=AG z7>Dr(fCkW7WVpL@_!GN;XpH1|$U`_;QOC@2$e1$~wYVq88^tcQ$17&0Py8hxVd^hY zF~`iBS22&Ndii=^gA+5(F~d9LHfbt6FCDH;hh>FN?=ag&zB3g)Q~< zpmrTnZ?S(?$9jYk8q+dW2wSn%ZLCGUmS8Px@9#33@FA<~ua)10UuOB}KSjCdTrggA zE{>>t!?|hUH=V;LtNe^}@Koh3=a%{JIOj~>joHFqaPFJ`i_S%}C-*Tg&*ndLZW@m{ zm(Bl#bN@O^pL5y#FFNOq8_sQu|BQ3axa}O7{*H6|Nvi*xbI0U8=e&gvK2G~P=6{cK z%Q)}cweUsf;*?b=JAf{C4hJe0}H0!jE)lU(ezTokNq4IhRd7 z;hZ;p)6RkUUvw^*yy0B5{66E{H+@^qIrD$kxnus%Ik${^&XI-hJ2x%;xnE&=%69$t zI(Li<&JDA7I%d)f&Qcb!{S{w_GTjYoc!_Jy?1Id44X9J2g6=ZzPg zTbBNYbI#;V=f2syD)7JIroj*&Vku;&N*k?b8cJugI}Y)9pjvH*Zhah4YTiA&PBU^W6ovcqH}@wU(A-? zP3NBJ-*WC+{AXh}eO>49E42RUIXBIoi_Tq(?slFyPKA)h0^l-wi#C^`6)r3d2ys^9lh zMEgy7FXedutz00#%jM6r@b4y1Q~n`xM8cggQ0Um*W9 zdE}hM{~mHk{srPnA|60K8@*rr^S!?7Rn>PX?&KvmyG!qDld?Ko?IsX zEIA^-hTI~*mfRt~h}o8*_1TV#x%sk}qRc%E{XjQK{&7s>A<=YGrVMgL6Yd&wUmPmnX! zQ!rDhui#6*m<(bgF2)$@7~I{7fN$5C~1WF6ZeFnF%R>XaFg#WOIK_T>+qMBpd%rZ z^y9mF_?(Qo{GX7?br?vdtso)q8)UsW| zS$7{0w_HicF<>#&9=dO{$KA8`U}8+Zba-N$esiBXKtXJmx?|TJy_yMo)O~SzX3hen z{d?t+^^e&uL-p5DBh1LMi9voqKRzP#fR3_ba*2%^Snbt(s#w$5%4!*))hp z2djpZ!_?b_gk2oRiuKB%)uAH?4$;7r`=#uca4O%yel7AGj7#Q=yE7$md{&F;ptEGe zz}@t_Aa>XBH`Io*d2G_Z6hJILn!#fYliCJ)I7l`KFZ%$?!$U$R;^RnQ?9Vv%nRWLG zlsmYm!c8Gctqd98J=pSR;X!kems*(ErO%k!DLtuOQtjNVH5Up*^>mz}=6-rKD@wTE zdHD8GxvGg!{(X3avkGsUT*vn$4_R@p&fz;@GbgKaIxiFpq|_?RQ<(E7t2wNe@b&k7 z`2QA7vKRNDzW>(zMoC%=gNJ?cJ8+Q5OAOgz1lyEwa}B7J_P{WKj5j8$Hem_x4@Pen z3=1okTDxa3rN`eU;e8`M8>Q>^QcIAe`gT7W9#yrz+(~YhB6`I=p185yhtBhomohe4 zRW|Wi;Di@9UDV?{Uh+M6nN=gHl8ayir~~)(vqWEpN$%24Z3zGh^N0KSe`1e|LAWg-ONpo6jsyMdX-kkZj zTxH!Rc8z*K{3J>T#+msYbt}e$>&f9}%(Jp@+CPLXlQ7>TerGuN&ROh3XU6z@wb%}% zMGkkz=hafz$=$`Sq`=+dqF`zQ_`|)cNzg5UBwV)4i&w1At>K$xOW3a&>p?f>Fl?^& z`8+sI;gY$Hy2*^a2+m|0^hi-dBTg3Hx=BehArE;gzzX$`+iGD3v*?nudUW0vqm2F0 zbg@?DaZ(f81O>Vx64S%*apcsRKJ$z#Vl&EkkvKUC`nbQ-1GV)fEUQH2yMW1!a7U?M z!#1Q?W+{$KGf^aE+g3WuHIHVoL(}NsI!iqk!q-w2D}AK|=tgDCt(hfR#rPoBZl07S z_SjoKkeA`IR8fMVe!(p?&;|7=IhrQh(Y8Ky( zPJA>uIj?CacSIIn)1-e(gCx26a(4&+ z#|}PE`ZFcl>MaPI(Tve~0K&Ec+aeK`Zh@SS9yl^CEeJe`;|(Un9WzKqmpHN68TwU$ zb3Gwn+gKZQd98~1*&Dc9nB87(ZB`0Y^q+K{C~Ex&=6^7vyycuTKIxF`K=c z&N)k8%eiCnwsYI^@0@eb*UefkEuJisL-GiPS|5eGKP_~GbN9-lzU|(&BeiX$SHq=Ydi3t&?yGQ{u6%PJvkmA z{+Kl))^N$JiRF@z(m+`W3rptFimves<^z8NKdx{3=KQTC$tAy7j3@1GIVE}q?gLAt zzm0uVE4SRlX0j;9A?_9QpJl%xXY`pc7Qd=329fJH0=LxEKny2)gvtlBbuSeP#6KGP zb!os_d(;F-eW=z9x>71&XD03!S-%*oQlLb;!O@_BF98Pq*MvY?oVd3#@Y|ypFC2ATDH>CLTRck0;Sj!XlK6O2h%4Lcv`bP1G+I{}!eC1Rq->sKUg#P9? zuY@@ys+}ca`F6N3Wsv=RWZxOT0FYs);N?0d)7sF0XR;+Ph)!eqhOB+d7$WXTC%JdD zgU)bjb0Wd(E0&XJi@WLSGudCD-MEzL^%~Mok$K*_iiqt>MiT^$k!Q;9?jNzfj*Krj zm!G8akuOkQxK??ubJ4iqTsAH`=S^Sa9GQI6xoi4c&MotQ*12K+&pQX^|3b{>Klo$X z*EIh*=eBX^99sA>=c0w5a4r~^o%7~@!?|qoP3OMJ&p3CC+s>i+Kj+*rdwR}Y+LOu~0Ct#vXn*f-^F?>h$m>`m@~@6op+61N<5k6&h*J$wUD!df6E+1zbpF5%4Zd;-P#bbKkH zADm2d><RhKy+=v3mpJ$w@Af`uON9E$#RUm>iE}XM zh?T{dYmRoIv^F^S2>Y#lh_e3w5_TqVRTb^ye@>;MrczmMWw%@++i*^!ARJ2O29!TM6=v*xf!!n{2F}+`FxVN*r4XFY}GY@tk?TUs4cj^?;Sz zx{G=ESZ;NXE#=`4pI+&})Vvun);9g;o@`s-PoHZ%dM=9OxJ-lg6|hq|%)O)}djeim zLR)DtsOm|5&zd4scklUdGBJ8}nbXiC@{gzW8`5WIgNnU>`MRPKcIT%Qb;SV5On(=qx2%m0p=>@ zGWK7q9AbH$a+uSDpQSuumd7iXF()clF$a|^m_y1D<}zhqu23%H^s1F3oWJeLiOluN zRqQ`*ujH?WIYGIWIZZj4)5}+`XL(o|no)g~d)$J!Lb-y|uU3v{|J#+TB!9{QmcuWS zzeG+y;4#aSm6MsXl!MGOl(RVgg&woKTsfKL70U6P|7ztB``@k{X0BHT4iCRde#=-M zP>wJsDOWHDm8+QZm1~&89&`NV$^pr*ay{2ijdCq>opKg4?34V}a`=G9oL-`Gko~7A z*Dz-&*Gqmq=J>+O_T%>buxaM^L*(;?*9&9cL-I;toF5U_2;)GJxK0?yq{L9q<-z#? zaX=XND-$OPhlPW}i-fa;ar{mGX9(l`i?~b}=QG6Xh35)a3S)Oi@@iq6?-ADuqrRTF zK^W&h#PPpz{&D_8toyNV6HXBMJmDl^+z(9tgTf1i^M!FfMDm5gw+pWqMtwHPD}_-X zPFyXF`fK7^VVn;UHwaG@j{BYSkMkjtCko?ym^dhm^CMziZ^S_yalXiLzDgVx#;%Q6 z_fO+|iMU+kI6oz>5ca)l^rxLg*kKD!7HE!P&uF4ces%#5Wbr_Ij45;0uUpMC?u{)( zL;vW}t~Ihd?j$M5p>bz!b|G#)>}7{a^uy@Az0TIb>Vzp>OrWH6oV_iP{MmczNS~Q9 zI>S1M?R@LCB(r293`-rA-ajRnnwcKFa&V^IWz4$(C@}u#a5>L4RBo4BZBcC+c+Vmh zzbDP`RBqj;^`@~ljy-_C@HVb_{!qQ@ zx7R@KsTreEhoui5KI}ireI&WR-1Z^!k$m1{?b}&P@zdf2y#+aFjety?H*#0A=bV4` zuU@H&$p4Vx!>`1ve*If1{qFe8IXo@6+czF3GR5?o!VIfx=hqo;&@J@&OC2_9Bwh@Q zidEbd>OF9Zm*QzG=LgzYZfBIbH^62%Do1UqD&b??=|QkRtV_MWg2M4L%A4Vxss_%# z)Up3dApgP9{p^-wd<-04loP4)G+lAGGf@gRGIfL)j})c5w@olA*SttXUO0BQOJ(%) z+;QK#{ac(lp7c?}N8*-nX@a8ueeQZu1H}_{=Vk#z_}uMIY%FTeOf(Wysv46VX9o;HbSspBW`fA%L&%*M!;^D4v=*U&LMuNo*3@~@ER)XF8T$X>QjJ% zT--hs%{H#b$UTUphbx^b+a^7CY@4Y}{B=g>^L&3}bj4HS!8;;K>=Wf@9!*NM2vHZ# zzjY^DQn>%pmo4mPaCy$oS8e&FFSH@lT{hjxY#rzI_I^pSKZ5r8&>y}GIN7$fU}v^O zl%U)7!A0K(o9T-5G}tpCZg z_qlV&DDJpkWOwr6y%^juHkvQf`YScx_N9mp4}9}#{Pd_uXot^RiHpvw^?6XG;D2;p zEgx8bHcR>3>A8BYI&YTSJACgq&zpS?$t_N|X(aw5H72*)2%uHpQaDTgKh z%E|1%QaQ+6tz5?bw<|}O>y;~*1mytBla(u29#l?lO7)YWT*Vwx z1}^VHIQS9;9;Ym`GQuT{>H{3-{TUaSL^v#5C5-b`^1ode*Z+v?g|WjTjysC;i*o_ufH3x5 z#7V-~ml9_P<9a4>NEp{&i5Ch#B)ndDjc}DP&fm#@jWEu)iR*+P7LGfb^S4eoApAe! zBw?IiQ~03pMByx9oL`fChA_^jiOYoV6wVmR-_v5@^&-bvFZr(&M*Rozc45>v5Z4Lc zCmeSS=YOeig78}5Bw^G?Q1~=qTwf;65Jr6halSC>JBTC0IKOuZheeM143-PyxQVz@ z81+5GHNtlY*9qhLG|8a}=O2{-#0kQv?;uVRzDGDHyi7P>7}v+i{|w<(!sWsb2v-O{ zD7;-5*XJpGTvN^u>Mw``!l+*&P8LS}2XU4#>YIqe!nX*Q3#0yo#8_U0wm6j7E&v zh1fSC!u4<*-A2dJ$f)OtYHEb-t|_ZF09?AlBQ2TZi;M6ULL8ZE$bw!ayq_?2*yy2H z`cbI^C_&GCaLW1Vs5Kcji1QJ3A2up=Q0ho_#c_MDX_+abQ6({Q@Tf7oAZo9J^z7uv z%5gR;_iRtfo0d0;rjGVrGP}-(mrdhJC}xrNFBKN!=ETAxZ@kW$DXc)8^Y}O9$GCg5 zKwKXqO%|zIXa*+i#c%g?p?R##P)>n;%%zwG`W55*UnFZ=DOk32NgpRl*iG}#`XjZ~fYbr@ta0Y(^pruVoKOFEY{S~0_3wAr1Mk)y z=e8st98AHly`Qycuf-#G{_OCSD|V{ZKdFskvq$d1;X?-Z#}nrMj9dTWJ~Sm5#P5i6 zWZgwyN)cNgH6%TAU~0;!(IZmgBE2T+M^G(mbp@j5 zv^%A}SJ>(^*k9Dm7aprFs?R`w!hDjqkw4P@N_^Iz*QWUV*%!$BrW(6XMU^CuPv|G{ zSpSsQ%yC8Zg^4@u-^{dE7yA5X21kz!4o@cylQ^^9Mcqjg!xF1M!TSbnvrQLGTK4Ph z*uH5m&#Wo_f%9=XtY+Kw3DK2yj!zm{Pvc_0QNF`ol`EXMcSb63BPs-=6JFl;fUPi2 z`Du%T6=T%mZnctDT@mw)ZOSaiIeH_BxBD|2RSMKbvH?@iTg<5;j7MJ{^5zx8?~Zzo zsJykMX2XP^CpL;;?@*R74<6Ps3f|uFj=39QLG`yFhC*kL(a#8$c7v^va@3~t8 z>T)Nk4WaJdvEky}LfaUqyEe=o@E$nZuvPujd(+rFQ?*KlXDo@MZ(*4XrZDK3ac#qQCLtM_al$#E+(@AGfB*j}hgh zqm9)~*>Ht;kQNWaPRPcQkQ@lbZ65rLZGBoj7Ypd*>_QqopJLx|iCBxBAoAMWl`&uU^=58`inzP-Gc3g{(Oj2AYb*418O zAO%MMULz6nmHYS6U{j1nLanCVU*f3V&?m?7N@M*Vp3spm&i@re^@84aiFvU<)fam1 zVt?7c-$vhU@{d0pWO>>@K;QkuoTICRPy~oW+4lTrgm^og#j5(lO z!Qm5?BP>r=PGk-$2br^!vzSB5WgK5vIl^3~4D3ImT*dNAsj7jIho}N$`#B>%0c#@rfe(Q_rt*m)n|st@p~i=3FAPGc%d+U-o)#Lab1bH zN*L$&#M^~&(n8!IjExa-+_799)E^MX3#0ykI8hkqzraf@c;aM{LA$ z#6jgiJa9ZYBx{Dmc2Pq-dhD0`MpO2Tm(M#W>p3kuAj6|2cx@J6NG~?Uuyf=D{5Hm{ zi?EFnkLMLB<4xb}e^@lbv~SPHw5G^RsZ!6EDeZsMU3(mVeAd7A{C@Xn$v8Y^%a<;( zFWu+_QRja+PMK7S6HvUbCB~i_rWQ3GhDq|c%*JPjZMNk6vqRPZ&irlffTji5SOkjn zoKemsTz(9c;FUV|;+Z9CWqDY+p1E8(S@N$8oWE-20L!;4 zCou6#APx&- z`%kR;Z|v`g*NYtcJK}0#?C*%T3uFIATqlhEDRF}^HY>#OZMpo|ZV?BBv40{?62|_M zI4F$$J8_mU_Fu$dVeBu7Bf{8U5?2aie@VPu*jKgm=kOrzP)Z+SRb0JF3kyIQ|L$eg zUVbi}IzCCmd+z8)0YzZXPoQ}$&t!)%>QvCYRt}&0K)JV%MC5cus-AYiv*UDb#QK|> zhbA>~Pn(>3h;a{LYo2K@9~mc;TFisQXEl5_O;2;z$lVr|evRF=h~kc|m_1PH#Y;(s zE{yIl6My24xfGG-j^|=+LdxT;_H<@Q)hz06O*7h2zGwJM{HLc3OzoF4Na_=cfJ)YH`75eGU*`yOmcoTOaF zoTeOP|5?frmWPy+nZwE<_Ftx4!SV{_Fw3izE0}AQtJr^oat(8QN6Bw3b3i$ZIY~Lp z98@lo{3~ZM&rq&s|7FS%mPeFBEU!|IXL*fsfVob&iWxddeiND7E7ve5Dkn21E7vjy zm4P|mV|p#T|6t=n&u@mvvHv747sh6jxI!5FW8!LITt6hP6~_LR7*6K=V}DBAUKrPB zi4%o!y_Gmk82ek|d|~WwiNnI!-x5cJvA-p*7RLUTxK0??hl$}7&JVu9#O;M~eUvy! z80X8xL1FB#iQ_i5r~Me%UlV7E9M@ZkL&Df~5HA!C3rB=;eU;=@!nX?73S&n>a_G$Y zoi7{^&J|7*#`R|MpCNpka7Y-(3nX7CjN=93^};w_Ag&Z%AY3Di>*XY`7oH~^e=6q> z$5$jz5cXay`NKBbII%;khB?@?pq5LUH!N@w1A_Ey7SyO%Jw{H9v40)J#@DQE~LOw|5#{ri(zX)#+ow3mn`azLmOWX z$epL*q+p=@hftZHnVmyw%SILKljqvZ#c<|0G$hCqO9!sW7K^@u{D4gWnX=TO7co^Vcqw7aCzBW3u#VJVItOHa2gycwYNPN1)|Hap!#56 z-B6Zw2_b+68Lg>OOrIv%{aK}e>Sr`&$*LJDh<%kj4Y8*Uh(1S>+wqCYN?0bZ@nM-$ z_eRMBk7HD7A6Q^I&VW%*fj0xvZ z@9?mAzEHV}xm>x1xk5Rf z!&fU)Wk>&mpA^Nf_tW5bka)ZJ$Jd9r{y)N#iFMzJkp3gb1V;_GCOdIIh418*xR1Bn zUHk%Zr%sowgrlm!8ut`;JdbXze}Xc05;4Km9k2fA*(-@O$kyDr=U?1yyUAsic(HSh zjc4HCV7gUE+bvPntId!dN=S3&=|!*+nqlKoeF$3W?UkQ51KS6V-*zBYw>{qefllg= z{q#cb>`&co&R9cGL;`gmLigiF!}`m^q~g2=wPwTCUL7Ghk)`(U@V7~34f2}?!LQ4vwqsHEoB=~jve#uR{S<33J z?>}=$IS@zkuyRE+;xgqB`(LjdX0B9@Fjp%la(p$)RUBWfas~TuP_AN*J44$W_TS!P zmM1FLGbek@{)5UDoPNGCusp1s%y(q38r@$ zh4HH-E*HiDF7bL{{Pc)xgmJ!1Tqlh4U*fnPoIe~m5GM)a{FXRNxKVXL?xgWKg}8W# zO_5!l61D?;_Q~?edD!Dq3&d=fTd=91%}{>#(n1ZHJINQRt@la1Y>EFyBV+f&BV+ey zWXJ>3hsQ){Su#LNow@)-?$K*uD4gvSFbeuvxovyxh)}~=0lA|ALcH7aJJLXsi$STDP-JCyB~?=wlg?Vdf12Iu2_y|+T;>0U&%~-MR0#2vOitR{))5g zub}A#g?N!f^f@w5pc45D#O^nsW|E&9b2KI9XiCh7KO%N7L4)E`$)XQ)G)GpyT8v{$ zT{GlyJiZ4dxJyrtGul*j+{gRPY%RqqYIXRi^+y9x+-%LYhI(APiwtkT5DWFX!b-zV z8+UZy8pln$)-Z4m9j~*)ahnUY>4WK_&CNV(i4&Jxp0TOZ!|nyWbL*zWd^;Ca&CC$}Wd zQVueQl(U!@Du%ar3;9#ID7D&=JMzg;=RT&EmnZcr{`j_WDq$!bpN1(ZX~ zNy-6EFQ^>h@FC@(;Q9Om!~mH937{)?Y9)la#|=L@eFzD>AVc!6-OFzOpAe1kAHB*gK( zxjd*cB2Ey-{+KvTc%E>E@IAu$!sCU*!q{I^_=xaw;VR*<@OEL;ca#4HVeH?D+xOx8 zVSi4XAdH;_ak4OuXNZHsON2A#@cQ-b!ucX!BpeoAAzUtu=YJ@^3Srdu5?2Z1_=LDd z7^g4Z^5TCVAZXTprX{69P>xJ=l4apVtP zkIM9}Qp%l)O(t&6S4)h_c8tKfWjou$eoOpmPpNGCcE7*WVS@$_^X+gKMtc>!<5Dnf7=mY^B zaPV_6-u0vNNQvJ*mY6H!V%+&EG+c7^@)TI-OgqmG_?k?!xELz5=-oG=PX1pgD`?t7x@PVxIT(WyHstSEi16~3;@ zj({!Ok596LZ0nY$3OW>}r0I!!xA5RN+^)XhKt0A2`b2k}L)n|(c;O7W#Hx?E-mPBP z_aev!2b(~wJNF8QyGJc&$OHp$PX*c5xATh0IMFK@S71lZHYooRnMxY>Q8F_m z30E~GdAxEBbE0yP{ii7hm@|~inDdo^IjmgI@s%qFnIpcUb%ufQ8~o^la<3P&rpt+{41BSe1>wE`)G~E z%A<_qHuh!b<&!6)P2i%50i5dFjpI3asPsThLUs=7MeI2+Y{a6gWp-oa)x{nN&ufbM=b6oGfTSShC^KEjg7~;=c3?9?o$eirmJt=$EA(5 zbg|fePAn{%j@{ij&%u<4tn-n7qpbeXDd@(5$9s*gqqeN&6CFu22p$ zS1X5_k^k+=Wh}2(4l>8}_1Y`)A5gAfd6IG!bDDA@$DgHK!}1x*0hX63*RnjKoXqk{ z<$9LaC}**}URmow{>5*e@>}x_&)2YhBaXYA%Y*xYh}#R}{vzTeVeE;BGlVAyhlFu| z6v@kk^MxyfvAraDwJ^3{#C5{h9uh+`=LhF+#PPz|5V3!`-ykd;5IMG&Bu^5?_K-MB z7*(dkGlWr}PFyC8^G{;EF9G)(5$k;kIKL#W5dXM8i?~V{_k$5{7smNMah))J*u-k@ z6X)Z^kRtC>qvvJsr7FrP388HR8i5S&pB~J_V~{wdLl_l zxaoz*GUT6(+ll!;IWS21;PXhO))pYKs3FPXzdv4e_mxEam*C|!XvPnlj-Fgw63p(G zK==HqQ$slSE6nSu?mR-XtrELXqZq*58+I1Tvw763=6Qw%Jh`>j{-1K2nr&jKC={`t z*RkbS+vug%G`VENm)y8KG?R`-=ez{07dyVC$B)BOE+hxU*3owm*3NYNR@-D8%K>yN zG6kgZ?X)7C@&)K33_HHX#vB`0n$BW>!22?6x+I{dPyGZ{F^#U#CM+Fx!HKpVG}ybL ztj@wFP+WuobFu?AJlS}YfjKSJ7JG%z?g007;1aISot~E`#dThK-|gueJVu0h5w_9K z#D0R_F`KTq+wC57Q@!>lvG?`H?(2}U7V$Y<+2B#z^gJ71@*w#>>zRYf(2V3+%8AX1 zXDG+ByiB=@{bc5Vaw3OMQch+LDhHYKm6JLDVdWrmxpEfs zdgTyvrE-|LMme7IQ>Pq~{0^4u;fQnB@`W2-jzYav95Olq1ab$`#D{%n8ah z%xTKC%vs9y%rlg$IDK!uy+)p|%7ODA@z{Qi(ce4(s^3bH&lj#1MtwBNw+o{_nz&vV zn-F3h4`KgJ95~e``2;+E# zSnrd<-kW%#$Z@AB}w$UV)yO zGY*|B+m4h8=htX63I}T5ZBwcUK9YOpv|i-Df9l9lnS;q@x3|T~`q$yvv|co~Bwe<3 zx3>$S!JteEXJ?%x;rv;-j59dAKQMZ+`q-%@Xvr9dl``3#ilYHu~o;s0lpW9Tk>E_6l=Mn@5+ZMza>l(JTEt zcN+Kl{IOw+XgGi2Ft8Vn2LMc{-a0a^$2MH5kvU^S%VuKsPE$!>VjhkN<4YbTO>dmj$FW4NK|gE9vX4Wf;;QB>vj z%#+QRwcbsSpkzX{Y(96HIe77?f38VcHzNP|4u~?w8(d<&(Yqn;Q_=DmRjK;7TPN-N zZ3~Dhey_e8%W-LmevRGbadJ5@ecg)b_h$>2orCAcv-z$88&PAqeN^_5G#{RHo3?NIa%B0mUY-{l zUYa!jgwB(D>mNKx^A!#46OrwD&WFx(q_K-NevV$~x%yn0ZI$6!i_&5?dPM%H(00er zBuZX-fN=D1DYHX8nQB7T3O8PEpDo-)PlR-R7M znoYu;OK9}nn#-^z)A)DnT2WF(*eUr!?z~y~vK;qi$16aBgb%VBy4E zZSC8*t$Qi18)3pUWA)0=IDaKH)z!}v^_JLD<%MW{HELZccAkk#mH+2?Rr~ACigtZQU^p4@^s6bAFlq1Z^$`#C6%2muWlxvvFlxvwI%Js|@%FvARU!@$+ zT%(-D<*ic=usm+8~@;a^(=G zSEU?gu2n8$hAe$P%mL*J=49n6<}BqJ=CE=tb40nGxmr2I`Kwn3uCMrPNk7c;MCEvv z2bCjIUS;6=TBsb)T&^78@avTmnX8qPnQN7U%=OAy%yHu+e<9`sJxDOPaG0C&i{$agmJ!4Tq%t6eGV_YL3q0`&i_f?ApDqcd@kn~^#LSL5Jr6f zaZng%A;ckJoWB#72^VU3(I*rMuNOJa$H~9mzm4;0;!2U@e3^K=FpkNIA&>Ki10~}2 z!l?fsP7W$5^fM)BODmd`CBWT zEc~!=P#ELWNm!p{jW6h{37$s@u~30DfEzJlb{!l$1nGbqyCM!TI6>M z>;2`6g}00RF5!CNCBpIfTt8*P0pYualZ2NF2Zfgj=L_E>-0(g>kLAK@?+Ew5QhpbT zf7~BSTrT{EaFuYmu-=b;pK!g%pAn8P;QX%?P7=OfI74`qu-djPK1)&yM_=a1cEYV!!;?2c4S&z6t#mV)XgJno)9+3pR+D9rBwZ@I%=>Mj@n^%~o;!P>Rh}@r+j58vCC^`KA(;ls%k9r|alii4#&bluJRuvO zC#T0NR=qems{dGd9;f!7a(}IJ`BL#5+a%l&b%fW4${8#7*Phmcgy)^$)`Qf~G&C57 z`=Pzv+?<}jer@?tSH<6(C_zx;YA>Lm_uH1A<*|AUFPzoWS_MZYYgeM~S}3jv&po;Z z>`#XBOX<+}mrIPgr}Tme{C3gDh*8=6#D3ChODvj>$YWj@3CB&yV7n{q@aKr(eDc`m zX!9Q{pNJ+eqp#ZG@spg2gp+yAw=e#v96uY>%tqU-Bcwy|6z4_n6ZntxBr4phj{`CL zJ3_wmCSu05^#3K-(jOrm3QrlrJpY#*cZpCQjv&XKxxCb1Jscr@E7$D(mt3=Vr1Wig zt#^8dZ9V))KFA+8`TPV9&rb-Ac<>4KBgcc^bE3AQM@om}UTb=IK3J|x12+8O-YINP4%7lXSqq8Dt~Oykd{i~g}sd4N&eBuNj6Ss?9VcuH}-mR%U3SBF5MqQ{o7uE0%_Hv z3fwG!8?*rLi zmO++m^75Xk=MTReibuav4X^I_5^~E50qi*={UF390`(O1bf zAO7%%M=$p`MAhvgYuzarh9f_CvW2DzmT4Kl zuHA60dHy_i?``0?Ja=1aU5vBw_^Qsv>-7;fM$3GEH|GUeY776REq9!*I%0>3W8vs4 z;^je{Y})>|paky;#_MIUnTdw6G5-I)Ur#QND9SWQ_r7+|z0pJUxyO9>QG45zOT6}s zSI%^OTleQ_OX=ImjUIVEWyFZ*00lX$)lS@LLFHuTEafZ?KSMdhT&5gmUaxE) zmhXpida9qAeXJkCp&oIi_{ZT4%Y|_?MqDS1S_Wb$;_~6NfH)wG`dQ*6Vbs48rwOCJ znK(-r^~J;?VQgTD7YY{(M}$$|O!7)$9J~@&3*)CiTq}(FZ(;~>eo_BTtoyNiRYQOF zA2nq7Am4^`kNJv1zU~}-=1iSbG=a87(ba`GjKGvUcWMpE-ig&)_@V=jk1v|1L%Y`M z#*xBd^fo@ff4fZ{t%7nM?39KK3|n8;pI+yddKF$3>1|#>|I>P6PV9t`i@=JOf?h?L z>HSCH{fP8$=8(bZqij6N{=UV!7xgM2|MIWrU%9b=j60eM46m$XV#~HX@^7QsW&b!D zN|daVKjfZxR7q}~*Sf2pMogn59WPjabY#}=S;E`2u#7P~6s&(5^YHZ`l#aho(t0Yzi!pPG zP{ny8cHLg32Dnl&et#Hx4!%Ch<`?fv>TUn2m+uvV%rHgT(=6up$|2?i!I@L@ z?Q}uXW`8#njg!WL{e`me+*u~N0?Y9+~Y#{@C66W4<~CZ@si_0Dc;o)3Z@O zJYEvA9X>u8w6}vIGMC9Q`P`>tk5AJgJ64j{gAHqz=r*D6Pt8+^VwtvKMGv^;aa^iSlY_Ev}!r1%~ zCkjsz4hrLb50d8#WBX5BCXDSpaiuV}@5H)3j{8T5YebIwMTqN!vHd58IY+KM^VNG#sLmKSo`yZM@3AoKRsG2u~|n`2uJd7kAB#N zm!5RcgroDv=aY{dBH|;z;d_kW~gkIC5c zGXIrNl4CJ^^-2pF);)D-ztjPEpSTU%I9)6E74L|0U$&1dk7oNYIrhnke6e_J{lw%G z$CrB1gD-zWhNlcj9Vz2kpF6#MzVK=lissAuF8KVXr>2bTpN6*^L~j9)sfVbXPlDs1 z*Pf5!nm%GY*vZ>(3{Ak&8K6e>8jX)ESaCeQ{MsoF+p&ttG5d>th4{tdnhLg;^z*s% z)lWxuPfFFj1tQO$jK)Dri%PBOOx8BCzK_=%cs6Zy$9m_Gy+h3Ye8t0Q7-~Ori}Ki} z6RD5A@r;h|OK^qD?nqH{R~(C-$J*}`r<7JHItf>ZL}1-*x-|2^A&i|HX8TVNh(B?+ zN9*awtfMT}qi09Wd{R8#7ziuRHhZD`V!VeLPjye4G|t))^(`x)94{=^?fQ7(RM8|{ zp2L(%^0JH3Y*JC-q?wKM^m-p;0c}VqEwI-W=-w~i%MfJc{grkdAvn4p zeX;%*%-&PqKe`r3_t5vp_Jl_6MPsRjA1jTmZLrUk_r%t3fGZetpn0&?#&GS!w}e3X z!HbyrQmp9G!g=RWFnmw&@#GhkOcg%I{`#e&@xTCdOH7)C{U8KWhuZ(s$ktjIJA;G9 z{5N<`2eN}5+1P~bVT&|Q{tbt@-wcS{LHBt3e{nxb{OLbdW`7GsZpZzW@j^Lj7VY2m zC-uai(by1Pt%vWZRuX%m|JKZv^cNpFf7=_$HGdWVpZwKHIA2oqr`AW}V@FQ!NcCX@ zYPlOUKfe01^7i&W_&es7*z#z80}}2S_U8RJAb-V4IIJa7M?}{^*aOyYFMkE2KQvH1 zfs7^Mj1KGn$^ip?KBWGwMZU52KU($To;NKt7Vl)suMUhz3F6qc_F+oq_26i z-(}Ei$XaLD+977hWot}n-&0}4-N|NJN^5wiWSeQa=vZMe~ln>zqzZe0df<#jgyo3Ik@9Mj+I`~Eejf6M3Ko%-9|UsGQ(d!}4! zx|xei>eJ7=;hJY)TF2S$(apA*-+B!-qd$1te7fME>5!OfUf%kwdt62Vq;Fa6G$|Pe z$2@VV``CqrX2)~KnYOQNfTgR(yH{^}!W7@Q()sD^4KOEepR;Z69(c0J7tr&D%S_XL zHRh-r3eAW;Cz#JCR+;`QeuWcyOfuh(p5pWxu)rL5Lv!dg!7)K+z0;+2tM2}+_XM-p9v1#2d{3s(j2$=Z|EKzVqP0v3Riu%0ak6Vao*g#*4*1~ zhi5fjX8P615V!3 z7RFsY&>i&mcaYJ!7Yw*KVqR~b@67Et*HrZyZQ`C;WV#=G4@!a&xb=rAFgs%zTr=QZ z_;<)^IN3~tDF~nm+9whL^Stf}bj~;P-tOI2Vms1nDr! zER5vB*t=%9`LkYw=bq|o4xTw0%5Ul6WF7hoR;;+(-8a841d>+4Igh+*?wbFMbL&-~ z!pqOx>mJ=8tf9-_u}G(RI#?>8VgwaxP@Ah&S!O>j*t}?1m{;8cmc3>)O`RYEHAAZ`o`0Nhw-WiuTubyxSdVc?j zQ~Gi#Joikc1I1rJ;`Pg5|CvcJyVZy8pN~(6v%dOU>+?J~yK;J=Hwcsu}Fu zpWz9B|&ZA1b12T9_V=YLr(Fu+0bz4Amm;DmU(CKZnt-j=V8II&E3fx zKQV9beZ%=J<$g$9b)LDe|Al7f!>7AfJo^mn>^I2CxG@Jld+rM}w#ScVAKVZ7hrVF0 zAF;tXe(QF4?7BhF=lTXXe#QUXx3}~&PyE@&eJJq-=y_Sa`}}op!n@x!b*h^jXKp{| z7c=ReW8j+MznC*FA8O7Yx!Jkvq-iFv?s#Wx$NtcyI>Vf{evw(eD-Dj?(#f2?f4%eN zFUOhApBA`_fBg!=!ToNL+Zw*ke9if$`ERgv$Y*BKNBQRR()*w+H4(aeR|Hk3Z8D*4 zuel}VE1=!@4CsAD1MGfxiTmM0d8Q`&RcC+x@$kc6olU!YQlT)TkGuQ1F{b9cYuw`h z1>-j+Q|9lqAgE3cht>?)fMNuZ{Rzfao~IB{sGV zYSR|*?y|d0T=NnqW!sZx$KzWdIAqee#le)AGy)XHr6MQ})!G z?!5&#!=oI~O^RHU9>_zv*;m>@6M5(3R&nZ{BgTxukX&EIjT2;B*XzAAHqh zeS665{##$@`^0RsvgkU~;)jo&?6(sP^t{MTIoJx0|L0!w<>XIHlPA`>XU}~Ve(ti& zbUU!vq%A(iOqgikz%|Ff`DgclqdM2aF_&Bp8N<55lt-S0*9L7e@2*~JE{@v>Lr*&v zQZ7Fl?i+fV+31dUzWeGJb9HCeS$gJGX3>ZH+)0a%GcW(X06wXi0|U-!?GDcB3nMOV zZ#FdTYL5Q9BXrq18BUsefjP0uF0<#dBy;hOrm$pI2JF4LA8hIVf;s)yrsj#e$3x~x zpTb*h?sLx_RcA_1U+VmL@CwuEwp?fI%Ws+u?}T8+$vt4p!2WQ`h*RN|^|{WYk4Io) zms04Pb%_~qY^t+h-)rW}L&w9KFE2K?-~Nh8A3qtgnht?IUw>j=eBvYL($!l{tKYW4 z#<_RGb@{(T)vABstkTY~Ys6}pQ@0a#pZo#*)MoOdld~pf63kR@XX<*JqjM zo}Ui~dtV59_I&0(dHHHMqrQ)``qi#xYr<$J@azF|!uXEPsP@?=^~A5?o;z+dUvB-` zsr$gd%!`)6x6ST{^G{mlq&d4_4{HTyn4!<>8dDmQLThS_*}9rQbUyy^Gw;h~X+6P9QdxLZAQOzJV_@1-nuZ?hQ;$o-v(+rrp`$4#I+%1r@caO7ccXP9O z_f5{2ZI?i3L56e9pC6c>ExS8&C%pt?LT#M9b3Zh5K0L=AZoV?T2On?d^vE;6o%lXP zzHNs4NA|+-K5v`+_iLPI+r&fO+r!Mbp&!7RFaG9q*)$8ftZZjCpI-$nXRmSoUj3pu z=GH_w@wy^&*~}lE)atJ0#l#m)(XS_(GkSF}IiIgFSAW*otXY_xBF7;p|P--137C;pheqhucX3dCoCauGx?#h|N&B-gr zxXo@p4wj{y=A5_ZU+CETcqmAJ*Q|N#2bj{Z7IwQk;ngi4n6(GKc1@Ru;h0zcaOONS z2)g~^n%tM_p~*#q+zDxe&7a4QaKHa#p82)uv!>U(a*JgMnu*mFe|2y3v?lOe{1WqJ_cqWjd6_%7 zV=K7&yNjF;XNBRc_TRu4Iq$+rSGF}Lbh;TH==(Vop7H}c^N4XSIP@BP_2KjGGpkd~ zhzE{_H+DV<8@>UkZ5c4#-yR3+*LH(;8O@xvFBL*o*V|yv@8840nJ2*SZpa*c-t|uN zeND}X+wOC>{kz`upH&O{Gp~S?JD=@3lfN`ij~N4px(mDe;@M}+!TMMyFC75NOcpPAE$m}wnS2# z>fku&_C}?9&*i7X9rY<@N7+1+)cqXy-5H<2q^H)I$k)ffmp4y$AD$R7Bfo5LetU8u zlr3&&9$hpFBDW7SyQc+BpHB140*T6-sFLuZDX<`12TjRjppO_YNM?2>}*9j&pjJP+yvc;UpyIQXLDORJGy0=`-iQ9pZA<< zK7RUXv%Kmbc>dr5`0Jzsn6+uLIqH+;=F#Ieps|!fQ`$Vv>2*_r+4O1-oc?VD5`zQX zPkZl$b8g)4p8Z4|Jl^dmvpVH5xH0u}b4~ClbL$OR?zhDY;G>??-HN`+W@PW<%x`V~ zFt@adbHh9SFb{Qd+-s)&27kTtm$@*0nyG&90a$aK19wiG38Viv&2)$5uDq4~OX z&XwbyGrg|p0R7sW2Y2jx5QZFmmudZLCA8dpzImbQCFilg6Xx|HUpWUhd;uLc_HuVL z{|P?0d4PFgY$D8g3jpmz^_P{r9&w+oRd(OFg{505mUsv4Z03^jkYfZMR(}S!CJ%#;J3I#P!yWMYzlH9E1CKy*LW0xd;or<9 zSAOTt`r}pe*4U@bEq7jJ7LQ4Cmc7%&e9*AkEqiD&wA{EGZs~ENaUNM>%DQ$ni5Y9% z^&7r~af7zOwKc=x!6ENC>w0W6sRm5b@NDy%b0;iK-)TPoHO;wk&iU}_)Q8QexPE5a z(KTjk;e2>={n^gyA5-C>n6x`=7f3hu{)a3*-Yvxbz(!qD!dEegww+Ejv56>O|W$)kP{=BaN7F15d`RH-x z#McuQ&esi2>YQn&^T^NLSFSk0eE-NBZfS>pCS^~OyY-}1u;P;I+;dLuWL~;? ztqC;U2Xl&ZoGsR6C*X(O@4}^}JI$enw$8R!K7>=>xXryO zwaPsDcvttrao55(J;uAYJLBPjYdXNb8u)@19n^uaVy%Ij=2|`iibaN`b--L%>u6br@P-g zQucBaiei!~>mVKCIIyODcjO(55+_x2VTa_1>4m(>y&;Eb8$1hJatvaMZ zkKx;($1&ZVPIr`<XdEnfb&|INA92JmUn*# z`aM0yRG<5pX_b?1K6&|Hv*DZ`&Y~@|U>m-h$NsPi#&-?5M=$FSeLla*{PfrbX58(4 z;lR!_%#SpA-r@3tLR+Ih0 z4e(~&&u->b_rsRNkKAcnelztmzHzpm@*u34v&^*Gc^!;yKfoQ>HfUaLa;Gyg+ch~k zubX+J=9`H-r<%}>=R(180eB;Fxf$^F8P4{9$HG$uADQLvy$L;bwKNG2l|b`mBjDkk zU%;~`fqTl*LuTpbUCy%$vf$J;A$Y3g7iRvko7}U8^@5ZsGo4FzG&P0Sw|7Dti=bJX zEa*D=CKz<@iKb@oD^S()5ohcE)1mnfW8tB@&M==}(+S39kAdrle+t(;P!E}3-t3I8 z*bQAf*ScL!odZACl{ll*Z-Gw+?>FZyDK-OA-iAxk`kEK!Kki;PbDFv2sS##R>f`34 z@Kf;RpS_{upQxAmdZ<|wm*w8O{8L!%e&Ad%=MMN^?Im!`(YCdEMo(_t;jZXXT&p@|5wgGw)xx@1p13z`Z@7!#hizUw%u1 zI|np@Yu9cx!|r~`?ce7k_+s;1XL8ALaKVy`of8{om}g99*tEAFwu#Nmzg3Cmgw!3* z(c8cz=Ph-X(Nkc>*eBq}zE7JkUf2cg+MQ-TdM*eTRW_LZ&pPIso31lw zz(Xdhp^q8W?@l;<&UfaGMa`Ubg|EPg$E|ekf9)N!EqIAJzS$B;J7u@??vB5q?tg=v z<*&U5JD$vRr!4Dl7A<)f=O_-G@_f4U@eeD_OCMeeEoP54by*#Z8FRpFb)R(VHjRLj z&syakn;Hkp+M`bGot|*prCng!U&ouC8Ls=?i7%PwQ$o%cCpqS%oBNno&+lnM9hN}% zITxDUd28I7`Inj7Q=f2Nn|8OkblewaN2~qj;KCL#%H0j`ojTj8@BNQC_10U=QHy$+ z&p&_4`R3SP&7tKOxn#G-03D4Zdp)gS`U934&M4UEPAH~`?NdU>Bo09r);_r z;_)5YTK}{2!)uS4ce;G%7UDQ++gHDtq55=GlKbH@rR+ z+|hCFw!#WC`0*3m$XoB4U#=;GO&h0}>Xi%K@2>d@Ztr=8v-Ydc&6Zc2n1a0*njWXl zbvBv3aPE#vVNu4*X7|XwW<=@=bJuI}POIDEV9t$+W<>HTcrKO=6=vL@_3+ZPTcEh%XH)QawG){&$Xwrbt@C8cQuFI?8{GHbc^kePw8%Z@ zugT_(KC5B=%N3A*=ze$1t6!N7gAc(y7te;S1A4nXQlB#Ghg@a4=YD9qpWg+ZJRuu) z{rayNF#>fuos9eQ;E52oxdcYeSqP(YPINb)un=}qh9}Um# zTxsfyr^5}~&NmOgR^pUjyUS$UaJH$r48Mmyv*7hkt4!eqd!5#u*O@csY<9kX_hfkG zyI0)Y2Y!aXcD~?DJZY2pIFboN_AP_W|0{*w>y9#gN?W*tlfE_On|8sx>ld25*SA1m z;`ipAvz~QwKbZ!_{qHmFGCGrOerdHUSJaNSt}x8c=aVEoF(@ZNQAn&0mD z*R&}bXC|eraaRt1%?y5GllxafqM4Y{(tSUBwE6eL09Q-W;dC0TmA+63#L15j{2X8 z`}iDl{QFm!^jRg&XNwESU62TUhhzALimMZb(6zaa-=lvI+ z@BKXYb)EA$=liY^<-5Pos0FPQulyV$h4G>Uqz&ZS2@q@Ppf z@F0mx=(;_KUn%Zcz?POBK0*m zwzvfu>ofVG$Xm!cq{Nn9lSFU-Z8l?W13t&h#MpLc%nm=pYzDRC?Hwn+NX8h-zbdHS z>muTHf?0W)Ew~XuuSwYy75)37qWKu-xwl zDOcP8imVhPGGpntpi9OyZ(@clm#Q`6S#an=itc`k(Q!U_b^0J%w9FFEqBB|KCKX(8 z8AQ`WI;ocW=;nfDwDOlR>r0cODH;vbqt;JR3hK<~iUBz(t|9yOi#UI;MX_ z^_QXSgy4H8xS7-9N48M&e~PXPR*2JG!moauL3%Zd$m3BkDcyc2Nz}BwVTXggw<2%km6u4b)o& z(9x0lc=<4y9v-M5r!`fqH8pu574Wai17ToptINU3F zN~Z%O@MZ2zGSD={h26kUKF4$buWX1N8a2~dv&bp=1{^}A8 zD!qemabi5Tb3WQVrMQFl7D{?r$ko2Q#)IP;v?bXC_wy9k{?V$`du+K7`SGUL8n<~u z+Z1dn+RpzqJ|_{qr)-9U8s1G+pyWqNusu}3E~|Wi-SXqy^Th)kEb63;JQLz-16W_; zeOUNP>YaFxFTYYs<;zykOPS>mlaOMSW~<4n{2?9wv5Pu_J?V+p7dkmyj}+^? z>3o(x?;1ValfDxl1sx_A+Hv}PliXJTDJ?P`-FEnJiz-jC!;av5gZ^$xMTbGM!h1I0w zla71#mDtxYlcwh&7$6Q5^Q|>eA4A}P~UPG394>f>fUB* zT&;$GSwh1Nukvlu)<`V!q{VY`Y5LoI>`hXK)y{iNZtWz>wTWYmUEjzk zTN^1wn`oD48++n;j@D?1(Vpu&$$H>K8vk=It(-Ru^Xq!ZE2@N_tIVXsy1q=MPn@>7 zjAygfeb5v09h5Xs9$qe5;yPJLU6IJIiBjhK?nf)6o*@)n)P^*Mjw5t~WoqlRI|jE5}rziV`-)dj{)qiLD;S&Umf z1wAKb(YtBcwCUqhCVfVnmSlgYYwo`wy2puKzx|um%<3SE%A53R*J(^s8iwVgBe2|W z37#8Y;%APJ#xj>w{&|KTWub;mKKdPB{*GWdCPU#Yzk+&#@8SB(w`^t95<1nRL6;_N zh0jXi*{?Gog{BOe?^8e**XOepp4F)E?%{zIN)$P7Cfl^+HHiekY9Hjb3y5-4spYj$^5>WHJAyH=lG|hCV%*51XYIaeIa%8}r~Jm6QZg@0Y0v*A2!a zopR!SOKH-LE}BsH1j7F_kbhGz8rwe5)HfA8Goym;sK)b;_WN+sK8Zfnry_oY2CMv9 zMt=v6=S#0fqV>KOH~(Wp^J|P*dU_UJ)ii>adN~#(R}d;o@G);DTM@e!qBqZy^y&hd zpqI#GRH88c{(S`J`=a&hGx~x(G{^8i=v%dt*S`q=Q=j2?IT*G;2` zzoc(Q_h4OI%08tY5$2Ur=rsF-t-pgk_h;b8;xx9WF$yIa2bsdvJCvcmj;!A%)1M1# zP|BS#SW5+G91Lke$QUejvO(*qUCcSlfU11ovhIpaP_V9L*=L>Tz&62q>U&Q&$_7I} z;u=<@&ZJIfQ~I|0B995`MR;oyj!#skv^Wp!o&6fVjRW|?DL=5Q;U}dzm5{~7rA$*n z0(~pr@b-H~bg_2?nllH|`{^BUZ}1{p%OK7@Hep3)4|lUX3hAm4%24}@rj0#p$^$iMmIDp|La4&5a3kujO=<7dN_VyHfjhc-!gS<&UX#=Yj7j&c7 zgIHA}$IQW{+*3+$$M)t>&WF=b&hX&b-qwQtb`!si3o-7CCtC2D^rp$fXG;i0EMCll z>;K@QcO^L=xj;>mU$emXMZ)hr0K?Cgk=gWo>^JcvTM>U;NYA4~!D4jyVHOSBQH=1x zs(809k2OnW((>#J5Gl@~qplyBeM~d>7A2bZUlAgW-a&84S;}?og@^DCd;9q#X_+1E zy{XJvb8q0KjT>8hWjAdf6vj2|Cu4)53;!*DjSkhmXWRSUpg3(6*PSbchC%JD>D3K9 z-Sd`dv~@y$ZZwn4biyT7Jg$ZX zkn>#yD*hpyl~4}^e7(j7eh;JqwF185mI-|tDEK_WP8=F|lYMcK#}cDgeEMc@c-hXN z%m#%tbja1RDA+rZkZyzz5{I`=p)j(y|T)2eT>6w)NYeYa{;K!hhx zx}u4(%N^;XhB(N33`OQf(sk1u7LYv()3J?ciQ|hT z(cGZgFU*C zMCbF5AYfM{R{u+Zwf{qej+ujxMss-c-6oor{TS!_{mAgxZhn+qMY2XBf5OjG|KMZD z>_?Zo&V+Q4f`VP0UID!b}&JB#p}wS~u$-zC z>zK0K1|%&k;v)5(G{C%u-}-MS=It-U-2+b4^!pw8x)-1{?G8(bS&pZ>!uYonE78{M z#C8hb_Jtqi8EX>3_Q-T9>}Vw3SB<=H0>|6GnH9+o!yUUaJQujZh3}^_`XEo4>Q(f; z#F`Q-Hj}R3d#LRzA%h$v%*~eJ&e?)4f4`OX*-nJi`=OZC!a=U)a35JiH)NIh!-9#_ zF*=k|3IyKli#9)2?TQT#cd?=6<8ZrnB(;RMBB=c^&WS#u;U>3vSavB%@5v^O>Q7jC z?HSVB&O^?1HVO(vX=Gq8A{zWqhIdS+`#Czw-Du2DSI9L@!Bo?HQc``vyR1La1d&-Z zQd?~vMboO)hsqGi}idT`jB-MV(2e(A`t%(yBNktk&j zy6zNwYy+P>TLwSEH_|^XaVR7&;u`W+lr>I~;)CvB-n~dz38?U@WFr`DdqOgAo-nV+ za)NgEjCXxDBir#}WM0rkWd+B`cI0}zRlb7R1rr;22TN79CC6vK>?_-^zWG&tpXEcAOWTig^2A z)_80>>PP+{E+vV<`rnw7pr`8j-@_(XL4PWL1$B!o%JXXBr{q!z_s(7#`fu7k$a0=~6LBAH12arfPASn|G+VU>!T; zb&?`A_feg&f4uA*#Gtf`=62Zfr59}Rs?L~sN-m*warf!j7c(enOcmygLpZrcgD3q~ zhh5xX>`V^Czs3M8Ojrf86{F~7r5L_AMUd?jYvTXu^19<&a60T3ml>Oj>ALcC&we!w z^FGkW)TuOOz8z~h*9Bvz!+ha|jhNtY37`A5=}XlhI`^!e;%>g@gIZ*eb?~{c#|Dtk z(nxOK_*Y=1#&UJ*3X1r+mRSVI#9bb3R+SjmtY(l~zpQbLzzImImKgMLLP4k}1Pd~!1% z@ZVlIjXFY&&o|>_Wg5R#eU3IbM6oGWr;!-z$_$;0@O^4BjC78X*i&PO%WB(F}}+k%T}AS_AMJRqwg5oEG018^$OVg`WYSc$RQ(XMU*Y-u{3tt1R7$uia#)`$9FSp+NJT7epX#UeNZ?VzSH6NdaNl^ z?+R0Yrv-;8H5f0MN9oBj*klqz?IndQ?CcjbeHy}wlEm?Kwl@3cnTDdlNmS~Vf@`B+ zVBb1x8aZ8z3Z=KeaPAu(8+rhmFRE!_=md(6KE}4j`%&sxU-How-uD72CZ{osZl^tE zfltM0t8_TtIhbI^ma}{_)TyY~oI8e_&{yXZeC^ShWH?=sTUCi6&npiO0Z)*UpT#SO zb&!#_AJ_U~0QJ3N`QY`Q@+||p(rJ6SkLB|=b=~GjrNGtkap-ywqRBk3g3uuaf=f;kuidn|F}zT zl0H;5uZnC;KET@Q7oDzfp{4b+Al73-#kHAe_%w{IIh;lFRSsjvc?I|mjpx6*&ck5# z8JLv^VC2dDROQi5|NZ(y0|HJ^^XYj^xRQlu7fc!n*>rBH1zVRr1Zvtgf`=bNbA^3H zH76gT<7e_@YYlj2erMv|M`+0RC+wb)CKaFE#_#xj?!K4~m128@Y`ufBH>Nx_ z!VtYpkGZ4w3Nm)w%>8Z+g`>AF>Pnkvdv6uii?>qtnhJD&ii6XLN#wagk^&aB!JOa5 zopx8IzVH}*fAfP33qIq;_pN+uKmvU$EyCOpW|(wnJ1IA2!2R|_)^as~Jn~8*ERS?l z=^iCKjlfG!IW{Lp;MKaz_;I6VOi`N1a$HR@X?8q+@MA9KtqA3p5}(sn#|u=%U(yZf z-{=r4MQ3C;Z1tv5*M#jPwke95EZ$L!uPMr{%UIXDG>YCH!n8A2lh*DeW?sJwRf>Dy zK2HZjCyc?jt50yf;tEbKn}xIMC!x4|0IJnbuuZ9V(HyyxZGO;%Q>G7i*Bd`_P#MgV z9&6yA)JAr0g%=D$r?CZ&GL#eV$`5~afaxm-^47PcwL!nw2hSTcvN(Xf(C1)iCqSTOm^U6fyEMr&;9N`E=Q8D67nI zpi$}GwB5W3b%qC6MBhN#bf%7`{5GPpPgy+DEE3C<+v(JT`50`{MR#&eKaQVncgh;XgdA~I#Pt*9SXCbfQYi&_&0SKLe_a8s^l&P9PK4@ znL`k_Jd32+zu2M37Ao&5Vu$YMLVaEjMzyuVNAR#l@QL&*!;f~KQ9z1MHxC*I$A^%CLMC<%ftn`&_4_*&_ z6*GYsl|!52Q2w&}JmO*(V7A&v+NW+pqUoPeFH%6WuC@}{?BwDznjv>;Eh|^~iE-1E z$f5iQEey}5L46g-(;v?@WZzQqf#>8Q<%!D&!pL8H4~-Ds1!wa_TzPkr28;NSW}-al z|2K<#k6z)nBKIJYuo&haY7k*v$VMg^qQQJNJx?*BIeGf*!gf{ii28)C--3Tulu4(T zeW0?n5^Va58FcyKdwS#jlit3~rM$bH^f&b?J<=M3b7{AEp0LkXt+`3#h7=&|l_OaT zy1l8l5gRl4F4&MQT>ga^n!XHzwtOW{4XxwL<|bnKr}fPJem;1?HkQ(xO19B=xXpmw zbkk-vt=M8hD;N6m9yLR3`F@1=L~f^<+T~nt`xiu|$B|X{B)BLsQ1*S=e{&>H*7wE1 zZ{K0PdI9FI^rVB2oZ&Gr6ZPGd@SCj0FDp++VyG+AxaLA$H@{-_OK}pBEoRfdzQQ`i z*Gyy69x9QM=Sl645Hjr$Ykw3DYsDN|wC=hvlgsgAhZa-kB?X%EG!Bo)xRJ)l=aBh0 zfgRp^4sN5f@$A1~dtR|t2;-LQ z;ALZc>DJ%*ypnCCP-jl>V#njd-&ag;=wyMP`U&4Eb?mxY4p+Sj>@j}Br;N^}o-I0* zby}KoCuowz25GG9bD&Q%O6XzjbE=d`#1?-$rqZknKI|E7$zMPo1^wJ~=Nz=&zQ^t? zai#K zi!zOPhIcWIoIeFcRx>EvE`u(hn8Nv9`ec2Ld}@C~O7bI)8hP@EvZAE<{y8+Nm!gg0 zguIC;-U~UR)Q>;OR_6ul&Kf`yH^#AMwNrGjxemIs49I2J6=ZC@fbq>j_m$;g6mJNj zM3Y_UHNMIwv^7)2==EHGSOFrZD)QWjAJkZF&Qb;6J?W5>>35$R7@`#1;n|enBD9?-B)c*XgMQ7S z+;`uZRAD21FWruvdrNWYs|iMnX3}NWiIVdM*#EndG~Nda`^ZqHpe714L&4({IBK5* zYP2$F1XXTIE3Yn+Q-(|?qWzuI+Vcqx_U2jqf zl`GVf)SoOiKx`XbDf~mxW!uP+7m>;QfyhkV#x{rclcCsU3^*B22L`sFyM{qpVFIbd zm_RSQhxHrXM9E|kGIc&fk76WQqmB`I&kEuG1LLqLEfuo=_QBHLlJ(VDVDrWjn(Ctm zX+w9!Xnm(|se|d}10j5A=*K_YZ^pKNEflJ-2YnNanFgfcZGDN2SwD&1zA_Z@K1ZN$ zlT1U8WJB_E?D*Xj(*)&qN_la^*NlXPssrTjemt?K&m?O`#RRFSu`?0+yS!v%02H zG`;i&ZCTwx#bZ9w?&3$J7`&OaN9&Q(R!ca49)N}~^@y_Zpp~w1v}of18XYp3w!aqU z{^lM0T2BIOejnh8AIDSO09}^y!UEonk~GfK10KV|*sWQg$gw1s#}C*C<2BV#jmjXI z$6kExm26l`+-JkXieT4yfrfouhV`Kylp63F`o|t4=94cb`gwA@lG)hVQc3ef&yz~h zdph*(42r8Xx!SKCi2GxK3roxCmRkmvn&jfg%1H>n{1QcvW7se4PK>na;itPa=&_X| z#VUE@Xvr0pwt5HMNS?yquoT)iTM{Q43*j80!<~BmgLIAwMHqL{CDT|yJDDa#uE%0q z32YkT%pKgqsn@uf{)q+Q^`T8%!Tl>XsOz#Z+6l-xXCN?Ag?RnPfa^K;z-zP_PY`K@ z(?U5~(i%YBb=q95ZXNc9|0esa9d!SQz&KZA!%oYWT|f7N4wjTr($-Mup9|+p^_6i@ zD}#Efwo%%*p@Q%43F(P9aJcg_oxS%AkB?eW+wspN?{kBm?$(6&Rz2d^MA-ZDx9Rl> zU0#3dB)znnL*pm+)1uc}tg?J7%&yxaL|GdjU0S%p_@DIo$s^t&*^JuSIG%jvJ>IIt zvL`RE(eC}ROnh@5x$Cb+&VLtB(Xx!sh`UR7FV5!gQ?e=c%nf{FZxGa!cJ9*_k}gw>zX8e8nOlVHL|f^^f+sk zJ4LS+`(viZLCSKNjc{uxEYoZzv5W4Mu~ZiEmd`O)$P0AH+hgygmvFdv1XFgs<8J#> zY4t7Q-MU%yeo89WiPa!;5u&~C?@_*NBbTt+K+DD#^D&a)^uvqOuF@?e`a+!5&ANzP zC#NxcjY0~aUBvIs8%DcST3N|pak_onkiTzCA@BJutl>)*O}SUif9Cb#{s>d%w}Iiq z@f#4WFD9cSE0OrdhAt%)Gb7h$wzGjaQcBHJjI9eaKrrQL&WPiw=Uz^b-2E+a9{}XTmLKBvbu<02f#t zU5U>}-^gQ3f2I!^*7egW%^YZ3AEg%4LOS7lgpHQUBh`7r^A4MWwBBJ{A$S5h7iZ9Z z=XvP3pTR7DCD471-xO+|LpQ{yQD}`L&V2Ahc*!NIei_0fZr9?*BugTN+wk}h!%9Bb z($c|q>EWVvq?vpH=j6Oe=SLPFwfF?41?BU9<%6hXe;`vyZKBJLd5G*!gjV2KfoEEd zu%cc3eDomdIQs&JFPK zaQ6h3wO{B%aX-NP2mhrI-x#)YQ83m{{Y)L78>#HIFOT)!O1WNNpt`#SMniST|HM(G zel+6gSMt&P;WO`kw*)!j9&Bx_4)%GELhO!pq|v#BUkr+uQouj0A>_7Qoko{MQPznJ8aqIQ zh5K!wzmos4rTTI>w@VVY?(36IwjMbzn?uD?z7#HSjvq!}pi^VAsqgZ0w5yhr$@y-! zZD|E|tVzSRbE$OU#5eY!@C5dn`mhTFgK;TBn;swdh0c8|xb#{{I^^?(l(imUMrAZz z@{dR6pc!o8CS_7wXH1!m?l@_*neYEBa7$fFc%+Ld64TnLVfQY|?>3}6W(3_Aw`tat z+XDX=&6cgQ!)0X|+FogflqZc8HDx*)(pO=0=OdhIvSX_sYQW9gk~MttgU|d0G@v*I zTyX>sx%&d==_e^50rC;=*rvv6Y%130^N*L%)9HHf>DWWJu63}WgMvRc#)^ur2w7xX zT_MY!4U3p{$P7J%goGh9y8Ht!XLsY0S1!yir|~EuUvSsFm3^4!MH9waLBZz;T^|(A z>HS_ z*$L?YUpoJ6F@nu}_@DR^dVMYsk#iGB>FY*}R*Mq2s|ZrKc#C{)PGBky^7Q6lGqqhE z4&B`0yld|e8YC*gldp5kX18m0{2fJQoWSDE%X`11t+vDmU?CPceCC`Vh!ocnGk ztw}$4*oP8f?#<$X=blpVR2>$n-$2$YF0*H;c`%KfMYbnfNb!LleX6)kD{Efy!R}df zQQ%?)B^i!amb0LSD9ZjU!8d=}MEgfw=Y#v!;LoZXq`hG<;g&m=3%U4(Ltn78;~$Va z|2VxK=76G!Le;!ppkS)So+$Di5IUoxJ{W zyG(yqD#AT~5rXZssopl8s~KqHh2DOe)!s)d2TfwWQ61zo=`+0Y3`iv5J707?l_tE& zq_I!`;-B*ml=$dk&%@26wZ8*OUO(um&SVq{UehXpg}pA{%%?5*2SwFB5{M>Tt=_~` zE56~!WJ~_d;we>2UE$SRj!>qnDt>ba`gp|Cc&He504>(G!;Brat=pkJz!I2u7U0s zEdlCPrXE`%!`65d`fENCHdoTc^mhC=dIfInf6R}4asnj=;J=}+Jq+>m;qbO zW5~MhiXihyn(JY~f)qOGqUs{no<0q8B6m>q3`2U{8OYabKSQ|vEdEA8l9q}rWjhqD zNm=d&a@0rQ+PhjZ8_eka_1(O!+y+~p_VV?L3RDp#&l;Zg(|~)4e5$rkkcVv%Dc3-mLE$%eV))_jFzH=o6;kU?1T z-IIm?u%mr5M&a1<0f^EbMJwj-!Q<^0FnxF#9aI{|`ou!;(&s#Se%90UN$Z&FtHX%x zUC)*kA0ac*(ad4mKq_0N%2v6Y#2395Oj5U_vWffHgvY`j{5_G|>^TF+bE^0{{5EO1 z#$h!tr8Mza7<>&Qm4&&y&8HSWtP=T3jiI<)W`skpy`l8porSu#W1m9?A~!sNWsxg# z!(%XWb3FcJjiUT_Z@BXO5%_T?7)=c?D7939+-`oNwa!Xx#xHRiWiIStDPrjM@Puru z0jj&gXyASw3X$yOrIP*BEA@-ExOF0DU>5a!n@v+YPf~(w0-5Dcrrf?Wf*x`M<*rZB zqteJ6bF8RZ>oLuC+fCf<64W-1BugPHZP`!;b2)SN-|7bZH|`aaiQEmhb6Nak#abx+ zCx-pUpW;LIW#;_YhIIAYFeq^+MHR(i^OU<3c6=(U+j1W)(Sk;Wq@b{QpM+T#;@2~i(rAHuV(31Pw1EJZxgzX?CuxiQKtfOid`wG7e9t@D_?FS% zzq9zB%Liz`#t~L#Sw-hdYe{ZhFNyyOV5>JIQ@3g}^c+%Y-wJ=e=8^_QAGUx-x(Z2T zThNsq3UCzid5hjh;b|)4Lu0KF&nA%1r6!V(s$)AkH=&O0q0(Xo+W}{o;+&cI`Z=1e z_rIoGV^P?z?8dum;nbzzP9OGJ@rO@D;51c+p2oP7{e~^<aR3KMk$u|DG zfKr{MI5Sk}Q4>pNf1j+z80WR*%L*~CBT{|GG479sN=^<*kV{_rBD*{kU3IzK+sun)RnKX|B$9&H$}jmZ`=lr>w5-&<;q zVVAR*Lx2aOU0mQ1wSr0(1aZ|7BPi~B1okw>Z zY%tPgIOK<}CjTQnq}sg$OKy)Ou?l&JWO?Cx>s#ji#7f9gma=?5!FSzOE_@$VvARHp z*~xvU_}Dxs?h8Vx(IA?t6NU@JguL{+R_Y6^X1M|vY+bjCmi!5Yri&&vjWNYf#r^!+ z*0m&CFqj=NP{hAQ^4zffI>kuV@CE5Xn0sU(OkCTr=c+Q!nhzmEIl+@n4x%--_XuJ4 zDQwwY?qqy~+OD**K+A7bKBApn+M`Ifw!X!!Yf`xHEXpJocnh=VEsFQ{rgQmbd|B6S zl64(M4R2>tqUIOcXR@0nO7EvTU0cv#d6t&f{-N#3cFZ?C9397pvxYJSl<${g+lPLE ztJPU{u2&pg(W!i^s|N~$FLGrab3wmU!wl`!6#XCy8wH-|#s~>EX!&O<y8VZpCVw=CNTN+=EIinEdX*e0w$OtjnXhWcK0}JtMjmR)xDMdEAg9TBIlD>q!>(2 zXOd@kDdgV0!h9ijbxzQ#nK; zqVCUBlv(XyM}?iRy-eRpP999}stWmXn>Z?(yn|GPJM`G6RQ%jI z9*Y-$5^|Cw$WK?9pElNkMT9oy*j>T75gFWWzmUBg>rOutzSFR~fyi`vM)pD$Q01R0 z;w}utY4=WSW-|Qi#VSe?`l>WLZ(`r{RuuGU3y0B#pEx+3>~}9h&4sZPR8fr?_pYII zh9)^V-J|=9YpHFX8=C5Vup*IxnCdx)54;>eiUuh>{=``8`5x*g*dQx zKmFM;6fHhdbai|YP)2@Bbt~;%oO@%umaD0TyfGd0JS~x^zF=9 z82-0i(7NyAo!bqXGS!opEHTBzLvQ)YaaZZCkO5ux;Cr!7}y;+2=`YRrW)8eE*2tZ{sLu+gkQ@sxkcwkVb3ILFhYW z;nA?+*kkmS`Rvt$fpQ$u9lJ1KRvu{%4@TkX+Z5R62>VU-R2%+Oc%JTL61fNm&%CAZ zU!6ELqlBAIwWmX_iKKYSlKduw(Ra%=RAw*DGAhQI3ly#p8ADMX_fH|)@QPm7W_12JGb?~;KV%EvGEne^&BYC!WfeNYFszHh;rxW zVD-Y6NKG&2=_{w=)VL~s-lq^^8_baOY#XV(s$gG#&4IkaXA(WU6rX);`DM3Jr2EH} zHLEYAxJ?P{ikHd`)U-8+9sU07YS(USV561MJUO#2AA@W zQ-bdbbeSBd%qlZ_w)`3|NQ#Ge+!HQOWiVX6ktM9$P9-yhtjgX7G8$WsrZ-zjrc(}L zZS%=nER)G8rjf_HCrtI)eMltDK!R>DjhBV6_>KZMTq9$1tvaSm>u= z+ej^J0G=K?M8U(~Vnl+#A@vLGOnryQ>3k?gGAI`7|QGXRH>wy*jz(PvUy<7 z_w|co(#}mx?qx7!UXI|SHPz|v`2$p?@(EL?#PYbx8MJupX3Bm&lzzFLB%?=~ST)?7 zn+klpXuKk8bZ)?RNoyvnRgJ+PhSTXEx)?6_i9L57(5nYasCncWut$&SRLU$`xWI`? zB)_JYX*$em#c|3$9)t{WSqjV1Cb5PX@_h4?Rv5S8O2=uYXV`|N{cqUxoQpK+nJYrW z{=stF9yU|xoBJu~h_)A6NzX>eNQBi19^wc#Y1Uu5D!q?vc1%P83>&q$7(9)!Y zy&FhO^$pFxF&-}QJ#gQ@k&asEBk|lbSdRFCG4hQpV{a(=UT@}qFZxo*ClxGh8AJzn z9_H(N&Xe=hC|)755sO3SqfsKB=DzRcnUx!19{QOt3B3!ON=GgsdjlJP=!Eh7b5pVkAFl`eGn+LfdC;qORxLX>W51o0$8Q3VW8)LCHJ>EPX=ZA`#@aUXbhK3AW<|N{gK@Cl0yP5usrN|YDrNVGQCp)6V?|Ueb zfyYp`Ip!VBc=n!UbjQ&zLC-kw7#L*poF6@s1)py{6dqekmQzRZppJ(S6)g~wTAwjN zNlYl=UO-LDE4fm@CR+2hoH;65(C|S8)SYfX50cebR#+JAy?>hfq)vp$s=vHOaU=@H z$uL?HPR_pWcxKa!QzsX4rKN*$@jyLdR(hjAU_#vWY{_7_3JcA+0=2LQkPzB#hRvSH z^yfK{OQA7~+V~Se%IDY(v3@+O(B!-Q)}Zm0HPVLkVPcv-rl-i`z?QY-UT~W7ZWQyk zE;`8deuLg0E3iE}am25jk%aiip zALv7;9POziCy9PIT2SDd&vg3SH{_p;V5T}jv_3hJ3fIU|o#ZW&98n;2om5ls$4F@W zOc$O(I!SMdVq_@rU6pgG`=9xrTdh@s%{^Nr9u|fZEXty+t zuUUoF^>cY!_5v(UdBC+?>Pc*;F_~WfinB6Sq}t+z^S&RML5~IgslB7l)svxdUWzwQ zU4lgcWB8d%wwQROiocp6PXil&^S?Jo2z?I|`S+hB^p=S6fAzhn-{%jSHCXT`vY3T! zByFfz%bT>4=~X+}Yn?_4^oS(arv)&-s?7&S8bK;n*jw#4;@F@y?6#*ix!EnCZ*IAG zaQFnB^Jv2zU3)g`X&xoUdob0lhcVh=Fb|2aBhNX4r|RH{vo7*H=X@`|zEQ)U((|Ni zHwN9GuA%LBD=kZrrX4>u$YO^LE%y4!)_xp;=_V@F`y!EQv_|uXlZ1KFMIYN%D$$sY z7JS0^5mek#!+%DV2&~sPRQZd;Zs7}(od28Jj(IVgvBr2_rp3+foxrVkr`TC3Ta>8; z@%;36aB(P4%J4esyWYG+d&e?E$DNxa2D-Hk*B)??bB?b*rv-=B{v-V zrtPN})d47~y-EjsZTXX$ceLt5FZ*}kHnr9`QlnoF<+`mGx{HURbAkc;W_g@^LQnFt zqz{7b^b1it$Dpn{hITEHp_6ZK(|3zv@;g{X!9y?7{r|HP8!|x>>ipp5o#ZyBm8Klt zNo9)?(5iKcs=|gtcFqvY99hF>x2xj*VqfMI_6g%{RC#;wNRl*&LEZj`Xb+L$E=kGw zIBx+RiOa{@FRR$c=m1nKc4oB+wOINof#nsPC5a(cB=$TAZVxXrNgXAOJG7gn)XXKj zf7Q4Ym_$997kSj;m1s5C%y;_hVe)E$cfILHqK>kBRq=LeW3JdO?DPAYmm;W8=x>dV z6T8{_>SVKjx!`6)eX&hBVsZ z*ir3SSS#*D1^4GcJSO6O{Tb85NvTgxj4rn+FY5he*FdW-aMz2 z&0(b6u#eqr_>QH$ci0Jw)1-g!H$N-tMj2@*`HJ6X(JtKK^JRaN>Ovig`8gO|hf7QrwgERYgFPhH1j;5;u zr=)#n6B}JpNTHMWvI<7{>ZC%6TCKR!BzQ9Nvgmt1ju{F$Z4>XuFns)hR?n1V>%K2W z>78COtga@}$x&>Xo+;7`^(a{AtKE9_Cz{K3peMVEn-&&AN~DBe{ck_~&;DjEHo7$L z+b|YTA4mtU?PlI8_k|vV7u+;^IhFT(WRm)#hJ_xCb7{Z;67DSqwH6TxER?p75Ug899>6aXd+kj|sd?(`9#% zdg(me4L76wfKGh9eUI0k&Zm{?YlS}XCfxhi56!0GR2BSy9sMaw$t?%@`dRnL|IS#N zni)Z}PyR#6nu!>*Qxksrfd93Pd~8b|9-4IG%Jw*VxONnixxItBM8AM}$Ixhoo0MJcNXMMXPQNb5@VX~H)HPpqwDoRhTJF9vdIa~|?jNYb z4|~A%@Rp_U9pL#i1>SfO8c;eFq3hjGVl zakTt~GJIOu5Kj`_!Q*E=pvJ5nf~8(`r)zqe!s7F#K^A)DKbnsD(uyaH_oOC1 z&cF^kX*#Xq8>-XDq>GZtMO)a`N4eJh1Mn~s_!1v1?Y3r|_ zaMSQ0+Hp`Lmhgo4`i@M-E5@WFm9XA;K%gQuKsggxy^f;|SNoy#{p+c?ewpaFOd=(- zT@g(UsKpEV#v>c`PE_5=5vV8j#yMIS@R$|PP`A7<2>W-#F2k0hWv1&XzlH-?x%L%p zaKZ(Tb{T>qnjWER^F|}xU&biy%41Z%{Q?@17($=yu>kFlKY(u?UxAlu7T`l&Zeq*h z>)@L|L(uGD^Qmz;`lzNdnV!_?3-+HRO*Pr1;L$^rs7$vR`0S__`cqsTJfEdO&2k9E z(}Vq~^wORL- zW1Kue5l4pgq^6x8kB&4cW2yJ%aDR0ZRdbj|A7(G6=1(cat6Y-lpKeFc)VyQVm&(aF zXw(i|wy-Piv~UF~UGNysc(e_Fs;$K_(c9@=pWrIh^PN$D- z>WE7Yc_U$V1gaQhK=*d8KymY;kgcsX?zYMvFPeQCf9YXJFZ`g1?rmR5UD;>}?<-rO zOG#6a{KxlHTu~sFR9S+Hgtf@ziYHYeoPnK}zots1YtggFT54K-JeHjzO-cAtXx+Fa z*y!5{{OXv9GAj zJynGJi)xVT##riDwLLzP{s`BWIAP@p@IIsCTU2eDM9Uhap~j5eRB*vcymxVDYL3l( z^kVX0sx?doUA?fHN`&u<9#XbNhBh%c;HV~U4yi|bZb`#Wa#W!QbT4|}%U?)swKwV% zq=il{xJCPaABQWF7NdI^L(#Rjy{UD2`Dn|uENXbjQ7qxOh7R29g_7^gr;X>n#|z!Y zqNiWVQRaa==-JF`=%m{W+Vi>zUS1GQt@2)rmZZKyK8hRAh*m4KGEfTL4BCkLb#KN- zaF6Ha)hTGil^67WuOHaT(gvS-3*Uu!?oWw6eMRX#FCw$S1?cNg75b=69?p#0Oy%xa zh#p0i(1(*8asOxiu)4%FEV23vl7068NgmutsXS=H`}B6vpV!_&!UZRg&6imyeV85H zs?!zqjMxYF1e|b$trvY{S~~7u>V=nSN#pKCo9Ka9gk{&9rVY1gpiUwKxNmh9zx}eG z8s**-jT>ByVhlc^!xi_CZcZ59zCi*n+NqDhtE-Egn!DY%T(W7#Bk8NThy`n`8 z^|QE2E#2aevP*l?MLWu|{FyO`E;B&xZs*YF^Nn~@(i-aRjvctx=OJaWGzpzu_nb0D zLvWwL#gs+rM|AY^Y2^E|0?*(6m3nz}6w0n&MV)}>)`gikF z1Q{LB;KDh0Omr=tzV|9#UGW6xZS9U#t!AUj>_=Ea#~jaeT1y)(^TU(<-@vd6Iw_*w<+JFDP!oJ4V=eYh(nmcngi{(jW}s`^e$Xn( zMfkSCaeDeLZ9F9Y9p!QI1FpJ9;ZRx|)ynzd9q1)`{9zh=OZpZnGxVZM%e?USb5rPu zw@!HX=r5?pY!UwU?KB-EH3!xE)l!eA{lwRvDdW7RdR+ebEsAV8kKN(jy8tsoyy);& zI$p;J$JNWzjZ-VpjO~vpNy)d^*TIu^9$t$&ym~_qQ+bYOnZ!{&7E}1(z4yrEa~3X) z?v7<%A3^#<5fv4+2Y0l8iEmH&ik8)krl(QQj2o`5g~EC`32oJK-~Nh7@*9#baH1 zA=?@WBzTudUr#E3*UIJjNamD42^9pKidtN-8L=LvT#AZ7mL8*aM9X zy^g;G7Q=PWHMFirERrd$LFXcV;qc@hbc(wXUIy#)!vV^8k$f3WTz>#Xb?-^-aaO~# z8fK%qycT2=ae}^gARavr+lB8q)#Ki;U($DdCt@cXX|(9HKRVEN2Uge-icOU|QU2HS z@qEiY)b5lL6ufsIqINmK_Yy`@wuZ?#Fun_2({U+$>oX5$`#(dys~=NY(=Xw-Y0Hqj z$~^qBR1f{1^(7_9CzChJ>8Au<#ZFtF| zl>Shag=T`>ui|Y!~h-r0PMrVLNuxeo4BD?B&q zXY~nh{!oCQCM}`ImH1)HjCky4vKKqS^IkDqUf~Zzy3)dBov?DtXKLE))%f<0FX(=+ zQCPnqm(uTf4&Q?Nc{<}NU_YryH|?y&r)S1s*MZwnXSl!bJir{uPdJ#Z~ zVF|W)QH0D&XP`;xdg%3}CNyTvSxTeBU=-fk3oXldi*_Wg!Raxj_)6VreDdr{Y~Pv2 zD|$5I15-a?AFCqVl)sdI2KV5bIvCNn^c+!Uz(Zu;a~`6-`%~}k+2bL1Jt*k~;b?a7 zEBZj=E!0@D6yNMqk1adSN88iKBL9_M$ZMQ~d*ey2F(kakC>{`gSQ+X?cb$XY8Y!n(yJgVK-=;6Nzri&?vP_ z4D!!ijE6i(!pD{@#92=3;J%0k)wxs&n-7SfJ_H}d&Wj`Qsv~yD?ez&dByT0MXzqsV zm&>Cj>p65);(a{EtBR^vvJ9^-aKZY0I-##oY1G}L4tQJs23+`B67Sj;Nxdmvf#PqT z#Z@ycu+6(Mw0EyVxJa)P^*|Bc;dYw>zdMzTX3T=~k_Bbhr<*G++vg1WB)bcZx((Nz zclzQ}ittWK!3q>UG674SZ$HDHZHp7gr%CY)z!jDB^AMyHRIQc-8t!}mfDqapB3 ze~++P$atUwvQk}#pGryNji00N*}HYf*YFzJxS;|oj#Hx`keaZU5f@~uBUvL!G7*G z+|$m?!yT6_Ls`O=c-D^1_{5h(xOZ_hUak8CSERhaNqvRr%#dYNqpd8OT7vPL0~x5N zNq5?0-ZreCSB0Gle&Ip)&%yhCbCLJPK4|H>v*`AZ!L+e=D!xB76)`}Bfm7M0=I&_E}2^ZaY-dhP?HW$_i4o^nKcb;eNH z0}&qCc@-{^O~;RCyryRN7NO#haBNWq-*ucnf|7W76%BQ`i#BFX!1sFUQa26?@zC-& z=&VLHZn|ua_vb&u1IiWP9{CmgdSE7{B-F&mU*@27c^A;*i!`NKYJ}f-woumaJfPCL z&**^A1t%)L!Jbi)=#+UadU0bi+_T?-^BbR_!$nW2m*xksNzx-Kwo47p8w%GG(zf9A zr>^MT-7=)Du$yX~xCG5@x(Kd}|plR5ifQB=1qLH=M=p@Gha2TN<{X<3>+c*nr}@_n`#J z4{)EJC3w|mWBkf^9_s6G2R+!^LLc2#i$>fDp~8!raL&*tlvY48-YY)?O|J~aadwDy z9{m<49)<6D>~BRrgEQ!s%LaINUIhKzwg@Y)nn!Jh-&u>x)u!Z*Y(iT-1JS-NIe4|a z0JU5>fp6^`N=+81qnu4W@SLCBkZO%HeCKHuQc%7@ZN5DLej7^<$;?he$vq3`lEK}v zl&CN6slF25dmBR!GaQ2x4+i7x$1~7mm#*|1?G9-7iuv>;_?@YRqpav#{dBPI<=NDa zVLNc@>LB{Ty(siXI-A~~sf{CbzM)l%mf}TYOR)OOP6+jB#4nat;P1K*=_bjODD3Ar zs8M2Gcyk(Eeo;uzNrT@gaM!{wBTu4= zHyh!1lBDs+rg$q z-^bopM$+D`{n4On_LRk;?>IKb1iw;HMCQwbsBf=#;jeKw=t+X@IDEh|%Duc0$z8ZW z&%Ox#`xuCKR2@WNk8-H20|QX5-WDqVRVOU76@Jrn{B%_6iz&0s15xKMr)cX~D_r|} z4!WTofl^)_rwha4uvz!b*k!*tj#?c}eY$Lj59?pR84_-ILrMniRcDXFYmDi0%iwvA zl76&pOsf%tPjY1+N25=*;npeOc@#o604X)BedxJGUim9{hx zl@)KGV)H!FV&znv0N>|TTHr(%$XcSRo%_+ZjH@_wP&(y!^fs>S&_e5Z^u@dMO7M^o z9r2=+J9LbHCGuW5o|^e29bFRip$<*#fUo5lV-2@k=z!=5>LfJ{3BUHHVi$R${+UPd z%1xoTb?Fd#@^UGB^=$^7nCS-35N)Bh$*Ll|nF@5+CWMP$7orO?x%kNXyXfP>zNo%3 zi5mSf5Si|jqOL|7VI3z&D*B!ru98*7Su3vMa+f07d5J69wxE{!vLpp-rpluUp-%Xu zyC-$5Uf9Aal8(vLMmd9f#?AT@X&=*6dayjQvy7rk1HBj6e08AD5`9mZFXTiVRg|4G}Uz&h2e@&&NSEpkm4K*|X?n_Evi9?&tl%tJ3V(2DIV|?OQ1f_TEF3Ry! zfN!YWMDy}~QgenU;Weh`(1^lBB===Gx(&|*&fEH#Ubpo$uIYXT&(#uOwE?BHf~hMi zQP#lP-o7Y4@DwF^whxMMslwMw&f^(JZx%g3hyc3!#~E}#jEyzL|Mg~@DVzQ_U+#lr8(5%Su2cjH?#X_--8>tx#R)$ z+$I~FZazut!Tq+GdzPVzsmsysAx7xUiqXi_Ya|`#s|xp$-cvKqw&4Azqo@uoW_Wyv z5B1=A3Yz7&lS(!hA-|a!Xy+w4)c%XAjtDZOIoq(M=r)v%FHOi9KiKlakQ;d;T%V_(pcG;`Fj@GKQ^6eHAQEv0cU z5latVh*q_@;k4^_kgQiQ?)3EtN~udid#O3J{Dt+nuKp8MVJpHvW3uVSXHW2L_ZlR9 z+6={gA4A1VfNvi*U8lz=YT(deb+qBra(K>4nwFR`1QnPU(AkdH@zRwC(7RKw(9vPb zX=k$uIP-=CHRkdF)S=%gbTD@_N*q~=2ElV$hny$SC}krm?Ejgb@#{Gr8ub%}C7I$I znsD#&b#FZQQ%`DRq7mM-p&7}&J%Z!DNzvDv1|eZiBPD-)1Da*B5FJztf!}-y!v@+j zQ7e20N;rKz>S0QwU8<32>Y1syMCuCCtbpsh-ixuv@)Pu{wR7>QZ{Lw+>?Hgv@E%Pk zs-tDml6aKLLzJS}7ma-BgK}4mMbdY3P_dg4y`{wtRk*#wI?t-n$91dm0qtSfac?Xt zM4EWsu^=pbVFkaH=0S}=)Di91siEZ6ZLy(*EM9Rz8Ld9~hOQDCqW2~_RK+4~w0zA_ zI`y?CHW)Jyk6zP+1K@e>y1lbdX7C^?@pKhRTv1NP!~1cT#gFKsyd5~Zs1}(wcZF|A z!o}e4JMoK=({SimGyGYvKV=yE9z8xbhW3$Q^uZDoZaI!RD7>dv2y{`&nL%_@v@t$6%bq?LCdA6ZCaUMH z(&RnCg~!6s{ISA`fWr$zn)X$ zq787zqjq>??kzO;$42HK=o0vCu8Vb}(4hg_aIyR;I!MwBr`4;|TB@C}(xp8pu1N=3 zSFFd|J1gR%T{Tp;Y6sNW@e(!U$_u2wN{ha{WfXpXO_5rYx)uG5-A}K1`4N5U8H&R5 z&)`~-0d0Ta1AcR|20K6Lfi8y5r{=?VOmvN}Q1=e1V-Lxx*kofGf>(R7w&Qg~+uBlJ z=j}r!Hp{8G4{TAO)pc6I_!WwMvYNitJO`O59>IkhcVVNtGAjEO+Hqix5DX8X^DphIv4nI6>g7e?p zL-EPm@B*(?9Fb%M&lAJ`RwUEAJ zBE;}kAMSbQKEBx_342v|W7*vP=z51c_%r_Jzom0yP6tk{O~Zau~L^ej~T@(`Y7Rf%t!>)=2O8SHpO zo?a4b13Sw9w}ttU^Z&Ol|M2!d_5VNB|09_H1LRKboN*PE(bo^l?H%~wp;7&>4OzkArJ3 zCJc06eI+gGVp#w5;gv`1A3I*IA9!;v{(Bk2$LSgpB=k2nHsNu3 z0TH@>JdZ#UZ~H1H9~~0JDu~m4BBL2YV)RI#0MS3u6HJW^{%|a&CyHjx!Mi$4ya~hf zP2-F_MSh815t04@zg0QDPjrNVXM&d~G$4`XIY&kM>9{3|0?gRn2_3CnrZ~F^ZCDi9 z2*>N#M+8Q4Y@|bqm2j-RqkxfMaG|3O!I(BYUP+2DA|@b8;4GXV5cxz$3q-+DKGDPn z7l$Yy+!Lx-Scoqhhq&M0aS4ovYD9BZ;rkeTJOYjAq2R}PytS)f;0S@M{a8n#jljmz z%@SEpa7DrdQGj1eNJNmC010HfF!}(YJ@k(_+s9Ah7K<-3Cir&_317UF3A!ZzySdA6 zi*@%@7`gNcnLp&^IfE(>{^U~}Lxtn(%k*LN%Bom>;**GYcVy|3yc~z8bGQko$DwV& z`8Mm%`(TGZ;^E`9W}G#IEC&Aj`Nj+0A0S}HHTe)b zzUw&#pU=y=stiAOt0V*Ye3Wth<;ORh!};;GkY)4bD0FkRwsaPHSqojLp}|B9}-JkcSA*d@I7v9$L^Vj?`g z|3tQZoMhb~y!LtF*AieMc=ZAiUMo@L3Ze0ZY&V40-e>z*NSpA)Ay4DuBc^$qq}|>I z!Nm)2kLZwg`~Hc`5}fe)ev9|_pX5oO`8NZ7r=RLdndWz^FiVjkB`Lo-zx1V+FyS95&9a0O-^w-~{~+;trp+?&Hi zrYzk%h}FyHU^NH5gIRh5Cnp-o*%`$`=g}-A@%>Y=uweNOLKfw zGYc&yvhbg55?UG8Pkm3;4lkF^;peBbbioW3Ci8F#yWh+8`1AP2doqhRxUo$p z5Bt*}@?hgkpTfoM$wHA23)}CnL|);M5&VviGsuspyb&vZ-j}tX&fyJQ+yXDIKmR`+ z&tz}5e8(~nLxpCyj6Zx_Ia^|3gKiA&?uD^jS zDS( zTYvsAoRjCz|3#tP0lFBSKV0SQ@bVFn5$wq~C(qgsNDvuv4m5NOOxjK&Aof%xc0Zsm z+n-stWjL75(X%-y_`x36=W_Td4wiB72?y&q*vvs0W!An52Q@ip!qa!N=L0=BXvfh# zI2g>q1P-QhFq4DX9L(jQMG+*&BfkvEIW`+)^5V~ z6ep{3LTfjKSSYX&x>~!~JG(i#aN{oYa1**XS~?KaMaV+Z7CO355V}~lUCFQ`8 zFfcGDOepSdwkGZUa(pA6&*8>m_%I%4%-dVHnQ(?KxLH~`2sw(|aDz4;@i)odM(E@w z^x%p1mc#faVM9FDZuS#|Xspl?!gjEqDzss77fWZmc78a1o36W~{Uo7_tEB@+VdFM5 zC2{&iMnuD95G0BU2`7*gXvYbr2{il#(**@p-|$?wz(r{7 z?&50i}JPYV-ZG0MMeoiA_M^uev$rg{ROBR!@~Ue>qq{hHFOO91;JsXHNyM_ z@Yfgs_!FmxL<9;5ojvasghUI1q5^!#HKmwfp9ldcGwzTX351^F(seM2I>V0N$zVLQ4gJRm06EAWr&rlL^4=nm6;tWp9`mlK+!$6L$_;r&UixZq57s4m!s1G@La@Ih)%CE0Pp5RZ~*&{QHUq4Bk z)K~5F$+-Z({_^Jq{5nYN^@Lj2PM+ZW`q&NH@AE@dapV%V!P!1=u%24_Bo9GifYzn(yA@bz>M1@D*ZVHe?giC^lPCQnIKLku@pXr)-!6WFk7^fR55W2T4Y5yf3yx3h z6WqBS-Wzal4k!5`crb?(|B6uUxcv^%C%6i?pCjjJOk9xJU&*m=%_MMu3k>R2!Se^s?wamD@GW1y3qqgHP-D%GcPV|imAv&bA z_Y>+RisElyF^4}eG0fop36XPzWC&n4K1oO@a>zC$0CvdC4Iu`%@`;9h?{C~WGAuD7 zGCag5%nUih@dUZ2V`(N}_SIG#BzB#m`~#xkV8c2x(8mwLhbD3j2xvPFATsTX`X2Uv zglHRkUe5FQYbX!P8vcVnZ!v$oy=0EgUvE!k-L?5k=lBg={|KM>|e@6W|yA!dg+6U^}iY3%l~f-}JPBZ1>rANlkCqJWdjnSc5mKUK^=zdd*lV8@H>*GQ4)aCWstD3jA;xxfGJy{OA3t zn6mv49}nJ)KF4?F;t?NjJD$&NfBbj}81Hbr#qp6?e>6G1H_zwv`R&D7osEm&?F&B- zM4TQU4=?k#c=-N`$HUJb3ypt2p2>Wiydw@?@5!!b{QTkByuVCNkI(NiPJqwvDUL6` zUgUD|khPN(6K+16uqZ0yL&T_~%LZ@eyeK>5tdr$F*9_A8+qJjgR>8MJgC3K6(9S&hB}!@k{68 z5uY!7JTfEMc-tl(7qIyDozBsDf0~@0GdCVLT&U}A(ha41%#UsA`|DSG;4O~3p`Q_(VG9M407%m?1{PN-Q z`CZ59m5I%F-i&zuczxdQ-?oS3A#DEmeDiwxTqFCx7%#tn;p08U>4|SI|I>K&hyMF` z%lLTtj&QJnqyKHaZ|3;o>wPun?{Dj!%qVVq5%b5R4PxWP)5T#n{m<(npHBhjCzqT5 zsbHY}_O8kCv)l1W%)Gun$4_s^Cv%kNn{a%Kc6|0)3md5g$FJu4!{;Mg=g;lWnZx;U zw&V2v(|RI4f4n)p^J2$uyj>B;*XQD8qx`+!OXm3U9AEtSFq7l+=L`JtpGf!5{_u7+ zxkfIh_n-R1>+$&&KY!u*e1G)0;~)Nbm*?}_ulKn>k01DWE%g3*dk}C2uKyp#`?vh@ z@%}A;4O~2bTmP#6i}C#5o)68OUw%DGh5V51htJdB#)ltw@$n(^iEIP#W{P`unzAAD2bWVVm%jB-p@aHAu+B_-Zaw5);JhwiOdkmzA z%O!Ji$=o`i%8LDqTskM`&B>8#_N0j0%jV=noZM|z>|f+^dB5DcuE-@!+}?FgPQdkp zGuH-^4cUD2*B87wyiMRQjej{mgvm}GA>+lXIlt*#d~M@v#QNjc_XM%^oYy1r?Mnk^ zk6%v-kNC4NX6?0?{iAKp^2t3G{`oJ$|C_z^|6osrvj?wJGlid5`W&6V{LZi$62et&v!gHJ)X`(5l82@cb?A2lgjb+F}vUAkH6a1SFw0Vtc2%0 zjLnz$_Q!9x`}lZxL!9IPbbR?Q^M%*r;NSYg`#mq#Uq0SyE?&NWoH-=m8r6KfJcEM` z9GzcJ$@v5+eEyon{1HAGBfi@*W7s_L`RC(FAO7$2r^4yMI}~2_(b2I1QI-+@t^rYS z!QU}9+!vm7XA8U-5fEh^5EWw^85QmW-+SkAj!*QRcv?tch#%a$=R_F^xE}(_90Mr+ zx&a9>0TKQI{={f|dYpkJ-1;R{qUf(1XV@Mme%fhR2Sc>51;s}ENof}cF~R25B_NI%Y@a_S-yEHf zgUL70A|cr!kr98WK)$2GxOo2*VN*tIkRlc@8zj)-hP{udedicyxX<)^v=~|N!a$~1 zQ6vP`L|ec7ZG2*U*t|JKg#?8}_`uyECS8n0@*E1J8&XPMXo6n+P94LCI0&OH(Oek( zIQ+rmt-@U~1TQ@Oqs=yZFdv955+^j>qI@EvT>|_z)g_(## z#k$PM3&;O<2vVT|p)gWx;rPG1&Y1!`Hn1ASF*Cf~+#vGK@TOUOWR(BED1k}n2eSzS zoa7T0%Zv%}MD)1r=8wVl*A0b1B;!JE=`t`N6dL}zqIebuOPu~+{QWVv+w#V35^eKN zY@3RW5Jg4C!1~mFk>LCYBjN(WB1Hk*CPcz#;(_NJOAc`yhH$LF7W^$Y&tVbdmj3&-F{Ghy=s_y$4W1>`H876W)zCNcpURLlw4+G^0{jK- zjsgU3@L)o8j8C|TeHa2HIU*-n<2V2=06!6xA$u*2D4+FTHf4kHUpJ|0Gg z=(9SkJ|7!%j7s8WV+Px7n~95!lQ?1u0|^aGfjrQ7o8TA8C(BzfV#(x)SKb2tTF56u zGZ|SRLW8zEOJ``%21s-mSr7yY$PyVwHksG~T_{AB;Sn0>z+Xa#%Fr3#M24|PY=9hz zhtN1#5a;4yXsi#GMr4^78NWo3=s;y`FtIZ+GO-d_@Wa?*WIzh^GzWB?Lb(gqp;R^+!0Muss<><}6F19~7y+KdWOV`;n|p%9mh zZO$L#8_0|dW2RkvZSjy;7zGj=(`5X$kDrZ|i<|Sy_>+?1(!M3)%~B2NYc3U3QI#4fQxWC)$H%eD#Eg4iNHp)fqw z0ZKtgAV0AzqF z0hNJ-4m6_6(}2S0GCDvfWg+<^06C%yIz&DhNF+$!HjBew;1e3*5gk&9FA|4@0CWH* z6Bg*MS+;sXlNVQ9c3I!r9kCVog9Y}^zjAt5CtEiEI{sZ*COUAxN5 zckiyGq^zu}+N)QeK5A+L!N7qU8iNLDX=!T@9jd2iU|?uyY&>FwiOI;3qeq*YTUc0I z3x&3}_V(k(IXE~uO`PcB;^sDavWLgCY160AnBn8&>+A0y6cijB8X6uR5g~#vjl{;r z#U&=ro;`Q&{Q1erixw?el9IA)+4AKpSFT>YX3g5Q>(*`Dn3=g{%eHMmoHztcK!OTTeokQmX?*3mseC& zRz7-ERrTb_^XJvoH8rna*Vfk8zkU1u{ijc#KQ}gh{rdfTb8~C!uU|AxafRlJ8kDY3 zs-b*_LecC$4p3^j)901ShfKIE(^FU;Ie?rf4yD&PXZfew7A5`+m=0;vO32gnKn4hrfZ2Yjd!Qox4_IOs_M9r#em#zxYw2xjG> zDuPoo41fa^2oynG9;za!$wLKP065Tr4^RAIp9N81mE&d z0S7(cgKxk=4hlv7fDsBR6bf+oPY$!BC=wvKMol^@2^DY(aG*;8l%f~{5rWK6BwMf! z0u$(<4^;wql2BnQ2MGGW1DtI206`x{68^vdO97Muh-3kW0hR(NB@3!D;707+*62Ysjj6#yy#9dOW>0)41t zXrV_iY$T(IQY0OL3XpUPa3l|Od4LK4;d{R_fXe_b1Go&}OyXf!ndDQ7BmqzXl4Jl5 z`cMHX08{`v;Ghq_0Rm1s00lb2CV&vycL-1cRDIwBr1XI&fC`WTNCBPX;CF(=I}AL~ zlLt8kfC``|4|?(d6#y#ev+D3y9{kHg!oVC(kS;2&_twLJKj zhXIj?ghCT4Ku9p)zz03>FAx6Z!9UCMECz2R&JUP>EaOK#n+qDhK|_ zrX~lzC7{C939&;Z&2)h2J$r~tUh^Scg1<0>fz1pJ^j;qLfKz}29eBWp=>Qa{NE0AbBmgc{ zqzODfPDnMo+ zV5tRy01yH21;7U!DnQ@^&a%m>Pei4p27owJfKmW~4+2mD0w3fD01g!(@BxRklGFnP z`!Zmkq=3vab^=I|v_b_4d`;k!E&?tAI8-SC$U_AP_CbFD;7|dAeZU1E4;3KrL4E+> zPyqrTaInr43jY36CCq=K6B;Rx5`J7(eVYG4v;J4&xa^19t|pCGG$hV-m9K+;s?Cbl z9X&TsXSxYu6T>F;($^1>nOBH(81N%LY zseAh@+2!N+#RsAe4Vy4idqb~#v!*K9$Bf@zHbY8f*ZYgrmJ!`1-YQXFbJRKKtH^ZI zT(czuPo0?kQ)2iu4fl-(I@4P+YnHD)(&4$5d{9{7jdE0b=S9}Op?=EL7>}3B_IEKc z?tRb*=N8#@_Bws+w(gZLkH@~=y)|BLk06+yf8lWI%rWZaGCP;(E?4bt6D^V)U?RJ# z%wW4#W{a-OvM|T@wf!}P@!iWz?gYA>4eMNQd{XPs`KQivZ{$}j9@A5HZ2qGP<+Z(A z6PNAjWN`OT{`1VoQNQ#~KJQib;pmG~8p)nfHpWSz+eO`{iDUS9&mbyg_l5-q8eaPjB}x z8t%304!R%k&9s|r(WB09rs+-h0{Mg5#-1f7O6x2Yj;6TfWYkB^Rp{|CPy0-y-}Ec{ zhkP?oiBUH9EbW)Ebc<18R}694QI!vtk=x6TRrmV>G7ex>&{)y=&u=ABKy#1 z&Hnza-iPMe879A|uHkyfj4f(eR>4>MZw{;f=CiePP(y0@!F$;gX9nxJJ=EOWZNpBZi3h_veTsNB za&~v;hLMGt+O0`_13u@(QAbV9r`!xo?P|SHHRa>V6Wb$&mv%3ncXq~#kq=`dtD^-M zmTb4_WwB@Gg-N~#${jn#j~O2IobEkZVvCjfgR&8JigIP;Z@WF-a{jaZjVM>?IlVU} zKTN!@@%>rdw_eV4%}9sDg5v71jfEZ0OBFcnzi`=myT!#U&l!H|GgXg9wg%_BhMB)R zZrVNay~{|oi9f@KuGimUBV14-TRh{aR9Vg0U*n9PNo#fs%p0$(I(gr%^W9>u3r)Q` z-Fw_xe!BR4qPv`-cdx4`r!p~Ws0FRDJ*Z@-T5EIt?p4hL3?DyNjvb{G>htS*KWDvz zE*%cHbtf(D^*E&G^KbjCDlXw9&8vn%hoaq` zR^|?#7INL=X3=!`RCTsO!>P>CE%K)p_5T%?|8v~5^1C{TuUt0=2%8Je*sr>mzOi+D zRpZkaMoG7JS$1#rt-JcFwCbkd6Xg&;oX$!rJE8V@$b_oL>oeD+ADOl4@Z0Q)jL@>X ztIDc1t{v5zHfq($b+M~jUw&KdKSZ%n@lfj!TsEVI6lFyD3RqaD-c39g)eEfFUwSY&uPa!Ni*~%JGd6GB{vLB&(8S(KTCSVNOzu|s>gtv=al5>SpqSbP`H_V(YW2M* zhrZv?sPw3dcK-msf`T8X-{^KQhTl$Ha%H+su4~Tf?fW;4EtHuly(FSuG<&>_R$jiY zZ0zHKgH$i)?uj@&@A+Q)Q{Er91|I*gde+JV?{Uw~Az?25lU`&UySQ6oxT=0GV#F)@v*&Ck<&3mY99F-%Q8M=7b{NR+A*)APix1Jm!?R=omVrg^FBhTi)x0$!< zRHO3b5mjcnT{=5ANU8N{zDa8`Yz76DJ*AcJz!|{N`u!G8vB)kF3bk9dqZ2 zT9l%@`m9jh+NZsom)>5yU1hAt?4DIJF=sY!KeKY)_elzorpjgJ$r{%KT@r3M=+4ZO-&)vJ>1x8;m+M?d{oMUkN3P#q$M21! zhx8rZZIG#|cj84=nY{yD3KYA4kDw2~3sk%GcD?XS&7$jb_S_vY|ClCTNqu^1cxm_4 zu(M10djv>i9t`fbyY%D8^?HvF&-UfeX(5(79={+w4>i#~kzRfx0dnsGVlz@wUmmv-#J=@KT4MieERf`gJXT9R2uqs=It*l~<63bx=)! z@#QNIP0VLyHEWI*;PB6H`kO0_8=bp)$o87r?}ryX4xT!?{=3D3b$tdod^6SxS@&I_ zWcmHRM4WEu*E7Lr$NgFAGWTbG6&Rhof71G>4|3N1X4=nIsJ=1AseccP)D`FY{#-xd z=$iZu%e{82M%8Ayn+G)#oHf5{ zNx4>~43%pQFR1tJ@gx|9*ge>FzH9Kuw4A{^=rK+!4==6jSiLg8pz`bNx&2BHy!RSW zzG-Jdsg-u9#jq?|aC*s?M+YC6eq7uFEF zzp)H%6(rnrY?5o;m`6W6G|56Zc)eYrnVGBm(zHc_llw#I@#{B~oeA3K?y*@Z$4_g2 ziP7U1nB9N};a6Xc>3+fP zNlLeCA8-7S?xrSXxhrw3MbC)T>F*|b8Qwj=rDFAkGmZYk6fBJs=4g0t)%M<5*ZjP9 zn4j9k6N+843|~mxbqYMHwBYW|>h%LdU#vAZ^6jKPa=_`cAG_{2zGPFE!rGOcqn>Gg z-=QN+P%Qhk?&Nx3nR)&VO(kz4ciOwP*v(ry_}8{e{nE_8So)2Xi@~~^4n{-28EBjA23*|uI$ORE?S>=VpOuWn`wTh58Xmq zx6cXOI`465r#ox1cg|3Hl&aUgNd54%iRTj6&3RWjGA>WobVTA5g_4ag2PNwm=ziUM z*eZDBkeOFY9AXvweAZ1EVWl|p&BV1QYm0I^I{USbSCJ3x)$-w{!oy;X(Kjx=csWJc z$|j||qFluL&X2U;9;|Q-I_mGWFQqEA{@hvm(kuVT$!E5uod4d?JSV|>g14l%?V?|I zbJa|~NgWZ!m;4<5z$nye(X5008kSln=X%XRqs~swj#ocYSG>u}*4;$t z`4ZWK%WAs}UfI0aGG$DBM+fgq`5pK9XwL50P@U3r{(y%!@}2iY|3Ox*g5O({f$N@L zbTwAKcyZFlTSd^*Q#a$C4eRx=##ybFCusvg3~yjiys-T2 zmNT2Stx~8^itctUsgF)2`~>{9(B3Og3e$7?pFI|F{6xg?nR*B9CMQO$J995?=hf>M z?E^kGcXOThEX}sBTy(|N31tqCi%hkgZ439;4O)Lls%FO7hKiP)%@cKIzFhgqZ@|Zt z&8IFdJO52r-THuJzumja8n+huoL@9yX8jgtrPr$~r}-ED*fB`+g_+sjl=b_^*ZaDE zD*vQ+t?IkW_mD`bF;nDP;+6KlN~ThBmmaQ_-IDRzeB{($>Gc~Q7-u~?*)VkCiXjqa zhblJA+cS@7ww!7_9Ce~{szX!i)LDnLs%v+vR{uJbJ9bM;#)q`a z<#i>KM`~&XRy1qsc28VGc_p}e$9}Nsy5alE8Ra$i!#gMyhJQ`f@X3)ZZt(A*l=be? zj>+kx-uD{3QCr$<|CaDEy_@>`^=l2>+NApB$so-~MzKx5+>b3Zo+Mc`s&KhN{6x*> zM{*Z~CYBuZT6?%;V$Zq>tDfka_kx21E;Tm4J>Pc%I16rWU6u+Mh1 z)};{FXLiZ8-Tmcdj_goB9{%)~&XSP8{?f8?wwv>wo)`Mxc^2kzeKLMPIYb^(VHU z>S&i8QMz#Cn8<|(1;fVo?L{>Yjv9Q-Tgm6in2a|=63vQ=HH5}5OjEPRCzeh;dBafe zMxk1E()B*o-|k*Jb4h`^bL~J~j{VZ~UYm=Z?%#S=Rc2BpSD}5$R5EDznyYgSexx}K zIaYmgO4fI?q9$vsTG6;w_-OFZ0UOV0|EyJ-^>a-(4W)Hkd@^3QyxUq(I>mqA#k>0o z6=z6aDCj)1LrsA5J$b8LlDE1>yssYlI8*s-cBX@WeS)FkdbRD(*OpfgG0raU*EnmL zWsF?!mBu^A3uc|Y^3X8uQrh-m&vo@SZ5bQcskZOunr?1Y4zJfdtm=0s(YG`*$^3TU zF%{(weTV+Ka&PtGO#@oLP5v^lX<(e;9)n@~G9+%7O!8gOa47#>?9`3Jl_N@`@1?Hw z-SDi;{`7+0>CO&4CS9FXeC=wjT#wm?9m`$_H_vIj^vm_Y4b*L)@5^%Mc)Q=bMDnpv@r)NL&+@qr*J7#;W%tb>V$CJ}u z#+TMSU;Y0PcIVMt?eV+7w|R&pAsIr5kSS9tb5X{OMTUq}h7>}Xg(L~3$yAC|h>*-8 zlFTWUd8Wu%hTLcW&b{}qyVkXq^IfZTPOk@*qNnYR>7`_7B;;Fm=!wQB7()jKjTcDF3PI~BZY_Tocc=S#`wX|6>b=|)WVt7g>%Bb5x@ zn7S&49($%+8A|c$nRA&us5Kqbee=)dVD7c-!n_}rZ11&e!yQh>U z@uX>XvbJMLw5)1K^H!fHpVE)*CVo+mT>2Mf#E`98y=W^-qpB2KU+duV`FNvu!^OKD z&CFXrbcWC=Em|+XXJxOs#+E!P-xAk-=;}?D`DFEhr|KsaWD@83XsA^zp2eI9I^05p zn(o^rOY}B5R@``EQ6jEb=cV4BW8@`U^>ksw@wn^?)3YL5Hi&mM=w*jAJ{|5!}8W^h1)nu{^N?_ znda!%rHtGA5C5yJ*fhoXl+i-@xs(>Qs!3j?{cbWA zFA9eBhjlZjtloc7`}Wn>XX8}Igw~;pvOIaojY2=lOnCzSYO&7bZ4_!-%lEo%ruh6( z&d$pn`nL7Px4mwfkFdYZn4zY!{4GKKVM1{m#kXe_F^3P7$fvH0$TR5s*L-!8E_D*g zND^MsF@I=ov)yg8zKUd$dY{JV z&laX)=0hTS!NGsJ&gdVqwqd$_jB7`0k|(#)xB0dOldGZGJNTsBk{_H8J=hml=B90a zkBMLT`}tZN1l{7d*Kd#X(`T#ay@~p8Ids%zo2Jf3O5fV0^egkp8V@-9HFRehjuR}g zKPpZITPJMd-){AE!*oFNpi7XZs8+=Ant4(Y`>i@@Z^$mm^7b)ipAv6V@D~w2TglF%O5P|mZSP9T z*SB{t_4?eok_73nO*UDI!vEae=eMh@r=3~3&VTW`cI?jdzOQ@szBh0&j9l#<(?1YN zY@Cj9JSKl#N&A|UW)Sb%eO{cWS2N@sgvU0A7=$GS#cVE6ZU5KLDEcYme*ey+)lWLh zOz#Z+F#BBV=;1V}zah+rBC{|pOXOSF7U$P}MVd1Lc9t!}VbU|Ep7ZXsCTZIqnH~Dx zU2)>%>k)4A(+OukgsQZ;Nq(bfo+@c+e`38qsF2~QPmbQB0=dui{>q8s12)tq8*S~~ ze+D~hj`Ck(vnjamu(d}pjVH2I#QDwGQ{5o{?jk{9Ni!S8HqWCxiEX}mQOtFe1=n?~ z{ypYCo09vunLU$-Mw%(zq4#`bqg2nE@rF7kll5O4IJE@^k_K7*9h>fcMx-7}- zcJ(N=(OkF_UmeAsxkQO{X(RflGHfjIcAQ~&Vc^ruY0og)>bm`eB^NZNeR5=qCd1)zj(eA{r3+79H->iQ~RmpIqX}T{;n@%m~FLwp9fAkHXw(L3D zYO^Nwjq8(atl!@=(ti%jP@-nMjg|R?qX5tkf8dxp6}=LY}@O( zuhHApR+f)7JhInc$Shq(ue`fEM6kf4HYCd6>zC3!JkcW@eA2$-Dm$M{tmoDhf3%=Mn<2bUel&EB{pqEyLo zIq&sMe!5Mp#=)(terKr|%c61(qcR>k+Nf(k+7U`+{YK@)0nfxP&C4yW0ero^wA1g- zom0-RJMU3mae>A=BJ}sv4sEsS>6nxg%fc1=Z%)!RY#Lh+w8P(Uq$p_BZNGl=!>5-O zfAh*GKCJvQ;%XjyN!M#k8@ch84$X_1(3pMwotr#vrCiy>`sRuwUB}SiD;rV6{rs6Z zZ~8)dmZL?SQ+NA%hE%>%H4`7Wr;~7Jx}#LpX7jJrb%8Z*tB{|yX1CPREjCkzZZlX9 z>?;{P7;<#u7KO7fheZ!Z)}D8-`N&qSS^Qg*?%cj8 zhEUrdKUs{%0;K{1E4wNJjVP(_tsHM@JM?rnmodkI3Xhy1wi?Ub(n+@OYA$OSi61w_MA#ciyr`8f)h5O!W{N^3v9qdCH z6PNQRc}d5h*VR6DW7xxi&?{15^}|eiLJHsB*2yb~&)z3JEt+GPbU!D>huQr5Eq*?I z!N_NdVYk1FUHRT_zVp}Ro6%}*+g}e}t{hD(a2mF;AFp}H|7YJ|Yl5BnqX$hJ4|-dx zBux;(mp*q$SR7jW`t#h<1HsI)XD_a7HlVwvd9(7)_G{m`>B|FB+hUA2DmkwBe>@$zljUnLh3@8#_2Cm|{sjEkGLY_ln(FbJ*u)dJme-Y!jK5Sa z+0efJSS5aGdB;^<*X7cET-shIclym+honZA*|%!&wa!z&_;l-0z~-VDjZL0eo*|j< zJZ^0mzOuPK%}Ug8{^Y)liAs5yHkz>&u_%p@-qiw=Glhm$RaZ7Qh>a_iMiuJmiG zQKIXASw9|ed1-xShyI72&9&E6CH_gawB5Fx{?mQ5dC1v{J@LBEVO^%o!Z)QMvDVsW z+oKc{?Dl3g5K|^c&ui%(iC|PKz0k$uyyx;_z8cq!47`Fle7S$V&v#<+^h@QFJT$E6=cj+7p~ zW=X}}IbE{!;HQQ=`fIKJ8!rG%5W; z+c$s1!xq8tsWW-YJij-$hN$GP6ad_uN? zTSS|R(+$-K%?5tK8Ybxt?Q4dL8I@lNNnUpUEkfH^^?x}Ve_+wOxqkkiEtjONBh9vd z|Jay5&~wuZP;laro+d&6Yz~b5nZNg(V&`a}?XTiCdyQV&Yxk4i3Qxp)_O6G0qKG`d zKz-!%eiae-bRw)HU}Q4DG*!=4YvJ?Ux!!DDk%jlEFRQN0DZ~e;8rk#vwD&6&vQlj{ z@_hShU;Lk~BbFSZ z2i$Z-Jg#*`R}J}Gyxd3oT9{FCjxw6TH~8(u&<>T&qDn7%TsS^lWIxFr(Oaa(Bk(tQ zTZX^l7NY(dA2pR4D?{7Rv9eC{*1=BiF+;USaZ){F{$@{yCWxu(VWuZ<3-s5^%txQQ z$o-Jd<(%5N!-6)qKId*+O}#l!@Ts$0_FHVc8pGWvE9uI8%w(&l=2fF48!D`XRi;{s zwgnXlskp{WJG|##&2Xv-5>-s_wh`RaRo*nCp&4CQ)&=FtN0SgDMlzs!S87q3oIcmJd=&*JQz z-zxDi@M2NH(ynZN{hH~^XBl>zrmJ(xrxp$`YU~#fxy&QMvQTaRxBKX+KQh&AE-Y-q z>46+y>Swo7Ke@e)$QEH|7O<9anDS(_S^HO_`<32z>(w&mn5Q1BGE9#54|Huh@UgJ{ zLuX{oOQwDb>815+p6AjACeFLf-PC!1obLITG_6K+miy5)k;)Vwq-yh; zWXcO@MK66Bc>HLy?C=%$!hkhPVw|s~di{k^Ez8~c+GnhH68(9Jw$b5`#S2NBZcEz} z0*R6}>jG&n*u!p$1>SiZ_$@yvEE#B{ZZ z@iP~fEd^B^ozLRl)E*o2%uBuIgFWTeGXfEVUeU(1wfWOE8O3ddzrOgC?-&--X0Ps@ zc9B}~8_9X~&STzcvTx2i>EmangG0(n;oaM%LL<1GFAyL8XvJkEi=7oqtd`QvE_b?x zr^3GO{?UG4iYB0!$3ytrFJl|-5h0VsbAzjAs6TR09T3pE+H&lB(RQ&@zM5;FKl&<% zs4q5&$LrTv6o$0*8Ze0s`<*p;v+o~2UwD9-TvG1L6q{%MdV5uExN2L#G$S=rL%^Gh zZW6st8}GCF$~{>RJX5@2+0Lu=@P}3)hYaWP?-lxwtP7(AH%%K+a{R&uWm^a z9++-Xk10?ySSh?A^pB?`hVp)vIyIx&w#HMjC8P7kp2D0NiCt5)Rg6g)cb>gbu08Y5 zSKnc2ZdNTQ=d^h;)6eL{0@ldmll{3P3=!t%`?{X~6Elz;c5)ypTPbO7Jb!n7!6$x~ zA`R25e7FT=xxHXRs>bJ_bhh3$tJfDR?+Tor8W!jn+qYtp|MNwCLtv(8@ZH4y#NX}K zciWZzZCE#8nxGS+%`=pG=I!#vkS6i{&5KVnbJx?%rmNE*4DXaIeBz*SW@I~Ys@I93 zc4Mj8k6ts{9{w1G6_hRz40LfpD-Fe@dHt9A{1XY|aUYiqP9{s5iA6A_~U8v~nz)`qhH0X3_ zwo2i{jc+t=Y;mE#|0()Ku5>Joer~w3^1gS~LAobup|D$BY%0-dNQBGLyr_2Cbg{@X zriH@vmQG+}NfnFP`mnAvec@QkYpdhCyCVAC&SZab+AG*JCtmkAoId%`fyUD;6zAyq z$9U6wT%ucjEEeY$Ybcj%x&zdVI`bR#>Ek&|Hg@H9Udm@=S~31=-rdzR^j1jSe8Y!? zRx=A0x8eT2^4DSZDME~vl}DBmZba@Jv^Vol38MU7!|rpMrt9oE$9(;pT90N5oUS?k zuFUBSa9NZZ*ELj3mOdk2C~+Y?C|vDNoG#_d8E^eD75aNT8ltobI$FhgZWlI*F;vyr zHbl=qxO&Ci-jFSZ)n|9VICs8h!Odr!T^ajIxH+zDy7}Tky7xj47pw#`6I__|b=f$Un5v)T=|9W<9pA6dJ7 zX89f}c*~3Pto|jpyh+P&Lk6t~UL95cm;YA1*I)ZoQ0};H?lu2xSMEVu3Q-2}r3Iz^ z3fnW8t{u)fS~=S3bdg@Acat$qVrJKI?iZbWi@rmP=fZ-$_)jf=YOyR|iWE6beR%HA zB8x}hgVfaQgC?Tq#;qUy^zILoetx!1?6hJQi$eIWe}kOPcZ!7g&t@$o3O9YO;9EZ} zp=IV(PMh-k-l@L7yt;3GZKb2wQ~W{tE&D&gu}}t!NZpegz03kmc4w}8+Z@z3$)oQ% z{GBYWM5Q{tJMByNMx8IIwu72P2rQNbz zoh@6YSeo1DJ}i0iXSM`zsjuZep^5JvJUiCZUVd?3hNPm7R-m3*$LsEzjU}#6xs>U@ z{whhyZT_Zf!sKi~@nFBT`kOMxGY%Uin!a8siM-%Gaq|6!(Qo%=Dn$ zE_O;vqpzPB*cO$eC%Pl#)-#jxJ@FL+dsPOHXmZdhPuz2>8Jqsvbo0+kSHYl1kJV}z z9t8B#WhOlNXmi=>Nj|TjRI1B8(`&(}-Njyg+8b7BVx|!F@7hR(aOt&^1r@smn|0iu z3rECfWu5v~W-_|sK6+`*dE7xhYeSXzo*U!bX=BV6gLGG~(AVFs7>Y@yU`_M#Z4ayz zIo@q}cl%gWlW5}46uGsEJ(r4IwW)2Bt_lmP)W2&eH?NX>7IV_D)@H$?oKbL~!Y!^X z(dxZHWzDS6-4m@Ese#N*>pR{2XRdwEq^;7vAhm;U{^|}6d6B4zk%U}1x!Jk^_MD62 zibEHKU39)=jYm;(%<)d2+^aMY@zi@UW6nfJ;iAK)ME)2TZ*97cOUUs8y0 zThXih^!Um%N%nJ@x2YOW{9~@ort4ajdMCi}cBVJ#Qu%Iu}}@5eIKUmg8<<$~P38X7`f!{(ekCNtcT9B6<$_W9mJYR zzU5$UBcmWo=$2Qp+v%G<+u089`{*RIc)dJ=hc+^{A@a`PNjtwA&4)sd))%fkuioeF zQmJ~BGS)y}=8NN?hf?=3QzyO|dWNbD0cqo+(^ltFuSta*XrhyzPCkDzSR~?mhngJS zS1HW^^=ccYbD|89abIpNEJ|n5)64}VmaVT8xsN+lCp{l>ubjG&x2wRev^!}};^voW zD+*mlB(s-=SteKK9`A^|J+PlCP*^udC%%-}qHx$fc#N3cqNJ(z_ffT}-vbLnkJ7)R z>fL+Wk5`AK&YRMh1?H7smOoa{UiLG)_D4cdaK;&4*mR#UnR}uS2uGtP81T=b|OP% zr@Z{O3pr+e*9mcYkzaGwj!iVP_sfP^9#{GDD4$KA#$V;fKBJ`Jlds&cYvC+M$ol3< zRu`Q?4ln)o^}YTE+|HV|ihYX@LZ1igesa=~D^icYUTONJCGyAbTnu+eWqSnc~qlFw_+B70J-)3~H%;)6aVsSP)dpS-Wx-vOBS+k{lC^7$a>=AW*vR1@xAoXj%c-3@uCBjc9&vk-^`mT zKDtsbJx|H@v|jeQ>zne?j!DUf(dD!&zP|J(f}=joUeS+ZrdciPL;Kt>osD_I>2N%C z$$D9i=suBKabtE<&6|aw>WNf8?>F?hZC@X8YP9>toZm)yMy~Fj-5Tr8L8BneO!~XD z?|ugEpB8rw@eZ3b5N?jqaq4VPP&XJA{lI8n-JGSnzxT~x$w-WCp<~X=TO*zC_cG9A zCSRctpY>4Xd|bo9_v3F@AA3Y`o>8Y^ig-xL@slTgDb76LuH2nF_W$)cCpDF08QrkCj zjHW&5ogE5qJK&OZ@aDxI8^!g^y}b-C$tj;O+##EGf=70LLjOVyMZCxnDaw@h0ReaS zQ70POl&vhQZhW!iJs{&H=;x;@#i+l&5+FIDcL=5~JVX|Vs%Ei;OE!PkMA zZOzU_FYV4MZP~iNrd0Y$WvbFFEyvn@V~3iX?GG(S{`i_6`drMDWxsZ3{+Q3iLlXb_ElHTG!F3k&`9lcl>mCgQzs`s^5YU&0ah^EV$|JCevO%`vdL{^M;~_vF*WAV>M4 zKT$s1o2y0$4xx>&$0TTSo3mJ1r4ol3?~YDgY`q%K6R)w0HF(f_@3dsz>W?3ac|G@f zBx;x##XPvm)fiI4SoR9NZB}e8nDI3zSo@hweIkv0!)Y02o#Q=kqcwg$bdnjHdOw;N ztIEyQ>&Yw^CV}4aOJ$<&CN<3_Yyw6a5+?b@{84NvzECK=Q}G-1{;dmQx943y7#T=6~DVt?dCaV zv3kkRQR~FjyYZdTc2pbr&n?=1SAIlnI5C^!@KW}3bO6)!O&+>N?Qf}jlf-t-GbP2% zyWThX5s<7C9!ENT9!t0Su1sFt^S!BE&O{~L=k@Be;-v`M+L8RA;rZgz1_Al?wdu)0%$Fx)l@kni zv29E&(&V}FOR9`bK`{LT?GN$zUd5;op?5WtbI*$w*)4ut+B5BL?>sxys8eMVeDr2E zi@MDzp=$+?1G{$*sriqErQR6tACIzJz1co()lT;#!CdFttKlvs3JOn)(w>bM*kl~7 z3Dzsk+ifO6~41B%h~zU6>)KMu7CeVPj+>^ z9?8zuzvt~erTyVU?8A_d?P?7TQ4v?JEVC~!Pfs2@_Nw8~p&J`!W>%(Nyij-U=*VA7 zPq&@O$%B7_R z!;c?Bt@rFXJ)evmycZ=TEO&3)wnvhiTj7m`CLWiDS(wL=X?&0R<@Utx~Z+A^k*A72>X2`L!^0QV`^Jgp7?_V%*r=g&2toILq1GcHc~ablv3;?Pigw6E{1?C5Bx zW_^A1F-1kUB3IY$>oGADj-8!(Z3YGp`m(Zg3(lSUvTSbtoNj)8PIzLXIp@@=4>$b$ z=Eq;YJhYXbep6>jiF@RwOEd1m!iPO~@3t1=;Zgeis}5H3GmMV|1j{s3;r?S&kX)$;GYNnrr>V`{#4+f1^!pSp9}m? zg8vBk-vfVb@P7#YYTzFM{_NmC3H}Y>zXANGz~34C*T8=Q{42nJ3H)z^zZLjbgFg@W zzXbm?;C~$a)xn<<{0+h18vN(Me-HT6gMU2uUjTm-@K*(YCh$KB{-?m-2K+_AKMnj@ z!2dP)Gl0JW_}>Tr{opSG{x0C(1pX=D&kg>`;C~VPcZ0tq_`d@GU*Nw2{)^zR5B~Px z{|Ws4!T$jGp9lXt;J*O=r%C_dF9H5`;J+RG>%spg_?LtKLGb?y{zt&S2mCw0e+>K& zga29Z-v$1|;Lid6wcy_c{$}8x0RGM3zX|+l!9N)MXTV{#D@b1^y1;FAe_Nz<(q7yMn(S_-_G!dGMD4|9e-q{GWsWDENzmex4*pxgzZ3i;!QUPHJ;7fH{C|W0 zd+;{~{~h3e8T=oBzX16E0RQjce--@0!T%=sYk>bd@P7vWU%;OR{3*bHGx$FOe_QbX z3;r$O9|!)H;J*|6-+;do__Kk3KKRRl|6B0)0RJfPe+vGE;4cXNx4@qt{B^;99sDnW zzaRL=g8v`z4+4Kq@b3nH8St+I|6=g30sma^_W^%a@NWeFRq+1|{(HgS0sJq6zYqBP zga0h}p9Oz+@UI1bY4E22e`oL)2mgQI-v$2J;O`CoAHY8Z{2Rdk3ivOB|1t1C1pYJN z{{s9wz&{=QbHM)r_&)}JPw=k<|03{T1OIsN7Xg0-@K*)@CGh_U{(Hbb1N?`<|2O!b z2mdeNF9ZJU;7<+y@43<8f&T#bPlEqW@P7sVUf|CF z{-NM60sh;-pBwz$!2dY-r-J`c@K*u<&)}aA{$k)i2>w#w9|ry=;NSW`{;MQ@f> zTZ4Z!__u@qbMQY2{&C=+2>wIh?+gB;;9n2^is0`G{xRU+3H}D)p9TKsz~3DF=fQsh z{7-?uANaone|qpQ0sl+jFAV;>!Jh~GpMZY>_}78|82JAH|BK+i9sG}ge;N2kga0+~ z_W=I`;Qt!@oxooQ{Hefy5&SoTzdiWNgTDp%zXAWN;9mv)yx^Y<{{7(p2mF)3pB4OF z!2c`w-vIvv@V^iKeBd7e{^Q{P3H;5#Ulja%!T&n=r-6SI_%nll1^ADEzXtf927h(% zzYG47;Lig7x!`XK{%^sb1N`!1K|G}{GGsG2mGnPe-ZpQg18k1n|EP{(Rsc0siCQ{|Wrfz+V*n zd%^!Y_@{w?6!o>mPQIe5el2y+zxHYdy<+=pgsAkZjEWs4XQ(KxLpXkl^E6+( zRp9${W|nR)ZNSB#X}9YOTXuKvDA1hCVZg@6r zr$(D{-o|*7TiM@h0tfcf{*H>-+tBm9%8(lHqN4Pxq&b257{9?uLd#b{1lgc?!n4u z;CcMq%KFANbER+=zRs8XcPdLNIDTbe6nJ8Ny4BR`{@&dRLV3=NOe~`o@ol$%6(q;q z=QgaZ3`*z!Ztrr$=Qzi<%{+`H@dLxVQY$t41o!cBa&O+i%&_sr`{>y>nT3+|S$tc< zxqe&d(Rt;({c-o#nqA6>zb?+tV#s#=x4{!9OGU138O z43Qf}-H$6?s17~cE5Us0lF|K-wr5Tr3^1)`i&-2i{&Lf1NqP4|PEAO8(211G@hvV{ zlAZ4Pn}wTI?mn-7dS&Y-H-`sf{%=*jFYh^HXw(!awHU`4^I6|pKX+QwRR7t>Uh3OJgRfhYxg*c$6>pcQ3N$`- zkb1)A;R*Tc6c;W=Ebms|uyUN&Isa(ew_9@No5tA=eRjQW-*wNADNXUlmOsa$_OVU= z+L`r9zQMle=P*zIzPv+z$9mfys9u;g^Zm4CYlY(b3lmLCCRWeZY`3`Y@4fm>>r(Js z&W8i|cb}+wBJ=uricIC6d?xw_Lj_-MR+&56hc)_p z6v}p9v_7Y!VNu)y{zl+$0{%7Ne;fQ8!T&e-XM=w{_?vwy1r@HYVe74SC)e?IWv3I2}YF980n;J+9A^T3}4{M*1k8T<{wKOOvC zz@G#B8Nq)T{58R!7yLJX{|oSc1OD~k9}fO{;Qto<*T6po{7b>V7X0^szc=`Q2mjOH z?*RTEz<(3?tARg1_+J74Kj6;_{;uGE1pMc~e+v9t!2cZh-v$3=@D~LCci_Jb{J((z zH2A*<|0?kR2mT7+-wghu;4cFHkHLQk{F%Z3KKP#m|7!3b1AiOvUjYAd@V^ZHS>T@! z{wm=A6#U)5-yi%Lz<(b6DZoDy{7->@0Ql2`{|NYh1^-Xr-vR!g!9NH5Wx!t={42p< z5&WNke=hj5ga2XhUjqM);4cOKG2pKc{-)sH3;u)P&kg>?;2#M7)Zl*t{4aq2Zty=2 z{zt)I4*c1`|2p{lf&UHgj{^T+;4csUKf!+=_#Xp*Rq*!({|fM*0Dmj+-va(u!9N)M z4}iY}_}hZNC-^gge>C{3ga3K(?*ab@;C~bR?ZMvz{4avP2KYY(|5M=q82oL(|19`x zgTE#CQ-S|7_`8C?H~8y;e;4>Sg1;8{KLY>b;Li>I8^OO4{Jp?`2K?`U|6lO81^)-& z?+5rw9KC@XrAMGvFTr{ygAc0RFS! zKLGyo;9m~@C&B+8_?v*g8Tj{u|0MWNf&Vo4r-1(^@V^HBwBSzz{$=1F1O6w#zXSZ) z!G8t($H89{{FA|71N@`G-wOPHfj=Yovw%Mz=^y;Bg8xtO_W*xS@LvaiCGhVAe`WCh z3jR;P-xU0JgTFKQkAnYg@Q(xkTJYxw|0CeP4g5>Me;4@ofj=ksGlTzo@XrMQEb!+7 ze>(900seO2F9QAx;I9Jy0pKqN{&nEL3jV*r|2z1HgTEm7vx2`6`0odQS@2H-e<|>n z2LGerKM4LD;Qt2vb->>d{I7$*D)>u)|4r~W0RL9-PY3@E;2#YBJ>Y)>{42o!A^6_{ z|Bv8*5d7J|zZm?Nz&{84gTOx?{3XGEGx*;H|103{0RC^m{}T9b1^*)OzX$$q;6DQX z&EP)<{`bLO0sI-j|1$W$0{1pjvMj|Kl*;O`3lN5Q`w{4aukANV(be>M2u0DnvHe*^yg z;2#P8{NVoy{CmNF8~7W8zX|v|g8y0Y4+ejF@Yex?b_f&V1< zzXtzW@K*$XQSh$-e=6|j0RLw2_XU4C@OJ_KZt$l8|2^RU1pIe{{~Y*V1OG+v4+Vca z@IMd!Zs0Ef{y)I~0Qir9zbW{?1AkiZHv<18@Gk>@HSqrm{$t=D1^!&%Ul0D5!CwRX z!$|+&9|Zp5;Li&F$H9Li_=ki4OYoNje-`k!27fE?R{(!T@V5Z}U*LZq{42r#JNWy6 z|7P%y2me&?7X*K9@Mi%3Xz(ute?IX44gOx>e;51%!Jh*BJ;C1z{8zwV6a068|4;BA z0)H9scL4u8;9m#+hr$0X`2PieG4M|Y|5xCD75uBfKOg)(z&`=}$H9LU{Aa-b3i!)` zzb^PIf&T~a?*RV=@b?4%BJh6!{(Hgy68PJKe*pN$fd3cpR|fwY@IL|mE#Th?{=(q@ z9Q?O}{{!$>0e=zjKL-Byz~2!36TyES{7b=~9sEbZ-yQr@z&{uKAA`Rt_-BBBI{4!| z(LRKL|4s0J3jWmKKL!3x;2#J6`rtne{?EYwHu$%K{~7R?0RL0qZv+00o{`QBp9%a6z~3DF8^K=|{Lg`Z@ll2|oze;!N)>94l7r{E zRxS@JhuoK1kJxiVQ|n#Nc%!L*g6xy(9s7UjC2r7It}&qBo#rI^Rp^zsRl2TgbgQuE zpGC*3r;|839$SArajNjvIS(D9wV!XgZP*W5JdJr6cJoU%alN#iacRhsrZ``lwnc(3 z_Jb-5WmQfY6$RV1vwP!M)eW7$Pu!Vp{xnlCa^d##i-MysZxyY`&o)BzroY zQ_|y|d;}>!-qr9Pgm-SdE8zYA@y5^d-!G~u{r74o^xtcc$A7P>%Z5&*H8Y>+p%L$$Y1;4KS##Z-SN}~ zYj=l}GO|j$9sc{5|L31YRhNwu7zKBZWwZV3bGx_v@o=6if4x9*C!X?^J8)u}SMk<2 zk8u$JuRB6i8ym)`|9}6!gM$Nc`SNAL$H#~8_xC4eXJ?7CXU`Ju?(RfwZ7m@!ji+!^ zP!P_}&V;zQIDyBE6J1?hM0R#I;qC2BeE9Hz2nh)x8X6jiD_5=%%gf8ev17-GLx&C# zGcz;9ix)45j*bo@Jw2Vs$;lxeJa|Ane*Bp5^z>YA16{%Q;DNTj}j^>D#Yi{pNahZd_qi2 zj2IjoB&4LIh_J9Q!oV&CSh3OG^teJv~i4d-jZ2Sy>@8H8lx+eSJbsPL2o<4=1#> zwTZuf|KjPpltf@)AYo)=MC{wQk4Q;LAu=;F31eep;?bi=gqoTf5gQvz+`4s(c=+%k zp`@flEG#S#rKP1rVPPTB-Q7(H2ngU&#+%5W$4Si1%@J*FZA4R36T!s9M6j{35mQrB zgsrVDap%q*LQ6}F;N;{a-o1NAJbn6<2nYxu_V3?MI668Kc-SVv#l=NjxNw26v$G?D zgM$e}Lqp>G_wR(Dpdhhp*Dm7b&6`AIWF&F$;6dWouU|xQaWS!F%NC-ir-!hyu^~2W z*g)WKiwQiYo{*K5CHC&!OE5Ar61uv&1T8HsAtWS3SX)~Y)z#HRdwVjfT*jh zBgV$Yh#xeLBL|IuG5gi>(T)TFS@bK^;4jec@yng+faB^}YbaZqG zDk>^sadDBrWB3VsdwW7&UY@Y9upr*Nc|%;idX=cEsv>xKd5PrYWTL;npZN3V50R9V zM6j~55-u(-#MiH1i5oX=5D5th#QppC2|hkPA|fJ!7#|-eK7IN`n3&8qK24~rs}pzc-X$a@B?%T579uw{moPOo zCEmV$OK@;-zyvXXOJ#sxGR4@g;*U(gC9lSq9tOXUxa24C+cIN}&)`-b#OUqAcpM_hU95j$t`shJ@*X7C~3#iek;EyLHC5D&n5D{k3K#FYa+?OxpWQG5z-$xy@? zUcjYy0-qJozYSh`pc9S}8NyiY1#t#2(gv|-xCAU1$6sKu2~jYK%OVL@ff$c@&=$j( zJqOEX#MTRpS{%kH2IFxFBUX>GO9aKgpf82n@CkI9FhcYgCqImOB*-aYWUUb=p&+me zw@4H*cnD+u4dY*on0k+xi%0xDMkH-UbeMqRI&N(QMr9)+O$PC&0Hy+n2TP2S4x*O= zqi_S`t%wo42r9CO+z%LqaYRfW;OOVANO<8EPOug~;N^7+uF$mm%^}5#QRK zwj(as!2LU-_zPmZ5~G}q5w}1z4kCtYaFqCi+9^b*3Zjb=(G&|N2f%3z)PxaJw-D*W zh;VlB`hg>04RON>vRN463LF_7i0^xdod6s|wTMn-96`=Fe*WRu@kYcwL{w@bnx2AC zKVq~6akqexKaC@77BS9^qhk+vdf+IaK}0?R*K3G|PQ->U7+ytuX5x602J3RbK^#^2h!uPt z2@!?J?ZL5m9>?1@9Kkt=yb{FKYs7Xi{+OfS!2sT8aA`VmIixXy3iz!uFwRQ26%`m0 zHC(<&xW&o%PlEAb&0*BKz-ZX^=_6t>(ZOc7W?+u(n1Ve#GrOfw4XXMuiyRTeyYi zFk&8{sskEE7~?hElAj><2IJ9#KLgDaNhMN1SORHfb^TEf_foj4dCC#UdI$U_4Y2 zb1Yy-iHNPjEzbe%GQ=+x;)DWp*+AhM;`S`!aW7&n4spPW2v!GiLojm&?eB=*2}JoF zaGFIVHY4&rA)03p@dX(B5yb8V#O-ZF=5s{TMU0&wVtEwN`2uX@5y9a&UIq}Ee-U4b zpg#r{JmBJm2=4_cH^k#1M9XiC<~EGzc^n74h+#31uf^y_fsQ*Ot_a7_NkrsEMEElt z1zT~vl!G`oj;vM0ojIcA0QepOar5Yd%|qm2u+UgP*YjAN4-$BQIlZWu>|AL1Yd@gI+PZNQQC0C6#mxJ?D!KE$L7 zj#YgeaW8Rn>_U_+fO{^Eoq8NolQ`<$;^^Inqa_r_h6#?xyNCvRL?$PWS#d-)HKH;A zv`cW@`XDAgBmPAYjr}-AT@VplaCAE0cs0ZEB7oxp%M#LtEcj$mAWH&Se#xRi78SBA zlEsKDoMdq&%Nki$$l^|xX0nWtMU*T*WH}^D9a&n)l1>(9vb>YUlq`c}*&)jKUq~tQ8hLejd>ts=`#OXsW zF=Wvri#fSakcE&es$}^l3p!b@$wEw)EVAs9WsodZWML;uHCbB8Wrkc($g)S4QL>$fbxZfn)(AODb8q$ns1Ub+WvY%LTdAkfo3;aO46*E+Az2 zA{Q94h?8ZGETd$}B+DqdgpkV$S-{CsOfFeu5hWKEvK*634q5uhg@IhW$f8IVYjWu# z%Qv|ck;@yokdTWPS<=ZuO%_&iQ6Lv1vW%1EnOq*oa!4))MTJ}>$t8*`w&XHGmT_{qAeR$z`6SCKS!l_HkzB&a<&RuU$fbf@M#)8sTa=_Z#9a!DnZTC$vziyXO_l1nDJw2=!Ux$u$Yms~8#g@P>h!~ixeSrTpIlVQrI=iJ$VHl5ILYOLTq?=sgj~kSh04y(E;B7kEG#&jrlYNnqouuu z&D2P13lA$Z@AK5_5<&tr!q&$6y!a7mR9iREZ^hTY@EIAav#!p3+*e=yfzi%EbB8ED zy{ML&7B$%+AH>D*_Vrcr_YG7F)>qckZ(*b3e4G|8d_6Rlh5U0bT{xmroFA>SiH(Y_ zrLB7N)WE0R9v*7a*MqJz?UQ3s%}k9Hm6oNH{odNdJ3m{eaM43+&s5(>iG;Xtc6zD} z8%#|OaatSc@mQK1;V#XK*-si2;-?nk*~G--aY0iq>1O0sve$pC{KzyjTP^#gwSh~5 zpGjh9@cm8?PYqf8s5Yvk_-O8y)+*MpkgK%yRSgVwc53`aMrxZXtUa_yg zN?`SO)BcN|2NfiCut*8*pxc?78zdbW8ohyua^uF#N6~ojT8QAelLotQ#)q=$sp~VJ zw$~NA?4h@ho`Qjao|2KVG(T2#YOq;qX0Ar=T~#ejSZD;@mQB=KR%bsQaJ2hh?7ay% zRN>$Mf6nZ4X2aO`ec#5uGnOPtQc048O7<LAumANtN8`-7&wZBrzTfZH`^=eX*egE0b6Z+do~b?8&Y31EfQb`u zB$BKgD!0zhS;K$z9AzG_zKpgQX75QBNKf90@p9o@b&CF$$OTs2-Hm)3Bj=gf+c}c= z?%6K1842rza*Qp>O)z)wU&WBkavh6EWZr4cnSKXt%E2W?JadEy5$X z96o-O|9W#PIX!6yH9Eq<@cUSY`NKOm#lL@QGufNHO>mi;lUQPMGVXfgb;8fFF6+5m zC#ngDYU=OjsKSebTg_dpdv{w!E}cs^q2pPs%;eon8(UkPtO8ykJ12=hc-4H(hj%+9 zjumZFG|(j&d>U=y%(aXyEzD%=+n%fcHfd*w`#8HmMB;2L)n><54+n$=i1K07B8A393ACo zTvU`O`=P&6%ieYl>3n6Xp{fE+!{66I>HFuKW-kVs6)sioFg;h9#5t6kC9`7D0_pFg z?WV6@-cUYQm8_@BK{;<;-c%3vb&00A#x*pC5Hx}nRnVMzHvdIYelBy?px$ix67ITxh+0h*Bx zLlO-3KLN-Pgkil7%@PFZe1Rcp1nJm=RbBw1?g1uv!(#zMnhAD40Qgabp_mW2_yWUZ z0k}B^-S-`AOb2;Bg`s!|-K`2z_XjC&1dAzx)ihzqKLHZLK^8X9ZTG;sHoVudfRS*J zkw4(?G}tg5Z2ASHewz3C4Xi8)*lPo%Xo3t*fOHH1W8Huz3ZU!*$odW7as^0qFW^!X z}msO=Ho>W#6vwuo&Xm6&bw3t%X|XKtAf2&K;)eOYc7UZvw`T_2DlUi z)TBc+902^D1I)bw9Lxo~Yy?E@g}D0((I*MWNd$DtLR@8nr9{DwE5P2-5Sfd?s^=g! zB_T2uAvWgocn@~B2it!DYc7LWSP1d*2C%vXQ1%d_rw!2mllOWX;%zVBz#s5u0nu|F zEdB~&@)BTv3&a2&;%On^%>>Y^2=S;3=-dV|unr<28?b8t@%9R0P!Vu;3{ctz@v;!2 zfdWym4I=O%V0S)5Un0bCCSdj!Aj<^sG#8@nJak1dbU_kW>ke4;E;MB!G=m@HUj$8& z139}vH`#%l`Jf8~KuT`V9iPAk*FXk-U_V(vf(=MimM1~z`WImRmmrHqureF$SPX|v zfuY2MjG~}f)nEZO*yavc<|Pb!ICN(s*jgX#Uj)t51IhM)oj=2Hhl3PfK=Yf%ZzT*X3eA=Ur0{`lqW}llyz6R^RU^plGc>&itSSrLGXPeP>L61N#b4712WiP%Rle`fK2(px(E!9J78rDkk$_p7zGJO z0+Rlq3FLPUu#*DAjsuI9faQ*YjaI`@=Yrk1Fzmh{i*S%W3PX$oi&g_d2f$WifR`p1 z@)VFWAK2kDSZ5WW{0`Vr9#Crs_7(sH<3Pf4fNwuQ;%Yz&4v;en*4zWwN#?yg0`ymd zOd|mg-GIzUK!Y7%U=P@$A0#LbC`<$-76V@I0uG9KuOUH(`hdBkfOS2vG(S#WRvw~7 z7ZCmlVxR;N&IK9T0B({1ll>s!M6gyaSe*lsZ3bCh1NrL$(jp)#_#tYV!IDXUgb2XH z7+B^G;PexqH5;(z23Aalm}mrijsZ@%U=I#p+Yb=l2ocr{xV#JTbq>&mhp0#f%-aI8 z6d;OnAZk_tGVg+2iU8rd5Cx-PcN>VBYrJTKc;P@C$^lMn0HswBD|!%F=K#@7fc>L@ zwkn7mTZlwAu#!GtwHt7}3eXh=7|e#q=>~h*0%8^c9-<%)ivR=tfCF2I$V!MK1+cp> zpy@N{JLj=n~EZ`xM^{0IJx4LKJWo0Wpvb(Xtv)C=XGv2Zo3ORobAr z43PGA=(;YD%x#cB3UpsO$UKW@5ooFd3`r|k-5$Eg739OSp)*Lo84hU+hr&bCQsK~4 zXl^1P;2I2j8X%<^x;zPn6b0##z^ZiU%1n?62_)$Z((Qs~q{EQR2m7Z3GRQEj*P&S? zkj`}&l4~Fx2e3*LAnFESg2fvi7}DKf_jJGy1%_e);Nk}FLJe?}3f1}S#{dUpY4b^wmJAlcm@pBrEkCqQW@Ae#%ro(M9%1w+0QP?rK|$pCvdf*q5< zA}p}DBj5o8IW_}wZvnn`0a~)a_S*s5&Vb$dfTCoudlF#Z4y=R+9Jv7I+W?ijLH3y- zLk#di2i!2hB0B+F3qaCYfX{h=<7dv`z#*nrg?z(THo z1S0SD2t)=R5M~e3cOk(GFo*+tKyC}5b{kmYCLoXs=$r#sr2_75gI#R^%{YjlMu>-9 zAbBEK>?Xtn3YKZ)UG##z7C_|f0Bg>HShIuZO9fmK05v-x8ZrRCiGaBlz` z+;w{Ot7^&ecFLQ5iG6#2#AI0?cO;kn9E%dUoZ@LA_Bz$|#JZrQstEtb8QF;a$ko#w&#WAf`ub8kdCkpLjcN*~814(g?msbhcs{jT2mgD0WJs`=+b)T- zd+MImC-6U7!Ij}#{t#>8q?dMXzM>V~EpTb@{J9;0dGqM|W48v>j#67fZ)_9&6#v2O zsf%pfM<1)+4%4|_UiWv~+V1HtD|_bxe^H&Juiy1EE$wB%moJv>&!5)>En6nM;PK=0 zp$iuZ+S6!FH;al?(?>?Wi<~>Bc}P%@$bb5@Mp|Lvn#uL+4}5;~DE7>W6Y9x7e$>z5 zgNsTQtFi0k$rCt!euu^L=d*nd98kWhq%=1~TzuPMQBjignl%Mek&%Z#P^otFxLh~B zyLZ1S&Y6>YzoFrS`|8yPzrTIEdC#p|`oG=WmJl>GX(|kct?R{$A3d$DZ;e$|osrzJ z!|z>g?ojmY+m#97;gZ3}kDp?wsN5WeKT@t*Qu2Q8(xrJ#I9zgKLc-IMMT_=dfB$|$ z;QsySVk@g%)jxk)Hy=EB%t}gXj+dk)S>o{FQuDE~-}J7oPu88Ckqs+Wh&aD{cWDum znUoa}u*~w)CyQJD{$lY31%q3Kh0}5@Ef+)`J$jN-TpZX|QL(<2L`q4$dGp++mX`3E zoSc9!K|znIw6%AX4Gc_*o;~}<(ZYhIucb9_ZBtXkIZsay=7tSN-rl=s*uQb3^qTB! z#q%a6Ory9sALU)UR*(4ldYU*o-r2WvXOa5ey-Jno>GCH>N8>X;d@%1NfTy=@lPm4- zk2@eOom$}T-n)(GH8C;AmEPV#dOTiaj1uGp!oryq58?m38}TpJmg>rY<1FnP%Pj)2{} zi*@??zG!rGjGCF7cYYljg1-uwx@vIoVj=GK?IlVnDFdr6Up_4y6SG2X&z|E3p`rQT zy1NZtty?D^xn#*=6#l24*n$N)eQj-eKN=ypdwaji>FMpRzj32FCM)YjSah^h;FBlg z+8G)B>n~l>-j894JM;6`{?gEBf0>lz`vQ+|Zaj8OZC7Td!r3!t%E<->3{w}EMKY$Q zt{bkvf28y9c#sqp_VD7?C+qYj-GqcPK_4PWrbYT1M-#_u?3|fBt-R{?ydg z6nlIAC2Q9{z7i4Ptw|)>IBeM><7WdG%z=SkdVYRSE~%e-HpqYB@6XWF3rn{U;9)(yh?~kMmXvUk}h+s zO#)YYEl%AU8(w@cH}lGcvnL+i>9{`rap(mKzunq6`flJUgY^5mn!JRdgO#za?{fF~@f*U{&?qw-d~Ypp%$Y?Qa)zmuBAQ6 zuPYK3G2LW>tu!*%5etH@a3@baN|A|^+sYQ}eBp(lI6Q$!B2%asjm}`Qm>7XVWid!7 z9l_DaL_Cc`M~FBU17qSzWRyxEQ}HN+PGjOoM2vv2C{%<<#t|?U6Q$8f6g&e*Ct(O& z;1C#OA{0{TM3lv35HN&H!c%b+8iPh=(osB>h_DD05)LD=m{b}bq0n&*GD^UR82lk> zG6^NJXjCSi&VWzn{ol`z*LGgJd2Qykm)BNaJ9%yV|3~|*BqbCzNydVBOhZgXO^YQ& z5x`lRFnN%I37wuH$%)fXc23XXB^CT2NMgqHGOymBXGt^V)amlXoluE4rBBZgC{N@) z#b)Zm_J5W$c!f~5BXN3;pPA!k=F>CyOv22Qne7v2kC!-8Z}vPW)B8=F`Fx^pR48W! z{PGD23-srGKoMp>Q2~C@fnlKtZ~CWtQPHb|p(1bgw-rNtqk?$#*97~**JUF}XxMbg zn!tcyf6Kq@CtySP3V8VVg|3R1J?M)1V{V8al#@4 zqt}J-P8KFjS*RaiiA?V|YWBE(VWDeQ@P7G3Me&*qZv_SW@Rp~yLJ-&RfKYe$`LZ+n zMLe7q=UUn`sHa%LNrBc*%le~BZ-q=6y*Ec+nw_k?^OaE*-t4EdCz)*cX71^kDzL5d`vcZ9?BYh*| zWJ3a?*M<2*&6)G_j|y7>51&7^dHY!t7#zTJg6hnPM8$>tWl|E#x*4DgK(SR57>ye=R(Twl*U)Hgh8UDzKF@+!E5`NsqY z=Y8rQU$H^oCpWK@8xLu6!Fq!sU&yop!7AS_zeJtjOnEHXO4e`XDJMq`PxvWYw; z+1TU%%yo(qwO)qyJonDqbHa!oYnJ1P`FK3^eo+qA~p7Wiap3n66>cFrStJnCf zj#)FqznSvzAipS%-imOJo{xWkUnH+3)6+k%4~dEXL!#;R^Bo+ycAh?tuI`I{7CPIx zb9nIiHzvO0qJP>Udz$!XK3ip$MlT*p{waTvIlcamo1oIHj|DBK*C$p_w}-c$w=Lhj z>2mz+4rk_~GjquViN8DEY_$)w$J_V!=QDe}g<4{Nwkw)B-`Vq-Jzx0Vus`c(+cSGU zMgPwEe4jaP_RNXQ9*^>9x*fWwrqAc_%=&+_i5(1 zGu8ewTX_HP`&V~n`7agz#glvT(>hL^9dGC$_;|?g+3Is=j(hGO#uIrkeY{!Z&eosp z_u1|Kv0whN|Mt&p_>c9L%^WxT#B@LB{fm0*X6n6|(MQ2dy}dK@*>T%AyT6%s9QYUe zOP{G%G*d7CKUnYJf3V(6wZF`=XZn#eQxZP2{Fe&<@Z{ecuLCpZ-#ByrvwoW$mlL!7 zb%yfC7qfmi*ZcSSnLX^RKWFzl9ksJ-5#-!I^eb--Pd_#@{`qUozkfEn-9PTHarXRX z_%ge{?0;u}v)lQ`M6ZkTT@%3Lzkgupny{I}PBYI3zRTRlp1YWfZ14?^3D6FUUKbGg zr^fU$FDCo~A|YA+W;v1u2_7%XM`Bo9%-F;#T{voaP>cyyU*6+E?GR6S9kj0u>C*tKPWIN>YwrBg6axqN3o>+DtEp!F4Sx$VTxB z;k7_4TrB@thSLv)EBrOVF;VOOQX4@a?qOJ<{>*y6;4t3K{<{4-xUi6gWBS1biLW1= zKolYy9R?-SlV@0rY)DL0v}|--cz|qRC~t)hqCT_s-|C0Ii$S>L!Xre4jL;AU!jG^K z5kv}+L6i_RL<9C?h?pamh#lgHI3ccxJK~A>A_2%+BnSyXB9H_m1=)dQAp4L!q!1}V z%8&}A8mU1VkS3%BX+`cLeaHYZh`dEckWpk3?n0AM2FgN(P%%^jRYLVqW7HJ2M4eGL z)C=`SebKdO7#f3aMibCfbQhX~=A$KODS8&IL@%OsXcO9wcA{PAU9=A!Lf@lf=r?o< zrQ&EfDVzdM3#X4W#hK%{IA@$2&I9L(^T7q+0&zjOSX>e=1($}~h0De5!xiI7ai?(A zxGT68Tovn@ltp-yawJ7Z;Us`TjCw@OYoj}FT4*v1RsHq z!pGt>@LBjgd@;TpUxBa2*Wz389rzx6FTM{yh#$p|<0tV`crt-XU=hR!5(FiJ3PFot zO|T<45S$3Ege3%Tf*&D}kU&TxWDs%*g@h79IiZqph0sK3C3F(H2=@v7g!hCg!fyhe zNF~yU@EHN32vLHlLR2H_5Z#C#L~mjMF_xG_%p&Fz_Yw1nM~G#_Q^X2lHL-!%PV69d z5qpUDiBE__#4+L|kxXKc_(>up8Il4?gQP>UBymZOBqx#!$(^)>PfJXOMT13&}^wHRL*SGr67IN$w)wB|jneli!nv$=}FC3X38{k)tS3R48f`eTp@O zOL3#PQ#>i&6dy_;C4!PdDWDvolu{}vS11jXW=aR;3FR53pYoP6LK&w_P>57ARf?)W zRibK8b*P3^JE{}ah3ZOOLiMEjP=lxu)L3dNbq6(zT0kwKmQyRJt<*=<0qT3|2z8wL zjXFhTV=|Z=#=%T6OUw!LzLV7j5 zhF(jrqqour=!5k4^ildZ`Xs!Yhi9-DY=#U&j-kQOVpuY)8Lo^aj6g;lBZ-m9NMmF$ zb}>pArx+I*R~W5~c19=TF5^Dq31g5k#28~tF@D2WrHC-4m~u=NrVi7PY0h+JdN4hi z-pn9o1T%&i&rD-xG50YGn3c?n%vxqMvxj+~`Gh&l9AQo{$t)U+!4hF9vD8=`mL1EH z<-&4hxwAZ3UaYmOAXWlvAFG&E!YX4`u&P-#tU6W?>n`gN>n&@9HOZP{;rUp6GJJA; zN_-l8rhJxs)_iV!fqYSXaeSNkQu)&Oa`@+Gz2&T#sXXcM*(*MAAtygD1kVEc!4Z|Jb|+U)dDpFwE_(S zO#+<)Jpz3KQvzf*gDu8ZVQaCC*>-FPwiDZx?ZNhDuVn|aL)e?yN$fOs20MqH%PwRe zVV`B!v76cV*^k(L?Dysp**1ip&Fq&p(ddgp-!P*p>INDVX81om@O2Y$|Li>>%ta zyhJ!qI7B#1I7T>EI8XS9aJleV;Tqv9!p*{6!gqxq2|p3;7akOTFFY*#O?X0>D#8*` z5K$4)7vYL{i};Deifk6yC9+SXK;(!>sYta*tw@7NyGVz~eUW~Vw<2RA<08LB$f9gf zDN#dFV^MQaJ5eW57ttl6YegeOV@2ad6GT%*vqTF-3q{LBD@3bBYekzxTSa?Bdqp3K z_K6OPz84)Aoe~uilMv&G>5DmtIf=Q6!S@J=C5h#V<%#8sm57y#of4}Qs}XAz>k@k+ zHY_$Jh8HJ_^NWj!%ZV$9Yl-WK8;V*JNmWZ-lxmUcm3ku8FEuVTA%#klrD@V^X%T59X$@%|X-jD*X%}f% z=@97%=^fHp()*-~r7NWCq?@E$q+6vsq@PI-NRLQ=lb(`BWf(Fn83`Fv87CQM88?}= zGBGlnWm08wWb$P4WeR0VWzNdf$kfT)mFbrml6fyPCi7c{Usgg^N>)WyO;$@*U)E99 zMb=H$N7hdkt|??=W#eUc$QH|oTy9bhFHe%16n^$S26B%BRWa$QQ~VkuQH+j4Q zRe`3UqM)XrqoA)~sNkUBrr@sNso!SJrLa$-Orb)dQlUYiMWJ2czQQww0fiBT zF@*^Qq9RREL{UspP0>=3t7xa_qUfWzRxwC1PBC6FK`~XaK(ScytYVE~onnh(hhnE< zui_)cXNrA_)o-eJHKH27nw*+~nzfpvnzvejTA*5(T8vtX zTAEsxT7g=zTAA7@wFb3jwfkzlY6EI-)rQr^)KGP{x|F(-x{kW5`Vw^?^#JuC^$_(a z^%V6T>KW>J>V@jH>UHWZ>YeJ()CbhxtBY36Dk(X7y{*1V|Mq1mPRM6+LWK=ZBUh~{rivX+#VjF!2UotBf9i<}*EZHR)wb65(Du>}(~i?l z&`#CP)y~r{)GpC3)vnaOsNJO9tlg=7S9?hNy*5#YszcM^*HO_?)8Xnk=s4@R=(y>4 z=!EIS=)~(J>7?kC>YUQ4)@j!1(&^E8qVr5=NM~4QTxUWD)n(`^=&I=&>zeB>(e>2z z(p{??p&O?gubZlyqq|SHM7LbGR<}X7RkuU8N4HnEPj^svM0ZkmN*B+ea>O`t92Jfh z$CP8oao{*}yg9y{wVV)66eod`!^!6y;goYKInA6_&V9}k&M@a2=QoF{C!{B$C#9#R zXQ=0?=dI_b7o-=a7o!)ew^?tOUcTNDy)wNDy=uLSdhL20dR=-wdT;fH^~Urj^vL>3 z`WpH=`iA;keMfySeINa``a$|p`f>UR`YHOw`X%}m`nCE^`W^ar_227{>QCvT1}p=% zftZ1Wfw6&u!4d-x13!a6gAjuxgA9WlgFJ&mgHnUD26YDQ26qkm4Mq)q8&C~J45bXU z4D}7o4Y`JHh5?3Qh7pFbhMNuJ4U-Ia8D<&g8x|NA8(uWLV%T8VYEjFgj~gYgA{{Y1CshVD#4Ln-OY^ zHzpfP7+V`V7&{re8hac28pjwX81FJJF)lYgW!!Fj-?-0s)OgJJn=#RZW+G>zZ(?Y| zHE}d?HgPxcF!3=7FbOk>Fo`$GGRZe7Gr4HeV$yEXWpdx7*W{T=zsZ2fZxhs1%2dHr z$yCi$$JEl4YwBX^Wg27}XBuysVwz!^W4h0@z_i%3%=D~jwP~GcgK4MfGt)uS_ogGJ zlcsnxwwaKbjG2m=h8f4q+04z%%goPgtyzd!oLQP#sad(%MYB$``)2)SgJ$o|#>}S7 z@aFvH66SK|3g%korsfXj?&hB6KIReTo6VEVcbFHLA2BaAFEg(&zi3`--fZ4s-ecZt z-fuo&K5qWo9JOFr@LPyj$XKXZ7+Tm_xLUYdcv%Ek1X)B_q+0B-$g?Q3sIh3UXtn6E zcxKUOF=_#S(#w)zDP}2QDPt*Tsb#5eX>4h2X=fQ`8D$w`8E3iKGSxE2GS9Nm@|5LS z%Nol%%O=Zq%Pz|?_+CM(70Zg>O3F&XO3g~gO5ciWm1LD>Rcuvjb;YW| zs@bZ=s@WNjq)sWSQ)o&}BHN)E2+T7aGnrrQ8?PDEaz1BL;I^H_NI>)-gy1}~B z`mXge>$leLtw*h=tR-yZY?N#?Y&bU7Hg+}+Hr_VAHfwD{Y|?CUY)Wj(Z7OXp+FY@D zV$)~y-sYRlgbkHT^fwmG(WwuQDewk@_Dws&ox z*$&u_+LG;9b~1KKb}DxIcE)z5cCL0Fc7b*ocDw9y?Mm&+?atcO*j=$}wd=C$w;Qs1 zZ#Qf=YBym=wWryO*elqp*_+#2+dJ4h+q>Dj+k4sv*oWDt*k{=n+n3s(vahheV&7oj zZr^MF#D2nl(w^wR@4$A@aNsy_9h@B89hNxwI>b7}J0v({Ig~h5IGlB;b7*y#y}us1 zVs$9I7Z4Z{@Yj1FyqgF`AExhv@$Q$+-ZSIfhtci&E9L{)i0WdSPw4Ls*Pc+;QquhZqLV43&eO@GQKrppsynfKsL zf6Aw(%TZY7J$MtZ++AUgQ(?zN|M&%$cdGQANJ={?I?h`cVK+~^zDlN#Qsxp;HkJ80 zKzxN!pK*i3mGf;3pR;bojkmnUUByd&m^k_m{&?_vL1ffHxkJ0>9tgj3Jv;tc$LWTY zf_oM#@)Q;LN#$qGe_%H*daW%zVsb##@@UNVmr<*H&F?I_S-Ae-jS|vi{gL)X9~OI` zS^0d=bEy}JMfH6M~`p7zWd2D3bXsQ%WLoUPWFCrQaPNkIA`Vhbcu84MR3CG&x9qcz^$>) zOSvng--Ri2LX-u62irVISa^Eb9T&du#QfS3+hYN11q`N|?|1YZbA8Q6|J8RLle`qM zz+|wnD?+B^_e;OAt+g?`gPNiy2h^|=&Rv!@?S6Sf!c5wzLV-4c{VGzfrM617{m|=G zSKp)!))sH?OgzTDaiBlOo0FEJXMf9VqBCSJ_Vi%<0io!k`!WLG_@bVUaGtkDC9CM> zdUFMbaKcYgchu|pswNqw=Y(^1HdIscuGbd5K-OPXsn5`)UB2=4iNP@cu8DTCeA9*Q zi}yDq#D__MA4H>b!*_XCe z2ZXC9Q0kN7&<|hxMX!s^|J@ZK$y&bo%CYqYzaoDP2jZ&t{;Ka!%0Yv7ou6F4w3A(E zGjPkaCTUE^Cqeq?`jH*P*jIipA3gKS?-@?%=X<}KCS;t1T|E80P4(V@IMJ(8oE~-} zwr)hXM0h|+H*~4N_XiFK7m4*8*v)V7K5_KwmWYK_H@?<%u8MxVxGt|H|FfV!)702uJnEC1)REpFu_l2&5&WSlcZ7Wf z&K_vewW~RX=c2taexGBS`Gyu_`%9YTUem5%=)LDlRrl}s>T#)2dDX&*IP06$U$>us zozihrQpukvIB4I$_K}k4v6{8TUw6AK+8=B1(CpN)2DgJD7Ng9aa}C!nTBMbI@%YXD zn`Rd_SXU*rggdH(dnvRe)^Q$p0fn4b)z8t^}A7S=sk$k2%5ssj=!LB}I#mUCv@X(^U>K`*Cm4Tt;a_KNSS>{D^biW| z{*dpB_T8zwbFnsEi74$nw@vWZU3QeY`V;J3a!+dQqVB{)=5KyWTsgKx+j_ETZF^t8 zf5e8*%Lz5PIXYok27*#4^}B78<6irl3_nP|v!QwC>Jyhvs=tnpbr$^acF^z3v(Fxz zS~(N@(EtqLvImxziq>Ub`>raGy*ey&YeSTAeWha%T_V`*>XI7T>3PGhzpdw7ja}IE zgiooMCTiUTjMb*Ou%ikztF7-&j{E;QM=7DjR7=MntIR)I zC}6W8-|>825w*wngm zM^%K)moWd;oRakUqn?24?%ye?Zx8*7%<GKj>SE+ShdRJY1yuNmFpsmWeoYLbvsaTy{iPdk4Gn?yr^R%wvP=!(P zvQeqXHzQ+@cN~8ioALTZINkMtVY^4dO14MMnE0^ek^sNd?og7C%(%XyZ@|?3`_g@P zH~C&agR4sV`Y?v>=Qp4eKVem%c)Kw7)}+3_AlInBe4mll?Ua_n7!3tH|Yg>kez7((8wJa?X!zZ!?V8bc?gK)N4GAV1r*G)#Vo}8gk@; ztxx>v3m)l%uiom$O@46^ZeA1?Ix2nmf5-p-L;nRZUv(eSV;;Nr*d&hOA$6?Dmvc{f z-|^Lf(oYWVp7+f9L1NI;i3oEqf`-ZsKGDJt_%F9_-q-5N6v^>wH(Ye&)lU7zm$cfv z7tT4cT8N{mwt8j4(E4b+MsKFO)*K0H`^42P#~qhFd4nYj`^q<&mQ{b1P*qoGJo$0Y z#LZagfE#<8>Z}yL$dqW2OJI z%{gs~8w&ImpEo~lHGb39{<4CZy1R*H{MrSZg7FR){HJKRM~wf~|Nr3pnQwce;X7=Sh7};k=A3jnVy8T-5j|eJ^_H{=~k6 z6`jI!S8tYUS|~j5HvgxEEmJ!1q?_iTvPtk(ImwUK;Z#of3AbqGob_q>;dS!owjav8 zA+y*md1_80UD$JlPqX3W#yP6V$uSwN^A;|CMLc`QG~GlE*DKK|$Ft>d*s zE&Wu9E$71a5kBXySDG_vD{u7-2fj~OXIHqe{kC=0l>ZsGN1Wxh(k5-l*ZD|=(aH5+ zy8hSy|C@jR)2=^x_cs1tPP6w+{;T_hD`NQnK>zyj>;JNjx7~mBxU<{+ch7%zKmXPF zfA{$R-R=Lg=iQQ#bB4FgnEkR-d#-I%Sd!JUEAm>fT(;4JGfqzyTz{)@bIV^}<^0n# z>s18>1dl!L1CRDqHaTmKZSoX-m#*-94a4N&tCf*mB4_NkTrY8MIwXEJy!+L~`bDy8 z7Ztvnmg5Zmv*-D*>i>89>(-Yw_|@l{=@usi@e2kX;9X+nh-Hm#jEqw^m`u_FYBKVW zAfYD5kRDk=6Br($i8{0s`|eoMU*Efg?EjlH^ptrwAIc4EE zcEVM(R$vRB&{{+36uwIAPd~vpoz#!-zF|#geQKh~9_C;TrY4Ld+5DvR_c!tP#$4zd zt4}Zw7MBuh_vz7U`kc|2i2$tfrXBh6h$&5LYBeRJJP7TL_=roQ2qE+M-!X0A+a49Z zJCWXhs%PTg9boF+U4wqTzk=o8S4fm_e1sS9izVoMwIZ${`D2zsiG=yDHd6PF2H=XS zYLMmo^;orv>j|G+@Z^mnhiRSJ`b?K=G+bT&8QLm295N^FEh#ob^EXvgr zKbU)kFVXCrR*;Qkgt4F3g!U#eY(s4!L4yxI>hSm-0kJ$x+wQ}s(P!u* zG5eY@Cbd-)J5zs;+9y`QD(E$5Xd2|A4rL5t<-saa){|4Dk#D~U*e^wFGMp$?Ky_)2QN%o9iXP(fV(w-7x+6Re@ z=-YI;DK73yQzb&~>?cS(-+-;A-9;8|C?d0{2{e)ZBm+CK3LI zP(oy08J@Z726g}N8uUX(J9UosF>DQ~i>#Z~!pJyUPW+m4o^Wx=P9_y!Od3gZqo8tY zX;}qY=w_#{^vjhmNi7>aD5)+<7RYNsI_$WeB<#e`O80(FsVu7_?P@b->fgJB zZuNMDZ)Cc$N_R7eo+IUq&+R${SwTT`KKTlMLF_u(#Y?`#5;h-Wa8M6tJ=BZu_am2%Sl(cBt+rzDXQ7x zrKGg98;A(@6gR^9#WHj4AYJ)QMt+8-&^`;S!q@u*F_fE@5u_``$RTzH*t>XsvheH8 z)UmEO$|1Q!$P)5vyp#VDQseVXZ13q@>e(mVgyre?aF^FL5@;6=5U0cwn6yoc>1PGH zFn_saRGX`lgwvR4ZrJ|ikdDX%+_=0bS;H#_naKopp?@A7M z{quHs)Zd!=E+`HST=WKatR)*6UL=5Na3e|2heBwMQnF~C|7+H*&1odxreowsu1jcL z&6gRr)-hB}Wh36o>HstHz&6V0NHdnb^b^bc9h2p~@ELk7G6W0c+T#56E}?@qHDr{% z4(m*mDZKuWw-VdUHv}iVd{9h~+GwIX1X%m9z8>TWe{i zA^env;q!!(9TaldvWMuxdAnIzAHO5=54;It%bzp0yzrnlHia>Z(x+&T4@nX-7kja2 z&IZK%TSPJ~ejmcy2-8d^5BYUYmAJ3y9_6QCB63}N5%%UYm67K8oKa&I zL8^T6f)XR7i)hJRMvvqR;h2wAh`GDlaQ9CxC5&y{LY6Ev!HUxO$X7yYSxt`(sCml5 zXd=^*;#6^uzF)4M*qpYIfi87tCOEN>wDdr7#eqm-&9O4ZhQ3nf4y8gEFFG@0V2pWi zl>olqen0kjnG(%c$CEH;D+3*u(xfOLEAXXMRf0$C6joC&gk#%^V@vvKaaWb+kngPr#BmD z-XRVYzkW^H&2mkA*Qp##eUoP`7uwD$A~urLGin*v%>psuS2r+a zy>Tqku$(Oa{1dWhZ7ikchzbt%m!al6`6DtcB5F|)OE{YMiEza+A7jT=lelm*etT~T zT1L^O)#+^{%05kmdoE45*mMz=267x-c(xQ<*I!Q^FC(zBI6sNL{>{X3QB~sPyefis z)&@%Ip$p_QlL`37VPD#@eMxAQ!8S^fc0Wo!HAG0Xjwh^Il+CI+n23ewo@H$LX-%UJ zKEQo=Gl%SOJdN_Eg26C;_JZ;L<1H*`-C`t8sh-+!ZInDgFv0aE(umsHRs_~oTf(oC zcBohCDf*dtoK$Bs`RxgKfI%&uYYU=)X3{kr2;T{HaYn z^FHdyOG4I*E7VrufCuMjcVa`5=zn0j0)QP zCmbg86CEd~wu5PaoTG|A>met8{m$ZMt22l84`Rk`$4J%Ti6p+WY_fCr8s_}huJqn& zDsz!HmA2bVoc5t^8M$#GiSg!^AuG!M0P*C;OSq>li^=AgHtCme4>P+;iT3$Djd|+p zIr51Yj~QkQq$sz3w~|umT)d#&VM>Ks61`Jv5B})=0c4DG2p9G$hvDd%$?Q~ZB{i;5 z!n^|NaTJa_8oBo-uKb}t+1go}SVVYBy0<3}RY|UAu=Idv`Z#+ zM-Q+jmzto8{%a|}1Rm3>LiZ5;?CNOArsYWbQ%!W4L?>Fc?>av8s5~oo#a7y~y|pZ@ z6Y~g-Z+|m1sh6oy<`mqiYC+6dl1bK)R6#CO&I_-`m7rC9 zHm7*1Mzcn{Ylse9&)2A;OEZ2TVhg*FNG%QQRBRi|dVCl+epP|=GH^e7>Fau?>&c&l zW)}`q+C`Z0Y-K3PB>5%lMwuuqg+)Om+ z86)6QzOr5kRM4|ts#9#4%IKXwDRj@eGAidBk&#ufn`HMc1>OJiEN+bug_geMHhJax zIkbR`(SM zhPONMSr5W#nzf7Z1^b4WH`~N0qInBgZ+~}S0!Iv}$KyM27lzIdxBqk{ayR5Lp3bSm zob{B6hZ}k+)%hQBUqZtPac=L(rWT=?%ekxADn3<4lgD{dZtEKCt=&u3tI%K?>-k1} zZbviKS?m>lkNi#Kp~WzZecXaMdR+isLzUv<`6~|K0 zRqK9|Z}%4Bi!B3)wqN}jXS+RE@XfdQ&-E`!MX?5?*K1Fc>*6C(?O#8b<2&{d7F#AU zKmTfEF=`Sh-KCc)tsdv8g*C3Y`Bw4>X+b=eIJJZ*v5TLs{#lP4ET>H&?4#iGkKUnM z_Lq=ScKhMg91AEPmpnvr=t+cluMd=|&H%twCk-Hf|3l8X+Ms z2g2!`gH=9r!YdCwL@NYZaJx8xBpF{vWNUv8@p9H{D#B{jqX>-14jS22n1y$NR{c#s_KLSqK=i!pX9(`fZ61w@r5VU}Ok zIMG=1BZadppPZb~jVINOFy`F5gXYp?Sn~G_>CLZd=m{Qn*oyQ%O2n%Yx-hMj)s`NO z?j9^6in-h+b$-yKy){~izjGgD+24Fkdo@(W==^EOiaoUoci;CkRxtIIwC{v0f<=_! zTr3+|7a7l~v@bD~%BRoi^3p-HiJJ?NbL$-l0mlc3_Y~~u-=|{8-WgHEcW4@J|CwJj z?9p$kaH%3m!{RbMC-@b!o-#sA^_|3YpNBDDWhSxCyUv3AC`eoVzc`=qt;BMmG9j@dG!w71?+;`0W)+NMaaYB?r zEEktnKtmfp=wfNw26Ft}eCFTUHCk+_setn7VAxwEl~ zklGoI6@Ft^eq2a<7*fLe7I11=#R~I_S*Q-~Ebg(mF=-_*sP}PUccYCrU`^*PgQkH-+JzP)6uaHJ6h|pL}4p zcUUnJ8U{(9Y%&Q!JE(}lD?i4GrH$0~3{T|goFCY`y`wnxhBqvatN}{ZJRjVd!8XQ~ z*D*xu#$sf>(PjLeRx8FpOa-DnREEbw?I@QN5!B7*0>QrJF4J}lBd~vRD25?(sB0Yd z(^-_|^!XZr2b8jDi~39$;zyhp;z| z2I>p{zRx@ll_8`ENky4wnJFa7P)eqRLWB@eLZpdA5q?6G%u-1z5t?PzAQVZIQkkmT zy`E>S=l|ka_x<9$I@f-+*E(nK>-v7bAHpQ36W|&KC}l5OnzXM+&4Xq@Csku=$LdvV zO9T$ZKCEE;QzeO_(>c(!Fr1KH^Z-W|%45&1Kavl@$6&o{4Fc0nRJg+?q~ho({dQ(2 zb4?-$Y?(`t^vc>xhse~CLM}(So^VU3^dZEz{uRb_6iTq19}JLi=_+-<+KfRivVh#$ za;j8$Ke#`y0`Q#?=W;~T(T+c#`Dc+Uk%gaYIH8=UNPgudY^%R9-}OxanIG>B{@h*1 z^{x#8gb!n#Wn}Q+CNs~R0=gT4Tps*|b>2MIh zR=aX-b<6OG@qBoC=N`N-=K=P_calq;;pZ7Nrdf@-bDs@ zzr|I~A$%3T{&p#(+uubU`t89874Bip#kX=*Cs8`4K^QsvNS-b@I1kzRr5Lk+rAy~J zMqx3AG_(3{IC>@}9K<(pq-mQ!vV`)0Gfg|eYiYaaD>J*9$vi(O6X+lwmtoZLPv;2t zznxsU)NAfg?KRByObyRIH(~-RD~UUAUgFit0N3=zfzV+ zsz^vCN~EJHalIi#Zg~r3D_+dU6x<=o9%oaL*BMvY`VWdU*n-*} zxrf}F{RZT<4KaG(R$%+;AhwP+z$Jj=$ceM_0dIji=tkNS61G1^hW|JX@1nb)xJG8K z4>b+83sfN=XNy4TWz%5ehEZ^P<~?%!-b-|+6UIFUHJN+*%7_g;3Z7}W!~D6e4ZOM) z1_nq@vT+j2n5&OhQLA5C;_AoTnRk;@h}VBNv44@J`rh88uktxBUKRdO# zmQOS2I2uW)9Lr|a$p*x46#~}zD}r@~^H~kUjZ~?(5OjNQHXxF`6j>B=LfLVGAPYBhN=@mw%=~tw z$Q(vBihmL(88Iexl)-nNOoWkgKmH{Xf@Ux;fd!q_WW$nRAUdLg5^HIO1w#*!!qr~X zsU&|)Nd7gIAr^|}dHa$UDtl3tGd_g-)*Mu|`6_Ms_!Bl0^o8t$_CfN89>T=^_i)fQ z3HYjn8~I?%X@04y1t{`O6Ow!GOPe?;GeO)4mA+R1>MzMBWSbrX6@mGz$g4Hb)VoQ( zx9bgg=X^IPGI^U>pZAV)C^iNgr1lf{q%j~Z6=VPG5~XIR77!8Jl$i9S1?=pOURrqV zYWU~QHZbbXBH~->Gnh1Z4)yhPa{*)iu;bnkXp!m=H+a;R^4IBtK5g>jE~hF&0`))G z;Vf%pLPmxDcu$R5I+BQ;uzSYos0;J_uOXs2QiLmf`VGRmmxBh`bzntc5wfCq4fy=A z3pILZA8EhM2r*Of1v`I6aZQvVRkWD~GZ_q%nkP+0UD!t~kQFC&zDxqAjgp8fZSMH6 z>=Is3RRkh}v)CBu0D8CiFMnYDA7VjvGBEj(2M!kBq`d#x5=QkK(4)ffbVY48bIK=) zemrM7HyqIBt~CfSLqSK#(dI|wl~7a6`};Y-G-(~_pRf%qczq43PuUNPhYu0-!XvcF zqUYQu(hI!kx17vV?&i;_e5JQ4ixCm?gpq&zI`mxaQWpR9fywMOq+{>@gIgdJD5Lcd zH|1*7(d8lcgHy!4PUSM|;toPrN|U&KJ;xxGJ-^wy%Luj<>xal~^C(R$nSb`(pWLu- zg8O~(7N*w~3d;->p@-IOq(vl!=qt|8!05-4RNyZs1gUqR&gc}A=XaS>H|OOe<%9OH z=p|{uai1o>qVXAtutQW^>NXTD_2lu6C(y1yA97uiBpeVFPoUQ>a?1K+#MW0U_%|!N zP|XGlI&*vjP_oto2MeF$ovjzCW1)ALHHsGz)oCYo+4tq7#&>g|efSEZ__2l^wvZww zp-hz6`2t-2VLRL2vIVzto#0{{J@9}{l3elOY4nN7EPGF*fePp_g71pnMh;lsBTv|9 zLO)C#$fF5%V5$+pNNGUn;c=+r2FSdC_o;A8@Q>6uP{KVfm*_xpp7U zooOY&j4^Ujp^`btYY=N?-%_IAx}mg|6go~?5oYB5VN*{bs>HPqaU1uC_FtG~v-KgS z+R=q#$$!kS_D<~5O+Wm+&rW92Jr$I)jDzX>e+hAFB`J*9v%q5^DD{>zCT>b`>NY9V z1K&L`qxBy&kxGy(w49IDyUT21yNO#rQeX{mF?UMr1|bv)@-+uXVLhemOsmldyyVJx zT6WL{hvMvLgZYhIi@r8Go%WtSsG!GLJ>O2=Xtdx`^Y4=;MG<&KdkJ#*TqHf^yN>uN zyAO4I`VA3s6r%47dBCqOJSFUUa^P(j7Q=z_qu{Rsj?^-b1gN5-pj!82!C2r;UOO@iEQz}co^db31upjhtEo0hWSj)*m-k{{l2&sQ!!W8K zB2PqKw#B!}_~06eD}ayL_o!1#X878S_gH}H5up3cWnwtLhCTl-37@^t&kb*KA$@c# zxU@sXq)31>vWU&3^RB$&`?_#YCw!ceoVMVeq}*c{dk+xd{3Z5)`%`Xqj|`Fz`yvaB ztC94!eFWIjLJN<@f%MSbzCnaQ~Mq!bx|WKeafNGje^&y*+Y(yz*)zmF~%+ zwR!nu+B_%5MRes?DPkUw2H6WlJUTr*JwE`29C8=<$(x;Qo#ZEZcyM zuDOW#RTyCUuhQn`<}%0+0Xg1cU=$IK$!6xCv|tN9Ek9YzqK8U@nX7A$66>6+s0V*5&<5@%8@ee9*>mtU_9*Q?U@I5|KHX_Z|CJo# zkNm!h)MS|;w?hw8Ia@Q3e=<(w94no06u*E?jOc+W;3g#R?i{spSR8ukbQGNGe!{!Z z2k4u>?vMtenb_`x1bBhOB;Z#dOPZZfgLO|Y;If|g5!TOpQR%2PT zm{_hsj`Zx~xs#`j~j_YHqTr68>`BByW-32wRI7odVwfwQQyvQ|6tF3sDBFl zd{~LLX>{-}G<2c&f{F0Ct}EE$ga_0W<8JuG=zMII-h6hels_u`B^Js&oQkIHs-RPU zM=+0`r2`>jOYs!B1IX#xK)%=70TQhK#h$Php>7^Ji;eM*c};(m_dA}8Ih^YyMZbHK zz{MX-{AoXmy<~~NJti=Bp@y~hHbcY>rht|!rD$Y<8T+X50IPN>gczivXqBrIoSM)9 z+`#7(y7-hh?((~qn6GApDLuFhNE*8WoqZVDF|&qxU^WZ8{_y6cY!Pi7VvGgqaWo;g#wJHTlEz{-;7O>>##AUOxbwk#0g%wpn0j4yoZI zg~w=}p$s}HR1y$bnTT5ruZDXTRWh45EhUN7pA`j)akxjHdx~R*F7`53xy3>)=u}PjyRr$&ExXRNVyVBU$eHLU^?hqq&dX$dY{|wN#w`Ee+ zFQ5Z%=`)$WXUWYqFNwH>JH)aVP5dMlOHM`XfJaxmko-y8RyKAm)URZoW>| z?psUM1tdel?`Ao*pG(NU%Zz}_fAsL#^@oUr1ySg_#zG`g$q`ePv4(W*KEirW&atAe z_t2j=ThcG*YamGq<)m|%8<~}q$`)lW=c~NRnC8APO#59jxOzJY+IDBLUW#pujIkX5 z*47p-*x1R1*54oz`2oD^MJD_D-YfEv=2k>;SRFgJ&l@lK@CR=#DB)vmcO#i<+FMw#TJcveX&lUlnyG{b8X#u3A@?xY?^Z+VlxQu(% zC5`-;nnNrI{N~v54C=7Ob>bddOs>@WfTw$&W$a5VkyP1cm_8y)-tq0lJ;Mg5Ev_o8 z^iCh9$Gik@vUtSJS3H5_AO_s7{kO1ASODc#?}qJbvhcg2dGzLu%}i8KKis{~9s0d@ z1?%|Y6ckSS@d5$P=x#TTYy8~J*-dTaG(3A6E(xIg2fzBOOb@{l}m1J;Qrg)8C^2-W`jbH0i{eXGGDc z?+@5DA_?%8aYMFvn>4UHJQv*i;ukF%Bgj_P7eUn3R-ng%fUQ^a^tDfZ$e$Ztlu_#@ zWa+y$@SBY#8$RgG2g=>n#c5%L*sr-_P~v{7X|P zW_g#fPM2WPzj(5Ht*X%InouJ8tpp<;n?v|M?FNdbO2FudW;CiT1aZ^dfzMYIBC5;2 zfNWbJ+cZAJE1#319Mh-aYGxIixP6v?xOXjQq^HgvTYVA)#WKLYm;~fsaRe`T;}P-Q z=`L8Vy9|1~-wyrpwjWO~JIUtCm9t_x3u(NQVzX|`^IdPZ5>>gB4YtZBFb<%rKmPl|;WCtcL5k+khNY52ny7TK1UOIFJc=)RTc)h-nte&z#M9*kK z)UsSkDcTEuqPYgC(vv5H(r4NGJCpdcH&JvTr;V9ca2m)*4`WqHD{;x{Z)|N>2`rda z!TozCL%*!;< zqhfIdR1z){l%|Z!zmYr7Xw%KIe-Y+XG8pM&L$3*D^uxK zBj}DO8&)C)f~~LQqK$+L^T2K|@Xc6`J|3w`72GpHhl6r}IKyBr?vWX3CM(8;O6JYgD4Au;~1s&Z?kS6yPpnLM_&@GQ&e34Wg6#m48G)alXBGYw= z?xlmk%&sR)_JQB5#o=+)pc?yP-4J%OW}J9+)B!xZK?^BLjL@poOSBPL&ulb_IP1E=@9esGGR}=W3*b~O!o&Z1EvIVUCF^dhIj3txP z4pWMu*;K%)^N4Qa1=i`E7w|4~1-DWZ#YY4m5>N9!;p4LVICG~#?ChT`Xn_t+9yzIv zMr|#l%8jNltsT#}L!A%7zYTBbXqk=V&d^Ql-mvZL%GckJ%NzF6v+ZxFBnh6->3>B9 z<*D=EbySg@jfeOcEq8{S5Mxcs#?j}WR}!roUJ&ytym?8*cPv<nGa*?I7XPe8l`IVTN%lN)F|7_yu)mCM!kyWn zo2i^YUl-fN)N-d9?%=JD?~x_8Ina-)1I!YoVcgim3w#%Qg&em0#3;D1C}nz)VW4TW zOL!-pRhNv!W#sS!UnAjN0XqR{v<*(I{R6lh$wsyx{tvt!Hp0uKzkw<~$PsOOPcRA_ zZ?PG6T6ELfOeHRS>qmTxK9qV+@gy-xzk1sbb?sz`oH)@VJ4C88Hq0n z-VHo)spN=seQ>?Zb5zzN2sDt5B_dDkr{o>(;gOowcKa4nn?-O℞{lXUzSYFNp+1OOS6^ZElH}F8ONT2>8XDrv5W!88zkmP{SvED9C*? znp(1uPW2bT1atZ^QS3aW66%1BX>WrTq6858_C0>4Iv+fA<0NRX`yLJsMYBdsE#m%d z05gqILnW(ccr7DQ;zeB!Z@q1t*3juD&Yr9#2EM<=re3)4nL}03yZ&WJk9`FdG)zNL zQ<^09;~JJ{m`vuHek3n45vV{-4j*{KnK)x+i8iQI5Kj#I;jdNNNWk_b6jiQ0kL7%7n8a{nuDRU?2NjRUI{My94~SmuAmO zzJgY{Il@1D1(3J5Gx-8|2QNQ<51PD?OH7yD1+_Lz!r_mSnUbp`(4w4pevkA+*1RDT zO^k2F7P}?0f{;9QO#$O#YU&vC`>mWyat;{J^`R?FcA&_1$=eDwM{@+;>zqwW#IY8}9^;DJT(%u5Aq`A`#bEA1&iuzLqC zu<;j+d=q2+G7q8=y7RyY;oYpp4W3Xs^@^1X6vm5||3j{ScSBUH&Jf1HX?&IWHp~(m z=U;ujO!Lq~#P?to;P+vIG?P;R8`lPqXOzX^U5Wx+&A0V)no<$Wa9$Mubj*ve<(pA3 zc_CYfFF<=5x`DcaI=;6G#J{)S=5NJ(W_jc-^v@_3#&v}GTlNXqUG;QUd=LfBoMgFx zxN|U_|C4<)ILrPN@d0KWb;-tYOLpgGV{)f{2Il{)6y*vMxssq^TzYp7z4!wHCXKdX zudGtw-Kpo0-)+rQgTDZyzWF+^;({2c;<=k@yLcPY=r%=;U%EnWpL26Yl)J&fx9#yV z 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�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

gSC!_R9zlSv7@XJN=CJ^2u_i@Whp%X&Am$9BK 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 z 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 literal 0 HcmV?d00001 diff --git a/env/Lib/site-packages/psycopg2/_range.py b/env/Lib/site-packages/psycopg2/_range.py new file mode 100644 index 0000000..64bae07 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/_range.py @@ -0,0 +1,554 @@ +"""Implementation of the Range type and adaptation + +""" + +# psycopg/_range.py - Implementation of the Range type and adaptation +# +# Copyright (C) 2012-2019 Daniele Varrazzo +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import re + +from psycopg2._psycopg import ProgrammingError, InterfaceError +from psycopg2.extensions import ISQLQuote, adapt, register_adapter +from psycopg2.extensions import new_type, new_array_type, register_type + + +class Range: + """Python representation for a PostgreSQL |range|_ type. + + :param lower: lower bound for the range. `!None` means unbound + :param upper: upper bound for the range. `!None` means unbound + :param bounds: one of the literal strings ``()``, ``[)``, ``(]``, ``[]``, + representing whether the lower or upper bounds are included + :param empty: if `!True`, the range is empty + + """ + __slots__ = ('_lower', '_upper', '_bounds') + + def __init__(self, lower=None, upper=None, bounds='[)', empty=False): + if not empty: + if bounds not in ('[)', '(]', '()', '[]'): + raise ValueError(f"bound flags not valid: {bounds!r}") + + self._lower = lower + self._upper = upper + self._bounds = bounds + else: + self._lower = self._upper = self._bounds = None + + def __repr__(self): + if self._bounds is None: + return f"{self.__class__.__name__}(empty=True)" + else: + return "{}({!r}, {!r}, {!r})".format(self.__class__.__name__, + self._lower, self._upper, self._bounds) + + def __str__(self): + if self._bounds is None: + return 'empty' + + items = [ + self._bounds[0], + str(self._lower), + ', ', + str(self._upper), + self._bounds[1] + ] + return ''.join(items) + + @property + def lower(self): + """The lower bound of the range. `!None` if empty or unbound.""" + return self._lower + + @property + def upper(self): + """The upper bound of the range. `!None` if empty or unbound.""" + return self._upper + + @property + def isempty(self): + """`!True` if the range is empty.""" + return self._bounds is None + + @property + def lower_inf(self): + """`!True` if the range doesn't have a lower bound.""" + if self._bounds is None: + return False + return self._lower is None + + @property + def upper_inf(self): + """`!True` if the range doesn't have an upper bound.""" + if self._bounds is None: + return False + return self._upper is None + + @property + def lower_inc(self): + """`!True` if the lower bound is included in the range.""" + if self._bounds is None or self._lower is None: + return False + return self._bounds[0] == '[' + + @property + def upper_inc(self): + """`!True` if the upper bound is included in the range.""" + if self._bounds is None or self._upper is None: + return False + return self._bounds[1] == ']' + + def __contains__(self, x): + if self._bounds is None: + return False + + if self._lower is not None: + if self._bounds[0] == '[': + if x < self._lower: + return False + else: + if x <= self._lower: + return False + + if self._upper is not None: + if self._bounds[1] == ']': + if x > self._upper: + return False + else: + if x >= self._upper: + return False + + return True + + def __bool__(self): + return self._bounds is not None + + def __eq__(self, other): + if not isinstance(other, Range): + return False + return (self._lower == other._lower + and self._upper == other._upper + and self._bounds == other._bounds) + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self._lower, self._upper, self._bounds)) + + # as the postgres docs describe for the server-side stuff, + # ordering is rather arbitrary, but will remain stable + # and consistent. + + def __lt__(self, other): + if not isinstance(other, Range): + return NotImplemented + for attr in ('_lower', '_upper', '_bounds'): + self_value = getattr(self, attr) + other_value = getattr(other, attr) + if self_value == other_value: + pass + elif self_value is None: + return True + elif other_value is None: + return False + else: + return self_value < other_value + return False + + def __le__(self, other): + if self == other: + return True + else: + return self.__lt__(other) + + def __gt__(self, other): + if isinstance(other, Range): + return other.__lt__(self) + else: + return NotImplemented + + def __ge__(self, other): + if self == other: + return True + else: + return self.__gt__(other) + + def __getstate__(self): + return {slot: getattr(self, slot) + for slot in self.__slots__ if hasattr(self, slot)} + + def __setstate__(self, state): + for slot, value in state.items(): + setattr(self, slot, value) + + +def register_range(pgrange, pyrange, conn_or_curs, globally=False): + """Create and register an adapter and the typecasters to convert between + a PostgreSQL |range|_ type and a PostgreSQL `Range` subclass. + + :param pgrange: the name of the PostgreSQL |range| type. Can be + schema-qualified + :param pyrange: a `Range` strict subclass, or just a name to give to a new + class + :param conn_or_curs: a connection or cursor used to find the oid of the + range and its subtype; the typecaster is registered in a scope limited + to this object, unless *globally* is set to `!True` + :param globally: if `!False` (default) register the typecaster only on + *conn_or_curs*, otherwise register it globally + :return: `RangeCaster` instance responsible for the conversion + + If a string is passed to *pyrange*, a new `Range` subclass is created + with such name and will be available as the `~RangeCaster.range` attribute + of the returned `RangeCaster` object. + + The function queries the database on *conn_or_curs* to inspect the + *pgrange* type and raises `~psycopg2.ProgrammingError` if the type is not + found. If querying the database is not advisable, use directly the + `RangeCaster` class and register the adapter and typecasters using the + provided functions. + + """ + caster = RangeCaster._from_db(pgrange, pyrange, conn_or_curs) + caster._register(not globally and conn_or_curs or None) + return caster + + +class RangeAdapter: + """`ISQLQuote` adapter for `Range` subclasses. + + This is an abstract class: concrete classes must set a `name` class + attribute or override `getquoted()`. + """ + name = None + + def __init__(self, adapted): + self.adapted = adapted + + def __conform__(self, proto): + if self._proto is ISQLQuote: + return self + + def prepare(self, conn): + self._conn = conn + + def getquoted(self): + if self.name is None: + raise NotImplementedError( + 'RangeAdapter must be subclassed overriding its name ' + 'or the getquoted() method') + + r = self.adapted + if r.isempty: + return b"'empty'::" + self.name.encode('utf8') + + if r.lower is not None: + a = adapt(r.lower) + if hasattr(a, 'prepare'): + a.prepare(self._conn) + lower = a.getquoted() + else: + lower = b'NULL' + + if r.upper is not None: + a = adapt(r.upper) + if hasattr(a, 'prepare'): + a.prepare(self._conn) + upper = a.getquoted() + else: + upper = b'NULL' + + return self.name.encode('utf8') + b'(' + lower + b', ' + upper \ + + b", '" + r._bounds.encode('utf8') + b"')" + + +class RangeCaster: + """Helper class to convert between `Range` and PostgreSQL range types. + + Objects of this class are usually created by `register_range()`. Manual + creation could be useful if querying the database is not advisable: in + this case the oids must be provided. + """ + def __init__(self, pgrange, pyrange, oid, subtype_oid, array_oid=None): + self.subtype_oid = subtype_oid + self._create_ranges(pgrange, pyrange) + + name = self.adapter.name or self.adapter.__class__.__name__ + + self.typecaster = new_type((oid,), name, self.parse) + + if array_oid is not None: + self.array_typecaster = new_array_type( + (array_oid,), name + "ARRAY", self.typecaster) + else: + self.array_typecaster = None + + def _create_ranges(self, pgrange, pyrange): + """Create Range and RangeAdapter classes if needed.""" + # if got a string create a new RangeAdapter concrete type (with a name) + # else take it as an adapter. Passing an adapter should be considered + # an implementation detail and is not documented. It is currently used + # for the numeric ranges. + self.adapter = None + if isinstance(pgrange, str): + self.adapter = type(pgrange, (RangeAdapter,), {}) + self.adapter.name = pgrange + else: + try: + if issubclass(pgrange, RangeAdapter) \ + and pgrange is not RangeAdapter: + self.adapter = pgrange + except TypeError: + pass + + if self.adapter is None: + raise TypeError( + 'pgrange must be a string or a RangeAdapter strict subclass') + + self.range = None + try: + if isinstance(pyrange, str): + self.range = type(pyrange, (Range,), {}) + if issubclass(pyrange, Range) and pyrange is not Range: + self.range = pyrange + except TypeError: + pass + + if self.range is None: + raise TypeError( + 'pyrange must be a type or a Range strict subclass') + + @classmethod + def _from_db(self, name, pyrange, conn_or_curs): + """Return a `RangeCaster` instance for the type *pgrange*. + + Raise `ProgrammingError` if the type is not found. + """ + from psycopg2.extensions import STATUS_IN_TRANSACTION + from psycopg2.extras import _solve_conn_curs + conn, curs = _solve_conn_curs(conn_or_curs) + + if conn.info.server_version < 90200: + raise ProgrammingError("range types not available in version %s" + % conn.info.server_version) + + # Store the transaction status of the connection to revert it after use + conn_status = conn.status + + # Use the correct schema + if '.' in name: + schema, tname = name.split('.', 1) + else: + tname = name + schema = 'public' + + # get the type oid and attributes + curs.execute("""\ +select rngtypid, rngsubtype, typarray +from pg_range r +join pg_type t on t.oid = rngtypid +join pg_namespace ns on ns.oid = typnamespace +where typname = %s and ns.nspname = %s; +""", (tname, schema)) + rec = curs.fetchone() + + if not rec: + # The above algorithm doesn't work for customized seach_path + # (#1487) The implementation below works better, but, to guarantee + # backwards compatibility, use it only if the original one failed. + try: + savepoint = False + # Because we executed statements earlier, we are either INTRANS + # or we are IDLE only if the transaction is autocommit, in + # which case we don't need the savepoint anyway. + if conn.status == STATUS_IN_TRANSACTION: + curs.execute("SAVEPOINT register_type") + savepoint = True + + curs.execute("""\ +SELECT rngtypid, rngsubtype, typarray, typname, nspname +from pg_range r +join pg_type t on t.oid = rngtypid +join pg_namespace ns on ns.oid = typnamespace +WHERE t.oid = %s::regtype +""", (name, )) + except ProgrammingError: + pass + else: + rec = curs.fetchone() + if rec: + tname, schema = rec[3:] + finally: + if savepoint: + curs.execute("ROLLBACK TO SAVEPOINT register_type") + + # revert the status of the connection as before the command + if conn_status != STATUS_IN_TRANSACTION and not conn.autocommit: + conn.rollback() + + if not rec: + raise ProgrammingError( + f"PostgreSQL range '{name}' not found") + + type, subtype, array = rec[:3] + + return RangeCaster(name, pyrange, + oid=type, subtype_oid=subtype, array_oid=array) + + _re_range = re.compile(r""" + ( \(|\[ ) # lower bound flag + (?: # lower bound: + " ( (?: [^"] | "")* ) " # - a quoted string + | ( [^",]+ ) # - or an unquoted string + )? # - or empty (not catched) + , + (?: # upper bound: + " ( (?: [^"] | "")* ) " # - a quoted string + | ( [^"\)\]]+ ) # - or an unquoted string + )? # - or empty (not catched) + ( \)|\] ) # upper bound flag + """, re.VERBOSE) + + _re_undouble = re.compile(r'(["\\])\1') + + def parse(self, s, cur=None): + if s is None: + return None + + if s == 'empty': + return self.range(empty=True) + + m = self._re_range.match(s) + if m is None: + raise InterfaceError(f"failed to parse range: '{s}'") + + lower = m.group(3) + if lower is None: + lower = m.group(2) + if lower is not None: + lower = self._re_undouble.sub(r"\1", lower) + + upper = m.group(5) + if upper is None: + upper = m.group(4) + if upper is not None: + upper = self._re_undouble.sub(r"\1", upper) + + if cur is not None: + lower = cur.cast(self.subtype_oid, lower) + upper = cur.cast(self.subtype_oid, upper) + + bounds = m.group(1) + m.group(6) + + return self.range(lower, upper, bounds) + + def _register(self, scope=None): + register_type(self.typecaster, scope) + if self.array_typecaster is not None: + register_type(self.array_typecaster, scope) + + register_adapter(self.range, self.adapter) + + +class NumericRange(Range): + """A `Range` suitable to pass Python numeric types to a PostgreSQL range. + + PostgreSQL types :sql:`int4range`, :sql:`int8range`, :sql:`numrange` are + casted into `!NumericRange` instances. + """ + pass + + +class DateRange(Range): + """Represents :sql:`daterange` values.""" + pass + + +class DateTimeRange(Range): + """Represents :sql:`tsrange` values.""" + pass + + +class DateTimeTZRange(Range): + """Represents :sql:`tstzrange` values.""" + pass + + +# Special adaptation for NumericRange. Allows to pass number range regardless +# of whether they are ints, floats and what size of ints are, which are +# pointless in Python world. On the way back, no numeric range is casted to +# NumericRange, but only to their subclasses + +class NumberRangeAdapter(RangeAdapter): + """Adapt a range if the subtype doesn't need quotes.""" + def getquoted(self): + r = self.adapted + if r.isempty: + return b"'empty'" + + if not r.lower_inf: + # not exactly: we are relying that none of these object is really + # quoted (they are numbers). Also, I'm lazy and not preparing the + # adapter because I assume encoding doesn't matter for these + # objects. + lower = adapt(r.lower).getquoted().decode('ascii') + else: + lower = '' + + if not r.upper_inf: + upper = adapt(r.upper).getquoted().decode('ascii') + else: + upper = '' + + return (f"'{r._bounds[0]}{lower},{upper}{r._bounds[1]}'").encode('ascii') + + +# TODO: probably won't work with infs, nans and other tricky cases. +register_adapter(NumericRange, NumberRangeAdapter) + +# Register globally typecasters and adapters for builtin range types. + +# note: the adapter is registered more than once, but this is harmless. +int4range_caster = RangeCaster(NumberRangeAdapter, NumericRange, + oid=3904, subtype_oid=23, array_oid=3905) +int4range_caster._register() + +int8range_caster = RangeCaster(NumberRangeAdapter, NumericRange, + oid=3926, subtype_oid=20, array_oid=3927) +int8range_caster._register() + +numrange_caster = RangeCaster(NumberRangeAdapter, NumericRange, + oid=3906, subtype_oid=1700, array_oid=3907) +numrange_caster._register() + +daterange_caster = RangeCaster('daterange', DateRange, + oid=3912, subtype_oid=1082, array_oid=3913) +daterange_caster._register() + +tsrange_caster = RangeCaster('tsrange', DateTimeRange, + oid=3908, subtype_oid=1114, array_oid=3909) +tsrange_caster._register() + +tstzrange_caster = RangeCaster('tstzrange', DateTimeTZRange, + oid=3910, subtype_oid=1184, array_oid=3911) +tstzrange_caster._register() diff --git a/env/Lib/site-packages/psycopg2/errorcodes.py b/env/Lib/site-packages/psycopg2/errorcodes.py new file mode 100644 index 0000000..aa646c4 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/errorcodes.py @@ -0,0 +1,449 @@ +"""Error codes for PostgreSQL + +This module contains symbolic names for all PostgreSQL error codes. +""" +# psycopg2/errorcodes.py - PostgreSQL error codes +# +# Copyright (C) 2006-2019 Johan Dahlin +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. +# +# Based on: +# +# https://www.postgresql.org/docs/current/static/errcodes-appendix.html +# + + +def lookup(code, _cache={}): + """Lookup an error code or class code and return its symbolic name. + + Raise `KeyError` if the code is not found. + """ + if _cache: + return _cache[code] + + # Generate the lookup map at first usage. + tmp = {} + for k, v in globals().items(): + if isinstance(v, str) and len(v) in (2, 5): + # Strip trailing underscore used to disambiguate duplicate values + tmp[v] = k.rstrip("_") + + assert tmp + + # Atomic update, to avoid race condition on import (bug #382) + _cache.update(tmp) + + return _cache[code] + + +# autogenerated data: do not edit below this point. + +# Error classes +CLASS_SUCCESSFUL_COMPLETION = '00' +CLASS_WARNING = '01' +CLASS_NO_DATA = '02' +CLASS_SQL_STATEMENT_NOT_YET_COMPLETE = '03' +CLASS_CONNECTION_EXCEPTION = '08' +CLASS_TRIGGERED_ACTION_EXCEPTION = '09' +CLASS_FEATURE_NOT_SUPPORTED = '0A' +CLASS_INVALID_TRANSACTION_INITIATION = '0B' +CLASS_LOCATOR_EXCEPTION = '0F' +CLASS_INVALID_GRANTOR = '0L' +CLASS_INVALID_ROLE_SPECIFICATION = '0P' +CLASS_DIAGNOSTICS_EXCEPTION = '0Z' +CLASS_CASE_NOT_FOUND = '20' +CLASS_CARDINALITY_VIOLATION = '21' +CLASS_DATA_EXCEPTION = '22' +CLASS_INTEGRITY_CONSTRAINT_VIOLATION = '23' +CLASS_INVALID_CURSOR_STATE = '24' +CLASS_INVALID_TRANSACTION_STATE = '25' +CLASS_INVALID_SQL_STATEMENT_NAME = '26' +CLASS_TRIGGERED_DATA_CHANGE_VIOLATION = '27' +CLASS_INVALID_AUTHORIZATION_SPECIFICATION = '28' +CLASS_DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST = '2B' +CLASS_INVALID_TRANSACTION_TERMINATION = '2D' +CLASS_SQL_ROUTINE_EXCEPTION = '2F' +CLASS_INVALID_CURSOR_NAME = '34' +CLASS_EXTERNAL_ROUTINE_EXCEPTION = '38' +CLASS_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION = '39' +CLASS_SAVEPOINT_EXCEPTION = '3B' +CLASS_INVALID_CATALOG_NAME = '3D' +CLASS_INVALID_SCHEMA_NAME = '3F' +CLASS_TRANSACTION_ROLLBACK = '40' +CLASS_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION = '42' +CLASS_WITH_CHECK_OPTION_VIOLATION = '44' +CLASS_INSUFFICIENT_RESOURCES = '53' +CLASS_PROGRAM_LIMIT_EXCEEDED = '54' +CLASS_OBJECT_NOT_IN_PREREQUISITE_STATE = '55' +CLASS_OPERATOR_INTERVENTION = '57' +CLASS_SYSTEM_ERROR = '58' +CLASS_SNAPSHOT_FAILURE = '72' +CLASS_CONFIGURATION_FILE_ERROR = 'F0' +CLASS_FOREIGN_DATA_WRAPPER_ERROR = 'HV' +CLASS_PL_PGSQL_ERROR = 'P0' +CLASS_INTERNAL_ERROR = 'XX' + +# Class 00 - Successful Completion +SUCCESSFUL_COMPLETION = '00000' + +# Class 01 - Warning +WARNING = '01000' +NULL_VALUE_ELIMINATED_IN_SET_FUNCTION = '01003' +STRING_DATA_RIGHT_TRUNCATION_ = '01004' +PRIVILEGE_NOT_REVOKED = '01006' +PRIVILEGE_NOT_GRANTED = '01007' +IMPLICIT_ZERO_BIT_PADDING = '01008' +DYNAMIC_RESULT_SETS_RETURNED = '0100C' +DEPRECATED_FEATURE = '01P01' + +# Class 02 - No Data (this is also a warning class per the SQL standard) +NO_DATA = '02000' +NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED = '02001' + +# Class 03 - SQL Statement Not Yet Complete +SQL_STATEMENT_NOT_YET_COMPLETE = '03000' + +# Class 08 - Connection Exception +CONNECTION_EXCEPTION = '08000' +SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION = '08001' +CONNECTION_DOES_NOT_EXIST = '08003' +SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION = '08004' +CONNECTION_FAILURE = '08006' +TRANSACTION_RESOLUTION_UNKNOWN = '08007' +PROTOCOL_VIOLATION = '08P01' + +# Class 09 - Triggered Action Exception +TRIGGERED_ACTION_EXCEPTION = '09000' + +# Class 0A - Feature Not Supported +FEATURE_NOT_SUPPORTED = '0A000' + +# Class 0B - Invalid Transaction Initiation +INVALID_TRANSACTION_INITIATION = '0B000' + +# Class 0F - Locator Exception +LOCATOR_EXCEPTION = '0F000' +INVALID_LOCATOR_SPECIFICATION = '0F001' + +# Class 0L - Invalid Grantor +INVALID_GRANTOR = '0L000' +INVALID_GRANT_OPERATION = '0LP01' + +# Class 0P - Invalid Role Specification +INVALID_ROLE_SPECIFICATION = '0P000' + +# Class 0Z - Diagnostics Exception +DIAGNOSTICS_EXCEPTION = '0Z000' +STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER = '0Z002' + +# Class 20 - Case Not Found +CASE_NOT_FOUND = '20000' + +# Class 21 - Cardinality Violation +CARDINALITY_VIOLATION = '21000' + +# Class 22 - Data Exception +DATA_EXCEPTION = '22000' +STRING_DATA_RIGHT_TRUNCATION = '22001' +NULL_VALUE_NO_INDICATOR_PARAMETER = '22002' +NUMERIC_VALUE_OUT_OF_RANGE = '22003' +NULL_VALUE_NOT_ALLOWED_ = '22004' +ERROR_IN_ASSIGNMENT = '22005' +INVALID_DATETIME_FORMAT = '22007' +DATETIME_FIELD_OVERFLOW = '22008' +INVALID_TIME_ZONE_DISPLACEMENT_VALUE = '22009' +ESCAPE_CHARACTER_CONFLICT = '2200B' +INVALID_USE_OF_ESCAPE_CHARACTER = '2200C' +INVALID_ESCAPE_OCTET = '2200D' +ZERO_LENGTH_CHARACTER_STRING = '2200F' +MOST_SPECIFIC_TYPE_MISMATCH = '2200G' +SEQUENCE_GENERATOR_LIMIT_EXCEEDED = '2200H' +NOT_AN_XML_DOCUMENT = '2200L' +INVALID_XML_DOCUMENT = '2200M' +INVALID_XML_CONTENT = '2200N' +INVALID_XML_COMMENT = '2200S' +INVALID_XML_PROCESSING_INSTRUCTION = '2200T' +INVALID_INDICATOR_PARAMETER_VALUE = '22010' +SUBSTRING_ERROR = '22011' +DIVISION_BY_ZERO = '22012' +INVALID_PRECEDING_OR_FOLLOWING_SIZE = '22013' +INVALID_ARGUMENT_FOR_NTILE_FUNCTION = '22014' +INTERVAL_FIELD_OVERFLOW = '22015' +INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION = '22016' +INVALID_CHARACTER_VALUE_FOR_CAST = '22018' +INVALID_ESCAPE_CHARACTER = '22019' +INVALID_REGULAR_EXPRESSION = '2201B' +INVALID_ARGUMENT_FOR_LOGARITHM = '2201E' +INVALID_ARGUMENT_FOR_POWER_FUNCTION = '2201F' +INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION = '2201G' +INVALID_ROW_COUNT_IN_LIMIT_CLAUSE = '2201W' +INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE = '2201X' +INVALID_LIMIT_VALUE = '22020' +CHARACTER_NOT_IN_REPERTOIRE = '22021' +INDICATOR_OVERFLOW = '22022' +INVALID_PARAMETER_VALUE = '22023' +UNTERMINATED_C_STRING = '22024' +INVALID_ESCAPE_SEQUENCE = '22025' +STRING_DATA_LENGTH_MISMATCH = '22026' +TRIM_ERROR = '22027' +ARRAY_SUBSCRIPT_ERROR = '2202E' +INVALID_TABLESAMPLE_REPEAT = '2202G' +INVALID_TABLESAMPLE_ARGUMENT = '2202H' +DUPLICATE_JSON_OBJECT_KEY_VALUE = '22030' +INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION = '22031' +INVALID_JSON_TEXT = '22032' +INVALID_SQL_JSON_SUBSCRIPT = '22033' +MORE_THAN_ONE_SQL_JSON_ITEM = '22034' +NO_SQL_JSON_ITEM = '22035' +NON_NUMERIC_SQL_JSON_ITEM = '22036' +NON_UNIQUE_KEYS_IN_A_JSON_OBJECT = '22037' +SINGLETON_SQL_JSON_ITEM_REQUIRED = '22038' +SQL_JSON_ARRAY_NOT_FOUND = '22039' +SQL_JSON_MEMBER_NOT_FOUND = '2203A' +SQL_JSON_NUMBER_NOT_FOUND = '2203B' +SQL_JSON_OBJECT_NOT_FOUND = '2203C' +TOO_MANY_JSON_ARRAY_ELEMENTS = '2203D' +TOO_MANY_JSON_OBJECT_MEMBERS = '2203E' +SQL_JSON_SCALAR_REQUIRED = '2203F' +SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE = '2203G' +FLOATING_POINT_EXCEPTION = '22P01' +INVALID_TEXT_REPRESENTATION = '22P02' +INVALID_BINARY_REPRESENTATION = '22P03' +BAD_COPY_FILE_FORMAT = '22P04' +UNTRANSLATABLE_CHARACTER = '22P05' +NONSTANDARD_USE_OF_ESCAPE_CHARACTER = '22P06' + +# Class 23 - Integrity Constraint Violation +INTEGRITY_CONSTRAINT_VIOLATION = '23000' +RESTRICT_VIOLATION = '23001' +NOT_NULL_VIOLATION = '23502' +FOREIGN_KEY_VIOLATION = '23503' +UNIQUE_VIOLATION = '23505' +CHECK_VIOLATION = '23514' +EXCLUSION_VIOLATION = '23P01' + +# Class 24 - Invalid Cursor State +INVALID_CURSOR_STATE = '24000' + +# Class 25 - Invalid Transaction State +INVALID_TRANSACTION_STATE = '25000' +ACTIVE_SQL_TRANSACTION = '25001' +BRANCH_TRANSACTION_ALREADY_ACTIVE = '25002' +INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION = '25003' +INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION = '25004' +NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION = '25005' +READ_ONLY_SQL_TRANSACTION = '25006' +SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED = '25007' +HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL = '25008' +NO_ACTIVE_SQL_TRANSACTION = '25P01' +IN_FAILED_SQL_TRANSACTION = '25P02' +IDLE_IN_TRANSACTION_SESSION_TIMEOUT = '25P03' + +# Class 26 - Invalid SQL Statement Name +INVALID_SQL_STATEMENT_NAME = '26000' + +# Class 27 - Triggered Data Change Violation +TRIGGERED_DATA_CHANGE_VIOLATION = '27000' + +# Class 28 - Invalid Authorization Specification +INVALID_AUTHORIZATION_SPECIFICATION = '28000' +INVALID_PASSWORD = '28P01' + +# Class 2B - Dependent Privilege Descriptors Still Exist +DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST = '2B000' +DEPENDENT_OBJECTS_STILL_EXIST = '2BP01' + +# Class 2D - Invalid Transaction Termination +INVALID_TRANSACTION_TERMINATION = '2D000' + +# Class 2F - SQL Routine Exception +SQL_ROUTINE_EXCEPTION = '2F000' +MODIFYING_SQL_DATA_NOT_PERMITTED_ = '2F002' +PROHIBITED_SQL_STATEMENT_ATTEMPTED_ = '2F003' +READING_SQL_DATA_NOT_PERMITTED_ = '2F004' +FUNCTION_EXECUTED_NO_RETURN_STATEMENT = '2F005' + +# Class 34 - Invalid Cursor Name +INVALID_CURSOR_NAME = '34000' + +# Class 38 - External Routine Exception +EXTERNAL_ROUTINE_EXCEPTION = '38000' +CONTAINING_SQL_NOT_PERMITTED = '38001' +MODIFYING_SQL_DATA_NOT_PERMITTED = '38002' +PROHIBITED_SQL_STATEMENT_ATTEMPTED = '38003' +READING_SQL_DATA_NOT_PERMITTED = '38004' + +# Class 39 - External Routine Invocation Exception +EXTERNAL_ROUTINE_INVOCATION_EXCEPTION = '39000' +INVALID_SQLSTATE_RETURNED = '39001' +NULL_VALUE_NOT_ALLOWED = '39004' +TRIGGER_PROTOCOL_VIOLATED = '39P01' +SRF_PROTOCOL_VIOLATED = '39P02' +EVENT_TRIGGER_PROTOCOL_VIOLATED = '39P03' + +# Class 3B - Savepoint Exception +SAVEPOINT_EXCEPTION = '3B000' +INVALID_SAVEPOINT_SPECIFICATION = '3B001' + +# Class 3D - Invalid Catalog Name +INVALID_CATALOG_NAME = '3D000' + +# Class 3F - Invalid Schema Name +INVALID_SCHEMA_NAME = '3F000' + +# Class 40 - Transaction Rollback +TRANSACTION_ROLLBACK = '40000' +SERIALIZATION_FAILURE = '40001' +TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION = '40002' +STATEMENT_COMPLETION_UNKNOWN = '40003' +DEADLOCK_DETECTED = '40P01' + +# Class 42 - Syntax Error or Access Rule Violation +SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION = '42000' +INSUFFICIENT_PRIVILEGE = '42501' +SYNTAX_ERROR = '42601' +INVALID_NAME = '42602' +INVALID_COLUMN_DEFINITION = '42611' +NAME_TOO_LONG = '42622' +DUPLICATE_COLUMN = '42701' +AMBIGUOUS_COLUMN = '42702' +UNDEFINED_COLUMN = '42703' +UNDEFINED_OBJECT = '42704' +DUPLICATE_OBJECT = '42710' +DUPLICATE_ALIAS = '42712' +DUPLICATE_FUNCTION = '42723' +AMBIGUOUS_FUNCTION = '42725' +GROUPING_ERROR = '42803' +DATATYPE_MISMATCH = '42804' +WRONG_OBJECT_TYPE = '42809' +INVALID_FOREIGN_KEY = '42830' +CANNOT_COERCE = '42846' +UNDEFINED_FUNCTION = '42883' +GENERATED_ALWAYS = '428C9' +RESERVED_NAME = '42939' +UNDEFINED_TABLE = '42P01' +UNDEFINED_PARAMETER = '42P02' +DUPLICATE_CURSOR = '42P03' +DUPLICATE_DATABASE = '42P04' +DUPLICATE_PREPARED_STATEMENT = '42P05' +DUPLICATE_SCHEMA = '42P06' +DUPLICATE_TABLE = '42P07' +AMBIGUOUS_PARAMETER = '42P08' +AMBIGUOUS_ALIAS = '42P09' +INVALID_COLUMN_REFERENCE = '42P10' +INVALID_CURSOR_DEFINITION = '42P11' +INVALID_DATABASE_DEFINITION = '42P12' +INVALID_FUNCTION_DEFINITION = '42P13' +INVALID_PREPARED_STATEMENT_DEFINITION = '42P14' +INVALID_SCHEMA_DEFINITION = '42P15' +INVALID_TABLE_DEFINITION = '42P16' +INVALID_OBJECT_DEFINITION = '42P17' +INDETERMINATE_DATATYPE = '42P18' +INVALID_RECURSION = '42P19' +WINDOWING_ERROR = '42P20' +COLLATION_MISMATCH = '42P21' +INDETERMINATE_COLLATION = '42P22' + +# Class 44 - WITH CHECK OPTION Violation +WITH_CHECK_OPTION_VIOLATION = '44000' + +# Class 53 - Insufficient Resources +INSUFFICIENT_RESOURCES = '53000' +DISK_FULL = '53100' +OUT_OF_MEMORY = '53200' +TOO_MANY_CONNECTIONS = '53300' +CONFIGURATION_LIMIT_EXCEEDED = '53400' + +# Class 54 - Program Limit Exceeded +PROGRAM_LIMIT_EXCEEDED = '54000' +STATEMENT_TOO_COMPLEX = '54001' +TOO_MANY_COLUMNS = '54011' +TOO_MANY_ARGUMENTS = '54023' + +# Class 55 - Object Not In Prerequisite State +OBJECT_NOT_IN_PREREQUISITE_STATE = '55000' +OBJECT_IN_USE = '55006' +CANT_CHANGE_RUNTIME_PARAM = '55P02' +LOCK_NOT_AVAILABLE = '55P03' +UNSAFE_NEW_ENUM_VALUE_USAGE = '55P04' + +# Class 57 - Operator Intervention +OPERATOR_INTERVENTION = '57000' +QUERY_CANCELED = '57014' +ADMIN_SHUTDOWN = '57P01' +CRASH_SHUTDOWN = '57P02' +CANNOT_CONNECT_NOW = '57P03' +DATABASE_DROPPED = '57P04' +IDLE_SESSION_TIMEOUT = '57P05' + +# Class 58 - System Error (errors external to PostgreSQL itself) +SYSTEM_ERROR = '58000' +IO_ERROR = '58030' +UNDEFINED_FILE = '58P01' +DUPLICATE_FILE = '58P02' + +# Class 72 - Snapshot Failure +SNAPSHOT_TOO_OLD = '72000' + +# Class F0 - Configuration File Error +CONFIG_FILE_ERROR = 'F0000' +LOCK_FILE_EXISTS = 'F0001' + +# Class HV - Foreign Data Wrapper Error (SQL/MED) +FDW_ERROR = 'HV000' +FDW_OUT_OF_MEMORY = 'HV001' +FDW_DYNAMIC_PARAMETER_VALUE_NEEDED = 'HV002' +FDW_INVALID_DATA_TYPE = 'HV004' +FDW_COLUMN_NAME_NOT_FOUND = 'HV005' +FDW_INVALID_DATA_TYPE_DESCRIPTORS = 'HV006' +FDW_INVALID_COLUMN_NAME = 'HV007' +FDW_INVALID_COLUMN_NUMBER = 'HV008' +FDW_INVALID_USE_OF_NULL_POINTER = 'HV009' +FDW_INVALID_STRING_FORMAT = 'HV00A' +FDW_INVALID_HANDLE = 'HV00B' +FDW_INVALID_OPTION_INDEX = 'HV00C' +FDW_INVALID_OPTION_NAME = 'HV00D' +FDW_OPTION_NAME_NOT_FOUND = 'HV00J' +FDW_REPLY_HANDLE = 'HV00K' +FDW_UNABLE_TO_CREATE_EXECUTION = 'HV00L' +FDW_UNABLE_TO_CREATE_REPLY = 'HV00M' +FDW_UNABLE_TO_ESTABLISH_CONNECTION = 'HV00N' +FDW_NO_SCHEMAS = 'HV00P' +FDW_SCHEMA_NOT_FOUND = 'HV00Q' +FDW_TABLE_NOT_FOUND = 'HV00R' +FDW_FUNCTION_SEQUENCE_ERROR = 'HV010' +FDW_TOO_MANY_HANDLES = 'HV014' +FDW_INCONSISTENT_DESCRIPTOR_INFORMATION = 'HV021' +FDW_INVALID_ATTRIBUTE_VALUE = 'HV024' +FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH = 'HV090' +FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER = 'HV091' + +# Class P0 - PL/pgSQL Error +PLPGSQL_ERROR = 'P0000' +RAISE_EXCEPTION = 'P0001' +NO_DATA_FOUND = 'P0002' +TOO_MANY_ROWS = 'P0003' +ASSERT_FAILURE = 'P0004' + +# Class XX - Internal Error +INTERNAL_ERROR = 'XX000' +DATA_CORRUPTED = 'XX001' +INDEX_CORRUPTED = 'XX002' diff --git a/env/Lib/site-packages/psycopg2/errors.py b/env/Lib/site-packages/psycopg2/errors.py new file mode 100644 index 0000000..e4e47f5 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/errors.py @@ -0,0 +1,38 @@ +"""Error classes for PostgreSQL error codes +""" + +# psycopg/errors.py - SQLSTATE and DB-API exceptions +# +# Copyright (C) 2018-2019 Daniele Varrazzo +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +# +# NOTE: the exceptions are injected into this module by the C extention. +# + + +def lookup(code): + """Lookup an error code and return its exception class. + + Raise `!KeyError` if the code is not found. + """ + from psycopg2._psycopg import sqlstate_errors # avoid circular import + return sqlstate_errors[code] diff --git a/env/Lib/site-packages/psycopg2/extensions.py b/env/Lib/site-packages/psycopg2/extensions.py new file mode 100644 index 0000000..b938d0c --- /dev/null +++ b/env/Lib/site-packages/psycopg2/extensions.py @@ -0,0 +1,213 @@ +"""psycopg extensions to the DBAPI-2.0 + +This module holds all the extensions to the DBAPI-2.0 provided by psycopg. + +- `connection` -- the new-type inheritable connection class +- `cursor` -- the new-type inheritable cursor class +- `lobject` -- the new-type inheritable large object class +- `adapt()` -- exposes the PEP-246_ compatible adapting mechanism used + by psycopg to adapt Python types to PostgreSQL ones + +.. _PEP-246: https://www.python.org/dev/peps/pep-0246/ +""" +# psycopg/extensions.py - DBAPI-2.0 extensions specific to psycopg +# +# Copyright (C) 2003-2019 Federico Di Gregorio +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import re as _re + +from psycopg2._psycopg import ( # noqa + BINARYARRAY, BOOLEAN, BOOLEANARRAY, BYTES, BYTESARRAY, DATE, DATEARRAY, + DATETIMEARRAY, DECIMAL, DECIMALARRAY, FLOAT, FLOATARRAY, INTEGER, + INTEGERARRAY, INTERVAL, INTERVALARRAY, LONGINTEGER, LONGINTEGERARRAY, + ROWIDARRAY, STRINGARRAY, TIME, TIMEARRAY, UNICODE, UNICODEARRAY, + AsIs, Binary, Boolean, Float, Int, QuotedString, ) + +from psycopg2._psycopg import ( # noqa + PYDATE, PYDATETIME, PYDATETIMETZ, PYINTERVAL, PYTIME, PYDATEARRAY, + PYDATETIMEARRAY, PYDATETIMETZARRAY, PYINTERVALARRAY, PYTIMEARRAY, + DateFromPy, TimeFromPy, TimestampFromPy, IntervalFromPy, ) + +from psycopg2._psycopg import ( # noqa + adapt, adapters, encodings, connection, cursor, + lobject, Xid, libpq_version, parse_dsn, quote_ident, + string_types, binary_types, new_type, new_array_type, register_type, + ISQLQuote, Notify, Diagnostics, Column, ConnectionInfo, + QueryCanceledError, TransactionRollbackError, + set_wait_callback, get_wait_callback, encrypt_password, ) + + +"""Isolation level values.""" +ISOLATION_LEVEL_AUTOCOMMIT = 0 +ISOLATION_LEVEL_READ_UNCOMMITTED = 4 +ISOLATION_LEVEL_READ_COMMITTED = 1 +ISOLATION_LEVEL_REPEATABLE_READ = 2 +ISOLATION_LEVEL_SERIALIZABLE = 3 +ISOLATION_LEVEL_DEFAULT = None + + +"""psycopg connection status values.""" +STATUS_SETUP = 0 +STATUS_READY = 1 +STATUS_BEGIN = 2 +STATUS_SYNC = 3 # currently unused +STATUS_ASYNC = 4 # currently unused +STATUS_PREPARED = 5 + +# This is a useful mnemonic to check if the connection is in a transaction +STATUS_IN_TRANSACTION = STATUS_BEGIN + + +"""psycopg asynchronous connection polling values""" +POLL_OK = 0 +POLL_READ = 1 +POLL_WRITE = 2 +POLL_ERROR = 3 + + +"""Backend transaction status values.""" +TRANSACTION_STATUS_IDLE = 0 +TRANSACTION_STATUS_ACTIVE = 1 +TRANSACTION_STATUS_INTRANS = 2 +TRANSACTION_STATUS_INERROR = 3 +TRANSACTION_STATUS_UNKNOWN = 4 + + +def register_adapter(typ, callable): + """Register 'callable' as an ISQLQuote adapter for type 'typ'.""" + adapters[(typ, ISQLQuote)] = callable + + +# The SQL_IN class is the official adapter for tuples starting from 2.0.6. +class SQL_IN: + """Adapt any iterable to an SQL quotable object.""" + def __init__(self, seq): + self._seq = seq + self._conn = None + + def prepare(self, conn): + self._conn = conn + + def getquoted(self): + # this is the important line: note how every object in the + # list is adapted and then how getquoted() is called on it + pobjs = [adapt(o) for o in self._seq] + if self._conn is not None: + for obj in pobjs: + if hasattr(obj, 'prepare'): + obj.prepare(self._conn) + qobjs = [o.getquoted() for o in pobjs] + return b'(' + b', '.join(qobjs) + b')' + + def __str__(self): + return str(self.getquoted()) + + +class NoneAdapter: + """Adapt None to NULL. + + This adapter is not used normally as a fast path in mogrify uses NULL, + but it makes easier to adapt composite types. + """ + def __init__(self, obj): + pass + + def getquoted(self, _null=b"NULL"): + return _null + + +def make_dsn(dsn=None, **kwargs): + """Convert a set of keywords into a connection strings.""" + if dsn is None and not kwargs: + return '' + + # If no kwarg is specified don't mung the dsn, but verify it + if not kwargs: + parse_dsn(dsn) + return dsn + + # Override the dsn with the parameters + if 'database' in kwargs: + if 'dbname' in kwargs: + raise TypeError( + "you can't specify both 'database' and 'dbname' arguments") + kwargs['dbname'] = kwargs.pop('database') + + # Drop the None arguments + kwargs = {k: v for (k, v) in kwargs.items() if v is not None} + + if dsn is not None: + tmp = parse_dsn(dsn) + tmp.update(kwargs) + kwargs = tmp + + dsn = " ".join(["{}={}".format(k, _param_escape(str(v))) + for (k, v) in kwargs.items()]) + + # verify that the returned dsn is valid + parse_dsn(dsn) + + return dsn + + +def _param_escape(s, + re_escape=_re.compile(r"([\\'])"), + re_space=_re.compile(r'\s')): + """ + Apply the escaping rule required by PQconnectdb + """ + if not s: + return "''" + + s = re_escape.sub(r'\\\1', s) + if re_space.search(s): + s = "'" + s + "'" + + return s + + +# Create default json typecasters for PostgreSQL 9.2 oids +from psycopg2._json import register_default_json, register_default_jsonb # noqa + +try: + JSON, JSONARRAY = register_default_json() + JSONB, JSONBARRAY = register_default_jsonb() +except ImportError: + pass + +del register_default_json, register_default_jsonb + + +# Create default Range typecasters +from psycopg2. _range import Range # noqa +del Range + + +# Add the "cleaned" version of the encodings to the key. +# When the encoding is set its name is cleaned up from - and _ and turned +# uppercase, so an encoding not respecting these rules wouldn't be found in the +# encodings keys and would raise an exception with the unicode typecaster +for k, v in list(encodings.items()): + k = k.replace('_', '').replace('-', '').upper() + encodings[k] = v + +del k, v diff --git a/env/Lib/site-packages/psycopg2/extras.py b/env/Lib/site-packages/psycopg2/extras.py new file mode 100644 index 0000000..36e8ef9 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/extras.py @@ -0,0 +1,1340 @@ +"""Miscellaneous goodies for psycopg2 + +This module is a generic place used to hold little helper functions +and classes until a better place in the distribution is found. +""" +# psycopg/extras.py - miscellaneous extra goodies for psycopg +# +# Copyright (C) 2003-2019 Federico Di Gregorio +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import os as _os +import time as _time +import re as _re +from collections import namedtuple, OrderedDict + +import logging as _logging + +import psycopg2 +from psycopg2 import extensions as _ext +from .extensions import cursor as _cursor +from .extensions import connection as _connection +from .extensions import adapt as _A, quote_ident +from functools import lru_cache + +from psycopg2._psycopg import ( # noqa + REPLICATION_PHYSICAL, REPLICATION_LOGICAL, + ReplicationConnection as _replicationConnection, + ReplicationCursor as _replicationCursor, + ReplicationMessage) + + +# expose the json adaptation stuff into the module +from psycopg2._json import ( # noqa + json, Json, register_json, register_default_json, register_default_jsonb) + + +# Expose range-related objects +from psycopg2._range import ( # noqa + Range, NumericRange, DateRange, DateTimeRange, DateTimeTZRange, + register_range, RangeAdapter, RangeCaster) + + +# Expose ipaddress-related objects +from psycopg2._ipaddress import register_ipaddress # noqa + + +class DictCursorBase(_cursor): + """Base class for all dict-like cursors.""" + + def __init__(self, *args, **kwargs): + if 'row_factory' in kwargs: + row_factory = kwargs['row_factory'] + del kwargs['row_factory'] + else: + raise NotImplementedError( + "DictCursorBase can't be instantiated without a row factory.") + super().__init__(*args, **kwargs) + self._query_executed = False + self._prefetch = False + self.row_factory = row_factory + + def fetchone(self): + if self._prefetch: + res = super().fetchone() + if self._query_executed: + self._build_index() + if not self._prefetch: + res = super().fetchone() + return res + + def fetchmany(self, size=None): + if self._prefetch: + res = super().fetchmany(size) + if self._query_executed: + self._build_index() + if not self._prefetch: + res = super().fetchmany(size) + return res + + def fetchall(self): + if self._prefetch: + res = super().fetchall() + if self._query_executed: + self._build_index() + if not self._prefetch: + res = super().fetchall() + return res + + def __iter__(self): + try: + if self._prefetch: + res = super().__iter__() + first = next(res) + if self._query_executed: + self._build_index() + if not self._prefetch: + res = super().__iter__() + first = next(res) + + yield first + while True: + yield next(res) + except StopIteration: + return + + +class DictConnection(_connection): + """A connection that uses `DictCursor` automatically.""" + def cursor(self, *args, **kwargs): + kwargs.setdefault('cursor_factory', self.cursor_factory or DictCursor) + return super().cursor(*args, **kwargs) + + +class DictCursor(DictCursorBase): + """A cursor that keeps a list of column name -> index mappings__. + + .. __: https://docs.python.org/glossary.html#term-mapping + """ + + def __init__(self, *args, **kwargs): + kwargs['row_factory'] = DictRow + super().__init__(*args, **kwargs) + self._prefetch = True + + def execute(self, query, vars=None): + self.index = OrderedDict() + self._query_executed = True + return super().execute(query, vars) + + def callproc(self, procname, vars=None): + self.index = OrderedDict() + self._query_executed = True + return super().callproc(procname, vars) + + def _build_index(self): + if self._query_executed and self.description: + for i in range(len(self.description)): + self.index[self.description[i][0]] = i + self._query_executed = False + + +class DictRow(list): + """A row object that allow by-column-name access to data.""" + + __slots__ = ('_index',) + + def __init__(self, cursor): + self._index = cursor.index + self[:] = [None] * len(cursor.description) + + def __getitem__(self, x): + if not isinstance(x, (int, slice)): + x = self._index[x] + return super().__getitem__(x) + + def __setitem__(self, x, v): + if not isinstance(x, (int, slice)): + x = self._index[x] + super().__setitem__(x, v) + + def items(self): + g = super().__getitem__ + return ((n, g(self._index[n])) for n in self._index) + + def keys(self): + return iter(self._index) + + def values(self): + g = super().__getitem__ + return (g(self._index[n]) for n in self._index) + + def get(self, x, default=None): + try: + return self[x] + except Exception: + return default + + def copy(self): + return OrderedDict(self.items()) + + def __contains__(self, x): + return x in self._index + + def __reduce__(self): + # this is apparently useless, but it fixes #1073 + return super().__reduce__() + + def __getstate__(self): + return self[:], self._index.copy() + + def __setstate__(self, data): + self[:] = data[0] + self._index = data[1] + + +class RealDictConnection(_connection): + """A connection that uses `RealDictCursor` automatically.""" + def cursor(self, *args, **kwargs): + kwargs.setdefault('cursor_factory', self.cursor_factory or RealDictCursor) + return super().cursor(*args, **kwargs) + + +class RealDictCursor(DictCursorBase): + """A cursor that uses a real dict as the base type for rows. + + Note that this cursor is extremely specialized and does not allow + the normal access (using integer indices) to fetched data. If you need + to access database rows both as a dictionary and a list, then use + the generic `DictCursor` instead of `!RealDictCursor`. + """ + def __init__(self, *args, **kwargs): + kwargs['row_factory'] = RealDictRow + super().__init__(*args, **kwargs) + + def execute(self, query, vars=None): + self.column_mapping = [] + self._query_executed = True + return super().execute(query, vars) + + def callproc(self, procname, vars=None): + self.column_mapping = [] + self._query_executed = True + return super().callproc(procname, vars) + + def _build_index(self): + if self._query_executed and self.description: + self.column_mapping = [d[0] for d in self.description] + self._query_executed = False + + +class RealDictRow(OrderedDict): + """A `!dict` subclass representing a data record.""" + + def __init__(self, *args, **kwargs): + if args and isinstance(args[0], _cursor): + cursor = args[0] + args = args[1:] + else: + cursor = None + + super().__init__(*args, **kwargs) + + if cursor is not None: + # Required for named cursors + if cursor.description and not cursor.column_mapping: + cursor._build_index() + + # Store the cols mapping in the dict itself until the row is fully + # populated, so we don't need to add attributes to the class + # (hence keeping its maintenance, special pickle support, etc.) + self[RealDictRow] = cursor.column_mapping + + def __setitem__(self, key, value): + if RealDictRow in self: + # We are in the row building phase + mapping = self[RealDictRow] + super().__setitem__(mapping[key], value) + if key == len(mapping) - 1: + # Row building finished + del self[RealDictRow] + return + + super().__setitem__(key, value) + + +class NamedTupleConnection(_connection): + """A connection that uses `NamedTupleCursor` automatically.""" + def cursor(self, *args, **kwargs): + kwargs.setdefault('cursor_factory', self.cursor_factory or NamedTupleCursor) + return super().cursor(*args, **kwargs) + + +class NamedTupleCursor(_cursor): + """A cursor that generates results as `~collections.namedtuple`. + + `!fetch*()` methods will return named tuples instead of regular tuples, so + their elements can be accessed both as regular numeric items as well as + attributes. + + >>> nt_cur = conn.cursor(cursor_factory=psycopg2.extras.NamedTupleCursor) + >>> rec = nt_cur.fetchone() + >>> rec + Record(id=1, num=100, data="abc'def") + >>> rec[1] + 100 + >>> rec.data + "abc'def" + """ + Record = None + MAX_CACHE = 1024 + + def execute(self, query, vars=None): + self.Record = None + return super().execute(query, vars) + + def executemany(self, query, vars): + self.Record = None + return super().executemany(query, vars) + + def callproc(self, procname, vars=None): + self.Record = None + return super().callproc(procname, vars) + + def fetchone(self): + t = super().fetchone() + if t is not None: + nt = self.Record + if nt is None: + nt = self.Record = self._make_nt() + return nt._make(t) + + def fetchmany(self, size=None): + ts = super().fetchmany(size) + nt = self.Record + if nt is None: + nt = self.Record = self._make_nt() + return list(map(nt._make, ts)) + + def fetchall(self): + ts = super().fetchall() + nt = self.Record + if nt is None: + nt = self.Record = self._make_nt() + return list(map(nt._make, ts)) + + def __iter__(self): + try: + it = super().__iter__() + t = next(it) + + nt = self.Record + if nt is None: + nt = self.Record = self._make_nt() + + yield nt._make(t) + + while True: + yield nt._make(next(it)) + except StopIteration: + return + + def _make_nt(self): + key = tuple(d[0] for d in self.description) if self.description else () + return self._cached_make_nt(key) + + @classmethod + def _do_make_nt(cls, key): + fields = [] + for s in key: + s = _re_clean.sub('_', s) + # Python identifier cannot start with numbers, namedtuple fields + # cannot start with underscore. So... + if s[0] == '_' or '0' <= s[0] <= '9': + s = 'f' + s + fields.append(s) + + nt = namedtuple("Record", fields) + return nt + + +@lru_cache(512) +def _cached_make_nt(cls, key): + return cls._do_make_nt(key) + + +# Exposed for testability, and if someone wants to monkeypatch to tweak +# the cache size. +NamedTupleCursor._cached_make_nt = classmethod(_cached_make_nt) + + +class LoggingConnection(_connection): + """A connection that logs all queries to a file or logger__ object. + + .. __: https://docs.python.org/library/logging.html + """ + + def initialize(self, logobj): + """Initialize the connection to log to `!logobj`. + + The `!logobj` parameter can be an open file object or a Logger/LoggerAdapter + instance from the standard logging module. + """ + self._logobj = logobj + if _logging and isinstance( + logobj, (_logging.Logger, _logging.LoggerAdapter)): + self.log = self._logtologger + else: + self.log = self._logtofile + + def filter(self, msg, curs): + """Filter the query before logging it. + + This is the method to overwrite to filter unwanted queries out of the + log or to add some extra data to the output. The default implementation + just does nothing. + """ + return msg + + def _logtofile(self, msg, curs): + msg = self.filter(msg, curs) + if msg: + if isinstance(msg, bytes): + msg = msg.decode(_ext.encodings[self.encoding], 'replace') + self._logobj.write(msg + _os.linesep) + + def _logtologger(self, msg, curs): + msg = self.filter(msg, curs) + if msg: + self._logobj.debug(msg) + + def _check(self): + if not hasattr(self, '_logobj'): + raise self.ProgrammingError( + "LoggingConnection object has not been initialize()d") + + def cursor(self, *args, **kwargs): + self._check() + kwargs.setdefault('cursor_factory', self.cursor_factory or LoggingCursor) + return super().cursor(*args, **kwargs) + + +class LoggingCursor(_cursor): + """A cursor that logs queries using its connection logging facilities.""" + + def execute(self, query, vars=None): + try: + return super().execute(query, vars) + finally: + self.connection.log(self.query, self) + + def callproc(self, procname, vars=None): + try: + return super().callproc(procname, vars) + finally: + self.connection.log(self.query, self) + + +class MinTimeLoggingConnection(LoggingConnection): + """A connection that logs queries based on execution time. + + This is just an example of how to sub-class `LoggingConnection` to + provide some extra filtering for the logged queries. Both the + `initialize()` and `filter()` methods are overwritten to make sure + that only queries executing for more than ``mintime`` ms are logged. + + Note that this connection uses the specialized cursor + `MinTimeLoggingCursor`. + """ + def initialize(self, logobj, mintime=0): + LoggingConnection.initialize(self, logobj) + self._mintime = mintime + + def filter(self, msg, curs): + t = (_time.time() - curs.timestamp) * 1000 + if t > self._mintime: + if isinstance(msg, bytes): + msg = msg.decode(_ext.encodings[self.encoding], 'replace') + return f"{msg}{_os.linesep} (execution time: {t} ms)" + + def cursor(self, *args, **kwargs): + kwargs.setdefault('cursor_factory', + self.cursor_factory or MinTimeLoggingCursor) + return LoggingConnection.cursor(self, *args, **kwargs) + + +class MinTimeLoggingCursor(LoggingCursor): + """The cursor sub-class companion to `MinTimeLoggingConnection`.""" + + def execute(self, query, vars=None): + self.timestamp = _time.time() + return LoggingCursor.execute(self, query, vars) + + def callproc(self, procname, vars=None): + self.timestamp = _time.time() + return LoggingCursor.callproc(self, procname, vars) + + +class LogicalReplicationConnection(_replicationConnection): + + def __init__(self, *args, **kwargs): + kwargs['replication_type'] = REPLICATION_LOGICAL + super().__init__(*args, **kwargs) + + +class PhysicalReplicationConnection(_replicationConnection): + + def __init__(self, *args, **kwargs): + kwargs['replication_type'] = REPLICATION_PHYSICAL + super().__init__(*args, **kwargs) + + +class StopReplication(Exception): + """ + Exception used to break out of the endless loop in + `~ReplicationCursor.consume_stream()`. + + Subclass of `~exceptions.Exception`. Intentionally *not* inherited from + `~psycopg2.Error` as occurrence of this exception does not indicate an + error. + """ + pass + + +class ReplicationCursor(_replicationCursor): + """A cursor used for communication on replication connections.""" + + def create_replication_slot(self, slot_name, slot_type=None, output_plugin=None): + """Create streaming replication slot.""" + + command = f"CREATE_REPLICATION_SLOT {quote_ident(slot_name, self)} " + + if slot_type is None: + slot_type = self.connection.replication_type + + if slot_type == REPLICATION_LOGICAL: + if output_plugin is None: + raise psycopg2.ProgrammingError( + "output plugin name is required to create " + "logical replication slot") + + command += f"LOGICAL {quote_ident(output_plugin, self)}" + + elif slot_type == REPLICATION_PHYSICAL: + if output_plugin is not None: + raise psycopg2.ProgrammingError( + "cannot specify output plugin name when creating " + "physical replication slot") + + command += "PHYSICAL" + + else: + raise psycopg2.ProgrammingError( + f"unrecognized replication type: {repr(slot_type)}") + + self.execute(command) + + def drop_replication_slot(self, slot_name): + """Drop streaming replication slot.""" + + command = f"DROP_REPLICATION_SLOT {quote_ident(slot_name, self)}" + self.execute(command) + + def start_replication( + self, slot_name=None, slot_type=None, start_lsn=0, + timeline=0, options=None, decode=False, status_interval=10): + """Start replication stream.""" + + command = "START_REPLICATION " + + if slot_type is None: + slot_type = self.connection.replication_type + + if slot_type == REPLICATION_LOGICAL: + if slot_name: + command += f"SLOT {quote_ident(slot_name, self)} " + else: + raise psycopg2.ProgrammingError( + "slot name is required for logical replication") + + command += "LOGICAL " + + elif slot_type == REPLICATION_PHYSICAL: + if slot_name: + command += f"SLOT {quote_ident(slot_name, self)} " + # don't add "PHYSICAL", before 9.4 it was just START_REPLICATION XXX/XXX + + else: + raise psycopg2.ProgrammingError( + f"unrecognized replication type: {repr(slot_type)}") + + if type(start_lsn) is str: + lsn = start_lsn.split('/') + lsn = f"{int(lsn[0], 16):X}/{int(lsn[1], 16):08X}" + else: + lsn = f"{start_lsn >> 32 & 4294967295:X}/{start_lsn & 4294967295:08X}" + + command += lsn + + if timeline != 0: + if slot_type == REPLICATION_LOGICAL: + raise psycopg2.ProgrammingError( + "cannot specify timeline for logical replication") + + command += f" TIMELINE {timeline}" + + if options: + if slot_type == REPLICATION_PHYSICAL: + raise psycopg2.ProgrammingError( + "cannot specify output plugin options for physical replication") + + command += " (" + for k, v in options.items(): + if not command.endswith('('): + command += ", " + command += f"{quote_ident(k, self)} {_A(str(v))}" + command += ")" + + self.start_replication_expert( + command, decode=decode, status_interval=status_interval) + + # allows replication cursors to be used in select.select() directly + def fileno(self): + return self.connection.fileno() + + +# a dbtype and adapter for Python UUID type + +class UUID_adapter: + """Adapt Python's uuid.UUID__ type to PostgreSQL's uuid__. + + .. __: https://docs.python.org/library/uuid.html + .. __: https://www.postgresql.org/docs/current/static/datatype-uuid.html + """ + + def __init__(self, uuid): + self._uuid = uuid + + def __conform__(self, proto): + if proto is _ext.ISQLQuote: + return self + + def getquoted(self): + return (f"'{self._uuid}'::uuid").encode('utf8') + + def __str__(self): + return f"'{self._uuid}'::uuid" + + +def register_uuid(oids=None, conn_or_curs=None): + """Create the UUID type and an uuid.UUID adapter. + + :param oids: oid for the PostgreSQL :sql:`uuid` type, or 2-items sequence + with oids of the type and the array. If not specified, use PostgreSQL + standard oids. + :param conn_or_curs: where to register the typecaster. If not specified, + register it globally. + """ + + import uuid + + if not oids: + oid1 = 2950 + oid2 = 2951 + elif isinstance(oids, (list, tuple)): + oid1, oid2 = oids + else: + oid1 = oids + oid2 = 2951 + + _ext.UUID = _ext.new_type((oid1, ), "UUID", + lambda data, cursor: data and uuid.UUID(data) or None) + _ext.UUIDARRAY = _ext.new_array_type((oid2,), "UUID[]", _ext.UUID) + + _ext.register_type(_ext.UUID, conn_or_curs) + _ext.register_type(_ext.UUIDARRAY, conn_or_curs) + _ext.register_adapter(uuid.UUID, UUID_adapter) + + return _ext.UUID + + +# a type, dbtype and adapter for PostgreSQL inet type + +class Inet: + """Wrap a string to allow for correct SQL-quoting of inet values. + + Note that this adapter does NOT check the passed value to make + sure it really is an inet-compatible address but DOES call adapt() + on it to make sure it is impossible to execute an SQL-injection + by passing an evil value to the initializer. + """ + def __init__(self, addr): + self.addr = addr + + def __repr__(self): + return f"{self.__class__.__name__}({self.addr!r})" + + def prepare(self, conn): + self._conn = conn + + def getquoted(self): + obj = _A(self.addr) + if hasattr(obj, 'prepare'): + obj.prepare(self._conn) + return obj.getquoted() + b"::inet" + + def __conform__(self, proto): + if proto is _ext.ISQLQuote: + return self + + def __str__(self): + return str(self.addr) + + +def register_inet(oid=None, conn_or_curs=None): + """Create the INET type and an Inet adapter. + + :param oid: oid for the PostgreSQL :sql:`inet` type, or 2-items sequence + with oids of the type and the array. If not specified, use PostgreSQL + standard oids. + :param conn_or_curs: where to register the typecaster. If not specified, + register it globally. + """ + import warnings + warnings.warn( + "the inet adapter is deprecated, it's not very useful", + DeprecationWarning) + + if not oid: + oid1 = 869 + oid2 = 1041 + elif isinstance(oid, (list, tuple)): + oid1, oid2 = oid + else: + oid1 = oid + oid2 = 1041 + + _ext.INET = _ext.new_type((oid1, ), "INET", + lambda data, cursor: data and Inet(data) or None) + _ext.INETARRAY = _ext.new_array_type((oid2, ), "INETARRAY", _ext.INET) + + _ext.register_type(_ext.INET, conn_or_curs) + _ext.register_type(_ext.INETARRAY, conn_or_curs) + + return _ext.INET + + +def wait_select(conn): + """Wait until a connection or cursor has data available. + + The function is an example of a wait callback to be registered with + `~psycopg2.extensions.set_wait_callback()`. This function uses + :py:func:`~select.select()` to wait for data to become available, and + therefore is able to handle/receive SIGINT/KeyboardInterrupt. + """ + import select + from psycopg2.extensions import POLL_OK, POLL_READ, POLL_WRITE + + while True: + try: + state = conn.poll() + if state == POLL_OK: + break + elif state == POLL_READ: + select.select([conn.fileno()], [], []) + elif state == POLL_WRITE: + select.select([], [conn.fileno()], []) + else: + raise conn.OperationalError(f"bad state from poll: {state}") + except KeyboardInterrupt: + conn.cancel() + # the loop will be broken by a server error + continue + + +def _solve_conn_curs(conn_or_curs): + """Return the connection and a DBAPI cursor from a connection or cursor.""" + if conn_or_curs is None: + raise psycopg2.ProgrammingError("no connection or cursor provided") + + if hasattr(conn_or_curs, 'execute'): + conn = conn_or_curs.connection + curs = conn.cursor(cursor_factory=_cursor) + else: + conn = conn_or_curs + curs = conn.cursor(cursor_factory=_cursor) + + return conn, curs + + +class HstoreAdapter: + """Adapt a Python dict to the hstore syntax.""" + def __init__(self, wrapped): + self.wrapped = wrapped + + def prepare(self, conn): + self.conn = conn + + # use an old-style getquoted implementation if required + if conn.info.server_version < 90000: + self.getquoted = self._getquoted_8 + + def _getquoted_8(self): + """Use the operators available in PG pre-9.0.""" + if not self.wrapped: + return b"''::hstore" + + adapt = _ext.adapt + rv = [] + for k, v in self.wrapped.items(): + k = adapt(k) + k.prepare(self.conn) + k = k.getquoted() + + if v is not None: + v = adapt(v) + v.prepare(self.conn) + v = v.getquoted() + else: + v = b'NULL' + + # XXX this b'ing is painfully inefficient! + rv.append(b"(" + k + b" => " + v + b")") + + return b"(" + b'||'.join(rv) + b")" + + def _getquoted_9(self): + """Use the hstore(text[], text[]) function.""" + if not self.wrapped: + return b"''::hstore" + + k = _ext.adapt(list(self.wrapped.keys())) + k.prepare(self.conn) + v = _ext.adapt(list(self.wrapped.values())) + v.prepare(self.conn) + return b"hstore(" + k.getquoted() + b", " + v.getquoted() + b")" + + getquoted = _getquoted_9 + + _re_hstore = _re.compile(r""" + # hstore key: + # a string of normal or escaped chars + "((?: [^"\\] | \\. )*)" + \s*=>\s* # hstore value + (?: + NULL # the value can be null - not catched + # or a quoted string like the key + | "((?: [^"\\] | \\. )*)" + ) + (?:\s*,\s*|$) # pairs separated by comma or end of string. + """, _re.VERBOSE) + + @classmethod + def parse(self, s, cur, _bsdec=_re.compile(r"\\(.)")): + """Parse an hstore representation in a Python string. + + The hstore is represented as something like:: + + "a"=>"1", "b"=>"2" + + with backslash-escaped strings. + """ + if s is None: + return None + + rv = {} + start = 0 + for m in self._re_hstore.finditer(s): + if m is None or m.start() != start: + raise psycopg2.InterfaceError( + f"error parsing hstore pair at char {start}") + k = _bsdec.sub(r'\1', m.group(1)) + v = m.group(2) + if v is not None: + v = _bsdec.sub(r'\1', v) + + rv[k] = v + start = m.end() + + if start < len(s): + raise psycopg2.InterfaceError( + f"error parsing hstore: unparsed data after char {start}") + + return rv + + @classmethod + def parse_unicode(self, s, cur): + """Parse an hstore returning unicode keys and values.""" + if s is None: + return None + + s = s.decode(_ext.encodings[cur.connection.encoding]) + return self.parse(s, cur) + + @classmethod + def get_oids(self, conn_or_curs): + """Return the lists of OID of the hstore and hstore[] types. + """ + conn, curs = _solve_conn_curs(conn_or_curs) + + # Store the transaction status of the connection to revert it after use + conn_status = conn.status + + # column typarray not available before PG 8.3 + typarray = conn.info.server_version >= 80300 and "typarray" or "NULL" + + rv0, rv1 = [], [] + + # get the oid for the hstore + curs.execute(f"""SELECT t.oid, {typarray} +FROM pg_type t JOIN pg_namespace ns + ON typnamespace = ns.oid +WHERE typname = 'hstore'; +""") + for oids in curs: + rv0.append(oids[0]) + rv1.append(oids[1]) + + # revert the status of the connection as before the command + if (conn_status != _ext.STATUS_IN_TRANSACTION + and not conn.autocommit): + conn.rollback() + + return tuple(rv0), tuple(rv1) + + +def register_hstore(conn_or_curs, globally=False, unicode=False, + oid=None, array_oid=None): + r"""Register adapter and typecaster for `!dict`\-\ |hstore| conversions. + + :param conn_or_curs: a connection or cursor: the typecaster will be + registered only on this object unless *globally* is set to `!True` + :param globally: register the adapter globally, not only on *conn_or_curs* + :param unicode: if `!True`, keys and values returned from the database + will be `!unicode` instead of `!str`. The option is not available on + Python 3 + :param oid: the OID of the |hstore| type if known. If not, it will be + queried on *conn_or_curs*. + :param array_oid: the OID of the |hstore| array type if known. If not, it + will be queried on *conn_or_curs*. + + The connection or cursor passed to the function will be used to query the + database and look for the OID of the |hstore| type (which may be different + across databases). If querying is not desirable (e.g. with + :ref:`asynchronous connections `) you may specify it in the + *oid* parameter, which can be found using a query such as :sql:`SELECT + 'hstore'::regtype::oid`. Analogously you can obtain a value for *array_oid* + using a query such as :sql:`SELECT 'hstore[]'::regtype::oid`. + + Note that, when passing a dictionary from Python to the database, both + strings and unicode keys and values are supported. Dictionaries returned + from the database have keys/values according to the *unicode* parameter. + + The |hstore| contrib module must be already installed in the database + (executing the ``hstore.sql`` script in your ``contrib`` directory). + Raise `~psycopg2.ProgrammingError` if the type is not found. + """ + if oid is None: + oid = HstoreAdapter.get_oids(conn_or_curs) + if oid is None or not oid[0]: + raise psycopg2.ProgrammingError( + "hstore type not found in the database. " + "please install it from your 'contrib/hstore.sql' file") + else: + array_oid = oid[1] + oid = oid[0] + + if isinstance(oid, int): + oid = (oid,) + + if array_oid is not None: + if isinstance(array_oid, int): + array_oid = (array_oid,) + else: + array_oid = tuple([x for x in array_oid if x]) + + # create and register the typecaster + HSTORE = _ext.new_type(oid, "HSTORE", HstoreAdapter.parse) + _ext.register_type(HSTORE, not globally and conn_or_curs or None) + _ext.register_adapter(dict, HstoreAdapter) + + if array_oid: + HSTOREARRAY = _ext.new_array_type(array_oid, "HSTOREARRAY", HSTORE) + _ext.register_type(HSTOREARRAY, not globally and conn_or_curs or None) + + +class CompositeCaster: + """Helps conversion of a PostgreSQL composite type into a Python object. + + The class is usually created by the `register_composite()` function. + You may want to create and register manually instances of the class if + querying the database at registration time is not desirable (such as when + using an :ref:`asynchronous connections `). + + """ + def __init__(self, name, oid, attrs, array_oid=None, schema=None): + self.name = name + self.schema = schema + self.oid = oid + self.array_oid = array_oid + + self.attnames = [a[0] for a in attrs] + self.atttypes = [a[1] for a in attrs] + self._create_type(name, self.attnames) + self.typecaster = _ext.new_type((oid,), name, self.parse) + if array_oid: + self.array_typecaster = _ext.new_array_type( + (array_oid,), f"{name}ARRAY", self.typecaster) + else: + self.array_typecaster = None + + def parse(self, s, curs): + if s is None: + return None + + tokens = self.tokenize(s) + if len(tokens) != len(self.atttypes): + raise psycopg2.DataError( + "expecting %d components for the type %s, %d found instead" % + (len(self.atttypes), self.name, len(tokens))) + + values = [curs.cast(oid, token) + for oid, token in zip(self.atttypes, tokens)] + + return self.make(values) + + def make(self, values): + """Return a new Python object representing the data being casted. + + *values* is the list of attributes, already casted into their Python + representation. + + You can subclass this method to :ref:`customize the composite cast + `. + """ + + return self._ctor(values) + + _re_tokenize = _re.compile(r""" + \(? ([,)]) # an empty token, representing NULL +| \(? " ((?: [^"] | "")*) " [,)] # or a quoted string +| \(? ([^",)]+) [,)] # or an unquoted string + """, _re.VERBOSE) + + _re_undouble = _re.compile(r'(["\\])\1') + + @classmethod + def tokenize(self, s): + rv = [] + for m in self._re_tokenize.finditer(s): + if m is None: + raise psycopg2.InterfaceError(f"can't parse type: {s!r}") + if m.group(1) is not None: + rv.append(None) + elif m.group(2) is not None: + rv.append(self._re_undouble.sub(r"\1", m.group(2))) + else: + rv.append(m.group(3)) + + return rv + + def _create_type(self, name, attnames): + name = _re_clean.sub('_', name) + self.type = namedtuple(name, attnames) + self._ctor = self.type._make + + @classmethod + def _from_db(self, name, conn_or_curs): + """Return a `CompositeCaster` instance for the type *name*. + + Raise `ProgrammingError` if the type is not found. + """ + conn, curs = _solve_conn_curs(conn_or_curs) + + # Store the transaction status of the connection to revert it after use + conn_status = conn.status + + # Use the correct schema + if '.' in name: + schema, tname = name.split('.', 1) + else: + tname = name + schema = 'public' + + # column typarray not available before PG 8.3 + typarray = conn.info.server_version >= 80300 and "typarray" or "NULL" + + # get the type oid and attributes + curs.execute("""\ +SELECT t.oid, %s, attname, atttypid +FROM pg_type t +JOIN pg_namespace ns ON typnamespace = ns.oid +JOIN pg_attribute a ON attrelid = typrelid +WHERE typname = %%s AND nspname = %%s + AND attnum > 0 AND NOT attisdropped +ORDER BY attnum; +""" % typarray, (tname, schema)) + + recs = curs.fetchall() + + if not recs: + # The above algorithm doesn't work for customized seach_path + # (#1487) The implementation below works better, but, to guarantee + # backwards compatibility, use it only if the original one failed. + try: + savepoint = False + # Because we executed statements earlier, we are either INTRANS + # or we are IDLE only if the transaction is autocommit, in + # which case we don't need the savepoint anyway. + if conn.status == _ext.STATUS_IN_TRANSACTION: + curs.execute("SAVEPOINT register_type") + savepoint = True + + curs.execute("""\ +SELECT t.oid, %s, attname, atttypid, typname, nspname +FROM pg_type t +JOIN pg_namespace ns ON typnamespace = ns.oid +JOIN pg_attribute a ON attrelid = typrelid +WHERE t.oid = %%s::regtype + AND attnum > 0 AND NOT attisdropped +ORDER BY attnum; +""" % typarray, (name, )) + except psycopg2.ProgrammingError: + pass + else: + recs = curs.fetchall() + if recs: + tname = recs[0][4] + schema = recs[0][5] + finally: + if savepoint: + curs.execute("ROLLBACK TO SAVEPOINT register_type") + + # revert the status of the connection as before the command + if conn_status != _ext.STATUS_IN_TRANSACTION and not conn.autocommit: + conn.rollback() + + if not recs: + raise psycopg2.ProgrammingError( + f"PostgreSQL type '{name}' not found") + + type_oid = recs[0][0] + array_oid = recs[0][1] + type_attrs = [(r[2], r[3]) for r in recs] + + return self(tname, type_oid, type_attrs, + array_oid=array_oid, schema=schema) + + +def register_composite(name, conn_or_curs, globally=False, factory=None): + """Register a typecaster to convert a composite type into a tuple. + + :param name: the name of a PostgreSQL composite type, e.g. created using + the |CREATE TYPE|_ command + :param conn_or_curs: a connection or cursor used to find the type oid and + components; the typecaster is registered in a scope limited to this + object, unless *globally* is set to `!True` + :param globally: if `!False` (default) register the typecaster only on + *conn_or_curs*, otherwise register it globally + :param factory: if specified it should be a `CompositeCaster` subclass: use + it to :ref:`customize how to cast composite types ` + :return: the registered `CompositeCaster` or *factory* instance + responsible for the conversion + """ + if factory is None: + factory = CompositeCaster + + caster = factory._from_db(name, conn_or_curs) + _ext.register_type(caster.typecaster, not globally and conn_or_curs or None) + + if caster.array_typecaster is not None: + _ext.register_type( + caster.array_typecaster, not globally and conn_or_curs or None) + + return caster + + +def _paginate(seq, page_size): + """Consume an iterable and return it in chunks. + + Every chunk is at most `page_size`. Never return an empty chunk. + """ + page = [] + it = iter(seq) + while True: + try: + for i in range(page_size): + page.append(next(it)) + yield page + page = [] + except StopIteration: + if page: + yield page + return + + +def execute_batch(cur, sql, argslist, page_size=100): + r"""Execute groups of statements in fewer server roundtrips. + + Execute *sql* several times, against all parameters set (sequences or + mappings) found in *argslist*. + + The function is semantically similar to + + .. parsed-literal:: + + *cur*\.\ `~cursor.executemany`\ (\ *sql*\ , *argslist*\ ) + + but has a different implementation: Psycopg will join the statements into + fewer multi-statement commands, each one containing at most *page_size* + statements, resulting in a reduced number of server roundtrips. + + After the execution of the function the `cursor.rowcount` property will + **not** contain a total result. + + """ + for page in _paginate(argslist, page_size=page_size): + sqls = [cur.mogrify(sql, args) for args in page] + cur.execute(b";".join(sqls)) + + +def execute_values(cur, sql, argslist, template=None, page_size=100, fetch=False): + '''Execute a statement using :sql:`VALUES` with a sequence of parameters. + + :param cur: the cursor to use to execute the query. + + :param sql: the query to execute. It must contain a single ``%s`` + placeholder, which will be replaced by a `VALUES list`__. + Example: ``"INSERT INTO mytable (id, f1, f2) VALUES %s"``. + + :param argslist: sequence of sequences or dictionaries with the arguments + to send to the query. The type and content must be consistent with + *template*. + + :param template: the snippet to merge to every item in *argslist* to + compose the query. + + - If the *argslist* items are sequences it should contain positional + placeholders (e.g. ``"(%s, %s, %s)"``, or ``"(%s, %s, 42)``" if there + are constants value...). + + - If the *argslist* items are mappings it should contain named + placeholders (e.g. ``"(%(id)s, %(f1)s, 42)"``). + + If not specified, assume the arguments are sequence and use a simple + positional template (i.e. ``(%s, %s, ...)``), with the number of + placeholders sniffed by the first element in *argslist*. + + :param page_size: maximum number of *argslist* items to include in every + statement. If there are more items the function will execute more than + one statement. + + :param fetch: if `!True` return the query results into a list (like in a + `~cursor.fetchall()`). Useful for queries with :sql:`RETURNING` + clause. + + .. __: https://www.postgresql.org/docs/current/static/queries-values.html + + After the execution of the function the `cursor.rowcount` property will + **not** contain a total result. + + While :sql:`INSERT` is an obvious candidate for this function it is + possible to use it with other statements, for example:: + + >>> cur.execute( + ... "create table test (id int primary key, v1 int, v2 int)") + + >>> execute_values(cur, + ... "INSERT INTO test (id, v1, v2) VALUES %s", + ... [(1, 2, 3), (4, 5, 6), (7, 8, 9)]) + + >>> execute_values(cur, + ... """UPDATE test SET v1 = data.v1 FROM (VALUES %s) AS data (id, v1) + ... WHERE test.id = data.id""", + ... [(1, 20), (4, 50)]) + + >>> cur.execute("select * from test order by id") + >>> cur.fetchall() + [(1, 20, 3), (4, 50, 6), (7, 8, 9)]) + + ''' + from psycopg2.sql import Composable + if isinstance(sql, Composable): + sql = sql.as_string(cur) + + # we can't just use sql % vals because vals is bytes: if sql is bytes + # there will be some decoding error because of stupid codec used, and Py3 + # doesn't implement % on bytes. + if not isinstance(sql, bytes): + sql = sql.encode(_ext.encodings[cur.connection.encoding]) + pre, post = _split_sql(sql) + + result = [] if fetch else None + for page in _paginate(argslist, page_size=page_size): + if template is None: + template = b'(' + b','.join([b'%s'] * len(page[0])) + b')' + parts = pre[:] + for args in page: + parts.append(cur.mogrify(template, args)) + parts.append(b',') + parts[-1:] = post + cur.execute(b''.join(parts)) + if fetch: + result.extend(cur.fetchall()) + + return result + + +def _split_sql(sql): + """Split *sql* on a single ``%s`` placeholder. + + Split on the %s, perform %% replacement and return pre, post lists of + snippets. + """ + curr = pre = [] + post = [] + tokens = _re.split(br'(%.)', sql) + for token in tokens: + if len(token) != 2 or token[:1] != b'%': + curr.append(token) + continue + + if token[1:] == b's': + if curr is pre: + curr = post + else: + raise ValueError( + "the query contains more than one '%s' placeholder") + elif token[1:] == b'%': + curr.append(b'%') + else: + raise ValueError("unsupported format character: '%s'" + % token[1:].decode('ascii', 'replace')) + + if curr is pre: + raise ValueError("the query doesn't contain any '%s' placeholder") + + return pre, post + + +# ascii except alnum and underscore +_re_clean = _re.compile( + '[' + _re.escape(' !"#$%&\'()*+,-./:;<=>?@[\\]^`{|}~') + ']') diff --git a/env/Lib/site-packages/psycopg2/pool.py b/env/Lib/site-packages/psycopg2/pool.py new file mode 100644 index 0000000..9d67d68 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/pool.py @@ -0,0 +1,187 @@ +"""Connection pooling for psycopg2 + +This module implements thread-safe (and not) connection pools. +""" +# psycopg/pool.py - pooling code for psycopg +# +# Copyright (C) 2003-2019 Federico Di Gregorio +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import psycopg2 +from psycopg2 import extensions as _ext + + +class PoolError(psycopg2.Error): + pass + + +class AbstractConnectionPool: + """Generic key-based pooling code.""" + + def __init__(self, minconn, maxconn, *args, **kwargs): + """Initialize the connection pool. + + New 'minconn' connections are created immediately calling 'connfunc' + with given parameters. The connection pool will support a maximum of + about 'maxconn' connections. + """ + self.minconn = int(minconn) + self.maxconn = int(maxconn) + self.closed = False + + self._args = args + self._kwargs = kwargs + + self._pool = [] + self._used = {} + self._rused = {} # id(conn) -> key map + self._keys = 0 + + for i in range(self.minconn): + self._connect() + + def _connect(self, key=None): + """Create a new connection and assign it to 'key' if not None.""" + conn = psycopg2.connect(*self._args, **self._kwargs) + if key is not None: + self._used[key] = conn + self._rused[id(conn)] = key + else: + self._pool.append(conn) + return conn + + def _getkey(self): + """Return a new unique key.""" + self._keys += 1 + return self._keys + + def _getconn(self, key=None): + """Get a free connection and assign it to 'key' if not None.""" + if self.closed: + raise PoolError("connection pool is closed") + if key is None: + key = self._getkey() + + if key in self._used: + return self._used[key] + + if self._pool: + self._used[key] = conn = self._pool.pop() + self._rused[id(conn)] = key + return conn + else: + if len(self._used) == self.maxconn: + raise PoolError("connection pool exhausted") + return self._connect(key) + + def _putconn(self, conn, key=None, close=False): + """Put away a connection.""" + if self.closed: + raise PoolError("connection pool is closed") + + if key is None: + key = self._rused.get(id(conn)) + if key is None: + raise PoolError("trying to put unkeyed connection") + + if len(self._pool) < self.minconn and not close: + # Return the connection into a consistent state before putting + # it back into the pool + if not conn.closed: + status = conn.info.transaction_status + if status == _ext.TRANSACTION_STATUS_UNKNOWN: + # server connection lost + conn.close() + elif status != _ext.TRANSACTION_STATUS_IDLE: + # connection in error or in transaction + conn.rollback() + self._pool.append(conn) + else: + # regular idle connection + self._pool.append(conn) + # If the connection is closed, we just discard it. + else: + conn.close() + + # here we check for the presence of key because it can happen that a + # thread tries to put back a connection after a call to close + if not self.closed or key in self._used: + del self._used[key] + del self._rused[id(conn)] + + def _closeall(self): + """Close all connections. + + Note that this can lead to some code fail badly when trying to use + an already closed connection. If you call .closeall() make sure + your code can deal with it. + """ + if self.closed: + raise PoolError("connection pool is closed") + for conn in self._pool + list(self._used.values()): + try: + conn.close() + except Exception: + pass + self.closed = True + + +class SimpleConnectionPool(AbstractConnectionPool): + """A connection pool that can't be shared across different threads.""" + + getconn = AbstractConnectionPool._getconn + putconn = AbstractConnectionPool._putconn + closeall = AbstractConnectionPool._closeall + + +class ThreadedConnectionPool(AbstractConnectionPool): + """A connection pool that works with the threading module.""" + + def __init__(self, minconn, maxconn, *args, **kwargs): + """Initialize the threading lock.""" + import threading + AbstractConnectionPool.__init__( + self, minconn, maxconn, *args, **kwargs) + self._lock = threading.Lock() + + def getconn(self, key=None): + """Get a free connection and assign it to 'key' if not None.""" + self._lock.acquire() + try: + return self._getconn(key) + finally: + self._lock.release() + + def putconn(self, conn=None, key=None, close=False): + """Put away an unused connection.""" + self._lock.acquire() + try: + self._putconn(conn, key, close) + finally: + self._lock.release() + + def closeall(self): + """Close all connections (even the one currently in use.)""" + self._lock.acquire() + try: + self._closeall() + finally: + self._lock.release() diff --git a/env/Lib/site-packages/psycopg2/sql.py b/env/Lib/site-packages/psycopg2/sql.py new file mode 100644 index 0000000..69b352b --- /dev/null +++ b/env/Lib/site-packages/psycopg2/sql.py @@ -0,0 +1,455 @@ +"""SQL composition utility module +""" + +# psycopg/sql.py - SQL composition utility module +# +# Copyright (C) 2016-2019 Daniele Varrazzo +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import string + +from psycopg2 import extensions as ext + + +_formatter = string.Formatter() + + +class Composable: + """ + Abstract base class for objects that can be used to compose an SQL string. + + `!Composable` objects can be passed directly to `~cursor.execute()`, + `~cursor.executemany()`, `~cursor.copy_expert()` in place of the query + string. + + `!Composable` objects can be joined using the ``+`` operator: the result + will be a `Composed` instance containing the objects joined. The operator + ``*`` is also supported with an integer argument: the result is a + `!Composed` instance containing the left argument repeated as many times as + requested. + """ + def __init__(self, wrapped): + self._wrapped = wrapped + + def __repr__(self): + return f"{self.__class__.__name__}({self._wrapped!r})" + + def as_string(self, context): + """ + Return the string value of the object. + + :param context: the context to evaluate the string into. + :type context: `connection` or `cursor` + + The method is automatically invoked by `~cursor.execute()`, + `~cursor.executemany()`, `~cursor.copy_expert()` if a `!Composable` is + passed instead of the query string. + """ + raise NotImplementedError + + def __add__(self, other): + if isinstance(other, Composed): + return Composed([self]) + other + if isinstance(other, Composable): + return Composed([self]) + Composed([other]) + else: + return NotImplemented + + def __mul__(self, n): + return Composed([self] * n) + + def __eq__(self, other): + return type(self) is type(other) and self._wrapped == other._wrapped + + def __ne__(self, other): + return not self.__eq__(other) + + +class Composed(Composable): + """ + A `Composable` object made of a sequence of `!Composable`. + + The object is usually created using `!Composable` operators and methods. + However it is possible to create a `!Composed` directly specifying a + sequence of `!Composable` as arguments. + + Example:: + + >>> comp = sql.Composed( + ... [sql.SQL("insert into "), sql.Identifier("table")]) + >>> print(comp.as_string(conn)) + insert into "table" + + `!Composed` objects are iterable (so they can be used in `SQL.join` for + instance). + """ + def __init__(self, seq): + wrapped = [] + for i in seq: + if not isinstance(i, Composable): + raise TypeError( + f"Composed elements must be Composable, got {i!r} instead") + wrapped.append(i) + + super().__init__(wrapped) + + @property + def seq(self): + """The list of the content of the `!Composed`.""" + return list(self._wrapped) + + def as_string(self, context): + rv = [] + for i in self._wrapped: + rv.append(i.as_string(context)) + return ''.join(rv) + + def __iter__(self): + return iter(self._wrapped) + + def __add__(self, other): + if isinstance(other, Composed): + return Composed(self._wrapped + other._wrapped) + if isinstance(other, Composable): + return Composed(self._wrapped + [other]) + else: + return NotImplemented + + def join(self, joiner): + """ + Return a new `!Composed` interposing the *joiner* with the `!Composed` items. + + The *joiner* must be a `SQL` or a string which will be interpreted as + an `SQL`. + + Example:: + + >>> fields = sql.Identifier('foo') + sql.Identifier('bar') # a Composed + >>> print(fields.join(', ').as_string(conn)) + "foo", "bar" + + """ + if isinstance(joiner, str): + joiner = SQL(joiner) + elif not isinstance(joiner, SQL): + raise TypeError( + "Composed.join() argument must be a string or an SQL") + + return joiner.join(self) + + +class SQL(Composable): + """ + A `Composable` representing a snippet of SQL statement. + + `!SQL` exposes `join()` and `format()` methods useful to create a template + where to merge variable parts of a query (for instance field or table + names). + + The *string* doesn't undergo any form of escaping, so it is not suitable to + represent variable identifiers or values: you should only use it to pass + constant strings representing templates or snippets of SQL statements; use + other objects such as `Identifier` or `Literal` to represent variable + parts. + + Example:: + + >>> query = sql.SQL("select {0} from {1}").format( + ... sql.SQL(', ').join([sql.Identifier('foo'), sql.Identifier('bar')]), + ... sql.Identifier('table')) + >>> print(query.as_string(conn)) + select "foo", "bar" from "table" + """ + def __init__(self, string): + if not isinstance(string, str): + raise TypeError("SQL values must be strings") + super().__init__(string) + + @property + def string(self): + """The string wrapped by the `!SQL` object.""" + return self._wrapped + + def as_string(self, context): + return self._wrapped + + def format(self, *args, **kwargs): + """ + Merge `Composable` objects into a template. + + :param `Composable` args: parameters to replace to numbered + (``{0}``, ``{1}``) or auto-numbered (``{}``) placeholders + :param `Composable` kwargs: parameters to replace to named (``{name}``) + placeholders + :return: the union of the `!SQL` string with placeholders replaced + :rtype: `Composed` + + The method is similar to the Python `str.format()` method: the string + template supports auto-numbered (``{}``), numbered (``{0}``, + ``{1}``...), and named placeholders (``{name}``), with positional + arguments replacing the numbered placeholders and keywords replacing + the named ones. However placeholder modifiers (``{0!r}``, ``{0:<10}``) + are not supported. Only `!Composable` objects can be passed to the + template. + + Example:: + + >>> print(sql.SQL("select * from {} where {} = %s") + ... .format(sql.Identifier('people'), sql.Identifier('id')) + ... .as_string(conn)) + select * from "people" where "id" = %s + + >>> print(sql.SQL("select * from {tbl} where {pkey} = %s") + ... .format(tbl=sql.Identifier('people'), pkey=sql.Identifier('id')) + ... .as_string(conn)) + select * from "people" where "id" = %s + + """ + rv = [] + autonum = 0 + for pre, name, spec, conv in _formatter.parse(self._wrapped): + if spec: + raise ValueError("no format specification supported by SQL") + if conv: + raise ValueError("no format conversion supported by SQL") + if pre: + rv.append(SQL(pre)) + + if name is None: + continue + + if name.isdigit(): + if autonum: + raise ValueError( + "cannot switch from automatic field numbering to manual") + rv.append(args[int(name)]) + autonum = None + + elif not name: + if autonum is None: + raise ValueError( + "cannot switch from manual field numbering to automatic") + rv.append(args[autonum]) + autonum += 1 + + else: + rv.append(kwargs[name]) + + return Composed(rv) + + def join(self, seq): + """ + Join a sequence of `Composable`. + + :param seq: the elements to join. + :type seq: iterable of `!Composable` + + Use the `!SQL` object's *string* to separate the elements in *seq*. + Note that `Composed` objects are iterable too, so they can be used as + argument for this method. + + Example:: + + >>> snip = sql.SQL(', ').join( + ... sql.Identifier(n) for n in ['foo', 'bar', 'baz']) + >>> print(snip.as_string(conn)) + "foo", "bar", "baz" + """ + rv = [] + it = iter(seq) + try: + rv.append(next(it)) + except StopIteration: + pass + else: + for i in it: + rv.append(self) + rv.append(i) + + return Composed(rv) + + +class Identifier(Composable): + """ + A `Composable` representing an SQL identifier or a dot-separated sequence. + + Identifiers usually represent names of database objects, such as tables or + fields. PostgreSQL identifiers follow `different rules`__ than SQL string + literals for escaping (e.g. they use double quotes instead of single). + + .. __: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html# \ + SQL-SYNTAX-IDENTIFIERS + + Example:: + + >>> t1 = sql.Identifier("foo") + >>> t2 = sql.Identifier("ba'r") + >>> t3 = sql.Identifier('ba"z') + >>> print(sql.SQL(', ').join([t1, t2, t3]).as_string(conn)) + "foo", "ba'r", "ba""z" + + Multiple strings can be passed to the object to represent a qualified name, + i.e. a dot-separated sequence of identifiers. + + Example:: + + >>> query = sql.SQL("select {} from {}").format( + ... sql.Identifier("table", "field"), + ... sql.Identifier("schema", "table")) + >>> print(query.as_string(conn)) + select "table"."field" from "schema"."table" + + """ + def __init__(self, *strings): + if not strings: + raise TypeError("Identifier cannot be empty") + + for s in strings: + if not isinstance(s, str): + raise TypeError("SQL identifier parts must be strings") + + super().__init__(strings) + + @property + def strings(self): + """A tuple with the strings wrapped by the `Identifier`.""" + return self._wrapped + + @property + def string(self): + """The string wrapped by the `Identifier`. + """ + if len(self._wrapped) == 1: + return self._wrapped[0] + else: + raise AttributeError( + "the Identifier wraps more than one than one string") + + def __repr__(self): + return f"{self.__class__.__name__}({', '.join(map(repr, self._wrapped))})" + + def as_string(self, context): + return '.'.join(ext.quote_ident(s, context) for s in self._wrapped) + + +class Literal(Composable): + """ + A `Composable` representing an SQL value to include in a query. + + Usually you will want to include placeholders in the query and pass values + as `~cursor.execute()` arguments. If however you really really need to + include a literal value in the query you can use this object. + + The string returned by `!as_string()` follows the normal :ref:`adaptation + rules ` for Python objects. + + Example:: + + >>> s1 = sql.Literal("foo") + >>> s2 = sql.Literal("ba'r") + >>> s3 = sql.Literal(42) + >>> print(sql.SQL(', ').join([s1, s2, s3]).as_string(conn)) + 'foo', 'ba''r', 42 + + """ + @property + def wrapped(self): + """The object wrapped by the `!Literal`.""" + return self._wrapped + + def as_string(self, context): + # is it a connection or cursor? + if isinstance(context, ext.connection): + conn = context + elif isinstance(context, ext.cursor): + conn = context.connection + else: + raise TypeError("context must be a connection or a cursor") + + a = ext.adapt(self._wrapped) + if hasattr(a, 'prepare'): + a.prepare(conn) + + rv = a.getquoted() + if isinstance(rv, bytes): + rv = rv.decode(ext.encodings[conn.encoding]) + + return rv + + +class Placeholder(Composable): + """A `Composable` representing a placeholder for query parameters. + + If the name is specified, generate a named placeholder (e.g. ``%(name)s``), + otherwise generate a positional placeholder (e.g. ``%s``). + + The object is useful to generate SQL queries with a variable number of + arguments. + + Examples:: + + >>> names = ['foo', 'bar', 'baz'] + + >>> q1 = sql.SQL("insert into table ({}) values ({})").format( + ... sql.SQL(', ').join(map(sql.Identifier, names)), + ... sql.SQL(', ').join(sql.Placeholder() * len(names))) + >>> print(q1.as_string(conn)) + insert into table ("foo", "bar", "baz") values (%s, %s, %s) + + >>> q2 = sql.SQL("insert into table ({}) values ({})").format( + ... sql.SQL(', ').join(map(sql.Identifier, names)), + ... sql.SQL(', ').join(map(sql.Placeholder, names))) + >>> print(q2.as_string(conn)) + insert into table ("foo", "bar", "baz") values (%(foo)s, %(bar)s, %(baz)s) + + """ + + def __init__(self, name=None): + if isinstance(name, str): + if ')' in name: + raise ValueError(f"invalid name: {name!r}") + + elif name is not None: + raise TypeError(f"expected string or None as name, got {name!r}") + + super().__init__(name) + + @property + def name(self): + """The name of the `!Placeholder`.""" + return self._wrapped + + def __repr__(self): + if self._wrapped is None: + return f"{self.__class__.__name__}()" + else: + return f"{self.__class__.__name__}({self._wrapped!r})" + + def as_string(self, context): + if self._wrapped is not None: + return f"%({self._wrapped})s" + else: + return "%s" + + +# Literals +NULL = SQL("NULL") +DEFAULT = SQL("DEFAULT") diff --git a/env/Lib/site-packages/psycopg2/tz.py b/env/Lib/site-packages/psycopg2/tz.py new file mode 100644 index 0000000..d88ca37 --- /dev/null +++ b/env/Lib/site-packages/psycopg2/tz.py @@ -0,0 +1,158 @@ +"""tzinfo implementations for psycopg2 + +This module holds two different tzinfo implementations that can be used as +the 'tzinfo' argument to datetime constructors, directly passed to psycopg +functions or used to set the .tzinfo_factory attribute in cursors. +""" +# psycopg/tz.py - tzinfo implementation +# +# Copyright (C) 2003-2019 Federico Di Gregorio +# Copyright (C) 2020-2021 The Psycopg Team +# +# psycopg2 is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# In addition, as a special exception, the copyright holders give +# permission to link this program with the OpenSSL library (or with +# modified versions of OpenSSL that use the same license as OpenSSL), +# and distribute linked combinations including the two. +# +# You must obey the GNU Lesser General Public License in all respects for +# all of the code used other than OpenSSL. +# +# psycopg2 is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +# License for more details. + +import datetime +import time + +ZERO = datetime.timedelta(0) + + +class FixedOffsetTimezone(datetime.tzinfo): + """Fixed offset in minutes east from UTC. + + This is exactly the implementation__ found in Python 2.3.x documentation, + with a small change to the `!__init__()` method to allow for pickling + and a default name in the form ``sHH:MM`` (``s`` is the sign.). + + The implementation also caches instances. During creation, if a + FixedOffsetTimezone instance has previously been created with the same + offset and name that instance will be returned. This saves memory and + improves comparability. + + .. versionchanged:: 2.9 + + The constructor can take either a timedelta or a number of minutes of + offset. Previously only minutes were supported. + + .. __: https://docs.python.org/library/datetime.html + """ + _name = None + _offset = ZERO + + _cache = {} + + def __init__(self, offset=None, name=None): + if offset is not None: + if not isinstance(offset, datetime.timedelta): + offset = datetime.timedelta(minutes=offset) + self._offset = offset + if name is not None: + self._name = name + + def __new__(cls, offset=None, name=None): + """Return a suitable instance created earlier if it exists + """ + key = (offset, name) + try: + return cls._cache[key] + except KeyError: + tz = super().__new__(cls, offset, name) + cls._cache[key] = tz + return tz + + def __repr__(self): + return "psycopg2.tz.FixedOffsetTimezone(offset=%r, name=%r)" \ + % (self._offset, self._name) + + def __eq__(self, other): + if isinstance(other, FixedOffsetTimezone): + return self._offset == other._offset + else: + return NotImplemented + + def __ne__(self, other): + if isinstance(other, FixedOffsetTimezone): + return self._offset != other._offset + else: + return NotImplemented + + def __getinitargs__(self): + return self._offset, self._name + + def utcoffset(self, dt): + return self._offset + + def tzname(self, dt): + if self._name is not None: + return self._name + + minutes, seconds = divmod(self._offset.total_seconds(), 60) + hours, minutes = divmod(minutes, 60) + rv = "%+03d" % hours + if minutes or seconds: + rv += ":%02d" % minutes + if seconds: + rv += ":%02d" % seconds + + return rv + + def dst(self, dt): + return ZERO + + +STDOFFSET = datetime.timedelta(seconds=-time.timezone) +if time.daylight: + DSTOFFSET = datetime.timedelta(seconds=-time.altzone) +else: + DSTOFFSET = STDOFFSET +DSTDIFF = DSTOFFSET - STDOFFSET + + +class LocalTimezone(datetime.tzinfo): + """Platform idea of local timezone. + + This is the exact implementation from the Python 2.3 documentation. + """ + def utcoffset(self, dt): + if self._isdst(dt): + return DSTOFFSET + else: + return STDOFFSET + + def dst(self, dt): + if self._isdst(dt): + return DSTDIFF + else: + return ZERO + + def tzname(self, dt): + return time.tzname[self._isdst(dt)] + + def _isdst(self, dt): + tt = (dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, + dt.weekday(), 0, -1) + stamp = time.mktime(tt) + tt = time.localtime(stamp) + return tt.tm_isdst > 0 + + +LOCAL = LocalTimezone() + +# TODO: pre-generate some interesting time zones? From a9e21f3a86399c98b6888bfe62f395b94010e1de Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Mon, 23 Oct 2023 01:31:38 +0200 Subject: [PATCH 02/54] =?UTF-8?q?dodanie=20pierwsze=20cz=C4=99=C5=9Bci=20u?= =?UTF-8?q?prawnie=C5=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dodanie pierwsze części uprawnień --- __pycache__/app.cpython-311.pyc | Bin 16461 -> 16841 bytes app.py | 49 ++++++++++++++++++++++++-------- dodatkowe.txt | 4 ++- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index 81f7e9e50a400787e4f0b25bd18e4f0b4d43c348..8a0404ae3cb660782955fdd14ba8b0acf6e859bc 100644 GIT binary patch delta 3546 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 diff --git a/app.py b/app.py index 328d26b..a91a782 100644 --- a/app.py +++ b/app.py @@ -1,7 +1,7 @@ from flask import Flask, render_template, request, g, redirect, url_for, flash, session import psycopg2 from datetime import date - +from psycopg2.extras import DictCursor import os import hashlib import binascii @@ -129,6 +129,7 @@ def login_user(self): @app.route('/users') def users(): + db = get_db() sql_command = 'select id, name, email, is_admin, is_active from users;' cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) @@ -137,27 +138,51 @@ def users(): return render_template('users.html', active_menu='users', users=users) @app.route('/user_status_change//') + def user_status_change(action, user_name): if not 'user' in session: return redirect(url_for('login')) login = session['user'] - + flash(f'user name {user_name} login {login}') db = get_db() if action == 'active': - db.execute("""update users set is_active = (is_active + 1) % 2 - where name = ? and name <> ?""", - [user_name, login]) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + #tatus_sql='select is_active from users where name='aaa';' + cur.execute("update users set is_active = ((is_active::int + 1) %% 2)::boolean where name = %s and name <> %s ", (user_name, login)) db.commit() elif action == 'admin': - db.execute("""update users set is_admin = (is_admin + 1) % 2 - where name = ? and name <> ?""", - [user_name, login]) + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute("update users set is_admin = ((is_admin::int + 1) %% 2)::boolean where name = %s and name <> %s", (user_name, login)) db.commit() return redirect(url_for('users')) + +""" +@app.route('/user_status_change//') + +def user_status_change(action, user_name): + + if not 'user' in session: + return redirect(url_for('login')) + login = session['user'] + flash(f'user name {user_name} login {login}') + db = get_db() + + if action == 'active': + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + #tatus_sql='select is_active from users where name='aaa';' + cur.execute("update users set is_active = ((is_active::int + 1) % 2)::boolean where name = %s and name <> %s", (user_name, login)) + db.commit() + elif action == 'admin': + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(update users set is_admin = ((is_admin::int + 1) % 2)::boolean where name = 'aaa' and name <> 'bbb) + db.commit() + + return redirect(url_for('users')) +""" @app.route('/edit_user/', methods=['GET', 'POST']) def edit_user(user_name): @@ -223,12 +248,12 @@ def new_user(): user['email'] = '' if not 'email' in request.form else request.form['email'] user['user_pass'] = '' if not 'user_pass' in request.form else request.form['user_pass'] cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cursor = cur.execute('select count(*) as cnt from users where name = %s',[user['user_name']]) - record = cursor.fetchone() + cur.execute('select count(*) as cnt from users where name = %s',[user['user_name']]) + record = cur.fetchone() is_user_name_unique = (record['cnt'] == 0) - cursor = cur.execute('select count(*) as cnt from users where email = %s', [user['email']]) - record = cursor.fetchone() + cur.execute('select count(*) as cnt from users where email = %s',[user['email']]) + record = cur.fetchone() is_user_email_unique = (record['cnt'] == 0) if user['user_name'] == '': diff --git a/dodatkowe.txt b/dodatkowe.txt index 946d7cd..24e4515 100644 --- a/dodatkowe.txt +++ b/dodatkowe.txt @@ -32,4 +32,6 @@ ala2 $env:FLASK_DEBUG = "1" -flask run \ No newline at end of file +flask run + +wartoścowa dokumentacja https://www.psycopg.org/docs/usage.html \ No newline at end of file From 9ff0335f2f36864368b24e1f763466cc8690db5e Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Mon, 23 Oct 2023 01:39:14 +0200 Subject: [PATCH 03/54] dodanie requirements.txt dodanie requirements.txt --- .../__pycache__/freeze.cpython-311.pyc | Bin 4669 -> 4669 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 11606 -> 11606 bytes .../_windows_renderer.cpython-311.pyc | Bin 4028 -> 4028 bytes requirements.txt | Bin 0 -> 302 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 requirements.txt diff --git a/env/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc index 286bd31edb4e069316cb9b6d738c78f71edba13a..fadca9369c4d9a675f45d0b35fb4c33262cb1cee 100644 GIT binary patch delta 46 zcmdn1vR8$BIWI340}vRynr`I2$0!mLpP5&ZT9lWV6O){uo12)IQXI4SFQbD106hv1 A7ytkO delta 46 zcmdn1vR8$BIWI340}wcL@NVS3$0(v7pP5&ZT9lWVqo16go12)IQmnuEFQbD106HlS Axc~qF diff --git a/env/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc b/env/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc index 5bc8fbc06659958f5445eb4c6b15a5102f80635f..aeda3e5ecce89d1564073640ff15f2e093ca3d7c 100644 GIT binary patch delta 48 zcmcZ>buEf}IWI340}vRynr`HN!YmdOpP5&ZT9lWV6O&(%T9jClnV(l2vze78P!j-n CB@gES delta 48 zcmcZ>buEf}IWI340}wcL@NVRO!YrmApP5&ZT9lWVqn}@pT9jClnV(mzznPUKP!j-j C;17rZ diff --git a/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc b/env/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc index c4c0dc079a6703c6ed8166b0b27c4f2c8c5148e4..c895e1acbeba485acdb3dcf229663980dff6a049 100644 GIT binary patch delta 40 ucmdlZzek>XIWI340}vRynr`G)XIWI340}wcL@NVQ*giKX^^RmG?Q;vT)fxJKv$y NlYfinn_+F;dp}e&E1LiS literal 0 HcmV?d00001 From 3cf6e10f6de479f9b8cecf9db4904e5fb8ea1963 Mon Sep 17 00:00:00 2001 From: addisek <147247647+addisek@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:39:28 +0200 Subject: [PATCH 04/54] Create testowyplik --- testowyplik | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 testowyplik diff --git a/testowyplik b/testowyplik new file mode 100644 index 0000000..744bd6c --- /dev/null +++ b/testowyplik @@ -0,0 +1,12 @@ + + + + + + Prosta strona w HTML + + +

Witaj na mojej stronie!

+

To jest przykładowy akapit tekstu.

+ + From 7d4763fb716d213c92b68ca73b473d5d43088ca1 Mon Sep 17 00:00:00 2001 From: addisek <147247647+addisek@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:49:30 +0200 Subject: [PATCH 05/54] Rename testowyplik to testowyplik.html --- testowyplik => testowyplik.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename testowyplik => testowyplik.html (100%) diff --git a/testowyplik b/testowyplik.html similarity index 100% rename from testowyplik rename to testowyplik.html From b1eb3ab630b7b87d63c021b157b2ae5401a6160e Mon Sep 17 00:00:00 2001 From: addisek <147247647+addisek@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:52:22 +0200 Subject: [PATCH 06/54] Delete testowyplik.html --- testowyplik.html | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 testowyplik.html diff --git a/testowyplik.html b/testowyplik.html deleted file mode 100644 index 744bd6c..0000000 --- a/testowyplik.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Prosta strona w HTML - - -

Witaj na mojej stronie!

-

To jest przykładowy akapit tekstu.

- - From 3d702318bf5b113fec0471c61b5dabff045655d0 Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Fri, 27 Oct 2023 03:13:18 +0200 Subject: [PATCH 07/54] uprawnienia do aplikacji uprawnienia do aplikacji --- __pycache__/app.cpython-311.pyc | Bin 16841 -> 19529 bytes app.py | 122 +++++++++++++++++++++----------- 2 files changed, 80 insertions(+), 42 deletions(-) diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index 8a0404ae3cb660782955fdd14ba8b0acf6e859bc..1f16a94479e2b764265c470373c7b121693ff032 100644 GIT binary patch delta 5937 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 delta 4203 zcmb7HeQaA-6~FiS*?!MoFLC17PMyR_+9b|*(l$+(k2Ya#+N4d=rE9jbEvxq2HffTI z=hqI3y=3bKMRcOS&u*fW2x>OE- zZ1gO@D%`Lw{DU)gnd#IuQ)aLwT~vNbpqf^!n=?)LqYA3&rg#k{Hw-CBCYWk2&|zBZ zf0k>4YMC$ISgJ0V{cAm0jH%X*yM2rjYn~3S%UOji%A&l`(3lVvmhu(@A5{9`j>}ce zbVqKSD)r)vuH?1Iu;eKdq71$n3KVgsm*ix+2U?XT7?bRvDkTtfZ!%A?kYg0CD*hV2 zVn6nrK7BSkH5Z;gvm&2~gte*pV{_pZrfo$Xniqbn>^@}I$fy;|Tv$JOTGd2)5s#nN z=Co$2+GbCmn4X`a!5ST_MvK(i39JMXLP*s5scvZPg=kT0!##XoWdF1FDSm>uORJ1VFWJX#VI zaZNJJmjrnYe5Itujc5KA9}Nkb7dvY{1aOx2Ry>K7NGZZ1d%x6oLA)rx?+fCO^8$XB zKVK>cd<0%78|P0i|DxonzG}wU7OD*r>?Noss3M@_Hh`8JA;TB5pOhe& zt5d8HB>30n9+}zAz7zqBY^j1ar!4&mhoWP17?=E3rt%oa%iC5xWHvki5|yQ|DMc2} z&>t-LR@-PQxbG%ajGAtmuc0H~$T~A#0n6yQ9WYzvgBRRcRvjgm_Ff!Y+_Ngmaa;SP z&mrLVx+ndc5Id4$M_lY!l@%Ck9l#sP&hZ1nea7U2!bb*TlY9`~ZXF@v^L)P{95#f* z0ttt~-!=+?ZdrO6_hjuxa}F)lJ3YMcn9}S{!Of3UePSK==k9umNo6s--zv)-Op~s_ zY}$2`vAgwLuwkmj@Dl5KFHt2uUyE~1ixJ0U42By@Rf$y3raQ;X zs%_(LAEU&UvoB_ensJea+O*bF#mGk-D{B)a#RL&_-L zXufTr#^8o-oZy@*tWN7jJT!>stqkLMVS3xwj}|{bIXFaf5Hu1r5f~9P=N1%xwcP|n zN7?{E8-YQ{MBE`+>xYHyyEG$!8yl!|A247ndOm$tfE8_`e zJgJPwrSau|cQy0cXR*U4r7RQIt;FaCi;F}*J18H>lo?C5mL;~Erot18A+yunr+g+5 z6)8p9;OK=VnU3CHKtpTFF$XkL9#m|^gB&U0DRn*4B^kV9(`@kf`ii2nI4E!H+dzAy zr~k{?_&a!`z3W-+`{f>D>>lb4R7_gQ;UiHgyq zpc9BNQAV=SD0%Y=o6G=V@9Cb0)PYCd@xcS~ipxqjVUhdCSd) zNR#SDX;0J=38*DYE?O`Ay0XZUo(cx)%Ha3AWK$_p6LJ?c4g@w6>qovH#mjx7*8$$qke(X`#`b*D+)}wPooq&4$E%m{ZWr)QSkcKw$g@=)l^FMGM2J zM^Bc&hA)4^CvqF}vPE{!Uc8n`zz@2-FtMl8p^PPzv7|BH z^q#$BB2hAtESZQqCg8)NC-`32wa?4TVRB#0WBfNT{t>7&Hzn@cXW_5=hC@SCH4HZP z={&s>9c#ol8kwZk6YPbj_WNw#z$!8@i~Mx?h5e)4Tg+Qh4B@_s2`x$9oD!&|4*opc zu+YFUJ$VrBQ`<*5!C{Wc`4{~!`7d-QcxjTCrUWY=;VDK)dOf)|ccyFHzCFRalDsP= zx_MoSA>21JVMn&5v5YT>sn%@w+Uwz4N3KsT`V+h_$@@}56>m&21e%~f+cLOjOWeLC z!RwN!Td>mv2-LGa+fu$}bkCCKx@Acr&Fx9vo)TL4VKlylyAK=IcjOwMfwBWz{|l3~ BIivsp diff --git a/app.py b/app.py index a91a782..08237ed 100644 --- a/app.py +++ b/app.py @@ -60,8 +60,11 @@ def init_app(): @app.route('/login', methods=['GET','POST']) def login(): + login = UserPass(session.get('user')) + login.get_user_info() + if request.method == 'GET': - return render_template('login.html', active_menu='login') + return render_template('login.html', active_menu='login', login=login) else: user_name = '' if 'user_name' not in request.form else request.form['user_name'] user_pass = '' if 'user_pass' not in request.form else request.form['user_pass'] @@ -89,6 +92,9 @@ class UserPass: def __init__(self, user='', password=''): self.user = user self.password = password + self.email = '' + self.is_valid = False + self.is_active = False def hash_password(self): # Hash a password for storing. @@ -125,67 +131,89 @@ def login_user(self): else: self.user = None self.password = None - return None + return None + + def get_user_info(self): + db = get_db() + sql_statement = 'select name, email, is_active, is_admin from users where name=%s' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_statement, [self.user]) + db_user = cur.fetchone() + + if db_user == None: + self.is_valid = False + self.is_admin = False + self.email = '' + elif db_user['is_active']!=1: + self.is_valid = False + self.is_admin = False + self.email = db_user['email'] + else: + self.is_valid = True + self.is_admin = db_user['is_admin'] + self.email = db_user['email'] @app.route('/users') def users(): + # Check if user is logged in and is an admin + #login = UserPass(session.get('user')) + #login.get_user_info() + #if not login.is_valid or not login.is_admin: + # flash(f'Użytkownik {login.user} nie jest adminem') + # return redirect(url_for('login')) + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) + db = get_db() sql_command = 'select id, name, email, is_admin, is_active from users;' cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(sql_command) users=cur.fetchall() - return render_template('users.html', active_menu='users', users=users) -@app.route('/user_status_change//') + return render_template('users.html', active_menu='users', users=users, login=login) -def user_status_change(action, user_name): - - if not 'user' in session: - return redirect(url_for('login')) - login = session['user'] - flash(f'user name {user_name} login {login}') - db = get_db() - - if action == 'active': - cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - #tatus_sql='select is_active from users where name='aaa';' - cur.execute("update users set is_active = ((is_active::int + 1) %% 2)::boolean where name = %s and name <> %s ", (user_name, login)) - db.commit() - elif action == 'admin': - cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cur.execute("update users set is_admin = ((is_admin::int + 1) %% 2)::boolean where name = %s and name <> %s", (user_name, login)) - db.commit() - - return redirect(url_for('users')) - - -""" @app.route('/user_status_change//') - def user_status_change(action, user_name): - if not 'user' in session: + # app.py – code to add to functions – admin access + + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid or not login.is_admin: + flash(f'Użytkownik {login.user} nie jest adminem') return redirect(url_for('login')) - login = session['user'] - flash(f'user name {user_name} login {login}') + + #if not 'user' in session: + # return redirect(url_for('login')) + #login = session['user'] + #flash(f'user name {user_name} login {login}') db = get_db() if action == 'active': cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) #tatus_sql='select is_active from users where name='aaa';' - cur.execute("update users set is_active = ((is_active::int + 1) % 2)::boolean where name = %s and name <> %s", (user_name, login)) + cur.execute("update users set is_active = ((is_active::int + 1) %% 2)::boolean where name = %s and name <> %s ", (user_name, login.user)) db.commit() elif action == 'admin': cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cur.execute(update users set is_admin = ((is_admin::int + 1) % 2)::boolean where name = 'aaa' and name <> 'bbb) + cur.execute("update users set is_admin = ((is_admin::int + 1) %% 2)::boolean where name = %s and name <> %s", (user_name, login.user)) db.commit() return redirect(url_for('users')) -""" + @app.route('/edit_user/', methods=['GET', 'POST']) def edit_user(user_name): + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid or not login.is_admin: + flash(f'Użytkownik {login.user} nie jest adminem') + return redirect(url_for('login')) + db = get_db() cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute('select name, email from users where name = %s', [user_name]) @@ -197,7 +225,7 @@ def edit_user(user_name): return redirect(url_for('users')) if request.method == 'GET': - return render_template('edit_user.html', active_menu='users', user=user) + return render_template('edit_user.html', active_menu='users', user=user, login=login) else: new_email = '' if 'email' not in request.form else request.form["email"] new_password = '' if 'user_pass' not in request.form else request.form['user_pass'] @@ -220,21 +248,31 @@ def edit_user(user_name): @app.route('/user_delete/') def delete_user(user_name): - if not 'user' in session: - return redirect(url_for('login')) - login = session['user'] + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid or not login.is_admin: + flash(f'Użytkownik {login.user} nie jest adminem') + return redirect(url_for('login')) + + #if not 'user' in session: + # return redirect(url_for('login')) + #login = session['user'] db=get_db() cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) sql_statement = "delete from users where name = %s and name <> %s" - cur.execute(sql_statement, [user_name, login]) + cur.execute(sql_statement, [user_name, login.user]) db.commit() return redirect(url_for('users')) @app.route('/new_user', methods=['GET', 'POST']) def new_user(): - if not 'user' in session: - return redirect(url_for('login')) + + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid or not login.is_admin: + flash(f'Użytkownik {login.user} nie jest adminem') + return redirect(url_for('login')) login = session['user'] db = get_db() @@ -242,7 +280,7 @@ def new_user(): user = {} if request.method == 'GET': - return render_template('new_user.html', active_menu='users', user=user) + return render_template('new_user.html', active_menu='users', user=user, login=login) else: user['user_name'] = '' if not 'user_name' in request.form else request.form['user_name'] user['email'] = '' if not 'email' in request.form else request.form['email'] @@ -277,7 +315,7 @@ def new_user(): return redirect(url_for('users')) else: flash('Correct error: {}'.format(message)) - return render_template('new_user.html', active_menu='users', user=user) + return render_template('new_user.html', active_menu='users', user=user, login=login) @app.route('/') def index(): From e939167c0605f9d447c4f1302c7a463ef2052f51 Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Mon, 20 Nov 2023 03:02:21 +0100 Subject: [PATCH 08/54] nowe funckcje MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dodanie dwóch nowych rootów/workflows /flow_info/ do poglądania statsów danych flów --- Templates/edit_transaction.html | 17 ---- Templates/edit_user.html | 2 +- Templates/exchange.html | 17 ---- Templates/exchange_results.html | 11 --- Templates/flows.html | 33 ++++++++ Templates/flows_info.html | 57 +++++++++++++ Templates/history.html | 26 ------ Templates/users.html | 13 ++- __pycache__/app.cpython-311.pyc | Bin 19529 -> 21409 bytes app.py | 82 +++++++++++++----- dodatkowe.txt | 143 ++++++++++++++++++++++++++++++++ 11 files changed, 301 insertions(+), 100 deletions(-) delete mode 100644 Templates/edit_transaction.html delete mode 100644 Templates/exchange.html delete mode 100644 Templates/exchange_results.html create mode 100644 Templates/flows.html create mode 100644 Templates/flows_info.html delete mode 100644 Templates/history.html diff --git a/Templates/edit_transaction.html b/Templates/edit_transaction.html deleted file mode 100644 index 11c980e..0000000 --- a/Templates/edit_transaction.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - EDIT - - - - -
- -
- -
- -
- - \ No newline at end of file diff --git a/Templates/edit_user.html b/Templates/edit_user.html index fd096e9..6f6ff6d 100644 --- a/Templates/edit_user.html +++ b/Templates/edit_user.html @@ -6,7 +6,7 @@

edycja użytkownika {{ user.name }}

-
+

zostawienie pustego pola spowoduje pozostwaienie obecnego hasła


diff --git a/Templates/exchange.html b/Templates/exchange.html deleted file mode 100644 index 7ecc3e0..0000000 --- a/Templates/exchange.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - Cantor - - - - - - -
- -
- -
- - \ No newline at end of file diff --git a/Templates/exchange_results.html b/Templates/exchange_results.html deleted file mode 100644 index 34778be..0000000 --- a/Templates/exchange_results.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - Cantor - - - - -

You selected {{currency}} and ammount {{amount}}

- - \ No newline at end of file diff --git a/Templates/flows.html b/Templates/flows.html new file mode 100644 index 0000000..877b0c8 --- /dev/null +++ b/Templates/flows.html @@ -0,0 +1,33 @@ +{% for message in get_flashed_messages() %} +

{{message }}

+{%endfor%} +
+ + + + + + + + + + + + + + {% for flow in flows %} + + + + + + + + + + {%endfor%} + +
#FlownameFlowdescriptionFile_nameNumberStatusActions
{{ flow.id_flo }}{{ flow.flowname }}{{ flow.flowdescription }} {{ flow.file_name }} {{ flow.number }} {{ flow.status }} + More info +
+
diff --git a/Templates/flows_info.html b/Templates/flows_info.html new file mode 100644 index 0000000..715a071 --- /dev/null +++ b/Templates/flows_info.html @@ -0,0 +1,57 @@ +{% for message in get_flashed_messages() %} +

{{message }}

+{%endfor%} +
+ + + + + + + + + + + + + + {% for flow in flows %} + + + + + + + + + + {%endfor%} + +
#FlownameFlowdescriptionFile_nameNumberStatusActions
{{ flow.id_flo }}{{ flow.flowname }}{{ flow.flowdescription }} {{ flow.file_name }} {{ flow.number }} {{ flow.status }} + More info +
+

+ + + + + + + + + + + + {% for approval in approvals %} + + + + + + + + {%endfor%} + +
#flow_idgroup_idvalue
{{ approval.id_app }}{{ approval.flow_id }}{{ approval.group_id }} {{ approval.value }}
+ +
diff --git a/Templates/history.html b/Templates/history.html deleted file mode 100644 index 0669578..0000000 --- a/Templates/history.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - {% for transaction in transactions %} - - - - - - - - {%endfor%} - -
# Currency Amount Data Operations
{{ transaction.id}} {{ transaction.Currency}} {{ transaction.Amount}} {{ transaction.trans_date}} - Actions - Edit - Delate -
\ No newline at end of file diff --git a/Templates/users.html b/Templates/users.html index 011bcd8..2fab91b 100644 --- a/Templates/users.html +++ b/Templates/users.html @@ -16,10 +16,10 @@ {% for user in users %} - {{ user.id }} - {{ user.name }} + {{ user.id_use }} + {{ user.username }} {{ user.email }} -
+ {% if user.is_active %} tak {% else %} @@ -28,7 +28,7 @@ - + {% if user.is_admin %} tak {% else %} @@ -38,9 +38,8 @@ - Edit... - Delate user + Edit... + Delate user diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index 1f16a94479e2b764265c470373c7b121693ff032..b885067fa5c6fd83b7f1a4bd815f498bb04ffee7 100644 GIT binary patch delta 2321 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 CpEf`M diff --git a/app.py b/app.py index 08237ed..04c36f9 100644 --- a/app.py +++ b/app.py @@ -18,7 +18,7 @@ def get_db(): if not hasattr(g, 'db'): - dbname = 'OpenWorkFlow' + dbname = 'test_workflow' user = 'postgres' password = 'a' host = 'localhost' @@ -48,11 +48,11 @@ def init_app(): # if not - create/update admin account with a new password and admin privileges, display user_pass = UserPass() user_pass.get_random_user_password() - name = user_pass.user[:100] # truncate the name to 100 characters + username = user_pass.user[:100] # truncate the name to 100 characters email = 'noone@nowhere.no' password = user_pass.hash_password() - sql_statement = "INSERT INTO users (name, email, password, is_active, is_admin) VALUES (%s, %s, %s, %s, %s)" - cur.execute(sql_statement, [name, email, password, True, True]) + sql_statement = "INSERT INTO users (username, email, password, is_active, is_admin) VALUES (%s, %s, %s, %s, %s)" + cur.execute(sql_statement, [username, email, password, True, True]) db.commit() flash('User {} with password {} has been created'.format(user_pass.user, user_pass.password)) return redirect(url_for('index')) @@ -122,7 +122,7 @@ def get_random_user_password(self): def login_user(self): db = get_db() - sql_statement = 'select id, name, email, password, is_active, is_admin from users where name=%s' + sql_statement = 'select id_use, username, email, password, is_active, is_admin from users where username=%s' cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(sql_statement, [self.user]) user_record = cur.fetchone() @@ -135,7 +135,7 @@ def login_user(self): def get_user_info(self): db = get_db() - sql_statement = 'select name, email, is_active, is_admin from users where name=%s' + sql_statement = 'select username, email, is_active, is_admin from users where username=%s' cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(sql_statement, [self.user]) db_user = cur.fetchone() @@ -169,7 +169,7 @@ def users(): db = get_db() - sql_command = 'select id, name, email, is_admin, is_active from users;' + sql_command = 'select id_use, username, email, is_admin, is_active from users;' cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(sql_command) users=cur.fetchall() @@ -187,20 +187,16 @@ def user_status_change(action, user_name): flash(f'Użytkownik {login.user} nie jest adminem') return redirect(url_for('login')) - #if not 'user' in session: - # return redirect(url_for('login')) - #login = session['user'] - #flash(f'user name {user_name} login {login}') db = get_db() if action == 'active': cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) #tatus_sql='select is_active from users where name='aaa';' - cur.execute("update users set is_active = ((is_active::int + 1) %% 2)::boolean where name = %s and name <> %s ", (user_name, login.user)) + cur.execute("update users set is_active = ((is_active::int + 1) %% 2)::boolean where username = %s and username <> %s ", (user_name, login.user)) db.commit() elif action == 'admin': cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cur.execute("update users set is_admin = ((is_admin::int + 1) %% 2)::boolean where name = %s and name <> %s", (user_name, login.user)) + cur.execute("update users set is_admin = ((is_admin::int + 1) %% 2)::boolean where username = %s and username <> %s", (user_name, login.user)) db.commit() return redirect(url_for('users')) @@ -216,9 +212,8 @@ def edit_user(user_name): db = get_db() cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cur.execute('select name, email from users where name = %s', [user_name]) + cur.execute('select username, email from users where username = %s', [user_name]) user = cur.fetchone() - message = None if user == None: flash('No such user') @@ -231,14 +226,14 @@ def edit_user(user_name): new_password = '' if 'user_pass' not in request.form else request.form['user_pass'] if new_email != user['email']: - sql_statement = "update users set email = %s where name = %s" + sql_statement = "update users set email = %s where username = %s" cur.execute(sql_statement, [new_email, user_name]) db.commit() flash('Email was changed') if new_password != '': user_pass = UserPass(user_name, new_password) - sql_statement = "update users set password = %s where name = %s" + sql_statement = "update users set password = %s where username = %s" cur.execute(sql_statement, [user_pass.hash_password(), user_name]) db.commit() flash('Password was changed') @@ -260,7 +255,7 @@ def delete_user(user_name): db=get_db() cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - sql_statement = "delete from users where name = %s and name <> %s" + sql_statement = "delete from users where username = %s and username <> %s" cur.execute(sql_statement, [user_name, login.user]) db.commit() return redirect(url_for('users')) @@ -286,7 +281,7 @@ def new_user(): user['email'] = '' if not 'email' in request.form else request.form['email'] user['user_pass'] = '' if not 'user_pass' in request.form else request.form['user_pass'] cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) - cur.execute('select count(*) as cnt from users where name = %s',[user['user_name']]) + cur.execute('select count(*) as cnt from users where username = %s',[user['user_name']]) record = cur.fetchone() is_user_name_unique = (record['cnt'] == 0) @@ -308,7 +303,7 @@ def new_user(): if not message: user_pass = UserPass(user['user_name'], user['user_pass']) password_hash = user_pass.hash_password() - sql_statement = '''insert into users(name, email, password, is_active, is_admin) values(%s,%s,%s, True, False);''' + sql_statement = '''insert into users(username, email, password, is_active, is_admin) values(%s,%s,%s, True, False);''' cur.execute(sql_statement, [user['user_name'][:100], user['email'], password_hash]) db.commit() flash('User {} created'.format(user['user_name'])) @@ -319,4 +314,49 @@ def new_user(): @app.route('/') def index(): - return render_template('base.html') \ No newline at end of file + return render_template('base.html') + + + +@app.route('/workflows', methods=['GET', 'POST']) +def workflows(): + #login = UserPass(session.get('user')) + #login.get_user_info() + #if not login.is_valid: + # flash(f'Użytkownik {login.user} nie aktywny') + # return redirect(url_for('login')) + + + db = get_db() + sql_command = 'SELECT f.id_flo, f.flowname, f.flowdescription, fl.filename AS file_name, f.number, f.status FROM flow f INNER JOIN files fl ON f.file_id = fl.id_fil;' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_command) + flows=cur.fetchall() + + return render_template('flows.html', active_menu='users', flows=flows, login=login) + + + +@app.route('/flow_info/', methods=['GET', 'POST']) +def flow_info(id_flo): + #login = UserPass(session.get('user')) + #login.get_user_info() + #if not login.is_valid: + # flash(f'Użytkownik {login.user} nie aktywny') + # return redirect(url_for('login')) + + + db = get_db() + sql_command = 'SELECT f.id_flo, f.flowname, f.flowdescription, fl.filename AS file_name, f.number, f.status FROM flow f INNER JOIN files fl ON f.file_id = fl.id_fil;' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_command) + flows=cur.fetchall() + + #sql_command2 = 'SELECT id_app, flow_id, group_id, value FROM approval_table;' + sql_command2 = 'SELECT id_app, flow_id, group_id, value FROM approval_table where flow_id=%s;' + + cur2 = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur2.execute(sql_command2,[id_flo]) + approvals=cur2.fetchall() + + return render_template('flows_info.html', active_menu='users', flows=flows, login=login, approvals=approvals) diff --git a/dodatkowe.txt b/dodatkowe.txt index 24e4515..0587231 100644 --- a/dodatkowe.txt +++ b/dodatkowe.txt @@ -1,3 +1,146 @@ +--towrzenie tabel +create table old_users ( + id serial primary key, + name varchar(100) not null unique, + email varchar(100) not null unique, + password varchar(100) not null, + is_active boolean not null default false, + is_admin boolean not null default false +); + +SELECT LENGTH('af756be6069a4bc6b3cfc0ec42aa757ae70395852ff7cacda38d1ab7ba890a89c5dac5d8040c0a7c3f01a03d9bd568cff6981b457334d27007b7791778d255e9ad7ff7f182dbf4fc7448fa8f4fd0133b6878c1ae84046d380dfcbb1aba95b166') +AS "Length of a String"; + +CREATE TABLE "users" ( + "id_use" serial NOT NULL, + "username" varchar(255) NOT NULL, + "password" varchar(255) NOT NULL, + "email" varchar(255) NOT NULL, + "admin" BOOLEAN NOT NULL, + "active" BOOLEAN NOT NULL, + CONSTRAINT "users_pk" PRIMARY KEY ("id_use") +) WITH ( + OIDS=FALSE +); + + + +CREATE TABLE "groups" ( + "id_grp" serial NOT NULL, + "groupname" varchar(255) NOT NULL, + "groupdescription" TEXT, + CONSTRAINT "groups_pk" PRIMARY KEY ("id_grp") +) WITH ( + OIDS=FALSE +); + + + +CREATE TABLE "files" ( + "id_fil" serial NOT NULL UNIQUE, + "filename" varchar(25) NOT NULL, + "filepath" varchar(50) NOT NULL, + "uploder" int NOT NULL, + CONSTRAINT "files_pk" PRIMARY KEY ("id_fil") +) WITH ( + OIDS=FALSE +); + + + +CREATE TABLE "flow" ( + "id_flo" serial NOT NULL, + "flowname" varchar(255) NOT NULL, + "flowdescription" TEXT NOT NULL, + "file_id" int NOT NULL, + "number" integer NOT NULL, + "status" BOOLEAN NOT NULL, + CONSTRAINT "flow_pk" PRIMARY KEY ("id_flo") +) WITH ( + OIDS=FALSE +); + + + +CREATE TABLE "approval_table" ( + "id_app" serial NOT NULL, + "flow_id" int NOT NULL, + "group_id" int NOT NULL, + "value" int NOT NULL, + CONSTRAINT "approval_table_pk" PRIMARY KEY ("id_app") +) WITH ( + OIDS=FALSE +); + + + +CREATE TABLE "group_members" ( + "id_gro" serial NOT NULL, + "user_id" int NOT NULL, + "group_id" int NOT NULL, + CONSTRAINT "group_members_pk" PRIMARY KEY ("id_gro") +) WITH ( + OIDS=FALSE +); + + + + + +ALTER TABLE "files" ADD CONSTRAINT "files_fk0" FOREIGN KEY ("uploder") REFERENCES "users"("id_use"); + +ALTER TABLE "flow" ADD CONSTRAINT "flow_fk0" FOREIGN KEY ("file_id") REFERENCES "files"("id_fil"); + +ALTER TABLE "approval_table" ADD CONSTRAINT "approval_table_fk0" FOREIGN KEY ("flow_id") REFERENCES "flow"("id_flo"); +ALTER TABLE "approval_table" ADD CONSTRAINT "approval_table_fk1" FOREIGN KEY ("group_id") REFERENCES "groups"("id_grp"); + +ALTER TABLE "group_members" ADD CONSTRAINT "group_members_fk0" FOREIGN KEY ("user_id") REFERENCES "users"("id_use"); +ALTER TABLE "group_members" ADD CONSTRAINT "group_members_fk1" FOREIGN KEY ("group_id") REFERENCES "groups"("id_grp"); + + +-- Insert data into "users" table +INSERT INTO users (username, password, email, is_admin, is_active) VALUES + ('user1', 'password1', 'user1@example.com', false, true), + ('admin', 'adminpassword', 'admin@example.com', true, true), + ('user2', 'password2', 'user2@example.com', false, true); + +-- Insert data into "groups" table +INSERT INTO groups (groupname, groupdescription) VALUES + ('Group1', 'Description for Group1'), + ('Group2', 'Description for Group2'); + +-- Insert data into "files" table +INSERT INTO files (filename, filepath, uploder) VALUES + ('file1.txt', '/path/to/file1.txt', 1), + ('file2.txt', '/path/to/file2.txt', 2); + +-- Insert data into "flow" table +INSERT INTO flow (flowname, flowdescription, file_id, number, status) VALUES + ('Flow1', 'Description for Flow1', 1, 100, true), + ('Flow2', 'Description for Flow2', 2, 200, false); + +-- Insert data into "approval_table" table +INSERT INTO approval_table (flow_id, group_id, value) VALUES + (1, 1, 10), + (2, 2, 20); + +-- Insert data into "group_members" table +INSERT INTO group_members (user_id, group_id) VALUES + (1, 1), + (2, 2), + (3, 1); + +select flowname, flowdescription, file_id, number, status from flow; + +select id_flo, flowname, flowdescription, file_id, number, status from flow; + +SELECT f.id_flo, f.flowname, f.flowdescription, fl.filename AS file_name, f.number, f.status +FROM flow f +INNER JOIN files fl ON f.file_id = fl.id_fil; +select id_use, username, email, is_admin, is_active from users; + + + create table users (id integer primary key autoincrement, name varchar(100) not null unique, email varchar(100) not null unique, password test, is_active booolen not null default 0, is_admin boolean not null default 0); From f10410628494cfd535c03dfabff708af8f8d3a8d Mon Sep 17 00:00:00 2001 From: BigBadSheep Date: Thu, 23 Nov 2023 03:31:39 +0100 Subject: [PATCH 09/54] =?UTF-8?q?wy=C5=9Bwietlanie=20grup,=20dodawanie=20g?= =?UTF-8?q?rup,=20dodawnie=20flow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wyświetlanie grup, dodawanie grup, dodawnie flow --- Templates/groups.html | 26 +++++ Templates/groups_info.html | 52 +++++++++ Templates/new_flow.html | 18 ++++ Templates/new_grp.html | 16 +++ __pycache__/app.cpython-311.pyc | Bin 21409 -> 29294 bytes app.py | 180 ++++++++++++++++++++++++++++++-- 6 files changed, 282 insertions(+), 10 deletions(-) create mode 100644 Templates/groups.html create mode 100644 Templates/groups_info.html create mode 100644 Templates/new_flow.html create mode 100644 Templates/new_grp.html diff --git a/Templates/groups.html b/Templates/groups.html new file mode 100644 index 0000000..e917d1a --- /dev/null +++ b/Templates/groups.html @@ -0,0 +1,26 @@ +{% for message in get_flashed_messages() %} +

{{message }}

+{%endfor%} +
+ + + + + + + + + + {% for group in groups %} + + + + + + + {%endfor%} + +
#Group NameGroup Description
{{ group.id_grp }}{{ group.groupname }}{{ group.groupdescription }} + More info +
+
diff --git a/Templates/groups_info.html b/Templates/groups_info.html new file mode 100644 index 0000000..7c85c5a --- /dev/null +++ b/Templates/groups_info.html @@ -0,0 +1,52 @@ +{% for message in get_flashed_messages() %} +

{{message }}

+{%endfor%} +
+ + + + + + + + + + {% for group in groups %} + + + + + + + {%endfor%} + +
#Group NameGroup Description
{{ group.id_grp }}{{ group.groupname }}{{ group.groupdescription }} + More info +
+
+ +

+ + + + + + + + + + + + {% for member in members %} + + + + + + + + {%endfor%} + +
#groupnameuser nameemail
{{ member.id_grp }}{{ member.groupname }}{{ member.username }} {{ member.email }}
+ + diff --git a/Templates/new_flow.html b/Templates/new_flow.html new file mode 100644 index 0000000..439f004 --- /dev/null +++ b/Templates/new_flow.html @@ -0,0 +1,18 @@ + + + + new-flow + + + + {% for message in get_flashed_messages() %} +

{{message }}

+ {%endfor%} +
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/Templates/new_grp.html b/Templates/new_grp.html new file mode 100644 index 0000000..d864cd3 --- /dev/null +++ b/Templates/new_grp.html @@ -0,0 +1,16 @@ + + + + new-flow + + + + {% for message in get_flashed_messages() %} +

{{message }}

+ {%endfor%} +
+
+
+
+
+ \ No newline at end of file diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index b885067fa5c6fd83b7f1a4bd815f498bb04ffee7..36eb443f0da4f6ee1f2ffc48cce82ac8d58a2a8a 100644 GIT binary patch delta 4921 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 diff --git a/app.py b/app.py index 04c36f9..a5e1f81 100644 --- a/app.py +++ b/app.py @@ -320,11 +320,11 @@ def index(): @app.route('/workflows', methods=['GET', 'POST']) def workflows(): - #login = UserPass(session.get('user')) - #login.get_user_info() - #if not login.is_valid: - # flash(f'Użytkownik {login.user} nie aktywny') - # return redirect(url_for('login')) + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) db = get_db() @@ -339,11 +339,11 @@ def workflows(): @app.route('/flow_info/', methods=['GET', 'POST']) def flow_info(id_flo): - #login = UserPass(session.get('user')) - #login.get_user_info() - #if not login.is_valid: - # flash(f'Użytkownik {login.user} nie aktywny') - # return redirect(url_for('login')) + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) db = get_db() @@ -360,3 +360,163 @@ def flow_info(id_flo): approvals=cur2.fetchall() return render_template('flows_info.html', active_menu='users', flows=flows, login=login, approvals=approvals) + + +@app.route('/add_flow', methods=['GET', 'POST']) +def add_flow(): + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) + + #login = session['user'] + db = get_db() + message = None + flow = {} + + if request.method == 'GET': + return render_template('new_flow.html', active_menu='new_flow', flow=flow, login=login) + else: + flow['flow_name'] = '' if not 'flow_name' in request.form else request.form['flow_name'] + flow['flowdescription'] = '' if not 'flowdescription' in request.form else request.form['flowdescription'] + flow['file_name'] = '' if not 'file_name' in request.form else request.form['file_name'] + flow['file_path'] = '' if not 'file_path' in request.form else request.form['file_path'] + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + #cur.execute('select count(*) as cnt from users where username = %s',[user['user_name']]) + #record = cur.fetchone() + #is_user_name_unique = (record['cnt'] == 0) + + #cur.execute('select count(*) as cnt from users where email = %s',[user['email']]) + #record = cur.fetchone() + #is_user_email_unique = (record['cnt'] == 0) + + if flow['flow_name'] == '': + message = 'flow_name cannot be empty' + elif flow['flowdescription'] == '': + message = 'flowdescription cannot be empty' + elif flow['file_name'] == '': + message = 'file_name cannot be empty' + elif flow['file_path'] == '': + message = 'file_path cannot be empty' + #elif not is_user_name_unique: + # message = 'User with the name {} already exists'.format(user['user_name']) + #elif not is_user_email_unique: + # message = 'User with the email {} alresdy exists'.format(user['email']) + + if not message: + #user_pass = UserPass(user['user_name'], user['user_pass']) + #password_hash = user_pass.hash_password() + #INSERT INTO files (filename, filepath, uploder) VALUES ('new_file.txt', '/path/to/new_file.txt', 1); + sql_statement = '''INSERT INTO files (filename, filepath, uploder) VALUES(%s,%s,%s);''' + cur.execute(sql_statement, [ flow['file_name'], flow['file_path'], 1 ]) #jedne do zmiany na id usera + db.commit() + flash('Flow {} upolded'.format(flow['file_name'])) + + #INSERT INTO flow (flowname, flowdescription, file_id, number, status) + #VALUES ('New Flow', 'Description for New Flow', 1, 123, true); + + sql_statement = '''INSERT INTO flow (flowname, flowdescription, file_id, number, status) VALUES(%s,%s,1, 0, false);''' + cur.execute(sql_statement, [ flow['flow_name'], flow['flowdescription'] ]) + db.commit() + flash('Flow {} created'.format(flow['flow_name'])) + + return redirect(url_for('workflows')) + else: + flash('Correct error: {}'.format(message)) + return render_template('new_flow.html', active_menu='workflows', flow=flow, login=login) + +@app.route('/groups', methods=['GET', 'POST']) +def groups(): + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) + + + db = get_db() + sql_command = 'SELECT * FROM groups;' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_command) + groups=cur.fetchall() + + return render_template('groups.html', active_menu='groups', login=login, groups=groups) + +@app.route('/groups/', methods=['GET', 'POST']) +def grp_info(id_grp): + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) + + + db = get_db() + sql_command = 'SELECT * FROM groups;' + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur.execute(sql_command) + groups=cur.fetchall() + + #sql_command2 = 'SELECT id_app, flow_id, group_id, value FROM approval_table;' + sql_command2 = 'SELECT g.groupname, u.username, u.email FROM group_members gm JOIN users u ON gm.user_id = u.id_use JOIN groups g ON gm.group_id = g.id_grp WHERE g.id_grp = %s ORDER BY g.groupname, u.username;' + + cur2 = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + cur2.execute(sql_command2,[id_grp]) + members=cur2.fetchall() + + return render_template('groups_info.html', active_menu='groups', login=login, groups=groups, members=members) + +@app.route('/add_grp', methods=['GET', 'POST']) +def add_grp(): + login = UserPass(session.get('user')) + login.get_user_info() + if not login.is_valid: + flash(f'Użytkownik {login.user} nie aktywny') + return redirect(url_for('login')) + + #login = session['user'] + db = get_db() + message = None + grp = {} + + if request.method == 'GET': + return render_template('new_grp.html', active_menu='new_grp', grp=grp, login=login) + else: + grp['group_name'] = '' if not 'group_name' in request.form else request.form['group_name'] + grp['group_description'] = '' if not 'group_description' in request.form else request.form['group_description'] + cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor) + #cur.execute('select count(*) as cnt from users where username = %s',[user['user_name']]) + #record = cur.fetchone() + #is_user_name_unique = (record['cnt'] == 0) + + #cur.execute('select count(*) as cnt from users where email = %s',[user['email']]) + #record = cur.fetchone() + #is_user_email_unique = (record['cnt'] == 0) + + if grp['group_name'] == '': + message = 'group_name cannot be empty' + elif grp['group_description'] == '': + message = 'group_description cannot be empty' + #elif not is_user_name_unique: + # message = 'User with the name {} already exists'.format(user['user_name']) + #elif not is_user_email_unique: + # message = 'User with the email {} alresdy exists'.format(user['email']) + + if not message: + #user_pass = UserPass(user['user_name'], user['user_pass']) + #password_hash = user_pass.hash_password() + #INSERT INTO files (filename, filepath, uploder) VALUES ('new_file.txt', '/path/to/new_file.txt', 1); + sql_statement = '''INSERT INTO groups ( groupname, groupdescription) VALUES(%s,%s);''' + cur.execute(sql_statement, [ grp['group_name'], grp['group_description'] ]) #jedne do zmiany na id usera + db.commit() + flash('Created {} group'.format(grp['group_name'])) + + #INSERT INTO flow (flowname, flowdescription, file_id, number, status) + #VALUES ('New Flow', 'Description for New Flow', 1, 123, true); + + + return redirect(url_for('groups')) + else: + flash('Correct error: {}'.format(message)) + return render_template('new_flow.html', active_menu='groups', grp=grp, login=login) \ No newline at end of file From 7a92166d5bf4d0833b2f61b1f793b32ee6219d9d Mon Sep 17 00:00:00 2001 From: Bzdyniuk Date: Fri, 24 Nov 2023 12:57:00 +0100 Subject: [PATCH 10/54] test test --- __pycache__/app.cpython-311.pyc | Bin 29294 -> 29296 bytes dodatkowe.txt | 4 + .../Jinja2-3.1.2.dist-info/INSTALLER | 1 + .../Jinja2-3.1.2.dist-info/LICENSE.rst | 28 + .../Jinja2-3.1.2.dist-info/METADATA | 113 + .../Jinja2-3.1.2.dist-info/RECORD | 59 + .../Jinja2-3.1.2.dist-info/REQUESTED | 0 .../Jinja2-3.1.2.dist-info/WHEEL | 5 + .../Jinja2-3.1.2.dist-info/entry_points.txt | 2 + .../Jinja2-3.1.2.dist-info/top_level.txt | 1 + .../MarkupSafe-2.1.3.dist-info/INSTALLER | 1 + .../MarkupSafe-2.1.3.dist-info/LICENSE.rst | 28 + .../MarkupSafe-2.1.3.dist-info/METADATA | 93 + .../MarkupSafe-2.1.3.dist-info/RECORD | 15 + .../MarkupSafe-2.1.3.dist-info/REQUESTED | 0 .../MarkupSafe-2.1.3.dist-info/WHEEL | 5 + .../MarkupSafe-2.1.3.dist-info/top_level.txt | 1 + .../site-packages/_distutils_hack/__init__.py | 222 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 11169 bytes .../__pycache__/override.cpython-311.pyc | Bin 0 -> 326 bytes .../site-packages/_distutils_hack/override.py | 1 + .../blinker-1.6.2.dist-info/INSTALLER | 1 + .../blinker-1.6.2.dist-info/LICENSE.rst | 20 + .../blinker-1.6.2.dist-info/METADATA | 63 + .../blinker-1.6.2.dist-info/RECORD | 16 + .../blinker-1.6.2.dist-info/REQUESTED | 0 .../blinker-1.6.2.dist-info/WHEEL | 5 + .../blinker-1.6.2.dist-info/top_level.txt | 1 + venv/Lib/site-packages/blinker/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 647 bytes .../__pycache__/_saferef.cpython-311.pyc | Bin 0 -> 9959 bytes .../__pycache__/_utilities.cpython-311.pyc | Bin 0 -> 6707 bytes .../blinker/__pycache__/base.cpython-311.pyc | Bin 0 -> 24847 bytes venv/Lib/site-packages/blinker/_saferef.py | 230 + venv/Lib/site-packages/blinker/_utilities.py | 142 + venv/Lib/site-packages/blinker/base.py | 551 ++ venv/Lib/site-packages/blinker/py.typed | 0 .../click-8.1.7.dist-info/INSTALLER | 1 + .../click-8.1.7.dist-info/LICENSE.rst | 28 + .../click-8.1.7.dist-info/METADATA | 103 + .../click-8.1.7.dist-info/RECORD | 40 + .../click-8.1.7.dist-info/REQUESTED | 0 .../site-packages/click-8.1.7.dist-info/WHEEL | 5 + .../click-8.1.7.dist-info/top_level.txt | 1 + venv/Lib/site-packages/click/__init__.py | 73 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3687 bytes .../click/__pycache__/_compat.cpython-311.pyc | Bin 0 -> 28678 bytes .../__pycache__/_termui_impl.cpython-311.pyc | Bin 0 -> 33075 bytes .../__pycache__/_textwrap.cpython-311.pyc | Bin 0 -> 2648 bytes .../__pycache__/_winconsole.cpython-311.pyc | Bin 0 -> 13338 bytes .../click/__pycache__/core.cpython-311.pyc | Bin 0 -> 142420 bytes .../__pycache__/decorators.cpython-311.pyc | Bin 0 -> 25442 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 16201 bytes .../__pycache__/formatting.cpython-311.pyc | Bin 0 -> 15693 bytes .../click/__pycache__/globals.cpython-311.pyc | Bin 0 -> 3375 bytes .../click/__pycache__/parser.cpython-311.pyc | Bin 0 -> 23137 bytes .../shell_completion.cpython-311.pyc | Bin 0 -> 23986 bytes .../click/__pycache__/termui.cpython-311.pyc | Bin 0 -> 34482 bytes .../click/__pycache__/testing.cpython-311.pyc | Bin 0 -> 25770 bytes .../click/__pycache__/types.cpython-311.pyc | Bin 0 -> 53672 bytes .../click/__pycache__/utils.cpython-311.pyc | Bin 0 -> 27981 bytes venv/Lib/site-packages/click/_compat.py | 623 ++ venv/Lib/site-packages/click/_termui_impl.py | 739 ++ venv/Lib/site-packages/click/_textwrap.py | 49 + venv/Lib/site-packages/click/_winconsole.py | 279 + venv/Lib/site-packages/click/core.py | 3042 ++++++ venv/Lib/site-packages/click/decorators.py | 561 ++ venv/Lib/site-packages/click/exceptions.py | 288 + venv/Lib/site-packages/click/formatting.py | 301 + venv/Lib/site-packages/click/globals.py | 68 + venv/Lib/site-packages/click/parser.py | 529 + venv/Lib/site-packages/click/py.typed | 0 .../site-packages/click/shell_completion.py | 596 ++ venv/Lib/site-packages/click/termui.py | 784 ++ venv/Lib/site-packages/click/testing.py | 479 + venv/Lib/site-packages/click/types.py | 1089 +++ venv/Lib/site-packages/click/utils.py | 624 ++ .../colorama-0.4.6.dist-info/INSTALLER | 1 + .../colorama-0.4.6.dist-info/METADATA | 441 + .../colorama-0.4.6.dist-info/RECORD | 32 + .../colorama-0.4.6.dist-info/REQUESTED | 0 .../colorama-0.4.6.dist-info/WHEEL | 5 + .../licenses/LICENSE.txt | 27 + venv/Lib/site-packages/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 572 bytes .../colorama/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 4570 bytes .../__pycache__/ansitowin32.cpython-311.pyc | Bin 0 -> 16216 bytes .../__pycache__/initialise.cpython-311.pyc | Bin 0 -> 3933 bytes .../__pycache__/win32.cpython-311.pyc | Bin 0 -> 7921 bytes .../__pycache__/winterm.cpython-311.pyc | Bin 0 -> 9147 bytes venv/Lib/site-packages/colorama/ansi.py | 102 + .../Lib/site-packages/colorama/ansitowin32.py | 277 + venv/Lib/site-packages/colorama/initialise.py | 121 + .../site-packages/colorama/tests/__init__.py | 1 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 203 bytes .../__pycache__/ansi_test.cpython-311.pyc | Bin 0 -> 5848 bytes .../ansitowin32_test.cpython-311.pyc | Bin 0 -> 21515 bytes .../initialise_test.cpython-311.pyc | Bin 0 -> 14142 bytes .../__pycache__/isatty_test.cpython-311.pyc | Bin 0 -> 6707 bytes .../tests/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2882 bytes .../__pycache__/winterm_test.cpython-311.pyc | Bin 0 -> 7235 bytes .../site-packages/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../colorama/tests/initialise_test.py | 189 + .../colorama/tests/isatty_test.py | 57 + .../Lib/site-packages/colorama/tests/utils.py | 49 + .../colorama/tests/winterm_test.py | 131 + venv/Lib/site-packages/colorama/win32.py | 180 + venv/Lib/site-packages/colorama/winterm.py | 195 + .../site-packages/distutils-precedence.pth | 1 + .../flask-2.3.3.dist-info/INSTALLER | 1 + .../flask-2.3.3.dist-info/LICENSE.rst | 28 + .../flask-2.3.3.dist-info/METADATA | 116 + .../flask-2.3.3.dist-info/RECORD | 53 + .../flask-2.3.3.dist-info/REQUESTED | 0 .../site-packages/flask-2.3.3.dist-info/WHEEL | 4 + .../flask-2.3.3.dist-info/entry_points.txt | 3 + venv/Lib/site-packages/flask/__init__.py | 102 + venv/Lib/site-packages/flask/__main__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4075 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 269 bytes .../flask/__pycache__/app.cpython-311.pyc | Bin 0 -> 87096 bytes .../__pycache__/blueprints.cpython-311.pyc | Bin 0 -> 32018 bytes .../flask/__pycache__/cli.cpython-311.pyc | Bin 0 -> 44339 bytes .../flask/__pycache__/config.cpython-311.pyc | Bin 0 -> 16435 bytes .../flask/__pycache__/ctx.cpython-311.pyc | Bin 0 -> 20632 bytes .../__pycache__/debughelpers.cpython-311.pyc | Bin 0 -> 9476 bytes .../flask/__pycache__/globals.cpython-311.pyc | Bin 0 -> 4273 bytes .../flask/__pycache__/helpers.cpython-311.pyc | Bin 0 -> 30027 bytes .../flask/__pycache__/logging.cpython-311.pyc | Bin 0 -> 3457 bytes .../__pycache__/scaffold.cpython-311.pyc | Bin 0 -> 34827 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 17345 bytes .../flask/__pycache__/signals.cpython-311.pyc | Bin 0 -> 1973 bytes .../__pycache__/templating.cpython-311.pyc | Bin 0 -> 10604 bytes .../flask/__pycache__/testing.cpython-311.pyc | Bin 0 -> 14543 bytes .../flask/__pycache__/typing.cpython-311.pyc | Bin 0 -> 3441 bytes .../flask/__pycache__/views.cpython-311.pyc | Bin 0 -> 7310 bytes .../__pycache__/wrappers.cpython-311.pyc | Bin 0 -> 6760 bytes venv/Lib/site-packages/flask/app.py | 2213 +++++ venv/Lib/site-packages/flask/blueprints.py | 626 ++ venv/Lib/site-packages/flask/cli.py | 1068 ++ venv/Lib/site-packages/flask/config.py | 347 + venv/Lib/site-packages/flask/ctx.py | 440 + venv/Lib/site-packages/flask/debughelpers.py | 160 + venv/Lib/site-packages/flask/globals.py | 96 + venv/Lib/site-packages/flask/helpers.py | 701 ++ venv/Lib/site-packages/flask/json/__init__.py | 170 + .../json/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6884 bytes .../json/__pycache__/provider.cpython-311.pyc | Bin 0 -> 9991 bytes .../json/__pycache__/tag.cpython-311.pyc | Bin 0 -> 15593 bytes venv/Lib/site-packages/flask/json/provider.py | 216 + venv/Lib/site-packages/flask/json/tag.py | 314 + venv/Lib/site-packages/flask/logging.py | 76 + venv/Lib/site-packages/flask/py.typed | 0 venv/Lib/site-packages/flask/scaffold.py | 873 ++ venv/Lib/site-packages/flask/sessions.py | 367 + venv/Lib/site-packages/flask/signals.py | 33 + venv/Lib/site-packages/flask/templating.py | 220 + venv/Lib/site-packages/flask/testing.py | 295 + venv/Lib/site-packages/flask/typing.py | 82 + venv/Lib/site-packages/flask/views.py | 190 + venv/Lib/site-packages/flask/wrappers.py | 173 + .../itsdangerous-2.1.2.dist-info/INSTALLER | 1 + .../itsdangerous-2.1.2.dist-info/LICENSE.rst | 28 + .../itsdangerous-2.1.2.dist-info/METADATA | 97 + .../itsdangerous-2.1.2.dist-info/RECORD | 24 + .../itsdangerous-2.1.2.dist-info/REQUESTED | 0 .../itsdangerous-2.1.2.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/itsdangerous/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1158 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 1396 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 0 -> 2983 bytes .../__pycache__/exc.cpython-311.pyc | Bin 0 -> 4999 bytes .../__pycache__/serializer.cpython-311.pyc | Bin 0 -> 13642 bytes .../__pycache__/signer.cpython-311.pyc | Bin 0 -> 12349 bytes .../__pycache__/timed.cpython-311.pyc | Bin 0 -> 10075 bytes .../__pycache__/url_safe.cpython-311.pyc | Bin 0 -> 4003 bytes venv/Lib/site-packages/itsdangerous/_json.py | 16 + .../site-packages/itsdangerous/encoding.py | 54 + venv/Lib/site-packages/itsdangerous/exc.py | 107 + venv/Lib/site-packages/itsdangerous/py.typed | 0 .../site-packages/itsdangerous/serializer.py | 295 + venv/Lib/site-packages/itsdangerous/signer.py | 257 + venv/Lib/site-packages/itsdangerous/timed.py | 234 + .../site-packages/itsdangerous/url_safe.py | 80 + venv/Lib/site-packages/jinja2/__init__.py | 37 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2128 bytes .../__pycache__/_identifier.cpython-311.pyc | Bin 0 -> 2144 bytes .../__pycache__/async_utils.cpython-311.pyc | Bin 0 -> 4645 bytes .../__pycache__/bccache.cpython-311.pyc | Bin 0 -> 20926 bytes .../__pycache__/compiler.cpython-311.pyc | Bin 0 -> 110487 bytes .../__pycache__/constants.cpython-311.pyc | Bin 0 -> 1563 bytes .../jinja2/__pycache__/debug.cpython-311.pyc | Bin 0 -> 6723 bytes .../__pycache__/defaults.cpython-311.pyc | Bin 0 -> 1729 bytes .../__pycache__/environment.cpython-311.pyc | Bin 0 -> 80545 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8614 bytes .../jinja2/__pycache__/ext.cpython-311.pyc | Bin 0 -> 43193 bytes .../__pycache__/filters.cpython-311.pyc | Bin 0 -> 75891 bytes .../__pycache__/idtracking.cpython-311.pyc | Bin 0 -> 19549 bytes .../jinja2/__pycache__/lexer.cpython-311.pyc | Bin 0 -> 35624 bytes .../__pycache__/loaders.cpython-311.pyc | Bin 0 -> 33082 bytes .../jinja2/__pycache__/meta.cpython-311.pyc | Bin 0 -> 5708 bytes .../__pycache__/nativetypes.cpython-311.pyc | Bin 0 -> 7970 bytes .../jinja2/__pycache__/nodes.cpython-311.pyc | Bin 0 -> 64489 bytes .../__pycache__/optimizer.cpython-311.pyc | Bin 0 -> 2859 bytes .../jinja2/__pycache__/parser.cpython-311.pyc | Bin 0 -> 59303 bytes .../__pycache__/runtime.cpython-311.pyc | Bin 0 -> 50655 bytes .../__pycache__/sandbox.cpython-311.pyc | Bin 0 -> 18827 bytes .../jinja2/__pycache__/tests.cpython-311.pyc | Bin 0 -> 9250 bytes .../jinja2/__pycache__/utils.cpython-311.pyc | Bin 0 -> 37065 bytes .../__pycache__/visitor.cpython-311.pyc | Bin 0 -> 5719 bytes venv/Lib/site-packages/jinja2/_identifier.py | 6 + venv/Lib/site-packages/jinja2/async_utils.py | 84 + venv/Lib/site-packages/jinja2/bccache.py | 406 + venv/Lib/site-packages/jinja2/compiler.py | 1957 ++++ venv/Lib/site-packages/jinja2/constants.py | 20 + venv/Lib/site-packages/jinja2/debug.py | 191 + venv/Lib/site-packages/jinja2/defaults.py | 48 + venv/Lib/site-packages/jinja2/environment.py | 1667 ++++ venv/Lib/site-packages/jinja2/exceptions.py | 166 + venv/Lib/site-packages/jinja2/ext.py | 859 ++ venv/Lib/site-packages/jinja2/filters.py | 1840 ++++ venv/Lib/site-packages/jinja2/idtracking.py | 318 + venv/Lib/site-packages/jinja2/lexer.py | 866 ++ venv/Lib/site-packages/jinja2/loaders.py | 661 ++ venv/Lib/site-packages/jinja2/meta.py | 111 + venv/Lib/site-packages/jinja2/nativetypes.py | 130 + venv/Lib/site-packages/jinja2/nodes.py | 1204 +++ venv/Lib/site-packages/jinja2/optimizer.py | 47 + venv/Lib/site-packages/jinja2/parser.py | 1032 ++ venv/Lib/site-packages/jinja2/py.typed | 0 venv/Lib/site-packages/jinja2/runtime.py | 1053 ++ venv/Lib/site-packages/jinja2/sandbox.py | 428 + venv/Lib/site-packages/jinja2/tests.py | 255 + venv/Lib/site-packages/jinja2/utils.py | 755 ++ venv/Lib/site-packages/jinja2/visitor.py | 92 + venv/Lib/site-packages/markupsafe/__init__.py | 304 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 19779 bytes .../__pycache__/_native.cpython-311.pyc | Bin 0 -> 2746 bytes venv/Lib/site-packages/markupsafe/_native.py | 63 + venv/Lib/site-packages/markupsafe/_speedups.c | 320 + .../markupsafe/_speedups.cp311-win_amd64.pyd | Bin 0 -> 15872 bytes .../site-packages/markupsafe/_speedups.pyi | 9 + venv/Lib/site-packages/markupsafe/py.typed | 0 .../pip-23.2.1.dist-info/AUTHORS.txt | 738 ++ .../pip-23.2.1.dist-info/INSTALLER | 1 + .../pip-23.2.1.dist-info/LICENSE.txt | 20 + .../pip-23.2.1.dist-info/METADATA | 90 + .../site-packages/pip-23.2.1.dist-info/RECORD | 1003 ++ .../pip-23.2.1.dist-info/REQUESTED | 0 .../site-packages/pip-23.2.1.dist-info/WHEEL | 5 + .../pip-23.2.1.dist-info/entry_points.txt | 4 + .../pip-23.2.1.dist-info/top_level.txt | 1 + venv/Lib/site-packages/pip/__init__.py | 13 + venv/Lib/site-packages/pip/__main__.py | 24 + venv/Lib/site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 781 bytes .../pip/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 898 bytes .../__pip-runner__.cpython-311.pyc | Bin 0 -> 2518 bytes .../site-packages/pip/_internal/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 964 bytes .../__pycache__/build_env.cpython-311.pyc | Bin 0 -> 16084 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 14282 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 19531 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 37633 bytes .../__pycache__/main.cpython-311.pyc | Bin 0 -> 764 bytes .../__pycache__/pyproject.cpython-311.pyc | Bin 0 -> 5626 bytes .../self_outdated_check.cpython-311.pyc | Bin 0 -> 11334 bytes .../__pycache__/wheel_builder.cpython-311.pyc | Bin 0 -> 15268 bytes .../site-packages/pip/_internal/build_env.py | 311 + venv/Lib/site-packages/pip/_internal/cache.py | 292 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 299 bytes .../autocompletion.cpython-311.pyc | Bin 0 -> 10089 bytes .../__pycache__/base_command.cpython-311.pyc | Bin 0 -> 11861 bytes .../__pycache__/cmdoptions.cpython-311.pyc | Bin 0 -> 33760 bytes .../command_context.cpython-311.pyc | Bin 0 -> 2121 bytes .../cli/__pycache__/main.cpython-311.pyc | Bin 0 -> 2591 bytes .../__pycache__/main_parser.cpython-311.pyc | Bin 0 -> 5535 bytes .../cli/__pycache__/parser.cpython-311.pyc | Bin 0 -> 17036 bytes .../__pycache__/progress_bars.cpython-311.pyc | Bin 0 -> 3183 bytes .../__pycache__/req_command.cpython-311.pyc | Bin 0 -> 20329 bytes .../cli/__pycache__/spinners.cpython-311.pyc | Bin 0 -> 8848 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 387 bytes .../pip/_internal/cli/autocompletion.py | 171 + .../pip/_internal/cli/base_command.py | 236 + .../pip/_internal/cli/cmdoptions.py | 1074 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 79 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 68 + .../pip/_internal/cli/req_command.py | 508 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4467 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 10566 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 2422 bytes .../__pycache__/completion.cpython-311.pyc | Bin 0 -> 5332 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 14908 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 12016 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 7956 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 4672 bytes .../commands/__pycache__/hash.cpython-311.pyc | Bin 0 -> 3369 bytes .../commands/__pycache__/help.cpython-311.pyc | Bin 0 -> 1981 bytes .../__pycache__/index.cpython-311.pyc | Bin 0 -> 7804 bytes .../__pycache__/inspect.cpython-311.pyc | Bin 0 -> 4457 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 31218 bytes .../commands/__pycache__/list.cpython-311.pyc | Bin 0 -> 17227 bytes .../__pycache__/search.cpython-311.pyc | Bin 0 -> 8963 bytes .../commands/__pycache__/show.cpython-311.pyc | Bin 0 -> 11306 bytes .../__pycache__/uninstall.cpython-311.pyc | Bin 0 -> 5157 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 9413 bytes .../pip/_internal/commands/cache.py | 222 + .../pip/_internal/commands/check.py | 54 + .../pip/_internal/commands/completion.py | 121 + .../pip/_internal/commands/configuration.py | 282 + .../pip/_internal/commands/debug.py | 199 + .../pip/_internal/commands/download.py | 147 + .../pip/_internal/commands/freeze.py | 108 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 778 ++ .../pip/_internal/commands/list.py | 368 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 189 + .../pip/_internal/commands/uninstall.py | 113 + .../pip/_internal/commands/wheel.py | 183 + .../pip/_internal/configuration.py | 381 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1049 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 2421 bytes .../__pycache__/installed.cpython-311.pyc | Bin 0 -> 1558 bytes .../__pycache__/sdist.cpython-311.pyc | Bin 0 -> 8960 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 2152 bytes .../pip/_internal/distributions/base.py | 39 + .../pip/_internal/distributions/installed.py | 23 + .../pip/_internal/distributions/sdist.py | 150 + .../pip/_internal/distributions/wheel.py | 34 + .../site-packages/pip/_internal/exceptions.py | 733 ++ .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 253 bytes .../__pycache__/collector.cpython-311.pyc | Bin 0 -> 24559 bytes .../package_finder.cpython-311.pyc | Bin 0 -> 44231 bytes .../index/__pycache__/sources.cpython-311.pyc | Bin 0 -> 11035 bytes .../pip/_internal/index/collector.py | 505 + .../pip/_internal/index/package_finder.py | 1029 ++ .../pip/_internal/index/sources.py | 223 + .../pip/_internal/locations/__init__.py | 467 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 18191 bytes .../__pycache__/_distutils.cpython-311.pyc | Bin 0 -> 7600 bytes .../__pycache__/_sysconfig.cpython-311.pyc | Bin 0 -> 8895 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 4016 bytes .../pip/_internal/locations/_distutils.py | 173 + .../pip/_internal/locations/_sysconfig.py | 213 + .../pip/_internal/locations/base.py | 81 + venv/Lib/site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 127 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6424 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 3578 bytes .../metadata/__pycache__/base.cpython-311.pyc | Bin 0 -> 38023 bytes .../__pycache__/pkg_resources.cpython-311.pyc | Bin 0 -> 16871 bytes .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 688 ++ .../_internal/metadata/importlib/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 370 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 3577 bytes .../__pycache__/_dists.cpython-311.pyc | Bin 0 -> 14593 bytes .../__pycache__/_envs.cpython-311.pyc | Bin 0 -> 12503 bytes .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 224 + .../pip/_internal/metadata/importlib/_envs.py | 188 + .../pip/_internal/metadata/pkg_resources.py | 270 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 287 bytes .../__pycache__/candidate.cpython-311.pyc | Bin 0 -> 2106 bytes .../__pycache__/direct_url.cpython-311.pyc | Bin 0 -> 12814 bytes .../format_control.cpython-311.pyc | Bin 0 -> 4670 bytes .../models/__pycache__/index.cpython-311.pyc | Bin 0 -> 1912 bytes .../installation_report.cpython-311.pyc | Bin 0 -> 2575 bytes .../models/__pycache__/link.cpython-311.pyc | Bin 0 -> 28674 bytes .../models/__pycache__/scheme.cpython-311.pyc | Bin 0 -> 1278 bytes .../__pycache__/search_scope.cpython-311.pyc | Bin 0 -> 5841 bytes .../selection_prefs.cpython-311.pyc | Bin 0 -> 2009 bytes .../__pycache__/target_python.cpython-311.pyc | Bin 0 -> 4771 bytes .../models/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 6434 bytes .../pip/_internal/models/candidate.py | 34 + .../pip/_internal/models/direct_url.py | 237 + .../pip/_internal/models/format_control.py | 80 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 53 + .../pip/_internal/models/link.py | 581 ++ .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 132 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 110 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 275 bytes .../network/__pycache__/auth.cpython-311.pyc | Bin 0 -> 24002 bytes .../network/__pycache__/cache.cpython-311.pyc | Bin 0 -> 5198 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 9590 bytes .../__pycache__/lazy_wheel.cpython-311.pyc | Bin 0 -> 13036 bytes .../__pycache__/session.cpython-311.pyc | Bin 0 -> 21447 bytes .../network/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2424 bytes .../__pycache__/xmlrpc.cpython-311.pyc | Bin 0 -> 3203 bytes .../pip/_internal/network/auth.py | 561 ++ .../pip/_internal/network/cache.py | 69 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 519 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 60 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 213 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 8476 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 11609 bytes .../__pycache__/prepare.cpython-311.pyc | Bin 0 -> 27959 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 219 bytes .../__pycache__/build_tracker.cpython-311.pyc | Bin 0 -> 8142 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 2290 bytes .../metadata_editable.cpython-311.pyc | Bin 0 -> 2326 bytes .../metadata_legacy.cpython-311.pyc | Bin 0 -> 3726 bytes .../build/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 1956 bytes .../wheel_editable.cpython-311.pyc | Bin 0 -> 2400 bytes .../__pycache__/wheel_legacy.cpython-311.pyc | Bin 0 -> 4507 bytes .../operations/build/build_tracker.py | 124 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 187 + .../pip/_internal/operations/freeze.py | 255 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 287 bytes .../editable_legacy.cpython-311.pyc | Bin 0 -> 2200 bytes .../install/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 40253 bytes .../operations/install/editable_legacy.py | 46 + .../pip/_internal/operations/install/wheel.py | 740 ++ .../pip/_internal/operations/prepare.py | 743 ++ .../site-packages/pip/_internal/pyproject.py | 179 + .../pip/_internal/req/__init__.py | 92 + .../req/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4401 bytes .../__pycache__/constructors.cpython-311.pyc | Bin 0 -> 20713 bytes .../req/__pycache__/req_file.cpython-311.pyc | Bin 0 -> 22758 bytes .../__pycache__/req_install.cpython-311.pyc | Bin 0 -> 38096 bytes .../req/__pycache__/req_set.cpython-311.pyc | Bin 0 -> 7969 bytes .../__pycache__/req_uninstall.cpython-311.pyc | Bin 0 -> 37495 bytes .../pip/_internal/req/constructors.py | 506 + .../pip/_internal/req/req_file.py | 552 ++ .../pip/_internal/req/req_install.py | 874 ++ .../pip/_internal/req/req_set.py | 119 + .../pip/_internal/req/req_uninstall.py | 650 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 213 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 1384 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 220 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 23810 bytes .../_internal/resolution/legacy/resolver.py | 600 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 224 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 9637 bytes .../__pycache__/candidates.cpython-311.pyc | Bin 0 -> 28811 bytes .../__pycache__/factory.cpython-311.pyc | Bin 0 -> 31936 bytes .../found_candidates.cpython-311.pyc | Bin 0 -> 6772 bytes .../__pycache__/provider.cpython-311.pyc | Bin 0 -> 11463 bytes .../__pycache__/reporter.cpython-311.pyc | Bin 0 -> 5454 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 11134 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 12435 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 555 ++ .../resolution/resolvelib/factory.py | 730 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 255 + .../resolution/resolvelib/reporter.py | 80 + .../resolution/resolvelib/requirements.py | 165 + .../resolution/resolvelib/resolver.py | 299 + .../pip/_internal/self_outdated_check.py | 242 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 208 bytes .../__pycache__/_jaraco_text.cpython-311.pyc | Bin 0 -> 4772 bytes .../utils/__pycache__/_log.cpython-311.pyc | Bin 0 -> 2029 bytes .../utils/__pycache__/appdirs.cpython-311.pyc | Bin 0 -> 2567 bytes .../utils/__pycache__/compat.cpython-311.pyc | Bin 0 -> 2275 bytes .../compatibility_tags.cpython-311.pyc | Bin 0 -> 6767 bytes .../__pycache__/datetime.cpython-311.pyc | Bin 0 -> 725 bytes .../__pycache__/deprecation.cpython-311.pyc | Bin 0 -> 4694 bytes .../direct_url_helpers.cpython-311.pyc | Bin 0 -> 3731 bytes .../__pycache__/egg_link.cpython-311.pyc | Bin 0 -> 3246 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 0 -> 2331 bytes .../__pycache__/entrypoints.cpython-311.pyc | Bin 0 -> 4253 bytes .../__pycache__/filesystem.cpython-311.pyc | Bin 0 -> 8238 bytes .../__pycache__/filetypes.cpython-311.pyc | Bin 0 -> 1324 bytes .../utils/__pycache__/glibc.cpython-311.pyc | Bin 0 -> 2620 bytes .../utils/__pycache__/hashes.cpython-311.pyc | Bin 0 -> 8779 bytes .../inject_securetransport.cpython-311.pyc | Bin 0 -> 1342 bytes .../utils/__pycache__/logging.cpython-311.pyc | Bin 0 -> 15467 bytes .../utils/__pycache__/misc.cpython-311.pyc | Bin 0 -> 37067 bytes .../utils/__pycache__/models.cpython-311.pyc | Bin 0 -> 2948 bytes .../__pycache__/packaging.cpython-311.pyc | Bin 0 -> 2815 bytes .../setuptools_build.cpython-311.pyc | Bin 0 -> 4880 bytes .../__pycache__/subprocess.cpython-311.pyc | Bin 0 -> 9902 bytes .../__pycache__/temp_dir.cpython-311.pyc | Bin 0 -> 11429 bytes .../__pycache__/unpacking.cpython-311.pyc | Bin 0 -> 12904 bytes .../utils/__pycache__/urls.cpython-311.pyc | Bin 0 -> 2701 bytes .../__pycache__/virtualenv.cpython-311.pyc | Bin 0 -> 4948 bytes .../utils/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 7118 bytes .../pip/_internal/utils/_jaraco_text.py | 109 + .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/egg_link.py | 72 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 153 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 151 + .../_internal/utils/inject_securetransport.py | 35 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 735 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 146 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 246 + .../pip/_internal/utils/unpacking.py | 257 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 136 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 643 bytes .../vcs/__pycache__/bazaar.cpython-311.pyc | Bin 0 -> 5868 bytes .../vcs/__pycache__/git.cpython-311.pyc | Bin 0 -> 21532 bytes .../vcs/__pycache__/mercurial.cpython-311.pyc | Bin 0 -> 8723 bytes .../__pycache__/subversion.cpython-311.pyc | Bin 0 -> 14611 bytes .../versioncontrol.cpython-311.pyc | Bin 0 -> 31880 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 355 + .../Lib/site-packages/pip/_vendor/__init__.py | 120 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5621 bytes .../_vendor/__pycache__/six.cpython-311.pyc | Bin 0 -> 46423 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 131593 bytes .../pip/_vendor/cachecontrol/__init__.py | 18 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 850 bytes .../__pycache__/_cmd.cpython-311.pyc | Bin 0 -> 2705 bytes .../__pycache__/adapter.cpython-311.pyc | Bin 0 -> 5512 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 3786 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1143 bytes .../__pycache__/controller.cpython-311.pyc | Bin 0 -> 16458 bytes .../__pycache__/filewrapper.cpython-311.pyc | Bin 0 -> 4245 bytes .../__pycache__/heuristics.cpython-311.pyc | Bin 0 -> 6690 bytes .../__pycache__/serialize.cpython-311.pyc | Bin 0 -> 8405 bytes .../__pycache__/wrapper.cpython-311.pyc | Bin 0 -> 971 bytes .../pip/_vendor/cachecontrol/_cmd.py | 61 + .../pip/_vendor/cachecontrol/adapter.py | 137 + .../pip/_vendor/cachecontrol/cache.py | 65 + .../_vendor/cachecontrol/caches/__init__.py | 9 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 425 bytes .../__pycache__/file_cache.cpython-311.pyc | Bin 0 -> 8408 bytes .../__pycache__/redis_cache.cpython-311.pyc | Bin 0 -> 2505 bytes .../_vendor/cachecontrol/caches/file_cache.py | 188 + .../cachecontrol/caches/redis_cache.py | 39 + .../pip/_vendor/cachecontrol/compat.py | 32 + .../pip/_vendor/cachecontrol/controller.py | 439 + .../pip/_vendor/cachecontrol/filewrapper.py | 111 + .../pip/_vendor/cachecontrol/heuristics.py | 139 + .../pip/_vendor/cachecontrol/serialize.py | 190 + .../pip/_vendor/cachecontrol/wrapper.py | 33 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 350 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 751 bytes .../certifi/__pycache__/core.cpython-311.pyc | Bin 0 -> 3373 bytes .../pip/_vendor/certifi/cacert.pem | 4589 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 108 + .../pip/_vendor/chardet/__init__.py | 115 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5082 bytes .../__pycache__/big5freq.cpython-311.pyc | Bin 0 -> 27212 bytes .../__pycache__/big5prober.cpython-311.pyc | Bin 0 -> 1687 bytes .../chardistribution.cpython-311.pyc | Bin 0 -> 11279 bytes .../charsetgroupprober.cpython-311.pyc | Bin 0 -> 4309 bytes .../__pycache__/charsetprober.cpython-311.pyc | Bin 0 -> 5555 bytes .../codingstatemachine.cpython-311.pyc | Bin 0 -> 4006 bytes .../codingstatemachinedict.cpython-311.pyc | Bin 0 -> 962 bytes .../__pycache__/cp949prober.cpython-311.pyc | Bin 0 -> 1696 bytes .../chardet/__pycache__/enums.cpython-311.pyc | Bin 0 -> 3397 bytes .../__pycache__/escprober.cpython-311.pyc | Bin 0 -> 4913 bytes .../chardet/__pycache__/escsm.cpython-311.pyc | Bin 0 -> 12652 bytes .../__pycache__/eucjpprober.cpython-311.pyc | Bin 0 -> 4739 bytes .../__pycache__/euckrfreq.cpython-311.pyc | Bin 0 -> 12095 bytes .../__pycache__/euckrprober.cpython-311.pyc | Bin 0 -> 1688 bytes .../__pycache__/euctwfreq.cpython-311.pyc | Bin 0 -> 27217 bytes .../__pycache__/euctwprober.cpython-311.pyc | Bin 0 -> 1688 bytes .../__pycache__/gb2312freq.cpython-311.pyc | Bin 0 -> 19139 bytes .../__pycache__/gb2312prober.cpython-311.pyc | Bin 0 -> 1703 bytes .../__pycache__/hebrewprober.cpython-311.pyc | Bin 0 -> 5692 bytes .../__pycache__/jisfreq.cpython-311.pyc | Bin 0 -> 22168 bytes .../__pycache__/johabfreq.cpython-311.pyc | Bin 0 -> 84672 bytes .../__pycache__/johabprober.cpython-311.pyc | Bin 0 -> 1694 bytes .../__pycache__/jpcntx.cpython-311.pyc | Bin 0 -> 40176 bytes .../langbulgarianmodel.cpython-311.pyc | Bin 0 -> 85846 bytes .../langgreekmodel.cpython-311.pyc | Bin 0 -> 79268 bytes .../langhebrewmodel.cpython-311.pyc | Bin 0 -> 80030 bytes .../langhungarianmodel.cpython-311.pyc | Bin 0 -> 85800 bytes .../langrussianmodel.cpython-311.pyc | Bin 0 -> 108747 bytes .../__pycache__/langthaimodel.cpython-311.pyc | Bin 0 -> 80208 bytes .../langturkishmodel.cpython-311.pyc | Bin 0 -> 80047 bytes .../__pycache__/latin1prober.cpython-311.pyc | Bin 0 -> 7343 bytes .../macromanprober.cpython-311.pyc | Bin 0 -> 7510 bytes .../mbcharsetprober.cpython-311.pyc | Bin 0 -> 4131 bytes .../mbcsgroupprober.cpython-311.pyc | Bin 0 -> 2001 bytes .../__pycache__/mbcssm.cpython-311.pyc | Bin 0 -> 31741 bytes .../__pycache__/resultdict.cpython-311.pyc | Bin 0 -> 780 bytes .../sbcharsetprober.cpython-311.pyc | Bin 0 -> 6406 bytes .../sbcsgroupprober.cpython-311.pyc | Bin 0 -> 2951 bytes .../__pycache__/sjisprober.cpython-311.pyc | Bin 0 -> 4844 bytes .../universaldetector.cpython-311.pyc | Bin 0 -> 12472 bytes .../__pycache__/utf1632prober.cpython-311.pyc | Bin 0 -> 10592 bytes .../__pycache__/utf8prober.cpython-311.pyc | Bin 0 -> 3479 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 515 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 261 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 147 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../__pycache__/chardetect.cpython-311.pyc | Bin 0 -> 4351 bytes .../pip/_vendor/chardet/cli/chardetect.py | 112 + .../pip/_vendor/chardet/codingstatemachine.py | 90 + .../_vendor/chardet/codingstatemachinedict.py | 19 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 85 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 261 + .../pip/_vendor/chardet/eucjpprober.py | 102 + .../pip/_vendor/chardet/euckrfreq.py | 196 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 388 + .../pip/_vendor/chardet/euctwprober.py | 47 + .../pip/_vendor/chardet/gb2312freq.py | 284 + .../pip/_vendor/chardet/gb2312prober.py | 47 + .../pip/_vendor/chardet/hebrewprober.py | 316 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 238 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4397 +++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5725 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/latin1prober.py | 147 + .../pip/_vendor/chardet/macromanprober.py | 162 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 57 + .../pip/_vendor/chardet/mbcssm.py | 661 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 217 bytes .../__pycache__/languages.cpython-311.pyc | Bin 0 -> 10817 bytes .../pip/_vendor/chardet/metadata/languages.py | 352 + .../pip/_vendor/chardet/resultdict.py | 16 + .../pip/_vendor/chardet/sbcharsetprober.py | 162 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 105 + .../pip/_vendor/chardet/universaldetector.py | 362 + .../pip/_vendor/chardet/utf1632prober.py | 225 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 584 bytes .../colorama/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 4582 bytes .../__pycache__/ansitowin32.cpython-311.pyc | Bin 0 -> 16228 bytes .../__pycache__/initialise.cpython-311.pyc | Bin 0 -> 3945 bytes .../__pycache__/win32.cpython-311.pyc | Bin 0 -> 7933 bytes .../__pycache__/winterm.cpython-311.pyc | Bin 0 -> 9159 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 277 + .../pip/_vendor/colorama/initialise.py | 121 + .../pip/_vendor/colorama/tests/__init__.py | 1 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 215 bytes .../__pycache__/ansi_test.cpython-311.pyc | Bin 0 -> 5860 bytes .../ansitowin32_test.cpython-311.pyc | Bin 0 -> 21527 bytes .../initialise_test.cpython-311.pyc | Bin 0 -> 14154 bytes .../__pycache__/isatty_test.cpython-311.pyc | Bin 0 -> 6719 bytes .../tests/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2894 bytes .../__pycache__/winterm_test.cpython-311.pyc | Bin 0 -> 7247 bytes .../pip/_vendor/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../_vendor/colorama/tests/initialise_test.py | 189 + .../pip/_vendor/colorama/tests/isatty_test.py | 57 + .../pip/_vendor/colorama/tests/utils.py | 49 + .../_vendor/colorama/tests/winterm_test.py | 131 + .../pip/_vendor/colorama/win32.py | 180 + .../pip/_vendor/colorama/winterm.py | 195 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1453 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 52319 bytes .../__pycache__/database.cpython-311.pyc | Bin 0 -> 72107 bytes .../distlib/__pycache__/index.cpython-311.pyc | Bin 0 -> 26696 bytes .../__pycache__/locators.cpython-311.pyc | Bin 0 -> 65872 bytes .../__pycache__/manifest.cpython-311.pyc | Bin 0 -> 17039 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 8175 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 47123 bytes .../__pycache__/resources.cpython-311.pyc | Bin 0 -> 19002 bytes .../__pycache__/scripts.cpython-311.pyc | Bin 0 -> 21278 bytes .../distlib/__pycache__/util.cpython-311.pyc | Bin 0 -> 97457 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 34584 bytes .../distlib/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 60388 bytes .../pip/_vendor/distlib/compat.py | 1116 +++ .../pip/_vendor/distlib/database.py | 1350 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1300 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 152 + .../pip/_vendor/distlib/metadata.py | 1076 +++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 437 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 97792 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 182784 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 108032 bytes .../site-packages/pip/_vendor/distlib/util.py | 1932 ++++ .../pip/_vendor/distlib/version.py | 739 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 91648 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 168448 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 101888 bytes .../pip/_vendor/distlib/wheel.py | 1082 +++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1206 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 340 bytes .../distro/__pycache__/distro.cpython-311.pyc | Bin 0 -> 57739 bytes .../pip/_vendor/distro/distro.py | 1399 +++ .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1107 bytes .../idna/__pycache__/codec.cpython-311.pyc | Bin 0 -> 5398 bytes .../idna/__pycache__/compat.cpython-311.pyc | Bin 0 -> 1024 bytes .../idna/__pycache__/core.cpython-311.pyc | Bin 0 -> 19459 bytes .../idna/__pycache__/idnadata.cpython-311.pyc | Bin 0 -> 38983 bytes .../__pycache__/intranges.cpython-311.pyc | Bin 0 -> 2992 bytes .../__pycache__/package_data.cpython-311.pyc | Bin 0 -> 227 bytes .../__pycache__/uts46data.cpython-311.pyc | Bin 0 -> 163207 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 400 + .../pip/_vendor/idna/idnadata.py | 2151 +++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8600 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2086 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 2387 bytes .../msgpack/__pycache__/ext.cpython-311.pyc | Bin 0 -> 9172 bytes .../__pycache__/fallback.cpython-311.pyc | Bin 0 -> 47160 bytes .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1010 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 651 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 572 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13238 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8006 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3694 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16534 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7649 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34372 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21357 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6692 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21884 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pkg_resources/__init__.py | 3361 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 160152 bytes .../pip/_vendor/platformdirs/__init__.py | 566 ++ .../pip/_vendor/platformdirs/__main__.py | 53 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 17505 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 2285 bytes .../__pycache__/android.cpython-311.pyc | Bin 0 -> 10471 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 10564 bytes .../__pycache__/macos.cpython-311.pyc | Bin 0 -> 6076 bytes .../__pycache__/unix.cpython-311.pyc | Bin 0 -> 13782 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 322 bytes .../__pycache__/windows.cpython-311.pyc | Bin 0 -> 13950 bytes .../pip/_vendor/platformdirs/android.py | 210 + .../pip/_vendor/platformdirs/api.py | 223 + .../pip/_vendor/platformdirs/macos.py | 91 + .../pip/_vendor/platformdirs/unix.py | 223 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 255 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3841 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 790 bytes .../__pycache__/cmdline.cpython-311.pyc | Bin 0 -> 30301 bytes .../__pycache__/console.cpython-311.pyc | Bin 0 -> 3053 bytes .../__pycache__/filter.cpython-311.pyc | Bin 0 -> 3514 bytes .../__pycache__/formatter.cpython-311.pyc | Bin 0 -> 4829 bytes .../__pycache__/lexer.cpython-311.pyc | Bin 0 -> 42317 bytes .../__pycache__/modeline.cpython-311.pyc | Bin 0 -> 1733 bytes .../__pycache__/plugin.cpython-311.pyc | Bin 0 -> 3746 bytes .../__pycache__/regexopt.cpython-311.pyc | Bin 0 -> 5040 bytes .../__pycache__/scanner.cpython-311.pyc | Bin 0 -> 4895 bytes .../__pycache__/sphinxext.cpython-311.pyc | Bin 0 -> 12840 bytes .../__pycache__/style.cpython-311.pyc | Bin 0 -> 7434 bytes .../__pycache__/token.cpython-311.pyc | Bin 0 -> 7474 bytes .../__pycache__/unistring.cpython-311.pyc | Bin 0 -> 33847 bytes .../pygments/__pycache__/util.cpython-311.pyc | Bin 0 -> 15699 bytes .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 40114 bytes .../pip/_vendor/pygments/formatter.py | 124 + .../_vendor/pygments/formatters/__init__.py | 158 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 7772 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 4232 bytes .../__pycache__/bbcode.cpython-311.pyc | Bin 0 -> 4488 bytes .../__pycache__/groff.cpython-311.pyc | Bin 0 -> 7861 bytes .../__pycache__/html.cpython-311.pyc | Bin 0 -> 42650 bytes .../__pycache__/img.cpython-311.pyc | Bin 0 -> 28578 bytes .../__pycache__/irc.cpython-311.pyc | Bin 0 -> 6414 bytes .../__pycache__/latex.cpython-311.pyc | Bin 0 -> 21814 bytes .../__pycache__/other.cpython-311.pyc | Bin 0 -> 7642 bytes .../__pycache__/pangomarkup.cpython-311.pyc | Bin 0 -> 3186 bytes .../__pycache__/rtf.cpython-311.pyc | Bin 0 -> 6853 bytes .../__pycache__/svg.cpython-311.pyc | Bin 0 -> 9673 bytes .../__pycache__/terminal.cpython-311.pyc | Bin 0 -> 6052 bytes .../__pycache__/terminal256.cpython-311.pyc | Bin 0 -> 16418 bytes .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 989 ++ .../pip/_vendor/pygments/formatters/img.py | 645 ++ .../pip/_vendor/pygments/formatters/irc.py | 154 + .../pip/_vendor/pygments/formatters/latex.py | 521 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 943 ++ .../pip/_vendor/pygments/lexers/__init__.py | 362 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 16358 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 64800 bytes .../lexers/__pycache__/python.cpython-311.pyc | Bin 0 -> 43314 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 559 ++ .../pip/_vendor/pygments/lexers/python.py | 1198 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 88 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 217 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 103 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4689 bytes .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 330 + .../pip/_vendor/pyparsing/__init__.py | 322 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8238 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 9129 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14876 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 295449 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 13716 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 54135 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 37856 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19519 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15207 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 16790 bytes .../pip/_vendor/pyparsing/actions.py | 217 + .../pip/_vendor/pyparsing/common.py | 432 + .../pip/_vendor/pyparsing/core.py | 6115 ++++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 656 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28798 bytes .../pip/_vendor/pyparsing/exceptions.py | 299 + .../pip/_vendor/pyparsing/helpers.py | 1100 +++ .../pip/_vendor/pyparsing/results.py | 796 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 361 + .../pip/_vendor/pyparsing/util.py | 284 + .../pip/_vendor/pyproject_hooks/__init__.py | 23 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 715 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 413 bytes .../__pycache__/_impl.cpython-311.pyc | Bin 0 -> 16679 bytes .../pip/_vendor/pyproject_hooks/_compat.py | 8 + .../pip/_vendor/pyproject_hooks/_impl.py | 330 + .../pyproject_hooks/_in_process/__init__.py | 18 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1175 bytes .../__pycache__/_in_process.cpython-311.pyc | Bin 0 -> 16497 bytes .../_in_process/_in_process.py | 353 + .../pip/_vendor/requests/__init__.py | 182 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6446 bytes .../__pycache__/__version__.cpython-311.pyc | Bin 0 -> 596 bytes .../_internal_utils.cpython-311.pyc | Bin 0 -> 2160 bytes .../__pycache__/adapters.cpython-311.pyc | Bin 0 -> 23213 bytes .../requests/__pycache__/api.cpython-311.pyc | Bin 0 -> 7513 bytes .../requests/__pycache__/auth.cpython-311.pyc | Bin 0 -> 14640 bytes .../__pycache__/certs.cpython-311.pyc | Bin 0 -> 992 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1818 bytes .../__pycache__/cookies.cpython-311.pyc | Bin 0 -> 27120 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8535 bytes .../requests/__pycache__/help.cpython-311.pyc | Bin 0 -> 4530 bytes .../__pycache__/hooks.cpython-311.pyc | Bin 0 -> 1260 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 38791 bytes .../__pycache__/packages.cpython-311.pyc | Bin 0 -> 840 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 29703 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 6247 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 6232 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 40266 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 50 + .../pip/_vendor/requests/adapters.py | 538 ++ .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 315 + .../pip/_vendor/requests/certs.py | 24 + .../pip/_vendor/requests/compat.py | 67 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 141 + .../pip/_vendor/requests/help.py | 131 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1034 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 833 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1094 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 763 bytes .../__pycache__/providers.cpython-311.pyc | Bin 0 -> 7081 bytes .../__pycache__/reporters.cpython-311.pyc | Bin 0 -> 2845 bytes .../__pycache__/resolvers.cpython-311.pyc | Bin 0 -> 29245 bytes .../__pycache__/structs.cpython-311.pyc | Bin 0 -> 11482 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 218 bytes .../collections_abc.cpython-311.pyc | Bin 0 -> 493 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 547 ++ .../pip/_vendor/resolvelib/structs.py | 170 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 274 + .../rich/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 7506 bytes .../rich/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 11584 bytes .../__pycache__/_cell_widths.cpython-311.pyc | Bin 0 -> 7845 bytes .../__pycache__/_emoji_codes.cpython-311.pyc | Bin 0 -> 208532 bytes .../_emoji_replace.cpython-311.pyc | Bin 0 -> 1944 bytes .../_export_format.cpython-311.pyc | Bin 0 -> 2335 bytes .../__pycache__/_extension.cpython-311.pyc | Bin 0 -> 645 bytes .../rich/__pycache__/_fileno.cpython-311.pyc | Bin 0 -> 987 bytes .../rich/__pycache__/_inspect.cpython-311.pyc | Bin 0 -> 14197 bytes .../__pycache__/_log_render.cpython-311.pyc | Bin 0 -> 4779 bytes .../rich/__pycache__/_loop.cpython-311.pyc | Bin 0 -> 2125 bytes .../__pycache__/_null_file.cpython-311.pyc | Bin 0 -> 4184 bytes .../__pycache__/_palettes.cpython-311.pyc | Bin 0 -> 5261 bytes .../rich/__pycache__/_pick.cpython-311.pyc | Bin 0 -> 806 bytes .../rich/__pycache__/_ratio.cpython-311.pyc | Bin 0 -> 7944 bytes .../__pycache__/_spinners.cpython-311.pyc | Bin 0 -> 13694 bytes .../rich/__pycache__/_stack.cpython-311.pyc | Bin 0 -> 1140 bytes .../rich/__pycache__/_timer.cpython-311.pyc | Bin 0 -> 993 bytes .../_win32_console.cpython-311.pyc | Bin 0 -> 30181 bytes .../rich/__pycache__/_windows.cpython-311.pyc | Bin 0 -> 2840 bytes .../_windows_renderer.cpython-311.pyc | Bin 0 -> 4031 bytes .../rich/__pycache__/_wrap.cpython-311.pyc | Bin 0 -> 2796 bytes .../rich/__pycache__/abc.cpython-311.pyc | Bin 0 -> 1937 bytes .../rich/__pycache__/align.cpython-311.pyc | Bin 0 -> 13479 bytes .../rich/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 10510 bytes .../rich/__pycache__/bar.cpython-311.pyc | Bin 0 -> 4559 bytes .../rich/__pycache__/box.cpython-311.pyc | Bin 0 -> 13001 bytes .../rich/__pycache__/cells.cpython-311.pyc | Bin 0 -> 6631 bytes .../rich/__pycache__/color.cpython-311.pyc | Bin 0 -> 27815 bytes .../__pycache__/color_triplet.cpython-311.pyc | Bin 0 -> 1885 bytes .../rich/__pycache__/columns.cpython-311.pyc | Bin 0 -> 10656 bytes .../rich/__pycache__/console.cpython-311.pyc | Bin 0 -> 123759 bytes .../__pycache__/constrain.cpython-311.pyc | Bin 0 -> 2477 bytes .../__pycache__/containers.cpython-311.pyc | Bin 0 -> 10818 bytes .../rich/__pycache__/control.cpython-311.pyc | Bin 0 -> 11909 bytes .../default_styles.cpython-311.pyc | Bin 0 -> 12612 bytes .../rich/__pycache__/diagnose.cpython-311.pyc | Bin 0 -> 1832 bytes .../rich/__pycache__/emoji.cpython-311.pyc | Bin 0 -> 4810 bytes .../rich/__pycache__/errors.cpython-311.pyc | Bin 0 -> 2341 bytes .../__pycache__/file_proxy.cpython-311.pyc | Bin 0 -> 4045 bytes .../rich/__pycache__/filesize.cpython-311.pyc | Bin 0 -> 3313 bytes .../__pycache__/highlighter.cpython-311.pyc | Bin 0 -> 10999 bytes .../rich/__pycache__/json.cpython-311.pyc | Bin 0 -> 6556 bytes .../rich/__pycache__/jupyter.cpython-311.pyc | Bin 0 -> 6416 bytes .../rich/__pycache__/layout.cpython-311.pyc | Bin 0 -> 23323 bytes .../rich/__pycache__/live.cpython-311.pyc | Bin 0 -> 21309 bytes .../__pycache__/live_render.cpython-311.pyc | Bin 0 -> 5157 bytes .../rich/__pycache__/logging.cpython-311.pyc | Bin 0 -> 14528 bytes .../rich/__pycache__/markup.cpython-311.pyc | Bin 0 -> 10450 bytes .../rich/__pycache__/measure.cpython-311.pyc | Bin 0 -> 7283 bytes .../rich/__pycache__/padding.cpython-311.pyc | Bin 0 -> 7499 bytes .../rich/__pycache__/pager.cpython-311.pyc | Bin 0 -> 2257 bytes .../rich/__pycache__/palette.cpython-311.pyc | Bin 0 -> 5990 bytes .../rich/__pycache__/panel.cpython-311.pyc | Bin 0 -> 12746 bytes .../rich/__pycache__/pretty.cpython-311.pyc | Bin 0 -> 44360 bytes .../rich/__pycache__/progress.cpython-311.pyc | Bin 0 -> 82626 bytes .../__pycache__/progress_bar.cpython-311.pyc | Bin 0 -> 11024 bytes .../rich/__pycache__/prompt.cpython-311.pyc | Bin 0 -> 16390 bytes .../rich/__pycache__/protocol.cpython-311.pyc | Bin 0 -> 2108 bytes .../rich/__pycache__/region.cpython-311.pyc | Bin 0 -> 671 bytes .../rich/__pycache__/repr.cpython-311.pyc | Bin 0 -> 7638 bytes .../rich/__pycache__/rule.cpython-311.pyc | Bin 0 -> 7177 bytes .../rich/__pycache__/scope.cpython-311.pyc | Bin 0 -> 4363 bytes .../rich/__pycache__/screen.cpython-311.pyc | Bin 0 -> 2786 bytes .../rich/__pycache__/segment.cpython-311.pyc | Bin 0 -> 31616 bytes .../rich/__pycache__/spinner.cpython-311.pyc | Bin 0 -> 6892 bytes .../rich/__pycache__/status.cpython-311.pyc | Bin 0 -> 6770 bytes .../rich/__pycache__/style.cpython-311.pyc | Bin 0 -> 35210 bytes .../rich/__pycache__/styled.cpython-311.pyc | Bin 0 -> 2451 bytes .../rich/__pycache__/syntax.cpython-311.pyc | Bin 0 -> 42661 bytes .../rich/__pycache__/table.cpython-311.pyc | Bin 0 -> 48812 bytes .../terminal_theme.cpython-311.pyc | Bin 0 -> 3717 bytes .../rich/__pycache__/text.cpython-311.pyc | Bin 0 -> 64970 bytes .../rich/__pycache__/theme.cpython-311.pyc | Bin 0 -> 7316 bytes .../rich/__pycache__/themes.cpython-311.pyc | Bin 0 -> 367 bytes .../__pycache__/traceback.cpython-311.pyc | Bin 0 -> 34579 bytes .../rich/__pycache__/tree.cpython-311.pyc | Bin 0 -> 12538 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 76 + .../pip/_vendor/rich/_extension.py | 10 + .../site-packages/pip/_vendor/rich/_fileno.py | 24 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 69 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 662 ++ .../pip/_vendor/rich/_windows.py | 72 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 56 + .../Lib/site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 240 + .../Lib/site-packages/pip/_vendor/rich/bar.py | 94 + .../Lib/site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 622 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2633 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 190 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 57 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 443 + .../site-packages/pip/_vendor/rich/live.py | 375 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 289 + .../site-packages/pip/_vendor/rich/markup.py | 246 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 308 + .../site-packages/pip/_vendor/rich/pretty.py | 994 ++ .../pip/_vendor/rich/progress.py | 1702 ++++ .../pip/_vendor/rich/progress_bar.py | 224 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 130 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 739 ++ .../site-packages/pip/_vendor/rich/spinner.py | 137 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 796 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 948 ++ .../site-packages/pip/_vendor/rich/table.py | 1002 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1307 +++ .../site-packages/pip/_vendor/rich/theme.py | 115 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 756 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + venv/Lib/site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 608 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 29058 bytes .../__pycache__/_asyncio.cpython-311.pyc | Bin 0 -> 5234 bytes .../__pycache__/_utils.cpython-311.pyc | Bin 0 -> 2574 bytes .../__pycache__/after.cpython-311.pyc | Bin 0 -> 1769 bytes .../__pycache__/before.cpython-311.pyc | Bin 0 -> 1603 bytes .../__pycache__/before_sleep.cpython-311.pyc | Bin 0 -> 2386 bytes .../tenacity/__pycache__/nap.cpython-311.pyc | Bin 0 -> 1577 bytes .../__pycache__/retry.cpython-311.pyc | Bin 0 -> 15953 bytes .../tenacity/__pycache__/stop.cpython-311.pyc | Bin 0 -> 6306 bytes .../__pycache__/tornadoweb.cpython-311.pyc | Bin 0 -> 2923 bytes .../tenacity/__pycache__/wait.cpython-311.pyc | Bin 0 -> 13312 bytes .../pip/_vendor/tenacity/_asyncio.py | 94 + .../pip/_vendor/tenacity/_utils.py | 76 + .../pip/_vendor/tenacity/after.py | 51 + .../pip/_vendor/tenacity/before.py | 46 + .../pip/_vendor/tenacity/before_sleep.py | 71 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 272 + .../pip/_vendor/tenacity/stop.py | 103 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 228 + .../pip/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 422 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 30861 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4501 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 414 bytes .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../pip/_vendor/typing_extensions.py | 3072 ++++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3720 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 18308 bytes .../__pycache__/_version.cpython-311.pyc | Bin 0 -> 230 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 22076 bytes .../connectionpool.cpython-311.pyc | Bin 0 -> 38288 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 16134 bytes .../__pycache__/fields.cpython-311.pyc | Bin 0 -> 11427 bytes .../__pycache__/filepost.cpython-311.pyc | Bin 0 -> 4508 bytes .../__pycache__/poolmanager.cpython-311.pyc | Bin 0 -> 21626 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 6671 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 36554 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 572 ++ .../pip/_vendor/urllib3/connectionpool.py | 1132 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 216 bytes .../_appengine_environ.cpython-311.pyc | Bin 0 -> 1955 bytes .../__pycache__/appengine.cpython-311.pyc | Bin 0 -> 12162 bytes .../__pycache__/ntlmpool.cpython-311.pyc | Bin 0 -> 6239 bytes .../__pycache__/pyopenssl.cpython-311.pyc | Bin 0 -> 25748 bytes .../securetransport.cpython-311.pyc | Bin 0 -> 36855 bytes .../contrib/__pycache__/socks.cpython-311.pyc | Bin 0 -> 8100 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 233 bytes .../__pycache__/bindings.cpython-311.pyc | Bin 0 -> 16980 bytes .../__pycache__/low_level.cpython-311.pyc | Bin 0 -> 15617 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 921 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 217 bytes .../packages/__pycache__/six.cpython-311.pyc | Bin 0 -> 46459 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 227 bytes .../__pycache__/makefile.cpython-311.pyc | Bin 0 -> 1974 bytes .../weakref_finalize.cpython-311.pyc | Bin 0 -> 8002 bytes .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../pip/_vendor/urllib3/packages/six.py | 1076 +++ .../pip/_vendor/urllib3/poolmanager.py | 537 + .../pip/_vendor/urllib3/request.py | 170 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1419 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 5146 bytes .../util/__pycache__/proxy.cpython-311.pyc | Bin 0 -> 1728 bytes .../util/__pycache__/queue.cpython-311.pyc | Bin 0 -> 1511 bytes .../util/__pycache__/request.cpython-311.pyc | Bin 0 -> 4631 bytes .../util/__pycache__/response.cpython-311.pyc | Bin 0 -> 3500 bytes .../util/__pycache__/retry.cpython-311.pyc | Bin 0 -> 22768 bytes .../util/__pycache__/ssl_.cpython-311.pyc | Bin 0 -> 16831 bytes .../ssl_match_hostname.cpython-311.pyc | Bin 0 -> 5810 bytes .../__pycache__/ssltransport.cpython-311.pyc | Bin 0 -> 11639 bytes .../util/__pycache__/timeout.cpython-311.pyc | Bin 0 -> 11353 bytes .../util/__pycache__/url.cpython-311.pyc | Bin 0 -> 17594 bytes .../util/__pycache__/wait.cpython-311.pyc | Bin 0 -> 5013 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 271 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + venv/Lib/site-packages/pip/_vendor/vendor.txt | 23 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12893 bytes .../__pycache__/labels.cpython-311.pyc | Bin 0 -> 7293 bytes .../__pycache__/mklabels.cpython-311.pyc | Bin 0 -> 3221 bytes .../__pycache__/tests.cpython-311.pyc | Bin 0 -> 11199 bytes .../x_user_defined.cpython-311.pyc | Bin 0 -> 3573 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + venv/Lib/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3296 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 159582 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 210 bytes .../__pycache__/appdirs.cpython-311.pyc | Bin 0 -> 29458 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 16003 bytes .../pkg_resources/_vendor/appdirs.py | 608 ++ .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 844 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10761 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4288 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5573 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1406 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6504 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7505 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8379 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6401 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../pkg_resources/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 217 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 9440 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20303 bytes .../pkg_resources/_vendor/jaraco/context.py | 213 + .../pkg_resources/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26620 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 311 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 167972 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 26963 bytes .../_vendor/more_itertools/more.py | 4316 +++++++++ .../_vendor/more_itertools/recipes.py | 698 ++ .../_vendor/packaging/__about__.py | 26 + .../_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 661 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 582 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13248 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8016 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3704 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16553 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7668 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34382 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21367 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6702 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21894 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../pkg_resources/_vendor/packaging/tags.py | 487 + .../pkg_resources/_vendor/packaging/utils.py | 136 + .../_vendor/packaging/version.py | 504 + .../_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8355 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8481 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14803 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 277655 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12945 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53646 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36329 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19525 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15383 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14282 bytes .../_vendor/pyparsing/actions.py | 207 + .../pkg_resources/_vendor/pyparsing/common.py | 424 + .../pkg_resources/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28018 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../_vendor/pyparsing/helpers.py | 1088 +++ .../_vendor/pyparsing/results.py | 760 ++ .../_vendor/pyparsing/testing.py | 331 + .../_vendor/pyparsing/unicode.py | 352 + .../pkg_resources/_vendor/pyparsing/util.py | 235 + .../pkg_resources/_vendor/zipp.py | 329 + .../pkg_resources/extern/__init__.py | 76 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4329 bytes .../psycopg2-2.9.9.dist-info/INSTALLER | 1 + .../psycopg2-2.9.9.dist-info/LICENSE | 49 + .../psycopg2-2.9.9.dist-info/METADATA | 110 + .../psycopg2-2.9.9.dist-info/RECORD | 30 + .../psycopg2-2.9.9.dist-info/REQUESTED | 0 .../psycopg2-2.9.9.dist-info/WHEEL | 5 + .../psycopg2-2.9.9.dist-info/top_level.txt | 1 + venv/Lib/site-packages/psycopg2/__init__.py | 126 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4104 bytes .../__pycache__/_ipaddress.cpython-311.pyc | Bin 0 -> 2923 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 7989 bytes .../__pycache__/_range.cpython-311.pyc | Bin 0 -> 22691 bytes .../__pycache__/errorcodes.cpython-311.pyc | Bin 0 -> 14512 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 585 bytes .../__pycache__/extensions.cpython-311.pyc | Bin 0 -> 9219 bytes .../__pycache__/extras.cpython-311.pyc | Bin 0 -> 68280 bytes .../psycopg2/__pycache__/pool.cpython-311.pyc | Bin 0 -> 8302 bytes .../psycopg2/__pycache__/sql.cpython-311.pyc | Bin 0 -> 20539 bytes .../psycopg2/__pycache__/tz.cpython-311.pyc | Bin 0 -> 6444 bytes venv/Lib/site-packages/psycopg2/_ipaddress.py | 90 + venv/Lib/site-packages/psycopg2/_json.py | 199 + .../psycopg2/_psycopg.cp311-win_amd64.pyd | Bin 0 -> 2416128 bytes venv/Lib/site-packages/psycopg2/_range.py | 554 ++ venv/Lib/site-packages/psycopg2/errorcodes.py | 449 + venv/Lib/site-packages/psycopg2/errors.py | 38 + venv/Lib/site-packages/psycopg2/extensions.py | 213 + venv/Lib/site-packages/psycopg2/extras.py | 1340 +++ venv/Lib/site-packages/psycopg2/pool.py | 187 + venv/Lib/site-packages/psycopg2/sql.py | 455 + venv/Lib/site-packages/psycopg2/tz.py | 158 + .../setuptools-65.5.0.dist-info/INSTALLER | 1 + .../setuptools-65.5.0.dist-info/LICENSE | 19 + .../setuptools-65.5.0.dist-info/METADATA | 144 + .../setuptools-65.5.0.dist-info/RECORD | 466 + .../setuptools-65.5.0.dist-info/REQUESTED | 0 .../setuptools-65.5.0.dist-info/WHEEL | 5 + .../entry_points.txt | 57 + .../setuptools-65.5.0.dist-info/top_level.txt | 3 + venv/Lib/site-packages/setuptools/__init__.py | 247 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12919 bytes .../_deprecation_warning.cpython-311.pyc | Bin 0 -> 654 bytes .../__pycache__/_entry_points.cpython-311.pyc | Bin 0 -> 4803 bytes .../__pycache__/_imp.cpython-311.pyc | Bin 0 -> 3667 bytes .../__pycache__/_importlib.cpython-311.pyc | Bin 0 -> 1967 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1166 bytes .../__pycache__/_path.cpython-311.pyc | Bin 0 -> 1487 bytes .../__pycache__/_reqs.cpython-311.pyc | Bin 0 -> 1148 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10176 bytes .../__pycache__/build_meta.cpython-311.pyc | Bin 0 -> 28109 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 1302 bytes .../__pycache__/depends.cpython-311.pyc | Bin 0 -> 7987 bytes .../__pycache__/discovery.cpython-311.pyc | Bin 0 -> 31131 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 64069 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 2963 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 6819 bytes .../__pycache__/glob.cpython-311.pyc | Bin 0 -> 6576 bytes .../__pycache__/installer.cpython-311.pyc | Bin 0 -> 5626 bytes .../__pycache__/launch.cpython-311.pyc | Bin 0 -> 1542 bytes .../__pycache__/logging.cpython-311.pyc | Bin 0 -> 2060 bytes .../__pycache__/monkey.cpython-311.pyc | Bin 0 -> 7019 bytes .../__pycache__/msvc.cpython-311.pyc | Bin 0 -> 64192 bytes .../__pycache__/namespaces.cpython-311.pyc | Bin 0 -> 5674 bytes .../__pycache__/package_index.cpython-311.pyc | Bin 0 -> 60769 bytes .../__pycache__/py34compat.cpython-311.pyc | Bin 0 -> 729 bytes .../__pycache__/sandbox.cpython-311.pyc | Bin 0 -> 27345 bytes .../__pycache__/unicode_utils.cpython-311.pyc | Bin 0 -> 1831 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 449 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 15505 bytes .../windows_support.cpython-311.pyc | Bin 0 -> 1446 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 24 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 784 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 2934 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 875 bytes .../__pycache__/_macos_compat.cpython-311.pyc | Bin 0 -> 584 bytes .../__pycache__/_msvccompiler.cpython-311.pyc | Bin 0 -> 25119 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10671 bytes .../__pycache__/bcppcompiler.cpython-311.pyc | Bin 0 -> 13497 bytes .../__pycache__/ccompiler.cpython-311.pyc | Bin 0 -> 46396 bytes .../__pycache__/cmd.cpython-311.pyc | Bin 0 -> 18910 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 6059 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 10003 bytes .../cygwinccompiler.cpython-311.pyc | Bin 0 -> 13627 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 336 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 4003 bytes .../__pycache__/dir_util.cpython-311.pyc | Bin 0 -> 10378 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 55425 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 6809 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 10190 bytes .../__pycache__/fancy_getopt.cpython-311.pyc | Bin 0 -> 17254 bytes .../__pycache__/file_util.cpython-311.pyc | Bin 0 -> 10698 bytes .../__pycache__/filelist.cpython-311.pyc | Bin 0 -> 17644 bytes .../__pycache__/log.cpython-311.pyc | Bin 0 -> 3944 bytes .../__pycache__/msvc9compiler.cpython-311.pyc | Bin 0 -> 33602 bytes .../__pycache__/msvccompiler.cpython-311.pyc | Bin 0 -> 27004 bytes .../__pycache__/py38compat.cpython-311.pyc | Bin 0 -> 636 bytes .../__pycache__/py39compat.cpython-311.pyc | Bin 0 -> 1004 bytes .../__pycache__/spawn.cpython-311.pyc | Bin 0 -> 4473 bytes .../__pycache__/sysconfig.cpython-311.pyc | Bin 0 -> 22000 bytes .../__pycache__/text_file.cpython-311.pyc | Bin 0 -> 11285 bytes .../__pycache__/unixccompiler.cpython-311.pyc | Bin 0 -> 16541 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 20895 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 11361 bytes .../versionpredicate.cpython-311.pyc | Bin 0 -> 7761 bytes .../setuptools/_distutils/_collections.py | 56 + .../setuptools/_distutils/_functools.py | 20 + .../setuptools/_distutils/_macos_compat.py | 12 + .../setuptools/_distutils/_msvccompiler.py | 572 ++ .../setuptools/_distutils/archive_util.py | 280 + .../setuptools/_distutils/bcppcompiler.py | 408 + .../setuptools/_distutils/ccompiler.py | 1220 +++ .../setuptools/_distutils/cmd.py | 436 + .../setuptools/_distutils/command/__init__.py | 25 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 556 bytes .../_framework_compat.cpython-311.pyc | Bin 0 -> 2797 bytes .../command/__pycache__/bdist.cpython-311.pyc | Bin 0 -> 6050 bytes .../__pycache__/bdist_dumb.cpython-311.pyc | Bin 0 -> 5775 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 23309 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 6105 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 7808 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 30350 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 17626 bytes .../__pycache__/build_scripts.cpython-311.pyc | Bin 0 -> 7877 bytes .../command/__pycache__/check.cpython-311.pyc | Bin 0 -> 7539 bytes .../command/__pycache__/clean.cpython-311.pyc | Bin 0 -> 3207 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 16270 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 29458 bytes .../__pycache__/install_data.cpython-311.pyc | Bin 0 -> 3792 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 5218 bytes .../install_headers.cpython-311.pyc | Bin 0 -> 2375 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 8707 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 3172 bytes .../__pycache__/py37compat.cpython-311.pyc | Bin 0 -> 1553 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 15539 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 23847 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 10488 bytes .../_distutils/command/_framework_compat.py | 55 + .../setuptools/_distutils/command/bdist.py | 157 + .../_distutils/command/bdist_dumb.py | 144 + .../_distutils/command/bdist_rpm.py | 615 ++ .../setuptools/_distutils/command/build.py | 153 + .../_distutils/command/build_clib.py | 208 + .../_distutils/command/build_ext.py | 787 ++ .../setuptools/_distutils/command/build_py.py | 407 + .../_distutils/command/build_scripts.py | 173 + .../setuptools/_distutils/command/check.py | 151 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 377 + .../setuptools/_distutils/command/install.py | 814 ++ .../_distutils/command/install_data.py | 84 + .../_distutils/command/install_egg_info.py | 91 + .../_distutils/command/install_headers.py | 45 + .../_distutils/command/install_lib.py | 238 + .../_distutils/command/install_scripts.py | 61 + .../_distutils/command/py37compat.py | 31 + .../setuptools/_distutils/command/register.py | 319 + .../setuptools/_distutils/command/sdist.py | 531 + .../setuptools/_distutils/command/upload.py | 205 + .../setuptools/_distutils/config.py | 139 + .../setuptools/_distutils/core.py | 291 + .../setuptools/_distutils/cygwinccompiler.py | 364 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 96 + .../setuptools/_distutils/dir_util.py | 243 + .../setuptools/_distutils/dist.py | 1286 +++ .../setuptools/_distutils/errors.py | 127 + .../setuptools/_distutils/extension.py | 248 + .../setuptools/_distutils/fancy_getopt.py | 470 + .../setuptools/_distutils/file_util.py | 249 + .../setuptools/_distutils/filelist.py | 371 + .../setuptools/_distutils/log.py | 80 + .../setuptools/_distutils/msvc9compiler.py | 832 ++ .../setuptools/_distutils/msvccompiler.py | 695 ++ .../setuptools/_distutils/py38compat.py | 8 + .../setuptools/_distutils/py39compat.py | 22 + .../setuptools/_distutils/spawn.py | 109 + .../setuptools/_distutils/sysconfig.py | 558 ++ .../setuptools/_distutils/text_file.py | 287 + .../setuptools/_distutils/unixccompiler.py | 401 + .../setuptools/_distutils/util.py | 513 + .../setuptools/_distutils/version.py | 358 + .../setuptools/_distutils/versionpredicate.py | 175 + .../site-packages/setuptools/_entry_points.py | 86 + venv/Lib/site-packages/setuptools/_imp.py | 82 + .../site-packages/setuptools/_importlib.py | 47 + .../site-packages/setuptools/_itertools.py | 23 + venv/Lib/site-packages/setuptools/_path.py | 29 + venv/Lib/site-packages/setuptools/_reqs.py | 19 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 207 bytes .../__pycache__/ordered_set.cpython-311.pyc | Bin 0 -> 21793 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 107624 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 16000 bytes .../_vendor/importlib_metadata/__init__.py | 1047 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 58246 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 3859 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 2206 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 2728 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 3646 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 2609 bytes .../__pycache__/_meta.cpython-311.pyc | Bin 0 -> 3013 bytes .../__pycache__/_text.cpython-311.pyc | Bin 0 -> 4404 bytes .../_vendor/importlib_metadata/_adapters.py | 68 + .../importlib_metadata/_collections.py | 30 + .../_vendor/importlib_metadata/_compat.py | 71 + .../_vendor/importlib_metadata/_functools.py | 104 + .../_vendor/importlib_metadata/_itertools.py | 73 + .../_vendor/importlib_metadata/_meta.py | 48 + .../_vendor/importlib_metadata/_text.py | 99 + .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 841 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10758 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4285 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5570 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1403 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6501 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7502 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8376 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6398 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../setuptools/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 214 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 9437 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20294 bytes .../setuptools/_vendor/jaraco/context.py | 213 + .../setuptools/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26608 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 307 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 149194 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 23776 bytes .../setuptools/_vendor/more_itertools/more.py | 3824 ++++++++ .../_vendor/more_itertools/recipes.py | 620 ++ .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 26 + .../setuptools/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 658 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 579 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13245 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8013 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3701 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16547 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7662 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34379 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21364 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6699 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21891 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../setuptools/_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../setuptools/_vendor/packaging/tags.py | 487 + .../setuptools/_vendor/packaging/utils.py | 136 + .../setuptools/_vendor/packaging/version.py | 504 + .../setuptools/_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8352 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8478 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14800 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 277652 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12942 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53643 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36326 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19522 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15380 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14279 bytes .../setuptools/_vendor/pyparsing/actions.py | 207 + .../setuptools/_vendor/pyparsing/common.py | 424 + .../setuptools/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28015 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../setuptools/_vendor/pyparsing/helpers.py | 1088 +++ .../setuptools/_vendor/pyparsing/results.py | 760 ++ .../setuptools/_vendor/pyparsing/testing.py | 331 + .../setuptools/_vendor/pyparsing/unicode.py | 352 + .../setuptools/_vendor/pyparsing/util.py | 235 + .../setuptools/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 429 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 30868 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4508 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 421 bytes .../setuptools/_vendor/tomli/_parser.py | 691 ++ .../setuptools/_vendor/tomli/_re.py | 107 + .../setuptools/_vendor/tomli/_types.py | 10 + .../setuptools/_vendor/typing_extensions.py | 2296 +++++ .../site-packages/setuptools/_vendor/zipp.py | 329 + .../site-packages/setuptools/archive_util.py | 213 + .../site-packages/setuptools/build_meta.py | 511 + venv/Lib/site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli-arm64.exe | Bin 0 -> 137216 bytes venv/Lib/site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 648 bytes .../command/__pycache__/alias.cpython-311.pyc | Bin 0 -> 3915 bytes .../__pycache__/bdist_egg.cpython-311.pyc | Bin 0 -> 25597 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 2203 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 7009 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 4136 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 22023 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 23189 bytes .../__pycache__/develop.cpython-311.pyc | Bin 0 -> 10931 bytes .../__pycache__/dist_info.cpython-311.pyc | Bin 0 -> 7993 bytes .../__pycache__/easy_install.cpython-311.pyc | Bin 0 -> 119348 bytes .../editable_wheel.cpython-311.pyc | Bin 0 -> 51426 bytes .../__pycache__/egg_info.cpython-311.pyc | Bin 0 -> 39846 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 6828 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 4141 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 6423 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 4292 bytes .../__pycache__/py36compat.cpython-311.pyc | Bin 0 -> 8049 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 1139 bytes .../__pycache__/rotate.cpython-311.pyc | Bin 0 -> 4199 bytes .../__pycache__/saveopts.cpython-311.pyc | Bin 0 -> 1379 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 13451 bytes .../__pycache__/setopt.cpython-311.pyc | Bin 0 -> 7691 bytes .../command/__pycache__/test.cpython-311.pyc | Bin 0 -> 14632 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 1103 bytes .../__pycache__/upload_docs.cpython-311.pyc | Bin 0 -> 11954 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 457 + .../setuptools/command/bdist_rpm.py | 40 + .../site-packages/setuptools/command/build.py | 146 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 383 + .../setuptools/command/build_py.py | 368 + .../setuptools/command/develop.py | 193 + .../setuptools/command/dist_info.py | 142 + .../setuptools/command/easy_install.py | 2312 +++++ .../setuptools/command/editable_wheel.py | 844 ++ .../setuptools/command/egg_info.py | 763 ++ .../setuptools/command/install.py | 139 + .../setuptools/command/install_egg_info.py | 63 + .../setuptools/command/install_lib.py | 122 + .../setuptools/command/install_scripts.py | 70 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 210 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 251 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 213 + .../setuptools/config/__init__.py | 35 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2043 bytes .../_apply_pyprojecttoml.cpython-311.pyc | Bin 0 -> 22546 bytes .../config/__pycache__/expand.cpython-311.pyc | Bin 0 -> 28257 bytes .../__pycache__/pyprojecttoml.cpython-311.pyc | Bin 0 -> 27455 bytes .../__pycache__/setupcfg.cpython-311.pyc | Bin 0 -> 33039 bytes .../setuptools/config/_apply_pyprojecttoml.py | 377 + .../config/_validate_pyproject/__init__.py | 34 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2331 bytes .../error_reporting.cpython-311.pyc | Bin 0 -> 20222 bytes .../extra_validations.cpython-311.pyc | Bin 0 -> 1880 bytes .../fastjsonschema_exceptions.cpython-311.pyc | Bin 0 -> 3255 bytes ...fastjsonschema_validations.cpython-311.pyc | Bin 0 -> 192653 bytes .../__pycache__/formats.cpython-311.pyc | Bin 0 -> 14370 bytes .../_validate_pyproject/error_reporting.py | 318 + .../_validate_pyproject/extra_validations.py | 36 + .../fastjsonschema_exceptions.py | 51 + .../fastjsonschema_validations.py | 1035 ++ .../config/_validate_pyproject/formats.py | 259 + .../site-packages/setuptools/config/expand.py | 462 + .../setuptools/config/pyprojecttoml.py | 493 + .../setuptools/config/setupcfg.py | 762 ++ venv/Lib/site-packages/setuptools/dep_util.py | 25 + venv/Lib/site-packages/setuptools/depends.py | 176 + .../Lib/site-packages/setuptools/discovery.py | 600 ++ venv/Lib/site-packages/setuptools/dist.py | 1222 +++ venv/Lib/site-packages/setuptools/errors.py | 58 + .../Lib/site-packages/setuptools/extension.py | 148 + .../setuptools/extern/__init__.py | 76 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4407 bytes venv/Lib/site-packages/setuptools/glob.py | 167 + venv/Lib/site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui-arm64.exe | Bin 0 -> 137728 bytes venv/Lib/site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../Lib/site-packages/setuptools/installer.py | 104 + venv/Lib/site-packages/setuptools/launch.py | 36 + venv/Lib/site-packages/setuptools/logging.py | 36 + venv/Lib/site-packages/setuptools/monkey.py | 165 + venv/Lib/site-packages/setuptools/msvc.py | 1703 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1126 +++ .../site-packages/setuptools/py34compat.py | 13 + venv/Lib/site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + venv/Lib/site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + venv/Lib/site-packages/setuptools/version.py | 6 + venv/Lib/site-packages/setuptools/wheel.py | 222 + .../setuptools/windows_support.py | 29 + .../werkzeug-2.3.7.dist-info/INSTALLER | 1 + .../werkzeug-2.3.7.dist-info/LICENSE.rst | 28 + .../werkzeug-2.3.7.dist-info/METADATA | 118 + .../werkzeug-2.3.7.dist-info/RECORD | 126 + .../werkzeug-2.3.7.dist-info/REQUESTED | 0 .../werkzeug-2.3.7.dist-info/WHEEL | 4 + venv/Lib/site-packages/werkzeug/__init__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 434 bytes .../__pycache__/_internal.cpython-311.pyc | Bin 0 -> 15528 bytes .../__pycache__/_reloader.cpython-311.pyc | Bin 0 -> 22673 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 36534 bytes .../__pycache__/formparser.cpython-311.pyc | Bin 0 -> 21086 bytes .../werkzeug/__pycache__/http.cpython-311.pyc | Bin 0 -> 59296 bytes .../__pycache__/local.cpython-311.pyc | Bin 0 -> 31233 bytes .../__pycache__/security.cpython-311.pyc | Bin 0 -> 8187 bytes .../__pycache__/serving.cpython-311.pyc | Bin 0 -> 49865 bytes .../werkzeug/__pycache__/test.cpython-311.pyc | Bin 0 -> 67490 bytes .../__pycache__/testapp.cpython-311.pyc | Bin 0 -> 9204 bytes .../werkzeug/__pycache__/urls.cpython-311.pyc | Bin 0 -> 60106 bytes .../__pycache__/user_agent.cpython-311.pyc | Bin 0 -> 2331 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 30270 bytes .../werkzeug/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 36736 bytes venv/Lib/site-packages/werkzeug/_internal.py | 330 + venv/Lib/site-packages/werkzeug/_reloader.py | 458 + .../werkzeug/datastructures/__init__.py | 34 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2119 bytes .../__pycache__/accept.cpython-311.pyc | Bin 0 -> 15702 bytes .../__pycache__/auth.cpython-311.pyc | Bin 0 -> 23129 bytes .../__pycache__/cache_control.cpython-311.pyc | Bin 0 -> 8691 bytes .../__pycache__/csp.cpython-311.pyc | Bin 0 -> 5966 bytes .../__pycache__/etag.cpython-311.pyc | Bin 0 -> 5713 bytes .../__pycache__/file_storage.cpython-311.pyc | Bin 0 -> 8735 bytes .../__pycache__/headers.cpython-311.pyc | Bin 0 -> 27712 bytes .../__pycache__/mixins.cpython-311.pyc | Bin 0 -> 13148 bytes .../__pycache__/range.cpython-311.pyc | Bin 0 -> 8957 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 53248 bytes .../werkzeug/datastructures/accept.py | 326 + .../werkzeug/datastructures/accept.pyi | 54 + .../werkzeug/datastructures/auth.py | 510 + .../werkzeug/datastructures/cache_control.py | 175 + .../werkzeug/datastructures/cache_control.pyi | 109 + .../werkzeug/datastructures/csp.py | 94 + .../werkzeug/datastructures/csp.pyi | 169 + .../werkzeug/datastructures/etag.py | 95 + .../werkzeug/datastructures/etag.pyi | 30 + .../werkzeug/datastructures/file_storage.py | 196 + .../werkzeug/datastructures/file_storage.pyi | 47 + .../werkzeug/datastructures/headers.py | 566 ++ .../werkzeug/datastructures/headers.pyi | 109 + .../werkzeug/datastructures/mixins.py | 242 + .../werkzeug/datastructures/mixins.pyi | 97 + .../werkzeug/datastructures/range.py | 180 + .../werkzeug/datastructures/range.pyi | 57 + .../werkzeug/datastructures/structures.py | 1006 ++ .../werkzeug/datastructures/structures.pyi | 208 + .../site-packages/werkzeug/debug/__init__.py | 534 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 24619 bytes .../debug/__pycache__/console.cpython-311.pyc | Bin 0 -> 13439 bytes .../debug/__pycache__/repr.cpython-311.pyc | Bin 0 -> 16175 bytes .../debug/__pycache__/tbtools.cpython-311.pyc | Bin 0 -> 17965 bytes .../site-packages/werkzeug/debug/console.py | 219 + venv/Lib/site-packages/werkzeug/debug/repr.py | 283 + .../werkzeug/debug/shared/ICON_LICENSE.md | 6 + .../werkzeug/debug/shared/console.png | Bin 0 -> 507 bytes .../werkzeug/debug/shared/debugger.js | 360 + .../werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes .../werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes .../werkzeug/debug/shared/style.css | 150 + .../site-packages/werkzeug/debug/tbtools.py | 437 + venv/Lib/site-packages/werkzeug/exceptions.py | 879 ++ venv/Lib/site-packages/werkzeug/formparser.py | 547 ++ venv/Lib/site-packages/werkzeug/http.py | 1538 +++ venv/Lib/site-packages/werkzeug/local.py | 643 ++ .../werkzeug/middleware/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 208 bytes .../__pycache__/dispatcher.cpython-311.pyc | Bin 0 -> 3492 bytes .../__pycache__/http_proxy.cpython-311.pyc | Bin 0 -> 10977 bytes .../__pycache__/lint.cpython-311.pyc | Bin 0 -> 20804 bytes .../__pycache__/profiler.cpython-311.pyc | Bin 0 -> 6992 bytes .../__pycache__/proxy_fix.cpython-311.pyc | Bin 0 -> 7681 bytes .../__pycache__/shared_data.cpython-311.pyc | Bin 0 -> 13850 bytes .../werkzeug/middleware/dispatcher.py | 80 + .../werkzeug/middleware/http_proxy.py | 235 + .../site-packages/werkzeug/middleware/lint.py | 420 + .../werkzeug/middleware/profiler.py | 141 + .../werkzeug/middleware/proxy_fix.py | 182 + .../werkzeug/middleware/shared_data.py | 282 + venv/Lib/site-packages/werkzeug/py.typed | 0 .../werkzeug/routing/__init__.py | 133 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5073 bytes .../__pycache__/converters.cpython-311.pyc | Bin 0 -> 12881 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8860 bytes .../routing/__pycache__/map.cpython-311.pyc | Bin 0 -> 42159 bytes .../__pycache__/matcher.cpython-311.pyc | Bin 0 -> 9050 bytes .../routing/__pycache__/rules.cpython-311.pyc | Bin 0 -> 41423 bytes .../werkzeug/routing/converters.py | 270 + .../werkzeug/routing/exceptions.py | 148 + .../Lib/site-packages/werkzeug/routing/map.py | 977 ++ .../site-packages/werkzeug/routing/matcher.py | 202 + .../site-packages/werkzeug/routing/rules.py | 914 ++ .../site-packages/werkzeug/sansio/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 204 bytes .../sansio/__pycache__/http.cpython-311.pyc | Bin 0 -> 6994 bytes .../__pycache__/multipart.cpython-311.pyc | Bin 0 -> 15177 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 27496 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 35088 bytes .../sansio/__pycache__/utils.cpython-311.pyc | Bin 0 -> 6696 bytes .../Lib/site-packages/werkzeug/sansio/http.py | 202 + .../werkzeug/sansio/multipart.py | 313 + .../site-packages/werkzeug/sansio/request.py | 659 ++ .../site-packages/werkzeug/sansio/response.py | 789 ++ .../site-packages/werkzeug/sansio/utils.py | 159 + venv/Lib/site-packages/werkzeug/security.py | 172 + venv/Lib/site-packages/werkzeug/serving.py | 1107 +++ venv/Lib/site-packages/werkzeug/test.py | 1545 +++ venv/Lib/site-packages/werkzeug/testapp.py | 181 + venv/Lib/site-packages/werkzeug/urls.py | 1377 +++ venv/Lib/site-packages/werkzeug/user_agent.py | 47 + venv/Lib/site-packages/werkzeug/utils.py | 690 ++ .../werkzeug/wrappers/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 369 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 27680 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 37274 bytes .../werkzeug/wrappers/request.py | 653 ++ .../werkzeug/wrappers/response.py | 835 ++ venv/Lib/site-packages/werkzeug/wsgi.py | 847 ++ venv/Scripts/Activate.ps1 | 502 + venv/Scripts/activate | 69 + venv/Scripts/activate.bat | 34 + venv/Scripts/deactivate.bat | 22 + venv/Scripts/flask.exe | Bin 0 -> 108414 bytes venv/Scripts/pip.exe | Bin 0 -> 108427 bytes venv/Scripts/pip3.11.exe | Bin 0 -> 108427 bytes venv/Scripts/pip3.exe | Bin 0 -> 108427 bytes venv/Scripts/python.exe | Bin 0 -> 270608 bytes venv/Scripts/pythonw.exe | Bin 0 -> 259352 bytes venv/pyvenv.cfg | 5 + 1873 files changed, 342552 insertions(+) create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/Jinja2-3.1.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/METADATA create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/RECORD create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/_distutils_hack/__init__.py create mode 100644 venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-311.pyc create mode 100644 venv/Lib/site-packages/_distutils_hack/override.py create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/blinker-1.6.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/blinker/__init__.py create mode 100644 venv/Lib/site-packages/blinker/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/blinker/__pycache__/_saferef.cpython-311.pyc create mode 100644 venv/Lib/site-packages/blinker/__pycache__/_utilities.cpython-311.pyc create mode 100644 venv/Lib/site-packages/blinker/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/blinker/_saferef.py create mode 100644 venv/Lib/site-packages/blinker/_utilities.py create mode 100644 venv/Lib/site-packages/blinker/base.py create mode 100644 venv/Lib/site-packages/blinker/py.typed create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/METADATA create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/RECORD create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/click-8.1.7.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/click/__init__.py create mode 100644 venv/Lib/site-packages/click/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_textwrap.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/_winconsole.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/decorators.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/formatting.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/globals.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/termui.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/testing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/types.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/click/_compat.py create mode 100644 venv/Lib/site-packages/click/_termui_impl.py create mode 100644 venv/Lib/site-packages/click/_textwrap.py create mode 100644 venv/Lib/site-packages/click/_winconsole.py create mode 100644 venv/Lib/site-packages/click/core.py create mode 100644 venv/Lib/site-packages/click/decorators.py create mode 100644 venv/Lib/site-packages/click/exceptions.py create mode 100644 venv/Lib/site-packages/click/formatting.py create mode 100644 venv/Lib/site-packages/click/globals.py create mode 100644 venv/Lib/site-packages/click/parser.py create mode 100644 venv/Lib/site-packages/click/py.typed create mode 100644 venv/Lib/site-packages/click/shell_completion.py create mode 100644 venv/Lib/site-packages/click/termui.py create mode 100644 venv/Lib/site-packages/click/testing.py create mode 100644 venv/Lib/site-packages/click/types.py create mode 100644 venv/Lib/site-packages/click/utils.py create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt create mode 100644 venv/Lib/site-packages/colorama/__init__.py create mode 100644 venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/ansi.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/ansitowin32.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/win32.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/ansi.py create mode 100644 venv/Lib/site-packages/colorama/ansitowin32.py create mode 100644 venv/Lib/site-packages/colorama/initialise.py create mode 100644 venv/Lib/site-packages/colorama/tests/__init__.py create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/ansi_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/isatty_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/__pycache__/winterm_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/colorama/tests/ansi_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/ansitowin32_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/initialise_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/isatty_test.py create mode 100644 venv/Lib/site-packages/colorama/tests/utils.py create mode 100644 venv/Lib/site-packages/colorama/tests/winterm_test.py create mode 100644 venv/Lib/site-packages/colorama/win32.py create mode 100644 venv/Lib/site-packages/colorama/winterm.py create mode 100644 venv/Lib/site-packages/distutils-precedence.pth create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/METADATA create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/RECORD create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/flask-2.3.3.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/flask/__init__.py create mode 100644 venv/Lib/site-packages/flask/__main__.py create mode 100644 venv/Lib/site-packages/flask/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/app.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/blueprints.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/cli.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/config.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/ctx.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/debughelpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/globals.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/logging.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/scaffold.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/sessions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/signals.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/templating.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/testing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/typing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/views.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/app.py create mode 100644 venv/Lib/site-packages/flask/blueprints.py create mode 100644 venv/Lib/site-packages/flask/cli.py create mode 100644 venv/Lib/site-packages/flask/config.py create mode 100644 venv/Lib/site-packages/flask/ctx.py create mode 100644 venv/Lib/site-packages/flask/debughelpers.py create mode 100644 venv/Lib/site-packages/flask/globals.py create mode 100644 venv/Lib/site-packages/flask/helpers.py create mode 100644 venv/Lib/site-packages/flask/json/__init__.py create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/provider.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/json/__pycache__/tag.cpython-311.pyc create mode 100644 venv/Lib/site-packages/flask/json/provider.py create mode 100644 venv/Lib/site-packages/flask/json/tag.py create mode 100644 venv/Lib/site-packages/flask/logging.py create mode 100644 venv/Lib/site-packages/flask/py.typed create mode 100644 venv/Lib/site-packages/flask/scaffold.py create mode 100644 venv/Lib/site-packages/flask/sessions.py create mode 100644 venv/Lib/site-packages/flask/signals.py create mode 100644 venv/Lib/site-packages/flask/templating.py create mode 100644 venv/Lib/site-packages/flask/testing.py create mode 100644 venv/Lib/site-packages/flask/typing.py create mode 100644 venv/Lib/site-packages/flask/views.py create mode 100644 venv/Lib/site-packages/flask/wrappers.py create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/itsdangerous/__init__.py create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/encoding.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/exc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/signer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/timed.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/__pycache__/url_safe.cpython-311.pyc create mode 100644 venv/Lib/site-packages/itsdangerous/_json.py create mode 100644 venv/Lib/site-packages/itsdangerous/encoding.py create mode 100644 venv/Lib/site-packages/itsdangerous/exc.py create mode 100644 venv/Lib/site-packages/itsdangerous/py.typed create mode 100644 venv/Lib/site-packages/itsdangerous/serializer.py create mode 100644 venv/Lib/site-packages/itsdangerous/signer.py create mode 100644 venv/Lib/site-packages/itsdangerous/timed.py create mode 100644 venv/Lib/site-packages/itsdangerous/url_safe.py create mode 100644 venv/Lib/site-packages/jinja2/__init__.py create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/constants.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/debug.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/environment.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/ext.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/filters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/lexer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/loaders.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/meta.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/nativetypes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/nodes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/tests.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc create mode 100644 venv/Lib/site-packages/jinja2/_identifier.py create mode 100644 venv/Lib/site-packages/jinja2/async_utils.py create mode 100644 venv/Lib/site-packages/jinja2/bccache.py create mode 100644 venv/Lib/site-packages/jinja2/compiler.py create mode 100644 venv/Lib/site-packages/jinja2/constants.py create mode 100644 venv/Lib/site-packages/jinja2/debug.py create mode 100644 venv/Lib/site-packages/jinja2/defaults.py create mode 100644 venv/Lib/site-packages/jinja2/environment.py create mode 100644 venv/Lib/site-packages/jinja2/exceptions.py create mode 100644 venv/Lib/site-packages/jinja2/ext.py create mode 100644 venv/Lib/site-packages/jinja2/filters.py create mode 100644 venv/Lib/site-packages/jinja2/idtracking.py create mode 100644 venv/Lib/site-packages/jinja2/lexer.py create mode 100644 venv/Lib/site-packages/jinja2/loaders.py create mode 100644 venv/Lib/site-packages/jinja2/meta.py create mode 100644 venv/Lib/site-packages/jinja2/nativetypes.py create mode 100644 venv/Lib/site-packages/jinja2/nodes.py create mode 100644 venv/Lib/site-packages/jinja2/optimizer.py create mode 100644 venv/Lib/site-packages/jinja2/parser.py create mode 100644 venv/Lib/site-packages/jinja2/py.typed create mode 100644 venv/Lib/site-packages/jinja2/runtime.py create mode 100644 venv/Lib/site-packages/jinja2/sandbox.py create mode 100644 venv/Lib/site-packages/jinja2/tests.py create mode 100644 venv/Lib/site-packages/jinja2/utils.py create mode 100644 venv/Lib/site-packages/jinja2/visitor.py create mode 100644 venv/Lib/site-packages/markupsafe/__init__.py create mode 100644 venv/Lib/site-packages/markupsafe/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/markupsafe/__pycache__/_native.cpython-311.pyc create mode 100644 venv/Lib/site-packages/markupsafe/_native.py create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.c create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.cp311-win_amd64.pyd create mode 100644 venv/Lib/site-packages/markupsafe/_speedups.pyi create mode 100644 venv/Lib/site-packages/markupsafe/py.typed create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/AUTHORS.txt create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/LICENSE.txt create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/pip-23.2.1.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/pip/__init__.py create mode 100644 venv/Lib/site-packages/pip/__main__.py create mode 100644 venv/Lib/site-packages/pip/__pip-runner__.py create mode 100644 venv/Lib/site-packages/pip/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/build_env.py create mode 100644 venv/Lib/site-packages/pip/_internal/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/base_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/command_context.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main_parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/req_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/spinners.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/completion.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/debug.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/hash.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/help.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/inspect.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/install.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/list.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/search.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/show.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/installed.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/sdist.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/collector.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/package_finder.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/sources.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_distutils.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/_json.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/candidate.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/direct_url.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/format_control.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/installation_report.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/link.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/scheme.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/search_scope.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/target_python.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/auth.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/session.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/utils.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/prepare.py create mode 100644 venv/Lib/site-packages/pip/_internal/pyproject.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/constructors.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_file.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_install.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_set.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/self_outdated_check.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/_log.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/appdirs.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compat.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/datetime.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/deprecation.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/egg_link.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/encoding.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filesystem.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filetypes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/glibc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/hashes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/logging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/misc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/models.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/packaging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/subprocess.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/unpacking.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/urls.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/git.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/subversion.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 venv/Lib/site-packages/pip/_internal/wheel_builder.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachinedict.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/enums.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/macromanprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/resultdict.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/ansi_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/initialise_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/isatty_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/tests/winterm_test.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/win32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/database.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/index.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/locators.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/resources.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distro/distro.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/codec.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/intranges.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/package_data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/token.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__version__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/adapters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/auth.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/certs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/cookies.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/help.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/hooks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/models.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/packages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/sessions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_extension.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_fileno.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_loop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_pick.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_stack.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_timer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/align.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/box.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/cells.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/columns.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/constrain.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/containers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/control.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/emoji.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/errors.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/filesize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/json.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/layout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/logging.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/markup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/measure.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/padding.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/palette.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/panel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pretty.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/prompt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/protocol.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/region.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/repr.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/rule.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/scope.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/screen.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/segment.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/spinner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/status.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/styled.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/syntax.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/table.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/text.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/themes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/traceback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/tree.py create mode 100644 venv/Lib/site-packages/pip/_vendor/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/after.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_re.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_types.py create mode 100644 venv/Lib/site-packages/pip/_vendor/typing_extensions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/vendor.txt create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 venv/Lib/site-packages/pip/py.typed create mode 100644 venv/Lib/site-packages/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_common.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/abc.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/readers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/simple.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/context.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/functools.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/more.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/recipes.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_manylinux.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_musllinux.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/actions.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/common.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/core.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/helpers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/results.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/testing.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/unicode.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/util.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/zipp.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/METADATA create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/RECORD create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/psycopg2-2.9.9.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/psycopg2/__init__.py create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/_ipaddress.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/_json.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/_range.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/errorcodes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/errors.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/extensions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/extras.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/pool.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/sql.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/__pycache__/tz.cpython-311.pyc create mode 100644 venv/Lib/site-packages/psycopg2/_ipaddress.py create mode 100644 venv/Lib/site-packages/psycopg2/_json.py create mode 100644 venv/Lib/site-packages/psycopg2/_psycopg.cp311-win_amd64.pyd create mode 100644 venv/Lib/site-packages/psycopg2/_range.py create mode 100644 venv/Lib/site-packages/psycopg2/errorcodes.py create mode 100644 venv/Lib/site-packages/psycopg2/errors.py create mode 100644 venv/Lib/site-packages/psycopg2/extensions.py create mode 100644 venv/Lib/site-packages/psycopg2/extras.py create mode 100644 venv/Lib/site-packages/psycopg2/pool.py create mode 100644 venv/Lib/site-packages/psycopg2/sql.py create mode 100644 venv/Lib/site-packages/psycopg2/tz.py create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/setuptools-65.5.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/setuptools/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_entry_points.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_imp.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_importlib.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_path.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_reqs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/archive_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/build_meta.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dep_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/depends.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/discovery.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/errors.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/extension.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/glob.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/installer.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/launch.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/logging.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/monkey.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/msvc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/namespaces.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/package_index.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py34compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/sandbox.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/unicode_utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/windows_support.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_deprecation_warning.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/_functools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/_macos_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/_msvccompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/archive_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/bcppcompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/ccompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/cmd.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/config.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/cygwinccompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/debug.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dep_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dir_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/errors.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/extension.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/fancy_getopt.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/file_util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/filelist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/log.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvc9compiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvccompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/py38compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/py39compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/spawn.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/sysconfig.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/text_file.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/unixccompiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/versionpredicate.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/_collections.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/_functools.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/archive_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/cmd.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/_framework_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_py.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_scripts.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/check.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/clean.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/config.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_data.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_headers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/py37compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/register.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/upload.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/check.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/clean.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/config.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/register.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/upload.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/config.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/core.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/debug.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dep_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dir_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/errors.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/extension.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/file_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/filelist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/log.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/py38compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/py39compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/spawn.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/text_file.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/version.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 venv/Lib/site-packages/setuptools/_entry_points.py create mode 100644 venv/Lib/site-packages/setuptools/_imp.py create mode 100644 venv/Lib/site-packages/setuptools/_importlib.py create mode 100644 venv/Lib/site-packages/setuptools/_itertools.py create mode 100644 venv/Lib/site-packages/setuptools/_path.py create mode 100644 venv/Lib/site-packages/setuptools/_reqs.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_functools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_meta.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_text.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_legacy.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/functools.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/actions.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/common.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/core.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/exceptions.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/helpers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/results.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/testing.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/unicode.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing/util.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/zipp.py create mode 100644 venv/Lib/site-packages/setuptools/archive_util.py create mode 100644 venv/Lib/site-packages/setuptools/build_meta.py create mode 100644 venv/Lib/site-packages/setuptools/cli-32.exe create mode 100644 venv/Lib/site-packages/setuptools/cli-64.exe create mode 100644 venv/Lib/site-packages/setuptools/cli-arm64.exe create mode 100644 venv/Lib/site-packages/setuptools/cli.exe create mode 100644 venv/Lib/site-packages/setuptools/command/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/alias.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_py.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/develop.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/dist_info.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/easy_install.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/editable_wheel.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/egg_info.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/py36compat.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/register.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/rotate.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/saveopts.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/setopt.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload_docs.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/alias.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv/Lib/site-packages/setuptools/command/build.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_clib.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_ext.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_py.py create mode 100644 venv/Lib/site-packages/setuptools/command/develop.py create mode 100644 venv/Lib/site-packages/setuptools/command/dist_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/easy_install.py create mode 100644 venv/Lib/site-packages/setuptools/command/editable_wheel.py create mode 100644 venv/Lib/site-packages/setuptools/command/egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_lib.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv/Lib/site-packages/setuptools/command/py36compat.py create mode 100644 venv/Lib/site-packages/setuptools/command/register.py create mode 100644 venv/Lib/site-packages/setuptools/command/rotate.py create mode 100644 venv/Lib/site-packages/setuptools/command/saveopts.py create mode 100644 venv/Lib/site-packages/setuptools/command/sdist.py create mode 100644 venv/Lib/site-packages/setuptools/command/setopt.py create mode 100644 venv/Lib/site-packages/setuptools/command/test.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload_docs.py create mode 100644 venv/Lib/site-packages/setuptools/config/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/config/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/__pycache__/_apply_pyprojecttoml.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/__pycache__/expand.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/__pycache__/pyprojecttoml.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/__pycache__/setupcfg.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/error_reporting.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/extra_validations.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_validations.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/__pycache__/formats.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py create mode 100644 venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py create mode 100644 venv/Lib/site-packages/setuptools/config/expand.py create mode 100644 venv/Lib/site-packages/setuptools/config/pyprojecttoml.py create mode 100644 venv/Lib/site-packages/setuptools/config/setupcfg.py create mode 100644 venv/Lib/site-packages/setuptools/dep_util.py create mode 100644 venv/Lib/site-packages/setuptools/depends.py create mode 100644 venv/Lib/site-packages/setuptools/discovery.py create mode 100644 venv/Lib/site-packages/setuptools/dist.py create mode 100644 venv/Lib/site-packages/setuptools/errors.py create mode 100644 venv/Lib/site-packages/setuptools/extension.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/setuptools/glob.py create mode 100644 venv/Lib/site-packages/setuptools/gui-32.exe create mode 100644 venv/Lib/site-packages/setuptools/gui-64.exe create mode 100644 venv/Lib/site-packages/setuptools/gui-arm64.exe create mode 100644 venv/Lib/site-packages/setuptools/gui.exe create mode 100644 venv/Lib/site-packages/setuptools/installer.py create mode 100644 venv/Lib/site-packages/setuptools/launch.py create mode 100644 venv/Lib/site-packages/setuptools/logging.py create mode 100644 venv/Lib/site-packages/setuptools/monkey.py create mode 100644 venv/Lib/site-packages/setuptools/msvc.py create mode 100644 venv/Lib/site-packages/setuptools/namespaces.py create mode 100644 venv/Lib/site-packages/setuptools/package_index.py create mode 100644 venv/Lib/site-packages/setuptools/py34compat.py create mode 100644 venv/Lib/site-packages/setuptools/sandbox.py create mode 100644 venv/Lib/site-packages/setuptools/script (dev).tmpl create mode 100644 venv/Lib/site-packages/setuptools/script.tmpl create mode 100644 venv/Lib/site-packages/setuptools/unicode_utils.py create mode 100644 venv/Lib/site-packages/setuptools/version.py create mode 100644 venv/Lib/site-packages/setuptools/wheel.py create mode 100644 venv/Lib/site-packages/setuptools/windows_support.py create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/LICENSE.rst create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/METADATA create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/RECORD create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/werkzeug-2.3.7.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/werkzeug/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/_internal.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/_reloader.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/formparser.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/http.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/local.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/security.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/serving.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/test.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/testapp.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/urls.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/user_agent.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/__pycache__/wsgi.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/_internal.py create mode 100644 venv/Lib/site-packages/werkzeug/_reloader.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/accept.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/auth.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/cache_control.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/csp.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/etag.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/file_storage.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/headers.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/mixins.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/range.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/__pycache__/structures.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/accept.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/accept.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/auth.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/cache_control.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/cache_control.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/csp.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/csp.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/etag.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/etag.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/file_storage.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/file_storage.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/headers.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/headers.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/mixins.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/mixins.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/range.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/range.pyi create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/structures.py create mode 100644 venv/Lib/site-packages/werkzeug/datastructures/structures.pyi create mode 100644 venv/Lib/site-packages/werkzeug/debug/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/console.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/repr.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/debug/console.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/repr.py create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/ICON_LICENSE.md create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/console.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/less.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/more.png create mode 100644 venv/Lib/site-packages/werkzeug/debug/shared/style.css create mode 100644 venv/Lib/site-packages/werkzeug/debug/tbtools.py create mode 100644 venv/Lib/site-packages/werkzeug/exceptions.py create mode 100644 venv/Lib/site-packages/werkzeug/formparser.py create mode 100644 venv/Lib/site-packages/werkzeug/http.py create mode 100644 venv/Lib/site-packages/werkzeug/local.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/lint.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/middleware/dispatcher.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/http_proxy.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/lint.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/profiler.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py create mode 100644 venv/Lib/site-packages/werkzeug/middleware/shared_data.py create mode 100644 venv/Lib/site-packages/werkzeug/py.typed create mode 100644 venv/Lib/site-packages/werkzeug/routing/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/converters.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/map.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/matcher.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/__pycache__/rules.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/routing/converters.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/exceptions.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/map.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/matcher.py create mode 100644 venv/Lib/site-packages/werkzeug/routing/rules.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/http.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/multipart.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/request.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/response.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/__pycache__/utils.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/sansio/http.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/multipart.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/request.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/response.py create mode 100644 venv/Lib/site-packages/werkzeug/sansio/utils.py create mode 100644 venv/Lib/site-packages/werkzeug/security.py create mode 100644 venv/Lib/site-packages/werkzeug/serving.py create mode 100644 venv/Lib/site-packages/werkzeug/test.py create mode 100644 venv/Lib/site-packages/werkzeug/testapp.py create mode 100644 venv/Lib/site-packages/werkzeug/urls.py create mode 100644 venv/Lib/site-packages/werkzeug/user_agent.py create mode 100644 venv/Lib/site-packages/werkzeug/utils.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__init__.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/request.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/__pycache__/response.cpython-311.pyc create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/request.py create mode 100644 venv/Lib/site-packages/werkzeug/wrappers/response.py create mode 100644 venv/Lib/site-packages/werkzeug/wsgi.py create mode 100644 venv/Scripts/Activate.ps1 create mode 100644 venv/Scripts/activate create mode 100644 venv/Scripts/activate.bat create mode 100644 venv/Scripts/deactivate.bat create mode 100644 venv/Scripts/flask.exe create mode 100644 venv/Scripts/pip.exe create mode 100644 venv/Scripts/pip3.11.exe create mode 100644 venv/Scripts/pip3.exe create mode 100644 venv/Scripts/python.exe create mode 100644 venv/Scripts/pythonw.exe create mode 100644 venv/pyvenv.cfg diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index 36eb443f0da4f6ee1f2ffc48cce82ac8d58a2a8a..1e606a357a6bf5a0fa942ae7148e783e78f31d67 100644 GIT binary patch delta 76 zcmaF&gz>`@M!w~|yj%=G(7iJ*)g@>n-(NOeV`r=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: MarkupSafe (>=2.0) +Provides-Extra: i18n +Requires-Dist: Babel (>=2.7) ; extra == 'i18n' + +Jinja +===== + +Jinja is a fast, expressive, extensible templating engine. Special +placeholders in the template allow writing code similar to Python +syntax. Then the template is passed data to render the final document. + +It includes: + +- Template inheritance and inclusion. +- Define and import macros within templates. +- HTML templates can use autoescaping to prevent XSS from untrusted + user input. +- A sandboxed environment can safely render untrusted templates. +- AsyncIO support for generating templates and calling async + functions. +- I18N support with Babel. +- Templates are compiled to optimized Python code just-in-time and + cached, or can be compiled ahead-of-time. +- Exceptions point to the correct line in templates to make debugging + easier. +- Extensible filters, tests, functions, and even syntax. + +Jinja's philosophy is that while application logic belongs in Python if +possible, it shouldn't make the template designer's job difficult by +restricting functionality too much. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U Jinja2 + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +In A Nutshell +------------- + +.. code-block:: jinja + + {% extends "base.html" %} + {% block title %}Members{% endblock %} + {% block content %} + + {% 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/site-packages/Jinja2-3.1.2.dist-info/RECORD b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/RECORD new file mode 100644 index 0000000..256f0a1 --- /dev/null +++ b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/RECORD @@ -0,0 +1,59 @@ +Jinja2-3.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Jinja2-3.1.2.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Jinja2-3.1.2.dist-info/METADATA,sha256=PZ6v2SIidMNixR7MRUX9f7ZWsPwtXanknqiZUmRbh4U,3539 +Jinja2-3.1.2.dist-info/RECORD,, +Jinja2-3.1.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Jinja2-3.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +Jinja2-3.1.2.dist-info/entry_points.txt,sha256=zRd62fbqIyfUpsRtU7EVIFyiu1tPwfgO7EvPErnxgTE,59 +Jinja2-3.1.2.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 +jinja2/__init__.py,sha256=8vGduD8ytwgD6GDSqpYc2m3aU-T7PKOAddvVXgGr_Fs,1927 +jinja2/__pycache__/__init__.cpython-311.pyc,, +jinja2/__pycache__/_identifier.cpython-311.pyc,, +jinja2/__pycache__/async_utils.cpython-311.pyc,, +jinja2/__pycache__/bccache.cpython-311.pyc,, +jinja2/__pycache__/compiler.cpython-311.pyc,, +jinja2/__pycache__/constants.cpython-311.pyc,, +jinja2/__pycache__/debug.cpython-311.pyc,, +jinja2/__pycache__/defaults.cpython-311.pyc,, +jinja2/__pycache__/environment.cpython-311.pyc,, +jinja2/__pycache__/exceptions.cpython-311.pyc,, +jinja2/__pycache__/ext.cpython-311.pyc,, +jinja2/__pycache__/filters.cpython-311.pyc,, +jinja2/__pycache__/idtracking.cpython-311.pyc,, +jinja2/__pycache__/lexer.cpython-311.pyc,, +jinja2/__pycache__/loaders.cpython-311.pyc,, +jinja2/__pycache__/meta.cpython-311.pyc,, +jinja2/__pycache__/nativetypes.cpython-311.pyc,, +jinja2/__pycache__/nodes.cpython-311.pyc,, +jinja2/__pycache__/optimizer.cpython-311.pyc,, +jinja2/__pycache__/parser.cpython-311.pyc,, +jinja2/__pycache__/runtime.cpython-311.pyc,, +jinja2/__pycache__/sandbox.cpython-311.pyc,, +jinja2/__pycache__/tests.cpython-311.pyc,, +jinja2/__pycache__/utils.cpython-311.pyc,, +jinja2/__pycache__/visitor.cpython-311.pyc,, +jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958 +jinja2/async_utils.py,sha256=dHlbTeaxFPtAOQEYOGYh_PHcDT0rsDaUJAFDl_0XtTg,2472 +jinja2/bccache.py,sha256=mhz5xtLxCcHRAa56azOhphIAe19u1we0ojifNMClDio,14061 +jinja2/compiler.py,sha256=Gs-N8ThJ7OWK4-reKoO8Wh1ZXz95MVphBKNVf75qBr8,72172 +jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 +jinja2/debug.py,sha256=iWJ432RadxJNnaMOPrjIDInz50UEgni3_HKuFXi2vuQ,6299 +jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 +jinja2/environment.py,sha256=6uHIcc7ZblqOMdx_uYNKqRnnwAF0_nzbyeMP9FFtuh4,61349 +jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 +jinja2/ext.py,sha256=ivr3P7LKbddiXDVez20EflcO3q2aHQwz9P_PgWGHVqE,31502 +jinja2/filters.py,sha256=9js1V-h2RlyW90IhLiBGLM2U-k6SCy2F4BUUMgB3K9Q,53509 +jinja2/idtracking.py,sha256=GfNmadir4oDALVxzn3DL9YInhJDr69ebXeA2ygfuCGA,10704 +jinja2/lexer.py,sha256=DW2nX9zk-6MWp65YR2bqqj0xqCvLtD-u9NWT8AnFRxQ,29726 +jinja2/loaders.py,sha256=BfptfvTVpClUd-leMkHczdyPNYFzp_n7PKOJ98iyHOg,23207 +jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 +jinja2/nativetypes.py,sha256=DXgORDPRmVWgy034H0xL8eF7qYoK3DrMxs-935d0Fzk,4226 +jinja2/nodes.py,sha256=i34GPRAZexXMT6bwuf5SEyvdmS-bRCy9KMjwN5O6pjk,34550 +jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 +jinja2/parser.py,sha256=nHd-DFHbiygvfaPtm9rcQXJChZG7DPsWfiEsqfwKerY,39595 +jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jinja2/runtime.py,sha256=5CmD5BjbEJxSiDNTFBeKCaq8qU4aYD2v6q2EluyExms,33476 +jinja2/sandbox.py,sha256=Y0xZeXQnH6EX5VjaV2YixESxoepnRbW_3UeQosaBU3M,14584 +jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 +jinja2/utils.py,sha256=u9jXESxGn8ATZNVolwmkjUVu4SA-tLgV0W7PcSfPfdQ,23965 +jinja2/visitor.py,sha256=MH14C6yq24G_KVtWzjwaI7Wg14PCJIYlWW1kpkxYak0,3568 diff --git a/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/REQUESTED b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/WHEEL b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt new file mode 100644 index 0000000..7b9666c --- /dev/null +++ b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[babel.extractors] +jinja2 = jinja2.ext:babel_extract[i18n] diff --git a/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/top_level.txt b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/top_level.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/venv/Lib/site-packages/Jinja2-3.1.2.dist-info/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/INSTALLER b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/LICENSE.rst b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/METADATA b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/METADATA new file mode 100644 index 0000000..bced165 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/METADATA @@ -0,0 +1,93 @@ +Metadata-Version: 2.1 +Name: MarkupSafe +Version: 2.1.3 +Summary: Safely add untrusted strings to HTML/XML markup. +Home-page: https://palletsprojects.com/p/markupsafe/ +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://markupsafe.palletsprojects.com/ +Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/markupsafe/ +Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ +Project-URL: Chat, https://discord.gg/pallets +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +MarkupSafe +========== + +MarkupSafe implements a text object that escapes characters so it is +safe to use in HTML and XML. Characters that have special meanings are +replaced so that they display as the actual characters. This mitigates +injection attacks, meaning untrusted user input can safely be displayed +on a page. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U MarkupSafe + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +Examples +-------- + +.. code-block:: pycon + + >>> from markupsafe import Markup, escape + + >>> # escape replaces special characters and wraps in Markup + >>> escape("") + Markup('<script>alert(document.cookie);</script>') + + >>> # wrap in Markup to mark text "safe" and prevent escaping + >>> Markup("Hello") + Markup('hello') + + >>> escape(Markup("Hello")) + Markup('hello') + + >>> # Markup is a str subclass + >>> # methods and operators escape their arguments + >>> template = Markup("Hello {name}") + >>> template.format(name='"World"') + Markup('Hello "World"') + + +Donate +------ + +The Pallets organization develops and supports MarkupSafe and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://markupsafe.palletsprojects.com/ +- Changes: https://markupsafe.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/MarkupSafe/ +- Source Code: https://github.com/pallets/markupsafe/ +- Issue Tracker: https://github.com/pallets/markupsafe/issues/ +- Chat: https://discord.gg/pallets diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/RECORD b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/RECORD new file mode 100644 index 0000000..88f12d3 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/RECORD @@ -0,0 +1,15 @@ +MarkupSafe-2.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +MarkupSafe-2.1.3.dist-info/LICENSE.rst,sha256=RjHsDbX9kKVH4zaBcmTGeYIUM4FG-KyUtKV_lu6MnsQ,1503 +MarkupSafe-2.1.3.dist-info/METADATA,sha256=5gU_TQw6eHpTaqkI6SPeZje6KTPlJPAV82uNiL3naKE,3096 +MarkupSafe-2.1.3.dist-info/RECORD,, +MarkupSafe-2.1.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +MarkupSafe-2.1.3.dist-info/WHEEL,sha256=9wvhO-5NhjjD8YmmxAvXTPQXMDOZ50W5vklzeoqFtkM,102 +MarkupSafe-2.1.3.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +markupsafe/__init__.py,sha256=GsRaSTjrhvg6c88PnPJNqm4MafU_mFatfXz4-h80-Qc,10642 +markupsafe/__pycache__/__init__.cpython-311.pyc,, +markupsafe/__pycache__/_native.cpython-311.pyc,, +markupsafe/_native.py,sha256=_Q7UsXCOvgdonCgqG3l5asANI6eo50EKnDM-mlwEC5M,1776 +markupsafe/_speedups.c,sha256=n3jzzaJwXcoN8nTFyA53f3vSqsWK2vujI-v6QYifjhQ,7403 +markupsafe/_speedups.cp311-win_amd64.pyd,sha256=TEUZdBQBxs061oYZQP2cGGlADVOAdHridgTeE6XQxTE,15872 +markupsafe/_speedups.pyi,sha256=f5QtwIOP0eLrxh2v5p6SmaYmlcHIGIfmz0DovaqL0OU,238 +markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/REQUESTED b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/WHEEL b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/WHEEL new file mode 100644 index 0000000..30c3ff1 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.40.0) +Root-Is-Purelib: false +Tag: cp311-cp311-win_amd64 + diff --git a/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/top_level.txt b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/venv/Lib/site-packages/MarkupSafe-2.1.3.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/venv/Lib/site-packages/_distutils_hack/__init__.py b/venv/Lib/site-packages/_distutils_hack/__init__.py new file mode 100644 index 0000000..f987a53 --- /dev/null +++ b/venv/Lib/site-packages/_distutils_hack/__init__.py @@ -0,0 +1,222 @@ +# don't import any costly modules +import sys +import os + + +is_pypy = '__pypy__' in sys.builtin_module_names + + +def warn_distutils_present(): + if 'distutils' not in sys.modules: + return + if is_pypy and sys.version_info < (3, 7): + # PyPy for 3.6 unconditionally imports distutils, so bypass the warning + # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 + return + import warnings + + warnings.warn( + "Distutils was imported before Setuptools, but importing Setuptools " + "also replaces the `distutils` module in `sys.modules`. This may lead " + "to undesirable behaviors or errors. To avoid these issues, avoid " + "using distutils directly, ensure that setuptools is installed in the " + "traditional way (e.g. not an editable install), and/or make sure " + "that setuptools is always imported before distutils." + ) + + +def clear_distutils(): + if 'distutils' not in sys.modules: + return + import warnings + + warnings.warn("Setuptools is replacing distutils.") + mods = [ + name + for name in sys.modules + if name == "distutils" or name.startswith("distutils.") + ] + for name in mods: + del sys.modules[name] + + +def enabled(): + """ + Allow selection of distutils by environment variable. + """ + which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local') + return which == 'local' + + +def ensure_local_distutils(): + import importlib + + clear_distutils() + + # With the DistutilsMetaFinder in place, + # perform an import to cause distutils to be + # loaded from setuptools._distutils. Ref #2906. + with shim(): + importlib.import_module('distutils') + + # check that submodules load as expected + core = importlib.import_module('distutils.core') + assert '_distutils' in core.__file__, core.__file__ + assert 'setuptools._distutils.log' not in sys.modules + + +def do_override(): + """ + Ensure that the local copy of distutils is preferred over stdlib. + + See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 + for more motivation. + """ + if enabled(): + warn_distutils_present() + ensure_local_distutils() + + +class _TrivialRe: + def __init__(self, *patterns): + self._patterns = patterns + + def match(self, string): + return all(pat in string for pat in self._patterns) + + +class DistutilsMetaFinder: + def find_spec(self, fullname, path, target=None): + # optimization: only consider top level modules and those + # found in the CPython test suite. + if path is not None and not fullname.startswith('test.'): + return + + method_name = 'spec_for_{fullname}'.format(**locals()) + method = getattr(self, method_name, lambda: None) + return method() + + def spec_for_distutils(self): + if self.is_cpython(): + return + + import importlib + import importlib.abc + import importlib.util + + try: + mod = importlib.import_module('setuptools._distutils') + except Exception: + # There are a couple of cases where setuptools._distutils + # may not be present: + # - An older Setuptools without a local distutils is + # taking precedence. Ref #2957. + # - Path manipulation during sitecustomize removes + # setuptools from the path but only after the hook + # has been loaded. Ref #2980. + # In either case, fall back to stdlib behavior. + return + + class DistutilsLoader(importlib.abc.Loader): + def create_module(self, spec): + mod.__name__ = 'distutils' + return mod + + def exec_module(self, module): + pass + + return importlib.util.spec_from_loader( + 'distutils', DistutilsLoader(), origin=mod.__file__ + ) + + @staticmethod + def is_cpython(): + """ + Suppress supplying distutils for CPython (build and tests). + Ref #2965 and #3007. + """ + return os.path.isfile('pybuilddir.txt') + + def spec_for_pip(self): + """ + Ensure stdlib distutils when running under pip. + See pypa/pip#8761 for rationale. + """ + if self.pip_imported_during_build(): + return + clear_distutils() + self.spec_for_distutils = lambda: None + + @classmethod + def pip_imported_during_build(cls): + """ + Detect if pip is being imported in a build script. Ref #2355. + """ + import traceback + + return any( + cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None) + ) + + @staticmethod + def frame_file_is_setup(frame): + """ + Return True if the indicated frame suggests a setup.py file. + """ + # some frames may not have __file__ (#2940) + return frame.f_globals.get('__file__', '').endswith('setup.py') + + def spec_for_sensitive_tests(self): + """ + Ensure stdlib distutils when running select tests under CPython. + + python/cpython#91169 + """ + clear_distutils() + self.spec_for_distutils = lambda: None + + sensitive_tests = ( + [ + 'test.test_distutils', + 'test.test_peg_generator', + 'test.test_importlib', + ] + if sys.version_info < (3, 10) + else [ + 'test.test_distutils', + ] + ) + + +for name in DistutilsMetaFinder.sensitive_tests: + setattr( + DistutilsMetaFinder, + f'spec_for_{name}', + DistutilsMetaFinder.spec_for_sensitive_tests, + ) + + +DISTUTILS_FINDER = DistutilsMetaFinder() + + +def add_shim(): + DISTUTILS_FINDER in sys.meta_path or insert_shim() + + +class shim: + def __enter__(self): + insert_shim() + + def __exit__(self, exc, value, tb): + remove_shim() + + +def insert_shim(): + sys.meta_path.insert(0, DISTUTILS_FINDER) + + +def remove_shim(): + try: + sys.meta_path.remove(DISTUTILS_FINDER) + except ValueError: + pass diff --git a/venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..251c17ebac129d33bf6ef812caab89b1e2ec3b72 GIT binary patch literal 11169 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 VN^QF&#i&~aD6#~SX$FF!{uh1g2a5mz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-311.pyc b/venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80ab5f3b5d05d8f414a83743f5ff68e9aa20b620 GIT binary patch literal 326 zcmZ3^%ge<81lG+7sX9RVF^B^L%uvQ>2OwiQ0~13kLkhz(Mh1q}Knwv3;4GL3h+YQ7 ztKkBS3@MDk44O>0_~TPDi%UvNGINUKGZK@t{eWUz@$s3t1^GoK@$t8~Q}W~U%TkMq zGE-7lGJFOZ@GIWgDkiizwWv5IsVb#1FUBQ5ximL5ucSD}J+s84G%3cvAT=*MzbM-+ zC%-(VEH$qz#wRl=rZ}@CRkr|WM`C(vaSWQh`Y=oM3Mzkb*yQG?l;)(`6>$LV19_)d t14w*eW@Kc%!NAqPb%9&vB7^J|2HEQjnwJ +Maintainer-email: Pallets Ecosystem +License: MIT License +Project-URL: Homepage, https://blinker.readthedocs.io +Project-URL: Documentation, https://blinker.readthedocs.io +Project-URL: Source Code, https://github.com/pallets-eco/blinker/ +Project-URL: Issue Tracker, https://github.com/pallets-eco/blinker/issues/ +Project-URL: Chat, https://discord.gg/pallets +Keywords: signal,emit,events,broadcast +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Libraries +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +Blinker +======= + +Blinker provides a fast dispatching system that allows any number of +interested parties to subscribe to events, or "signals". + +Signal receivers can subscribe to specific senders or receive signals +sent by any sender. + +.. code-block:: pycon + + >>> from blinker import signal + >>> started = signal('round-started') + >>> def each(round): + ... print(f"Round {round}") + ... + >>> started.connect(each) + + >>> def round_two(round): + ... print("This is round two.") + ... + >>> started.connect(round_two, sender=2) + + >>> for round in range(1, 4): + ... started.send(round) + ... + Round 1! + Round 2! + This is round two. + Round 3! + + +Links +----- + +- Documentation: https://blinker.readthedocs.io/ +- Changes: https://blinker.readthedocs.io/#changes +- PyPI Releases: https://pypi.org/project/blinker/ +- Source Code: https://github.com/pallets-eco/blinker/ +- Issue Tracker: https://github.com/pallets-eco/blinker/issues/ diff --git a/venv/Lib/site-packages/blinker-1.6.2.dist-info/RECORD b/venv/Lib/site-packages/blinker-1.6.2.dist-info/RECORD new file mode 100644 index 0000000..2adaa15 --- /dev/null +++ b/venv/Lib/site-packages/blinker-1.6.2.dist-info/RECORD @@ -0,0 +1,16 @@ +blinker-1.6.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +blinker-1.6.2.dist-info/LICENSE.rst,sha256=nrc6HzhZekqhcCXSrhvjg5Ykx5XphdTw6Xac4p-spGc,1054 +blinker-1.6.2.dist-info/METADATA,sha256=7MRskabu2wQvWIMFwgqP3w2LDt8nR5nCxH7Anu1ZrBM,1964 +blinker-1.6.2.dist-info/RECORD,, +blinker-1.6.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +blinker-1.6.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92 +blinker-1.6.2.dist-info/top_level.txt,sha256=2NmsENM0J2t9Z8mkjxHDmGMQj7Bm8f5ZTTYe1x1fZtM,8 +blinker/__init__.py,sha256=Ko7EbvxyCl_UewgsP8XgDJqJcHZA7EsuhG72R_zDrcY,408 +blinker/__pycache__/__init__.cpython-311.pyc,, +blinker/__pycache__/_saferef.cpython-311.pyc,, +blinker/__pycache__/_utilities.cpython-311.pyc,, +blinker/__pycache__/base.cpython-311.pyc,, +blinker/_saferef.py,sha256=kWOTIWnCY3kOb8lZP74Rbx7bR_BLVg4TjwzNCRLhKHs,9096 +blinker/_utilities.py,sha256=GPXtJzykzVotoxHC79mgFQMPJtICwpVDCCpus4_JtsA,4110 +blinker/base.py,sha256=7Y-C0ZVIe-NrrskPeqj0bLSp4R6Cpq5LrzI1DmLqMEA,20469 +blinker/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/venv/Lib/site-packages/blinker-1.6.2.dist-info/REQUESTED b/venv/Lib/site-packages/blinker-1.6.2.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/blinker-1.6.2.dist-info/WHEEL b/venv/Lib/site-packages/blinker-1.6.2.dist-info/WHEEL new file mode 100644 index 0000000..1f37c02 --- /dev/null +++ b/venv/Lib/site-packages/blinker-1.6.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.40.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/blinker-1.6.2.dist-info/top_level.txt b/venv/Lib/site-packages/blinker-1.6.2.dist-info/top_level.txt new file mode 100644 index 0000000..1ff4ca5 --- /dev/null +++ b/venv/Lib/site-packages/blinker-1.6.2.dist-info/top_level.txt @@ -0,0 +1 @@ +blinker diff --git a/venv/Lib/site-packages/blinker/__init__.py b/venv/Lib/site-packages/blinker/__init__.py new file mode 100644 index 0000000..71d66d3 --- /dev/null +++ b/venv/Lib/site-packages/blinker/__init__.py @@ -0,0 +1,19 @@ +from blinker.base import ANY +from blinker.base import NamedSignal +from blinker.base import Namespace +from blinker.base import receiver_connected +from blinker.base import Signal +from blinker.base import signal +from blinker.base import WeakNamespace + +__all__ = [ + "ANY", + "NamedSignal", + "Namespace", + "Signal", + "WeakNamespace", + "receiver_connected", + "signal", +] + +__version__ = "1.6.2" diff --git a/venv/Lib/site-packages/blinker/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/blinker/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c7fe80b4f19a7677863d3768580d5d6e3e31454 GIT binary patch literal 647 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 a?5?rq;`z%y0X*2c{Eol>ew$jpnEwNf1UKUV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/blinker/__pycache__/_utilities.cpython-311.pyc b/venv/Lib/site-packages/blinker/__pycache__/_utilities.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a827240f98d7d82f4db1d4289e93181f42d00db6 GIT binary patch literal 6707 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 nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +"""Refactored 'safe reference from dispatcher.py""" +import operator +import sys +import traceback +import weakref + + +get_self = operator.attrgetter("__self__") +get_func = operator.attrgetter("__func__") + + +def safe_ref(target, on_delete=None): + """Return a *safe* weak reference to a callable target. + + - ``target``: The object to be weakly referenced, if it's a bound + method reference, will create a BoundMethodWeakref, otherwise + creates a simple weakref. + + - ``on_delete``: If provided, will have a hard reference stored to + the callable to be called after the safe reference goes out of + scope with the reference object, (either a weakref or a + BoundMethodWeakref) as argument. + """ + try: + im_self = get_self(target) + except AttributeError: + if callable(on_delete): + return weakref.ref(target, on_delete) + else: + return weakref.ref(target) + else: + if im_self is not None: + # Turn a bound method into a BoundMethodWeakref instance. + # Keep track of these instances for lookup by disconnect(). + assert hasattr(target, "im_func") or hasattr(target, "__func__"), ( + f"safe_ref target {target!r} has im_self, but no im_func, " + "don't know how to create reference" + ) + reference = BoundMethodWeakref(target=target, on_delete=on_delete) + return reference + + +class BoundMethodWeakref: + """'Safe' and reusable weak references to instance methods. + + BoundMethodWeakref objects provide a mechanism for referencing a + bound method without requiring that the method object itself + (which is normally a transient object) is kept alive. Instead, + the BoundMethodWeakref object keeps weak references to both the + object and the function which together define the instance method. + + Attributes: + + - ``key``: The identity key for the reference, calculated by the + class's calculate_key method applied to the target instance method. + + - ``deletion_methods``: Sequence of callable objects taking single + argument, a reference to this object which will be called when + *either* the target object or target function is garbage + collected (i.e. when this object becomes invalid). These are + specified as the on_delete parameters of safe_ref calls. + + - ``weak_self``: Weak reference to the target object. + + - ``weak_func``: Weak reference to the target function. + + Class Attributes: + + - ``_all_instances``: Class attribute pointing to all live + BoundMethodWeakref objects indexed by the class's + calculate_key(target) method applied to the target objects. + This weak value dictionary is used to short-circuit creation so + that multiple references to the same (object, function) pair + produce the same BoundMethodWeakref instance. + """ + + _all_instances = weakref.WeakValueDictionary() # type: ignore[var-annotated] + + def __new__(cls, target, on_delete=None, *arguments, **named): + """Create new instance or return current instance. + + Basically this method of construction allows us to + short-circuit creation of references to already-referenced + instance methods. The key corresponding to the target is + calculated, and if there is already an existing reference, + that is returned, with its deletion_methods attribute updated. + Otherwise the new instance is created and registered in the + table of already-referenced methods. + """ + key = cls.calculate_key(target) + current = cls._all_instances.get(key) + if current is not None: + current.deletion_methods.append(on_delete) + return current + else: + base = super().__new__(cls) + cls._all_instances[key] = base + base.__init__(target, on_delete, *arguments, **named) + return base + + def __init__(self, target, on_delete=None): + """Return a weak-reference-like instance for a bound method. + + - ``target``: The instance-method target for the weak reference, + must have im_self and im_func attributes and be + reconstructable via the following, which is true of built-in + instance methods:: + + target.im_func.__get__( target.im_self ) + + - ``on_delete``: Optional callback which will be called when + this weak reference ceases to be valid (i.e. either the + object or the function is garbage collected). Should take a + single argument, which will be passed a pointer to this + object. + """ + + def remove(weak, self=self): + """Set self.isDead to True when method or instance is destroyed.""" + methods = self.deletion_methods[:] + del self.deletion_methods[:] + try: + del self.__class__._all_instances[self.key] + except KeyError: + pass + for function in methods: + try: + if callable(function): + function(self) + except Exception: + try: + traceback.print_exc() + except AttributeError: + e = sys.exc_info()[1] + print( + f"Exception during saferef {self} " + f"cleanup function {function}: {e}" + ) + + self.deletion_methods = [on_delete] + self.key = self.calculate_key(target) + im_self = get_self(target) + im_func = get_func(target) + self.weak_self = weakref.ref(im_self, remove) + self.weak_func = weakref.ref(im_func, remove) + self.self_name = str(im_self) + self.func_name = str(im_func.__name__) + + @classmethod + def calculate_key(cls, target): + """Calculate the reference key for this reference. + + Currently this is a two-tuple of the id()'s of the target + object and the target function respectively. + """ + return (id(get_self(target)), id(get_func(target))) + + def __str__(self): + """Give a friendly representation of the object.""" + return "{}({}.{})".format( + self.__class__.__name__, + self.self_name, + self.func_name, + ) + + __repr__ = __str__ + + def __hash__(self): + return hash((self.self_name, self.key)) + + def __nonzero__(self): + """Whether we are still a valid reference.""" + return self() is not None + + def __eq__(self, other): + """Compare with another reference.""" + if not isinstance(other, self.__class__): + return operator.eq(self.__class__, type(other)) + return operator.eq(self.key, other.key) + + def __call__(self): + """Return a strong reference to the bound method. + + If the target cannot be retrieved, then will return None, + otherwise returns a bound instance method for our object and + function. + + Note: You may call this method any number of times, as it does + not invalidate the reference. + """ + target = self.weak_self() + if target is not None: + function = self.weak_func() + if function is not None: + return function.__get__(target) + return None diff --git a/venv/Lib/site-packages/blinker/_utilities.py b/venv/Lib/site-packages/blinker/_utilities.py new file mode 100644 index 0000000..068d94c --- /dev/null +++ b/venv/Lib/site-packages/blinker/_utilities.py @@ -0,0 +1,142 @@ +from __future__ import annotations + +import asyncio +import inspect +import sys +import typing as t +from functools import partial +from weakref import ref + +from blinker._saferef import BoundMethodWeakref + +IdentityType = t.Union[t.Tuple[int, int], str, int] + + +class _symbol: + def __init__(self, name): + """Construct a new named symbol.""" + self.__name__ = self.name = name + + def __reduce__(self): + return symbol, (self.name,) + + def __repr__(self): + return self.name + + +_symbol.__name__ = "symbol" + + +class symbol: + """A constant symbol. + + >>> symbol('foo') is symbol('foo') + True + >>> symbol('foo') + foo + + A slight refinement of the MAGICCOOKIE=object() pattern. The primary + advantage of symbol() is its repr(). They are also singletons. + + Repeated calls of symbol('name') will all return the same instance. + + """ + + symbols = {} # type: ignore[var-annotated] + + def __new__(cls, name): + try: + return cls.symbols[name] + except KeyError: + return cls.symbols.setdefault(name, _symbol(name)) + + +def hashable_identity(obj: object) -> IdentityType: + if hasattr(obj, "__func__"): + return (id(obj.__func__), id(obj.__self__)) # type: ignore[attr-defined] + elif hasattr(obj, "im_func"): + return (id(obj.im_func), id(obj.im_self)) # type: ignore[attr-defined] + elif isinstance(obj, (int, str)): + return obj + else: + return id(obj) + + +WeakTypes = (ref, BoundMethodWeakref) + + +class annotatable_weakref(ref): + """A weakref.ref that supports custom instance attributes.""" + + receiver_id: t.Optional[IdentityType] + sender_id: t.Optional[IdentityType] + + +def reference( # type: ignore[no-untyped-def] + object, callback=None, **annotations +) -> annotatable_weakref: + """Return an annotated weak ref.""" + if callable(object): + weak = callable_reference(object, callback) + else: + weak = annotatable_weakref(object, callback) + for key, value in annotations.items(): + setattr(weak, key, value) + return weak # type: ignore[no-any-return] + + +def callable_reference(object, callback=None): + """Return an annotated weak ref, supporting bound instance methods.""" + if hasattr(object, "im_self") and object.im_self is not None: + return BoundMethodWeakref(target=object, on_delete=callback) + elif hasattr(object, "__self__") and object.__self__ is not None: + return BoundMethodWeakref(target=object, on_delete=callback) + return annotatable_weakref(object, callback) + + +class lazy_property: + """A @property that is only evaluated once.""" + + def __init__(self, deferred): + self._deferred = deferred + self.__doc__ = deferred.__doc__ + + def __get__(self, obj, cls): + if obj is None: + return self + value = self._deferred(obj) + setattr(obj, self._deferred.__name__, value) + return value + + +def is_coroutine_function(func: t.Any) -> bool: + # Python < 3.8 does not correctly determine partially wrapped + # coroutine functions are coroutine functions, hence the need for + # this to exist. Code taken from CPython. + if sys.version_info >= (3, 8): + return asyncio.iscoroutinefunction(func) + else: + # Note that there is something special about the AsyncMock + # such that it isn't determined as a coroutine function + # without an explicit check. + try: + from unittest.mock import AsyncMock # type: ignore[attr-defined] + + if isinstance(func, AsyncMock): + return True + except ImportError: + # Not testing, no asynctest to import + pass + + while inspect.ismethod(func): + func = func.__func__ + while isinstance(func, partial): + func = func.func + if not inspect.isfunction(func): + return False + + if func.__code__.co_flags & inspect.CO_COROUTINE: + return True + + acic = asyncio.coroutines._is_coroutine # type: ignore[attr-defined] + return getattr(func, "_is_coroutine", None) is acic diff --git a/venv/Lib/site-packages/blinker/base.py b/venv/Lib/site-packages/blinker/base.py new file mode 100644 index 0000000..80e24e2 --- /dev/null +++ b/venv/Lib/site-packages/blinker/base.py @@ -0,0 +1,551 @@ +"""Signals and events. + +A small implementation of signals, inspired by a snippet of Django signal +API client code seen in a blog post. Signals are first-class objects and +each manages its own receivers and message emission. + +The :func:`signal` function provides singleton behavior for named signals. + +""" +from __future__ import annotations + +import typing as t +from collections import defaultdict +from contextlib import contextmanager +from warnings import warn +from weakref import WeakValueDictionary + +from blinker._utilities import annotatable_weakref +from blinker._utilities import hashable_identity +from blinker._utilities import IdentityType +from blinker._utilities import is_coroutine_function +from blinker._utilities import lazy_property +from blinker._utilities import reference +from blinker._utilities import symbol +from blinker._utilities import WeakTypes + +if t.TYPE_CHECKING: + import typing_extensions as te + + T_callable = t.TypeVar("T_callable", bound=t.Callable[..., t.Any]) + + T = t.TypeVar("T") + P = te.ParamSpec("P") + + AsyncWrapperType = t.Callable[[t.Callable[P, T]], t.Callable[P, t.Awaitable[T]]] + SyncWrapperType = t.Callable[[t.Callable[P, t.Awaitable[T]]], t.Callable[P, T]] + +ANY = symbol("ANY") +ANY.__doc__ = 'Token for "any sender".' +ANY_ID = 0 + + +class Signal: + """A notification emitter.""" + + #: An :obj:`ANY` convenience synonym, allows ``Signal.ANY`` + #: without an additional import. + ANY = ANY + + @lazy_property + def receiver_connected(self) -> Signal: + """Emitted after each :meth:`connect`. + + The signal sender is the signal instance, and the :meth:`connect` + arguments are passed through: *receiver*, *sender*, and *weak*. + + .. versionadded:: 1.2 + + """ + return Signal(doc="Emitted after a receiver connects.") + + @lazy_property + def receiver_disconnected(self) -> Signal: + """Emitted after :meth:`disconnect`. + + The sender is the signal instance, and the :meth:`disconnect` arguments + are passed through: *receiver* and *sender*. + + Note, this signal is emitted **only** when :meth:`disconnect` is + called explicitly. + + The disconnect signal can not be emitted by an automatic disconnect + (due to a weakly referenced receiver or sender going out of scope), + as the receiver and/or sender instances are no longer available for + use at the time this signal would be emitted. + + An alternative approach is available by subscribing to + :attr:`receiver_connected` and setting up a custom weakref cleanup + callback on weak receivers and senders. + + .. versionadded:: 1.2 + + """ + return Signal(doc="Emitted after a receiver disconnects.") + + def __init__(self, doc: str | None = None) -> None: + """ + :param doc: optional. If provided, will be assigned to the signal's + __doc__ attribute. + + """ + if doc: + self.__doc__ = doc + #: A mapping of connected receivers. + #: + #: The values of this mapping are not meaningful outside of the + #: internal :class:`Signal` implementation, however the boolean value + #: of the mapping is useful as an extremely efficient check to see if + #: any receivers are connected to the signal. + self.receivers: dict[IdentityType, t.Callable | annotatable_weakref] = {} + self.is_muted = False + self._by_receiver: dict[IdentityType, set[IdentityType]] = defaultdict(set) + self._by_sender: dict[IdentityType, set[IdentityType]] = defaultdict(set) + self._weak_senders: dict[IdentityType, annotatable_weakref] = {} + + def connect( + self, receiver: T_callable, sender: t.Any = ANY, weak: bool = True + ) -> T_callable: + """Connect *receiver* to signal events sent by *sender*. + + :param receiver: A callable. Will be invoked by :meth:`send` with + `sender=` as a single positional argument and any ``kwargs`` that + were provided to a call to :meth:`send`. + + :param sender: Any object or :obj:`ANY`, defaults to ``ANY``. + Restricts notifications delivered to *receiver* to only those + :meth:`send` emissions sent by *sender*. If ``ANY``, the receiver + will always be notified. A *receiver* may be connected to + multiple *sender* values on the same Signal through multiple calls + to :meth:`connect`. + + :param weak: If true, the Signal will hold a weakref to *receiver* + and automatically disconnect when *receiver* goes out of scope or + is garbage collected. Defaults to True. + + """ + receiver_id = hashable_identity(receiver) + receiver_ref: T_callable | annotatable_weakref + + if weak: + receiver_ref = reference(receiver, self._cleanup_receiver) + receiver_ref.receiver_id = receiver_id + else: + receiver_ref = receiver + sender_id: IdentityType + if sender is ANY: + sender_id = ANY_ID + else: + sender_id = hashable_identity(sender) + + self.receivers.setdefault(receiver_id, receiver_ref) + self._by_sender[sender_id].add(receiver_id) + self._by_receiver[receiver_id].add(sender_id) + del receiver_ref + + if sender is not ANY and sender_id not in self._weak_senders: + # wire together a cleanup for weakref-able senders + try: + sender_ref = reference(sender, self._cleanup_sender) + sender_ref.sender_id = sender_id + except TypeError: + pass + else: + self._weak_senders.setdefault(sender_id, sender_ref) + del sender_ref + + # broadcast this connection. if receivers raise, disconnect. + if "receiver_connected" in self.__dict__ and self.receiver_connected.receivers: + try: + self.receiver_connected.send( + self, receiver=receiver, sender=sender, weak=weak + ) + except TypeError as e: + self.disconnect(receiver, sender) + raise e + if receiver_connected.receivers and self is not receiver_connected: + try: + receiver_connected.send( + self, receiver_arg=receiver, sender_arg=sender, weak_arg=weak + ) + except TypeError as e: + self.disconnect(receiver, sender) + raise e + return receiver + + def connect_via( + self, sender: t.Any, weak: bool = False + ) -> t.Callable[[T_callable], T_callable]: + """Connect the decorated function as a receiver for *sender*. + + :param sender: Any object or :obj:`ANY`. The decorated function + will only receive :meth:`send` emissions sent by *sender*. If + ``ANY``, the receiver will always be notified. A function may be + decorated multiple times with differing *sender* values. + + :param weak: If true, the Signal will hold a weakref to the + decorated function and automatically disconnect when *receiver* + goes out of scope or is garbage collected. Unlike + :meth:`connect`, this defaults to False. + + The decorated function will be invoked by :meth:`send` with + `sender=` as a single positional argument and any ``kwargs`` that + were provided to the call to :meth:`send`. + + + .. versionadded:: 1.1 + + """ + + def decorator(fn: T_callable) -> T_callable: + self.connect(fn, sender, weak) + return fn + + return decorator + + @contextmanager + def connected_to( + self, receiver: t.Callable, sender: t.Any = ANY + ) -> t.Generator[None, None, None]: + """Execute a block with the signal temporarily connected to *receiver*. + + :param receiver: a receiver callable + :param sender: optional, a sender to filter on + + This is a context manager for use in the ``with`` statement. It can + be useful in unit tests. *receiver* is connected to the signal for + the duration of the ``with`` block, and will be disconnected + automatically when exiting the block: + + .. code-block:: python + + with on_ready.connected_to(receiver): + # do stuff + on_ready.send(123) + + .. versionadded:: 1.1 + + """ + self.connect(receiver, sender=sender, weak=False) + try: + yield None + except Exception as e: + self.disconnect(receiver) + raise e + else: + self.disconnect(receiver) + + @contextmanager + def muted(self) -> t.Generator[None, None, None]: + """Context manager for temporarily disabling signal. + Useful for test purposes. + """ + self.is_muted = True + try: + yield None + except Exception as e: + raise e + finally: + self.is_muted = False + + def temporarily_connected_to( + self, receiver: t.Callable, sender: t.Any = ANY + ) -> t.ContextManager[None]: + """An alias for :meth:`connected_to`. + + :param receiver: a receiver callable + :param sender: optional, a sender to filter on + + .. versionadded:: 0.9 + + .. versionchanged:: 1.1 + Renamed to :meth:`connected_to`. ``temporarily_connected_to`` was + deprecated in 1.2 and will be removed in a subsequent version. + + """ + warn( + "temporarily_connected_to is deprecated; use connected_to instead.", + DeprecationWarning, + ) + return self.connected_to(receiver, sender) + + def send( + self, + *sender: t.Any, + _async_wrapper: AsyncWrapperType | None = None, + **kwargs: t.Any, + ) -> list[tuple[t.Callable, t.Any]]: + """Emit this signal on behalf of *sender*, passing on ``kwargs``. + + Returns a list of 2-tuples, pairing receivers with their return + value. The ordering of receiver notification is undefined. + + :param sender: Any object or ``None``. If omitted, synonymous + with ``None``. Only accepts one positional argument. + :param _async_wrapper: A callable that should wrap a coroutine + receiver and run it when called synchronously. + + :param kwargs: Data to be sent to receivers. + """ + if self.is_muted: + return [] + + sender = self._extract_sender(sender) + results = [] + for receiver in self.receivers_for(sender): + if is_coroutine_function(receiver): + if _async_wrapper is None: + raise RuntimeError("Cannot send to a coroutine function") + receiver = _async_wrapper(receiver) + result = receiver(sender, **kwargs) # type: ignore[call-arg] + results.append((receiver, result)) + return results + + async def send_async( + self, + *sender: t.Any, + _sync_wrapper: SyncWrapperType | None = None, + **kwargs: t.Any, + ) -> list[tuple[t.Callable, t.Any]]: + """Emit this signal on behalf of *sender*, passing on ``kwargs``. + + Returns a list of 2-tuples, pairing receivers with their return + value. The ordering of receiver notification is undefined. + + :param sender: Any object or ``None``. If omitted, synonymous + with ``None``. Only accepts one positional argument. + :param _sync_wrapper: A callable that should wrap a synchronous + receiver and run it when awaited. + + :param kwargs: Data to be sent to receivers. + """ + if self.is_muted: + return [] + + sender = self._extract_sender(sender) + results = [] + for receiver in self.receivers_for(sender): + if not is_coroutine_function(receiver): + if _sync_wrapper is None: + raise RuntimeError("Cannot send to a non-coroutine function") + receiver = _sync_wrapper(receiver) # type: ignore[arg-type] + result = await receiver(sender, **kwargs) # type: ignore[call-arg, misc] + results.append((receiver, result)) + return results + + def _extract_sender(self, sender: t.Any) -> t.Any: + if not self.receivers: + # Ensure correct signature even on no-op sends, disable with -O + # for lowest possible cost. + if __debug__ and sender and len(sender) > 1: + raise TypeError( + f"send() accepts only one positional argument, {len(sender)} given" + ) + return [] + + # Using '*sender' rather than 'sender=None' allows 'sender' to be + # used as a keyword argument- i.e. it's an invisible name in the + # function signature. + if len(sender) == 0: + sender = None + elif len(sender) > 1: + raise TypeError( + f"send() accepts only one positional argument, {len(sender)} given" + ) + else: + sender = sender[0] + return sender + + def has_receivers_for(self, sender: t.Any) -> bool: + """True if there is probably a receiver for *sender*. + + Performs an optimistic check only. Does not guarantee that all + weakly referenced receivers are still alive. See + :meth:`receivers_for` for a stronger search. + + """ + if not self.receivers: + return False + if self._by_sender[ANY_ID]: + return True + if sender is ANY: + return False + return hashable_identity(sender) in self._by_sender + + def receivers_for( + self, sender: t.Any + ) -> t.Generator[t.Callable | annotatable_weakref, None, None]: + """Iterate all live receivers listening for *sender*.""" + # TODO: test receivers_for(ANY) + if self.receivers: + sender_id = hashable_identity(sender) + if sender_id in self._by_sender: + ids = self._by_sender[ANY_ID] | self._by_sender[sender_id] + else: + ids = self._by_sender[ANY_ID].copy() + for receiver_id in ids: + receiver = self.receivers.get(receiver_id) + if receiver is None: + continue + if isinstance(receiver, WeakTypes): + strong = receiver() + if strong is None: + self._disconnect(receiver_id, ANY_ID) + continue + receiver = strong + yield receiver # type: ignore[misc] + + def disconnect(self, receiver: t.Callable, sender: t.Any = ANY) -> None: + """Disconnect *receiver* from this signal's events. + + :param receiver: a previously :meth:`connected` callable + + :param sender: a specific sender to disconnect from, or :obj:`ANY` + to disconnect from all senders. Defaults to ``ANY``. + + """ + sender_id: IdentityType + if sender is ANY: + sender_id = ANY_ID + else: + sender_id = hashable_identity(sender) + receiver_id = hashable_identity(receiver) + self._disconnect(receiver_id, sender_id) + + if ( + "receiver_disconnected" in self.__dict__ + and self.receiver_disconnected.receivers + ): + self.receiver_disconnected.send(self, receiver=receiver, sender=sender) + + def _disconnect(self, receiver_id: IdentityType, sender_id: IdentityType) -> None: + if sender_id == ANY_ID: + if self._by_receiver.pop(receiver_id, False): + for bucket in self._by_sender.values(): + bucket.discard(receiver_id) + self.receivers.pop(receiver_id, None) + else: + self._by_sender[sender_id].discard(receiver_id) + self._by_receiver[receiver_id].discard(sender_id) + + def _cleanup_receiver(self, receiver_ref: annotatable_weakref) -> None: + """Disconnect a receiver from all senders.""" + self._disconnect(t.cast(IdentityType, receiver_ref.receiver_id), ANY_ID) + + def _cleanup_sender(self, sender_ref: annotatable_weakref) -> None: + """Disconnect all receivers from a sender.""" + sender_id = t.cast(IdentityType, sender_ref.sender_id) + assert sender_id != ANY_ID + self._weak_senders.pop(sender_id, None) + for receiver_id in self._by_sender.pop(sender_id, ()): + self._by_receiver[receiver_id].discard(sender_id) + + def _cleanup_bookkeeping(self) -> None: + """Prune unused sender/receiver bookkeeping. Not threadsafe. + + Connecting & disconnecting leave behind a small amount of bookkeeping + for the receiver and sender values. Typical workloads using Blinker, + for example in most web apps, Flask, CLI scripts, etc., are not + adversely affected by this bookkeeping. + + With a long-running Python process performing dynamic signal routing + with high volume- e.g. connecting to function closures, "senders" are + all unique object instances, and doing all of this over and over- you + may see memory usage will grow due to extraneous bookkeeping. (An empty + set() for each stale sender/receiver pair.) + + This method will prune that bookkeeping away, with the caveat that such + pruning is not threadsafe. The risk is that cleanup of a fully + disconnected receiver/sender pair occurs while another thread is + connecting that same pair. If you are in the highly dynamic, unique + receiver/sender situation that has lead you to this method, that + failure mode is perhaps not a big deal for you. + """ + for mapping in (self._by_sender, self._by_receiver): + for _id, bucket in list(mapping.items()): + if not bucket: + mapping.pop(_id, None) + + def _clear_state(self) -> None: + """Throw away all signal state. Useful for unit tests.""" + self._weak_senders.clear() + self.receivers.clear() + self._by_sender.clear() + self._by_receiver.clear() + + +receiver_connected = Signal( + """\ +Sent by a :class:`Signal` after a receiver connects. + +:argument: the Signal that was connected to +:keyword receiver_arg: the connected receiver +:keyword sender_arg: the sender to connect to +:keyword weak_arg: true if the connection to receiver_arg is a weak reference + +.. deprecated:: 1.2 + +As of 1.2, individual signals have their own private +:attr:`~Signal.receiver_connected` and +:attr:`~Signal.receiver_disconnected` signals with a slightly simplified +call signature. This global signal is planned to be removed in 1.6. + +""" +) + + +class NamedSignal(Signal): + """A named generic notification emitter.""" + + def __init__(self, name: str, doc: str | None = None) -> None: + Signal.__init__(self, doc) + + #: The name of this signal. + self.name = name + + def __repr__(self) -> str: + base = Signal.__repr__(self) + return f"{base[:-1]}; {self.name!r}>" + + +class Namespace(dict): + """A mapping of signal names to signals.""" + + def signal(self, name: str, doc: str | None = None) -> NamedSignal: + """Return the :class:`NamedSignal` *name*, creating it if required. + + Repeated calls to this function will return the same signal object. + + """ + try: + return self[name] # type: ignore[no-any-return] + except KeyError: + result = self.setdefault(name, NamedSignal(name, doc)) + return result # type: ignore[no-any-return] + + +class WeakNamespace(WeakValueDictionary): + """A weak mapping of signal names to signals. + + Automatically cleans up unused Signals when the last reference goes out + of scope. This namespace implementation exists for a measure of legacy + compatibility with Blinker <= 1.2, and may be dropped in the future. + + .. versionadded:: 1.3 + + """ + + def signal(self, name: str, doc: str | None = None) -> NamedSignal: + """Return the :class:`NamedSignal` *name*, creating it if required. + + Repeated calls to this function will return the same signal object. + + """ + try: + return self[name] # type: ignore[no-any-return] + except KeyError: + result = self.setdefault(name, NamedSignal(name, doc)) + return result # type: ignore[no-any-return] + + +signal = Namespace().signal diff --git a/venv/Lib/site-packages/blinker/py.typed b/venv/Lib/site-packages/blinker/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/INSTALLER b/venv/Lib/site-packages/click-8.1.7.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/LICENSE.rst b/venv/Lib/site-packages/click-8.1.7.dist-info/LICENSE.rst new file mode 100644 index 0000000..d12a849 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.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/site-packages/click-8.1.7.dist-info/METADATA b/venv/Lib/site-packages/click-8.1.7.dist-info/METADATA new file mode 100644 index 0000000..7a6bbb2 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.dist-info/METADATA @@ -0,0 +1,103 @@ +Metadata-Version: 2.1 +Name: click +Version: 8.1.7 +Summary: Composable command line interface toolkit +Home-page: https://palletsprojects.com/p/click/ +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: Chat, https://discord.gg/pallets +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst +Requires-Dist: colorama ; platform_system == "Windows" +Requires-Dist: importlib-metadata ; python_version < "3.8" + +\$ click\_ +========== + +Click is a Python package for creating beautiful command line interfaces +in a composable way with as little code as necessary. It's the "Command +Line Interface Creation Kit". It's highly configurable but comes with +sensible defaults out of the box. + +It aims to make the process of writing command line tools quick and fun +while also preventing any frustration caused by the inability to +implement an intended CLI API. + +Click in three points: + +- Arbitrary nesting of commands +- Automatic help page generation +- Supports lazy loading of subcommands at runtime + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U click + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + import click + + @click.command() + @click.option("--count", default=1, help="Number of greetings.") + @click.option("--name", prompt="Your name", help="The person to greet.") + def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for _ in range(count): + click.echo(f"Hello, {name}!") + + if __name__ == '__main__': + hello() + +.. code-block:: text + + $ python hello.py --count=3 + Your name: Click + Hello, Click! + Hello, Click! + Hello, Click! + + +Donate +------ + +The Pallets organization develops and supports Click and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://click.palletsprojects.com/ +- Changes: https://click.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/click/ +- Source Code: https://github.com/pallets/click +- Issue Tracker: https://github.com/pallets/click/issues +- Chat: https://discord.gg/pallets diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/RECORD b/venv/Lib/site-packages/click-8.1.7.dist-info/RECORD new file mode 100644 index 0000000..4b99495 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.dist-info/RECORD @@ -0,0 +1,40 @@ +click-8.1.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click-8.1.7.dist-info/LICENSE.rst,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475 +click-8.1.7.dist-info/METADATA,sha256=qIMevCxGA9yEmJOM_4WHuUJCwWpsIEVbCPOhs45YPN4,3014 +click-8.1.7.dist-info/RECORD,, +click-8.1.7.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click-8.1.7.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92 +click-8.1.7.dist-info/top_level.txt,sha256=J1ZQogalYS4pphY_lPECoNMfw0HzTSrZglC4Yfwo4xA,6 +click/__init__.py,sha256=YDDbjm406dTOA0V8bTtdGnhN7zj5j-_dFRewZF_pLvw,3138 +click/__pycache__/__init__.cpython-311.pyc,, +click/__pycache__/_compat.cpython-311.pyc,, +click/__pycache__/_termui_impl.cpython-311.pyc,, +click/__pycache__/_textwrap.cpython-311.pyc,, +click/__pycache__/_winconsole.cpython-311.pyc,, +click/__pycache__/core.cpython-311.pyc,, +click/__pycache__/decorators.cpython-311.pyc,, +click/__pycache__/exceptions.cpython-311.pyc,, +click/__pycache__/formatting.cpython-311.pyc,, +click/__pycache__/globals.cpython-311.pyc,, +click/__pycache__/parser.cpython-311.pyc,, +click/__pycache__/shell_completion.cpython-311.pyc,, +click/__pycache__/termui.cpython-311.pyc,, +click/__pycache__/testing.cpython-311.pyc,, +click/__pycache__/types.cpython-311.pyc,, +click/__pycache__/utils.cpython-311.pyc,, +click/_compat.py,sha256=5318agQpbt4kroKsbqDOYpTSWzL_YCZVUQiTT04yXmc,18744 +click/_termui_impl.py,sha256=3dFYv4445Nw-rFvZOTBMBPYwB1bxnmNk9Du6Dm_oBSU,24069 +click/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353 +click/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860 +click/core.py,sha256=j6oEWtGgGna8JarD6WxhXmNnxLnfRjwXglbBc-8jr7U,114086 +click/decorators.py,sha256=-ZlbGYgV-oI8jr_oH4RpuL1PFS-5QmeuEAsLDAYgxtw,18719 +click/exceptions.py,sha256=fyROO-47HWFDjt2qupo7A3J32VlpM-ovJnfowu92K3s,9273 +click/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706 +click/globals.py,sha256=TP-qM88STzc7f127h35TD_v920FgfOD2EwzqA0oE8XU,1961 +click/parser.py,sha256=LKyYQE9ZLj5KgIDXkrcTHQRXIggfoivX14_UVIn56YA,19067 +click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click/shell_completion.py,sha256=Ty3VM_ts0sQhj6u7eFTiLwHPoTgcXTGEAUg2OpLqYKw,18460 +click/termui.py,sha256=H7Q8FpmPelhJ2ovOhfCRhjMtCpNyjFXryAMLZODqsdc,28324 +click/testing.py,sha256=1Qd4kS5bucn1hsNIRryd0WtTMuCpkA93grkWxT8POsU,16084 +click/types.py,sha256=TZvz3hKvBztf-Hpa2enOmP4eznSPLzijjig5b_0XMxE,36391 +click/utils.py,sha256=1476UduUNY6UePGU4m18uzVHLt1sKM2PP3yWsQhbItM,20298 diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/REQUESTED b/venv/Lib/site-packages/click-8.1.7.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/WHEEL b/venv/Lib/site-packages/click-8.1.7.dist-info/WHEEL new file mode 100644 index 0000000..2c08da0 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.41.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/click-8.1.7.dist-info/top_level.txt b/venv/Lib/site-packages/click-8.1.7.dist-info/top_level.txt new file mode 100644 index 0000000..dca9a90 --- /dev/null +++ b/venv/Lib/site-packages/click-8.1.7.dist-info/top_level.txt @@ -0,0 +1 @@ +click diff --git a/venv/Lib/site-packages/click/__init__.py b/venv/Lib/site-packages/click/__init__.py new file mode 100644 index 0000000..9a1dab0 --- /dev/null +++ b/venv/Lib/site-packages/click/__init__.py @@ -0,0 +1,73 @@ +""" +Click is a simple Python module inspired by the stdlib optparse to make +writing command line scripts fun. Unlike other modules, it's based +around a simple API that does not come with too much magic and is +composable. +""" +from .core import Argument as Argument +from .core import BaseCommand as BaseCommand +from .core import Command as Command +from .core import CommandCollection as CommandCollection +from .core import Context as Context +from .core import Group as Group +from .core import MultiCommand as MultiCommand +from .core import Option as Option +from .core import Parameter as Parameter +from .decorators import argument as argument +from .decorators import command as command +from .decorators import confirmation_option as confirmation_option +from .decorators import group as group +from .decorators import help_option as help_option +from .decorators import make_pass_decorator as make_pass_decorator +from .decorators import option as option +from .decorators import pass_context as pass_context +from .decorators import pass_obj as pass_obj +from .decorators import password_option as password_option +from .decorators import version_option as version_option +from .exceptions import Abort as Abort +from .exceptions import BadArgumentUsage as BadArgumentUsage +from .exceptions import BadOptionUsage as BadOptionUsage +from .exceptions import BadParameter as BadParameter +from .exceptions import ClickException as ClickException +from .exceptions import FileError as FileError +from .exceptions import MissingParameter as MissingParameter +from .exceptions import NoSuchOption as NoSuchOption +from .exceptions import UsageError as UsageError +from .formatting import HelpFormatter as HelpFormatter +from .formatting import wrap_text as wrap_text +from .globals import get_current_context as get_current_context +from .parser import OptionParser as OptionParser +from .termui import clear as clear +from .termui import confirm as confirm +from .termui import echo_via_pager as echo_via_pager +from .termui import edit as edit +from .termui import getchar as getchar +from .termui import launch as launch +from .termui import pause as pause +from .termui import progressbar as progressbar +from .termui import prompt as prompt +from .termui import secho as secho +from .termui import style as style +from .termui import unstyle as unstyle +from .types import BOOL as BOOL +from .types import Choice as Choice +from .types import DateTime as DateTime +from .types import File as File +from .types import FLOAT as FLOAT +from .types import FloatRange as FloatRange +from .types import INT as INT +from .types import IntRange as IntRange +from .types import ParamType as ParamType +from .types import Path as Path +from .types import STRING as STRING +from .types import Tuple as Tuple +from .types import UNPROCESSED as UNPROCESSED +from .types import UUID as UUID +from .utils import echo as echo +from .utils import format_filename as format_filename +from .utils import get_app_dir as get_app_dir +from .utils import get_binary_stream as get_binary_stream +from .utils import get_text_stream as get_text_stream +from .utils import open_file as open_file + +__version__ = "8.1.7" diff --git a/venv/Lib/site-packages/click/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03fd69fbbcf726dc36bd03f4a67d6971db4786fb GIT binary patch literal 3687 zcma)-NpIUq631J%HcRpr$61^>X6z)6H+hNUEsh;aUg9@-wh`NSKtli@MKTh{+|Z=r z=bYv^-(Wt%V1W5BJQ6w$FsHc;0=(NhO;yQD8q#6x!e75Gc2{*3o8;endvgr_{`=Qo z%~FA}f8*fhuj?9qAL(Z7Z_Hqv8407yPB>k>D}me%+|9d*lfX%yBu)XRc#1d;oaSlb z3~+{Lh_k?1o+a)9?%_SeIp7@65$El^Q{V;S0&p+yCGG|8<9)<^!2P_RxF2|c4-gLk z5As3cLEwA*9`QZkAwEPr1bm<0C%z9n%!i4GfgkV(#1HI;&LjSa_#yCP{+Rd?@CY9v zehmDCKOr6ge#)N`KLH-)qr^{vpYdnJqrhW)jQAO_!WH5%`?)jD$B7l-2|hvm+$|Z;5j}={2I8(i^NmF^L(Co z8hC*(5YGTF@Li{DFTU-T>a=JH+pROT0w9 z30&r7;`jEhv&Z*{w}AKgKJhm20Y4!A0Q`}EB;El&Ba(Og5ZEf*&1!t%pF`O7pCGt6mcCrm{qKBGEk~oU>Z41 zcnw&2yOEufLrAHGis6}o;(8$lHs=gKk zs$uG$&_WM`r*9V)=o$pQ-e#7@UiHr~s~`E&6UJS-VBf-zp-s$PyE)0|B=ZExrz199N z)LHclShZYDT&Y1QOw9pjKRWRi+_`!@-*hR?x71p3vAB9P z^{JUrRm0O&wV8yoY6|%HGLb|{p`=kVC|Q&q6#RyZJV-Nld%yz$-*YBDB@ zRm~2>IF8ajoh~s!12~&b!xArW@=KIgD3d6!QKnF)QD#tPQRYyJDDxoAR0wx75DVy7 zL|H<4gR+eB7G(ux6=e-&9c2UM9m*!kdyrnt4^ddH&UZ zu;0PO{x~mhRLlh!29*OV{Me{gj^RH4;)x45p_i4fru((>$*NWY zD>UbPO}~I=DX8f94VhO}%e6vPE&5k~WH(!%k1g>Tvf!II_$Qo%@7;++;(J#rk^Ih3 z3M?@hu~$D@%w{9mV)i1EEoN(xY@OyP5tA%t#Ync8jYqP@>~$ntr~OPvOtP4jBH3cO zC@3&yOOb4yR<&nej+kVf_OlT&$vX8%YBKF-Gh&i;S|z21ophSh-c>0qWQpYxD9%E} zB#YTfBwMHZwH-0ZVmS!J>~v4tYj3YhIx28-I^DtcbJ%`<+Pm@ptZI+bzUQ%sNfxt- zNVb^4(i@UIGzfxdf=_Uwy-W$>YB`fw$KG0AZFrasU7T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/_compat.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/_compat.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1fdd684e9d9dc4f4d4a28dd604a972bbf3b0afa GIT binary patch literal 28678 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 BBEJ9t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/_termui_impl.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d630c795f8b85d365579f3a24dc3525cb5e06ba8 GIT binary patch literal 33075 zcmch=d2k$8nje^TXI-ch_f@z79v}&V6c3RU4uYgaffC7a7eJ`uBG7A8kz3tdU;>(xselOqqzVChC_g?*(+wI_R{g?PVVawYb_wVT?ciFR! zFQ-i$cZ(Ca0ZuRo#!Z7hD%eJg#ykTa=H}t{4tSZ{4!3W>$J`FM{R4jHcETMP2r#z`?%+U> zx!rIV4-_+Z5!@vMCCu#^EgdTxC}VE#X!%&hK!t%ba$(zr%3Naw-%kx3_YwY;YoID@ zx=@{a6Z{vA0+$v7W3)Pd5A%z5NmEamssOv#>*GLc5y7O+pL)E5lpP z@50(AaCnk} z97r-DMnln&v2bYOY^Y~+WcXr8n7BN?B@~%}-^ln`G5qcn@*KSynu>&l(AlZ+Vak4J zbR>E;G!k)4jt&jOe`FjP<|{QcE`%n=kw_^45r!h6@o-oO3+;~2sSEqt3~AfBa5Nge z5`~jL6%|Lu&mB7fxBIk+JkJabUp#$vGW-=fq@q9O=aH&=_7FaE(k34vj}f@WxXw z4UUG#;WjDR6|wF(d}TO1Ni9ZzIXrxRB5imrZ5)q2F}R-?9Md*;<#!Hs>>8c6vFCZm zusS~AsLQ^5Sla4gz|jAe5MP2wG2&foi#Gt7C;Ou-1UeZ6m|&>cov6C;9Cmc#x+#AQ~iQJ4U=9(>v7C$WV7duvjH+Sw$Fyc*} zdNB{)Jh`x#M=&Z(6@1nHiWz4s1S6P6-}OrVjAd1GK4^$fv`F=iCZS(eNwaCkS& z9z|MDv?Z56#|aiaOZR<4RAp5-?t7q2vxtJ_>^$Q6c5P+>e z&51PRL2aGNoE|(sG9LZ>|G_m~lbi1$ur^94Sdb90C?jH6=xb{gsfi-BO$-sBmWb2< zk?Ji{b;TwER0)x0g-DY~q*{pd;YAt~;5CLPh?|Org+Y`a7B3BrM#N1NWFMM}PAJox z2SXtaMJGg&21nXX+{$551V%7K)8^r!2oTA!EQS(&6vZMAjh_pr&D0K&zEs*oNX9gD z>0H`OTv*x?i4KWKH;U8@G1-Bg1}~0-Crk5ZN5)4Y=fgtUJ~nh^P^p9s_$rLXr(MHS zqKKD4!dN2F?X-O)g5DE^@OauW$Z{MV84tJl(&k8b^sGn&iPhrw>ot8}v0h;v5TPc9 z3a=+`^z3`{TamCBdGpM)aCQ96-ihHU;!-1T9vO)qojUX839x0aPly-$Mkg-6c_}=8 z>CNLKXWopU8Cxg80}h=FN8TJJ&U714II*&W#ObzAUQP3Z_&Oue!NKXEhHSLweCZoU z=73ITxlAKh(GWM!6{RW~@$jUoTH|J!FHe<)@aoPz3Vds}P^8LKMeX9|LSzEw~0qW^j<9!r&1&s$T@K+;*6 z@)XD4TPdkchF*|Ly5y3sq_=COv~1zhouS(oe(t+H_VaJu-~F?hJkJe;XO5Dz|8Pu;?&cvq6IVz7LrsqO9?fBK!f-%0Xl#hhdQ^uk-I zT8dVbs-eDgr#7{-x9WO4T&d05SeLFev@JE>Ym*u}<%Z5=Z6}LDVRN21{=URV;hq#} zzSnnNduv#wc?hKGPjv3f=K&ySAj}1qa>clWHg3+lfNBw51U51DpKddXU5J$SU}^|q zad0xrUi{1;9)^E}G7E`)6vaM>bpu8ihEuVodKgYw?~9Zm1Tf2`N-J5LdDkPpYMHN+ z_!^n7N%A!*Pay6Tk5Ybo_{#8L6gVMmCl^r2R5)#no*5>Lle^T$5(>G6YA13by5~>v z_L1rX$pxDCGXpJp+}VaHxS`F=nkDulu6TmLD*zEHktU|nP)wWfmG!2L;yXzx2sdEb zxH!A}5nr*)S4e!7%vWJ_C^u`O?z7P+W1sCkIH)BT@KmmdCrTmNODG_I-^T||P(Q4> z3R{hMntbxn_3_w;f71TO#1va`hN2U+bPeUcd*vYFP2t zBx_Gd{#RuGD@oTYm~Csv(1-6`e^2t%%AVRJU%R%iiPd9$y$_CCTvRh9v^^c;^yF9n zc8U{EB6*uJZ63#pTHJ#dah(=Y;93-`_|mtIlmX0gU%P+`f7rViyz%0~i%+RL)tl8l z4u^i6h+y7M(a2HTv;MeDxpTUz3`~{hCWZT9mn@^n^w1L2SkhfQ1+FY18(u zzSDs3FAF9&%_=I*safVzNnBTd&e-H64Mejr>>Cs>rYp6rFrQo9K2 zf&vbfe5Re?oDF(j78A_W{~whsGKbiDtj!`Gf=AkfHITTMTrWy{gi&1Mb`R$ia=n!rk@Z?x%2}oN>eU-74%@v`>B(S`VlDG*nch; z9TP&ijRx4_gr3aNe@w)1~kN8>Nr1xOTx#UPEj2Bv(5J z){F?vjCkKoBS1Sx{)D?@oQ8aaMv20<7`C;UfD)pjG6iT_fQ3Db2lI%~^eXIsEFstJ zfB63#(IX_JnB`WAeDjS9t=Gop#^NR-MKo1XE>AMhI3Hd3E*`igS7W?~W{6{L575|T zGlaO?je7v&9^*vc4}uZn*mMU{8iD(}8nH0iZ0Y}8Kz`H4Q0EgvlR`|4q6jZBOrVf< zVk;!u!u}gb;LyZcR7fGiwNLjCB+Vui%Tg%B9T#F|x>#4HDz{A0w0qKf8b?w7F?f zEOMJMj(X5BJK9Juy_%|I-9fqH;l5X~|4E%xe4G--Q5D?-d`4GGojmU_}%A<5^V-ji;ED0Bd7G5!ve&A8>Vvt$;*}!7BFh_u2$U0UJDJapc z(4hRt+l0(Dk`cz=m`6u2H;F{0%|LzU)288xh{EugFHDS#XV+h82ML_BGHDas5EVlv z9Vu9d<;F51tUH$B|IbiVD%94GT(DZ)g4m#PPu$%{Kb^NWT8E= zPx5cY1a^7AFda$=cQ4%ECp90C0tY46!FUfs+`hTDGMv+1r^N5PtE7ncJPwvE25;9c z_1=4N=>*uS^5>=C0XcX8NY@jPJH^}_1X ztiEU*KZW}v^<6){u--5{HAi*MsTsiWJ95;{@m;99Etgho$D2AUBTs9IJ(ouN{GH_j z+bGxjJJ1{ITh5oBsDV18^?d=HVS2xK!`>~JnQWz|&SB&VGN@cAxhUt>KJ~Rn3KhF0 zyxMpKsSL90ha3@k*kit-vNNGi0PxV2!s^_`7J4`&WuDOaFQO1 z-V1O@Fw1OBW(8Y=B;uV8t;3G#V*D0mMs|X-0k4!+%B8Jw*J`jNZqG3WiCD5_f2y|O z_Dr&JOZ>RHBHNyF6+d!SExUk&emwZ2L8-c3u5OoH+ho_aq-$HsSxT#o-x({rzS|B& z_BKm!zxU&ppDm^AtVudIrOK)vm2F-w+q~2(Z#f{99hA!s#*d{uWl2wC%3J=(8(Q{; z66KP2v+UiR^lr{rIk!)CRj&eHRiMSUzIXF`QfVt1j+}10AC+xdF59%US1Q{jm+i{f z%$}kQ2LMdvF8XgS&gr|}e64k^HRG|_18aE&j4FjS`deTY5?Kn|sDgJ?Nrrd`BUZaO zQgKk0wr)kZ>Iadh8aJw$%lbGvu7T>nu6stkg^?oR$YRPoF1d@mR9rFxn=O>7zH6!Z zMwsBIC~YIWIAe~MW~+k-@;0nbul0FoaDbUOAHCRN#sYf|460tj0&l76aM_z$-DGDt<0vZvQkl18a3)e zw&bQIb|0um3!Y4?2!o-~wm{k%IX@L08C9f=y%g9?fciWiSES{dqE#c3DE?mbH{ed2 z&P<(6+b2eatO~JccytPOSSrJ69}i#7204dE!{B5URU??+aad0fB;Gbcc!{I|>|&|~ zCNQ6_)DoWpy~}?=s|f!ym#)!mFlL1 z@TmFFa`Pdnxl3;DlB&Dq>h5^|N?GM%*W#r|wa+crJ}1@gmFez!*e}(dl*&%YWv3WP zS=_tqX=HRIaLaMiac7_8ZI->wNpEw?%X}7hCW3csq{?lQcf0J}p7d@{)lsdBQswnj z{%T3Z!iBh#$$yj1CSr-(<1el9&JP{e9Y5TsRUSR^v@UyECC?_=vng&~2~;lj-Z;2$ zFwSQa*FgsQ_WkqAO$U=r2UFEe$i6?D(R`=Gm&trtk}pdsSn9{vH3(`lcV}#zs{uJM>X^1=O<{)BDT)tIg=H=) zK~Y0!rMw&Gps~Tx)K6@Dw$ynvMdfQ-NQ+@C;Vb{YzuY-fs>$3PDDKX%@BLWS$jI57U_ z_GCDdealL)Y~k3Amlj?k1SAEw+&6#BOMyM{-gxihK|X3y>{&RF=uPZ~O#m|FiNma1>P?oD*1RZ=KQ<#6`#-FXL^O%q^#A3r0WcekU>C^t z2XD&7=7-8as`Df7qxotWJL*i!&WPv0xM|DFWviP#g=86N)H$IhfI~lXKm@6#YE4Lz z&kXoXLp7+zx0pQ~Gd|8OI!NmpI&(ENBwQLAABJgeXebn!3=fZ-9f5K1_|({$um}@m zheAw3AvRXFgqR&MGrt`gg*9;`3}a=OG{5tX*4X8pce1w5umu9?QuBcPbA&8++a0Rc zzR4kRXe^XPPWwXrxq_7fNms1YFx+04MqA>((1~oNLbNWUWK=cSI2YDT&4n6#L=PFA&8&aVy@m^Z^k!edEjBpaK zOZ*na34TF#HZGav)&t8kl`-y4cw7xhLJ>y1=-4Phg~j*8h68UHZmYi+G*{x{(N%U+~^i8C-tou|FO z+n6JdiA30V=4t0)V2$sZUgK^V|DKsJ2vhZ|7^;_htBdp?=m!-8A+^e!3#P1vXAn3_ zrEaLFdKKcRm;q%Oh{aE+)J%;G2kc1E!jIH%VBqGu5m#NJ0xho2P8#PY!`-tAeFJN zn9N3Wz>_`R69tB&MgRN3aFfd<X)BSz@xD;Ik8TF#OHdElSyt`j9MQI}A#_=Jj{s&>ZIjHRQf!j4W`0muu zs1hPFbuFKxMdEJC%SV7|F|NXuHlLZ87)|p%pr4AR{Arl;96KQ%p=d9&7-YAac6Sd& z!s=!hk*1w^nt~M*RVcD1p)uoC{Gj%-%%k~UMaMd4J*tGcS?SUo3?YCtA=8T1fSvjA7!Lhh= z!IQBu51tE_X6(%A;EKyKPUduRr4<=Ba~5%dl8lEry543T(P**+!TIWd!)mF{b=7N$m*wgX*}pSmfiISd!QzE|i({BS85?=T$~=vv_7tVJ1A zzsE5DEowoJK?}byA^3xDD-lpBC2nWpFh%Oj15Lb6HCjN)F+kB2potd9INTQhVo!#{ zqY%`XEddI`qY$_-04a!#Mm@0llvH?RI6Y`Cw*(Ty84iy^uzRzmCd28$fFWqvkw8>D zmhfTmC;4Jj(yP`EUiG3rdUtjIHa zaiefP+5)j83}A>DKMvl2Hup= z$oTW66|@}sHL)!k%!i9Ut&|-#gNf0ax)JrsUK_;teQIC8G6|MTpg7OaLz-GgYPI&8 zd71zE@_fNs@U;rsEZEj*b8W80obKBQyk4V#-Xsxg_R34h1-rgX!I5P>eNkO+3eL4< z3l70B>YIV_*0V^H-!wwZW0|q)>JiA*C|0m#$$)*M(PwR2mo86lE>FP~v%i1tH^;$KjD?0O!XWLp_+ zV;89*lQ2{norqvV<$Pr&MG3Aoj>VY+Wn{fcl+7Pil=6qxZi5-uzj~RxR7AlXV?Q8{O;F!sej*?fb#-+~}jCrsblh zL|7`?A{T98-YcH!#gV15`@1C1UfHuZ$?sjU75zY*-y_+oWLvhK{=4PL&4;AA7v#DZ z9(FC)9ZuFAR%-Q{roF4?!0ZY7TMbk`3N$PS8l*sz9B6v~_-uEaUol%hI2u3s{_ziv z&mPYhEtaYkr~ii?^H(HiNOpp|GT8V0&hn(co3DzvZI2F~Dny=mZ@(aOMNT7hI?d!`f zP@Y*ZYHca?EhfuSD4eYkUU0x#*hX@B!3m9mg9yMSYzY$F^n|VhzA@AK%nIyPoiWn| zl{tx-?-l74s8BqsJ7>ZCsH~EfO}U^l7%^L(-0Mm43?C(<@@S^@^7HSa!a zY~)0ffqR1+H|Gcy9R(4yB{aR5kFRF{6`2`w*W|c1zq!^n@ASK`fO_ai8wuaf;s6dJ zc_WabL(n}w0TC|fAXyF#jkSkD$Hp&BTx7C&CUjzWJD&+V-ect4`DiFIHObBmVcXxc z!XrlR`o$}#ydvM&My~$}AZU+Q2DKXo2?Y%v8IFn%Dbrt2T-ZxZ;tUd`r-%4U3ivw|V0nek`AC~z zIrhq7CLj@akvHEBt+{v=k`F3Mq#-TRxD?-}P%AqzBrN_5da<22rEKH%y%fHBW@1Pb zj?unAacUCVdM^)+MBAJSRa~a@^fAPLL*QRiVh2zdPAb8XETd@$5&yxnqeJH+X~VG6 zMm~2o2{!zK4ajAV+xqU;F#eIl6uk`YW$NlQu6T&&!W9iSa^(~_e?c2vyv zAkbfYtKw$GVo$;+`5I(jL!w*uwLJ1|UG{C2eA{H-w%Hd`HrMRTVnw3scJ)&8a`|@X zs8-4#m-unfkBSnPmPDznLoVw`7Wd!p`5%w|`OyahpBX+gerEjSZK?CP+<6=UxZ{qL zryR>$dpY#j@t%3>wU;17iywxesM|aLV$xlMJJGOIk*wc|n}x0N{zrV-GGDeBNc7%! zeC&C63R-H3KPL0XX1i8g?zz4n?to9sdr6d)^ zD%5P>$3VO{6(|EKbGNRP)+HLH(iXY2W!}8%@{x#c(fniQkDQ64OCwU*9=U9fhQ^RDL|uppF*OQkK!eJ}esYv=F!(<74fm#~o~;VV<#I zsfpBUufnZ@WUK@{t1f1-^etfUv1n200vN1>MEL zXo=r|Dp}WGE*F|6=}RZfv=qn+z!yg%SL74K-k%UKPmdPJmM|CN?@`(1g6#lOWBnkW{0-pn<4QJQ0NBV0DC-9eqNMBMBY49oh z^QzPR;d9rYo8K!rt7T{PY;Vemg@eHoB1XJX+1U!y98c&c0hj`Kw#c3>vqx9#!TE15 zMkRZrY;R1wD%%+rX<6El;_V;WuG{9#OqXy}@;1rdCW&vB`Q{|wOlU=kNhP#=LEtL_ z>~%vxh-AH3W;2+5#)Y3s`de@>9#x)z65lHGtx3L>*mQp0f6X=Lio2B9I=&v<{Wo8m zh~a-)EL0&v2Lj8dSDsF9)nN*GF}QF~P94F>?gt^ubefSj1I~Vr+E_O~HPewyfb? z4`scN1BHmK!A*K@94+wA`nHO{Yy+3?fbV~c-9F$gTv zh&uuYbXq*;gYep9sbnB-PI(}mHP{KPT;b_rf=4jx&S=ssYy^ug#FR(bVN2Mu!O2}#oC9SGTLc~_ zT{#3h&UfMko?;6QoZw`~Ib=$hS#aUqfs@Dd=a}W{t2sai>3?S&oUT`d{9Npddehd! z!U(ic{imOp+oM;aVBOfe!hN~2XTc0chAy#l7oxCJgfRtEvkhxkb3_H%AUw!AkLjJ& zo@I78>QH27G^tdRozX-o*+rUqMPp|czk&~|hWItP{x5*szRGoi3U*U6h1|49X`Fh5 z$qEgkCS-&`RK%55Lu-#CJ4*22)gw$`W2iMW(jCg6@(hGQ^_ypyaWZ_Bi|ltW4O?am zQMIL5&#CT&+TvUadO|da3Vx*a6ba`=bIdqwB=O%|Yn0E&#!3^kOfaF8di@GsqvJQn zOrWclHNwfk;@^lqX$PH3sFXhK%YNRx7oBbx`4c3~@9)CC<%Ru8S4}F=1ax61#9^<9 z_vD3KCdt<*`x@ijFy#aqabrJ2`MjO}Ku+8hj}`e=bt+Ibzc*E~JHr|6P!$2h`&K-@ zxvR5oY58HgtqF1cYW`y;*(}H$F1|t}I^qT{8ByRq z{2!LeVPELG;ThybNHuK; zx4D(&H+c3e`h7@+{DMNw!xNKN74ww;jXWO{phZa9FqpO~%z*gs@eZ5T!xYB2O17G3 zD4Q}7|CZw83?CesgJVU*B9I#wA*j-;%{$uNptbfek<`v`i zuIum7F;a~y!Qy1eb}6_+4(@mq+_N0q^U#_M?va8=m8LS})Y z)j%*~F}jPvOn#FwAsgZgnh;nEu*eft#^h>!YEsfHE{_ z$Ph6J#u?N2`&wOb%%By>Y7x%af`y?7T`E$a!T!#QjfKbhX%MkMU}{n}^lKNy;wI#< zE_zxkeqJ9T6&_xQniV6@b&*#gG9k`-eN+YADVG=S-Yd|K=0pY?E`-g{lLGaBq%sLu zv;*C(ztd|ik1pU8E1_VI*T&0nE!xTpkz*E}pqVH$yAm2fL(Y#x4*Ku4L0VN;noqel zt>7S&{lZZL0YEUHDu2#w;+gWqUZ)Lqrxw&g<^qo}S(!*AN?c1+u+qGz}6*%}!+H*I0gX&aHF32`g2%#&jH z?8p@?&!^7fDgI}q`kdx5EH}@zl`48&$4CU{ibr9uk8>%{T&06x?DQBC#UUKNh;7eI zr_5B*Vwwv7cLbQwhZaBLLjX`&fdul3oEw?bHx!H~JuQAAsm|DVO>|LEnVMyYC>T(yn3^lI3XE}Cz+=FN{iprR)C7TSg!yBSOLE;UP~ zJLJ+Gk4pC}m+pB`DU}|UOApVRA-!0os8)|@KcZj`*FAHJ-f+u$k1W#JO zd}!W9bb6gwUl(z1&)m`Z(|5XWA9+-@Ww~n0(rKxxL$2!hAG$w2@~E?SxwH4-X{qx? zx%0)(UX?ogla<&%_KNJH6Y!v2F0Z_8dsNoCT-FK&ep$O*)*e4b=C;fjUvhTOr|2uaHwlY>MHvXje=k{c%LorpLQfaXU zwn<;VjD-u9+}e9{@8WlqlSLl|cECRQe)EGyDR4**9D3|3(zfTDA9U+p!8HwG%>Qz8 z@v%DYQ?8_^-t=jSi`@0*o@U#p%_efU8OXhHaf3#3cehBhX3U9}~C=khZ;y zlM%qwiyx8K5dw@srwN|6c8y;>1tXLyn(cp1VGMWmk?X(az`sRcw*=nhR(Js_&caO^DuzJP& z{ko4gJ$Ut#Z_6Eh?0rL^bO`lDU)nS!jdO(njPDB_nHE&mJNS1ZU7 zOxia{)XX24u}2>%a#!9sL9k@`fqy1g&l#}LHHgJn>}ulX(!ivkU_nZ|!JiVlV7ZCd z8{~_Fz9AgYb8GrHa9Wy0vS1e+dWt(^#q!>?K7Gdiee1mfer0`LTECbFZ_DS~o_FbE zk?5-d>au5xo1@}Um7BvH7(y>LD}Av3DJ+6ZaO>Nv@0}S=z|rdvU%2j=W-Q}P;48tc zuD#agGealZ7zNL`L2%F51aHiSTzuKQEHf6Z#i_=yqkyvpcSsu^vX}TC+S3!&a8w%3 zcwJ6?z3>05Em+eN{y(TE0@T`UzifgK;ll z6ZN@*Lq4HqHHbm*yX&qc^&?x^4$A2LaPww#AC}ovgWpGJUmTHM19z-7P&l4>ejT~&( zMRqGU^j^V546rXw&aCzFUzKbM0d}3&y z=C26nwo=>MjMKLB(dZ<)bebne1TJN(T0oHl68j-CE%UF*b)5j!UCc`W{{{ImF+N+i zJfzpZAVBC{3?OpaCX9$|F+tKn_KDJt%i%L;#EHxJZfy?bb1`{hh%#p~!)8ip9ui^i zV8}*PG!9i z-bLmy^Doc8oM@1O&2q3=;#*|CCCRs}cmne;B?6MCN%r7id+f4-El{9Zu|$P^Pmrxj zcFTd?j{^Ib1N)`G0XcAh*!dT)zj*EV-0?X6zKQqhUcdQf#qOg0FSV>vR(nUvUpv1w zVfr)YKXNYh-1keNPC3*m`FF|wT{tW*(7t3!2HKUIt-N3WwfW}e#os3kVn56&t2LU?hZ&m3$$=@jZ=}1pkN%qvP3rh{j z+<{$jLw0CX;b#DD?Y_DD#-4>e@e?VJH~#K7FdC+Tg#nTSDFuBbD|SfE4%yj3hFHZ9 zpkKm+whrNu%AE#+V?kD3C3H;4Vvo9hLn-q+=6A6C9?H*z_fArybiMy?q*!?kKiE1CX_7XhiR>~A<)w=I%z)l zGc#hbmLrZ7Y4-rFlPb6QSeFWA5rxTKg{jykZZm$w$n?ZueqyM=Uhe;ZsEXx2fA~Zn zGcts>V+Uac{Bv1@`QTs_zY`Ln-zvh-7Y#-ya9sbe_#9$fCB*O|VgfPP?D5yWADfM> z6xB*ab#hT1_O!3&Jn!^SK*_ZWa~EJ}m-ja5yzyfeoot~ooNWSoP)!=}|0Qvx%KmR5 zyOWwV$=EM$Lx{3&`*U)si?_5(9J}xhsDt%#2~&r3+yrfa1*GIc+UWbg!S{|g4rMf(-(bt{2#8~_B_(qlLdK*Z$s#ZO;*ZSJ+W z5vEE>UtQ8kH&(rF&wS&2ku*D>I%3HAHwOb?zZHPnw}vZq-S=51Qm znkgWrX5EoL2d^+DzIk@&>vFc|8Uy*WW?iK@_jb)0e7d%&wOn6UqVE~vRo^c`FS>K3 zYM+I1X^PT6xOBA?^ydHnHO5Nm*=l@Q<>pamZEvdD9IP>LU<5dSv`gjujs4R+<3Z`y z9X;#^j})$t*>@Ae2hlTl@9~MW4c6OZBiKo0j}BwL(f+5j3CX~;hJk7?lRsR{-+sF1 zR9ElGu4Da*k>We(Y?1gy?Ej+QcEW@v@vJ+JWx?D5n;ra;F(Q_Lk!KgGBvL z&dJTsJ*bkreX_SN>Fr~&73Hzyt(U#^NpC&WvhxR0!Qxv-ZXUUDY~k2E`-9RqST}!w zY@B^%e^6d5Cs6)x9(zjWW{5XsY^Va5xpdxOIkF|k?^cs?;RZJCbeI|l847-l?)U4dOXg4h7@A$gRN3qQP^-G9LrX>7XEv{&Za+vFl%CrdfmL{nHKE#YMJ zl7W9i^Xm~(;k0*m`L(y_-ln4jOBO}agOo1%7f;@(U8sHJYgzWS{7viLzijxVO=|6x zTYDdlNWNEO-z)L%tkS0Gj`dFD_Ow*CNiM@Cd4s!2GdU7|$=fJ<8-!d+=yagL&`q>PEPU`RV;;b#bu&fkUoz&kct}Lm)*DI^A6{}|VY}W_J z;=}Lvf6zZ`ST$KbcrGq{|IqBAl&=`OlDxs$W3$IreKq8+o;{YazF;vxwX!~(uUlwa z>{{6J1q=U58>`O|GGHSu!2GK?E7Y_w$X=FS#Tk}nc`FX8K+tDU<>aDiTz!UZ20uHY zd5#2yd2K6&wBRDS+AdrQ9hE%qz~g28X7!ooItaEpoFnp!jLxuXMTZ1l=I zy4dTg#h$SsIK%0|CYzxWdy3|cW=!O&tG`>Z)N{91dE2}1lZuDE^4??Ym1TiQz$ZEo zeA__zt`EOp{$FWByG?ryAi4na=x#g~PqWAUPWE`%!ybj;ios#klXSQXyw+x1ol-W1?GX1SuJTeY0F&Zqsd}reY=r#-Ju$9_eoQ!p=#Xm2Q zn#{i#VULZ$I|k0;nSGJ|QfB{bKmFy(E7O*T7dqoa0r~RCr<1opO-vG?5-Jam4FOwB F{lEKC4qN~L literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/_textwrap.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/_textwrap.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d45cf113c8a672a267b74c88fea367ffe6b74bce GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/core.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0eab26459deab640eee6db394da0556c43b2513 GIT binary patch literal 142420 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ɯP0mJQOMa&!*sIIsM>1iM4(fV_phd8@ zbB`45-~*Ja9x2)}x>)rAJXds+zX|NfBL#NF0a83AaBn3~3B=E#bMCL?DFS7|*|!OK zgJNIsztLx8P3ybjCHmsW=mP2PicC6u5J%Z^phN15yELtcJ>XcbKQ~U*nKwK=Rixm{SLjf)9vv#Zy#RV2k0w>ONrG>pn%Iw+7In_^S zTqIGB=%#>{$)b+}l2C}GQ3dEoLg8LmpaKTzDvf;EinA9ky$mn{k<5KWn%PBWmdQB( ztZ9=bGTsaZ{g=;)OrL@Y1j2OLdKt_my7k>tB6nlOIL%SYtcQYfO2+)&vtGHE zuCd-r;~EgTkQ33#I>%Qeg%w#ZKS4*V=bxj*mI6ZL6_;c@Vt;SR}1BE1SFIzzA!sccJ%T6&=Y)r z_-VG^wAyo4H8Hz`2fGAeB(gTWBJ@v)ed#8Tmzjx+~OY&pW z?0RuvGnIKZ_Y7l-5VtZGu09y4Q^=UP*)jIOqM zg#jg4bMt(lQHP35%yyqDjmYl z`Z<7jAjLy{iow}R0e;m=hY#5Ghx*v@>H}5*^JD4o0lWTCAA6+ovPG!LnM#MrS01pK zhx+&**hO|r=`i)!0~5tOWMPhn=j|8E1kCBB!{m_%Eass;{v~U-07I~?!HVMnU42-H zdO@fVYErM>ybSyA=`eZn e0gHL4kAKE9B?v@wY`;rhdB9^IJ|YpDasCfynQvYI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/decorators.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/decorators.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ad03c33abf47bc50373f3390175fca44804db59 GIT binary patch literal 25442 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/exceptions.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..511a6447871b32891c833b120e5b73c4913aacc1 GIT binary patch literal 16201 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/globals.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/globals.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c35383a19b8ff6b99b2c2492b11b0dfed1c1c247 GIT binary patch literal 3375 zcmb7GO>7&-6`uVeMNyO~Df)3-M;#{)3_1=It0`O%{c~h1QR32xt)j5Xf*kG)#kH5a z?Cg+~1f^9B9aO-F-keJT9a6_`atMkZe8{D@94Ui6|oZA1~(9JH*#S9kQ9v219F zY1hq&ohKDXY&lL1YC1!;#BxGII%38hVEH&=L(9XkOPwmG=reSZCbwdTct!?zrf8g{ zXaeR&BQbRN*{F*uCQW@?0!aS8U87sE3IK1EcNuHK^^*6 zK!*vCHb%9pDD&(isarmy1u@67i1P>>h+s4{@414liiIHV+YWQZlX1bamu$f}aeli% z9H0Fzh;t?y+~qOYW66zClYIl;$8jJs9#_#lEq@OPmovUx$4{2#bA?~~jQfT1I$d)M z7d)#`gQNVy8@70}Q7&ArGxs+hzp>zWtwNKz&B7(ST<}4Om+Qp3K~|VwupHaE@yd$h zl|iR$eJyxqg^8lo;2b0st*~g;FaM!h1IUaW%oW*#lYWvtCE-o|N@EOI##{{>?8Wvs>LnD^O z{6jLr@L;ceomm1`xL3o(U29btXOT#dN^s5N4BNFj1lty&GzU`ACBkkpI6!HZt2A6I zSE>`=j{;x9lvy4p!sC%V$s}yg#kQ{m)wx|G+;-Na)|G~XD;~#H=F}lEvEQ(&(vYrb zW>visZdGlVt=TJ80mdpJHe43Yd;wjL0`!#J^hhRJsc$+1<4;FX3e>>9hsxyMUc#iual(Z8XspIDOVAyor~ z2*eUHU@#f;nV~=vfoTz61o5H*wjkyUz>MI?c_Fx6ZirBPkX&>rTUAE|ss4jAy27eJ zW4^p}7$3UyQ!wdo1KC6evu5mV?Thr-t>&NYzfOO6{BF5(;_PmEu9Kc?C+5ESB6aL9 zZ?#8G9UvX}`srSJ>HulOuz6y({lnLHC+0g7^Pi8mQ*Rv@aynf6HvIIP6DOI zwqNrnL7AH;Poa;-&rcfnC(fshf2L#54Gc@H4xp068ih&@bZ#R7G-^*VX{U!Z(VF~H zZ3PV?(M}Jo`uR4{Al7J5ivdrJ_0#V_hBJAoUDk>cD!RfExTsiV`3y+RXG}f~-yl&e zQri;6VvvNa?dDbxCv~V2G^6q3z|;rNK}uew2nhHISbbS?WPxm=ugv7u<%j0%19SF+ z)?Izqe5qr;^w6ApV9tH|qh0e{$2`}Lo)FbxTdzsaDF3|RvspOsW7$pbti1u4nT}n3;pum#ztI zzVy(Xd|*!Qn$sO~x*a{r!XRdOj>iWQMH;CL{Uvm6qYd=Fz5&I&zlc%&lS5?%3Xk^w z(1!Ljm9B7+WZ-%5V6kfnKLyO^;PuY}0hmal#Atiy=w5nqJM~raxt*nU^7L-< zbSHUwbAEp)x%tPv^u(>TcH-#%NP7D<6_kv&0QoO}nz;OR;j-c@EX-(GSdf8LL$#0x z1tmjX{j_ApgSc3$LmlE08G>O^<&01{mLUyBm#)2Yu{i(c#rd}v^KS&>A#V|W`j{)L zhac#I0f<8B4UY(KA!I3cJVKRQ0<-LSPLQ}Y8zxcgpxf+4&^#)0#&c4*NNm z9+CecejX@bou=)fiFWktp&zsdpMAsJ`UN1THoIp&-;SO=^SSomvp;-fd+JX!w`Mlu z2XUkuTgMJ`O-lfR_LF}ZNKZvei9>8VrsBT)`%l*IXF9K3_@8^Hw6OyOL~er5r{n)P zc7L&Rc0r8}lUH@^C(?#~lGL>sIoD5;qf#o6o$(Kk-Ms*{M2+sh``Pm6X6I+WQltM$ HRNnjtrc*TH literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/parser.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/parser.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c4cf0ca01e1480e8478ee91bc861b2e6747be89 GIT binary patch literal 23137 zcmc(Hdu$tbp5F{#;!~s~ijr)}9zASXa?C`2C9xgHvSj&@M2Xiv{t6aQ2wFp{Yv1pS;3k0}3fE0K&!PbDVhXA`kQ84gs zF9=YypYLzT;S4Qp_n)Gp(Qkh5_wW1u@fR+aox}4#k`vN9r#S8(C{THvWzVCOf#Ys- zA~(i~yl4pXV+MSUVdJ!E%*0ciDQuoLk6D=C41e8N9sCxtE^M8)joFyr3cr2K&ipp` z9b*pWx5MuobMl;Ixag`hEw{6l>c`xu#S!*QH;gs1+)ntL#+sPl1;2N!nfdGC_l>pi zoPp|Tt<)pBKjt~^Q~WE>SR2weeT=}Tl_+j(v*!z`8(JOU``rdU&9lD$* zu^BmgSWX}6R(mD3RO>?>9jLPvIk$;z8eTDAsWtbecgeBMvk+eoeIT->8LmxmV{V5Ajc(9 zh|b1^Kuib+xnh+3z(V1()OduAQgh@F%EySlNvltGY?~U1`Gx3>#9Fr=wTnWXe zSdK|45TBK$m>^5j(aWeeJ{5=yS0q7<3Xy1Bh)9T|`l?l&mx6&=RE12T>6x%JEk)u~ z*R&9d2t(me@RAUXphHuk3saITgr&<;SlBTcmF=MjdLIc&Lj2l{BuoV&=w0N(6T*}f zo)M5?IuMT|LO=q_htd3WRF?YucFcez%!C6G0TU6AmOIN*S!T+nj2bOU0tO-r@zAtX zE-6ca7`havX~Y{4#L(mhaY0#!SsGMqR*GS?%Jj1uu-@^Q5S^?xb43oJ(ui>Wns8i}E=1*P z!Yh8^y8&70&U7FYiQ``q?Z`nLdgWSt3iEa*IvKx0Lmr9FM#Mlo6pi==wkI(w;m~x5 z282}!Mn!Ci2sR;hn(UvsMjgVglv!tYKlRkWE;##Z8}|!?;jq9m(KbX;>_fl4g*Pvl2XY<(Y-o8Y%mKN3atSo}&SAP`)rrJNi{xF~rp)?&TR8 zb0x+(8a*=`oKhl@!_E?p(MnULl?vdm8;V9~72&n0*=?@`%#Pw1@`LD4OD$wl1pvxCJeipDM(hG$k#QylB4eylGDG^4}P^8~E1LZ%h~$_(e~` zC|WMD`sA$%L&j98P5Y(twY}HZ#&eNBXEm|%@~cU6lAAP$b=R$NN42JeQD179(__GS z(+$hJ-h?Tm8CA8kJ}=L0)Z4hbS|(xAx2O-H*9XyS>m^n|-iOxR@rG(?(WcM;eLmh) zO-&f|sW&Yf^+>Fld-R=O`5UyhU)$H(8BQ2(SPr4N3mkSzv$owE7SS??2$BDx2Jh;7 zL#3;^s2*)wwSAAbRO_$p$0T7nd*IKom5+xm12z$e$I%F!2dV??!m(hd5kQ-8fh~6AAj^G>XAj2DgY6zwNz1r?ZVkiDqAXo_LFVg!wZg>TOc9XR(YFiq^- z`8n}g zb)HnQUC}Z=DaC_RbM52G{u(Es?mrZc1_R;PVZV}k6dj0x3*o+5;7SIIt+n88N+t>| zt+%gzaP8JROYdYoU26!lo{WlNYZ6%JkwN{-%Q%h=ZYH!Ji*l)i1CgwqP zKWN^?{itad_e=Xh ze7tB?uxubK6Pzwu0y9`fv1pb9K=s8s8KfvklcJe{gre;%$WXRNipH=MDO$_vV$npS z>8oQSl?iAU4f5rpnKfDDuPW293GuNyI1_ZXjvQe#QFLlYFF%Fk0m^q9n;lEF!2O|> zb2g;BHx4cyTo``X;7iTr8oKfgT??lQ!y^kv3+=+faLH6>ZcXhfarpdv@b0N!zJ2#4 z7TDNnyZq`;6L%8`pApQ zlP@LTdV1;U|$mGGllBxwe6P+W_TAb>4U;iGkm!{|a-^c;nf{XFn9vdv9G_x|nqc zS(6}lVS$Rq=uBL9Txf$cn(Jrq+{RH6YjEN`pWrh{d;HPEFxey;5};TJ=8;T6i&qnT znLYyCME&|Sghfu9o7KUyS{{q){4}ym<3Bb9XMrm?-6=z=A!S%RzHqEi=X`Je`}6O9@A~%ugv>3N^3 zm1KRP&Ym1do=)z$el@jkwXQW=2XNMy+MOCq?Owc+Hl_#DN7F~|)M3H1)~yB1e|IX7 zI-fef)SEn%df445dUxZ(I7BHu0xHzp)`AO8!z~?Xz z^M-lQaz94tOeLG{TU+MG+(%d^*@sMhhN3qfy(C4(BgC18Lvzyj{Kt;M!SvSI7v4z)^FDvpw;xlMv_EXzoF2O6 zU-G~E!oo;$s8H|CI`*Z44}AVrpMN=)^X`V5EU~x@e7^p+{Vf`TK#PP~ z+{RlKo5^_3q!&JbH83U&<0^U<%?Qz^Vh>mcqYaZf%)QkzZ%P<5nkA^@;ka7jnCBK- zBmF?;)@mLg^A3=!8`WUANEnMfdh(M9fQYGr{u4%!ke0wt(A_h%n~6%Skab|GX@W>l z!bqG0w15XDVpC!1s-Nxsi6?~f;MK)wq&LnepUFTdEQBT%%1$W_N-Gp0+!hAc<`+(0 zz|w+64}c3-=&4{BgczE6do~LC41x|q2-PBj6bl9*@Q4vDMdA-4DjAPXn_>$oz^9bMAZ0QFMnoxVn-oz&IG zx!d@Sa^~C*6i;0ci!BY zn#>F*cjoMUd3)c&P+{}dg`vEuwb0zMFm!#iV0SJI5vtx&XlBIO7NXF$B#!}hzJKcG zsnl%F*^zg4WZ6r^+Lmv=A}nn(Bd6+EIh*r+`%Qal&(gCwYe(MNk*&NX8*+haC^SbGMaG=Aad;RX?@KJ{haqg8lra}qbkL!@o6fjGB8&`Zp|XqJo@ zO_dUoxyss$7Nii_$R1rv-G(VvsZO-%QjHhYGhVHG(ka@no5yUDU35qeud5C8{5WKoX9_PGKCh>V0(;1`ZFBTyuk|l-gE1CdlV?~oF#p0m- zg2Wohe&jEjiK&VQiCC*VG){tCk6HoQ6k2$^lEx_GD*TJ9aEPlBDkQjZ75XuV_#fu$ z;x@G!E>Wk4Tnr^y=WPjVtVt`p5cx#ik2%rsQ4JOTeIWabY76U&E)rHzBTm=1$Lkq$ zt3FjUm5C3(j(x8YOsKgwqc7^vGU__1QSj7`7f}BuN~xISPc8MQj9NbywDcbnrUip& zCY*$IQCA^hLdag}Wx|Y*DmF@35UQwvKqMffs%MDB?6Zu{^_+}c2KE;L+W@JB;1mE| z5Fm+(X0hRj|K9N}-^ZYvLV}rNagtlt7ail^%wH~y zjHHl<(8r=NAc}H7d<@{pFOu&ia%dmRqvV`~(`N@iD}^UnKz@Ou*UL(DpL`Hb(Tp)b zL`?I*Kq7M#O2s-p4#`G*e0lOZ?PsnzTerbfGygA>? zdEd)f&&vg;XYr*6&W=@QM|v`I`c5e4+>v+g$U1jC1U0$;#ygAeqywvCVlKD2E9 z>8ZP?Ryu$7a^~fN$D8*E4?MlAp5A3+&htdx^F)@tYaZ{C`+;Zss%Lv9mhgmjE&w2Xtp1v%5*BlMW!-eMdm1Jz^Lei#F^-mGZYG{-~>4c zu(9q=F(9b#ZW%aua4ZbfBaA#WNcIp>8~I0FDMPtbGh)@2{%H9Jy7I)tJ1OgTFlTr4=; ziwD!atB%gBqqES{mprz3DivS4mUDJyot*_&!{VFimsVYUSyx}7XUE-B>!qJqb@gOj zJq2gO;;9GD&Q)h;rsrgvzB`u})2 z)359~=TP1`lx43{^7yK&JL~F3fA609#pusQSN4AP?EOHl=SaTi$mavOo?(4AziMpH zb{t+YedfSNd2@}==Nq5TI-f6CU5kzf)=jI{P3gUNp2=Bz^46YgL=6Qe?~jRGSA z*+iiI8XpHb99NXD@H@xH-=2lAf~Cmaw1Cz#Wo`+$GA_$K6la8jvS=KPT$A5mS+E>4 zk{rKQG@Xw|!}6Pmlqbm{p``)`Njk}BM&|qkq1YOn1@#ZKb$4%}*;nZ9ExEUvfyv;k zx!Ou*3RpO|XYpdXX)#)=qp-Cawo%y5H8d{S(|eZOB?pC_oTsVeB40h{X;_>~ci!2S zcMH{;S@nu@l;$CP>H{dN+4c^0UPDf zFb5h)P3(CZ3 zJ3{(XrZLLIMJ-jKLL>PtYKJs0qdK&$@-BaY5!6x{m)IQ0@dUqMIK@G&sG?yg^$gcR z<<_c3^+0+a%3CeRQ;RgqsL3cosuUT7iqm+BwICmiSGE^AtmT5l8b#@bXhTJCS~PUe ztVe44-ZBme?J19{ZiYDZqS~A4c74~H;KjP~2n;j=M%<`d6{XZZ5PAgaB#N0m8I^0O z#L!pUj=pCw*&=$+s=z*-jE;61$vz$toO*%d*&4oOrQZC~B=WCuw|Ve0HdfxClxHCA z6N60FSn`u_VpK_a%YAD*M3yC2XXL|k-Rj0GBde+cO3m~eD&Ga?xA=n&re#0gbYOXK z`DB`3KB@dEu?irew&r>(H4E<$pzf6C1xAlj5UQAYL18icpBRcJ%D`Bb-~DeqiW14G z@Zv^jHx&+t7DyK06fKJJk8-5wa1||3xm^y(3Tq=##%*x=%I8l#Aw~04Gz<()dtSi9 zI2win<~)_|`pXmXUy&#FTR7lm>>OB*18M%|VUYbzt=Xm?<$dUFQO2Fwhi|TBe;%%P zf8M(vVjZ{lBV+p5kL-8stM0C>yQ|RJo-(J*g$7@`^Mg&PO%HwBA9|a!zUOn^BYE$U z2j1hW-s6Ri&O2``i}x;;j9l{x{%g+A?E5`AUmHy=jlbvMKp51}Sb~g)y41Mp*qn82 z&Y136@4BHP`P}?vBXA!FCq2qOE1jS9-#_!& zlPvIMH~Z8&_7?NDHQ?DRskfKrGTlqxTjuZCR|Y;ia6kCj^Z6Y^*_NTad$?pqHq3%& zOR0{0R?c2uvXPJ5z)|)t^;CxhX|K@pXfGTM667~RRD>KSO`-|t$Rd)o*~|blsTHyB z%kY_wNaZ0v!Nf<0;oRmzfD%>ALt59WY)OxKSegp2t9Z!7&Oy;k)_yVh2dGu1GXYML z*hUtig$D`>YSyxSDjNEqD8SA>(9n*4#_D$UXn9=!Qxr<#kIf&npzCa$qUl9wNR^#K zo2HiHVu*{JKTvZ7O0|2$WFANd?o4LR+_^-8(1B%8Gx%)iC<{r|=@znLi}R=l6Rusz zF{9Wi8YNRzfgqZy)P`t=1*(ZrGnTSov`e8nP(no-l2uc}p{+}o;@mLBCE3J!U8<>y zOf+>Puo*;Dx4f04OkiN#Ks|uov0$l zn_;ocL==`rq<4rwF%t|2VrA=3XoA2{hG3^kHn&jWkliCwv9O}$ddkL16+0onAe@Z% zG6PoF))hH0LpD=nYC;dx%Cde`t%Ox;V`jrd21sfeMg~D@ zt<`W0hL&iGRYOL@XjB%;e0_`zg9+)Ebx+VDA1JQ?ET9w%)&p#a2PXb0v(@nrDfXBX z!WCx5%M5~*MQ0UJWtFFFQgtE9G>2uYD5mdas%k~_w=U4n;KY%>S_||c;MV|svInRt zRH4~!g=V|TjA(KqUTs5LhM^P{QLs=2t&!D$X^L7fD`%gq{18$JTSiuzN6(IY%kTQu zuxl3}{4>Z|Y{9HWuRs<|`Zn;@*hb8PsptzajVBCSnDm7t*dP!{psh-`i#AobU35`~ z@rrD_Xl9jEP!+Yb4yt;YRr!iyI9w4wJ1`|NLYyGjES$H6WUrvy{JTjG-2>k)=IdT_ z)F+=W?DXe%jwFX6H!k$=%J&bGw|DKy0hDqV7*eY*Z0XGGO}|OSHx+vOba<}HT*{}= zIlm{!^c>g zPu2CAue+gDnW*busfoUcx~g=wmhC{Ax)-3Ncg|ZARHM2Z5>~>;i!S6-+tlP!F<>Ph zBY8}LIjqK@D3abgB3&sTG+1H5R8g29l^e5CENisM{#$^JILzdc5{fY6O!bTbj1pW4 zMPP(4qxg>5NH}z{Vooh*0a8m{6pSN+zuYa$&Bkbj43REOO!@wYBLorsxOsLlm6sV+t9m=WW zA8FZ|@c-xl95TIRmV7Pqync(_(1`8zJT$EPS|Q_LwtWU>o5DZ7krc$T|gCy$2R|Ft;OH10_kJoMm)VCmN$O&fwM*80`4}c+!BW*q$MI zA`FY=Tlg~JgCc{BBd8ZQ6rHqPDx;cfdu+p0k`B?9A=wRfjEA$i7VQtLZL8L{k9K7C zET6sKoZa+%ZqxI5xYi?i>yd2bRThzSeMJ|^J%J_xb#V&Tx0fRkhyHd*tq5-(1|b{S zU)Ngi!$6D6tdE0g?kGT;)&m1C6{m0<47_k#5h5}bAHD0;hN?Iz#(!UL)McpRCJ5oG zI7y>@nj}`74~$_}8R1a1hu3T}g%+<|2AG)Gp$Ms-pj{Yy0^l90puUL-6|fTttl}_s zMTgZB73dN@17hOFfpcw9{wp~FSU04COrTti3tY{dk+WH8%& zFfn-G>|b^EFYn7a2lCE=taE_H^{zU5m!Vwq=bip6dliFwgUwgsDh_P)7q7zlAQQiP zHQzf3U%}H1fu2Wzw`4>%veJTVsu?PueRmEno9{WY?mb!So*1#+xB3rpzuGd`Vf><< zhs#E&JG(@iF?jsn;i)~l8qPq&4UlFRlqQ`n6$aPRoO+~Rwud!pMf2LydI%1Ru#=TA z&6^YE4Mg^aghs9cC<8e0sR}C~!tMf%%U6Y6AXE4%-%}QE>nIx<3Zrb=*+ek9#zt~+ z5?Lw_Xcv2hcHtGXm@7!pF%_MNn0s0Wh}Ykw>rpKPP-2@<1BjO1VdY&JgiNwd4JxFH zg_-xuY#09k`5CGx+9cRqL$(0;Jc-CYi?X%P!4JDfb}|?!H-p0x`5mZ+(Ta%>49HJZ@aTI=iH|B^uG63o8Zg!4(EG^zcw0L?2tUS*l##+ zg)aUFE7#TqMRR|ybyvO>mkoH^PUhS=ksL}jkrCqyH(yAb)4@CT%(0xaKkw|%vUkn5 z2{LF$!PiQkB>vcZ=yo(ge72*{qmRT5R~JzJg*LQ4y-|Cs4crr*k@8cEqoA@fh!x8d z1MMq>AG4;fo|DTkJZ6e3>LqX#FdXw$>aTo3=RCHjBhTZ^sC|()V=OAh%cyv&QUiT! zdkZ|-p_>8XA|HDoF)-AgCpI$8Os@Q#V%Rx?^*V^X>R-fWuu}ULZNibV`P;I zxpRHfA_TuKTT7v_WohT_CqH;H)0u1R$v5`EdaSuM-E`~qrPq@q1W=n&;>~xG@331f zg$8fxJGejaou!uaaK7E2ZJ>8$|NX&#b718FY`Y$Kx>h}1Ag0VYk3aA6XW3h5XwEla zf16w_fZ9urO0JxzH}C1qvUg3BFpvr6JpFl3f7a8_+AVG7+}?7JS+{E(g+3#usaRj( zQ5C~29nnpz!j8n9@{zzsLX`4c1}I~;`uwzE9#`B9u%IUqQZ)8jh z%?Dopsux#fRz~h0%XyFHy+@PBpfGi9&boRZHVOq#(}$orP4z&JP4yuAT=i&=savh}@7Ld~PtB&K^(>nha17F+t~@GdeH9yv zuHVcXMI30D9cYZS=gqi8V?i9Sl=glXXs+MDfLz_oz#V4XU4m)&N08@M=|KIag?vwA z1DMhFrqU}eQDgcI6Lj24n}dN6`euvm(E<e|GWshKO=IsgF2B5?KICf4LWdm?KzxWTj+1!_~$N+X#E!_rli?`-KBQQkyK7YjhTxQPajpu72(VY+ z5Wb28&Qk_Os)AvzV?9`;CjXp((fe>fUAVnTQ^Dy<@P4Yi57Oy}Uc)&bU{+pS9*159AvUK&IB*wlw~rdBn zO*PyYNe-@&RlCWxA6K#SO@4rkhK_=_`+>KA)!VctcXg0zqxr*Fde5z^OIJTQlsZ)Kwk^Hzz`K3byFK&va`$pz z`TX+vd%ZdD?!0$**1H?mkW#~It?dt5cdxeYUfFZs^0_(JI+AZ4A!`&=*Vd6TuQ?mv zAH6x6-j~^?8q>p090b102N;TcM)+W*==9_r+llTU;g_FRzKoH0;M}t6+>+Uz-8#J7 z^;f-r*}L*&uK#Gh|0p8x=A6g!&STliOA^NsUMa418EI5>C^R6m{A3tNM;8$yBB1ri z$3P~I3IfVAZ_-+?fi9u_%pU#rPngQ!;si>o0I*6A$yV*X!+CS$@3psY61*0O5fz5p zi#l+yJ{3e@2b322RAqYgA%HyCjg;-pX0`nnHTSN73fAxSpbkJ<;$#U}e)R3gPb4g0 zcuZPk0wAP~4=&2~6DYtkxics@3*U zzlsnvJeK!4pg@TEa1Upj0syKMmJ9=7Xt+r@r^=N575&6I*(zpgU}cowdhpBFXv{>H zGv*0Y83}zgfbS%N#fI_8aNxo?(?lsmm_m6Gie!{m5x)*q`DrV~B!*Zmxs{w9aG+pi zQ1ahV1Ot4GC}V9ADOR+>b}v58tci$zC__U<=|W(4u1gR6)}sdhjv(M>1_1#A8d{c| zN%L1wjLt5;lXGm&J2t1KRY!N$(GAeEIG1;W*LS!YziRCxpz)Qjr{LZC(A!>UeZJ6o ztkBx=b)AXq)ZqN1m22tvU^26F<<-<=&UY~HJNUJ$j!f6!;0Fm{y5`~Pn^J+BW63d; zyyM6W-l?@b2h*2>8zJt z*x;pYw?>ynGp7Lpv)=6_spzL}u2JnjasNyAGM{Vh&$qJ3ue@y}^vFzRW;2udO}ms9 zV6I0jU3w(_YI-E=>0Sd?a4KR76+U2QX$=|d`6rk;`uRVQYmheKylmR&$~eIX{pl-< z$&3+*3u+)1?w(b5zrNJGnF-;wy+LP`2izP)8hRL{p!mmbP`^Sy__L0%LnYwAS+;@n zp%6gM{;dPz0yhlTit>N(_B#3Ajp4m3!Lwfr4-O=akb%mUpuGSUVy?d2Oc}%wUF>=ps z(jTXaWE)s2_K1$rZ;%OuL|aF)9%hDMZMx|PBnrL#zqt0ZYb#AFfn4u1`QB%8&Yt9n zR3sHyYuS`M@vwDUW(s#Cthv@_^R3S&T_wB623`nqXJOSTWI9&rfv24#dFM#B@p@8-}2!*xRK`5-f4nkq&Itck{u7gmNhYVO7 z$VY8xoW0x${v=;ATFrwXsmLufbt=I^U;n*LD?|67bYSs=!-{9k<|>)1`IS;-*XuFw zEqI%kMsQ8#g_04WHJg30CDpLxgK8QVOVajyLwDx%-Pe|f?!F0w-R<|c=69dWHk{1c zPL<5a4-Q=C^w`X8%P-=(r@4)05uaMeS8r}vPGDD?TRu0jPpxx;Z#Qo%H2F$K`tIn1 z#qXYbZY6Z&MfPQbLTZWAJBPNLNBGQ8iKFj|Q~7@GRle)EukbzQ=ECMJB_n-z_?7R| zL+nd)(OfbkrNrr-7x^vbo(xE4e3s9#4_&)KXhTPl1k#r5>yy90r)YuI8tJ>bDc}f3 zVF1YNRATHmi)0g`6%h`>>!Mw{8k7`ysZ8KkAv6fwGHqJXb@q){j*SnUI5zac$$ItOiS*}re3tUH5{}wnQtA7hzdshFhaXYg5x4>=B>fZv_lhwZk zt}Cm5*Nmp?V2I58K*7|Nt-J-3KdXNWrjD%sEtvYV`nOnD@JcSo;} zF7PC7+MF7>bzdfMkB_oA;cif#@>Aw3t7Fsh~u75XqdT}hx z->J(OadyX6_|NS3_k8BgZ#(jNPgVdscs%bq@nz@VZqJ@R`?ou@u2=Ks*GgtoRpRu{ zRo=pHO6@6e_@oE!JPmHun0Y3@`3V+N>ol79{izsuUw(h4;qIp8lljj5EOZ|=AhOn} z-^#nwXK>?btnDem{xgd;rGjxAt~^EEB% a@5xaTJZDWj&h+~3*DU_`8>F%w{(k_Pf0v*D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/shell_completion.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b48f27de0a2d18c585a2cb52ec7a20cb7774a803 GIT binary patch literal 23986 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%0Ab%-#|s&u}RkWw>#Z2+)RUp{y>-?v^A7Nu5+F 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/testing.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/testing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..778640842fe7e8169fb3c4481a4ee615b0678735 GIT binary patch literal 25770 zcmeHwdvIIVncuwtE(m}C0TO&aM38!sluf;C$)+S)Z;P@mC6OG*j1m&!y_6t<0DUj0 z2Lq{RwLW4WVtvQz)D+i^Uboz3oM7tq{UVQz<0O?TWj{iB5| zdq(3w+Wx+CabF;**gI(_o#`d?opaCoeCIpoeBXDzbM?oeP=Lep-{wXob&%u!fnJQK zs_c32_dLhF#fhBAC%IwW<%fCp?izM6*FEfJu4mZ8Twz#Xu6NkW+^S(8TvyUR5f~2e zoah!k$?A#VaFF>0_(Q`X=JGhD;`Rmt!~WH`celJ82b(Ja}E+`eSpM07aHb1v># zPV~RZiGg=q9QQ8%>CbSz#9e7H-o$E@&}h6#^(}^%6N89pGG0aAiW&Eap;tZcAnIKs znj3Cr_0^!hu*6?66Tjm|D*V%*;Z`x?sLyw$&4`oQr4GbxGT(hyIt{;B95?Q^{FYCw zmD*W*V@8f~uUPl0XSj>CDvDOsS74!=#WWzMu_9)($e-hSn|?(_o$2MZ(0MsNCS8n= zT|IwuQu-B!oI_|}JS|VeGnqu{65hNSNuHQWz$Z*)5=jM~=*V~?C5~K7q~h|;5m}0h zl8oT$qj5z#mY$f1r^GR%wd8usFAx3`Ja2IlM}!0-;wASLPdN^R;&=nGprZmhDu`YQ z!;e^lI5`Yc6=Hm%Px2$ik9R-b17aNpy}BF{d{r0@IzmDS2{}S)5K_a+4jb)|{1)=Z zU1AvJMpz1y7%NglkfIJLyhvROe^m4U$x$tMV(fAnI6RjT6Ddtdq$Z~_nm0X_VXiD? zrsUL_F_VB$KM^v$KiCEE7MJC-+z5R7lXc;ZMukX*E!&l2}Zx zhoe=GjFi)%1I-m3Fk@ON8>OG+R>O@8nZOR(tz%_C6a)KoswwhwqxbVM(U_>`lk0t#V0y#NpOGzWL>^Tqq@#DLX%T2$GnY93mYeo`LWE(F^EdZ?N-<^JadTGn@j(e?rcU${bb{AS7S6d%1g!|QSf8N*6y8YYIU4fdvTc)-< zI=YQI>KtR1lET;P>5jXtJ64VqTKm=3{z7=C8s3@r?fk9ksgK&9Or)f>o$aB{I+q$F zaqkBG?Z4aFzw%0rfa?# zD;?H4nWn=}+?uO@7hB%gLRVh%XW1h6S>RwYp=8F=6O)6}eQV|ep;_ram`snwlgc1G zM%u?wutKxt;VhRAKcoM0T??MK0^bWP?S3<~7&3zyHn9xRVypR$0a4IA>ZU?{A7zb^ zY15l-T)!2x(knXvP-D@k5q0D;x4w06`@y^04;Ho$s@n$Sv5lOOl2EKrQ4jwM_g^>+UUWZx zx%k5Iw@!cW^wKMDzOeX$9%hH-A=ErnE*nUBHx*=!9oy?!r4+MB|x&h6t;J1GjnoN%&7!Oc9>toQ9_H79NcGfG*K%L( zMYVMY#XnUEkfKYksf(i41v>5t8oW5x3F7QF(%9w)5sz} zN8ot^F92x%k&&@vTv0|w6vAbU9(_|_1x>fFg9KCRI)WSu5dl`>l9%(hydk_+HD9Ir znwJ{$zCQeN`*atu*w6w=EKqjl0&@YK1k4Q*<&dAP%e2EgkZ1pj>!iI93*gv z08L)`83Kn1u(jMbDW@@_nVZ(2X`%9XjY-Mm$OtCsSCE`d(!=^1Jw(|F9HxkW3xL5f z{z@)EXe~B2EnX?P$=9<(clYko-J{3;d@J+a_lHUXQk1xjKn>@uDY~dUIq>MvOBAR6ca}uOexsi(%Lc4r6V@@27 z%h2R3KUd7~jBWZ_`XooFna|SgWI3mLz{xnwxU#O_!M}4{CS=seK}Y3G^}Eo*%(_MQ z443N5m>MKfLu6<+lpkk3asvcmzY%A5D_Qv&E@LV)IqnKAO6)<)fjLVBfR)d4Mi*-P zkEN%QVl0);#7IRK(^YgaV!I_d2EAU4X@_F^#-t0ey+N(&a$I355g#gG#I1S8;z~wy zfk!!vFwIX2!V|KbmbE}aNu-oaJT)dU>eswdYK+!YS0b%d9VO;v=qz**K`M(DQMnzU zEO?Z+rP_)3RY})Wjg&XZi%3K>RapR-@pko{7Ykhn)UE@C&_OkHaL#qVIy5&}j5f>-eN@wwZ$4G18B%M8^1h+_ zRl(VrVkAnt+^RpiaNh`>+U0-?7F!Lelg`Nk^jEb#&Z`keU#9C5zV>k0acPUsqp5(FUPpm?WsnLWc(EE)G2n<1t{D3+hj5cF?0QMbF9p|ED38~O)uacNYM@pQW4B$a@Q#>qHEVX;S~Cus zQRij|EvQ~1X+)zU=1y;&=KYGKOeHhZdrzg4q7utomSSV^N$5T$5oAeGvGjN>o&sTB zOJ7CcvFC?k%9xy(%=Dkpyz*2EvcBd&mP~v__Xd@W2-W5YHsB>>R37g|K7 z!}>Uwd;ry?&<+MRpp|2a*XsN2J#!w_*J8LOAJ@^VhqQEq5vaLecA8^&3(etAU-8#4 zxQ}ECdim*|^PqzsT13RSEcV89U3Dz3#HLaS8Zla-NRLbh5c+_xVIOE+o(`3}r5Ete zs8h7=Fy1CoKmV<~uT`JB)FR`d0b+xlfyc?RXO5xc?fcV={?Dn$KLJz-N4*S73yqc}0oPq>~O?WM$N~21kCS(_7%_VYPILU`!5&5&#K{P?}g9a4WBIr>lTiG>~=*0pKt&r z&gEZ+2Q(3yL%B|b&W7z9_<9>CQM&$Ypz-D`lv~?-B~o+dJTpoomlokQ$oEcfbs!(> z2R6pFw0CBDlfJsJ{Zx@A#r3Jo9%MaTuMg5v?fH&Fg}OntZZIDlgoge%F@A(QHX*1(&heA$ z?c;}ufE4=UWI|FRzRCN2D+UL}AJStX;F_U(s_Y?>SUz=0dflhBnew0NjtXl>~b6a!u`} zD)RZbrsl;fxdydyd&y4$0Sb^x)#MLy^-ZM^`D(cOhQ)!U2{rmyDNF$oE?U3XR}6;c zpItbzcyj5GTHm{J=>5m@_0OuoQ=hn9(Lkw|5>mZ3Fum(aH4#%dz8S-=!RDAdQ2 zd4vEZgJS_R8HEN}GOwNt4)KXPFq2V0#3ejIiW@i^0)2=Hn`8KAKDA}v0~Ld0S8x!c zr~ip;Gw2foqI*2R*fqZx6hmMGJvizHQ#Kp` zli3b?1UqwSV<*3Gjl^Jn!Ss>WNyYX>9VvE zi^m|Cj9rc42#u^>VsvB{Anse2V3@=Wjy6*^i-=85$&+aX1twC+n^4k8a1>$;78MCO zog$ly{#fk%<%AMTr;;~WN!MX_!O}zOzLb<6&s=8Gyckn%Dj8`)iCs@*E`$Ar3BYYs17)Rwm4}NGLjl}4Ac}g06jM|i9iVkFtjmzl? z^b1*H%nm|f?J~q7n~MT;w%EWs3Wl}J_*9a$NV%N8PUT5A;uF}dX&g2xNl8yYv`xq` zozaye3W_|F&PZrkJcE{9no7oHBB_bV%!ci`o=7HR@u^H223QH4yMo)4(0vQz4$Mp> zZV+OCwRJIb66dxiYV>Zh0n@X@;<8Q>Hgp(XPzLOQu7Na(ic+Ek10WI931rcU26c^5 zsRLUZVdlkD;>P2XmlMgflAgQ_!knBWdIVA~$FE7ih(shpWKbRpYUD?&%9HFf*tU&7{?wV1=b6SzbAxuZ0AXGy zJS||MT0hRQiyNl$fcU(%%7aNd7_ixHJxYOKss+FSGl}6lC{msy@EQQbKiZ|%i&CgX zZ2W9ef1Rl}F$MpBgJkR|7IH-m*W5{_R>ddw-x+#;54^r&>lQfSvNIQ+3p2h*bHlz% zCbgwQmrK$zmQC&foi0+(E%9Iy0s$6R*YqDgn}Ep}76N0DOkcbrjb&(YV$`ndY#4=$ z(s-OSLYO3%Xc?k&0CNzT_EKLTrI?Wt1W1d~D5V^Ykq$F)aSC$|tI6nSx13IAx<^N8 z)qqOWED0-zK8*-nI2lGNXyxgY#juz9J^1ayh1LL*uaR=4Bh);0STo&e;dk8x|BlL` z-44hOaFOWzjeNLk2?s1)I#&JVB~MZuXeE>~v|fOxQblf^IXNXTsH}M?mt7l3(QEC- zNI}O>KlK%6iKyezwhN#2pRJ z$7uo$4SQz1j&P3|UgZck*NPcmhO|@V$6~l={1BXNF(W1`jUoLR+wHpl`J>-84qyQ<;Y>f zFlonc3-175@0vKf!P{|W9hbh|>}Ye9=zXnu#AF~Hbx`kUMPiRwCHgAsaMWPdjPb2T zPE!<+o9yW;>6i zSM;DJ>wdinB3GkWw*h|a6mMP(aHKU;SopJiV$_k=!n>`Vw$vee`^UX=O~8BotD%{2 zW{=gcE3JlqCgKP;uNBPHI>PCcjXg7U89J^mKi0K_nP@g>&oN@wkPSJ)%^I>bj&QSv zY}j7I$R?w%1UFOfhw($swpJK%T!ro9aqb&0UBF5^(=gMRIc%l6Vy+swZY$LCWgDDS zpRLa}97J@sakkUXtzS~M;Se|f)MhSo(kf>QC%bv>Wp4iXb?%1yW$rqk-Jl(M`SV}P z2C~)TF5N^YTmL!x_@vRtU)#RM4cgcJIor1{>)3T{$56iY*OIJb_p(;ptb^WcRN|nw z5sOOdHlUK|`c#tjufNw3zqpzE|Cs&FW7eRc-llj8%*zqd6J%f`1%WAr%Nr!nLmC5H z4B>Z@G1R(h0vZn{2Aj+u9o3p_w877l(gTusI%!CSMnRC$NC1a^f|YrR$pO0FfRqJh zL8L?&O)LFn?sL@2VzS4&L{F@~UW%nuusC@pkwWB6L)eDl15TTnOwLpt(AL)QVJw^x4J;}sX64EV6LzmH=N}t}cf`mi{L-cjZ>0%maKo!);fe9&dd0}paBIuEiTArgtBJB*Y0YQ^t zj31B!Ne$M@NR!AUZ`x4N-yeh8M?pSaRV5A##GdNkWfBKfF*>RX{3OajH3nq_#*NX{ z=qU66X<0ecO}E$-n8iUo#tuv&_c_WSn-!SBkhKAgkRd=qN~ELaF_II1O{<=$Xw?x> zL^G(c(NTsaG>@szNULUz)|p>@3A@g8)j>9jgBmYGa`G{o8OT$XotR7v>9miMVI+|5 zy8eO=4r-Cg?m<7Wg!EQ+nBg!?XkMLs*IJ!Y`6MJTlNGXTq(e*NvDncK5 zbGVgY3PVOo2L{!xV(#BbCmldZP5z}ZUuCKXJnG)`8K ztbC>m^X!|7ehx=`j&6hPm5FF3HDNqCrCf&4yNoE!4Z9O9KntsG+EliAnq>+ZEp!cr zQ&4j0anpU4>cCuVEt7pm+6IUU$}6bh;Vk!2Fg$ax~+HXwifEPt99G&)%D-4>tDH6sN1L3?VCHcYGus1mxk%D5bRNdJ^5gdEv^vU zqy{(TgPV%c#<|l>OEG3jDrka9M1PN$e;g5E;9Q@3;64X=feiWeNz6IG8<+^VokR_# z2(0P;5WQmrz(@fn`#+`tb{fm5;E(9Fhd>ShY9k^5`CkI)YNPU)2QMeENTkX`-uuWQ zwRR|xJ_gS+#=-RqBE$GzybyU}fhXpb80xfk7eH@fqV zSHEYG59&88G!N-G9Ro}VXRE}A@O-f~qH=whfm%iGbj)gVIM*MrN)yP6`E2F>{PWp$ zhAph+A%w*>F(u4evSK(fh<}VO!}5_1KOmWK#$8Y!T?M7k>8+0(K_l5_8olRH0H$lS zaq;Q52ER9$>ncRIsL?HR$6?J3WmahWY9zWCxEG1tjl^>Gg~&EFvMnFkW}Dx(sn|64 zoPIog0;S4}01ka2O;9#w_3+T7%<{AD*IYr|56JQa^_xUH5R0|SEJF(!8cnu+IhU(i zoev;0i^SweJf$S2`ybi+HR*Q}8c0e25yRjh(l9quZ0pH4_2eTxxZ}Ig-O0{5zE3834_55qzwCf!+@j@KRvZSdI0a zb%ag>wYu_rwS~#=QWnzP$^VM-3Aivdp=hqO0*e*>h);8alr+C-2GZN2>q|-b#}uh- zaJ6b?-KZ}c<#PzeAZmVCQ5r`QWiOZoEl~D@1<)eohq8Q35=X8l#LQ(asF$YmcShNa zTaa&2y|hf~ZD-AHq5{_IawA2o?Y34+;Rf;R*lD1kH58#$Q7}-Uxvxq$HG$b_%I{J2 zZ0RH&3GsXDJckeKyQtsXET^OEkmKK?1m%0!q#l;9xP7{hYwB4MRx-DzsJ>}&XwJXd(7ZT27ciW*t!f+YfHoJqx4aQheVzAf>b^Vi`oz+)LQPDqiOsn` zYHC@Welxq6oeSQt4$nV>OH%%t)$KjEuB}FD7Xv?fex>bBve14^Z9fL9xtns_R&425ZZ9@;78{z2O}(XRZ)?rR9Ka_8D9@)6F3_+r zT=2(Ke+>5!{7tx9;BR`n>sH@;=WgK|7heAC9COwKu)qm)896_#ag^ou<8l=M%(+|N zJ9Z0Z*m(J~W6W6(SY;vIrvXPHl6;_E6bU;kK8)3{4KSfZdf4rz`;Kq__?Sac#ge(1Uo9h$inhf0Q7KkuiAYu z@9SLc+OBpDy~d8>);(`{RbO{;%Pw-eimlymcyZj;z4r}) z=&i1PuBzl}^Y1Ti>iTiwhlw9tUA|i4e4)n}cr&ozUU+e}vukI zJquM!?l*(QX!F7$Tjgx9{Td`-5+^xk;JKs1tf3~>oz#Avj;O64CeQ#hgY|gXa!%`>Lx$U>N zjr;P!@=v*hwdt?+96B4}{(4vFxk1-oAL7YB7Jsdl9Ou%G(+|m#W^(?dBBEb(enrL#IJJ{xW+lyk@y$~lL z2dl`t=1KxxK_ISS*&Je*mz0=gutd6|{_=92Gz@so*0}Mqy?B^tZ>zdU5jVCEOci z28{g^Q2CCUnr|peO&zMO4K_U~Q-$jmJku9l2aHU%wWuMHk5`!A8Z5= zdoz}1K^8*+(u}9f1{)1u_&oe4;cmPqgxqH!KG8a9^f`lD_Rhby?{vjlxQ>6aLBq+l7f(TRtNIzl1MNhU+1Ec%=r zCOETvrEq;Z(K(JjvvvDk%C+8!%NIP`Fk7)+S$iLKPEx^;qJOp{lP^^4qfiI}h4N%P zy#{@RGP4$jLgNdFWF#2BhRI3`hecdxjGN5g!KT2JGcu_LH9zz|x)C6|lmq4AFDSt; z31kS6qFhb^^tQ@>N&asVU`i%|O?RjwX})Xj$@HY=drrD}g3fQ`-$ychqyp=(7O*Cb zu76Ha5ted`)K;2+wI`ioSB#j-3i?aB7-*@g-=|D}L`i+nJ?Sc!*CaQqlk-%RQpvs|Wn#y32BpYD;p6XSKBCAiZ$L_W7yW76+j#6kpptc{NbPIln z(4m7&gzgOOD|T*QQkHMzJHNVeer5R1S3Yr7wT)z`}uItZQNDqo%Ihw)Zv{n)=nIeyC7tJ6ECNI(@Hx%ia1dZ=YLf z{G+em`g);$w_3kDU%%THmpfmm?^Emh^7VasvF+V@2X%-ZKKv-!4rNEE&jQ7!?Lbg% zYq7qi*xs?=XTa8(1)uRp`AgNv3>PYr+ImCjU5Iq6k?wq?8`6L7$a2TMmYsK7b{1N8 zt1Y`1yv1nKBB{S>_Z2(37EYqK9otv<c|gqvRrcfvn9}J8EH%Cq&s=^UW)ok>TJR0WQG^#w-i&__UdQ}h zYiVm8GdpD**sqdqzx-GiMYH_vN(tRp-2h?y=~{WiAl`x4G1gU9<$8Uc!ZjB%he}v2rCrPH8YGT!U0l$G zFCBA+v_^f0feP*#fFYZJ@rzStfU!*qMlcEXh1^H;W0e*#c3TspGfv*g*j(|&1UH&{ z2A_=h6HuJyrL)WHqCSDg6S#6*HE~s>GBjcAGE(CH`DOaDGd{L4ft?-kXU{QK1STe= zw~_xn72~EdTw+EczJ}`3x9_MS;o_6fxF5xs{OJzcUS1Y}ZP6dn#{S0Op&e>y$DC``7nt`g)V&s@F9Mf5et%05O7c_m_ffEB z{?x*`*It-^VeWWwpL_@r7J>p?<4czcp|C9%2~h2smy zv6I)f(2`xnMPexA;im!@3V+_BH!9arDoR(5qR&6$JV!m;&)Vvb?B;&9J8L`RH+a{ig&*3B(Byx2yTiNv}-7$Vp;srmRuKe4A60}@-gH0 zX2J8(U&$2_d?k)R4{j5zBG|Xq+>u*DD`R(d|8(H}v7bJZ??0+;Ii|LNz>wg+KQQ02 zuorC%|9zo#S^`B@=4sN=j5RoH}1J#&nwUN^Rt{Lj0D{Uwgz{cvP{8Xqd$ zj;>Cv#BYnJ@5$R&^W9IYtpjTKKuKU}e+^1l8Xp&_FBgq7wd(m+T;+du>FDz575;YM z&YqtRs6B)E_CdA&8P$KdRBg3EZwcM8@1&NxSj95HPpU2Z)SCUJDwYNft9^7Q{VZMJk>g&?(gZn> zOo(}FsK0unB3xZ`v7uDU!t1y|q!eXd)>ysCWq2CBr17}_EKUO31*{(ckTNiiyKn7Z z*_+>WG{57hy7`#ejFCnhjdbh6vH8xDU?gXGEOa@7_1Q2E`iK3)uV`kB5}?&v{#ye7 zkpMG?_z&>mi~Kj){G}VGg=}xikU4iLj-)B0t$f1ct)l}41DnaHq8;So)d1;Z5*}Q&M&jRg?`7uTP<8EvvAW^n*Ibh}%7b!v{ zKz*v1@Sph(>K{fOl>Y}}dHhqtnDtmKdA`Wi=8a#G^UtzBn&ZKR_uZaXA)N4hchS?8cm7J= zP9ER8SPMR;uurUrNtJPx4 zwOoRlfdEqXjt0kS2WmNX1^jgbb?mPktsiR`Xs}3D>8KR(y(UHc?^z}31N@6?ppiqW z5KWji!IjjL;jYVNAIIIa_%|&4$ z4r@VJYf;!r4qJh+P;_NM9ojf-CBoW@!d7wEDulI1+oG%9v!nL-S8CtRp&bbAEc&v8 z!&W0~4ZiFs__C8jyAZmzsI03w>?wq;D+*h~Ve1jrT@=<8*?`_(tClXZF|ujI9@+ew zec&nnY74&FTJ+UA4%>#Xr=v{;Ewet-8`+LDyVW#}={Kk^rO1vah_f-;IO2@-yyh6# zV3ndR@8RnYv=jz5;$3UOyG?kvs^Hybyz3}VjYZ)vJ0DFZqgRsjdR+1Ug#{7uqIwW72E+3COM}tz;dmrAejaZ<@rmg8 zU?M3;!(;DT^4-8sGx-zYk?3%E zbQJ!wgYj`CZ?~4j`<8s=!T8w3C`uR~?@LCbU4sKZus;eHC>@Y`YK;u@AUSamr0`926(&L2M_-E*tQgVmmHYXsLVjFLfWj zbn%yzOQjwcPd@c&#Hz<1u|~=03`Kr8G~v&6_hcEShY$!)gtaM z)jE;75m%%hZBiGhjQF_54NAWCYQB+1y*&}T3Hdfe$}opo@?xN#xjGRI|2{_Gspy0p zO+?3&iBR%FG?c{qP<$j54o#?2qC50_cr->cE)fckM?%B#@k>z|@h^o(C!>k-5Uvq9 zKE~e<$H&Gf(r9cP>BymHuO=_V$3wC4WLycC<>+vd^XV?wNs zN=kSWJ2#n(hQ^Rn=v*|Eh$g!^75eHRW;W76O;PAXGCV%a?V+{JAGJQ#{#lq)C zF;wE}P(ZJ7u|lyC?&P7N;p7#x4h@8%As$FWLt3f;$CK38Xcy#P&|1T2_xSMeq#U|@ zAv&&RKoy_B5SvJ9sl>)7CY7c;lJ~|EgBW=e@k9(ToS9lvxb zEDw&x63M~D#ApmlhMaebo*SmsLcIt@u;Kqv8qQl%(hxQ+y@#g{v^N(u--3p6smahi zVll^$7=Y%CW!kdLSGLD}l~fT}q(6M(8u4(C_hUCmx$F0+r8T?OMBaWL^On>Lp z|9&)#u9h*l#WIH_3VnvbFdUy8#juQqCKJ(-$s4 z9|;dr&qU(G+@XjOA6F(d4aKtwOh9EwkH&^y=~hxw2T%0T*qXMqHmC8I1-6QdV51Vx;JW}at#_trf$hsXe%=T zJ-HU|x~%zf9+rbN#KkK|-cApB*We(HnZd!l8&Q%ms#L!0LO4O7L`1da?TP5=3a2~-QeciJ2Sz(+2G!fEZN|JRCzAA;$E=pZm?@{Lnhdp4ffvIlnw4q zmH*r+d28mj&evurF#*;tq z;1-o><<8px0A#`)hPBa%2M7LnZtZ~QEos{FYTdN70DtjCV|LnRMru!k1UoIgZy^k@ zOaY7U+vO0xmfOkcAg2>ff^tQFgyfa*P?r+IHaIv{t+$@~?gYhO17}uR@=D&Sw5J(W zerwm8yA~V^lZ(Tdn$6jo&1vuEC7a}JL8!b6k%x^lp5Or2iy#k(NXo1j)e3nCtyPko3hH$- zygrNQkElGe{P(1VPM(~g0gu+Y8XAk8zmNBhoR7x=Ezv?)#bYBH#39h7tbz$`RST`5*GdbC;4VY6FoM8n zh_X7H7x|J{)w)nP5xN{59mQSCoHM48w*0CtP_7WI;^C`U_7mFjt)&v@m4OygfO1~q z83ySv_Y5kdE$GVft}ON1qE4w}6;ao944Kd{8aEu%F(iPyNnR`xgy9We;2M=&?(sD* z^I8%61co6R8ps0m1#(lMK{T?Cdq!P$M#8btp%9~NVJ!(vuwgldVSWicBLm@RPB8k6^n#05I9pVJtu0)&(K4924Wf#8^R1g;e_^|K%n)&Y}^VT_MO!{f>f#S0Kq zSnol55H6ZnrK!U{MTM1HBNX3jNt?w)VOUEhiYdp6XQ@%3hXy=hmk7+PiO zGEkoE?vINVwlt1Gct8REZke`CTW?v+Sj9IiSgW@li;e;jL??k<s??i=o?oSSM6v^YtCW0A^V=6~x3{G$ zdoqsf#r2e!RiJ%uNLXDX4f9k1)(k!S#xKQ( zc?HsdCy_gxCsH8}hCcM41j@_NuYwgq6q2EOMM>zb)Jr^-$*3~jl!DWAR)9ZGNkiek zfY>4QNgaIpkR&Ev!QiVj^>B2mULS_$kZ;kq3TSVY{M9Kp55O*Ke}7k_+=9@2`QYGK zJTf^-q>^`V@T&kS3gJ{XI0%|>a8M3VJWDd~I!H{M=fiT|ehvg>-ZwbNOSeD*5Rn*W zc^iOo-UbwiAxz$-qM~{GArOjr+y3#ZavLJbPm!~MoXzCW>Xdh#rY-=tMkeAy-bwH5 zCjhhMJ@m{7<|^{7B!{U(atM|so&|0_YxrBT`W&t$iJUg6^QqYrb1QGGoj;SUZcE$O z;+L_n&9$`79!_n#-a9vZeQ(;{ieJXwy5y8Rm9u@beXsTbmi6pT+w137-dwxz+&cre zZSM?b8@HwHyYS1{cP-g#96RR2H%AsuFRr}Ru`rNr-MA#-U7@p4THBrL=vs1@IkqfG za31*l*C&@8^yrlQRoAEHpUV0=m&)jcORDr;ADDM%E84^dc@>A9sDuk;-S!~taSu)!P*;Vmu%!) z)&5TJ;w#xzz2b5IfuA*g+?U<|JU>2gm!oVB#9NZg&PJDG=fdeF3Ae@PZVlYA-5TVF zLZ?x0oL;I`?}MrUHBE0})ASZLP45z#rj{B;e8^u5r`qSJ&eb$8+34P}QQY_J=Q|a- zHti2(-7A+I2&Yj}(&6dC<7^m1OuKA~?-3C@I`^M=|51Cy8g+o1ZhOuC9zqQ=7H7l` zSnkMI9|Y`VCYLsE&&b5|HLvI*9`s|4Zj*2C##nC>OpmE!-I}dG= zv+}hsbD;iK^b93v>KPYa(Dmp6oNt=?CTi1}YVZ>qgRk=zAZbN8;l_aNf76%l@u}n56a?6 zNmncbUW_GgzT(K__^>vNfR^Bq$5Ouuch?5fI%G|_`$eugIn&Z0jSarQuaO2RE?>l_ z;i1)K6TMDMGWmHpD&9zb6W$0OO>8`t1dpcHRIqOK{k!x9r86t#8d`3)r0mz-xj;SL zQuyOuHBAGW0z3^~hUYt$$4!I#7+PPMi(u^+b+Z9Op2TPt zs}xo7eH+iAyj$aU=G|aC(P}t2n4r>yLbGB?YQw`+qq*)z&foh8PY`YP*{pOw(D265 z8%OU2*4z!O$pqGB18Y<6TyyAVU&=k#nQ=AbeD!Hpy%_23_(tHU#F`T*E6q|9?&!n| zZmhqA=PgL`mS@Zrl4Yx;q}D8w)Go=VEciaDjXi24^EWe=@lJe2c`6saf*u1{;&%0o z@gA{6tY${{jO9gX+~a%BCEe3=}b z7zI(*<>crGj6~^yQ4N_o#*AwTqB&^pP=#>*9g6*3 zIG}l)E_W9(9DCmEnLnGUS(U9>mG-Xs?7pvINpiZo435=S(R07PY5wqc%Wsy?Ip!Rn z-LIhqyP`*Ta`i30?fot9!V8PBO#O~*{SJyZ=UB2K)@Pr6hGns$>f3$a>YIzspItbZ z@vg~w*Q5=E?^>V_}!6mtQVeq;Osco>R~X(!a7NGqCeySKlR+E!Vls?TKmn<8f!>kxWBezk;HaY=S$V2v4=vek8p=&R!+4}e z!+6A_G9KZh@ojX_mS zleZyK-Z_#WMX>}81>(vp@;0%Q*A%?N+?XFDou59zJxx>H`s!$9Hu9gA~sT22o)pOfkpSnJkb~Pln zprY>vcS`@mssmeXKUopnzs>rStrqfc3mvF;{4{8V|EF~p^4B+ze+z{^2{d+|K69$C z|7b}-EE8y)sxRyU75x5h)CVf~txH`I;8z~U>q2-sLGQ@ zYy&`4>hjKm7vizuXm}5(5)xPr^P`ZyDGX&*cm!TD2@fwshhHI)*?9;l!L<&DMq*d+ z3^5M#mZ1&@vThaHD1!%Dle;R3m?+9jaLSf;)7@rI! zF0g`4d>oSX307%SxbfgSPeT2TQWHf*>MYbDk&H};vyk(y8I8RXRdsRVa-xd`xvCH+ zF)2^T1RT#pVxNFonVL5>fp|kI8<{1`lDlV2o%p8%iw(risobvC1=uBYzDJSSBIzYcCR%y0#P%`84G_$i>lk zBR|K>1hKM#64teXCF0Gsu1ndouBJ5q7|xhLFr`WVj|lku%9tb4MXhDPFtKV36I;Jt zJ;*HvPzFH=YL%8>!aJqrvx4%Y_MECwYHs9={NEInxcMpmr4IStN8SH{(x>s*`d z>`A%P)omHqDkGnSaREX?O#Cmcp=5-RZqEYl#nz3P7cU$+TTleQ`R?mCVHLI1McQvu(+vawr zeJhopYo!>M+yqFUF5=_xxV!?783`{`r(7U1t>}taORH6)gS2KhBf+-{6fV)|_Wr3l zG(;RQg!Bt~%iY(MW}BI^tt)qTS-8#70hU1^jl5q#PN6JfSa-u`WNxyUYO2xLv}Ua( zH>#4@h_Arf^ZCoUIeS>O75zO8qCTkpK^uU`J=FMr(r$Llh?U&!u$A?@3m@qIb# z`*Pa#Wo|%$$`Te^ta3-F1h?l}wDLD?1dnFy5zA}f?_ETYxDH8$NEC~4P0#NYp!WW>7Fp>Rh+l6rxKf|?F)9boW{F371YUwI{mUa+NT|t zBq+~H;d-BNE!YCB-m& zzTzMq=4s1+W4-PKea2i1a-b(-?cOL)!)u%apO^0x3>E1O8ar|gv zPq!W?KvSX-iOfprhC|}F`22k5LZ|j9poi89h)d9ei+KPZTGhCqO)q2Y&p;6xV;Jv? zufj1rZAGP;l}bU`G*AkY!MgPZlFC;Qf)kAl3ILIJsTdTKl?iG%tli2I_9mX5r1JGt z`Q3<&6%Blv)=J&^lfYARUs~7!Wz?#`J^z}!{xyp&8UOaIfBT*KC7UT~arPAJ zde7f^*Wa1(ugRkRYf9DobL+a$RO27HsU3RBQv4b*p|O6^n| z8p{IUdj){MffsoPYfLfDCeKq0S^)C4vG7FRPCP>)7@#4Uw_zul{G0GW3L3(#kon+M z#t@e_Uuhaq3Hcx43np&Sm_u5F61#k=(mav8)OgRpp>b0w)wiU)Ii5VXlOIlF-eejM zWg8BqDj#?%Q+wwV*%jNs7bpmV#o_h7^Bdm9ek z-Ec6o;c#}t;Ux#6JfyMtDLJWr$kY9Stgj6U0q)9N)9QOo8}Bx4%rtGzHf=Vh_yp;A z>*x2RJzeCX6#+tyN4FrZ>`IOwr4}zGqpRiwL4OtoXh)d z_qW{ly@8y6UCzJtzQ1Pf(2Wxr|H`a?<-;<21xg9$uUwKZ_^pxoZHrBJUP+B)DvxI? zkLSEqIj`@b&*d)vRDuI0jL|7Qi+D}lj4mLQ(7Z`RUp388ALyNxQ94MR%0$1d`P|Y4 zcxflKEHSbO&oc0z1=~YM_XRI{Gj($dViL2t`|ZGdDwk1Ahb4%<5j&igfL9{N|s#UG>kJf4BM0#muI@?4~}vn)|8< zGPToIGL&lRFMFpKoz^bXbfmkk5g4wQB^Sj zd|SkCAv{+(S2_Pxu@Y#nxjtQG`P$NYuUsbidsMokga=pRreaY?lyFZr6P4aXXs;! zdn!|VDqDLBG1b;Xdo5zC*OrWLOBU~3TSU8A&U6I}1)KX(V%`fUq?^ysBe&fl@)6fc z?jz?oIc?++zd^IFQF8GcWC5g9IwmKM#_}9 z-LBzVp%bt;UbK)3CEf2J4&6(*&UObj=&=SR`3&L*dNhb1@TiC%;9HW+&Iyafu|dcm zHc%!;#~E~NWd%pNlY%4NNx>0!N>NjA#PgE$g$@r2?vY{ih<2$2?ju51N=h-R3#1qh zqneyfi0eM6BsfaQG+ZWGf?=1fBGV{inT9JuvJe+!8f31Zf{g%Zq%yYRLu!I_oND=_ zm4Fg_b4W%L&R@w(*e+q5J)+8b1 zkB^VU&QG!cg7x&Zy^BbmRP~u<4<^dw|GVjB_d{CP~nvs_A(gFuCW1v#KuAx44> zMrh7FP*TR z2XXX$lN^V6WY+#J+muT!;#8ID(+a1*(ux4i@$VvCRSlN>MlKmIlv7pejL-x;5kd-9 zA~GnxH2~%IE&zP{R)a%ApA`NCFs?^b6Jk#_;#$27&#z40!yBLbMGb8Ru?|&pIf+hC ztE^F`^9ogXEk48AURvALDAO@$yLM1kMN%9)-g5N?ab(W&i}32~8zsVeHFRqa{4AB5>x_R|tnf9PxFg1V8tP&-yt z;-(B?`A7kHau|=QR7opUf+At^GlrWF3?}8PgXmIaks2frGS#BBL#bfG@)Em{3J_nb z&0T-LrYT#~zHoN&NTy~>wq{G(yG7{5THK^gp*T>Uo!dIM6-q7cdeU6=A_1Yf+F^Ug z(qUUh<5`o8Ttcp9Nz-H1y+GWYCg};m3BC?VUuh-w$AYm})Ij397Z~Z7fwI=CkT?um zE#S0YUjdP#p%=6dO^RPhs+4jW^EUUWdBC!ifhdonD@j`im5X*N7^M!T)X_2@;9p#3 z$-zRo`rdd~qzra*++tG>ij=|8FMk)GPp#K^v5`0yE8^5L0cBh@uL)=k*6oHTh@J>3 z@e?x|AD8Bi08SoRCO`F1LJ<4$d+eqXkJU#jl`z@e`_R~N!QCGmr_z~2G+YhBZmu~7Hs{QG~UEL0j) z)cB7GNmeap^vgfO(__@XjO(J{gp#VJruWs5ni7C=4U*}q`2q^{80DptsmoHRJVtnU z=oD&6x|9n~&X=fAhu~oCQva5$)kK$)vj#eXM3*{84w~w})@-&4zaJyF#b( z7gtiZfZ}Chb3M_ccq(+9c1JyJJ;YFQ)Du05+ecN{pLZ;~A5<}(3LS4yqfE(XpiJq} zK$+rEp-kZ;3exCwTO5soFon(>{Ev4;k5aP^<6pa6ito`PJi1Q&Sqb~0G-ztvLj}J^ zkm-b)?t_vUZ|LEDQ(8=D)Y~qqc|jhm$A_AoF~qD1or}tv zmhu6J&+-+6%jtrUWVH_F73m%8?O`AOHKn;|e>uRr zm0K+DF}#JAFYOCpOho|l-=Ifc0ayp0aLWW0oj|hzE;pCzAXU}(Et=Wa@evRdryF9f zn!0;69d~Ow7NVIN$f?$)z3T*qQs#!tR&{b-Kkd1>@2^T%@67mjW&OME`48UpAIvqb zSUhvA!EckN$g`$?Mx zZhu$N)`J6xCLe^8x6{@Q!HGLeFBudvbYm(0Dtfn)oPVi0H>l!dsX>KjbkEfUZuIij zndja)dvlDcZ>L|zzHZ6xbyO-$EbSv}_Rn!rwj?}>NB+7~1!$KXl z0)96bO0{4pRVw~EVqh_I$qz`>koPMC{ZtrMQwa+7AA#^XHck@kD|r`ugJdTazVH>{ zb70@%*n|K=8iYin5*T41bON5oYdpdLhhdxOG_dAD`jRhb-$;X6Z)gIM_Z{*dAYA@K za{e_rACvQM;Hawn%Y`SXlr+E98BUA*R6}9KH7ffDG|Hbs987P&6sQAD?aI~E@~u9E zTSZQ}1sm~Hp28oGOcSZC!Q|gTN`EJ$_A-_N0b%vVGe~BQkQaWftKg@y@dYa=4j}jV z7Z+{5#IV3l)<43FE|*Tc=be)iM7u593(FDqEk*5YB=CQa+WL9qwJd?}s=DW@zw4^c z`2#mx!U;Cq_)3nQ>e?G?mpqcY;UP9jLT(R-c1o5*>%rgfi*0??`s)A&GW8d@1JbB8 zV^30pUd)_@32HvQ{@l*^LPe3Bt!-btt=fHl*w8tMbX zE5iEOx#*zC#$8GuNzNcWndIqt=O_#fVo`9O$31*SY{#WB#ZVQ_tO0kbFPiZRZTk^T z_I@~+>_BeZ^(i0yeNs{V`U}@z`1atp2C*CY@Zy$C#fEIfhLkl|*L35`LNZ{zb>y=!&Hx;>l;i1F2sUAqvruviUyEID5g1WCnS6ydFFZ(dv2`p%BU=Wg3StjN^u$=2;j`}aH$F%Z=d<<#xKhb@`9 zz1h0GY5(2_o+`%v=AP%95&zqf@%Lo?J@@?k?)vxT8k-jm-D}@*w|z&Zy*JwqD=AXd z{wKf${klmWY=etWjz{vgNKF2`DjDrQ!P`bgU)r=Tw0_f9@^)IqO?&;(4`RKhQ4h`+ zT=jx6EX&kiABnL6Cf?TqY+LLZfz*eG6mM{$97zO0!}vVeW7Bx>C?@s^N0^KqfZo`-&m2JpA(iLe70S1?0lN!>g&fq9HFP9$DQ= z5VQq1$1nNX(yFpMHNJY$>dS~z8XnTKxu}Lnv#^Y+GjC;U#5!(?*k&vd`?TeI6jP(! zz9$h^+W3aQ)z&V2>%g~8!?#*4+PB8oA}507T3NOH2{s$P7JC+^ZAB#_I9N8d<`A1& zB#Dm(?!Xx%*%J*O7#o`i(f;vn>~YvNW!<$qZ@KchWzUp#&u(bfGOS}s83wqk@hr!mv*xvUA1AZX0B#& zYwAF*rejV{*K`2%?7)qF-i}`^GNCHz%5|yX)bJwo;u&=@J_CzcllEa$*d^fxJZ3JzV;(c;B@24mik`L^ahD>y)rPTy@w5!%+PwOqhcWIVj<=!f zjTLUnC4d1GT%JZbKT?@96J8a^y%?RUwD)0J33XIPVx4jfa!+A$p;629MI?adO(o;T4&n z09R1xu0-i^1Wtk`&pxp@{)}FdL-PUQ@7+MUpe_al~*qL=p7|yaGKpEv|I3Q zNm|aSZGkB)p_4*B136ER267&c3ONtolC+$&2Wm3&hgm}=y=EuhKZ2?W-hM3J7Aeno z9h(=xqr|PyX|_6!TZo}Z_a}D+OM!Z282{R(&W%UZ#X4hA80Z>sfIa90VGR>qUnM+ex<9X+8ef?)1!}AUrQwOCgW(CpQ8s9sR zn&is#gKXpZwig-5`^c#!=Lk8>4dVe!6Ha8fihL`{`AgOLYZ{?Fc$(GzavrErl3U~^p7G-QE!Cuo)FKE*+HjJ`?c{Jsaj;@3i3>#Zjg?Z&@gwYhnXRygu-)_pd zaAHVNkpbo~Gz6q~i1)L?8|K3dpbWxhEO}cjsa+`83!m@+<%$W~9?UpVSnM0tFqLjX zMmR}kq!`jwpGngMhs|KGFDw{ivE*{{aSVxxxUfpAp-c)dRKa01G>q$DtN~+d$P4kc zq}7eju-u)1rE$Z$j9B~u>Hxe-ErOmYHb#@VShOYCD+My9WTjiC9KJvuRA`8QKN;ue zd`t~MCO)}k)fRx73asvf%>Xqa!sVtal!+udQPxqh|CPon;bX<@aGJb4#RBkPakPP0 zBxx-O^C`T63hEmAZaq2w9!>%3K(Kturw+Alfyo7Fsx={mNf*FYNt4F;0&|Jiuccj$ z%T2%il#xCM578qp7+eB<`aProa_p4Zi}2{vZ^`N<$q_ltlDCN@M@~mmE{NSebYB6x z^mOmt!}kYn?~()0V1|@-#Pp=ROw*HEj;<#MdzCoCAglvE`9I<7CkA?sBPUMoe;nAW zGpDWrKAiZa1HRhS<>gwQ8=Z^vc)<55m6{wJT~-YEstNEl2*6h-0AC%!ypoP+SxU>) zvK4qi*P}T&Mjo|#-jm9y#_35_kSZBe3XP{f0WdBX0$WYs@j|^3|K+ed=w<$}=d}tL zfAB)CRYB(jQ5Xz5&}mBcfpX>pdw|MS=gYaJ1#s;|Bj~`@3|qO!{(tBS(8R#}R}EcF zrw!=lCt@R^D0WapWd@QucuqiHLM9^?LqkOV4ykL|uM9kU7(*7ox&O%W%wa}@2;)&N zV)QYL{suh140~L#Ss^=clwe{L#J9^e(+=5}B=TChU_TIe!w2{m*Ehi86~~D{(8w(B z&(|I#h8b}glm%9AbfQ_QRYTm~3DPGSKsrnrPlx{wjsqV{G_ocmkq%}oYbD=AMS&2p0#7UxlCbjvX#fuu4AGae?hr<3vpw8aXx@>Aq3?WgO_Qh`gpA_Nz#2rpO8Z!Gx49{ zF_LuF3R<$sX_dSUSh8J3G+qT0E94rfJbr5;^Z1RR^Vlm0J@yJpkG+D_V=uC$4qe7= zEpzl)i1MO4lV0Q@+KcW)e9`^MUD3eQ5T->>!}c#B#7sr~J(?`6H~?eg2GWddkK+^u zxgCXiGINClLU@2n038_Mu=)x^0Y2jZFV?KUMrsYv;Ct-z2acsA8?5l`>L;5@(vdTJ2%zUJ zn|QBJ-f|TTImnH#Mia0H37)GOzA(r*711W79SY_TZQcM9GP0VtY(MOMcwaP zxR)T|rP&C(x*+%_mvQA&b=bKkHlKSABcpw=Ly2$}|ks@ZXdrtw>d&RD*; zYVJ#E&r1C6*VN5B-q?9#XWHBPz!&)TwQpT}edhYiJzv{hUt7l4p7ph->|hF}YqqC7 z^kZ#QegU2${h+uvx9x$tKe-}Zxhdn_ob_(L=k2-c?fJ+7sYb?oB!Lz@|n zYY?61*^{sn><3PsJnJsPIU($fu-%uxz^BlDq(N(kB zAM*;9?0!v8jC=-e5j`5XMR-)WMer?2W~bfas1-POEg-z3q$9u&73S9v{8XJi+joe; z57D)RCgkmtld;Gz0DownG5l#|_)|(U4Rpw^O9RX@N?9R)7buOQs{qzmpgm?U4V8*v zT#?ntU93Gu6RzkonoB7}#1?4G6G3ezJbed{i7PwGfhPhm{CP?E(oodvDvTMU`Em<62q9=7<)Ob%JV6*^K6CTMjAwP$ zLq;4`WnX{rEzg^tH!5yaq#RHeWp%TXW}Ceq`f)J*>}kLn(k_DooUz!kAwkkEt44u;6xi>Se&XD3J>a$d)MJ7B1fWQ+qZVaO z$0?-24DpZv#AA4#YAkLj6&igFEhSge=c^F2G#Cm{FgY~%i@*@u#r0`AXyh}1A$l}` zAv`Kz2tGQ|!RWL-F&Lu4n81)m`u{tG7)k%qhdp1^=E4Bfw{(Rs;~~OPuQ&wSz%*zE z@lVGNyGtL946=W@5RWOuu-_4EgG#Us98i0!gxZ@gQh}I$bOm2HT-trHN_{G!_U40X zS~aXUR^hu!?6(w$F8lEn@#XkJiEHqznKv?~s4M7=*mOTs+zj=I1PvjzrjR;A2$lPb z@}R?%aV#@zYSu*pkzj-lQ>O3g)UuX1Ou3#JC=FnswB+q{FnIWH?2>dS3hD&57DI;9 zlNEcAWK$A09*L5qvw(@rg!eMes3lgaIINgrFj)@*G(3qzkRkM@a|W-1GYeB>V7}5} z#3V|ET7@|AEsD*3I5O!nc3_4_u*fK(e1Z`tg(J*jFrN?!UB;oK$VxqZkje~>FBs^M z&Jt~lD32{1Z`cfvD%|y-RG?(%bGCv2?l~5|6jHn<~A#)R}mViSVyIE}m+7HPs z2JSb$Lqms^O{%eB@Xy8J@rFILL!&qn9=0h*!*t}+cv6m!;#4+qIw99avG=JrZ)^-^ zqGHgbLx-YZlVI#CT}1mf`%cn%(R}J09STiM2$Te0)6QDTi)%xck0UU_2{{AKMdX9B z(A4m9NC)G-ISsNeC8t^AJ-k?jk(mAG&;q3iChyzjG@ei;eoxM zTtb|9MP^XN@PVOa*hs}mFiKpAS?JVosDkLne6itClA@qu5dULH6I+Ft061`%_peer zaCOlDW3b1H#LzW#ATb{ZtrSl*oZh|ER^dx=D60&k2{c_1F1|=z6nH!uYe8_TE^{5!}aK`M)2rj_3Ht11P<YH)x%ewZZ zUHgp2T-%Yz=dHmg==u63C}`Uq~ZGEQ)Pc=x%}4Oqx^Lcg)4H<1IqE9MFDReX+Ck+)0XzMG1nqj;fEEqzH~(ke$3d&`BY_t&;5n% zS&E}(;uaHn%T4@$p)iFzZp|zxLAaJ~=m?BXng`?zk*>?AF%@P{u$dv9)sj?Q6+)BAqj3sOxi3!CtdmeT^#E)6R>U(zUtn<|m6Z zzWNE%)5s8W3g#z(C@89dNkQO9xv;;zcgBTrLKJP$1(mtg`pd#mL#COhT{`&!#Yy{e zEQuM{*IYunM83-w^>7SKbh(3877H&hpIcT>*;e<4x`NpL7fTG%+Brz3O9WHZ4x9o| zi$cwsX8e1z{=LKmX?35p z@TR-2yER>l9hsVq*_w^1Lk~y@u&FzIw)4f2)-9X2}xoqdIOkj65usa>t{YhQ@jZ1HbZ${qT^v<@M zuPkoP)OBa;y3_vdPg=Wj{@`5l#?^)Pch*DWyXm7dKYIzuuYe^?I7og)TR+`g)EI=(1JyXj#2`VezZCE@wKoXFIoN0z0yS9clhOP|H#>!h@PX>KHZ_5)TwD zV00CBPr7#h+Z)gzjT^I#8}WeO?dLum5WbJLeY`5;?azAq)1`jk@_a^ez>{<&2p`3~ zc))#Vv-H!=`}gAZv(4p)pSJyM*M`HJY=5xH0sj{nm0XKKq#Kl+fmI1?d9hF1BDPxv zwh+$KrXxp~xJlX>#VVy~K!#biO~fsoYL3Aztm)_x82zO2CeC{y1Q|FjN$e%%9qD=hL&-FBw^+lA%gv~Ne+wSzHVF*l=p-eku-Y_jDmf-cCK4FC!PE7SkQV03G2v!T{Z2@*N}R5IHQ^?IYiDa%h2I zFq?NUt|)IsvO=}@1O-toZ2qe4t|US^>8b6s=FK~Ep$ln<+((|%byhZhG@;p@@sO-mkr1!zI=&)`09sdV(PH9NYKH9NYKH9Opit*cqH z!!ub1`~pXal(=)-soU$}Of_I%4GD0LPJ;RJQnI`6BpjSa4I%>lu3dKc7{fgPPXUID zZG~p6b;2x01~Fg`2V}JMlPT$NB<~}ne-=zsD}fH3QLXwStzcha^trp7}iz9u-3}ALL4c?`>Jd4rB<4Vk+ocJ3TZHu z!ygGi&#nW`v*o%A~qHSCr9N3^@8u5Nc0X7Fcy(?mYW<+PRiqo{W*jae+Il8O`R9aRA$1_ zg3yg)>E&2_5}aW=6G>$d^YW_b5L1>4XHP7!NlXh?3&!`%&BCt5F*@ENKCW8)Qt%pRCrLG_n)aTx7#9@k(rBg6!oP5Cp2hVEmQv zRT#`0g~i^G!ej&URnf9GMMp&oV(V33<`bIvq!QlCd}ZFt7G};Jy%go7x}&{`5m!(= z0vJUft1rLk@MO{FbOe+7{)Pc*4*oDS7q$H0vQ#+p(^+-N~p{a-jsGlNaiV{3d%2!~4 zboQ31Q_%16%dkwAKpE9eB+H9vUV2HHD1Et3aCz%7b77|2?$k z97#V^J61foV#%)V(Ak8LSI}3zbQo6e(AUJi1&YH2ASQ1d$B2#Nj4hs(#GU49@-#4& zom!U9_~{KDjE{pY4AdAkWpn2A8HH=JM&O<}}Xe62|uSBC0p=YlqFT}@J zL!u;(!_q39Krf(j&?==$5Hmg**Ah_(Ix4vehbZsS*g596Jzf)ala`Eeqkuln(Djj#**dI$BVgK)T4}h9ytS+w}5kbw+12dE_L?j zUFsC1^P0r;&U=lMC10**l6Pxm&zI|MGF+}MiMZR8|3^^3Aikx^OeI(phU3NxjBjAy zyTSN|-DrGc+KnfyJ>tT_G18#U6azPOP-lyQp)#m3#=s;)Da0kW;0gGMxDvHSBXfmH zp-4lk6R}Q=UvfHHss-s3sPz`6W6HBoqog2D9Qq{hMm~AB2AJi&c<%DZM{$$MlDgbS z&NJj3C+8$NC&(e2Ut-7OZ=k|Vpuhr8i2Ma#^M{;-{vmCR=frr+FpVa03G|LAmZ^$o zF{d=i!U}YI;%&TV605F-WeE*!xK*kG2D8DEMyRP>_vM<`(5Y|@Ipr}xAG&EzD-Q5- zxZ8-W!Jhjqt@D?@`{K-RJ#goc$li=Ff7nBf}e`gMM1ILBo6y1ah zY%F|zse+Zq%Sd?~4oEpTFfLGNLIrjCyu&0-;j?$YNT@M}Z18WP^38w0J2o(n$qk(h{X|YZk%wUjY=!cEB58v7Pq`5(a#g__4R1%&RjcqT3}j|%x^?62_J7v(yIpq< zXEq+Nn4=!r*iFDh#4=~S6{I$7eUTT{(k6V2Qldz~BDtVZ z-)hU!9i`AH@h35zlU${LT{tHSIl`r-D&zW5;f6j>Tryg+y{NU;blF9fo55S|KhVa7 z{1vpBCOgwh1;arGSy`munDk$dRzRz3>T?A(*SHFQ>zWsC8Ths6f7F~fzI@5krWvFu z=}p^{+H8U>m5>g;%rH0cWc^>TA>!Aj|23A;6ShL*->MZ{X6W^6(+b*5UA7f0rm;Zl zDqp|USaAP(w!)J^e((~@`@5`<2mr2^SK}shRLD^z&i4t`Ej-cA9Gt-nCNooGOrNxR=9A2m$g zk&GorqcV%k%T5pWoj!H=Xud1~LurJs5viEx*N6H}G0g}qH$H4lq2gR9Tag){FA;&!L{&b4&U@l@FZU+qI_ue%!9Ue*@^9aym& zVw$QIbb{7gr3VZo0R!=kCg$%*vhFl{+)RUD@C+$ky$i zit77_`@;OGH(t8&(wue9`q}*&Sb26=z#xq3kcGEvkYiVE&o!;M*R=U=)8^ZoGfhut zo1RVwlpkz9zU6+?eLoOP*Y3;&c4Y&*?gb9s4IIq1ti1W+Zx8;~V5X%z+tU3nR(u@H z^qkE0oWx$(ARE#R)|lg#)_?CZ`MqBJp>v6sW%ey0)yM`rXJo zqqjGI*qiCxlkF6*j3s$G6WE>&Y`+)Sb2qT(u_f6HrGPIeNF`;vTV#9YotJO7eYiH$ zu{+x#UKz9fyKMlFc!BFPBHvT*ytpX;-sTUtXF7IfJ7A0lZD7n<(TunkICM8~=&=<( zOqT1upvM1&bN;%hv;5B0+rfWf{c%}l^}g)teMNQNlL_q22KL?y9Jw1f^4K~beZo55 z^L5_!buP#m-`cEiZQ8XqL5ulMS_1nwOF!A%d9c^^)5iTRxcz>Q1+Ff3HxWU0e1oYh zJ?e*JREML#Sb3<9vat7^`78!zsX(zb`cmB2JAO7%cE1 z27S2-&{Q^D3<}kd6p_6h`bZTjQMCUmbTxzlLSjwId*DDx^oQttaYP~WBZ)Jqsw?wq z!RrPIUqvLse~Q$Vh4uz76lU#>@6&p57@uIhXe^<RWP+FzMF9hTU3nEp54`P;SE(xJ$t%2hK@`^8ogQ9Q5GC zLaFe4}1tO2)61lMJ0u zRKT7(eC34|y0X{oW_HtnkHh>3gY~q6uqvop7|IEy3%kxTiFgd#i zs4Y~Y4mGT{5CEy+%RA1{xqRU|%$+k3Mk;bdNM$dCFU0`FVLnXkvjJ%Ud0}{B0@8Jy z=Eph&ki#niO9A>-VJ+=x;r(mMwkB-78H;1f6z#f6tbXTP!-J*mVQdL?1Ei?>Fthz?c!Z%^G+Jw|Nar z-omrJA>q>|F59HA_M2o&4ulf#@6kF=gbyXInlYcyUVJz)j@#so%4Cv85ofb#9UCv+ zKstGA@~V-;F5kk-sW$FzO(bVHmRdWK_-8h(At6M@iNx#r#qXoGAHIC2Ewg@icKvSc zrC25{GI6j$che{AH|0u8+Ek@E*Wafch#`V~9h}3*4kVgc*PmV2582)_M-<>A(bN<0 z{9Q=kxU&ohXi>MpEG;1P|{ zs#7$YQG!;gyFRAIBy<7Y)pAh$Zf}|&#~CN%nbz)XYq$1VtR>uC#)A&&#d6!7s*4Np zhm_$CWC$Fiv>1 zi(oR1qa3DwTSO{TEuzVYYh>sz_0;!&ORYz_DTlr{^`x767OnFKZXSiF;3qolPZ1kK zC50Q$FPT~?L2aP$Pl&NIRjz0IN0i4#yo8---!5@RqevMD@J0ACO+8t-H9gsyp0sb5 z@^dK)mRjo~1?m<0f3y}(p>n9+59W4Po5?E9pyTmXSZ3n>PkBU{p}v>A`ae;jX`jrj z^og%}ZtIQS*S~)K>uFc3Xas7qC*Q2qjXHeO`c2!DmKf(|7;0T8?jeEPwEY!o2dI`q z7(>IR=rRg*>8ws{ZNe8H@K+Rh!Cv$UUa(0xo0-Y`y7hJ1bYS}0VmeweWlLFsFF9Uw z8SRu9X9ntkQtJC3A3sxo2f;pe?=|pMc@3EnI1N~#&?uB~EHDh@Lw}8Q#5fLXcFlw? zW6fnt`rT7If8lR|#wZ_mS@SM6=e(PIoIb|9#!NKLT0&=e))Ex@j#Znt0p9IpnXwWW zp0>Vjf8AzoL}exiwV5myP=^4+aSQ?ZKOjlDlN`!BK}$1e_SspX)xr}zBu1^W=9ZY_ ze}bFMf6I)ZD3g%lx*5RheLCHrR=Pf}dDc%M5de`M6XP zab}|Q28<(g@PU$QV$biR%?Z+0{=6W_6Jm20Q8@OrmMqd zp{Y0a-q@RR-4Bo@spB_}r=V~Xn0MXvgh;Zk9t~EX3p|?(JeLc!JS?*lvl7lrRIJEbv^5+4`A1tWcqR+i_e|FJOxpE~XrEw7;`;zK(lg}jrzZF*`Ixe%wc0>lAEn1Oa!!-OB7-C3 zBd{c>a;CeZ^f&^C!R-rkQH-dw*IEG-%C5s?^Qt)`jju3@i4hx(p{oHP+-C|eAPHuG?aWwB z<(G`*H|Gs|fFuJ_uENt6uniY^tJkz-Jj%Bq9rOYzDkTj<_eo$y=$o>nw(V6CajMl6 zS%s-Asi_7i;WQ7G3o1@!$$Irk3D-o!%J{;A{BzRfP*@g{s2j&iZ z($F#=`EKLQ#<>HZeNu%y-e|eek~;99t|{gHq^xSL?K{y-S#!3mnV@mQeVA%L_4?K8 zS79$ggvK&up==qXoE98l;j6-;T;~3b)3aA+uOjv1_hAFELVI)HSDh-Sr?a!yX0IWw zl$V~)%udZt-S^d`JP*ohD4|;ZY{~9&R4rM{+*S8|4fAbp$1=V(S>GB|27=MrcC7Os zx1|HmiXV)y)zP-(I!Gqzd=w{j}TWP0(MMSXFSbW zPjlMd%tqRN7F=^^kMy%W<%d1CKPb1r6%^LfLel**^;Qxcn0I1?Lp5Ho(rF!#sb7V3 zn^2>C84hh9gRDg+2B++zS5QAEE*ov?k<00YV-hxd5-j`{8`No+RKDWOi_ab&Jb3Kz z!DssVkLIgHPJ=k(CpykMg1}0F6-1nD5S0navBF>8Z<0VD4rOCFe78$Sx$Ch~sUV0(;@Ta!05w8230vQFtJal8W_ zG<6JS>{d~fm2f_H?ShPdax}U}{uZL(CneUP>9C91V#!JFS^mpOo>~6ON#(Qrmy@c~ z>Mtj?q|Lva6iS=ir+l2*GoUS- za`v{g`pel{(&k^zz9Mb@{w$9=AIz?a)Cea^_*|8gD<< zgZx2D7Y>;&a_0IT(%VnfQfq;2gkpz=0N#G82W<{g%wlKWO@jq7 zwV;g&iv@dyOS>twJB55|3?Iex-#uS-6HNq9dKHvMa4&RRm#h{@s!F?*E`@w*43`}n zEJOs9c43+LAqRbGj1aN(&@hKH_uP#EoH6eJh0M<&pBnG%|MB7MrUU%^ag1+;PQO+1 ztx8w6Wh&dVmF=@02qw!LQY$j<#;m(>)``cmn%U7;$6p(twc){Cm#WOT>a(u;SqC0n h!P%Ktzy8|SXYE+(T@C57`b=44wybg1PJc|L{J-rRjxzuN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/__pycache__/utils.cpython-311.pyc b/venv/Lib/site-packages/click/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb6e5f9261572e23f9210c2d61abee7c8bdf73b6 GIT binary patch literal 27981 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/click/_compat.py b/venv/Lib/site-packages/click/_compat.py new file mode 100644 index 0000000..23f8866 --- /dev/null +++ b/venv/Lib/site-packages/click/_compat.py @@ -0,0 +1,623 @@ +import codecs +import io +import os +import re +import sys +import typing as t +from weakref import WeakKeyDictionary + +CYGWIN = sys.platform.startswith("cygwin") +WIN = sys.platform.startswith("win") +auto_wrap_for_ansi: t.Optional[t.Callable[[t.TextIO], t.TextIO]] = None +_ansi_re = re.compile(r"\033\[[;?0-9]*[a-zA-Z]") + + +def _make_text_stream( + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if encoding is None: + encoding = get_best_encoding(stream) + if errors is None: + errors = "replace" + return _NonClosingTextIOWrapper( + stream, + encoding, + errors, + line_buffering=True, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def is_ascii_encoding(encoding: str) -> bool: + """Checks if a given encoding is ascii.""" + try: + return codecs.lookup(encoding).name == "ascii" + except LookupError: + return False + + +def get_best_encoding(stream: t.IO[t.Any]) -> str: + """Returns the default stream encoding if not found.""" + rv = getattr(stream, "encoding", None) or sys.getdefaultencoding() + if is_ascii_encoding(rv): + return "utf-8" + return rv + + +class _NonClosingTextIOWrapper(io.TextIOWrapper): + def __init__( + self, + stream: t.BinaryIO, + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, + force_writable: bool = False, + **extra: t.Any, + ) -> None: + self._stream = stream = t.cast( + t.BinaryIO, _FixupStream(stream, force_readable, force_writable) + ) + super().__init__(stream, encoding, errors, **extra) + + def __del__(self) -> None: + try: + self.detach() + except Exception: + pass + + def isatty(self) -> bool: + # https://bitbucket.org/pypy/pypy/issue/1803 + return self._stream.isatty() + + +class _FixupStream: + """The new io interface needs more from streams than streams + traditionally implement. As such, this fix-up code is necessary in + some circumstances. + + The forcing of readable and writable flags are there because some tools + put badly patched objects on sys (one such offender are certain version + of jupyter notebook). + """ + + def __init__( + self, + stream: t.BinaryIO, + force_readable: bool = False, + force_writable: bool = False, + ): + self._stream = stream + self._force_readable = force_readable + self._force_writable = force_writable + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._stream, name) + + def read1(self, size: int) -> bytes: + f = getattr(self._stream, "read1", None) + + if f is not None: + return t.cast(bytes, f(size)) + + return self._stream.read(size) + + def readable(self) -> bool: + if self._force_readable: + return True + x = getattr(self._stream, "readable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.read(0) + except Exception: + return False + return True + + def writable(self) -> bool: + if self._force_writable: + return True + x = getattr(self._stream, "writable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.write("") # type: ignore + except Exception: + try: + self._stream.write(b"") + except Exception: + return False + return True + + def seekable(self) -> bool: + x = getattr(self._stream, "seekable", None) + if x is not None: + return t.cast(bool, x()) + try: + self._stream.seek(self._stream.tell()) + except Exception: + return False + return True + + +def _is_binary_reader(stream: t.IO[t.Any], default: bool = False) -> bool: + try: + return isinstance(stream.read(0), bytes) + except Exception: + return default + # This happens in some cases where the stream was already + # closed. In this case, we assume the default. + + +def _is_binary_writer(stream: t.IO[t.Any], default: bool = False) -> bool: + try: + stream.write(b"") + except Exception: + try: + stream.write("") + return False + except Exception: + pass + return default + return True + + +def _find_binary_reader(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_reader(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_reader(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _find_binary_writer(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]: + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_writer(stream, False): + return t.cast(t.BinaryIO, stream) + + buf = getattr(stream, "buffer", None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_writer(buf, True): + return t.cast(t.BinaryIO, buf) + + return None + + +def _stream_is_misconfigured(stream: t.TextIO) -> bool: + """A stream is misconfigured if its encoding is ASCII.""" + # If the stream does not have an encoding set, we assume it's set + # to ASCII. This appears to happen in certain unittest + # environments. It's not quite clear what the correct behavior is + # but this at least will force Click to recover somehow. + return is_ascii_encoding(getattr(stream, "encoding", None) or "ascii") + + +def _is_compat_stream_attr(stream: t.TextIO, attr: str, value: t.Optional[str]) -> bool: + """A stream attribute is compatible if it is equal to the + desired value or the desired value is unset and the attribute + has a value. + """ + stream_value = getattr(stream, attr, None) + return stream_value == value or (value is None and stream_value is not None) + + +def _is_compatible_text_stream( + stream: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] +) -> bool: + """Check if a stream's encoding and errors attributes are + compatible with the desired values. + """ + return _is_compat_stream_attr( + stream, "encoding", encoding + ) and _is_compat_stream_attr(stream, "errors", errors) + + +def _force_correct_text_stream( + text_stream: t.IO[t.Any], + encoding: t.Optional[str], + errors: t.Optional[str], + is_binary: t.Callable[[t.IO[t.Any], bool], bool], + find_binary: t.Callable[[t.IO[t.Any]], t.Optional[t.BinaryIO]], + force_readable: bool = False, + force_writable: bool = False, +) -> t.TextIO: + if is_binary(text_stream, False): + binary_reader = t.cast(t.BinaryIO, text_stream) + else: + text_stream = t.cast(t.TextIO, text_stream) + # If the stream looks compatible, and won't default to a + # misconfigured ascii encoding, return it as-is. + if _is_compatible_text_stream(text_stream, encoding, errors) and not ( + encoding is None and _stream_is_misconfigured(text_stream) + ): + return text_stream + + # Otherwise, get the underlying binary reader. + possible_binary_reader = find_binary(text_stream) + + # If that's not possible, silently use the original reader + # and get mojibake instead of exceptions. + if possible_binary_reader is None: + return text_stream + + binary_reader = possible_binary_reader + + # Default errors to replace instead of strict in order to get + # something that works. + if errors is None: + errors = "replace" + + # Wrap the binary stream in a text stream with the correct + # encoding parameters. + return _make_text_stream( + binary_reader, + encoding, + errors, + force_readable=force_readable, + force_writable=force_writable, + ) + + +def _force_correct_text_reader( + text_reader: t.IO[t.Any], + encoding: t.Optional[str], + errors: t.Optional[str], + force_readable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_reader, + encoding, + errors, + _is_binary_reader, + _find_binary_reader, + force_readable=force_readable, + ) + + +def _force_correct_text_writer( + text_writer: t.IO[t.Any], + encoding: t.Optional[str], + errors: t.Optional[str], + force_writable: bool = False, +) -> t.TextIO: + return _force_correct_text_stream( + text_writer, + encoding, + errors, + _is_binary_writer, + _find_binary_writer, + force_writable=force_writable, + ) + + +def get_binary_stdin() -> t.BinaryIO: + reader = _find_binary_reader(sys.stdin) + if reader is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdin.") + return reader + + +def get_binary_stdout() -> t.BinaryIO: + writer = _find_binary_writer(sys.stdout) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stdout.") + return writer + + +def get_binary_stderr() -> t.BinaryIO: + writer = _find_binary_writer(sys.stderr) + if writer is None: + raise RuntimeError("Was not able to determine binary stream for sys.stderr.") + return writer + + +def get_text_stdin( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdin, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True) + + +def get_text_stdout( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stdout, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True) + + +def get_text_stderr( + encoding: t.Optional[str] = None, errors: t.Optional[str] = None +) -> t.TextIO: + rv = _get_windows_console_stream(sys.stderr, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stderr, encoding, errors, force_writable=True) + + +def _wrap_io_open( + file: t.Union[str, "os.PathLike[str]", int], + mode: str, + encoding: t.Optional[str], + errors: t.Optional[str], +) -> t.IO[t.Any]: + """Handles not passing ``encoding`` and ``errors`` in binary mode.""" + if "b" in mode: + return open(file, mode) + + return open(file, mode, encoding=encoding, errors=errors) + + +def open_stream( + filename: "t.Union[str, os.PathLike[str]]", + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, +) -> t.Tuple[t.IO[t.Any], bool]: + binary = "b" in mode + filename = os.fspath(filename) + + # Standard streams first. These are simple because they ignore the + # atomic flag. Use fsdecode to handle Path("-"). + if os.fsdecode(filename) == "-": + if any(m in mode for m in ["w", "a", "x"]): + if binary: + return get_binary_stdout(), False + return get_text_stdout(encoding=encoding, errors=errors), False + if binary: + return get_binary_stdin(), False + return get_text_stdin(encoding=encoding, errors=errors), False + + # Non-atomic writes directly go out through the regular open functions. + if not atomic: + return _wrap_io_open(filename, mode, encoding, errors), True + + # Some usability stuff for atomic writes + if "a" in mode: + raise ValueError( + "Appending to an existing file is not supported, because that" + " would involve an expensive `copy`-operation to a temporary" + " file. Open the file in normal `w`-mode and copy explicitly" + " if that's what you're after." + ) + if "x" in mode: + raise ValueError("Use the `overwrite`-parameter instead.") + if "w" not in mode: + raise ValueError("Atomic writes only make sense with `w`-mode.") + + # Atomic writes are more complicated. They work by opening a file + # as a proxy in the same folder and then using the fdopen + # functionality to wrap it in a Python file. Then we wrap it in an + # atomic file that moves the file over on close. + import errno + import random + + try: + perm: t.Optional[int] = os.stat(filename).st_mode + except OSError: + perm = None + + flags = os.O_RDWR | os.O_CREAT | os.O_EXCL + + if binary: + flags |= getattr(os, "O_BINARY", 0) + + while True: + tmp_filename = os.path.join( + os.path.dirname(filename), + f".__atomic-write{random.randrange(1 << 32):08x}", + ) + try: + fd = os.open(tmp_filename, flags, 0o666 if perm is None else perm) + break + except OSError as e: + if e.errno == errno.EEXIST or ( + os.name == "nt" + and e.errno == errno.EACCES + and os.path.isdir(e.filename) + and os.access(e.filename, os.W_OK) + ): + continue + raise + + if perm is not None: + os.chmod(tmp_filename, perm) # in case perm includes bits in umask + + f = _wrap_io_open(fd, mode, encoding, errors) + af = _AtomicFile(f, tmp_filename, os.path.realpath(filename)) + return t.cast(t.IO[t.Any], af), True + + +class _AtomicFile: + def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None: + self._f = f + self._tmp_filename = tmp_filename + self._real_filename = real_filename + self.closed = False + + @property + def name(self) -> str: + return self._real_filename + + def close(self, delete: bool = False) -> None: + if self.closed: + return + self._f.close() + os.replace(self._tmp_filename, self._real_filename) + self.closed = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._f, name) + + def __enter__(self) -> "_AtomicFile": + return self + + def __exit__(self, exc_type: t.Optional[t.Type[BaseException]], *_: t.Any) -> None: + self.close(delete=exc_type is not None) + + def __repr__(self) -> str: + return repr(self._f) + + +def strip_ansi(value: str) -> str: + return _ansi_re.sub("", value) + + +def _is_jupyter_kernel_output(stream: t.IO[t.Any]) -> bool: + while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)): + stream = stream._stream + + return stream.__class__.__module__.startswith("ipykernel.") + + +def should_strip_ansi( + stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None +) -> bool: + if color is None: + if stream is None: + stream = sys.stdin + return not isatty(stream) and not _is_jupyter_kernel_output(stream) + return not color + + +# On Windows, wrap the output streams with colorama to support ANSI +# color codes. +# NOTE: double check is needed so mypy does not analyze this on Linux +if sys.platform.startswith("win") and WIN: + from ._winconsole import _get_windows_console_stream + + def _get_argv_encoding() -> str: + import locale + + return locale.getpreferredencoding() + + _ansi_stream_wrappers: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def auto_wrap_for_ansi( # noqa: F811 + stream: t.TextIO, color: t.Optional[bool] = None + ) -> t.TextIO: + """Support ANSI color and style codes on Windows by wrapping a + stream with colorama. + """ + try: + cached = _ansi_stream_wrappers.get(stream) + except Exception: + cached = None + + if cached is not None: + return cached + + import colorama + + strip = should_strip_ansi(stream, color) + ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip) + rv = t.cast(t.TextIO, ansi_wrapper.stream) + _write = rv.write + + def _safe_write(s): + try: + return _write(s) + except BaseException: + ansi_wrapper.reset_all() + raise + + rv.write = _safe_write + + try: + _ansi_stream_wrappers[stream] = rv + except Exception: + pass + + return rv + +else: + + def _get_argv_encoding() -> str: + return getattr(sys.stdin, "encoding", None) or sys.getfilesystemencoding() + + def _get_windows_console_stream( + f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] + ) -> t.Optional[t.TextIO]: + return None + + +def term_len(x: str) -> int: + return len(strip_ansi(x)) + + +def isatty(stream: t.IO[t.Any]) -> bool: + try: + return stream.isatty() + except Exception: + return False + + +def _make_cached_stream_func( + src_func: t.Callable[[], t.Optional[t.TextIO]], + wrapper_func: t.Callable[[], t.TextIO], +) -> t.Callable[[], t.Optional[t.TextIO]]: + cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary() + + def func() -> t.Optional[t.TextIO]: + stream = src_func() + + if stream is None: + return None + + try: + rv = cache.get(stream) + except Exception: + rv = None + if rv is not None: + return rv + rv = wrapper_func() + try: + cache[stream] = rv + except Exception: + pass + return rv + + return func + + +_default_text_stdin = _make_cached_stream_func(lambda: sys.stdin, get_text_stdin) +_default_text_stdout = _make_cached_stream_func(lambda: sys.stdout, get_text_stdout) +_default_text_stderr = _make_cached_stream_func(lambda: sys.stderr, get_text_stderr) + + +binary_streams: t.Mapping[str, t.Callable[[], t.BinaryIO]] = { + "stdin": get_binary_stdin, + "stdout": get_binary_stdout, + "stderr": get_binary_stderr, +} + +text_streams: t.Mapping[ + str, t.Callable[[t.Optional[str], t.Optional[str]], t.TextIO] +] = { + "stdin": get_text_stdin, + "stdout": get_text_stdout, + "stderr": get_text_stderr, +} diff --git a/venv/Lib/site-packages/click/_termui_impl.py b/venv/Lib/site-packages/click/_termui_impl.py new file mode 100644 index 0000000..f744657 --- /dev/null +++ b/venv/Lib/site-packages/click/_termui_impl.py @@ -0,0 +1,739 @@ +""" +This module contains implementations for the termui module. To keep the +import time of Click down, some infrequently used functionality is +placed in this module and only imported as needed. +""" +import contextlib +import math +import os +import sys +import time +import typing as t +from gettext import gettext as _ +from io import StringIO +from types import TracebackType + +from ._compat import _default_text_stdout +from ._compat import CYGWIN +from ._compat import get_best_encoding +from ._compat import isatty +from ._compat import open_stream +from ._compat import strip_ansi +from ._compat import term_len +from ._compat import WIN +from .exceptions import ClickException +from .utils import echo + +V = t.TypeVar("V") + +if os.name == "nt": + BEFORE_BAR = "\r" + AFTER_BAR = "\n" +else: + BEFORE_BAR = "\r\033[?25l" + AFTER_BAR = "\033[?25h\n" + + +class ProgressBar(t.Generic[V]): + def __init__( + self, + iterable: t.Optional[t.Iterable[V]], + length: t.Optional[int] = None, + fill_char: str = "#", + empty_char: str = " ", + bar_template: str = "%(bar)s", + info_sep: str = " ", + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + label: t.Optional[str] = None, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, + width: int = 30, + ) -> None: + self.fill_char = fill_char + self.empty_char = empty_char + self.bar_template = bar_template + self.info_sep = info_sep + self.show_eta = show_eta + self.show_percent = show_percent + self.show_pos = show_pos + self.item_show_func = item_show_func + self.label: str = label or "" + + if file is None: + file = _default_text_stdout() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if file is None: + file = StringIO() + + self.file = file + self.color = color + self.update_min_steps = update_min_steps + self._completed_intervals = 0 + self.width: int = width + self.autowidth: bool = width == 0 + + if length is None: + from operator import length_hint + + length = length_hint(iterable, -1) + + if length == -1: + length = None + if iterable is None: + if length is None: + raise TypeError("iterable or length is required") + iterable = t.cast(t.Iterable[V], range(length)) + self.iter: t.Iterable[V] = iter(iterable) + self.length = length + self.pos = 0 + self.avg: t.List[float] = [] + self.last_eta: float + self.start: float + self.start = self.last_eta = time.time() + self.eta_known: bool = False + self.finished: bool = False + self.max_width: t.Optional[int] = None + self.entered: bool = False + self.current_item: t.Optional[V] = None + self.is_hidden: bool = not isatty(self.file) + self._last_line: t.Optional[str] = None + + def __enter__(self) -> "ProgressBar[V]": + self.entered = True + self.render_progress() + return self + + def __exit__( + self, + exc_type: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + self.render_finish() + + def __iter__(self) -> t.Iterator[V]: + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + self.render_progress() + return self.generator() + + def __next__(self) -> V: + # Iteration is defined in terms of a generator function, + # returned by iter(self); use that to define next(). This works + # because `self.iter` is an iterable consumed by that generator, + # so it is re-entry safe. Calling `next(self.generator())` + # twice works and does "what you want". + return next(iter(self)) + + def render_finish(self) -> None: + if self.is_hidden: + return + self.file.write(AFTER_BAR) + self.file.flush() + + @property + def pct(self) -> float: + if self.finished: + return 1.0 + return min(self.pos / (float(self.length or 1) or 1), 1.0) + + @property + def time_per_iteration(self) -> float: + if not self.avg: + return 0.0 + return sum(self.avg) / float(len(self.avg)) + + @property + def eta(self) -> float: + if self.length is not None and not self.finished: + return self.time_per_iteration * (self.length - self.pos) + return 0.0 + + def format_eta(self) -> str: + if self.eta_known: + t = int(self.eta) + seconds = t % 60 + t //= 60 + minutes = t % 60 + t //= 60 + hours = t % 24 + t //= 24 + if t > 0: + return f"{t}d {hours:02}:{minutes:02}:{seconds:02}" + else: + return f"{hours:02}:{minutes:02}:{seconds:02}" + return "" + + def format_pos(self) -> str: + pos = str(self.pos) + if self.length is not None: + pos += f"/{self.length}" + return pos + + def format_pct(self) -> str: + return f"{int(self.pct * 100): 4}%"[1:] + + def format_bar(self) -> str: + if self.length is not None: + bar_length = int(self.pct * self.width) + bar = self.fill_char * bar_length + bar += self.empty_char * (self.width - bar_length) + elif self.finished: + bar = self.fill_char * self.width + else: + chars = list(self.empty_char * (self.width or 1)) + if self.time_per_iteration != 0: + chars[ + int( + (math.cos(self.pos * self.time_per_iteration) / 2.0 + 0.5) + * self.width + ) + ] = self.fill_char + bar = "".join(chars) + return bar + + def format_progress_line(self) -> str: + show_percent = self.show_percent + + info_bits = [] + if self.length is not None and show_percent is None: + show_percent = not self.show_pos + + if self.show_pos: + info_bits.append(self.format_pos()) + if show_percent: + info_bits.append(self.format_pct()) + if self.show_eta and self.eta_known and not self.finished: + info_bits.append(self.format_eta()) + if self.item_show_func is not None: + item_info = self.item_show_func(self.current_item) + if item_info is not None: + info_bits.append(item_info) + + return ( + self.bar_template + % { + "label": self.label, + "bar": self.format_bar(), + "info": self.info_sep.join(info_bits), + } + ).rstrip() + + def render_progress(self) -> None: + import shutil + + if self.is_hidden: + # Only output the label as it changes if the output is not a + # TTY. Use file=stderr if you expect to be piping stdout. + if self._last_line != self.label: + self._last_line = self.label + echo(self.label, file=self.file, color=self.color) + + return + + buf = [] + # Update width in case the terminal has been resized + if self.autowidth: + old_width = self.width + self.width = 0 + clutter_length = term_len(self.format_progress_line()) + new_width = max(0, shutil.get_terminal_size().columns - clutter_length) + if new_width < old_width: + buf.append(BEFORE_BAR) + buf.append(" " * self.max_width) # type: ignore + self.max_width = new_width + self.width = new_width + + clear_width = self.width + if self.max_width is not None: + clear_width = self.max_width + + buf.append(BEFORE_BAR) + line = self.format_progress_line() + line_len = term_len(line) + if self.max_width is None or self.max_width < line_len: + self.max_width = line_len + + buf.append(line) + buf.append(" " * (clear_width - line_len)) + line = "".join(buf) + # Render the line only if it changed. + + if line != self._last_line: + self._last_line = line + echo(line, file=self.file, color=self.color, nl=False) + self.file.flush() + + def make_step(self, n_steps: int) -> None: + self.pos += n_steps + if self.length is not None and self.pos >= self.length: + self.finished = True + + if (time.time() - self.last_eta) < 1.0: + return + + self.last_eta = time.time() + + # self.avg is a rolling list of length <= 7 of steps where steps are + # defined as time elapsed divided by the total progress through + # self.length. + if self.pos: + step = (time.time() - self.start) / self.pos + else: + step = time.time() - self.start + + self.avg = self.avg[-6:] + [step] + + self.eta_known = self.length is not None + + def update(self, n_steps: int, current_item: t.Optional[V] = None) -> None: + """Update the progress bar by advancing a specified number of + steps, and optionally set the ``current_item`` for this new + position. + + :param n_steps: Number of steps to advance. + :param current_item: Optional item to set as ``current_item`` + for the updated position. + + .. versionchanged:: 8.0 + Added the ``current_item`` optional parameter. + + .. versionchanged:: 8.0 + Only render when the number of steps meets the + ``update_min_steps`` threshold. + """ + if current_item is not None: + self.current_item = current_item + + self._completed_intervals += n_steps + + if self._completed_intervals >= self.update_min_steps: + self.make_step(self._completed_intervals) + self.render_progress() + self._completed_intervals = 0 + + def finish(self) -> None: + self.eta_known = False + self.current_item = None + self.finished = True + + def generator(self) -> t.Iterator[V]: + """Return a generator which yields the items added to the bar + during construction, and updates the progress bar *after* the + yielded block returns. + """ + # WARNING: the iterator interface for `ProgressBar` relies on + # this and only works because this is a simple generator which + # doesn't create or manage additional state. If this function + # changes, the impact should be evaluated both against + # `iter(bar)` and `next(bar)`. `next()` in particular may call + # `self.generator()` repeatedly, and this must remain safe in + # order for that interface to work. + if not self.entered: + raise RuntimeError("You need to use progress bars in a with block.") + + if self.is_hidden: + yield from self.iter + else: + for rv in self.iter: + self.current_item = rv + + # This allows show_item_func to be updated before the + # item is processed. Only trigger at the beginning of + # the update interval. + if self._completed_intervals == 0: + self.render_progress() + + yield rv + self.update(1) + + self.finish() + self.render_progress() + + +def pager(generator: t.Iterable[str], color: t.Optional[bool] = None) -> None: + """Decide what method to use for paging through text.""" + stdout = _default_text_stdout() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if stdout is None: + stdout = StringIO() + + if not isatty(sys.stdin) or not isatty(stdout): + return _nullpager(stdout, generator, color) + pager_cmd = (os.environ.get("PAGER", None) or "").strip() + if pager_cmd: + if WIN: + 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/site-packages/click/_textwrap.py b/venv/Lib/site-packages/click/_textwrap.py new file mode 100644 index 0000000..b47dcbd --- /dev/null +++ b/venv/Lib/site-packages/click/_textwrap.py @@ -0,0 +1,49 @@ +import textwrap +import typing as t +from contextlib import contextmanager + + +class TextWrapper(textwrap.TextWrapper): + def _handle_long_word( + self, + reversed_chunks: t.List[str], + cur_line: t.List[str], + cur_len: int, + width: int, + ) -> None: + space_left = max(width - cur_len, 1) + + if self.break_long_words: + last = reversed_chunks[-1] + cut = last[:space_left] + res = last[space_left:] + cur_line.append(cut) + reversed_chunks[-1] = res + elif not cur_line: + cur_line.append(reversed_chunks.pop()) + + @contextmanager + def extra_indent(self, indent: str) -> t.Iterator[None]: + old_initial_indent = self.initial_indent + old_subsequent_indent = self.subsequent_indent + self.initial_indent += indent + self.subsequent_indent += indent + + try: + yield + finally: + self.initial_indent = old_initial_indent + self.subsequent_indent = old_subsequent_indent + + def indent_only(self, text: str) -> str: + rv = [] + + for idx, line in enumerate(text.splitlines()): + indent = self.initial_indent + + if idx > 0: + indent = self.subsequent_indent + + rv.append(f"{indent}{line}") + + return "\n".join(rv) diff --git a/venv/Lib/site-packages/click/_winconsole.py b/venv/Lib/site-packages/click/_winconsole.py new file mode 100644 index 0000000..6b20df3 --- /dev/null +++ b/venv/Lib/site-packages/click/_winconsole.py @@ -0,0 +1,279 @@ +# This module is based on the excellent work by Adam Bartoš who +# provided a lot of what went into the implementation here in +# the discussion to issue1602 in the Python bug tracker. +# +# There are some general differences in regards to how this works +# compared to the original patches as we do not need to patch +# the entire interpreter but just work in our little world of +# echo and prompt. +import io +import sys +import time +import typing as t +from ctypes import byref +from ctypes import c_char +from ctypes import c_char_p +from ctypes import c_int +from ctypes import c_ssize_t +from ctypes import c_ulong +from ctypes import c_void_p +from ctypes import POINTER +from ctypes import py_object +from ctypes import Structure +from ctypes.wintypes import DWORD +from ctypes.wintypes import HANDLE +from ctypes.wintypes import LPCWSTR +from ctypes.wintypes import LPWSTR + +from ._compat import _NonClosingTextIOWrapper + +assert sys.platform == "win32" +import msvcrt # noqa: E402 +from ctypes import windll # noqa: E402 +from ctypes import WINFUNCTYPE # noqa: E402 + +c_ssize_p = POINTER(c_ssize_t) + +kernel32 = windll.kernel32 +GetStdHandle = kernel32.GetStdHandle +ReadConsoleW = kernel32.ReadConsoleW +WriteConsoleW = kernel32.WriteConsoleW +GetConsoleMode = kernel32.GetConsoleMode +GetLastError = kernel32.GetLastError +GetCommandLineW = WINFUNCTYPE(LPWSTR)(("GetCommandLineW", windll.kernel32)) +CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))( + ("CommandLineToArgvW", windll.shell32) +) +LocalFree = WINFUNCTYPE(c_void_p, c_void_p)(("LocalFree", windll.kernel32)) + +STDIN_HANDLE = GetStdHandle(-10) +STDOUT_HANDLE = GetStdHandle(-11) +STDERR_HANDLE = GetStdHandle(-12) + +PyBUF_SIMPLE = 0 +PyBUF_WRITABLE = 1 + +ERROR_SUCCESS = 0 +ERROR_NOT_ENOUGH_MEMORY = 8 +ERROR_OPERATION_ABORTED = 995 + +STDIN_FILENO = 0 +STDOUT_FILENO = 1 +STDERR_FILENO = 2 + +EOF = b"\x1a" +MAX_BYTES_WRITTEN = 32767 + +try: + from ctypes import pythonapi +except ImportError: + # On PyPy we cannot get buffers so our ability to operate here is + # severely limited. + get_buffer = None +else: + + class Py_buffer(Structure): + _fields_ = [ + ("buf", c_void_p), + ("obj", py_object), + ("len", c_ssize_t), + ("itemsize", c_ssize_t), + ("readonly", c_int), + ("ndim", c_int), + ("format", c_char_p), + ("shape", c_ssize_p), + ("strides", c_ssize_p), + ("suboffsets", c_ssize_p), + ("internal", c_void_p), + ] + + PyObject_GetBuffer = pythonapi.PyObject_GetBuffer + PyBuffer_Release = pythonapi.PyBuffer_Release + + def get_buffer(obj, writable=False): + buf = Py_buffer() + flags = PyBUF_WRITABLE if writable else PyBUF_SIMPLE + PyObject_GetBuffer(py_object(obj), byref(buf), flags) + + try: + buffer_type = c_char * buf.len + return buffer_type.from_address(buf.buf) + finally: + PyBuffer_Release(byref(buf)) + + +class _WindowsConsoleRawIOBase(io.RawIOBase): + def __init__(self, handle): + self.handle = handle + + def isatty(self): + super().isatty() + return True + + +class _WindowsConsoleReader(_WindowsConsoleRawIOBase): + def readable(self): + return True + + def readinto(self, b): + bytes_to_be_read = len(b) + if not bytes_to_be_read: + return 0 + elif bytes_to_be_read % 2: + raise ValueError( + "cannot read odd number of bytes from UTF-16-LE encoded console" + ) + + buffer = get_buffer(b, writable=True) + code_units_to_be_read = bytes_to_be_read // 2 + code_units_read = c_ulong() + + rv = ReadConsoleW( + HANDLE(self.handle), + buffer, + code_units_to_be_read, + byref(code_units_read), + None, + ) + if GetLastError() == ERROR_OPERATION_ABORTED: + # wait for KeyboardInterrupt + time.sleep(0.1) + if not rv: + raise OSError(f"Windows error: {GetLastError()}") + + if buffer[0] == EOF: + return 0 + return 2 * code_units_read.value + + +class _WindowsConsoleWriter(_WindowsConsoleRawIOBase): + def writable(self): + return True + + @staticmethod + def _get_error_message(errno): + if errno == ERROR_SUCCESS: + return "ERROR_SUCCESS" + elif errno == ERROR_NOT_ENOUGH_MEMORY: + return "ERROR_NOT_ENOUGH_MEMORY" + return f"Windows error {errno}" + + def write(self, b): + bytes_to_be_written = len(b) + buf = get_buffer(b) + code_units_to_be_written = min(bytes_to_be_written, MAX_BYTES_WRITTEN) // 2 + code_units_written = c_ulong() + + WriteConsoleW( + HANDLE(self.handle), + buf, + code_units_to_be_written, + byref(code_units_written), + None, + ) + bytes_written = 2 * code_units_written.value + + if bytes_written == 0 and bytes_to_be_written > 0: + raise OSError(self._get_error_message(GetLastError())) + return bytes_written + + +class ConsoleStream: + def __init__(self, text_stream: t.TextIO, byte_stream: t.BinaryIO) -> None: + self._text_stream = text_stream + self.buffer = byte_stream + + @property + def name(self) -> str: + return self.buffer.name + + def write(self, x: t.AnyStr) -> int: + if isinstance(x, str): + return self._text_stream.write(x) + try: + self.flush() + except Exception: + pass + return self.buffer.write(x) + + def writelines(self, lines: t.Iterable[t.AnyStr]) -> None: + for line in lines: + self.write(line) + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._text_stream, name) + + def isatty(self) -> bool: + return self.buffer.isatty() + + def __repr__(self): + return f"" + + +def _get_text_stdin(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedReader(_WindowsConsoleReader(STDIN_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +def _get_text_stdout(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDOUT_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +def _get_text_stderr(buffer_stream: t.BinaryIO) -> t.TextIO: + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDERR_HANDLE)), + "utf-16-le", + "strict", + line_buffering=True, + ) + return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream)) + + +_stream_factories: t.Mapping[int, t.Callable[[t.BinaryIO], t.TextIO]] = { + 0: _get_text_stdin, + 1: _get_text_stdout, + 2: _get_text_stderr, +} + + +def _is_console(f: t.TextIO) -> bool: + if not hasattr(f, "fileno"): + return False + + try: + fileno = f.fileno() + except (OSError, io.UnsupportedOperation): + return False + + handle = msvcrt.get_osfhandle(fileno) + return bool(GetConsoleMode(handle, byref(DWORD()))) + + +def _get_windows_console_stream( + f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str] +) -> t.Optional[t.TextIO]: + if ( + get_buffer is not None + and encoding in {"utf-16-le", None} + and errors in {"strict", None} + and _is_console(f) + ): + func = _stream_factories.get(f.fileno()) + if func is not None: + b = getattr(f, "buffer", None) + + if b is None: + return None + + return func(b) diff --git a/venv/Lib/site-packages/click/core.py b/venv/Lib/site-packages/click/core.py new file mode 100644 index 0000000..cc65e89 --- /dev/null +++ b/venv/Lib/site-packages/click/core.py @@ -0,0 +1,3042 @@ +import enum +import errno +import inspect +import os +import sys +import typing as t +from collections import abc +from contextlib import contextmanager +from contextlib import ExitStack +from functools import update_wrapper +from gettext import gettext as _ +from gettext import ngettext +from itertools import repeat +from types import TracebackType + +from . import types +from .exceptions import Abort +from .exceptions import BadParameter +from .exceptions import ClickException +from .exceptions import Exit +from .exceptions import MissingParameter +from .exceptions import UsageError +from .formatting import HelpFormatter +from .formatting import join_options +from .globals import pop_context +from .globals import push_context +from .parser import _flag_needs_value +from .parser import OptionParser +from .parser import split_opt +from .termui import confirm +from .termui import prompt +from .termui import style +from .utils import _detect_program_name +from .utils import _expand_args +from .utils import echo +from .utils import make_default_short_help +from .utils import make_str +from .utils import PacifyFlushWrapper + +if t.TYPE_CHECKING: + import typing_extensions as te + from .shell_completion import CompletionItem + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +V = t.TypeVar("V") + + +def _complete_visible_commands( + ctx: "Context", incomplete: str +) -> t.Iterator[t.Tuple[str, "Command"]]: + """List all the subcommands of a group that start with the + incomplete value and aren't hidden. + + :param ctx: Invocation context for the group. + :param incomplete: Value being completed. May be empty. + """ + multi = t.cast(MultiCommand, ctx.command) + + for name in multi.list_commands(ctx): + if name.startswith(incomplete): + command = multi.get_command(ctx, name) + + if command is not None and not command.hidden: + yield name, command + + +def _check_multicommand( + base_command: "MultiCommand", cmd_name: str, cmd: "Command", register: bool = False +) -> None: + if not base_command.chain or not isinstance(cmd, MultiCommand): + return + if register: + hint = ( + "It is not possible to add multi commands as children to" + " another multi command that is in chain mode." + ) + else: + hint = ( + "Found a multi command as subcommand to a multi command" + " that is in chain mode. This is not supported." + ) + raise RuntimeError( + f"{hint}. Command {base_command.name!r} is set to chain and" + f" {cmd_name!r} was added as a subcommand but it in itself is a" + f" multi command. ({cmd_name!r} is a {type(cmd).__name__}" + f" within a chained {type(base_command).__name__} named" + f" {base_command.name!r})." + ) + + +def batch(iterable: t.Iterable[V], batch_size: int) -> t.List[t.Tuple[V, ...]]: + return list(zip(*repeat(iter(iterable), batch_size))) + + +@contextmanager +def augment_usage_errors( + ctx: "Context", param: t.Optional["Parameter"] = None +) -> t.Iterator[None]: + """Context manager that attaches extra information to exceptions.""" + try: + yield + except BadParameter as e: + if e.ctx is None: + e.ctx = ctx + if param is not None and e.param is None: + e.param = param + raise + except UsageError as e: + if e.ctx is None: + e.ctx = ctx + raise + + +def iter_params_for_processing( + invocation_order: t.Sequence["Parameter"], + declaration_order: t.Sequence["Parameter"], +) -> t.List["Parameter"]: + """Given a sequence of parameters in the order as should be considered + for processing and an iterable of parameters that exist, this returns + a list in the correct order as they should be processed. + """ + + def sort_key(item: "Parameter") -> t.Tuple[bool, float]: + try: + idx: float = invocation_order.index(item) + except ValueError: + idx = float("inf") + + return not item.is_eager, idx + + return sorted(declaration_order, key=sort_key) + + +class ParameterSource(enum.Enum): + """This is an :class:`~enum.Enum` that indicates the source of a + parameter's value. + + Use :meth:`click.Context.get_parameter_source` to get the + source for a parameter by name. + + .. versionchanged:: 8.0 + Use :class:`~enum.Enum` and drop the ``validate`` method. + + .. versionchanged:: 8.0 + Added the ``PROMPT`` value. + """ + + COMMANDLINE = enum.auto() + """The value was provided by the command line args.""" + ENVIRONMENT = enum.auto() + """The value was provided with an environment variable.""" + DEFAULT = enum.auto() + """Used the default specified by the parameter.""" + DEFAULT_MAP = enum.auto() + """Used a default provided by :attr:`Context.default_map`.""" + PROMPT = enum.auto() + """Used a prompt to confirm a default or provide a value.""" + + +class Context: + """The context is a special internal object that holds state relevant + for the script execution at every single level. It's normally invisible + to commands unless they opt-in to getting access to it. + + The context is useful as it can pass internal objects around and can + control special execution features such as reading data from + environment variables. + + A context can be used as context manager in which case it will call + :meth:`close` on teardown. + + :param command: the command class for this context. + :param parent: the parent context. + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it is usually + the name of the script, for commands below it it's + the name of the script. + :param obj: an arbitrary object of user data. + :param auto_envvar_prefix: the prefix to use for automatic environment + variables. If this is `None` then reading + from environment variables is disabled. This + does not affect manually set environment + variables which are always read. + :param default_map: a dictionary (like object) with default values + for parameters. + :param terminal_width: the width of the terminal. The default is + inherit from parent context. If no context + defines the terminal width then auto + detection will be applied. + :param max_content_width: the maximum width for content rendered by + Click (this currently only affects help + pages). This defaults to 80 characters if + not overridden. In other words: even if the + terminal is larger than that, Click will not + format things wider than 80 characters by + default. In addition to that, formatters might + add some safety mapping on the right. + :param resilient_parsing: if this flag is enabled then Click will + parse without any interactivity or callback + invocation. Default values will also be + ignored. This is useful for implementing + things such as completion support. + :param allow_extra_args: if this is set to `True` then extra arguments + at the end will not raise an error and will be + kept on the context. The default is to inherit + from the command. + :param allow_interspersed_args: if this is set to `False` then options + and arguments cannot be mixed. The + default is to inherit from the command. + :param ignore_unknown_options: instructs click to ignore options it does + not know and keeps them for later + processing. + :param help_option_names: optionally a list of strings that define how + the default help parameter is named. The + default is ``['--help']``. + :param token_normalize_func: an optional function that is used to + normalize tokens (options, choices, + etc.). This for instance can be used to + implement case insensitive behavior. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are used in texts that Click prints which is by + default not the case. This for instance would affect + help output. + :param show_default: Show the default value for commands. If this + value is not set, it defaults to the value from the parent + context. ``Command.show_default`` overrides this default for the + specific command. + + .. versionchanged:: 8.1 + The ``show_default`` parameter is overridden by + ``Command.show_default``, instead of the other way around. + + .. versionchanged:: 8.0 + The ``show_default`` parameter defaults to the value from the + parent context. + + .. versionchanged:: 7.1 + Added the ``show_default`` parameter. + + .. versionchanged:: 4.0 + Added the ``color``, ``ignore_unknown_options``, and + ``max_content_width`` parameters. + + .. versionchanged:: 3.0 + Added the ``allow_extra_args`` and ``allow_interspersed_args`` + parameters. + + .. versionchanged:: 2.0 + Added the ``resilient_parsing``, ``help_option_names``, and + ``token_normalize_func`` parameters. + """ + + #: The formatter class to create with :meth:`make_formatter`. + #: + #: .. versionadded:: 8.0 + formatter_class: t.Type["HelpFormatter"] = HelpFormatter + + def __init__( + self, + command: "Command", + parent: t.Optional["Context"] = None, + info_name: t.Optional[str] = None, + obj: t.Optional[t.Any] = None, + auto_envvar_prefix: t.Optional[str] = None, + default_map: t.Optional[t.MutableMapping[str, t.Any]] = None, + terminal_width: t.Optional[int] = None, + max_content_width: t.Optional[int] = None, + resilient_parsing: bool = False, + allow_extra_args: t.Optional[bool] = None, + allow_interspersed_args: t.Optional[bool] = None, + ignore_unknown_options: t.Optional[bool] = None, + help_option_names: t.Optional[t.List[str]] = None, + token_normalize_func: t.Optional[t.Callable[[str], str]] = None, + color: t.Optional[bool] = None, + show_default: t.Optional[bool] = None, + ) -> None: + #: the parent context or `None` if none exists. + self.parent = parent + #: the :class:`Command` for this context. + self.command = command + #: the descriptive information name + self.info_name = info_name + #: Map of parameter names to their parsed values. Parameters + #: with ``expose_value=False`` are not stored. + self.params: t.Dict[str, t.Any] = {} + #: the leftover arguments. + self.args: t.List[str] = [] + #: protected arguments. These are arguments that are prepended + #: to `args` when certain parsing scenarios are encountered but + #: must be never propagated to another arguments. This is used + #: to implement nested parsing. + self.protected_args: t.List[str] = [] + #: the collected prefixes of the command's options. + self._opt_prefixes: t.Set[str] = set(parent._opt_prefixes) if parent else set() + + if obj is None and parent is not None: + obj = parent.obj + + #: the user object stored. + self.obj: t.Any = obj + self._meta: t.Dict[str, t.Any] = getattr(parent, "meta", {}) + + #: A dictionary (-like object) with defaults for parameters. + if ( + default_map is None + and info_name is not None + and parent is not None + and parent.default_map is not None + ): + default_map = parent.default_map.get(info_name) + + self.default_map: t.Optional[t.MutableMapping[str, t.Any]] = default_map + + #: This flag indicates if a subcommand is going to be executed. A + #: group callback can use this information to figure out if it's + #: being executed directly or because the execution flow passes + #: onwards to a subcommand. By default it's None, but it can be + #: the name of the subcommand to execute. + #: + #: If chaining is enabled this will be set to ``'*'`` in case + #: any commands are executed. It is however not possible to + #: figure out which ones. If you require this knowledge you + #: should use a :func:`result_callback`. + self.invoked_subcommand: t.Optional[str] = None + + if terminal_width is None and parent is not None: + terminal_width = parent.terminal_width + + #: The width of the terminal (None is autodetection). + self.terminal_width: t.Optional[int] = terminal_width + + if max_content_width is None and parent is not None: + max_content_width = parent.max_content_width + + #: The maximum width of formatted content (None implies a sensible + #: default which is 80 for most things). + self.max_content_width: t.Optional[int] = max_content_width + + if allow_extra_args is None: + allow_extra_args = command.allow_extra_args + + #: Indicates if the context allows extra args or if it should + #: fail on parsing. + #: + #: .. versionadded:: 3.0 + self.allow_extra_args = allow_extra_args + + if allow_interspersed_args is None: + allow_interspersed_args = command.allow_interspersed_args + + #: Indicates if the context allows mixing of arguments and + #: options or not. + #: + #: .. versionadded:: 3.0 + self.allow_interspersed_args: bool = allow_interspersed_args + + if ignore_unknown_options is None: + ignore_unknown_options = command.ignore_unknown_options + + #: Instructs click to ignore options that a command does not + #: understand and will store it on the context for later + #: processing. This is primarily useful for situations where you + #: want to call into external programs. Generally this pattern is + #: strongly discouraged because it's not possibly to losslessly + #: forward all arguments. + #: + #: .. versionadded:: 4.0 + self.ignore_unknown_options: bool = ignore_unknown_options + + if help_option_names is None: + if parent is not None: + help_option_names = parent.help_option_names + else: + help_option_names = ["--help"] + + #: The names for the help options. + self.help_option_names: t.List[str] = help_option_names + + if token_normalize_func is None and parent is not None: + token_normalize_func = parent.token_normalize_func + + #: An optional normalization function for tokens. This is + #: options, choices, commands etc. + self.token_normalize_func: t.Optional[ + t.Callable[[str], str] + ] = token_normalize_func + + #: Indicates if resilient parsing is enabled. In that case Click + #: will do its best to not cause any failures and default values + #: will be ignored. Useful for completion. + self.resilient_parsing: bool = resilient_parsing + + # If there is no envvar prefix yet, but the parent has one and + # the command on this level has a name, we can expand the envvar + # prefix automatically. + if auto_envvar_prefix is None: + if ( + parent is not None + and parent.auto_envvar_prefix is not None + and self.info_name is not None + ): + auto_envvar_prefix = ( + f"{parent.auto_envvar_prefix}_{self.info_name.upper()}" + ) + else: + auto_envvar_prefix = auto_envvar_prefix.upper() + + if auto_envvar_prefix is not None: + auto_envvar_prefix = auto_envvar_prefix.replace("-", "_") + + self.auto_envvar_prefix: t.Optional[str] = auto_envvar_prefix + + if color is None and parent is not None: + color = parent.color + + #: Controls if styling output is wanted or not. + self.color: t.Optional[bool] = color + + if show_default is None and parent is not None: + show_default = parent.show_default + + #: Show option default values when formatting help text. + self.show_default: t.Optional[bool] = show_default + + self._close_callbacks: t.List[t.Callable[[], t.Any]] = [] + self._depth = 0 + self._parameter_source: t.Dict[str, ParameterSource] = {} + self._exit_stack = ExitStack() + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire CLI + structure. + + .. code-block:: python + + with Context(cli) as ctx: + info = ctx.to_info_dict() + + .. versionadded:: 8.0 + """ + return { + "command": self.command.to_info_dict(self), + "info_name": self.info_name, + "allow_extra_args": self.allow_extra_args, + "allow_interspersed_args": self.allow_interspersed_args, + "ignore_unknown_options": self.ignore_unknown_options, + "auto_envvar_prefix": self.auto_envvar_prefix, + } + + def __enter__(self) -> "Context": + self._depth += 1 + push_context(self) + return self + + def __exit__( + self, + exc_type: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + self._depth -= 1 + if self._depth == 0: + self.close() + pop_context() + + @contextmanager + def scope(self, cleanup: bool = True) -> t.Iterator["Context"]: + """This helper method can be used with the context object to promote + it to the current thread local (see :func:`get_current_context`). + The default behavior of this is to invoke the cleanup functions which + can be disabled by setting `cleanup` to `False`. The cleanup + functions are typically used for things such as closing file handles. + + If the cleanup is intended the context object can also be directly + used as a context manager. + + Example usage:: + + with ctx.scope(): + assert get_current_context() is ctx + + This is equivalent:: + + with ctx: + assert get_current_context() is ctx + + .. versionadded:: 5.0 + + :param cleanup: controls if the cleanup functions should be run or + not. The default is to run these functions. In + some situations the context only wants to be + temporarily pushed in which case this can be disabled. + Nested pushes automatically defer the cleanup. + """ + if not cleanup: + self._depth += 1 + try: + with self as rv: + yield rv + finally: + if not cleanup: + self._depth -= 1 + + @property + def meta(self) -> t.Dict[str, t.Any]: + """This is a dictionary which is shared with all the contexts + that are nested. It exists so that click utilities can store some + state here if they need to. It is however the responsibility of + that code to manage this dictionary well. + + The keys are supposed to be unique dotted strings. For instance + module paths are a good choice for it. What is stored in there is + irrelevant for the operation of click. However what is important is + that code that places data here adheres to the general semantics of + the system. + + Example usage:: + + LANG_KEY = f'{__name__}.lang' + + def set_language(value): + ctx = get_current_context() + ctx.meta[LANG_KEY] = value + + def get_language(): + return get_current_context().meta.get(LANG_KEY, 'en_US') + + .. versionadded:: 5.0 + """ + return self._meta + + def make_formatter(self) -> HelpFormatter: + """Creates the :class:`~click.HelpFormatter` for the help and + usage output. + + To quickly customize the formatter class used without overriding + this method, set the :attr:`formatter_class` attribute. + + .. versionchanged:: 8.0 + Added the :attr:`formatter_class` attribute. + """ + return self.formatter_class( + width=self.terminal_width, max_width=self.max_content_width + ) + + def with_resource(self, context_manager: t.ContextManager[V]) -> V: + """Register a resource as if it were used in a ``with`` + statement. The resource will be cleaned up when the context is + popped. + + Uses :meth:`contextlib.ExitStack.enter_context`. It calls the + resource's ``__enter__()`` method and returns the result. When + the context is popped, it closes the stack, which calls the + resource's ``__exit__()`` method. + + To register a cleanup function for something that isn't a + context manager, use :meth:`call_on_close`. Or use something + from :mod:`contextlib` to turn it into a context manager first. + + .. code-block:: python + + @click.group() + @click.option("--name") + @click.pass_context + def cli(ctx): + ctx.obj = ctx.with_resource(connect_db(name)) + + :param context_manager: The context manager to enter. + :return: Whatever ``context_manager.__enter__()`` returns. + + .. versionadded:: 8.0 + """ + return self._exit_stack.enter_context(context_manager) + + def call_on_close(self, f: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]: + """Register a function to be called when the context tears down. + + This can be used to close resources opened during the script + execution. Resources that support Python's context manager + protocol which would be used in a ``with`` statement should be + registered with :meth:`with_resource` instead. + + :param f: The function to execute on teardown. + """ + return self._exit_stack.callback(f) + + def close(self) -> None: + """Invoke all close callbacks registered with + :meth:`call_on_close`, and exit all context managers entered + with :meth:`with_resource`. + """ + self._exit_stack.close() + # In case the context is reused, create a new exit stack. + self._exit_stack = ExitStack() + + @property + def command_path(self) -> str: + """The computed command path. This is used for the ``usage`` + information on the help page. It's automatically created by + combining the info names of the chain of contexts to the root. + """ + rv = "" + if self.info_name is not None: + rv = self.info_name + if self.parent is not None: + parent_command_path = [self.parent.command_path] + + if isinstance(self.parent.command, Command): + for param in self.parent.command.get_params(self): + parent_command_path.extend(param.get_usage_pieces(self)) + + rv = f"{' '.join(parent_command_path)} {rv}" + return rv.lstrip() + + def find_root(self) -> "Context": + """Finds the outermost context.""" + node = self + while node.parent is not None: + node = node.parent + return node + + def find_object(self, object_type: t.Type[V]) -> t.Optional[V]: + """Finds the closest object of a given type.""" + node: t.Optional["Context"] = self + + while node is not None: + if isinstance(node.obj, object_type): + return node.obj + + node = node.parent + + return None + + def ensure_object(self, object_type: t.Type[V]) -> V: + """Like :meth:`find_object` but sets the innermost object to a + new instance of `object_type` if it does not exist. + """ + rv = self.find_object(object_type) + if rv is None: + self.obj = rv = object_type() + return rv + + @t.overload + def lookup_default( + self, name: str, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def lookup_default( + self, name: str, call: "te.Literal[False]" = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def lookup_default(self, name: str, call: bool = True) -> t.Optional[t.Any]: + """Get the default for a parameter from :attr:`default_map`. + + :param name: Name of the parameter. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + if self.default_map is not None: + value = self.default_map.get(name) + + if call and callable(value): + return value() + + return value + + return None + + def fail(self, message: str) -> "te.NoReturn": + """Aborts the execution of the program with a specific error + message. + + :param message: the error message to fail with. + """ + raise UsageError(message, self) + + def abort(self) -> "te.NoReturn": + """Aborts the script.""" + raise Abort() + + def exit(self, code: int = 0) -> "te.NoReturn": + """Exits the application with a given exit code.""" + raise Exit(code) + + def get_usage(self) -> str: + """Helper method to get formatted usage string for the current + context and command. + """ + return self.command.get_usage(self) + + def get_help(self) -> str: + """Helper method to get formatted help page for the current + context and command. + """ + return self.command.get_help(self) + + def _make_sub_context(self, command: "Command") -> "Context": + """Create a new context of the same type as this context, but + for a new command. + + :meta private: + """ + return type(self)(command, info_name=command.name, parent=self) + + @t.overload + def invoke( + __self, # noqa: B902 + __callback: "t.Callable[..., V]", + *args: t.Any, + **kwargs: t.Any, + ) -> V: + ... + + @t.overload + def invoke( + __self, # noqa: B902 + __callback: "Command", + *args: t.Any, + **kwargs: t.Any, + ) -> t.Any: + ... + + def invoke( + __self, # noqa: B902 + __callback: t.Union["Command", "t.Callable[..., V]"], + *args: t.Any, + **kwargs: t.Any, + ) -> t.Union[t.Any, V]: + """Invokes a command callback in exactly the way it expects. There + are two ways to invoke this method: + + 1. the first argument can be a callback and all other arguments and + keyword arguments are forwarded directly to the function. + 2. the first argument is a click command object. In that case all + arguments are forwarded as well but proper click parameters + (options and click arguments) must be keyword arguments and Click + will fill in defaults. + + Note that before Click 3.2 keyword arguments were not properly filled + in against the intention of this code and no context was created. For + more information about this change and why it was done in a bugfix + release see :ref:`upgrade-to-3.2`. + + .. versionchanged:: 8.0 + All ``kwargs`` are tracked in :attr:`params` so they will be + passed if :meth:`forward` is called at multiple levels. + """ + if isinstance(__callback, Command): + other_cmd = __callback + + if other_cmd.callback is None: + raise TypeError( + "The given command does not have a callback that can be invoked." + ) + else: + __callback = t.cast("t.Callable[..., V]", other_cmd.callback) + + ctx = __self._make_sub_context(other_cmd) + + for param in other_cmd.params: + if param.name not in kwargs and param.expose_value: + kwargs[param.name] = param.type_cast_value( # type: ignore + ctx, param.get_default(ctx) + ) + + # Track all kwargs as params, so that forward() will pass + # them on in subsequent calls. + ctx.params.update(kwargs) + else: + ctx = __self + + with augment_usage_errors(__self): + with ctx: + return __callback(*args, **kwargs) + + def forward( + __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any # 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.MutableMapping[str, t.Any]] = None, + ) -> None: + #: the name the command thinks it has. Upon registering a command + #: on a :class:`Group` the group will default the command name + #: with this information. You should instead use the + #: :class:`Context`\'s :attr:`~Context.info_name` attribute. + self.name = name + + if context_settings is None: + context_settings = {} + + #: an optional dictionary with defaults passed to the context. + self.context_settings: t.MutableMapping[str, t.Any] = context_settings + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. This traverses the entire structure + below this command. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + :param ctx: A :class:`Context` representing this command. + + .. versionadded:: 8.0 + """ + return {"name": self.name} + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.name}>" + + def get_usage(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get usage") + + def get_help(self, ctx: Context) -> str: + raise NotImplementedError("Base commands cannot get help") + + def make_context( + self, + info_name: t.Optional[str], + args: t.List[str], + parent: t.Optional[Context] = None, + **extra: t.Any, + ) -> Context: + """This function when given an info name and arguments will kick + off the parsing and create a new :class:`Context`. It does not + invoke the actual command callback though. + + To quickly customize the context class used without overriding + this method, set the :attr:`context_class` attribute. + + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it's usually + the name of the script, for commands below it's + the name of the command. + :param args: the arguments to parse as list of strings. + :param parent: the parent context if available. + :param extra: extra keyword arguments forwarded to the context + constructor. + + .. versionchanged:: 8.0 + Added the :attr:`context_class` attribute. + """ + for key, value in self.context_settings.items(): + if key not in extra: + extra[key] = value + + ctx = self.context_class( + self, 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 invocable by default") + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of chained multi-commands. + + Any command could be part of a chained multi-command, so sibling + commands are valid at any point during command completion. Other + command classes will return more completions. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + while ctx.parent is not None: + ctx = ctx.parent + + if isinstance(ctx.command, MultiCommand) and ctx.command.chain: + results.extend( + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + if name not in ctx.protected_args + ) + + return results + + @t.overload + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: "te.Literal[True]" = True, + **extra: t.Any, + ) -> "te.NoReturn": + ... + + @t.overload + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: bool = ..., + **extra: t.Any, + ) -> t.Any: + ... + + def main( + self, + args: t.Optional[t.Sequence[str]] = None, + prog_name: t.Optional[str] = None, + complete_var: t.Optional[str] = None, + standalone_mode: bool = True, + windows_expand_args: bool = True, + **extra: t.Any, + ) -> t.Any: + """This is the way to invoke a script with all the bells and + whistles as a command line application. This will always terminate + the application after a call. If this is not wanted, ``SystemExit`` + needs to be caught. + + This method is also available by directly calling the instance of + a :class:`Command`. + + :param args: the arguments that should be used for parsing. If not + provided, ``sys.argv[1:]`` is used. + :param prog_name: the program name that should be used. By default + the program name is constructed by taking the file + name from ``sys.argv[0]``. + :param complete_var: the environment variable that controls the + bash completion support. The default is + ``"__COMPLETE"`` with prog_name in + uppercase. + :param standalone_mode: the default behavior is to invoke the script + in standalone mode. Click will then + handle exceptions and convert them into + error messages and the function will never + return but shut down the interpreter. If + this is set to `False` they will be + propagated to the caller and the return + value of this function is the return value + of :meth:`invoke`. + :param windows_expand_args: Expand glob patterns, user dir, and + env vars in command line args on Windows. + :param extra: extra keyword arguments are forwarded to the context + constructor. See :class:`Context` for more information. + + .. versionchanged:: 8.0.1 + Added the ``windows_expand_args`` parameter to allow + disabling command line arg expansion on Windows. + + .. versionchanged:: 8.0 + When taking arguments from ``sys.argv`` on Windows, glob + patterns, user dir, and env vars are expanded. + + .. versionchanged:: 3.0 + Added the ``standalone_mode`` parameter. + """ + if args is None: + args = sys.argv[1:] + + if os.name == "nt" and windows_expand_args: + args = _expand_args(args) + else: + args = list(args) + + if prog_name is None: + prog_name = _detect_program_name() + + # Process shell completion requests and exit early. + self._main_shell_completion(extra, prog_name, complete_var) + + try: + try: + with self.make_context(prog_name, args, **extra) as ctx: + rv = self.invoke(ctx) + if not standalone_mode: + return rv + # it's not safe to `ctx.exit(rv)` here! + # note that `rv` may actually contain data like "1" which + # has obvious effects + # more subtle case: `rv=[None, None]` can come out of + # chained commands which all returned `None` -- so it's not + # even always obvious that `rv` indicates success/failure + # by its truthiness/falsiness + ctx.exit() + except (EOFError, KeyboardInterrupt) as e: + echo(file=sys.stderr) + raise Abort() from e + except ClickException as e: + if not standalone_mode: + raise + e.show() + sys.exit(e.exit_code) + except OSError as e: + if e.errno == errno.EPIPE: + sys.stdout = t.cast(t.TextIO, PacifyFlushWrapper(sys.stdout)) + sys.stderr = t.cast(t.TextIO, PacifyFlushWrapper(sys.stderr)) + sys.exit(1) + else: + raise + except Exit as e: + if standalone_mode: + sys.exit(e.exit_code) + else: + # in non-standalone mode, return the exit code + # note that this is only reached if `self.invoke` above raises + # an Exit explicitly -- thus bypassing the check there which + # would return its result + # the results of non-standalone execution may therefore be + # somewhat ambiguous: if there are codepaths which lead to + # `ctx.exit(1)` and to `return 1`, the caller won't be able to + # tell the difference between the two + return e.exit_code + except Abort: + if not standalone_mode: + raise + echo(_("Aborted!"), file=sys.stderr) + sys.exit(1) + + def _main_shell_completion( + self, + ctx_args: t.MutableMapping[str, t.Any], + prog_name: str, + complete_var: t.Optional[str] = None, + ) -> None: + """Check if the shell is asking for tab completion, process + that, then exit early. Called from :meth:`main` before the + program is invoked. + + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. Defaults to + ``_{PROG_NAME}_COMPLETE``. + + .. versionchanged:: 8.2.0 + Dots (``.``) in ``prog_name`` are replaced with underscores (``_``). + """ + if complete_var is None: + complete_name = prog_name.replace("-", "_").replace(".", "_") + complete_var = f"_{complete_name}_COMPLETE".upper() + + instruction = os.environ.get(complete_var) + + if not instruction: + return + + from .shell_completion import shell_complete + + rv = shell_complete(self, ctx_args, prog_name, complete_var, instruction) + sys.exit(rv) + + def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + """Alias for :meth:`main`.""" + return self.main(*args, **kwargs) + + +class Command(BaseCommand): + """Commands are the basic building block of command line interfaces in + Click. A basic command handles command line parsing and might dispatch + more parsing to commands nested below it. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + :param callback: the callback to invoke. This is optional. + :param params: the parameters to register with this command. This can + be either :class:`Option` or :class:`Argument` objects. + :param help: the help string to use for this command. + :param epilog: like the help string but it's printed at the end of the + help page after everything else. + :param short_help: the short help to use for this command. This is + shown on the command listing of the parent command. + :param add_help_option: by default each command registers a ``--help`` + option. This can be disabled by this parameter. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is disabled by default. + If enabled this will add ``--help`` as argument + if no arguments are passed + :param hidden: hide this command from help outputs. + + :param deprecated: issues a message indicating that + the command is deprecated. + + .. versionchanged:: 8.1 + ``help``, ``epilog``, and ``short_help`` are stored unprocessed, + all formatting is done when outputting help text, not at init, + and is done even if not using the ``@command`` decorator. + + .. versionchanged:: 8.0 + Added a ``repr`` showing the command name. + + .. versionchanged:: 7.1 + Added the ``no_args_is_help`` parameter. + + .. versionchanged:: 2.0 + Added the ``context_settings`` parameter. + """ + + def __init__( + self, + name: t.Optional[str], + context_settings: t.Optional[t.MutableMapping[str, t.Any]] = None, + callback: t.Optional[t.Callable[..., t.Any]] = None, + params: t.Optional[t.List["Parameter"]] = None, + help: t.Optional[str] = None, + epilog: t.Optional[str] = None, + short_help: t.Optional[str] = None, + options_metavar: t.Optional[str] = "[OPTIONS]", + add_help_option: bool = True, + no_args_is_help: bool = False, + hidden: bool = False, + deprecated: bool = False, + ) -> None: + super().__init__(name, context_settings) + #: the callback to execute when the command fires. This might be + #: `None` in which case nothing happens. + self.callback = callback + #: the list of parameters for this command in the order they + #: should show up in the help page and execute. Eager parameters + #: will automatically be handled before non eager ones. + self.params: t.List["Parameter"] = params or [] + self.help = help + self.epilog = epilog + self.options_metavar = options_metavar + self.short_help = short_help + self.add_help_option = add_help_option + self.no_args_is_help = no_args_is_help + self.hidden = hidden + self.deprecated = deprecated + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + info_dict.update( + params=[param.to_info_dict() for param in self.get_params(ctx)], + help=self.help, + epilog=self.epilog, + short_help=self.short_help, + hidden=self.hidden, + deprecated=self.deprecated, + ) + return info_dict + + def get_usage(self, ctx: Context) -> str: + """Formats the usage line into a string and returns it. + + Calls :meth:`format_usage` internally. + """ + formatter = ctx.make_formatter() + self.format_usage(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_params(self, ctx: Context) -> t.List["Parameter"]: + rv = self.params + help_option = self.get_help_option(ctx) + + if help_option is not None: + rv = [*rv, help_option] + + return rv + + def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the usage line into the formatter. + + This is a low-level method called by :meth:`get_usage`. + """ + pieces = self.collect_usage_pieces(ctx) + formatter.write_usage(ctx.command_path, " ".join(pieces)) + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + """Returns all the pieces that go into the usage line and returns + it as a list of strings. + """ + rv = [self.options_metavar] if self.options_metavar else [] + + for param in self.get_params(ctx): + rv.extend(param.get_usage_pieces(ctx)) + + return rv + + def get_help_option_names(self, ctx: Context) -> t.List[str]: + """Returns the names for the help option.""" + all_names = set(ctx.help_option_names) + for param in self.params: + all_names.difference_update(param.opts) + all_names.difference_update(param.secondary_opts) + return list(all_names) + + def get_help_option(self, ctx: Context) -> t.Optional["Option"]: + """Returns the help option object.""" + help_options = self.get_help_option_names(ctx) + + if not help_options or not self.add_help_option: + return None + + def show_help(ctx: Context, param: "Parameter", value: str) -> None: + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + return Option( + help_options, + is_flag=True, + is_eager=True, + expose_value=False, + callback=show_help, + help=_("Show this message and exit."), + ) + + def make_parser(self, ctx: Context) -> OptionParser: + """Creates the underlying option parser for this command.""" + parser = OptionParser(ctx) + for param in self.get_params(ctx): + param.add_to_parser(parser, ctx) + return parser + + def get_help(self, ctx: Context) -> str: + """Formats the help into a string and returns it. + + Calls :meth:`format_help` internally. + """ + formatter = ctx.make_formatter() + self.format_help(ctx, formatter) + return formatter.getvalue().rstrip("\n") + + def get_short_help_str(self, limit: int = 45) -> str: + """Gets short help for the command or makes it by shortening the + long help string. + """ + if self.short_help: + text = inspect.cleandoc(self.short_help) + elif self.help: + text = make_default_short_help(self.help, limit) + else: + text = "" + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + return text.strip() + + def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help into the formatter if it exists. + + This is a low-level method called by :meth:`get_help`. + + This calls the following methods: + + - :meth:`format_usage` + - :meth:`format_help_text` + - :meth:`format_options` + - :meth:`format_epilog` + """ + self.format_usage(ctx, formatter) + self.format_help_text(ctx, formatter) + self.format_options(ctx, formatter) + self.format_epilog(ctx, formatter) + + def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the help text to the formatter if it exists.""" + if self.help is not None: + # truncate the help text to the first form feed + text = inspect.cleandoc(self.help).partition("\f")[0] + else: + text = "" + + if self.deprecated: + text = _("(Deprecated) {text}").format(text=text) + + if text: + formatter.write_paragraph() + + with formatter.indentation(): + formatter.write_text(text) + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes all the options into the formatter if they exist.""" + opts = [] + for param in self.get_params(ctx): + rv = param.get_help_record(ctx) + if rv is not None: + opts.append(rv) + + if opts: + with formatter.section(_("Options")): + formatter.write_dl(opts) + + def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None: + """Writes the epilog into the formatter if it exists.""" + if self.epilog: + epilog = inspect.cleandoc(self.epilog) + formatter.write_paragraph() + + with formatter.indentation(): + formatter.write_text(epilog) + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + if not args and self.no_args_is_help and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + parser = self.make_parser(ctx) + opts, args, param_order = parser.parse_args(args=args) + + for param in iter_params_for_processing(param_order, self.get_params(ctx)): + value, args = param.handle_parse_result(ctx, opts, args) + + if args and not ctx.allow_extra_args and not ctx.resilient_parsing: + ctx.fail( + ngettext( + "Got unexpected extra argument ({args})", + "Got unexpected extra arguments ({args})", + len(args), + ).format(args=" ".join(map(str, args))) + ) + + ctx.args = args + ctx._opt_prefixes.update(parser._opt_prefixes) + return args + + def invoke(self, ctx: Context) -> t.Any: + """Given a context, this invokes the attached callback (if it exists) + in the right way. + """ + if self.deprecated: + message = _( + "DeprecationWarning: The command {name!r} is deprecated." + ).format(name=self.name) + echo(style(message, fg="red"), err=True) + + if self.callback is not None: + return ctx.invoke(self.callback, **ctx.params) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options and chained multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results: t.List["CompletionItem"] = [] + + if incomplete and not incomplete[0].isalnum(): + for param in self.get_params(ctx): + if ( + not isinstance(param, Option) + or param.hidden + or ( + not param.multiple + and ctx.get_parameter_source(param.name) # type: ignore + is ParameterSource.COMMANDLINE + ) + ): + continue + + results.extend( + CompletionItem(name, help=param.help) + for name in [*param.opts, *param.secondary_opts] + if name.startswith(incomplete) + ) + + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class MultiCommand(Command): + """A multi command is the basic implementation of a command that + dispatches to subcommands. The most common version is the + :class:`Group`. + + :param invoke_without_command: this controls how the multi command itself + is invoked. By default it's only invoked + if a subcommand is provided. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is enabled by default if + `invoke_without_command` is disabled or disabled + if it's enabled. If enabled this will add + ``--help`` as argument if no arguments are + passed. + :param subcommand_metavar: the string that is used in the documentation + to indicate the subcommand place. + :param chain: if this is set to `True` chaining of multiple subcommands + is enabled. This restricts the form of commands in that + they cannot have optional arguments but it allows + multiple commands to be chained together. + :param result_callback: The result callback to attach to this multi + command. This can be set or changed later with the + :meth:`result_callback` decorator. + :param attrs: Other command arguments described in :class:`Command`. + """ + + allow_extra_args = True + allow_interspersed_args = False + + def __init__( + self, + name: t.Optional[str] = None, + invoke_without_command: bool = False, + no_args_is_help: t.Optional[bool] = None, + subcommand_metavar: t.Optional[str] = None, + chain: bool = False, + result_callback: t.Optional[t.Callable[..., t.Any]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if no_args_is_help is None: + no_args_is_help = not invoke_without_command + + self.no_args_is_help = no_args_is_help + self.invoke_without_command = invoke_without_command + + if subcommand_metavar is None: + if chain: + subcommand_metavar = "COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]..." + else: + subcommand_metavar = "COMMAND [ARGS]..." + + self.subcommand_metavar = subcommand_metavar + self.chain = chain + # The result callback that is stored. This can be set or + # overridden with the :func:`result_callback` decorator. + self._result_callback = result_callback + + if self.chain: + for param in self.params: + if isinstance(param, Argument) and not param.required: + raise RuntimeError( + "Multi commands in chain mode cannot have" + " optional arguments." + ) + + def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict(ctx) + commands = {} + + for name in self.list_commands(ctx): + command = self.get_command(ctx, name) + + if command is None: + continue + + sub_ctx = ctx._make_sub_context(command) + + with sub_ctx.scope(cleanup=False): + commands[name] = command.to_info_dict(sub_ctx) + + info_dict.update(commands=commands, chain=self.chain) + return info_dict + + def collect_usage_pieces(self, ctx: Context) -> t.List[str]: + rv = super().collect_usage_pieces(ctx) + rv.append(self.subcommand_metavar) + return rv + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + super().format_options(ctx, formatter) + self.format_commands(ctx, formatter) + + def result_callback(self, replace: bool = False) -> t.Callable[[F], F]: + """Adds a result callback to the command. By default if a + result callback is already registered this will chain them but + this can be disabled with the `replace` parameter. The result + callback is invoked with the return value of the subcommand + (or the list of return values from all subcommands if chaining + is enabled) as well as the parameters as they would be passed + to the main callback. + + Example:: + + @click.group() + @click.option('-i', '--input', default=23) + def cli(input): + return 42 + + @cli.result_callback() + def process_result(result, input): + return result + input + + :param replace: if set to `True` an already existing result + callback will be removed. + + .. versionchanged:: 8.0 + Renamed from ``resultcallback``. + + .. versionadded:: 3.0 + """ + + def decorator(f: F) -> F: + old_callback = self._result_callback + + if old_callback is None or replace: + self._result_callback = f + return f + + def function(__value, *args, **kwargs): # type: ignore + inner = old_callback(__value, *args, **kwargs) + return f(inner, *args, **kwargs) + + self._result_callback = rv = update_wrapper(t.cast(F, function), f) + return rv + + return decorator + + def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None: + """Extra format methods for multi methods that adds all the commands + after the options. + """ + commands = [] + for subcommand in self.list_commands(ctx): + cmd = self.get_command(ctx, subcommand) + # What is this, the tool lied about a command. Ignore it + if cmd is None: + continue + if cmd.hidden: + continue + + commands.append((subcommand, cmd)) + + # allow for 3 times the default spacing + if len(commands): + limit = formatter.width - 6 - max(len(cmd[0]) for cmd in commands) + + rows = [] + for subcommand, cmd in commands: + help = cmd.get_short_help_str(limit) + rows.append((subcommand, help)) + + if rows: + with formatter.section(_("Commands")): + formatter.write_dl(rows) + + def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]: + if not args and self.no_args_is_help and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + rest = super().parse_args(ctx, args) + + if self.chain: + ctx.protected_args = rest + ctx.args = [] + elif rest: + ctx.protected_args, ctx.args = rest[:1], rest[1:] + + return ctx.args + + def invoke(self, ctx: Context) -> t.Any: + def _process_result(value: t.Any) -> t.Any: + if self._result_callback is not None: + value = ctx.invoke(self._result_callback, value, **ctx.params) + return value + + if not ctx.protected_args: + if self.invoke_without_command: + # No subcommand was invoked, so the result callback is + # invoked with the group return value for regular + # groups, or an empty list for chained groups. + with ctx: + rv = super().invoke(ctx) + return _process_result([] if self.chain else rv) + ctx.fail(_("Missing command.")) + + # Fetch args back out + args = [*ctx.protected_args, *ctx.args] + ctx.args = [] + ctx.protected_args = [] + + # If we're not in chain mode, we only allow the invocation of a + # single command but we also inform the current context about the + # name of the command to invoke. + if not self.chain: + # Make sure the context is entered so we do not clean up + # resources until the result processor has worked. + with ctx: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + ctx.invoked_subcommand = cmd_name + super().invoke(ctx) + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) + with sub_ctx: + return _process_result(sub_ctx.command.invoke(sub_ctx)) + + # In chain mode we create the contexts step by step, but after the + # base command has been invoked. Because at that point we do not + # know the subcommands yet, the invoked subcommand attribute is + # set to ``*`` to inform the command that subcommands are executed + # but nothing else. + with ctx: + ctx.invoked_subcommand = "*" if args else None + super().invoke(ctx) + + # Otherwise we make every single context and invoke them in a + # chain. In that case the return value to the result processor + # is the list of all invoked subcommand's results. + contexts = [] + while args: + cmd_name, cmd, args = self.resolve_command(ctx, args) + assert cmd is not None + sub_ctx = cmd.make_context( + cmd_name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + ) + contexts.append(sub_ctx) + args, sub_ctx.args = sub_ctx.args, [] + + rv = [] + for sub_ctx in contexts: + with sub_ctx: + rv.append(sub_ctx.command.invoke(sub_ctx)) + return _process_result(rv) + + def resolve_command( + self, ctx: Context, args: t.List[str] + ) -> t.Tuple[t.Optional[str], t.Optional[Command], t.List[str]]: + cmd_name = make_str(args[0]) + original_cmd_name = cmd_name + + # Get the command + cmd = self.get_command(ctx, cmd_name) + + # If we can't find the command but there is a normalization + # function available, we try with that one. + if cmd is None and ctx.token_normalize_func is not None: + cmd_name = ctx.token_normalize_func(cmd_name) + cmd = self.get_command(ctx, cmd_name) + + # If we don't find the command we want to show an error message + # to the user that it was not provided. However, there is + # something else we should do: if the first argument looks like + # an option we want to kick off parsing again for arguments to + # resolve things like --help which now should go to the main + # place. + if cmd is None and not ctx.resilient_parsing: + if split_opt(cmd_name)[0]: + self.parse_args(ctx, ctx.args) + ctx.fail(_("No such command {name!r}.").format(name=original_cmd_name)) + return cmd_name if cmd else None, cmd, args[1:] + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + """Given a context and a command name, this returns a + :class:`Command` object if it exists or returns `None`. + """ + raise NotImplementedError + + def list_commands(self, ctx: Context) -> t.List[str]: + """Returns a list of subcommand names in the order they should + appear. + """ + return [] + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. Looks + at the names of options, subcommands, and chained + multi-commands. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + results = [ + CompletionItem(name, help=command.get_short_help_str()) + for name, command in _complete_visible_commands(ctx, incomplete) + ] + results.extend(super().shell_complete(ctx, incomplete)) + return results + + +class Group(MultiCommand): + """A group allows a command to have subcommands attached. This is + the most common way to implement nesting in Click. + + :param name: The name of the group command. + :param commands: A dict mapping names to :class:`Command` objects. + Can also be a list of :class:`Command`, which will use + :attr:`Command.name` to create the dict. + :param attrs: Other command arguments described in + :class:`MultiCommand`, :class:`Command`, and + :class:`BaseCommand`. + + .. versionchanged:: 8.0 + The ``commands`` argument can be a list of command objects. + """ + + #: If set, this is used by the group's :meth:`command` decorator + #: as the default :class:`Command` class. This is useful to make all + #: subcommands use a custom command class. + #: + #: .. versionadded:: 8.0 + command_class: t.Optional[t.Type[Command]] = None + + #: If set, this is used by the group's :meth:`group` decorator + #: as the default :class:`Group` class. This is useful to make all + #: subgroups use a custom group class. + #: + #: If set to the special value :class:`type` (literally + #: ``group_class = type``), this group's class will be used as the + #: default class. This makes a custom group class continue to make + #: custom groups. + #: + #: .. versionadded:: 8.0 + group_class: t.Optional[t.Union[t.Type["Group"], t.Type[type]]] = None + # Literal[type] isn't valid, so use Type[type] + + def __init__( + self, + name: t.Optional[str] = None, + commands: t.Optional[ + t.Union[t.MutableMapping[str, Command], t.Sequence[Command]] + ] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + + if commands is None: + commands = {} + elif isinstance(commands, abc.Sequence): + commands = {c.name: c for c in commands if c.name is not None} + + #: The registered subcommands by their exported names. + self.commands: t.MutableMapping[str, Command] = commands + + def add_command(self, cmd: Command, name: t.Optional[str] = None) -> None: + """Registers another :class:`Command` with this group. If the name + is not provided, the name of the command is used. + """ + name = name or cmd.name + if name is None: + raise TypeError("Command has no name.") + _check_multicommand(self, name, cmd, register=True) + self.commands[name] = cmd + + @t.overload + def command(self, __func: t.Callable[..., t.Any]) -> Command: + ... + + @t.overload + def command( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], Command]: + ... + + def command( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], Command], Command]: + """A shortcut decorator for declaring and attaching a command to + the group. This takes the same arguments as :func:`command` and + immediately registers the created command with this group by + calling :meth:`add_command`. + + To customize the command class used, set the + :attr:`command_class` attribute. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.0 + Added the :attr:`command_class` attribute. + """ + from .decorators import command + + func: t.Optional[t.Callable[..., t.Any]] = None + + if args and callable(args[0]): + assert ( + len(args) == 1 and not kwargs + ), "Use 'command(**kwargs)(callable)' to provide arguments." + (func,) = args + args = () + + if self.command_class and kwargs.get("cls") is None: + kwargs["cls"] = self.command_class + + def decorator(f: t.Callable[..., t.Any]) -> Command: + cmd: Command = command(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + if func is not None: + return decorator(func) + + return decorator + + @t.overload + def group(self, __func: t.Callable[..., t.Any]) -> "Group": + ... + + @t.overload + def group( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Callable[[t.Callable[..., t.Any]], "Group"]: + ... + + def group( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], "Group"], "Group"]: + """A shortcut decorator for declaring and attaching a group to + the group. This takes the same arguments as :func:`group` and + immediately registers the created group with this group by + calling :meth:`add_command`. + + To customize the group class used, set the :attr:`group_class` + attribute. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.0 + Added the :attr:`group_class` attribute. + """ + from .decorators import group + + func: t.Optional[t.Callable[..., t.Any]] = None + + if args and callable(args[0]): + assert ( + len(args) == 1 and not kwargs + ), "Use 'group(**kwargs)(callable)' to provide arguments." + (func,) = args + args = () + + if self.group_class is not None and kwargs.get("cls") is None: + if self.group_class is type: + kwargs["cls"] = type(self) + else: + kwargs["cls"] = self.group_class + + def decorator(f: t.Callable[..., t.Any]) -> "Group": + cmd: Group = group(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + + if func is not None: + return decorator(func) + + return decorator + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + return self.commands.get(cmd_name) + + def list_commands(self, ctx: Context) -> t.List[str]: + return sorted(self.commands) + + +class CommandCollection(MultiCommand): + """A command collection is a multi command that merges multiple multi + commands together into one. This is a straightforward implementation + that accepts a list of different multi commands as sources and + provides all the commands for each of them. + + See :class:`MultiCommand` and :class:`Command` for the description of + ``name`` and ``attrs``. + """ + + def __init__( + self, + name: t.Optional[str] = None, + sources: t.Optional[t.List[MultiCommand]] = None, + **attrs: t.Any, + ) -> None: + super().__init__(name, **attrs) + #: The list of registered multi commands. + self.sources: t.List[MultiCommand] = sources or [] + + def add_source(self, multi_cmd: MultiCommand) -> None: + """Adds a new multi command to the chain dispatcher.""" + self.sources.append(multi_cmd) + + def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]: + for source in self.sources: + rv = source.get_command(ctx, cmd_name) + + if rv is not None: + if self.chain: + _check_multicommand(self, cmd_name, rv) + + return rv + + return None + + def list_commands(self, ctx: Context) -> t.List[str]: + rv: t.Set[str] = set() + + for source in self.sources: + rv.update(source.list_commands(ctx)) + + return sorted(rv) + + +def _check_iter(value: t.Any) -> t.Iterator[t.Any]: + """Check if the value is iterable but not a string. Raises a type + error, or return an iterator over the value. + """ + if isinstance(value, str): + raise TypeError + + return iter(value) + + +class Parameter: + r"""A parameter to a command comes in two versions: they are either + :class:`Option`\s or :class:`Argument`\s. Other subclasses are currently + not supported by design as some of the internals for parsing are + intentionally not finalized. + + Some settings are supported by both options and arguments. + + :param param_decls: the parameter declarations for this option or + argument. This is a list of flags or argument + names. + :param type: the type that should be used. Either a :class:`ParamType` + or a Python type. The latter is converted into the former + automatically if supported. + :param required: controls if this is optional or not. + :param default: the default value if omitted. This can also be a callable, + in which case it's invoked when the default is needed + without any arguments. + :param callback: A function to further process or validate the value + after type conversion. It is called as ``f(ctx, param, value)`` + and must return the value. It is called for all sources, + including prompts. + :param nargs: the number of arguments to match. If not ``1`` the return + value is a tuple instead of single value. The default for + nargs is ``1`` (except if the type is a tuple, then it's + the arity of the tuple). If ``nargs=-1``, all remaining + parameters are collected. + :param metavar: how the value is represented in the help page. + :param expose_value: if this is `True` then the value is passed onwards + to the command callback and stored on the context, + otherwise it's skipped. + :param is_eager: eager values are processed before non eager ones. This + should not be set for arguments or it will inverse the + order of processing. + :param envvar: a string or list of strings that are environment variables + that should be checked. + :param shell_complete: A function that returns custom shell + completions. Used instead of the param's type completion if + given. Takes ``ctx, param, incomplete`` and must return a list + of :class:`~click.shell_completion.CompletionItem` or a list of + strings. + + .. versionchanged:: 8.0 + ``process_value`` validates required parameters and bounded + ``nargs``, and invokes the parameter callback before returning + the value. This allows the callback to validate prompts. + ``full_process_value`` is removed. + + .. versionchanged:: 8.0 + ``autocompletion`` is renamed to ``shell_complete`` and has new + semantics described above. The old name is deprecated and will + be removed in 8.1, until then it will be wrapped to match the + new requirements. + + .. versionchanged:: 8.0 + For ``multiple=True, nargs>1``, the default must be a list of + tuples. + + .. versionchanged:: 8.0 + Setting a default is no longer required for ``nargs>1``, it will + default to ``None``. ``multiple=True`` or ``nargs=-1`` will + default to ``()``. + + .. versionchanged:: 7.1 + Empty environment variables are ignored rather than taking the + empty string value. This makes it possible for scripts to clear + variables if they can't unset them. + + .. versionchanged:: 2.0 + Changed signature for parameter callback to also be passed the + parameter. The old callback format will still work, but it will + raise a warning to give you a chance to migrate the code easier. + """ + + param_type_name = "parameter" + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + type: t.Optional[t.Union[types.ParamType, t.Any]] = None, + required: bool = False, + default: t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]] = None, + callback: t.Optional[t.Callable[[Context, "Parameter", t.Any], t.Any]] = None, + nargs: t.Optional[int] = None, + multiple: bool = False, + metavar: t.Optional[str] = None, + expose_value: bool = True, + is_eager: bool = False, + envvar: t.Optional[t.Union[str, t.Sequence[str]]] = None, + shell_complete: t.Optional[ + t.Callable[ + [Context, "Parameter", str], + t.Union[t.List["CompletionItem"], t.List[str]], + ] + ] = None, + ) -> None: + self.name: t.Optional[str] + self.opts: t.List[str] + self.secondary_opts: t.List[str] + self.name, self.opts, self.secondary_opts = self._parse_decls( + param_decls or (), expose_value + ) + self.type: types.ParamType = types.convert_type(type, default) + + # Default nargs to what the type tells us if we have that + # information available. + if nargs is None: + if self.type.is_composite: + nargs = self.type.arity + else: + nargs = 1 + + self.required = required + self.callback = callback + self.nargs = nargs + self.multiple = multiple + self.expose_value = expose_value + self.default = default + self.is_eager = is_eager + self.metavar = metavar + self.envvar = envvar + self._custom_shell_complete = shell_complete + + if __debug__: + if self.type.is_composite and nargs != self.type.arity: + raise ValueError( + f"'nargs' must be {self.type.arity} (or None) for" + f" type {self.type!r}, but it was {nargs}." + ) + + # Skip no default or callable default. + check_default = default if not callable(default) else None + + if check_default is not None: + if multiple: + try: + # Only check the first value against nargs. + check_default = next(_check_iter(check_default), None) + except TypeError: + raise ValueError( + "'default' must be a list when 'multiple' is true." + ) from None + + # Can be None for multiple with empty default. + if nargs != 1 and check_default is not None: + try: + _check_iter(check_default) + except TypeError: + if multiple: + message = ( + "'default' must be a list of lists when 'multiple' is" + " true and 'nargs' != 1." + ) + else: + message = "'default' must be a list when 'nargs' != 1." + + raise ValueError(message) from None + + if nargs > 1 and len(check_default) != nargs: + subject = "item length" if multiple else "length" + raise ValueError( + f"'default' {subject} must match nargs={nargs}." + ) + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + .. versionadded:: 8.0 + """ + return { + "name": self.name, + "param_type_name": self.param_type_name, + "opts": self.opts, + "secondary_opts": self.secondary_opts, + "type": self.type.to_info_dict(), + "required": self.required, + "nargs": self.nargs, + "multiple": self.multiple, + "default": self.default, + "envvar": self.envvar, + } + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.name}>" + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + raise NotImplementedError() + + @property + def human_readable_name(self) -> str: + """Returns the human readable name of this parameter. This is the + same as the name for options, but the metavar for arguments. + """ + return self.name # type: ignore + + def make_metavar(self) -> str: + if self.metavar is not None: + return self.metavar + + metavar = self.type.get_metavar(self) + + if metavar is None: + metavar = self.type.name.upper() + + if self.nargs != 1: + metavar += "..." + + return metavar + + @t.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def get_default( + self, ctx: Context, call: bool = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def get_default( + self, ctx: Context, call: bool = True + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + """Get the default for the parameter. Tries + :meth:`Context.lookup_default` first, then the local default. + + :param ctx: Current context. + :param call: If the default is a callable, call it. Disable to + return the callable instead. + + .. versionchanged:: 8.0.2 + Type casting is no longer performed when getting a default. + + .. versionchanged:: 8.0.1 + Type casting can fail in resilient parsing mode. Invalid + defaults will not prevent showing help text. + + .. versionchanged:: 8.0 + Looks at ``ctx.default_map`` first. + + .. versionchanged:: 8.0 + Added the ``call`` parameter. + """ + value = ctx.lookup_default(self.name, call=False) # type: ignore + + if value is None: + value = self.default + + if call and callable(value): + value = value() + + return value + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + raise NotImplementedError() + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, t.Any] + ) -> t.Tuple[t.Any, ParameterSource]: + value = opts.get(self.name) # type: ignore + source = ParameterSource.COMMANDLINE + + if value is None: + value = self.value_from_envvar(ctx) + source = ParameterSource.ENVIRONMENT + + if value is None: + value = ctx.lookup_default(self.name) # type: ignore + source = ParameterSource.DEFAULT_MAP + + if value is None: + value = self.get_default(ctx) + source = ParameterSource.DEFAULT + + return value, source + + def type_cast_value(self, ctx: Context, value: t.Any) -> t.Any: + """Convert and validate a value against the option's + :attr:`type`, :attr:`multiple`, and :attr:`nargs`. + """ + if value is None: + return () if self.multiple or self.nargs == -1 else None + + def check_iter(value: t.Any) -> t.Iterator[t.Any]: + try: + return _check_iter(value) + except TypeError: + # This should only happen when passing in args manually, + # the parser should construct an iterable when parsing + # the command line. + raise BadParameter( + _("Value must be an iterable."), ctx=ctx, param=self + ) from None + + if self.nargs == 1 or self.type.is_composite: + + def convert(value: t.Any) -> t.Any: + return self.type(value, param=self, ctx=ctx) + + elif self.nargs == -1: + + def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...] + return tuple(self.type(x, self, ctx) for x in check_iter(value)) + + else: # nargs > 1 + + def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...] + value = tuple(check_iter(value)) + + if len(value) != self.nargs: + raise BadParameter( + ngettext( + "Takes {nargs} values but 1 was given.", + "Takes {nargs} values but {len} were given.", + len(value), + ).format(nargs=self.nargs, len=len(value)), + ctx=ctx, + param=self, + ) + + return tuple(self.type(x, self, ctx) for x in value) + + if self.multiple: + return tuple(convert(x) for x in check_iter(value)) + + return convert(value) + + def value_is_missing(self, value: t.Any) -> bool: + if value is None: + return True + + if (self.nargs != 1 or self.multiple) and value == (): + return True + + return False + + def process_value(self, ctx: Context, value: t.Any) -> t.Any: + value = self.type_cast_value(ctx, value) + + if self.required and self.value_is_missing(value): + raise MissingParameter(ctx=ctx, param=self) + + if self.callback is not None: + value = self.callback(ctx, self, value) + + return value + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + if self.envvar is None: + return None + + if isinstance(self.envvar, str): + rv = os.environ.get(self.envvar) + + if rv: + return rv + else: + for envvar in self.envvar: + rv = os.environ.get(envvar) + + if rv: + return rv + + return None + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is not None and self.nargs != 1: + rv = self.type.split_envvar_value(rv) + + return rv + + def handle_parse_result( + self, ctx: Context, opts: t.Mapping[str, t.Any], args: t.List[str] + ) -> t.Tuple[t.Any, t.List[str]]: + with augment_usage_errors(ctx, param=self): + value, source = self.consume_value(ctx, opts) + ctx.set_parameter_source(self.name, source) # type: ignore + + try: + value = self.process_value(ctx, value) + except Exception: + if not ctx.resilient_parsing: + raise + + value = None + + if self.expose_value: + ctx.params[self.name] = value # type: ignore + + return value, args + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + pass + + def get_usage_pieces(self, ctx: Context) -> t.List[str]: + return [] + + def get_error_hint(self, ctx: Context) -> str: + """Get a stringified version of the param for use in error messages to + indicate which param caused the error. + """ + hint_list = self.opts or [self.human_readable_name] + return " / ".join(f"'{x}'" for x in hint_list) + + def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: + """Return a list of completions for the incomplete value. If a + ``shell_complete`` function was given during init, it is used. + Otherwise, the :attr:`type` + :meth:`~click.types.ParamType.shell_complete` function is used. + + :param ctx: Invocation context for this command. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + if self._custom_shell_complete is not None: + results = self._custom_shell_complete(ctx, self, incomplete) + + if results and isinstance(results[0], str): + from click.shell_completion import CompletionItem + + results = [CompletionItem(c) for c in results] + + return t.cast(t.List["CompletionItem"], results) + + return self.type.shell_complete(ctx, self, incomplete) + + +class Option(Parameter): + """Options are usually optional values on the command line and + have some extra features that arguments don't have. + + All other parameters are passed onwards to the parameter constructor. + + :param show_default: Show the default value for this option in its + help text. Values are not shown by default, unless + :attr:`Context.show_default` is ``True``. If this value is a + string, it shows that string in parentheses instead of the + actual value. This is particularly useful for dynamic options. + For single option boolean flags, the default remains hidden if + its value is ``False``. + :param show_envvar: Controls if an environment variable should be + shown on the help page. Normally, environment variables are not + shown. + :param prompt: If set to ``True`` or a non empty string then the + user will be prompted for input. If set to ``True`` the prompt + will be the option name capitalized. + :param confirmation_prompt: Prompt a second time to confirm the + value if it was prompted for. Can be set to a string instead of + ``True`` to customize the message. + :param prompt_required: If set to ``False``, the user will be + prompted for input only when the option was specified as a flag + without a value. + :param hide_input: If this is ``True`` then the input on the prompt + will be hidden from the user. This is useful for password input. + :param is_flag: forces this option to act as a flag. The default is + auto detection. + :param flag_value: which value should be used for this flag if it's + enabled. This is set to a boolean automatically if + the option string contains a slash to mark two options. + :param multiple: if this is set to `True` then the argument is accepted + multiple times and recorded. This is similar to ``nargs`` + in how it works but supports arbitrary number of + arguments. + :param count: this flag makes an option increment an integer. + :param allow_from_autoenv: if this is enabled then the value of this + parameter will be pulled from an environment + variable in case a prefix is defined on the + context. + :param help: the help string. + :param hidden: hide this option from help outputs. + :param attrs: Other command arguments described in :class:`Parameter`. + + .. versionchanged:: 8.1.0 + Help text indentation is cleaned here instead of only in the + ``@option`` decorator. + + .. versionchanged:: 8.1.0 + The ``show_default`` parameter overrides + ``Context.show_default``. + + .. versionchanged:: 8.1.0 + The default of a single option boolean flag is not shown if the + default value is ``False``. + + .. versionchanged:: 8.0.1 + ``type`` is detected from ``flag_value`` if given. + """ + + param_type_name = "option" + + def __init__( + self, + param_decls: t.Optional[t.Sequence[str]] = None, + show_default: t.Union[bool, str, None] = None, + prompt: t.Union[bool, str] = False, + confirmation_prompt: t.Union[bool, str] = False, + prompt_required: bool = True, + hide_input: bool = False, + is_flag: t.Optional[bool] = None, + flag_value: t.Optional[t.Any] = None, + multiple: bool = False, + count: bool = False, + allow_from_autoenv: bool = True, + type: t.Optional[t.Union[types.ParamType, t.Any]] = None, + help: t.Optional[str] = None, + hidden: bool = False, + show_choices: bool = True, + show_envvar: bool = False, + **attrs: t.Any, + ) -> None: + if help: + help = inspect.cleandoc(help) + + default_is_missing = "default" not in attrs + super().__init__(param_decls, type=type, multiple=multiple, **attrs) + + if prompt is True: + if self.name is None: + raise TypeError("'name' is required with 'prompt=True'.") + + prompt_text: t.Optional[str] = self.name.replace("_", " ").capitalize() + elif prompt is False: + prompt_text = None + else: + prompt_text = prompt + + self.prompt = prompt_text + self.confirmation_prompt = confirmation_prompt + self.prompt_required = prompt_required + self.hide_input = hide_input + self.hidden = hidden + + # If prompt is enabled but not required, then the option can be + # used as a flag to indicate using prompt or flag_value. + self._flag_needs_value = self.prompt is not None and not self.prompt_required + + if is_flag is None: + if flag_value is not None: + # Implicitly a flag because flag_value was set. + is_flag = True + elif self._flag_needs_value: + # Not a flag, but when used as a flag it shows a prompt. + is_flag = False + else: + # Implicitly a flag because flag options were given. + is_flag = bool(self.secondary_opts) + elif is_flag is False and not self._flag_needs_value: + # Not a flag, and prompt is not enabled, can be used as a + # flag if flag_value is set. + self._flag_needs_value = flag_value is not None + + self.default: t.Union[t.Any, t.Callable[[], t.Any]] + + if is_flag and default_is_missing and not self.required: + if multiple: + self.default = () + else: + self.default = False + + if flag_value is None: + flag_value = not self.default + + self.type: types.ParamType + if is_flag and type is None: + # Re-guess the type from the flag value instead of the + # default. + self.type = types.convert_type(None, flag_value) + + self.is_flag: bool = is_flag + self.is_bool_flag: bool = is_flag and isinstance(self.type, types.BoolParamType) + self.flag_value: t.Any = flag_value + + # Counting + self.count = count + if count: + if type is None: + self.type = types.IntRange(min=0) + if default_is_missing: + self.default = 0 + + self.allow_from_autoenv = allow_from_autoenv + self.help = help + self.show_default = show_default + self.show_choices = show_choices + self.show_envvar = show_envvar + + if __debug__: + if self.nargs == -1: + raise TypeError("nargs=-1 is not supported for options.") + + if self.prompt and self.is_flag and not self.is_bool_flag: + raise TypeError("'prompt' is not valid for non-boolean flag.") + + if not self.is_bool_flag and self.secondary_opts: + raise TypeError("Secondary flag is not valid for non-boolean flag.") + + if self.is_bool_flag and self.hide_input and self.prompt is not None: + raise TypeError( + "'prompt' with 'hide_input' is not valid for boolean flag." + ) + + if self.count: + if self.multiple: + raise TypeError("'count' is not valid with 'multiple'.") + + if self.is_flag: + raise TypeError("'count' is not valid with 'is_flag'.") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + help=self.help, + prompt=self.prompt, + is_flag=self.is_flag, + flag_value=self.flag_value, + count=self.count, + hidden=self.hidden, + ) + return info_dict + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + opts = [] + secondary_opts = [] + name = None + possible_names = [] + + for decl in decls: + if decl.isidentifier(): + if name is not None: + raise TypeError(f"Name '{name}' defined twice") + name = decl + else: + split_char = ";" if decl[:1] == "/" else "/" + if split_char in decl: + first, second = decl.split(split_char, 1) + first = first.rstrip() + if first: + possible_names.append(split_opt(first)) + opts.append(first) + second = second.lstrip() + if second: + secondary_opts.append(second.lstrip()) + if first == second: + raise ValueError( + f"Boolean option {decl!r} cannot use the" + " same flag for true/false." + ) + else: + possible_names.append(split_opt(decl)) + opts.append(decl) + + if name is None and possible_names: + possible_names.sort(key=lambda x: -len(x[0])) # group long options first + name = possible_names[0][1].replace("-", "_").lower() + if not name.isidentifier(): + name = None + + if name is None: + if not expose_value: + return None, opts, secondary_opts + raise TypeError("Could not determine name for option") + + if not opts and not secondary_opts: + raise TypeError( + f"No options defined but a name was passed ({name})." + " Did you mean to declare an argument instead? Did" + f" you mean to pass '--{name}'?" + ) + + return name, opts, secondary_opts + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + if self.multiple: + action = "append" + elif self.count: + action = "count" + else: + action = "store" + + if self.is_flag: + action = f"{action}_const" + + if self.is_bool_flag and self.secondary_opts: + parser.add_option( + obj=self, opts=self.opts, dest=self.name, action=action, const=True + ) + parser.add_option( + obj=self, + opts=self.secondary_opts, + dest=self.name, + action=action, + const=False, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + const=self.flag_value, + ) + else: + parser.add_option( + obj=self, + opts=self.opts, + dest=self.name, + action=action, + nargs=self.nargs, + ) + + def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]: + if self.hidden: + return None + + any_prefix_is_slash = False + + def _write_opts(opts: t.Sequence[str]) -> str: + nonlocal any_prefix_is_slash + + rv, any_slashes = join_options(opts) + + if any_slashes: + any_prefix_is_slash = True + + if not self.is_flag and not self.count: + rv += f" {self.make_metavar()}" + + return rv + + rv = [_write_opts(self.opts)] + + if self.secondary_opts: + rv.append(_write_opts(self.secondary_opts)) + + help = self.help or "" + extra = [] + + if self.show_envvar: + envvar = self.envvar + + if envvar is None: + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + + if envvar is not None: + var_str = ( + envvar + if isinstance(envvar, str) + else ", ".join(str(d) for d in envvar) + ) + extra.append(_("env var: {var}").format(var=var_str)) + + # Temporarily enable resilient parsing to avoid type casting + # failing for the default. Might be possible to extend this to + # help formatting in general. + resilient = ctx.resilient_parsing + ctx.resilient_parsing = True + + try: + default_value = self.get_default(ctx, call=False) + finally: + ctx.resilient_parsing = resilient + + show_default = False + show_default_is_str = False + + if self.show_default is not None: + if isinstance(self.show_default, str): + show_default_is_str = show_default = True + else: + show_default = self.show_default + elif ctx.show_default is not None: + show_default = ctx.show_default + + if show_default_is_str or (show_default and (default_value is not None)): + if show_default_is_str: + default_string = f"({self.show_default})" + elif isinstance(default_value, (list, tuple)): + default_string = ", ".join(str(d) for d in default_value) + elif inspect.isfunction(default_value): + default_string = _("(dynamic)") + elif self.is_bool_flag and self.secondary_opts: + # For boolean flags that have distinct True/False opts, + # use the opt without prefix instead of the value. + default_string = split_opt( + (self.opts if self.default else self.secondary_opts)[0] + )[1] + elif self.is_bool_flag and not self.secondary_opts and not default_value: + default_string = "" + else: + default_string = str(default_value) + + if default_string: + extra.append(_("default: {default}").format(default=default_string)) + + if ( + isinstance(self.type, types._NumberRangeBase) + # skip count with default range type + and not (self.count and self.type.min == 0 and self.type.max is None) + ): + range_str = self.type._describe_range() + + if range_str: + extra.append(range_str) + + if self.required: + extra.append(_("required")) + + if extra: + extra_str = "; ".join(extra) + help = f"{help} [{extra_str}]" if help else f"[{extra_str}]" + + return ("; " if any_prefix_is_slash else " / ").join(rv), help + + @t.overload + def get_default( + self, ctx: Context, call: "te.Literal[True]" = True + ) -> t.Optional[t.Any]: + ... + + @t.overload + def get_default( + self, ctx: Context, call: bool = ... + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + ... + + def get_default( + self, ctx: Context, call: bool = True + ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + # If we're a non boolean flag our default is more complex because + # we need to look at all flags in the same group to figure out + # if we're the default one in which case we return the flag + # value as default. + if self.is_flag and not self.is_bool_flag: + for param in ctx.command.params: + if param.name == self.name and param.default: + return t.cast(Option, param).flag_value + + return None + + return super().get_default(ctx, call=call) + + def prompt_for_value(self, ctx: Context) -> t.Any: + """This is an alternative flow that can be activated in the full + value processing if a value does not exist. It will prompt the + user until a valid value exists and then returns the processed + value as result. + """ + assert self.prompt is not None + + # Calculate the default before prompting anything to be stable. + default = self.get_default(ctx) + + # If this is a prompt for a flag we need to handle this + # differently. + if self.is_bool_flag: + return confirm(self.prompt, default) + + return prompt( + self.prompt, + default=default, + type=self.type, + hide_input=self.hide_input, + show_choices=self.show_choices, + confirmation_prompt=self.confirmation_prompt, + value_proc=lambda x: self.process_value(ctx, x), + ) + + def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: + rv = super().resolve_envvar_value(ctx) + + if rv is not None: + return rv + + if ( + self.allow_from_autoenv + and ctx.auto_envvar_prefix is not None + and self.name is not None + ): + envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" + rv = os.environ.get(envvar) + + if rv: + return rv + + return None + + def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: + rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) + + if rv is None: + return None + + value_depth = (self.nargs != 1) + bool(self.multiple) + + if value_depth > 0: + rv = self.type.split_envvar_value(rv) + + if self.multiple and self.nargs != 1: + rv = batch(rv, self.nargs) + + return rv + + def consume_value( + self, ctx: Context, opts: t.Mapping[str, "Parameter"] + ) -> t.Tuple[t.Any, ParameterSource]: + value, source = super().consume_value(ctx, opts) + + # The parser will emit a sentinel value if the option can be + # given as a flag without a value. This is different from None + # to distinguish from the flag not being given at all. + if value is _flag_needs_value: + if self.prompt is not None and not ctx.resilient_parsing: + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + else: + value = self.flag_value + source = ParameterSource.COMMANDLINE + + elif ( + self.multiple + and value is not None + and any(v is _flag_needs_value for v in value) + ): + value = [self.flag_value if v is _flag_needs_value else v for v in value] + source = ParameterSource.COMMANDLINE + + # The value wasn't set, or used the param's default, prompt if + # prompting is enabled. + elif ( + source in {None, ParameterSource.DEFAULT} + and self.prompt is not None + and (self.required or self.prompt_required) + and not ctx.resilient_parsing + ): + value = self.prompt_for_value(ctx) + source = ParameterSource.PROMPT + + return value, source + + +class Argument(Parameter): + """Arguments are positional parameters to a command. They generally + provide fewer features than options but can have infinite ``nargs`` + and are required by default. + + All parameters are passed onwards to the constructor of :class:`Parameter`. + """ + + param_type_name = "argument" + + def __init__( + self, + param_decls: t.Sequence[str], + required: t.Optional[bool] = None, + **attrs: t.Any, + ) -> None: + if required is None: + if attrs.get("default") is not None: + required = False + else: + required = attrs.get("nargs", 1) > 0 + + if "multiple" in attrs: + raise TypeError("__init__() got an unexpected keyword argument 'multiple'.") + + super().__init__(param_decls, required=required, **attrs) + + if __debug__: + if self.default is not None and self.nargs == -1: + raise TypeError("'default' is not supported for nargs=-1.") + + @property + def human_readable_name(self) -> str: + if self.metavar is not None: + return self.metavar + return self.name.upper() # type: ignore + + def make_metavar(self) -> str: + if self.metavar is not None: + return self.metavar + var = self.type.get_metavar(self) + if not var: + var = self.name.upper() # type: ignore + if not self.required: + var = f"[{var}]" + if self.nargs != 1: + var += "..." + return var + + def _parse_decls( + self, decls: t.Sequence[str], expose_value: bool + ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]: + if not decls: + if not expose_value: + return None, [], [] + raise TypeError("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/site-packages/click/decorators.py b/venv/Lib/site-packages/click/decorators.py new file mode 100644 index 0000000..d9bba95 --- /dev/null +++ b/venv/Lib/site-packages/click/decorators.py @@ -0,0 +1,561 @@ +import inspect +import types +import typing as t +from functools import update_wrapper +from gettext import gettext as _ + +from .core import Argument +from .core import Command +from .core import Context +from .core import Group +from .core import Option +from .core import Parameter +from .globals import get_current_context +from .utils import echo + +if t.TYPE_CHECKING: + import typing_extensions as te + + P = te.ParamSpec("P") + +R = t.TypeVar("R") +T = t.TypeVar("T") +_AnyCallable = t.Callable[..., t.Any] +FC = t.TypeVar("FC", bound=t.Union[_AnyCallable, Command]) + + +def pass_context(f: "t.Callable[te.Concatenate[Context, P], R]") -> "t.Callable[P, R]": + """Marks a callback as wanting to receive the current context + object as first argument. + """ + + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R": + return f(get_current_context(), *args, **kwargs) + + return update_wrapper(new_func, f) + + +def pass_obj(f: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]": + """Similar to :func:`pass_context`, but only pass the object on the + context onwards (:attr:`Context.obj`). This is useful if that object + represents the state of a nested system. + """ + + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R": + return f(get_current_context().obj, *args, **kwargs) + + return update_wrapper(new_func, f) + + +def make_pass_decorator( + object_type: t.Type[T], ensure: bool = False +) -> t.Callable[["t.Callable[te.Concatenate[T, P], R]"], "t.Callable[P, R]"]: + """Given an object type this creates a decorator that will work + similar to :func:`pass_obj` but instead of passing the object of the + current context, it will find the innermost context of type + :func:`object_type`. + + This generates a decorator that works roughly like this:: + + from functools import update_wrapper + + def decorator(f): + @pass_context + def new_func(ctx, *args, **kwargs): + obj = ctx.find_object(object_type) + return ctx.invoke(f, obj, *args, **kwargs) + return update_wrapper(new_func, f) + return decorator + + :param object_type: the type of the object to pass. + :param ensure: if set to `True`, a new object will be created and + remembered on the context if it's not there yet. + """ + + def decorator(f: "t.Callable[te.Concatenate[T, P], R]") -> "t.Callable[P, R]": + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R": + ctx = get_current_context() + + obj: t.Optional[T] + if ensure: + obj = ctx.ensure_object(object_type) + else: + obj = ctx.find_object(object_type) + + if obj is None: + raise RuntimeError( + "Managed to invoke callback without a context" + f" object of type {object_type.__name__!r}" + " existing." + ) + + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(new_func, f) + + return decorator # type: ignore[return-value] + + +def pass_meta_key( + key: str, *, doc_description: t.Optional[str] = None +) -> "t.Callable[[t.Callable[te.Concatenate[t.Any, P], R]], t.Callable[P, R]]": + """Create a decorator that passes a key from + :attr:`click.Context.meta` as the first argument to the decorated + function. + + :param key: Key in ``Context.meta`` to pass. + :param doc_description: Description of the object being passed, + inserted into the decorator's docstring. Defaults to "the 'key' + key from Context.meta". + + .. versionadded:: 8.0 + """ + + def decorator(f: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]": + def new_func(*args: "P.args", **kwargs: "P.kwargs") -> R: + ctx = get_current_context() + obj = ctx.meta[key] + return ctx.invoke(f, obj, *args, **kwargs) + + return update_wrapper(new_func, f) + + if doc_description is None: + doc_description = f"the {key!r} key from :attr:`click.Context.meta`" + + decorator.__doc__ = ( + f"Decorator that passes {doc_description} as the first argument" + " to the decorated function." + ) + return decorator # type: ignore[return-value] + + +CmdType = t.TypeVar("CmdType", bound=Command) + + +# variant: no call, directly as decorator for a function. +@t.overload +def command(name: _AnyCallable) -> Command: + ... + + +# variant: with positional name and with positional or keyword cls argument: +# @command(namearg, CommandCls, ...) or @command(namearg, cls=CommandCls, ...) +@t.overload +def command( + name: t.Optional[str], + cls: t.Type[CmdType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], CmdType]: + ... + + +# variant: name omitted, cls _must_ be a keyword argument, @command(cls=CommandCls, ...) +@t.overload +def command( + name: None = None, + *, + cls: t.Type[CmdType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], CmdType]: + ... + + +# variant: with optional string name, no cls argument provided. +@t.overload +def command( + name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any +) -> t.Callable[[_AnyCallable], Command]: + ... + + +def command( + name: t.Union[t.Optional[str], _AnyCallable] = None, + cls: t.Optional[t.Type[CmdType]] = None, + **attrs: t.Any, +) -> t.Union[Command, t.Callable[[_AnyCallable], t.Union[Command, CmdType]]]: + r"""Creates a new :class:`Command` and uses the decorated function as + callback. This will also automatically attach all decorated + :func:`option`\s and :func:`argument`\s as parameters to the command. + + The name of the command defaults to the name of the function with + underscores replaced by dashes. If you want to change that, you can + pass the intended name as the first argument. + + All keyword arguments are forwarded to the underlying command class. + For the ``params`` argument, any decorated params are appended to + the end of the list. + + Once decorated the function turns into a :class:`Command` instance + that can be invoked as a command line utility or be attached to a + command :class:`Group`. + + :param name: the name of the command. This defaults to the function + name with underscores replaced by dashes. + :param cls: the command class to instantiate. This defaults to + :class:`Command`. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + + .. versionchanged:: 8.1 + The ``params`` argument can be used. Decorated params are + appended to the end of the list. + """ + + func: t.Optional[t.Callable[[_AnyCallable], t.Any]] = None + + if callable(name): + func = name + name = None + assert cls is None, "Use 'command(cls=cls)(callable)' to specify a class." + assert not attrs, "Use 'command(**kwargs)(callable)' to provide arguments." + + if cls is None: + cls = t.cast(t.Type[CmdType], Command) + + def decorator(f: _AnyCallable) -> CmdType: + if isinstance(f, Command): + raise TypeError("Attempted to convert a callback into a command twice.") + + attr_params = attrs.pop("params", None) + params = attr_params if attr_params is not None else [] + + try: + decorator_params = f.__click_params__ # type: ignore + except AttributeError: + pass + else: + del f.__click_params__ # type: ignore + params.extend(reversed(decorator_params)) + + if attrs.get("help") is None: + attrs["help"] = f.__doc__ + + if t.TYPE_CHECKING: + assert cls is not None + assert not callable(name) + + cmd = cls( + name=name or f.__name__.lower().replace("_", "-"), + callback=f, + params=params, + **attrs, + ) + cmd.__doc__ = f.__doc__ + return cmd + + if func is not None: + return decorator(func) + + return decorator + + +GrpType = t.TypeVar("GrpType", bound=Group) + + +# variant: no call, directly as decorator for a function. +@t.overload +def group(name: _AnyCallable) -> Group: + ... + + +# variant: with positional name and with positional or keyword cls argument: +# @group(namearg, GroupCls, ...) or @group(namearg, cls=GroupCls, ...) +@t.overload +def group( + name: t.Optional[str], + cls: t.Type[GrpType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], GrpType]: + ... + + +# variant: name omitted, cls _must_ be a keyword argument, @group(cmd=GroupCls, ...) +@t.overload +def group( + name: None = None, + *, + cls: t.Type[GrpType], + **attrs: t.Any, +) -> t.Callable[[_AnyCallable], GrpType]: + ... + + +# variant: with optional string name, no cls argument provided. +@t.overload +def group( + name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any +) -> t.Callable[[_AnyCallable], Group]: + ... + + +def group( + name: t.Union[str, _AnyCallable, None] = None, + cls: t.Optional[t.Type[GrpType]] = None, + **attrs: t.Any, +) -> t.Union[Group, t.Callable[[_AnyCallable], t.Union[Group, GrpType]]]: + """Creates a new :class:`Group` with a function as callback. This + works otherwise the same as :func:`command` just that the `cls` + parameter is set to :class:`Group`. + + .. versionchanged:: 8.1 + This decorator can be applied without parentheses. + """ + if cls is None: + cls = t.cast(t.Type[GrpType], Group) + + if callable(name): + return command(cls=cls, **attrs)(name) + + return command(name, cls, **attrs) + + +def _param_memo(f: t.Callable[..., t.Any], param: Parameter) -> None: + if isinstance(f, Command): + f.params.append(param) + else: + if not hasattr(f, "__click_params__"): + f.__click_params__ = [] # type: ignore + + f.__click_params__.append(param) # type: ignore + + +def argument( + *param_decls: str, cls: t.Optional[t.Type[Argument]] = None, **attrs: t.Any +) -> t.Callable[[FC], FC]: + """Attaches an argument to the command. All positional arguments are + passed as parameter declarations to :class:`Argument`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Argument` instance manually + and attaching it to the :attr:`Command.params` list. + + For the default argument class, refer to :class:`Argument` and + :class:`Parameter` for descriptions of parameters. + + :param cls: the argument class to instantiate. This defaults to + :class:`Argument`. + :param param_decls: Passed as positional arguments to the constructor of + ``cls``. + :param attrs: Passed as keyword arguments to the constructor of ``cls``. + """ + if cls is None: + cls = Argument + + def decorator(f: FC) -> FC: + _param_memo(f, cls(param_decls, **attrs)) + return f + + return decorator + + +def option( + *param_decls: str, cls: t.Optional[t.Type[Option]] = None, **attrs: t.Any +) -> t.Callable[[FC], FC]: + """Attaches an option to the command. All positional arguments are + passed as parameter declarations to :class:`Option`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Option` instance manually + and attaching it to the :attr:`Command.params` list. + + For the default option class, refer to :class:`Option` and + :class:`Parameter` for descriptions of parameters. + + :param cls: the option class to instantiate. This defaults to + :class:`Option`. + :param param_decls: Passed as positional arguments to the constructor of + ``cls``. + :param attrs: Passed as keyword arguments to the constructor of ``cls``. + """ + if cls is None: + cls = Option + + def decorator(f: FC) -> FC: + _param_memo(f, cls(param_decls, **attrs)) + return f + + return decorator + + +def confirmation_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--yes`` option which shows a prompt before continuing if + not passed. If the prompt is declined, the program will exit. + + :param param_decls: One or more option names. Defaults to the single + value ``"--yes"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value: + ctx.abort() + + if not param_decls: + param_decls = ("--yes",) + + kwargs.setdefault("is_flag", True) + kwargs.setdefault("callback", callback) + kwargs.setdefault("expose_value", False) + kwargs.setdefault("prompt", "Do you want to continue?") + kwargs.setdefault("help", "Confirm the action without prompting.") + return option(*param_decls, **kwargs) + + +def password_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]: + """Add a ``--password`` option which prompts for a password, hiding + input and asking to enter the value again for confirmation. + + :param param_decls: One or more option names. Defaults to the single + value ``"--password"``. + :param kwargs: Extra arguments are passed to :func:`option`. + """ + if not param_decls: + param_decls = ("--password",) + + kwargs.setdefault("prompt", True) + kwargs.setdefault("confirmation_prompt", True) + kwargs.setdefault("hide_input", True) + return option(*param_decls, **kwargs) + + +def version_option( + version: t.Optional[str] = None, + *param_decls: str, + package_name: t.Optional[str] = None, + prog_name: t.Optional[str] = None, + message: t.Optional[str] = None, + **kwargs: t.Any, +) -> t.Callable[[FC], FC]: + """Add a ``--version`` option which immediately prints the version + number and exits the program. + + If ``version`` is not provided, Click will try to detect it using + :func:`importlib.metadata.version` to get the version for the + ``package_name``. On Python < 3.8, the ``importlib_metadata`` + backport must be installed. + + If ``package_name`` is not provided, Click will try to detect it by + inspecting the stack frames. This will be used to detect the + version, so it must match the name of the installed package. + + :param version: The version number to show. If not provided, Click + will try to detect it. + :param param_decls: One or more option names. Defaults to the single + value ``"--version"``. + :param package_name: The package name to detect the version from. If + not provided, Click will try to detect it. + :param prog_name: The name of the CLI to show in the message. If not + provided, it will be detected from the command. + :param message: The message to show. The values ``%(prog)s``, + ``%(package)s``, and ``%(version)s`` are available. Defaults to + ``"%(prog)s, version %(version)s"``. + :param kwargs: Extra arguments are passed to :func:`option`. + :raise RuntimeError: ``version`` could not be detected. + + .. versionchanged:: 8.0 + Add the ``package_name`` parameter, and the ``%(package)s`` + value for messages. + + .. versionchanged:: 8.0 + Use :mod:`importlib.metadata` instead of ``pkg_resources``. The + version is detected based on the package name, not the entry + point name. The Python package name must match the installed + package name, or be passed with ``package_name=``. + """ + if message is None: + message = _("%(prog)s, version %(version)s") + + if version is None and package_name is None: + frame = inspect.currentframe() + f_back = frame.f_back if frame is not None else None + f_globals = f_back.f_globals if f_back is not None else None + # break reference cycle + # https://docs.python.org/3/library/inspect.html#the-interpreter-stack + del frame + + if f_globals is not None: + package_name = f_globals.get("__name__") + + if package_name == "__main__": + package_name = f_globals.get("__package__") + + if package_name: + package_name = package_name.partition(".")[0] + + def callback(ctx: Context, param: Parameter, value: bool) -> None: + if not value or ctx.resilient_parsing: + return + + nonlocal prog_name + nonlocal version + + if prog_name is None: + prog_name = ctx.find_root().info_name + + if version is None and package_name is not None: + metadata: t.Optional[types.ModuleType] + + try: + from importlib import metadata # 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( + 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/site-packages/click/exceptions.py b/venv/Lib/site-packages/click/exceptions.py new file mode 100644 index 0000000..fe68a36 --- /dev/null +++ b/venv/Lib/site-packages/click/exceptions.py @@ -0,0 +1,288 @@ +import typing as t +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import get_text_stderr +from .utils import echo +from .utils import format_filename + +if t.TYPE_CHECKING: + from .core import Command + from .core import Context + from .core import Parameter + + +def _join_param_hints( + param_hint: t.Optional[t.Union[t.Sequence[str], str]] +) -> t.Optional[str]: + if param_hint is not None and not isinstance(param_hint, str): + return " / ".join(repr(x) for x in param_hint) + + return param_hint + + +class ClickException(Exception): + """An exception that Click can handle and show to the user.""" + + #: The exit code for this exception. + exit_code = 1 + + def __init__(self, message: str) -> None: + super().__init__(message) + self.message = message + + def format_message(self) -> str: + return self.message + + def __str__(self) -> str: + return self.message + + def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None: + if file is None: + file = get_text_stderr() + + echo(_("Error: {message}").format(message=self.format_message()), file=file) + + +class UsageError(ClickException): + """An internal exception that signals a usage error. This typically + aborts any further handling. + + :param message: the error message to display. + :param ctx: optionally the context that caused this error. Click will + fill in the context automatically in some situations. + """ + + exit_code = 2 + + def __init__(self, message: str, ctx: t.Optional["Context"] = None) -> None: + super().__init__(message) + self.ctx = ctx + self.cmd: t.Optional["Command"] = self.ctx.command if self.ctx else None + + def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None: + if file is None: + file = get_text_stderr() + color = None + hint = "" + if ( + self.ctx is not None + and self.ctx.command.get_help_option(self.ctx) is not None + ): + hint = _("Try '{command} {option}' for help.").format( + command=self.ctx.command_path, option=self.ctx.help_option_names[0] + ) + hint = f"{hint}\n" + if self.ctx is not None: + color = self.ctx.color + echo(f"{self.ctx.get_usage()}\n{hint}", file=file, color=color) + echo( + _("Error: {message}").format(message=self.format_message()), + file=file, + color=color, + ) + + +class BadParameter(UsageError): + """An exception that formats out a standardized error message for a + bad parameter. This is useful when thrown from a callback or type as + Click will attach contextual information to it (for instance, which + parameter it is). + + .. versionadded:: 2.0 + + :param param: the parameter object that caused this error. This can + be left out, and Click will attach this info itself + if possible. + :param param_hint: a string that shows up as parameter name. This + can be used as alternative to `param` in cases + where custom validation should happen. If it is + a string it's used as such, if it's a list then + each item is quoted and separated. + """ + + def __init__( + self, + message: str, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + ) -> None: + super().__init__(message, ctx) + self.param = param + self.param_hint = param_hint + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + return _("Invalid value: {message}").format(message=self.message) + + return _("Invalid value for {param_hint}: {message}").format( + param_hint=_join_param_hints(param_hint), message=self.message + ) + + +class MissingParameter(BadParameter): + """Raised if click required an option or argument but it was not + provided when invoking the script. + + .. versionadded:: 4.0 + + :param param_type: a string that indicates the type of the parameter. + The default is to inherit the parameter type from + the given `param`. Valid values are ``'parameter'``, + ``'option'`` or ``'argument'``. + """ + + def __init__( + self, + message: t.Optional[str] = None, + ctx: t.Optional["Context"] = None, + param: t.Optional["Parameter"] = None, + param_hint: t.Optional[str] = None, + param_type: t.Optional[str] = None, + ) -> None: + super().__init__(message or "", ctx, param, param_hint) + self.param_type = param_type + + def format_message(self) -> str: + if self.param_hint is not None: + param_hint: t.Optional[str] = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) # type: ignore + else: + param_hint = None + + param_hint = _join_param_hints(param_hint) + param_hint = f" {param_hint}" if param_hint else "" + + param_type = self.param_type + if param_type is None and self.param is not None: + param_type = self.param.param_type_name + + msg = self.message + if self.param is not None: + msg_extra = self.param.type.get_missing_message(self.param) + if msg_extra: + if msg: + msg += f". {msg_extra}" + else: + msg = msg_extra + + msg = f" {msg}" if msg else "" + + # Translate param_type for known types. + if param_type == "argument": + missing = _("Missing argument") + elif param_type == "option": + missing = _("Missing option") + elif param_type == "parameter": + missing = _("Missing parameter") + else: + missing = _("Missing {param_type}").format(param_type=param_type) + + return f"{missing}{param_hint}.{msg}" + + def __str__(self) -> str: + if not self.message: + param_name = self.param.name if self.param else None + return _("Missing parameter: {param_name}").format(param_name=param_name) + else: + return self.message + + +class NoSuchOption(UsageError): + """Raised if click attempted to handle an option that does not + exist. + + .. versionadded:: 4.0 + """ + + def __init__( + self, + option_name: str, + message: t.Optional[str] = None, + possibilities: t.Optional[t.Sequence[str]] = None, + ctx: t.Optional["Context"] = None, + ) -> None: + if message is None: + message = _("No such option: {name}").format(name=option_name) + + super().__init__(message, ctx) + self.option_name = option_name + self.possibilities = possibilities + + def format_message(self) -> str: + if not self.possibilities: + return self.message + + possibility_str = ", ".join(sorted(self.possibilities)) + suggest = ngettext( + "Did you mean {possibility}?", + "(Possible options: {possibilities})", + len(self.possibilities), + ).format(possibility=possibility_str, possibilities=possibility_str) + return f"{self.message} {suggest}" + + +class BadOptionUsage(UsageError): + """Raised if an option is generally supplied but the use of the option + was incorrect. This is for instance raised if the number of arguments + for an option is not correct. + + .. versionadded:: 4.0 + + :param option_name: the name of the option being used incorrectly. + """ + + def __init__( + self, option_name: str, message: str, ctx: t.Optional["Context"] = None + ) -> None: + super().__init__(message, ctx) + self.option_name = option_name + + +class BadArgumentUsage(UsageError): + """Raised if an argument is generally supplied but the use of the argument + was incorrect. This is for instance raised if the number of values + for an argument is not correct. + + .. versionadded:: 6.0 + """ + + +class FileError(ClickException): + """Raised if a file cannot be opened.""" + + def __init__(self, filename: str, hint: t.Optional[str] = None) -> None: + if hint is None: + hint = _("unknown error") + + super().__init__(hint) + self.ui_filename: str = format_filename(filename) + self.filename = filename + + def format_message(self) -> str: + return _("Could not open file {filename!r}: {message}").format( + filename=self.ui_filename, message=self.message + ) + + +class Abort(RuntimeError): + """An internal signalling exception that signals Click to abort.""" + + +class Exit(RuntimeError): + """An exception that indicates that the application should exit with some + status code. + + :param code: the status code to exit with. + """ + + __slots__ = ("exit_code",) + + def __init__(self, code: int = 0) -> None: + self.exit_code: int = code diff --git a/venv/Lib/site-packages/click/formatting.py b/venv/Lib/site-packages/click/formatting.py new file mode 100644 index 0000000..ddd2a2f --- /dev/null +++ b/venv/Lib/site-packages/click/formatting.py @@ -0,0 +1,301 @@ +import typing as t +from contextlib import contextmanager +from gettext import gettext as _ + +from ._compat import term_len +from .parser import split_opt + +# Can force a width. This is used by the test system +FORCED_WIDTH: t.Optional[int] = None + + +def measure_table(rows: t.Iterable[t.Tuple[str, str]]) -> t.Tuple[int, ...]: + widths: t.Dict[int, int] = {} + + for row in rows: + for idx, col in enumerate(row): + widths[idx] = max(widths.get(idx, 0), term_len(col)) + + return tuple(y for x, y in sorted(widths.items())) + + +def iter_rows( + rows: t.Iterable[t.Tuple[str, str]], col_count: int +) -> t.Iterator[t.Tuple[str, ...]]: + for row in rows: + yield row + ("",) * (col_count - len(row)) + + +def wrap_text( + text: str, + width: int = 78, + initial_indent: str = "", + subsequent_indent: str = "", + preserve_paragraphs: bool = False, +) -> str: + """A helper function that intelligently wraps text. By default, it + assumes that it operates on a single paragraph of text but if the + `preserve_paragraphs` parameter is provided it will intelligently + handle paragraphs (defined by two empty lines). + + If paragraphs are handled, a paragraph can be prefixed with an empty + line containing the ``\\b`` character (``\\x08``) to indicate that + no rewrapping should happen in that block. + + :param text: the text that should be rewrapped. + :param width: the maximum width for the text. + :param initial_indent: the initial indent that should be placed on the + first line as a string. + :param subsequent_indent: the indent string that should be placed on + each consecutive line. + :param preserve_paragraphs: if this flag is set then the wrapping will + intelligently handle paragraphs. + """ + from ._textwrap import TextWrapper + + text = text.expandtabs() + wrapper = TextWrapper( + width, + initial_indent=initial_indent, + subsequent_indent=subsequent_indent, + replace_whitespace=False, + ) + if not preserve_paragraphs: + return wrapper.fill(text) + + p: t.List[t.Tuple[int, bool, str]] = [] + buf: t.List[str] = [] + indent = None + + def _flush_par() -> None: + if not buf: + return + if buf[0].strip() == "\b": + p.append((indent or 0, True, "\n".join(buf[1:]))) + else: + p.append((indent or 0, False, " ".join(buf))) + del buf[:] + + for line in text.splitlines(): + if not line: + _flush_par() + indent = None + else: + if indent is None: + orig_len = term_len(line) + line = line.lstrip() + indent = orig_len - term_len(line) + buf.append(line) + _flush_par() + + rv = [] + for indent, raw, text in p: + with wrapper.extra_indent(" " * indent): + if raw: + rv.append(wrapper.indent_only(text)) + else: + rv.append(wrapper.fill(text)) + + return "\n\n".join(rv) + + +class HelpFormatter: + """This class helps with formatting text-based help pages. It's + usually just needed for very special internal cases, but it's also + exposed so that developers can write their own fancy outputs. + + At present, it always writes into memory. + + :param indent_increment: the additional increment for each level. + :param width: the width for the text. This defaults to the terminal + width clamped to a maximum of 78. + """ + + def __init__( + self, + indent_increment: int = 2, + width: t.Optional[int] = None, + max_width: t.Optional[int] = None, + ) -> None: + import shutil + + self.indent_increment = indent_increment + if max_width is None: + max_width = 80 + if width is None: + width = FORCED_WIDTH + if width is None: + width = max(min(shutil.get_terminal_size().columns, max_width) - 2, 50) + self.width = width + self.current_indent = 0 + self.buffer: t.List[str] = [] + + def write(self, string: str) -> None: + """Writes a unicode string into the internal buffer.""" + self.buffer.append(string) + + def indent(self) -> None: + """Increases the indentation.""" + self.current_indent += self.indent_increment + + def dedent(self) -> None: + """Decreases the indentation.""" + self.current_indent -= self.indent_increment + + def write_usage( + self, prog: str, args: str = "", prefix: t.Optional[str] = None + ) -> None: + """Writes a usage line into the buffer. + + :param prog: the program name. + :param args: whitespace separated list of arguments. + :param prefix: The prefix for the first line. Defaults to + ``"Usage: "``. + """ + if prefix is None: + prefix = f"{_('Usage:')} " + + usage_prefix = f"{prefix:>{self.current_indent}}{prog} " + text_width = self.width - self.current_indent + + if text_width >= (term_len(usage_prefix) + 20): + # The arguments will fit to the right of the prefix. + indent = " " * term_len(usage_prefix) + self.write( + wrap_text( + args, + text_width, + initial_indent=usage_prefix, + subsequent_indent=indent, + ) + ) + else: + # The prefix is too long, put the arguments on the next line. + self.write(usage_prefix) + self.write("\n") + indent = " " * (max(self.current_indent, term_len(prefix)) + 4) + self.write( + wrap_text( + args, text_width, initial_indent=indent, subsequent_indent=indent + ) + ) + + self.write("\n") + + def write_heading(self, heading: str) -> None: + """Writes a heading into the buffer.""" + self.write(f"{'':>{self.current_indent}}{heading}:\n") + + def write_paragraph(self) -> None: + """Writes a paragraph into the buffer.""" + if self.buffer: + self.write("\n") + + def write_text(self, text: str) -> None: + """Writes re-indented text into the buffer. This rewraps and + preserves paragraphs. + """ + indent = " " * self.current_indent + self.write( + wrap_text( + text, + self.width, + initial_indent=indent, + subsequent_indent=indent, + preserve_paragraphs=True, + ) + ) + self.write("\n") + + def write_dl( + self, + rows: t.Sequence[t.Tuple[str, str]], + col_max: int = 30, + col_spacing: int = 2, + ) -> None: + """Writes a definition list into the buffer. This is how options + and commands are usually formatted. + + :param rows: a list of two item tuples for the terms and values. + :param col_max: the maximum width of the first column. + :param col_spacing: the number of spaces between the first and + second column. + """ + rows = list(rows) + widths = measure_table(rows) + if len(widths) != 2: + raise TypeError("Expected two columns for definition list") + + first_col = min(widths[0], col_max) + col_spacing + + for first, second in iter_rows(rows, len(widths)): + self.write(f"{'':>{self.current_indent}}{first}") + if not second: + self.write("\n") + continue + if term_len(first) <= first_col - col_spacing: + self.write(" " * (first_col - term_len(first))) + else: + self.write("\n") + self.write(" " * (first_col + self.current_indent)) + + text_width = max(self.width - first_col - 2, 10) + wrapped_text = wrap_text(second, text_width, preserve_paragraphs=True) + lines = wrapped_text.splitlines() + + if lines: + self.write(f"{lines[0]}\n") + + for line in lines[1:]: + self.write(f"{'':>{first_col + self.current_indent}}{line}\n") + else: + self.write("\n") + + @contextmanager + def section(self, name: str) -> t.Iterator[None]: + """Helpful context manager that writes a paragraph, a heading, + and the indents. + + :param name: the section name that is written as heading. + """ + self.write_paragraph() + self.write_heading(name) + self.indent() + try: + yield + finally: + self.dedent() + + @contextmanager + def indentation(self) -> t.Iterator[None]: + """A context manager that increases the indentation.""" + self.indent() + try: + yield + finally: + self.dedent() + + def getvalue(self) -> str: + """Returns the buffer contents.""" + return "".join(self.buffer) + + +def join_options(options: t.Sequence[str]) -> t.Tuple[str, bool]: + """Given a list of option strings this joins them in the most appropriate + way and returns them in the form ``(formatted_string, + any_prefix_is_slash)`` where the second item in the tuple is a flag that + indicates if any of the option prefixes was a slash. + """ + rv = [] + any_prefix_is_slash = False + + for opt in options: + prefix = split_opt(opt)[0] + + if prefix == "/": + any_prefix_is_slash = True + + rv.append((len(prefix), opt)) + + rv.sort(key=lambda x: x[0]) + return ", ".join(x[1] for x in rv), any_prefix_is_slash diff --git a/venv/Lib/site-packages/click/globals.py b/venv/Lib/site-packages/click/globals.py new file mode 100644 index 0000000..480058f --- /dev/null +++ b/venv/Lib/site-packages/click/globals.py @@ -0,0 +1,68 @@ +import typing as t +from threading import local + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + +_local = local() + + +@t.overload +def get_current_context(silent: "te.Literal[False]" = False) -> "Context": + ... + + +@t.overload +def get_current_context(silent: bool = ...) -> t.Optional["Context"]: + ... + + +def get_current_context(silent: bool = False) -> t.Optional["Context"]: + """Returns the current click context. This can be used as a way to + access the current context object from anywhere. This is a more implicit + alternative to the :func:`pass_context` decorator. This function is + primarily useful for helpers such as :func:`echo` which might be + interested in changing its behavior based on the current context. + + To push the current context, :meth:`Context.scope` can be used. + + .. versionadded:: 5.0 + + :param silent: if set to `True` the return value is `None` if no context + is available. The default behavior is to raise a + :exc:`RuntimeError`. + """ + try: + return t.cast("Context", _local.stack[-1]) + except (AttributeError, IndexError) as e: + if not silent: + raise RuntimeError("There is no active click context.") from e + + return None + + +def push_context(ctx: "Context") -> None: + """Pushes a new context to the current stack.""" + _local.__dict__.setdefault("stack", []).append(ctx) + + +def pop_context() -> None: + """Removes the top level from the stack.""" + _local.stack.pop() + + +def resolve_color_default(color: t.Optional[bool] = None) -> t.Optional[bool]: + """Internal helper to get the default value of the color flag. If a + value is passed it's returned unchanged, otherwise it's looked up from + the current context. + """ + if color is not None: + return color + + ctx = get_current_context(silent=True) + + if ctx is not None: + return ctx.color + + return None diff --git a/venv/Lib/site-packages/click/parser.py b/venv/Lib/site-packages/click/parser.py new file mode 100644 index 0000000..5fa7adf --- /dev/null +++ b/venv/Lib/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: t.Set[str] = set() + + for opt in opts: + prefix, value = split_opt(opt) + if not prefix: + raise ValueError(f"Invalid start character for option ({opt})") + self.prefixes.add(prefix[0]) + if len(prefix) == 1 and len(value) == 1: + self._short_opts.append(opt) + else: + self._long_opts.append(opt) + self.prefixes.add(prefix) + + if action is None: + action = "store" + + self.dest = dest + self.action = action + self.nargs = nargs + self.const = const + self.obj = obj + + @property + def takes_value(self) -> bool: + return self.action in ("store", "append") + + def process(self, value: t.Any, state: "ParsingState") -> None: + if self.action == "store": + state.opts[self.dest] = value # type: ignore + elif self.action == "store_const": + state.opts[self.dest] = self.const # type: ignore + elif self.action == "append": + state.opts.setdefault(self.dest, []).append(value) # type: ignore + elif self.action == "append_const": + state.opts.setdefault(self.dest, []).append(self.const) # type: ignore + elif self.action == "count": + state.opts[self.dest] = state.opts.get(self.dest, 0) + 1 # type: ignore + else: + raise ValueError(f"unknown action '{self.action}'") + state.order.append(self.obj) + + +class Argument: + def __init__(self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1): + self.dest = dest + self.nargs = nargs + self.obj = obj + + def process( + self, + value: t.Union[t.Optional[str], t.Sequence[t.Optional[str]]], + state: "ParsingState", + ) -> None: + if self.nargs > 1: + assert value is not None + holes = sum(1 for x in value if x is None) + if holes == len(value): + value = None + elif holes != 0: + raise BadArgumentUsage( + _("Argument {name!r} takes {nargs} values.").format( + name=self.dest, nargs=self.nargs + ) + ) + + if self.nargs == -1 and self.obj.envvar is not None and value == (): + # Replace empty tuple with None so that a value from the + # environment may be tried. + value = None + + state.opts[self.dest] = value # type: ignore + state.order.append(self.obj) + + +class ParsingState: + def __init__(self, rargs: t.List[str]) -> None: + self.opts: t.Dict[str, t.Any] = {} + self.largs: t.List[str] = [] + self.rargs = rargs + self.order: t.List["CoreParameter"] = [] + + +class OptionParser: + """The option parser is an internal class that is ultimately used to + parse options and arguments. It's modelled after optparse and brings + a similar but vastly simplified API. It should generally not be used + directly as the high level Click classes wrap it for you. + + It's not nearly as extensible as optparse or argparse as it does not + implement features that are implemented on a higher level (such as + types or defaults). + + :param ctx: optionally the :class:`~click.Context` where this parser + should go with. + """ + + def __init__(self, ctx: t.Optional["Context"] = None) -> None: + #: The :class:`~click.Context` for this parser. This might be + #: `None` for some advanced use cases. + self.ctx = ctx + #: This controls how the parser deals with interspersed arguments. + #: If this is set to `False`, the parser will stop on the first + #: non-option. Click uses this to implement nested subcommands + #: safely. + self.allow_interspersed_args: bool = True + #: This tells the parser how to deal with unknown options. By + #: default it will error out (which is sensible), but there is a + #: second mode where it will ignore it and continue processing + #: after shifting all the unknown options into the resulting args. + self.ignore_unknown_options: bool = False + + if ctx is not None: + self.allow_interspersed_args = ctx.allow_interspersed_args + self.ignore_unknown_options = ctx.ignore_unknown_options + + self._short_opt: t.Dict[str, Option] = {} + self._long_opt: t.Dict[str, Option] = {} + self._opt_prefixes = {"-", "--"} + self._args: t.List[Argument] = [] + + def add_option( + self, + obj: "CoreOption", + opts: t.Sequence[str], + dest: t.Optional[str], + action: t.Optional[str] = None, + nargs: int = 1, + const: t.Optional[t.Any] = None, + ) -> None: + """Adds a new option named `dest` to the parser. The destination + is not inferred (unlike with optparse) and needs to be explicitly + provided. Action can be any of ``store``, ``store_const``, + ``append``, ``append_const`` or ``count``. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + opts = [normalize_opt(opt, self.ctx) for opt in opts] + option = Option(obj, opts, dest, action=action, nargs=nargs, const=const) + self._opt_prefixes.update(option.prefixes) + for opt in option._short_opts: + self._short_opt[opt] = option + for opt in option._long_opts: + self._long_opt[opt] = option + + def add_argument( + self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1 + ) -> None: + """Adds a positional argument named `dest` to the parser. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + self._args.append(Argument(obj, dest=dest, nargs=nargs)) + + def parse_args( + self, args: t.List[str] + ) -> t.Tuple[t.Dict[str, t.Any], t.List[str], t.List["CoreParameter"]]: + """Parses positional arguments and returns ``(values, args, order)`` + for the parsed options and arguments as well as the leftover + arguments if there are any. The order is a list of objects as they + appear on the command line. If arguments appear multiple times they + will be memorized multiple times as well. + """ + state = ParsingState(args) + try: + self._process_args_for_options(state) + self._process_args_for_args(state) + except UsageError: + if self.ctx is None or not self.ctx.resilient_parsing: + raise + return state.opts, state.largs, state.order + + def _process_args_for_args(self, state: ParsingState) -> None: + pargs, args = _unpack_args( + state.largs + state.rargs, [x.nargs for x in self._args] + ) + + for idx, arg in enumerate(self._args): + arg.process(pargs[idx], state) + + state.largs = args + state.rargs = [] + + def _process_args_for_options(self, state: ParsingState) -> None: + while state.rargs: + arg = state.rargs.pop(0) + arglen = len(arg) + # Double dashes always handled explicitly regardless of what + # prefixes are valid. + if arg == "--": + return + elif arg[:1] in self._opt_prefixes and arglen > 1: + self._process_opts(arg, state) + elif self.allow_interspersed_args: + state.largs.append(arg) + else: + state.rargs.insert(0, arg) + return + + # Say this is the original argument list: + # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] + # ^ + # (we are about to process arg(i)). + # + # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of + # [arg0, ..., arg(i-1)] (any options and their arguments will have + # been removed from largs). + # + # The while loop will usually consume 1 or more arguments per pass. + # If it consumes 1 (eg. arg is an option that takes no arguments), + # then after _process_arg() is done the situation is: + # + # largs = subset of [arg0, ..., arg(i)] + # rargs = [arg(i+1), ..., arg(N-1)] + # + # If allow_interspersed_args is false, largs will always be + # *empty* -- still a subset of [arg0, ..., arg(i-1)], but + # not a very interesting subset! + + def _match_long_opt( + self, opt: str, explicit_value: t.Optional[str], state: ParsingState + ) -> None: + if opt not in self._long_opt: + from difflib import get_close_matches + + possibilities = get_close_matches(opt, self._long_opt) + raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx) + + option = self._long_opt[opt] + if option.takes_value: + # At this point it's safe to modify rargs by injecting the + # explicit value, because no exception is raised in this + # branch. This means that the inserted value will be fully + # consumed. + if explicit_value is not None: + state.rargs.insert(0, explicit_value) + + value = self._get_value_from_state(opt, option, state) + + elif explicit_value is not None: + raise BadOptionUsage( + opt, _("Option {name!r} does not take a value.").format(name=opt) + ) + + else: + value = None + + option.process(value, state) + + def _match_short_opt(self, arg: str, state: ParsingState) -> None: + stop = False + i = 1 + prefix = arg[0] + unknown_options = [] + + for ch in arg[1:]: + opt = normalize_opt(f"{prefix}{ch}", self.ctx) + option = self._short_opt.get(opt) + i += 1 + + if not option: + if self.ignore_unknown_options: + unknown_options.append(ch) + continue + raise NoSuchOption(opt, ctx=self.ctx) + if option.takes_value: + # Any characters left in arg? Pretend they're the + # next arg, and stop consuming characters of arg. + if i < len(arg): + state.rargs.insert(0, arg[i:]) + stop = True + + value = self._get_value_from_state(opt, option, state) + + else: + value = None + + option.process(value, state) + + if stop: + break + + # If we got any unknown options we recombine the string of the + # remaining options and re-attach the prefix, then report that + # to the state as new larg. This way there is basic combinatorics + # that can be achieved while still ignoring unknown arguments. + if self.ignore_unknown_options and unknown_options: + state.largs.append(f"{prefix}{''.join(unknown_options)}") + + def _get_value_from_state( + self, option_name: str, option: Option, state: ParsingState + ) -> t.Any: + nargs = option.nargs + + if len(state.rargs) < nargs: + if option.obj._flag_needs_value: + # Option allows omitting the value. + value = _flag_needs_value + else: + raise BadOptionUsage( + option_name, + ngettext( + "Option {name!r} requires an argument.", + "Option {name!r} requires {nargs} arguments.", + nargs, + ).format(name=option_name, nargs=nargs), + ) + elif nargs == 1: + next_rarg = state.rargs[0] + + if ( + option.obj._flag_needs_value + and isinstance(next_rarg, str) + and next_rarg[:1] in self._opt_prefixes + and len(next_rarg) > 1 + ): + # The next arg looks like the start of an option, don't + # use it as the value if omitting the value is allowed. + value = _flag_needs_value + else: + value = state.rargs.pop(0) + else: + value = tuple(state.rargs[:nargs]) + del state.rargs[:nargs] + + return value + + def _process_opts(self, arg: str, state: ParsingState) -> None: + explicit_value = None + # Long option handling happens in two parts. The first part is + # supporting explicitly attached values. In any case, we will try + # to long match the option first. + if "=" in arg: + long_opt, explicit_value = arg.split("=", 1) + else: + long_opt = arg + norm_long_opt = normalize_opt(long_opt, self.ctx) + + # At this point we will match the (assumed) long option through + # the long option matching code. Note that this allows options + # like "-foo" to be matched as long options. + try: + self._match_long_opt(norm_long_opt, explicit_value, state) + except NoSuchOption: + # At this point the long option matching failed, and we need + # to try with short options. However there is a special rule + # which says, that if we have a two character options prefix + # (applies to "--foo" for instance), we do not dispatch to the + # short option code and will instead raise the no option + # error. + if arg[:2] not in self._opt_prefixes: + self._match_short_opt(arg, state) + return + + if not self.ignore_unknown_options: + raise + + state.largs.append(arg) diff --git a/venv/Lib/site-packages/click/py.typed b/venv/Lib/site-packages/click/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/click/shell_completion.py b/venv/Lib/site-packages/click/shell_completion.py new file mode 100644 index 0000000..dc9e00b --- /dev/null +++ b/venv/Lib/site-packages/click/shell_completion.py @@ -0,0 +1,596 @@ +import os +import re +import typing as t +from gettext import gettext as _ + +from .core import Argument +from .core import BaseCommand +from .core import Context +from .core import MultiCommand +from .core import Option +from .core import Parameter +from .core import ParameterSource +from .parser import split_arg_string +from .utils import echo + + +def shell_complete( + cli: BaseCommand, + ctx_args: t.MutableMapping[str, t.Any], + prog_name: str, + complete_var: str, + instruction: str, +) -> int: + """Perform shell completion for the given CLI program. + + :param cli: Command being called. + :param ctx_args: Extra arguments to pass to + ``cli.make_context``. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + :param instruction: Value of ``complete_var`` with the completion + instruction and shell, in the form ``instruction_shell``. + :return: Status code to exit with. + """ + shell, _, instruction = instruction.partition("_") + comp_cls = get_completion_class(shell) + + if comp_cls is None: + return 1 + + comp = comp_cls(cli, ctx_args, prog_name, complete_var) + + if instruction == "source": + echo(comp.source()) + return 0 + + if instruction == "complete": + echo(comp.complete()) + return 0 + + return 1 + + +class CompletionItem: + """Represents a completion value and metadata about the value. The + default metadata is ``type`` to indicate special shell handling, + and ``help`` if a shell supports showing a help string next to the + value. + + Arbitrary parameters can be passed when creating the object, and + accessed using ``item.attr``. If an attribute wasn't passed, + accessing it returns ``None``. + + :param value: The completion suggestion. + :param type: Tells the shell script to provide special completion + support for the type. Click uses ``"dir"`` and ``"file"``. + :param help: String shown next to the value if supported. + :param kwargs: Arbitrary metadata. The built-in implementations + don't use this, but custom type completions paired with custom + shell support could use it. + """ + + __slots__ = ("value", "type", "help", "_info") + + def __init__( + self, + value: t.Any, + type: str = "plain", + help: t.Optional[str] = None, + **kwargs: t.Any, + ) -> None: + self.value: t.Any = value + self.type: str = type + self.help: t.Optional[str] = help + self._info = kwargs + + def __getattr__(self, name: str) -> t.Any: + return self._info.get(name) + + +# Only Bash >= 4.4 has the nosort option. +_SOURCE_BASH = """\ +%(complete_func)s() { + local IFS=$'\\n' + local response + + response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD \ +%(complete_var)s=bash_complete $1) + + for completion in $response; do + IFS=',' read type value <<< "$completion" + + if [[ $type == 'dir' ]]; then + COMPREPLY=() + compopt -o dirnames + elif [[ $type == 'file' ]]; then + COMPREPLY=() + compopt -o default + elif [[ $type == 'plain' ]]; then + COMPREPLY+=($value) + fi + done + + return 0 +} + +%(complete_func)s_setup() { + complete -o nosort -F %(complete_func)s %(prog_name)s +} + +%(complete_func)s_setup; +""" + +_SOURCE_ZSH = """\ +#compdef %(prog_name)s + +%(complete_func)s() { + local -a completions + local -a completions_with_descriptions + local -a response + (( ! $+commands[%(prog_name)s] )) && return 1 + + response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) \ +%(complete_var)s=zsh_complete %(prog_name)s)}") + + for type key descr in ${response}; do + if [[ "$type" == "plain" ]]; then + if [[ "$descr" == "_" ]]; then + completions+=("$key") + else + completions_with_descriptions+=("$key":"$descr") + fi + elif [[ "$type" == "dir" ]]; then + _path_files -/ + elif [[ "$type" == "file" ]]; then + _path_files -f + fi + done + + if [ -n "$completions_with_descriptions" ]; then + _describe -V unsorted completions_with_descriptions -U + fi + + if [ -n "$completions" ]; then + compadd -U -V unsorted -a completions + fi +} + +if [[ $zsh_eval_context[-1] == loadautofunc ]]; then + # autoload from fpath, call function directly + %(complete_func)s "$@" +else + # eval/source/. command, register function for later + compdef %(complete_func)s %(prog_name)s +fi +""" + +_SOURCE_FISH = """\ +function %(complete_func)s; + set -l response (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \ +COMP_CWORD=(commandline -t) %(prog_name)s); + + for completion in $response; + set -l metadata (string split "," $completion); + + if test $metadata[1] = "dir"; + __fish_complete_directories $metadata[2]; + else if test $metadata[1] = "file"; + __fish_complete_path $metadata[2]; + else if test $metadata[1] = "plain"; + echo $metadata[2]; + end; + end; +end; + +complete --no-files --command %(prog_name)s --arguments \ +"(%(complete_func)s)"; +""" + + +class ShellComplete: + """Base class for providing shell completion support. A subclass for + a given shell will override attributes and methods to implement the + completion instructions (``source`` and ``complete``). + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param complete_var: Name of the environment variable that holds + the completion instruction. + + .. versionadded:: 8.0 + """ + + name: t.ClassVar[str] + """Name to register the shell as with :func:`add_completion_class`. + This is used in completion instructions (``{name}_source`` and + ``{name}_complete``). + """ + + source_template: t.ClassVar[str] + """Completion script template formatted by :meth:`source`. This must + be provided by subclasses. + """ + + def __init__( + self, + cli: BaseCommand, + ctx_args: t.MutableMapping[str, t.Any], + prog_name: str, + complete_var: str, + ) -> None: + self.cli = cli + self.ctx_args = ctx_args + self.prog_name = prog_name + self.complete_var = complete_var + + @property + def func_name(self) -> str: + """The name of the shell function defined by the completion + script. + """ + safe_name = re.sub(r"\W*", "", self.prog_name.replace("-", "_"), flags=re.ASCII) + return f"_{safe_name}_completion" + + def source_vars(self) -> t.Dict[str, t.Any]: + """Vars for formatting :attr:`source_template`. + + By default this provides ``complete_func``, ``complete_var``, + and ``prog_name``. + """ + return { + "complete_func": self.func_name, + "complete_var": self.complete_var, + "prog_name": self.prog_name, + } + + def source(self) -> str: + """Produce the shell script that defines the completion + function. By default this ``%``-style formats + :attr:`source_template` with the dict returned by + :meth:`source_vars`. + """ + return self.source_template % self.source_vars() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + """Use the env vars defined by the shell script to return a + tuple of ``args, incomplete``. This must be implemented by + subclasses. + """ + raise NotImplementedError + + def get_completions( + self, args: t.List[str], incomplete: str + ) -> t.List[CompletionItem]: + """Determine the context and last complete command or parameter + from the complete args. Call that object's ``shell_complete`` + method to get the completions for the incomplete value. + + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + ctx = _resolve_context(self.cli, self.ctx_args, self.prog_name, args) + obj, incomplete = _resolve_incomplete(ctx, args, incomplete) + return obj.shell_complete(ctx, incomplete) + + def format_completion(self, item: CompletionItem) -> str: + """Format a completion item into the form recognized by the + shell script. This must be implemented by subclasses. + + :param item: Completion item to format. + """ + raise NotImplementedError + + def complete(self) -> str: + """Produce the completion data to send back to the shell. + + By default this calls :meth:`get_completion_args`, gets the + completions, then calls :meth:`format_completion` for each + completion. + """ + args, incomplete = self.get_completion_args() + completions = self.get_completions(args, incomplete) + out = [self.format_completion(item) for item in completions] + return "\n".join(out) + + +class BashComplete(ShellComplete): + """Shell completion for Bash.""" + + name = "bash" + source_template = _SOURCE_BASH + + @staticmethod + def _check_version() -> None: + import 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": + echo( + _( + "Shell completion is not supported for Bash" + " versions older than 4.4." + ), + err=True, + ) + else: + echo( + _("Couldn't detect Bash version, shell completion is not supported."), + err=True, + ) + + def source(self) -> str: + self._check_version() + return super().source() + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type},{item.value}" + + +class ZshComplete(ShellComplete): + """Shell completion for Zsh.""" + + name = "zsh" + source_template = _SOURCE_ZSH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + cword = int(os.environ["COMP_CWORD"]) + args = cwords[1:cword] + + try: + incomplete = cwords[cword] + except IndexError: + incomplete = "" + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + return f"{item.type}\n{item.value}\n{item.help if item.help else '_'}" + + +class FishComplete(ShellComplete): + """Shell completion for Fish.""" + + name = "fish" + source_template = _SOURCE_FISH + + def get_completion_args(self) -> t.Tuple[t.List[str], str]: + cwords = split_arg_string(os.environ["COMP_WORDS"]) + incomplete = os.environ["COMP_CWORD"] + args = cwords[1:] + + # Fish stores the partial word in both COMP_WORDS and + # COMP_CWORD, remove it from complete args. + if incomplete and args and args[-1] == incomplete: + args.pop() + + return args, incomplete + + def format_completion(self, item: CompletionItem) -> str: + if item.help: + return f"{item.type},{item.value}\t{item.help}" + + return f"{item.type},{item.value}" + + +ShellCompleteType = t.TypeVar("ShellCompleteType", bound=t.Type[ShellComplete]) + + +_available_shells: t.Dict[str, t.Type[ShellComplete]] = { + "bash": BashComplete, + "fish": FishComplete, + "zsh": ZshComplete, +} + + +def add_completion_class( + cls: ShellCompleteType, name: t.Optional[str] = None +) -> ShellCompleteType: + """Register a :class:`ShellComplete` subclass under the given name. + The name will be provided by the completion instruction environment + variable during completion. + + :param cls: The completion class that will handle completion for the + shell. + :param name: Name to register the class under. Defaults to the + class's ``name`` attribute. + """ + if name is None: + name = cls.name + + _available_shells[name] = cls + + return cls + + +def get_completion_class(shell: str) -> t.Optional[t.Type[ShellComplete]]: + """Look up a registered :class:`ShellComplete` subclass by the name + provided by the completion instruction environment variable. If the + name isn't registered, returns ``None``. + + :param shell: Name the class is registered under. + """ + return _available_shells.get(shell) + + +def _is_incomplete_argument(ctx: Context, param: Parameter) -> bool: + """Determine if the given parameter is an argument that can still + accept values. + + :param ctx: Invocation context for the command represented by the + parsed complete args. + :param param: Argument object being checked. + """ + if not isinstance(param, Argument): + return False + + assert param.name is not None + # Will be None if expose_value is False. + value = ctx.params.get(param.name) + return ( + param.nargs == -1 + or ctx.get_parameter_source(param.name) is not ParameterSource.COMMANDLINE + or ( + param.nargs > 1 + and isinstance(value, (tuple, list)) + and len(value) < param.nargs + ) + ) + + +def _start_of_option(ctx: Context, value: str) -> bool: + """Check if the value looks like the start of an option.""" + if not value: + return False + + c = value[0] + return c in ctx._opt_prefixes + + +def _is_incomplete_option(ctx: Context, args: t.List[str], param: Parameter) -> bool: + """Determine if the given parameter is an option that needs a value. + + :param args: List of complete args before the incomplete value. + :param param: Option object being checked. + """ + if not isinstance(param, Option): + return False + + if param.is_flag or param.count: + return False + + last_option = None + + for index, arg in enumerate(reversed(args)): + if index + 1 > param.nargs: + break + + if _start_of_option(ctx, arg): + last_option = arg + + return last_option is not None and last_option in param.opts + + +def _resolve_context( + cli: BaseCommand, + ctx_args: t.MutableMapping[str, t.Any], + prog_name: str, + args: t.List[str], +) -> Context: + """Produce the context hierarchy starting with the command and + traversing the complete arguments. This only follows the commands, + it doesn't trigger input prompts or callbacks. + + :param cli: Command being called. + :param prog_name: Name of the executable in the shell. + :param args: List of complete args before the incomplete value. + """ + ctx_args["resilient_parsing"] = True + ctx = cli.make_context(prog_name, args.copy(), **ctx_args) + args = ctx.protected_args + ctx.args + + while args: + command = ctx.command + + if isinstance(command, MultiCommand): + if not command.chain: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + ctx = cmd.make_context(name, args, parent=ctx, resilient_parsing=True) + args = ctx.protected_args + ctx.args + else: + sub_ctx = ctx + + while args: + name, cmd, args = command.resolve_command(ctx, args) + + if cmd is None: + return ctx + + sub_ctx = cmd.make_context( + name, + args, + parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + resilient_parsing=True, + ) + args = sub_ctx.args + + ctx = sub_ctx + args = [*sub_ctx.protected_args, *sub_ctx.args] + else: + break + + return ctx + + +def _resolve_incomplete( + ctx: Context, args: t.List[str], incomplete: str +) -> t.Tuple[t.Union[BaseCommand, Parameter], str]: + """Find the Click object that will handle the completion of the + incomplete value. Return the object and the incomplete value. + + :param ctx: Invocation context for the command represented by + the parsed complete args. + :param args: List of complete args before the incomplete value. + :param incomplete: Value being completed. May be empty. + """ + # Different shells treat an "=" between a long option name and + # value differently. Might keep the value joined, return the "=" + # as a separate item, or return the split name and value. Always + # split and discard the "=" to make completion easier. + if incomplete == "=": + incomplete = "" + elif "=" in incomplete and _start_of_option(ctx, incomplete): + name, _, incomplete = incomplete.partition("=") + args.append(name) + + # The "--" marker tells Click to stop treating values as options + # even if they start with the option character. If it hasn't been + # given and the incomplete arg looks like an option, the current + # command will provide option name completions. + if "--" not in args and _start_of_option(ctx, incomplete): + return ctx.command, incomplete + + params = ctx.command.get_params(ctx) + + # If the last complete arg is an option name with an incomplete + # value, the option will provide value completions. + for param in params: + if _is_incomplete_option(ctx, args, param): + return param, incomplete + + # It's not an option name or value. The first argument without a + # parsed value will provide value completions. + for param in params: + if _is_incomplete_argument(ctx, param): + return param, incomplete + + # There were no unparsed arguments, the command may be a group that + # will provide command name completions. + return ctx.command, incomplete diff --git a/venv/Lib/site-packages/click/termui.py b/venv/Lib/site-packages/click/termui.py new file mode 100644 index 0000000..db7a4b2 --- /dev/null +++ b/venv/Lib/site-packages/click/termui.py @@ -0,0 +1,784 @@ +import inspect +import io +import itertools +import sys +import typing as t +from gettext import gettext as _ + +from ._compat import isatty +from ._compat import strip_ansi +from .exceptions import Abort +from .exceptions import UsageError +from .globals import resolve_color_default +from .types import Choice +from .types import convert_type +from .types import ParamType +from .utils import echo +from .utils import LazyFile + +if t.TYPE_CHECKING: + from ._termui_impl import ProgressBar + +V = t.TypeVar("V") + +# The prompt functions to use. The doc tools currently override these +# functions to customize how they work. +visible_prompt_func: t.Callable[[str], str] = input + +_ansi_colors = { + "black": 30, + "red": 31, + "green": 32, + "yellow": 33, + "blue": 34, + "magenta": 35, + "cyan": 36, + "white": 37, + "reset": 39, + "bright_black": 90, + "bright_red": 91, + "bright_green": 92, + "bright_yellow": 93, + "bright_blue": 94, + "bright_magenta": 95, + "bright_cyan": 96, + "bright_white": 97, +} +_ansi_reset_all = "\033[0m" + + +def hidden_prompt_func(prompt: str) -> str: + import getpass + + return getpass.getpass(prompt) + + +def _build_prompt( + text: str, + suffix: str, + show_default: bool = False, + default: t.Optional[t.Any] = None, + show_choices: bool = True, + type: t.Optional[ParamType] = None, +) -> str: + prompt = text + if type is not None and show_choices and isinstance(type, Choice): + prompt += f" ({', '.join(map(str, type.choices))})" + if default is not None and show_default: + prompt = f"{prompt} [{_format_default(default)}]" + return f"{prompt}{suffix}" + + +def _format_default(default: t.Any) -> t.Any: + if isinstance(default, (io.IOBase, LazyFile)) and hasattr(default, "name"): + return default.name + + return default + + +def prompt( + text: str, + default: t.Optional[t.Any] = None, + hide_input: bool = False, + confirmation_prompt: t.Union[bool, str] = False, + type: t.Optional[t.Union[ParamType, t.Any]] = None, + value_proc: t.Optional[t.Callable[[str], t.Any]] = None, + prompt_suffix: str = ": ", + show_default: bool = True, + err: bool = False, + show_choices: bool = True, +) -> t.Any: + """Prompts a user for input. This is a convenience function that can + be used to prompt a user for input later. + + If the user aborts the input by sending an interrupt signal, this + function will catch it and raise a :exc:`Abort` exception. + + :param text: the text to show for the prompt. + :param default: the default value to use if no input happens. If this + is not given it will prompt until it's aborted. + :param hide_input: if this is set to true then the input value will + be hidden. + :param confirmation_prompt: Prompt a second time to confirm the + value. Can be set to a string instead of ``True`` to customize + the message. + :param type: the type to use to check the value against. + :param value_proc: if this parameter is provided it's a function that + is invoked instead of the type conversion to + convert a value. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + :param show_choices: Show or hide choices if the passed type is a Choice. + For example if type is a Choice of either day or week, + show_choices is true and text is "Group by" then the + prompt will be "Group by (day, week): ". + + .. versionadded:: 8.0 + ``confirmation_prompt`` can be a custom string. + + .. versionadded:: 7.0 + Added the ``show_choices`` parameter. + + .. versionadded:: 6.0 + Added unicode support for cmd.exe on Windows. + + .. versionadded:: 4.0 + Added the `err` parameter. + + """ + + def prompt_func(text: str) -> str: + f = hidden_prompt_func if hide_input else visible_prompt_func + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(text.rstrip(" "), nl=False, err=err) + # Echo a space to stdout to work around an issue where + # readline causes backspace to clear the whole line. + return f(" ") + except (KeyboardInterrupt, EOFError): + # getpass doesn't print a newline if the user aborts input with ^C. + # Allegedly this behavior is inherited from getpass(3). + # A doc bug has been filed at https://bugs.python.org/issue24711 + if hide_input: + echo(None, err=err) + raise Abort() from None + + if value_proc is None: + value_proc = convert_type(type, default) + + prompt = _build_prompt( + text, prompt_suffix, show_default, default, show_choices, type + ) + + if confirmation_prompt: + if confirmation_prompt is True: + confirmation_prompt = _("Repeat for confirmation") + + confirmation_prompt = _build_prompt(confirmation_prompt, prompt_suffix) + + while True: + while True: + value = prompt_func(prompt) + if value: + break + elif default is not None: + value = default + break + try: + result = value_proc(value) + except UsageError as e: + if hide_input: + echo(_("Error: The value you entered was invalid."), err=err) + else: + echo(_("Error: {e.message}").format(e=e), err=err) # noqa: B306 + continue + if not confirmation_prompt: + return result + while True: + value2 = prompt_func(confirmation_prompt) + is_empty = not value and not value2 + if value2 or is_empty: + break + if value == value2: + return result + echo(_("Error: The two entered values do not match."), err=err) + + +def confirm( + text: str, + default: t.Optional[bool] = False, + abort: bool = False, + prompt_suffix: str = ": ", + show_default: bool = True, + err: bool = False, +) -> bool: + """Prompts for confirmation (yes/no question). + + If the user aborts the input by sending a interrupt signal this + function will catch it and raise a :exc:`Abort` exception. + + :param text: the question to ask. + :param default: The default value to use when no input is given. If + ``None``, repeat until input is given. + :param abort: if this is set to `True` a negative answer aborts the + exception by raising :exc:`Abort`. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + + .. versionchanged:: 8.0 + Repeat until input is given if ``default`` is ``None``. + + .. versionadded:: 4.0 + Added the ``err`` parameter. + """ + prompt = _build_prompt( + text, + prompt_suffix, + show_default, + "y/n" if default is None else ("Y/n" if default else "y/N"), + ) + + while True: + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(prompt.rstrip(" "), nl=False, err=err) + # Echo a space to stdout to work around an issue where + # readline causes backspace to clear the whole line. + value = visible_prompt_func(" ").lower().strip() + except (KeyboardInterrupt, EOFError): + raise Abort() from None + if value in ("y", "yes"): + rv = True + elif value in ("n", "no"): + rv = False + elif default is not None and value == "": + rv = default + else: + echo(_("Error: invalid input"), err=err) + continue + break + if abort and not rv: + raise Abort() + return rv + + +def echo_via_pager( + text_or_generator: t.Union[t.Iterable[str], t.Callable[[], t.Iterable[str]], str], + color: t.Optional[bool] = None, +) -> None: + """This function takes a text and shows it via an environment specific + pager on stdout. + + .. versionchanged:: 3.0 + Added the `color` flag. + + :param text_or_generator: the text to page, or alternatively, a + generator emitting the text to page. + :param color: controls if the pager supports ANSI colors or not. The + default is autodetection. + """ + color = resolve_color_default(color) + + if inspect.isgeneratorfunction(text_or_generator): + i = t.cast(t.Callable[[], t.Iterable[str]], text_or_generator)() + elif isinstance(text_or_generator, str): + i = [text_or_generator] + else: + i = iter(t.cast(t.Iterable[str], text_or_generator)) + + # convert every element of i to a text type if necessary + text_generator = (el if isinstance(el, str) else str(el) for el in i) + + from ._termui_impl import pager + + return pager(itertools.chain(text_generator, "\n"), color) + + +def progressbar( + iterable: t.Optional[t.Iterable[V]] = None, + length: t.Optional[int] = None, + label: t.Optional[str] = None, + show_eta: bool = True, + show_percent: t.Optional[bool] = None, + show_pos: bool = False, + item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None, + fill_char: str = "#", + empty_char: str = "-", + bar_template: str = "%(label)s [%(bar)s] %(info)s", + info_sep: str = " ", + width: int = 36, + file: t.Optional[t.TextIO] = None, + color: t.Optional[bool] = None, + update_min_steps: int = 1, +) -> "ProgressBar[V]": + """This function creates an iterable context manager that can be used + to iterate over something while showing a progress bar. It will + either iterate over the `iterable` or `length` items (that are counted + up). While iteration happens, this function will print a rendered + progress bar to the given `file` (defaults to stdout) and will attempt + to calculate remaining time and more. By default, this progress bar + will not be rendered if the file is not a terminal. + + The context manager creates the progress bar. When the context + manager is entered the progress bar is already created. With every + iteration over the progress bar, the iterable passed to the bar is + advanced and the bar is updated. When the context manager exits, + a newline is printed and the progress bar is finalized on screen. + + Note: The progress bar is currently designed for use cases where the + total progress can be expected to take at least several seconds. + Because of this, the ProgressBar class object won't display + progress that is considered too fast, and progress where the time + between steps is less than a second. + + No printing must happen or the progress bar will be unintentionally + destroyed. + + Example usage:: + + with progressbar(items) as bar: + for item in bar: + do_something_with(item) + + Alternatively, if no iterable is specified, one can manually update the + progress bar through the `update()` method instead of directly + iterating over the progress bar. The update method accepts the number + of steps to increment the bar with:: + + with progressbar(length=chunks.total_bytes) as bar: + for chunk in chunks: + process_chunk(chunk) + bar.update(chunks.bytes) + + The ``update()`` method also takes an optional value specifying the + ``current_item`` at the new position. This is useful when used + together with ``item_show_func`` to customize the output for each + manual step:: + + with click.progressbar( + length=total_size, + label='Unzipping archive', + item_show_func=lambda a: a.filename + ) as bar: + for archive in zip_file: + archive.extract() + bar.update(archive.size, archive) + + :param iterable: an iterable to iterate over. If not provided the length + is required. + :param length: the number of items to iterate over. By default the + progressbar will attempt to ask the iterator about its + length, which might or might not work. If an iterable is + also provided this parameter can be used to override the + length. If an iterable is not provided the progress bar + will iterate over a range of that length. + :param label: the label to show next to the progress bar. + :param show_eta: enables or disables the estimated time display. This is + automatically disabled if the length cannot be + determined. + :param show_percent: enables or disables the percentage display. The + default is `True` if the iterable has a length or + `False` if not. + :param show_pos: enables or disables the absolute position display. The + default is `False`. + :param item_show_func: A function called with the current item which + can return a string to show next to the progress bar. If the + function returns ``None`` nothing is shown. The current item can + be ``None``, such as when entering and exiting the bar. + :param fill_char: the character to use to show the filled part of the + progress bar. + :param empty_char: the character to use to show the non-filled part of + the progress bar. + :param bar_template: the format string to use as template for the bar. + The parameters in it are ``label`` for the label, + ``bar`` for the progress bar and ``info`` for the + info section. + :param info_sep: the separator between multiple info items (eta etc.) + :param width: the width of the progress bar in characters, 0 means full + terminal width + :param file: The file to write to. If this is not a terminal then + only the label is printed. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are included anywhere in the progress bar output + which is not the case by default. + :param update_min_steps: Render only when this many updates have + completed. This allows tuning for very fast iterators. + + .. versionchanged:: 8.0 + Output is shown even if execution time is less than 0.5 seconds. + + .. versionchanged:: 8.0 + ``item_show_func`` shows the current item, not the previous one. + + .. versionchanged:: 8.0 + Labels are echoed if the output is not a TTY. Reverts a change + in 7.0 that removed all output. + + .. versionadded:: 8.0 + Added the ``update_min_steps`` parameter. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. Added the ``update`` method to + the object. + + .. versionadded:: 2.0 + """ + from ._termui_impl import ProgressBar + + color = resolve_color_default(color) + return ProgressBar( + iterable=iterable, + length=length, + show_eta=show_eta, + show_percent=show_percent, + show_pos=show_pos, + item_show_func=item_show_func, + fill_char=fill_char, + empty_char=empty_char, + bar_template=bar_template, + info_sep=info_sep, + file=file, + label=label, + width=width, + color=color, + update_min_steps=update_min_steps, + ) + + +def clear() -> None: + """Clears the terminal screen. This will have the effect of clearing + the whole visible space of the terminal and moving the cursor to the + top left. This does not do anything if not connected to a terminal. + + .. versionadded:: 2.0 + """ + if not isatty(sys.stdout): + return + + # ANSI escape \033[2J clears the screen, \033[1;1H moves the cursor + echo("\033[2J\033[1;1H", nl=False) + + +def _interpret_color( + color: t.Union[int, t.Tuple[int, int, int], str], offset: int = 0 +) -> str: + if isinstance(color, int): + return f"{38 + offset};5;{color:d}" + + if isinstance(color, (tuple, list)): + r, g, b = color + return f"{38 + offset};2;{r:d};{g:d};{b:d}" + + return str(_ansi_colors[color] + offset) + + +def style( + text: t.Any, + fg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None, + bold: t.Optional[bool] = None, + dim: t.Optional[bool] = None, + underline: t.Optional[bool] = None, + overline: t.Optional[bool] = None, + italic: t.Optional[bool] = None, + blink: t.Optional[bool] = None, + reverse: t.Optional[bool] = None, + strikethrough: t.Optional[bool] = None, + reset: bool = True, +) -> str: + """Styles a text with ANSI styles and returns the new string. By + default the styling is self contained which means that at the end + of the string a reset code is issued. This can be prevented by + passing ``reset=False``. + + Examples:: + + click.echo(click.style('Hello World!', fg='green')) + click.echo(click.style('ATTENTION!', blink=True)) + click.echo(click.style('Some things', reverse=True, fg='cyan')) + click.echo(click.style('More colors', fg=(255, 12, 128), bg=117)) + + Supported color names: + + * ``black`` (might be a gray) + * ``red`` + * ``green`` + * ``yellow`` (might be an orange) + * ``blue`` + * ``magenta`` + * ``cyan`` + * ``white`` (might be light gray) + * ``bright_black`` + * ``bright_red`` + * ``bright_green`` + * ``bright_yellow`` + * ``bright_blue`` + * ``bright_magenta`` + * ``bright_cyan`` + * ``bright_white`` + * ``reset`` (reset the color code only) + + If the terminal supports it, color may also be specified as: + + - An integer in the interval [0, 255]. The terminal must support + 8-bit/256-color mode. + - An RGB tuple of three integers in [0, 255]. The terminal must + support 24-bit/true-color mode. + + See https://en.wikipedia.org/wiki/ANSI_color and + https://gist.github.com/XVilka/8346728 for more information. + + :param text: the string to style with ansi codes. + :param fg: if provided this will become the foreground color. + :param bg: if provided this will become the background color. + :param bold: if provided this will enable or disable bold mode. + :param dim: if provided this will enable or disable dim mode. This is + badly supported. + :param underline: if provided this will enable or disable underline. + :param overline: if provided this will enable or disable overline. + :param italic: if provided this will enable or disable italic. + :param blink: if provided this will enable or disable blinking. + :param reverse: if provided this will enable or disable inverse + rendering (foreground becomes background and the + other way round). + :param strikethrough: if provided this will enable or disable + striking through text. + :param reset: by default a reset-all code is added at the end of the + string which means that styles do not carry over. This + can be disabled to compose styles. + + .. versionchanged:: 8.0 + A non-string ``message`` is converted to a string. + + .. versionchanged:: 8.0 + Added support for 256 and RGB color codes. + + .. versionchanged:: 8.0 + Added the ``strikethrough``, ``italic``, and ``overline`` + parameters. + + .. versionchanged:: 7.0 + Added support for bright colors. + + .. versionadded:: 2.0 + """ + if not isinstance(text, str): + text = str(text) + + bits = [] + + if fg: + try: + bits.append(f"\033[{_interpret_color(fg)}m") + except KeyError: + raise TypeError(f"Unknown color {fg!r}") from None + + if bg: + try: + bits.append(f"\033[{_interpret_color(bg, 10)}m") + except KeyError: + raise TypeError(f"Unknown color {bg!r}") from None + + if bold is not None: + bits.append(f"\033[{1 if bold else 22}m") + if dim is not None: + bits.append(f"\033[{2 if dim else 22}m") + if underline is not None: + bits.append(f"\033[{4 if underline else 24}m") + if overline is not None: + bits.append(f"\033[{53 if overline else 55}m") + if italic is not None: + bits.append(f"\033[{3 if italic else 23}m") + if blink is not None: + bits.append(f"\033[{5 if blink else 25}m") + if reverse is not None: + bits.append(f"\033[{7 if reverse else 27}m") + if strikethrough is not None: + bits.append(f"\033[{9 if strikethrough else 29}m") + bits.append(text) + if reset: + bits.append(_ansi_reset_all) + return "".join(bits) + + +def unstyle(text: str) -> str: + """Removes ANSI styling information from a string. Usually it's not + necessary to use this function as Click's echo function will + automatically remove styling if necessary. + + .. versionadded:: 2.0 + + :param text: the text to remove style information from. + """ + return strip_ansi(text) + + +def secho( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO[t.AnyStr]] = None, + nl: bool = True, + err: bool = False, + color: t.Optional[bool] = None, + **styles: t.Any, +) -> None: + """This function combines :func:`echo` and :func:`style` into one + call. As such the following two calls are the same:: + + click.secho('Hello World!', fg='green') + click.echo(click.style('Hello World!', fg='green')) + + All keyword arguments are forwarded to the underlying functions + depending on which one they go with. + + Non-string types will be converted to :class:`str`. However, + :class:`bytes` are passed directly to :meth:`echo` without applying + style. If you want to style bytes that represent text, call + :meth:`bytes.decode` first. + + .. versionchanged:: 8.0 + A non-string ``message`` is converted to a string. Bytes are + passed through without style applied. + + .. versionadded:: 2.0 + """ + if message is not None and not isinstance(message, (bytes, bytearray)): + message = style(message, **styles) + + return echo(message, file=file, nl=nl, err=err, color=color) + + +def edit( + text: t.Optional[t.AnyStr] = None, + editor: t.Optional[str] = None, + env: t.Optional[t.Mapping[str, str]] = None, + require_save: bool = True, + extension: str = ".txt", + filename: t.Optional[str] = None, +) -> t.Optional[t.AnyStr]: + r"""Edits the given text in the defined editor. If an editor is given + (should be the full path to the executable but the regular operating + system search path is used for finding the executable) it overrides + the detected editor. Optionally, some environment variables can be + used. If the editor is closed without changes, `None` is returned. In + case a file is edited directly the return value is always `None` and + `require_save` and `extension` are ignored. + + If the editor cannot be opened a :exc:`UsageError` is raised. + + Note for Windows: to simplify cross-platform usage, the newlines are + automatically converted from POSIX to Windows and vice versa. As such, + the message here will have ``\n`` as newline markers. + + :param text: the text to edit. + :param editor: optionally the editor to use. Defaults to automatic + detection. + :param env: environment variables to forward to the editor. + :param require_save: if this is true, then not saving in the editor + will make the return value become `None`. + :param extension: the extension to tell the editor about. This defaults + to `.txt` but changing this might change syntax + highlighting. + :param filename: if provided it will edit this file instead of the + provided text contents. It will not use a temporary + file as an indirection in that case. + """ + from ._termui_impl import Editor + + ed = Editor(editor=editor, env=env, require_save=require_save, extension=extension) + + if filename is None: + return ed.edit(text) + + ed.edit_file(filename) + return None + + +def launch(url: str, wait: bool = False, locate: bool = False) -> int: + """This function launches the given URL (or filename) in the default + viewer application for this file type. If this is an executable, it + might launch the executable in a new session. The return value is + the exit code of the launched application. Usually, ``0`` indicates + success. + + Examples:: + + click.launch('https://click.palletsprojects.com/') + click.launch('/my/downloaded/file', locate=True) + + .. versionadded:: 2.0 + + :param url: URL or filename of the thing to launch. + :param wait: Wait for the program to exit before returning. This + only works if the launched program blocks. In particular, + ``xdg-open`` on Linux does not block. + :param locate: if this is set to `True` then instead of launching the + application associated with the URL it will attempt to + launch a file manager with the file located. This + might have weird effects if the URL does not point to + the filesystem. + """ + from ._termui_impl import open_url + + return open_url(url, wait=wait, locate=locate) + + +# If this is provided, getchar() calls into this instead. This is used +# for unittesting purposes. +_getchar: t.Optional[t.Callable[[bool], str]] = None + + +def getchar(echo: bool = False) -> str: + """Fetches a single character from the terminal and returns it. This + will always return a unicode character and under certain rare + circumstances this might return more than one character. The + situations which more than one character is returned is when for + whatever reason multiple characters end up in the terminal buffer or + standard input was not actually a terminal. + + Note that this will always read from the terminal, even if something + is piped into the standard input. + + Note for Windows: in rare cases when typing non-ASCII characters, this + function might wait for a second character and then return both at once. + This is because certain Unicode characters look like special-key markers. + + .. versionadded:: 2.0 + + :param echo: if set to `True`, the character read will also show up on + the terminal. The default is to not show it. + """ + global _getchar + + if _getchar is None: + from ._termui_impl import getchar as f + + _getchar = f + + return _getchar(echo) + + +def raw_terminal() -> t.ContextManager[int]: + from ._termui_impl import raw_terminal as f + + return f() + + +def pause(info: t.Optional[str] = None, err: bool = False) -> None: + """This command stops execution and waits for the user to press any + key to continue. This is similar to the Windows batch "pause" + command. If the program is not run through a terminal, this command + will instead do nothing. + + .. versionadded:: 2.0 + + .. versionadded:: 4.0 + Added the `err` parameter. + + :param info: The message to print before pausing. Defaults to + ``"Press any key to continue..."``. + :param err: if set to message goes to ``stderr`` instead of + ``stdout``, the same as with echo. + """ + if not isatty(sys.stdin) or not isatty(sys.stdout): + return + + if info is None: + info = _("Press any key to continue...") + + try: + if info: + echo(info, nl=False, err=err) + try: + getchar() + except (KeyboardInterrupt, EOFError): + pass + finally: + if info: + echo(err=err) diff --git a/venv/Lib/site-packages/click/testing.py b/venv/Lib/site-packages/click/testing.py new file mode 100644 index 0000000..e0df0d2 --- /dev/null +++ b/venv/Lib/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[t.Any]]], charset: str +) -> t.BinaryIO: + # Is already an input stream. + if hasattr(input, "read"): + rv = _find_binary_reader(t.cast(t.IO[t.Any], input)) + + if rv is not None: + return rv + + raise TypeError("Could not find binary reader for input stream.") + + if input is None: + input = b"" + elif isinstance(input, str): + input = input.encode(charset) + + return io.BytesIO(input) + + +class Result: + """Holds the captured result of an invoked CLI script.""" + + def __init__( + self, + runner: "CliRunner", + stdout_bytes: bytes, + stderr_bytes: t.Optional[bytes], + return_value: t.Any, + exit_code: int, + exception: t.Optional[BaseException], + exc_info: t.Optional[ + t.Tuple[t.Type[BaseException], BaseException, TracebackType] + ] = None, + ): + #: The runner that created the result + self.runner = runner + #: The standard output as bytes. + self.stdout_bytes = stdout_bytes + #: The standard error as bytes, or None if not available + self.stderr_bytes = stderr_bytes + #: The value returned from the invoked command. + #: + #: .. versionadded:: 8.0 + self.return_value = return_value + #: The exit code as integer. + self.exit_code = exit_code + #: The exception that happened if one did. + self.exception = exception + #: The traceback + self.exc_info = exc_info + + @property + def output(self) -> str: + """The (standard) output as unicode string.""" + return self.stdout + + @property + def stdout(self) -> str: + """The standard output as unicode string.""" + return self.stdout_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + @property + def stderr(self) -> str: + """The standard error as unicode string.""" + if self.stderr_bytes is None: + raise ValueError("stderr not separately captured") + return self.stderr_bytes.decode(self.runner.charset, "replace").replace( + "\r\n", "\n" + ) + + def __repr__(self) -> str: + exc_str = repr(self.exception) if self.exception else "okay" + return f"<{type(self).__name__} {exc_str}>" + + +class CliRunner: + """The CLI runner provides functionality to invoke a Click command line + script for unittesting purposes in a isolated environment. This only + works in single-threaded systems without any concurrency as it changes the + global interpreter state. + + :param charset: the character set for the input and output data. + :param env: a dictionary with environment variables for overriding. + :param echo_stdin: if this is set to `True`, then reading from stdin writes + to stdout. This is useful for showing examples in + some circumstances. Note that regular prompts + will automatically echo the input. + :param mix_stderr: if this is set to `False`, then stdout and stderr are + preserved as independent streams. This is useful for + Unix-philosophy apps that have predictable stdout and + noisy stderr, such that each may be measured + independently + """ + + def __init__( + self, + charset: str = "utf-8", + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + echo_stdin: bool = False, + mix_stderr: bool = True, + ) -> None: + self.charset = charset + self.env: t.Mapping[str, t.Optional[str]] = env or {} + self.echo_stdin = echo_stdin + self.mix_stderr = mix_stderr + + def get_default_prog_name(self, cli: "BaseCommand") -> str: + """Given a command object it will return the default program name + for it. The default is the `name` attribute or ``"root"`` if not + set. + """ + return cli.name or "root" + + def make_env( + self, overrides: t.Optional[t.Mapping[str, t.Optional[str]]] = None + ) -> t.Mapping[str, t.Optional[str]]: + """Returns the environment overrides for invoking a script.""" + rv = dict(self.env) + if overrides: + rv.update(overrides) + return rv + + @contextlib.contextmanager + def isolation( + self, + input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + color: bool = False, + ) -> t.Iterator[t.Tuple[io.BytesIO, t.Optional[io.BytesIO]]]: + """A context manager that sets up the isolation for invoking of a + command line tool. This sets up stdin with the given input data + and `os.environ` with the overrides from the given dictionary. + This also rebinds some internals in Click to be mocked (like the + prompt functionality). + + This is automatically done in the :meth:`invoke` method. + + :param input: the input stream to put into sys.stdin. + :param env: the environment overrides as dictionary. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + ``stderr`` is opened with ``errors="backslashreplace"`` + instead of the default ``"strict"``. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + """ + bytes_input = make_input_stream(input, self.charset) + echo_input = None + + old_stdin = sys.stdin + old_stdout = sys.stdout + old_stderr = sys.stderr + old_forced_width = formatting.FORCED_WIDTH + formatting.FORCED_WIDTH = 80 + + env = self.make_env(env) + + bytes_output = io.BytesIO() + + if self.echo_stdin: + bytes_input = echo_input = t.cast( + t.BinaryIO, EchoingStdin(bytes_input, bytes_output) + ) + + sys.stdin = text_input = _NamedTextIOWrapper( + bytes_input, encoding=self.charset, name="", mode="r" + ) + + if self.echo_stdin: + # Force unbuffered reads, otherwise TextIOWrapper reads a + # large chunk which is echoed early. + text_input._CHUNK_SIZE = 1 # type: ignore + + sys.stdout = _NamedTextIOWrapper( + bytes_output, encoding=self.charset, name="", mode="w" + ) + + bytes_error = None + if self.mix_stderr: + sys.stderr = sys.stdout + else: + bytes_error = io.BytesIO() + sys.stderr = _NamedTextIOWrapper( + bytes_error, + encoding=self.charset, + name="", + mode="w", + errors="backslashreplace", + ) + + @_pause_echo(echo_input) # type: ignore + def visible_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(prompt or "") + val = text_input.readline().rstrip("\r\n") + sys.stdout.write(f"{val}\n") + sys.stdout.flush() + return val + + @_pause_echo(echo_input) # type: ignore + def hidden_input(prompt: t.Optional[str] = None) -> str: + sys.stdout.write(f"{prompt or ''}\n") + sys.stdout.flush() + return text_input.readline().rstrip("\r\n") + + @_pause_echo(echo_input) # type: ignore + def _getchar(echo: bool) -> str: + char = sys.stdin.read(1) + + if echo: + sys.stdout.write(char) + + sys.stdout.flush() + return char + + default_color = color + + def should_strip_ansi( + stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None + ) -> bool: + if color is None: + return not default_color + return not color + + old_visible_prompt_func = termui.visible_prompt_func + old_hidden_prompt_func = termui.hidden_prompt_func + old__getchar_func = termui._getchar + old_should_strip_ansi = utils.should_strip_ansi # type: ignore + 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[t.Any]]] = None, + env: t.Optional[t.Mapping[str, t.Optional[str]]] = None, + catch_exceptions: bool = True, + color: bool = False, + **extra: t.Any, + ) -> Result: + """Invokes a command in an isolated environment. The arguments are + forwarded directly to the command line script, the `extra` keyword + arguments are passed to the :meth:`~clickpkg.Command.main` function of + the command. + + This returns a :class:`Result` object. + + :param cli: the command to invoke + :param args: the arguments to invoke. It may be given as an iterable + or a string. When given as string it will be interpreted + as a Unix shell command. More details at + :func:`shlex.split`. + :param input: the input data for `sys.stdin`. + :param env: the environment overrides. + :param catch_exceptions: Whether to catch any other exceptions than + ``SystemExit``. + :param extra: the keyword arguments to pass to :meth:`main`. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + + .. versionchanged:: 8.0 + The result object has the ``return_value`` attribute with + the value returned from the invoked command. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionchanged:: 3.0 + Added the ``catch_exceptions`` parameter. + + .. versionchanged:: 3.0 + The result object has the ``exc_info`` attribute with the + traceback if available. + """ + exc_info = None + with self.isolation(input=input, env=env, color=color) as outstreams: + return_value = None + exception: t.Optional[BaseException] = None + exit_code = 0 + + if isinstance(args, str): + args = shlex.split(args) + + try: + prog_name = extra.pop("prog_name") + except KeyError: + prog_name = self.get_default_prog_name(cli) + + try: + return_value = cli.main(args=args or (), prog_name=prog_name, **extra) + except SystemExit as e: + exc_info = sys.exc_info() + e_code = t.cast(t.Optional[t.Union[int, t.Any]], e.code) + + if e_code is None: + e_code = 0 + + if e_code != 0: + exception = e + + if not isinstance(e_code, int): + sys.stdout.write(str(e_code)) + sys.stdout.write("\n") + e_code = 1 + + exit_code = e_code + + except Exception as e: + if not catch_exceptions: + raise + exception = e + exit_code = 1 + exc_info = sys.exc_info() + finally: + sys.stdout.flush() + stdout = outstreams[0].getvalue() + if self.mix_stderr: + stderr = None + else: + stderr = outstreams[1].getvalue() # type: ignore + + return Result( + runner=self, + stdout_bytes=stdout, + stderr_bytes=stderr, + return_value=return_value, + exit_code=exit_code, + exception=exception, + exc_info=exc_info, # type: ignore + ) + + @contextlib.contextmanager + def isolated_filesystem( + self, temp_dir: t.Optional[t.Union[str, "os.PathLike[str]"]] = None + ) -> t.Iterator[str]: + """A context manager that creates a temporary directory and + changes the current working directory to it. This isolates tests + that affect the contents of the CWD to prevent them from + interfering with each other. + + :param temp_dir: Create the temporary directory under this + directory. If given, the created directory is not removed + when exiting. + + .. versionchanged:: 8.0 + Added the ``temp_dir`` parameter. + """ + cwd = os.getcwd() + dt = tempfile.mkdtemp(dir=temp_dir) + os.chdir(dt) + + try: + yield dt + finally: + os.chdir(cwd) + + if temp_dir is None: + try: + shutil.rmtree(dt) + except OSError: # noqa: B014 + pass diff --git a/venv/Lib/site-packages/click/types.py b/venv/Lib/site-packages/click/types.py new file mode 100644 index 0000000..2b1d179 --- /dev/null +++ b/venv/Lib/site-packages/click/types.py @@ -0,0 +1,1089 @@ +import os +import stat +import sys +import typing as t +from datetime import datetime +from gettext import gettext as _ +from gettext import ngettext + +from ._compat import _get_argv_encoding +from ._compat import open_stream +from .exceptions import BadParameter +from .utils import format_filename +from .utils import LazyFile +from .utils import safecall + +if t.TYPE_CHECKING: + import typing_extensions as te + from .core import Context + from .core import Parameter + from .shell_completion import CompletionItem + + +class ParamType: + """Represents the type of a parameter. Validates and converts values + from the command line or Python into the correct type. + + To implement a custom type, subclass and implement at least the + following: + + - The :attr:`name` class attribute must be set. + - Calling an instance of the type with ``None`` must return + ``None``. This is already implemented by default. + - :meth:`convert` must convert string values to the correct type. + - :meth:`convert` must accept values that are already the correct + type. + - It must be able to convert a value if the ``ctx`` and ``param`` + arguments are ``None``. This can occur when converting prompt + input. + """ + + is_composite: t.ClassVar[bool] = False + arity: t.ClassVar[int] = 1 + + #: the descriptive name of this type + name: str + + #: if a list of this type is expected and the value is pulled from a + #: string environment variable, this is what splits it up. `None` + #: means any whitespace. For all parameters the general rule is that + #: whitespace splits them up. The exception are paths and files which + #: are split by ``os.path.pathsep`` by default (":" on Unix and ";" on + #: Windows). + envvar_list_splitter: t.ClassVar[t.Optional[str]] = None + + def to_info_dict(self) -> t.Dict[str, t.Any]: + """Gather information that could be useful for a tool generating + user-facing documentation. + + Use :meth:`click.Context.to_info_dict` to traverse the entire + CLI structure. + + .. versionadded:: 8.0 + """ + # The class name without the "ParamType" suffix. + param_type = type(self).__name__.partition("ParamType")[0] + param_type = param_type.partition("ParameterType")[0] + + # Custom subclasses might not remember to set a name. + if hasattr(self, "name"): + name = self.name + else: + name = param_type + + return {"param_type": param_type, "name": name} + + def __call__( + self, + value: t.Any, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> t.Any: + if value is not None: + return self.convert(value, param, ctx) + + def get_metavar(self, param: "Parameter") -> t.Optional[str]: + """Returns the metavar default for this param if it provides one.""" + + def get_missing_message(self, param: "Parameter") -> t.Optional[str]: + """Optionally might return extra information about a missing + parameter. + + .. versionadded:: 2.0 + """ + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + """Convert the value to the correct type. This is not called if + the value is ``None`` (the missing value). + + This must accept string values from the command line, as well as + values that are already the correct type. It may also convert + other compatible types. + + The ``param`` and ``ctx`` arguments may be ``None`` in certain + situations, such as when converting prompt input. + + If the value cannot be converted, call :meth:`fail` with a + descriptive message. + + :param value: The value to convert. + :param param: The parameter that is using this type to convert + its value. May be ``None``. + :param ctx: The current context that arrived at this value. May + be ``None``. + """ + return value + + def split_envvar_value(self, rv: str) -> t.Sequence[str]: + """Given a value from an environment variable this splits it up + into small chunks depending on the defined envvar list splitter. + + If the splitter is set to `None`, which means that whitespace splits, + then leading and trailing whitespace is ignored. Otherwise, leading + and trailing splitters usually lead to empty items being included. + """ + return (rv or "").split(self.envvar_list_splitter) + + def fail( + self, + message: str, + param: t.Optional["Parameter"] = None, + ctx: t.Optional["Context"] = None, + ) -> "t.NoReturn": + """Helper method to fail with an invalid value message.""" + raise BadParameter(message, ctx=ctx, param=param) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a list of + :class:`~click.shell_completion.CompletionItem` objects for the + incomplete value. Most types do not provide completions, but + some do, and this allows custom types to provide custom + completions as well. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + return [] + + +class CompositeParamType(ParamType): + is_composite = True + + @property + def arity(self) -> int: # type: ignore + raise NotImplementedError() + + +class FuncParamType(ParamType): + def __init__(self, func: t.Callable[[t.Any], t.Any]) -> None: + self.name: str = func.__name__ + self.func = func + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["func"] = self.func + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self.func(value) + except ValueError: + try: + value = str(value) + except UnicodeError: + value = value.decode("utf-8", "replace") + + self.fail(value, param, ctx) + + +class UnprocessedParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + return value + + def __repr__(self) -> str: + return "UNPROCESSED" + + +class StringParamType(ParamType): + name = "text" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, bytes): + enc = _get_argv_encoding() + try: + value = value.decode(enc) + except UnicodeError: + fs_enc = sys.getfilesystemencoding() + if fs_enc != enc: + try: + value = value.decode(fs_enc) + except UnicodeError: + value = value.decode("utf-8", "replace") + else: + value = value.decode("utf-8", "replace") + return value + return str(value) + + def __repr__(self) -> str: + return "STRING" + + +class Choice(ParamType): + """The choice type allows a value to be checked against a fixed set + of supported values. All of these values have to be strings. + + You should only pass a list or tuple of choices. Other iterables + (like generators) may lead to surprising results. + + The resulting value will always be one of the originally passed choices + regardless of ``case_sensitive`` or any ``ctx.token_normalize_func`` + being specified. + + See :ref:`choice-opts` for an example. + + :param case_sensitive: Set to false to make choices case + insensitive. Defaults to true. + """ + + name = "choice" + + def __init__(self, choices: t.Sequence[str], case_sensitive: bool = True) -> None: + self.choices = choices + self.case_sensitive = case_sensitive + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["choices"] = self.choices + info_dict["case_sensitive"] = self.case_sensitive + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + choices_str = "|".join(self.choices) + + # Use curly braces to indicate a required argument. + if param.required and param.param_type_name == "argument": + return f"{{{choices_str}}}" + + # Use square braces to indicate an option or optional argument. + return f"[{choices_str}]" + + def get_missing_message(self, param: "Parameter") -> str: + return _("Choose from:\n\t{choices}").format(choices=",\n\t".join(self.choices)) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + # Match through normalization and case sensitivity + # first do token_normalize_func, then lowercase + # preserve original `value` to produce an accurate message in + # `self.fail` + normed_value = value + normed_choices = {choice: choice for choice in self.choices} + + if ctx is not None and ctx.token_normalize_func is not None: + normed_value = ctx.token_normalize_func(value) + normed_choices = { + ctx.token_normalize_func(normed_choice): original + for normed_choice, original in normed_choices.items() + } + + if not self.case_sensitive: + normed_value = normed_value.casefold() + normed_choices = { + normed_choice.casefold(): original + for normed_choice, original in normed_choices.items() + } + + if normed_value in normed_choices: + return normed_choices[normed_value] + + choices_str = ", ".join(map(repr, self.choices)) + self.fail( + ngettext( + "{value!r} is not {choice}.", + "{value!r} is not one of {choices}.", + len(self.choices), + ).format(value=value, choice=choices_str, choices=choices_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return f"Choice({list(self.choices)})" + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Complete choices that start with the incomplete value. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + str_choices = map(str, self.choices) + + if self.case_sensitive: + matched = (c for c in str_choices if c.startswith(incomplete)) + else: + incomplete = incomplete.lower() + matched = (c for c in str_choices if c.lower().startswith(incomplete)) + + return [CompletionItem(c) for c in matched] + + +class DateTime(ParamType): + """The DateTime type converts date strings into `datetime` objects. + + The format strings which are checked are configurable, but default to some + common (non-timezone aware) ISO 8601 formats. + + When specifying *DateTime* formats, you should only pass a list or a tuple. + Other iterables, like generators, may lead to surprising results. + + The format strings are processed using ``datetime.strptime``, and this + consequently defines the format strings which are allowed. + + Parsing is tried using each format, in order, and the first format which + parses successfully is used. + + :param formats: A list or tuple of date format strings, in the order in + which they should be tried. Defaults to + ``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``, + ``'%Y-%m-%d %H:%M:%S'``. + """ + + name = "datetime" + + def __init__(self, formats: t.Optional[t.Sequence[str]] = None): + self.formats: t.Sequence[str] = formats or [ + "%Y-%m-%d", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%d %H:%M:%S", + ] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["formats"] = self.formats + return info_dict + + def get_metavar(self, param: "Parameter") -> str: + return f"[{'|'.join(self.formats)}]" + + def _try_to_convert_date(self, value: t.Any, format: str) -> t.Optional[datetime]: + try: + return datetime.strptime(value, format) + except ValueError: + return None + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if isinstance(value, datetime): + return value + + for format in self.formats: + converted = self._try_to_convert_date(value, format) + + if converted is not None: + return converted + + formats_str = ", ".join(map(repr, self.formats)) + self.fail( + ngettext( + "{value!r} does not match the format {format}.", + "{value!r} does not match the formats {formats}.", + len(self.formats), + ).format(value=value, format=formats_str, formats=formats_str), + param, + ctx, + ) + + def __repr__(self) -> str: + return "DateTime" + + +class _NumberParamTypeBase(ParamType): + _number_class: t.ClassVar[t.Type[t.Any]] + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + try: + return self._number_class(value) + except ValueError: + self.fail( + _("{value!r} is not a valid {number_type}.").format( + value=value, number_type=self.name + ), + param, + ctx, + ) + + +class _NumberRangeBase(_NumberParamTypeBase): + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + self.min = min + self.max = max + self.min_open = min_open + self.max_open = max_open + self.clamp = clamp + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + min=self.min, + max=self.max, + min_open=self.min_open, + max_open=self.max_open, + clamp=self.clamp, + ) + return info_dict + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import operator + + rv = super().convert(value, param, ctx) + lt_min: bool = self.min is not None and ( + operator.le if self.min_open else operator.lt + )(rv, self.min) + gt_max: bool = self.max is not None and ( + operator.ge if self.max_open else operator.gt + )(rv, self.max) + + if self.clamp: + if lt_min: + return self._clamp(self.min, 1, self.min_open) # type: ignore + + if gt_max: + return self._clamp(self.max, -1, self.max_open) # type: ignore + + if lt_min or gt_max: + self.fail( + _("{value} is not in the range {range}.").format( + value=rv, range=self._describe_range() + ), + param, + ctx, + ) + + return rv + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + """Find the valid value to clamp to bound in the given + direction. + + :param bound: The boundary value. + :param dir: 1 or -1 indicating the direction to move. + :param open: If true, the range does not include the bound. + """ + raise NotImplementedError + + def _describe_range(self) -> str: + """Describe the range for use in help text.""" + if self.min is None: + op = "<" if self.max_open else "<=" + return f"x{op}{self.max}" + + if self.max is None: + op = ">" if self.min_open else ">=" + return f"x{op}{self.min}" + + lop = "<" if self.min_open else "<=" + rop = "<" if self.max_open else "<=" + return f"{self.min}{lop}x{rop}{self.max}" + + def __repr__(self) -> str: + clamp = " clamped" if self.clamp else "" + return f"<{type(self).__name__} {self._describe_range()}{clamp}>" + + +class IntParamType(_NumberParamTypeBase): + name = "integer" + _number_class = int + + def __repr__(self) -> str: + return "INT" + + +class IntRange(_NumberRangeBase, IntParamType): + """Restrict an :data:`click.INT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "integer range" + + def _clamp( # type: ignore + self, bound: int, dir: "te.Literal[1, -1]", open: bool + ) -> int: + if not open: + return bound + + return bound + dir + + +class FloatParamType(_NumberParamTypeBase): + name = "float" + _number_class = float + + def __repr__(self) -> str: + return "FLOAT" + + +class FloatRange(_NumberRangeBase, FloatParamType): + """Restrict a :data:`click.FLOAT` value to a range of accepted + values. See :ref:`ranges`. + + If ``min`` or ``max`` are not passed, any value is accepted in that + direction. If ``min_open`` or ``max_open`` are enabled, the + corresponding boundary is not included in the range. + + If ``clamp`` is enabled, a value outside the range is clamped to the + boundary instead of failing. This is not supported if either + boundary is marked ``open``. + + .. versionchanged:: 8.0 + Added the ``min_open`` and ``max_open`` parameters. + """ + + name = "float range" + + def __init__( + self, + min: t.Optional[float] = None, + max: t.Optional[float] = None, + min_open: bool = False, + max_open: bool = False, + clamp: bool = False, + ) -> None: + super().__init__( + min=min, max=max, min_open=min_open, max_open=max_open, clamp=clamp + ) + + if (min_open or max_open) and clamp: + raise TypeError("Clamping is not supported for open bounds.") + + def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float: + if not open: + return bound + + # Could use Python 3.9's math.nextafter here, but clamping an + # open float range doesn't seem to be particularly useful. It's + # left up to the user to write a callback to do it if needed. + raise RuntimeError("Clamping is not supported for open bounds.") + + +class BoolParamType(ParamType): + name = "boolean" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + if value in {False, True}: + return bool(value) + + norm = value.strip().lower() + + if norm in {"1", "true", "t", "yes", "y", "on"}: + return True + + if norm in {"0", "false", "f", "no", "n", "off"}: + return False + + self.fail( + _("{value!r} is not a valid boolean.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "BOOL" + + +class UUIDParameterType(ParamType): + name = "uuid" + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + import uuid + + if isinstance(value, uuid.UUID): + return value + + value = value.strip() + + try: + return uuid.UUID(value) + except ValueError: + self.fail( + _("{value!r} is not a valid UUID.").format(value=value), param, ctx + ) + + def __repr__(self) -> str: + return "UUID" + + +class File(ParamType): + """Declares a parameter to be a file for reading or writing. The file + is automatically closed once the context tears down (after the command + finished working). + + Files can be opened for reading or writing. The special value ``-`` + indicates stdin or stdout depending on the mode. + + By default, the file is opened for reading text data, but it can also be + opened in binary mode or for writing. The encoding parameter can be used + to force a specific encoding. + + The `lazy` flag controls if the file should be opened immediately or upon + first IO. The default is to be non-lazy for standard input and output + streams as well as files opened for reading, `lazy` otherwise. When opening a + file lazily for reading, it is still opened temporarily for validation, but + will not be held open until first IO. lazy is mainly useful when opening + for writing to avoid creating the file until it is needed. + + 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: t.ClassVar[str] = os.path.pathsep + + def __init__( + self, + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + lazy: t.Optional[bool] = None, + atomic: bool = False, + ) -> None: + self.mode = mode + self.encoding = encoding + self.errors = errors + self.lazy = lazy + self.atomic = atomic + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update(mode=self.mode, encoding=self.encoding) + return info_dict + + def resolve_lazy_flag(self, value: "t.Union[str, os.PathLike[str]]") -> bool: + if self.lazy is not None: + return self.lazy + if os.fspath(value) == "-": + return False + elif "w" in self.mode: + return True + return False + + def convert( + self, + value: t.Union[str, "os.PathLike[str]", t.IO[t.Any]], + param: t.Optional["Parameter"], + ctx: t.Optional["Context"], + ) -> t.IO[t.Any]: + if _is_file_like(value): + return value + + value = t.cast("t.Union[str, os.PathLike[str]]", value) + + try: + lazy = self.resolve_lazy_flag(value) + + if lazy: + lf = LazyFile( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + + if ctx is not None: + ctx.call_on_close(lf.close_intelligently) + + return t.cast(t.IO[t.Any], lf) + + f, should_close = open_stream( + value, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + + # If a context is provided, we automatically close the file + # at the end of the context execution (or flush out). If a + # context does not exist, it's the caller's responsibility to + # properly close the file. This for instance happens when the + # type is used with prompts. + if ctx is not None: + if should_close: + ctx.call_on_close(safecall(f.close)) + else: + ctx.call_on_close(safecall(f.flush)) + + return f + except OSError as e: # noqa: B014 + self.fail(f"'{format_filename(value)}': {e.strerror}", param, ctx) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide file path completions. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + return [CompletionItem(incomplete, type="file")] + + +def _is_file_like(value: t.Any) -> "te.TypeGuard[t.IO[t.Any]]": + return hasattr(value, "read") or hasattr(value, "write") + + +class Path(ParamType): + """The ``Path`` type is similar to the :class:`File` type, but + returns the filename instead of an open file. Various checks can be + enabled to validate the type of file and permissions. + + :param exists: The file or directory needs to exist for the value to + be valid. If this is not set to ``True``, and the file does not + exist, then all further checks are silently skipped. + :param file_okay: Allow a file as a value. + :param dir_okay: Allow a directory as a value. + :param readable: if true, a readable check is performed. + :param writable: if true, a writable check is performed. + :param executable: if true, an executable check is performed. + :param resolve_path: Make the value absolute and resolve any + symlinks. A ``~`` is not expanded, as this is supposed to be + done by the shell only. + :param allow_dash: Allow a single dash as a value, which indicates + a standard stream (but does not open it). Use + :func:`~click.open_file` to handle opening this value. + :param path_type: Convert the incoming path value to this type. If + ``None``, keep Python's default, which is ``str``. Useful to + convert to :class:`pathlib.Path`. + + .. versionchanged:: 8.1 + Added the ``executable`` parameter. + + .. versionchanged:: 8.0 + Allow passing ``path_type=pathlib.Path``. + + .. versionchanged:: 6.0 + Added the ``allow_dash`` parameter. + """ + + envvar_list_splitter: t.ClassVar[str] = os.path.pathsep + + def __init__( + self, + exists: bool = False, + file_okay: bool = True, + dir_okay: bool = True, + writable: bool = False, + readable: bool = True, + resolve_path: bool = False, + allow_dash: bool = False, + path_type: t.Optional[t.Type[t.Any]] = None, + executable: bool = False, + ): + self.exists = exists + self.file_okay = file_okay + self.dir_okay = dir_okay + self.readable = readable + self.writable = writable + self.executable = executable + self.resolve_path = resolve_path + self.allow_dash = allow_dash + self.type = path_type + + if self.file_okay and not self.dir_okay: + self.name: str = _("file") + elif self.dir_okay and not self.file_okay: + self.name = _("directory") + else: + self.name = _("path") + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict.update( + exists=self.exists, + file_okay=self.file_okay, + dir_okay=self.dir_okay, + writable=self.writable, + readable=self.readable, + allow_dash=self.allow_dash, + ) + return info_dict + + def coerce_path_result( + self, value: "t.Union[str, os.PathLike[str]]" + ) -> "t.Union[str, bytes, os.PathLike[str]]": + if self.type is not None and not isinstance(value, self.type): + if self.type is str: + return os.fsdecode(value) + elif self.type is bytes: + return os.fsencode(value) + else: + return t.cast("os.PathLike[str]", self.type(value)) + + return value + + def convert( + self, + value: "t.Union[str, os.PathLike[str]]", + param: t.Optional["Parameter"], + ctx: t.Optional["Context"], + ) -> "t.Union[str, bytes, os.PathLike[str]]": + rv = value + + is_dash = self.file_okay and self.allow_dash and rv in (b"-", "-") + + if not is_dash: + if self.resolve_path: + # os.path.realpath doesn't resolve symlinks on Windows + # until Python 3.8. Use pathlib for now. + import pathlib + + rv = os.fsdecode(pathlib.Path(rv).resolve()) + + try: + st = os.stat(rv) + except OSError: + if not self.exists: + return self.coerce_path_result(rv) + self.fail( + _("{name} {filename!r} does not exist.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + + if not self.file_okay and stat.S_ISREG(st.st_mode): + self.fail( + _("{name} {filename!r} is a file.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + if not self.dir_okay and stat.S_ISDIR(st.st_mode): + self.fail( + _("{name} '{filename}' is a directory.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + + if self.readable and not os.access(rv, os.R_OK): + self.fail( + _("{name} {filename!r} is not readable.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + + if self.writable and not os.access(rv, os.W_OK): + self.fail( + _("{name} {filename!r} is not writable.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + + if self.executable and not os.access(value, os.X_OK): + self.fail( + _("{name} {filename!r} is not executable.").format( + name=self.name.title(), filename=format_filename(value) + ), + param, + ctx, + ) + + return self.coerce_path_result(rv) + + def shell_complete( + self, ctx: "Context", param: "Parameter", incomplete: str + ) -> t.List["CompletionItem"]: + """Return a special completion marker that tells the completion + system to use the shell to provide path completions for only + directories or any paths. + + :param ctx: Invocation context for this command. + :param param: The parameter that is requesting completion. + :param incomplete: Value being completed. May be empty. + + .. versionadded:: 8.0 + """ + from click.shell_completion import CompletionItem + + type = "dir" if self.dir_okay and not self.file_okay else "file" + return [CompletionItem(incomplete, type=type)] + + +class Tuple(CompositeParamType): + """The default behavior of Click is to apply a type on a value directly. + This works well in most cases, except for when `nargs` is set to a fixed + count and different types should be used for different items. In this + case the :class:`Tuple` type can be used. This type can only be used + if `nargs` is set to a fixed number. + + For more information see :ref:`tuple-type`. + + This can be selected by using a Python tuple literal as a type. + + :param types: a list of types that should be used for the tuple items. + """ + + def __init__(self, types: t.Sequence[t.Union[t.Type[t.Any], ParamType]]) -> None: + self.types: t.Sequence[ParamType] = [convert_type(ty) for ty in types] + + def to_info_dict(self) -> t.Dict[str, t.Any]: + info_dict = super().to_info_dict() + info_dict["types"] = [t.to_info_dict() for t in self.types] + return info_dict + + @property + def name(self) -> str: # type: ignore + return f"<{' '.join(ty.name for ty in self.types)}>" + + @property + def arity(self) -> int: # type: ignore + return len(self.types) + + def convert( + self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"] + ) -> t.Any: + len_type = len(self.types) + len_value = len(value) + + if len_value != len_type: + self.fail( + ngettext( + "{len_type} values are required, but {len_value} was given.", + "{len_type} values are required, but {len_value} were given.", + len_value, + ).format(len_type=len_type, len_value=len_value), + param=param, + ctx=ctx, + ) + + return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value)) + + +def convert_type(ty: t.Optional[t.Any], default: t.Optional[t.Any] = None) -> ParamType: + """Find the most appropriate :class:`ParamType` for the given Python + type. If the type isn't provided, it can be inferred from a default + value. + """ + guessed_type = False + + if ty is None and default is not None: + if isinstance(default, (tuple, list)): + # If the default is empty, ty will remain None and will + # return STRING. + if default: + item = default[0] + + # A tuple of tuples needs to detect the inner types. + # Can't call convert recursively because that would + # incorrectly unwind the tuple to a single type. + if isinstance(item, (tuple, list)): + ty = tuple(map(type, item)) + else: + ty = type(item) + else: + ty = type(default) + + guessed_type = True + + if isinstance(ty, tuple): + return Tuple(ty) + + if isinstance(ty, ParamType): + return ty + + if ty is str or ty is None: + return STRING + + if ty is int: + return INT + + if ty is float: + return FLOAT + + if ty is bool: + return BOOL + + if guessed_type: + return STRING + + if __debug__: + try: + if issubclass(ty, ParamType): + raise AssertionError( + f"Attempted to use an uninstantiated parameter type ({ty})." + ) + except TypeError: + # ty is an instance (correct), so issubclass fails. + pass + + return FuncParamType(ty) + + +#: A dummy parameter type that just does nothing. From a user's +#: perspective this appears to just be the same as `STRING` but +#: internally no string conversion takes place if the input was bytes. +#: This is usually useful when working with file paths as they can +#: appear in bytes and unicode. +#: +#: For path related uses the :class:`Path` type is a better choice but +#: there are situations where an unprocessed type is useful which is why +#: it is is provided. +#: +#: .. versionadded:: 4.0 +UNPROCESSED = UnprocessedParamType() + +#: A unicode string parameter type which is the implicit default. This +#: can also be selected by using ``str`` as type. +STRING = StringParamType() + +#: An integer parameter. This can also be selected by using ``int`` as +#: type. +INT = IntParamType() + +#: A floating point value parameter. This can also be selected by using +#: ``float`` as type. +FLOAT = FloatParamType() + +#: A boolean parameter. This is the default for boolean flags. This can +#: also be selected by using ``bool`` as a type. +BOOL = BoolParamType() + +#: A UUID parameter. +UUID = UUIDParameterType() diff --git a/venv/Lib/site-packages/click/utils.py b/venv/Lib/site-packages/click/utils.py new file mode 100644 index 0000000..d536434 --- /dev/null +++ b/venv/Lib/site-packages/click/utils.py @@ -0,0 +1,624 @@ +import os +import re +import sys +import typing as t +from functools import update_wrapper +from types import ModuleType +from types import TracebackType + +from ._compat import _default_text_stderr +from ._compat import _default_text_stdout +from ._compat import _find_binary_writer +from ._compat import auto_wrap_for_ansi +from ._compat import binary_streams +from ._compat import open_stream +from ._compat import should_strip_ansi +from ._compat import strip_ansi +from ._compat import text_streams +from ._compat import WIN +from .globals import resolve_color_default + +if t.TYPE_CHECKING: + import typing_extensions as te + + P = te.ParamSpec("P") + +R = t.TypeVar("R") + + +def _posixify(name: str) -> str: + return "-".join(name.split()).lower() + + +def safecall(func: "t.Callable[P, R]") -> "t.Callable[P, t.Optional[R]]": + """Wraps a function so that it swallows exceptions.""" + + def wrapper(*args: "P.args", **kwargs: "P.kwargs") -> t.Optional[R]: + try: + return func(*args, **kwargs) + except Exception: + pass + return None + + return update_wrapper(wrapper, func) + + +def make_str(value: t.Any) -> str: + """Converts a value into a valid string.""" + if isinstance(value, bytes): + try: + return value.decode(sys.getfilesystemencoding()) + except UnicodeError: + return value.decode("utf-8", "replace") + return str(value) + + +def make_default_short_help(help: str, max_length: int = 45) -> str: + """Returns a condensed version of help string.""" + # Consider only the first paragraph. + paragraph_end = help.find("\n\n") + + if paragraph_end != -1: + help = help[:paragraph_end] + + # Collapse newlines, tabs, and spaces. + words = help.split() + + if not words: + return "" + + # The first paragraph started with a "no rewrap" marker, ignore it. + if words[0] == "\b": + words = words[1:] + + total_length = 0 + last_index = len(words) - 1 + + for i, word in enumerate(words): + total_length += len(word) + (i > 0) + + if total_length > max_length: # too long, truncate + break + + if word[-1] == ".": # sentence end, truncate without "..." + return " ".join(words[: i + 1]) + + if total_length == max_length and i != last_index: + break # not at sentence end, truncate with "..." + else: + return " ".join(words) # no truncation needed + + # Account for the length of the suffix. + total_length += len("...") + + # remove words until the length is short enough + while i > 0: + total_length -= len(words[i]) + (i > 0) + + if total_length <= max_length: + break + + i -= 1 + + return " ".join(words[:i]) + "..." + + +class LazyFile: + """A lazy file works like a regular file but it does not fully open + the file but it does perform some basic checks early to see if the + filename parameter does make sense. This is useful for safely opening + files for writing. + """ + + def __init__( + self, + filename: t.Union[str, "os.PathLike[str]"], + mode: str = "r", + encoding: t.Optional[str] = None, + errors: t.Optional[str] = "strict", + atomic: bool = False, + ): + self.name: str = os.fspath(filename) + self.mode = mode + self.encoding = encoding + self.errors = errors + self.atomic = atomic + self._f: t.Optional[t.IO[t.Any]] + self.should_close: bool + + if self.name == "-": + self._f, self.should_close = open_stream(filename, mode, encoding, errors) + else: + if "r" in mode: + # Open and close the file in case we're opening it for + # reading so that we can catch at least some errors in + # some cases early. + open(filename, mode).close() + self._f = None + self.should_close = True + + def __getattr__(self, name: str) -> t.Any: + return getattr(self.open(), name) + + def __repr__(self) -> str: + if self._f is not None: + return repr(self._f) + return f"" + + def open(self) -> t.IO[t.Any]: + """Opens the file if it's not yet open. This call might fail with + a :exc:`FileError`. Not handling this error will produce an error + that Click shows. + """ + if self._f is not None: + return self._f + try: + rv, self.should_close = open_stream( + self.name, self.mode, self.encoding, self.errors, atomic=self.atomic + ) + except OSError as e: # 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: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + self.close_intelligently() + + def __iter__(self) -> t.Iterator[t.AnyStr]: + self.open() + return iter(self._f) # type: ignore + + +class KeepOpenFile: + def __init__(self, file: t.IO[t.Any]) -> None: + self._file: t.IO[t.Any] = file + + def __getattr__(self, name: str) -> t.Any: + return getattr(self._file, name) + + def __enter__(self) -> "KeepOpenFile": + return self + + def __exit__( + self, + exc_type: t.Optional[t.Type[BaseException]], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], + ) -> None: + pass + + def __repr__(self) -> str: + return repr(self._file) + + def __iter__(self) -> t.Iterator[t.AnyStr]: + return iter(self._file) + + +def echo( + message: t.Optional[t.Any] = None, + file: t.Optional[t.IO[t.Any]] = None, + nl: bool = True, + err: bool = False, + color: t.Optional[bool] = None, +) -> None: + """Print a message and newline to stdout or a file. This should be + used instead of :func:`print` because it provides better support + for different data, files, and environments. + + Compared to :func:`print`, this does the following: + + - Ensures that the output encoding is not misconfigured on Linux. + - Supports Unicode in the Windows console. + - Supports writing to binary outputs, and supports writing bytes + to text outputs. + - Supports colors and styles on Windows. + - Removes ANSI color and style codes if the output does not look + like an interactive terminal. + - Always flushes the output. + + :param message: The string or bytes to output. Other objects are + converted to strings. + :param file: The file to write to. Defaults to ``stdout``. + :param err: Write to ``stderr`` instead of ``stdout``. + :param nl: Print a newline after the message. Enabled by default. + :param color: Force showing or hiding colors and other styles. By + default Click will remove color if the output does not look like + an interactive terminal. + + .. versionchanged:: 6.0 + Support Unicode output on the Windows console. Click does not + modify ``sys.stdout``, so ``sys.stdout.write()`` and ``print()`` + will still not support Unicode. + + .. versionchanged:: 4.0 + Added the ``color`` parameter. + + .. versionadded:: 3.0 + Added the ``err`` parameter. + + .. versionchanged:: 2.0 + Support colors on Windows if colorama is installed. + """ + if file is None: + if err: + file = _default_text_stderr() + else: + file = _default_text_stdout() + + # There are no standard streams attached to write to. For example, + # pythonw on Windows. + if file is None: + return + + # Convert non bytes/text into the native string type. + if message is not None and not isinstance(message, (str, bytes, bytearray)): + out: t.Optional[t.Union[str, bytes]] = str(message) + else: + out = message + + if nl: + out = out or "" + if isinstance(out, str): + out += "\n" + else: + out += b"\n" + + if not out: + file.flush() + return + + # If there is a message and the value looks like bytes, we manually + # need to find the binary stream and write the message in there. + # This is done separately so that most stream types will work as you + # would expect. Eg: you can write to StringIO for other cases. + if isinstance(out, (bytes, bytearray)): + binary_file = _find_binary_writer(file) + + if binary_file is not None: + file.flush() + binary_file.write(out) + binary_file.flush() + return + + # ANSI style code support. For no message or bytes, nothing happens. + # When outputting to a file instead of a terminal, strip codes. + else: + color = resolve_color_default(color) + + if should_strip_ansi(file, color): + out = strip_ansi(out) + elif WIN: + if auto_wrap_for_ansi is not None: + file = auto_wrap_for_ansi(file) # 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[t.Any]: + """Open a file, with extra behavior to handle ``'-'`` to indicate + a standard stream, lazy open on write, and atomic write. Similar to + the behavior of the :class:`~click.File` param type. + + If ``'-'`` is given to open ``stdout`` or ``stdin``, the stream is + wrapped so that using it in a context manager will not close it. + This makes it possible to use the function without accidentally + closing a standard stream: + + .. code-block:: python + + with open_file(filename) as f: + ... + + :param filename: The name of the file to open, or ``'-'`` for + ``stdin``/``stdout``. + :param mode: The mode in which to open the file. + :param encoding: The encoding to decode or encode a file opened in + text mode. + :param errors: The error handling mode. + :param lazy: Wait to open the file until it is accessed. For read + mode, the file is temporarily opened to raise access errors + early, then closed until it is read again. + :param atomic: Write to a temporary file and replace the given file + on close. + + .. versionadded:: 3.0 + """ + if lazy: + return t.cast( + t.IO[t.Any], LazyFile(filename, mode, encoding, errors, atomic=atomic) + ) + + f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic) + + if not should_close: + f = t.cast(t.IO[t.Any], KeepOpenFile(f)) + + return f + + +def format_filename( + filename: "t.Union[str, bytes, os.PathLike[str], os.PathLike[bytes]]", + shorten: bool = False, +) -> str: + """Format a filename as a string for display. Ensures the filename can be + displayed by replacing any invalid bytes or surrogate escapes in the name + with the replacement character ``�``. + + Invalid bytes or surrogate escapes will raise an error when written to a + stream with ``errors="strict". This will typically happen with ``stdout`` + when the locale is something like ``en_GB.UTF-8``. + + Many scenarios *are* safe to write surrogates though, due to PEP 538 and + PEP 540, including: + + - Writing to ``stderr``, which uses ``errors="backslashreplace"``. + - The system has ``LANG=C.UTF-8``, ``C``, or ``POSIX``. Python opens + stdout and stderr with ``errors="surrogateescape"``. + - None of ``LANG/LC_*`` are set. Python assumes ``LANG=C.UTF-8``. + - Python is started in UTF-8 mode with ``PYTHONUTF8=1`` or ``-X utf8``. + Python opens stdout and stderr with ``errors="surrogateescape"``. + + :param filename: formats a filename for UI display. This will also convert + the filename into unicode without failing. + :param shorten: this optionally shortens the filename to strip of the + path that leads up to it. + """ + if shorten: + filename = os.path.basename(filename) + else: + filename = os.fspath(filename) + + if isinstance(filename, bytes): + filename = filename.decode(sys.getfilesystemencoding(), "replace") + else: + filename = filename.encode("utf-8", "surrogateescape").decode( + "utf-8", "replace" + ) + + return filename + + +def get_app_dir(app_name: str, roaming: bool = True, force_posix: bool = False) -> str: + r"""Returns the config folder for the application. The default behavior + is to return whatever is most appropriate for the operating system. + + To give you an idea, for an app called ``"Foo Bar"``, something like + the following folders could be returned: + + Mac OS X: + ``~/Library/Application Support/Foo Bar`` + Mac OS X (POSIX): + ``~/.foo-bar`` + Unix: + ``~/.config/foo-bar`` + Unix (POSIX): + ``~/.foo-bar`` + Windows (roaming): + ``C:\Users\\AppData\Roaming\Foo Bar`` + Windows (not roaming): + ``C:\Users\\AppData\Local\Foo Bar`` + + .. versionadded:: 2.0 + + :param app_name: the application name. This should be properly capitalized + and can contain whitespace. + :param roaming: controls if the folder should be roaming or not on Windows. + Has no effect otherwise. + :param force_posix: if this is set to `True` then on any POSIX system the + folder will be stored in the home folder with a leading + dot instead of the XDG config home or darwin's + application support folder. + """ + if WIN: + key = "APPDATA" if roaming else "LOCALAPPDATA" + folder = os.environ.get(key) + if folder is None: + folder = os.path.expanduser("~") + return os.path.join(folder, app_name) + if force_posix: + return os.path.join(os.path.expanduser(f"~/.{_posixify(app_name)}")) + if sys.platform == "darwin": + return os.path.join( + os.path.expanduser("~/Library/Application Support"), app_name + ) + return os.path.join( + os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")), + _posixify(app_name), + ) + + +class PacifyFlushWrapper: + """This wrapper is used to catch and suppress BrokenPipeErrors resulting + from ``.flush()`` being called on broken pipe during the shutdown/final-GC + of the Python interpreter. Notably ``.flush()`` is always called on + ``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any + other cleanup code, and the case where the underlying file is not a broken + pipe, all calls and attributes are proxied. + """ + + def __init__(self, wrapped: t.IO[t.Any]) -> None: + self.wrapped = wrapped + + def flush(self) -> None: + try: + self.wrapped.flush() + except OSError as e: + import errno + + if e.errno != errno.EPIPE: + raise + + def __getattr__(self, attr: str) -> t.Any: + return getattr(self.wrapped, attr) + + +def _detect_program_name( + path: t.Optional[str] = None, _main: t.Optional[ModuleType] = None +) -> str: + """Determine the command used to run the program, for use in help + text. If a file or entry point was executed, the file name is + returned. If ``python -m`` was used to execute a module or package, + ``python -m name`` is returned. + + This doesn't try to be too precise, the goal is to give a concise + name for help text. Files are only shown as their name without the + path. ``python`` is only shown for modules, and the full path to + ``sys.executable`` is not shown. + + :param path: The Python file being executed. Python puts this in + ``sys.argv[0]``, which is used by default. + :param _main: The ``__main__`` module. This should only be passed + during internal testing. + + .. versionadded:: 8.0 + Based on command args detection in the Werkzeug reloader. + + :meta private: + """ + if _main is None: + _main = sys.modules["__main__"] + + if not path: + path = sys.argv[0] + + # The value of __package__ indicates how Python was called. It may + # not exist if a setuptools script is installed as an egg. It may be + # set incorrectly for entry points created with pip on Windows. + # It is set to "" inside a Shiv or PEX zipapp. + if getattr(_main, "__package__", None) in {None, ""} or ( + os.name == "nt" + and _main.__package__ == "" + and not os.path.exists(path) + and os.path.exists(f"{path}.exe") + ): + # Executed a file, like "python app.py". + return os.path.basename(path) + + # Executed a module, like "python -m example". + # Rewritten by Python from "-m script" to "/path/to/script.py". + # Need to look at main module to determine how it was executed. + py_module = t.cast(str, _main.__package__) + name = os.path.splitext(os.path.basename(path))[0] + + # A submodule like "example.cli". + if name != "__main__": + py_module = f"{py_module}.{name}" + + return f"python -m {py_module.lstrip('.')}" + + +def _expand_args( + args: t.Iterable[str], + *, + user: bool = True, + env: bool = True, + glob_recursive: bool = True, +) -> t.List[str]: + """Simulate Unix shell expansion with Python functions. + + See :func:`glob.glob`, :func:`os.path.expanduser`, and + :func:`os.path.expandvars`. + + This is intended for use on Windows, where the shell does not do any + expansion. It may not exactly match what a Unix shell would do. + + :param args: List of command line arguments to expand. + :param user: Expand user home directory. + :param env: Expand environment variables. + :param glob_recursive: ``**`` matches directories recursively. + + .. versionchanged:: 8.1 + Invalid glob patterns are treated as empty expansions rather + than raising an error. + + .. versionadded:: 8.0 + + :meta private: + """ + from glob import glob + + out = [] + + for arg in args: + if user: + arg = os.path.expanduser(arg) + + if env: + arg = os.path.expandvars(arg) + + try: + matches = glob(arg, recursive=glob_recursive) + except re.error: + matches = [] + + if not matches: + out.append(arg) + else: + out.extend(matches) + + return out diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER b/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA b/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA new file mode 100644 index 0000000..a1b5c57 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/METADATA @@ -0,0 +1,441 @@ +Metadata-Version: 2.1 +Name: colorama +Version: 0.4.6 +Summary: Cross-platform colored terminal text. +Project-URL: Homepage, https://github.com/tartley/colorama +Author-email: Jonathan Hartley +License-File: LICENSE.txt +Keywords: ansi,color,colour,crossplatform,terminal,text,windows,xplatform +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Terminals +Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7 +Description-Content-Type: text/x-rst + +.. image:: https://img.shields.io/pypi/v/colorama.svg + :target: https://pypi.org/project/colorama/ + :alt: Latest Version + +.. image:: https://img.shields.io/pypi/pyversions/colorama.svg + :target: https://pypi.org/project/colorama/ + :alt: Supported Python versions + +.. image:: https://github.com/tartley/colorama/actions/workflows/test.yml/badge.svg + :target: https://github.com/tartley/colorama/actions/workflows/test.yml + :alt: Build Status + +Colorama +======== + +Makes ANSI escape character sequences (for producing colored terminal text and +cursor positioning) work under MS Windows. + +.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif + :target: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2MZ9D2GMLYCUJ&item_name=Colorama¤cy_code=USD + :alt: Donate with Paypal + +`PyPI for releases `_ | +`Github for source `_ | +`Colorama for enterprise on Tidelift `_ + +If you find Colorama useful, please |donate| to the authors. Thank you! + +Installation +------------ + +Tested on CPython 2.7, 3.7, 3.8, 3.9 and 3.10 and Pypy 2.7 and 3.8. + +No requirements other than the standard library. + +.. code-block:: bash + + pip install colorama + # or + conda install -c anaconda colorama + +Description +----------- + +ANSI escape character sequences have long been used to produce colored terminal +text and cursor positioning on Unix and Macs. Colorama makes this work on +Windows, too, by wrapping ``stdout``, stripping ANSI sequences it finds (which +would appear as gobbledygook in the output), and converting them into the +appropriate win32 calls to modify the state of the terminal. On other platforms, +Colorama does nothing. + +This has the upshot of providing a simple cross-platform API for printing +colored terminal text from Python, and has the happy side-effect that existing +applications or libraries which use ANSI sequences to produce colored output on +Linux or Macs can now also work on Windows, simply by calling +``colorama.just_fix_windows_console()`` (since v0.4.6) or ``colorama.init()`` +(all versions, but may have other side-effects – see below). + +An alternative approach is to install ``ansi.sys`` on Windows machines, which +provides the same behaviour for all applications running in terminals. Colorama +is intended for situations where that isn't easy (e.g., maybe your app doesn't +have an installer.) + +Demo scripts in the source code repository print some colored text using +ANSI sequences. Compare their output under Gnome-terminal's built in ANSI +handling, versus on Windows Command-Prompt using Colorama: + +.. image:: https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png + :width: 661 + :height: 357 + :alt: ANSI sequences on Ubuntu under gnome-terminal. + +.. image:: https://github.com/tartley/colorama/raw/master/screenshots/windows-demo.png + :width: 668 + :height: 325 + :alt: Same ANSI sequences on Windows, using Colorama. + +These screenshots show that, on Windows, Colorama does not support ANSI 'dim +text'; it looks the same as 'normal text'. + +Usage +----- + +Initialisation +.............. + +If the only thing you want from Colorama is to get ANSI escapes to work on +Windows, then run: + +.. code-block:: python + + from colorama import just_fix_windows_console + just_fix_windows_console() + +If you're on a recent version of Windows 10 or better, and your stdout/stderr +are pointing to a Windows console, then this will flip the magic configuration +switch to enable Windows' built-in ANSI support. + +If you're on an older version of Windows, and your stdout/stderr are pointing to +a Windows console, then this will wrap ``sys.stdout`` and/or ``sys.stderr`` in a +magic file object that intercepts ANSI escape sequences and issues the +appropriate Win32 calls to emulate them. + +In all other circumstances, it does nothing whatsoever. Basically the idea is +that this makes Windows act like Unix with respect to ANSI escape handling. + +It's safe to call this function multiple times. It's safe to call this function +on non-Windows platforms, but it won't do anything. It's safe to call this +function when one or both of your stdout/stderr are redirected to a file – it +won't do anything to those streams. + +Alternatively, you can use the older interface with more features (but also more +potential footguns): + +.. code-block:: python + + from colorama import init + init() + +This does the same thing as ``just_fix_windows_console``, except for the +following differences: + +- It's not safe to call ``init`` multiple times; you can end up with multiple + layers of wrapping and broken ANSI support. + +- Colorama will apply a heuristic to guess whether stdout/stderr support ANSI, + and if it thinks they don't, then it will wrap ``sys.stdout`` and + ``sys.stderr`` in a magic file object that strips out ANSI escape sequences + before printing them. This happens on all platforms, and can be convenient if + you want to write your code to emit ANSI escape sequences unconditionally, and + let Colorama decide whether they should actually be output. But note that + Colorama's heuristic is not particularly clever. + +- ``init`` also accepts explicit keyword args to enable/disable various + functionality – see below. + +To stop using Colorama before your program exits, simply call ``deinit()``. +This will restore ``stdout`` and ``stderr`` to their original values, so that +Colorama is disabled. To resume using Colorama again, call ``reinit()``; it is +cheaper than calling ``init()`` again (but does the same thing). + +Most users should depend on ``colorama >= 0.4.6``, and use +``just_fix_windows_console``. The old ``init`` interface will be supported +indefinitely for backwards compatibility, but we don't plan to fix any issues +with it, also for backwards compatibility. + +Colored Output +.............. + +Cross-platform printing of colored text can then be done using Colorama's +constant shorthand for ANSI escape sequences. These are deliberately +rudimentary, see below. + +.. code-block:: python + + from colorama import Fore, Back, Style + print(Fore.RED + 'some red text') + print(Back.GREEN + 'and with a green background') + print(Style.DIM + 'and in dim text') + print(Style.RESET_ALL) + print('back to normal now') + +...or simply by manually printing ANSI sequences from your own code: + +.. code-block:: python + + print('\033[31m' + 'some red text') + print('\033[39m') # and reset to default color + +...or, Colorama can be used in conjunction with existing ANSI libraries +such as the venerable `Termcolor `_ +the fabulous `Blessings `_, +or the incredible `_Rich `_. + +If you wish Colorama's Fore, Back and Style constants were more capable, +then consider using one of the above highly capable libraries to generate +colors, etc, and use Colorama just for its primary purpose: to convert +those ANSI sequences to also work on Windows: + +SIMILARLY, do not send PRs adding the generation of new ANSI types to Colorama. +We are only interested in converting ANSI codes to win32 API calls, not +shortcuts like the above to generate ANSI characters. + +.. code-block:: python + + from colorama import just_fix_windows_console + from termcolor import colored + + # use Colorama to make Termcolor work on Windows too + just_fix_windows_console() + + # then use Termcolor for all colored text output + print(colored('Hello, World!', 'green', 'on_red')) + +Available formatting constants are:: + + Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. + Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. + Style: DIM, NORMAL, BRIGHT, RESET_ALL + +``Style.RESET_ALL`` resets foreground, background, and brightness. Colorama will +perform this reset automatically on program exit. + +These are fairly well supported, but not part of the standard:: + + Fore: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX + Back: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX + +Cursor Positioning +.................. + +ANSI codes to reposition the cursor are supported. See ``demos/demo06.py`` for +an example of how to generate them. + +Init Keyword Args +................. + +``init()`` accepts some ``**kwargs`` to override default behaviour. + +init(autoreset=False): + If you find yourself repeatedly sending reset sequences to turn off color + changes at the end of every print, then ``init(autoreset=True)`` will + automate that: + + .. code-block:: python + + from colorama import init + init(autoreset=True) + print(Fore.RED + 'some red text') + print('automatically back to default color again') + +init(strip=None): + Pass ``True`` or ``False`` to override whether ANSI codes should be + stripped from the output. The default behaviour is to strip if on Windows + or if output is redirected (not a tty). + +init(convert=None): + Pass ``True`` or ``False`` to override whether to convert ANSI codes in the + output into win32 calls. The default behaviour is to convert if on Windows + and output is to a tty (terminal). + +init(wrap=True): + On Windows, Colorama works by replacing ``sys.stdout`` and ``sys.stderr`` + with proxy objects, which override the ``.write()`` method to do their work. + If this wrapping causes you problems, then this can be disabled by passing + ``init(wrap=False)``. The default behaviour is to wrap if ``autoreset`` or + ``strip`` or ``convert`` are True. + + When wrapping is disabled, colored printing on non-Windows platforms will + continue to work as normal. To do cross-platform colored output, you can + use Colorama's ``AnsiToWin32`` proxy directly: + + .. code-block:: python + + import sys + from colorama import init, AnsiToWin32 + init(wrap=False) + stream = AnsiToWin32(sys.stderr).stream + + # Python 2 + print >>stream, Fore.BLUE + 'blue text on stderr' + + # Python 3 + print(Fore.BLUE + 'blue text on stderr', file=stream) + +Recognised ANSI Sequences +......................... + +ANSI sequences generally take the form:: + + ESC [ ; ... + +Where ```` is an integer, and ```` is a single letter. Zero or +more params are passed to a ````. If no params are passed, it is +generally synonymous with passing a single zero. No spaces exist in the +sequence; they have been inserted here simply to read more easily. + +The only ANSI sequences that Colorama converts into win32 calls are:: + + ESC [ 0 m # reset all (colors and brightness) + ESC [ 1 m # bright + ESC [ 2 m # dim (looks same as normal brightness) + ESC [ 22 m # normal brightness + + # FOREGROUND: + ESC [ 30 m # black + ESC [ 31 m # red + ESC [ 32 m # green + ESC [ 33 m # yellow + ESC [ 34 m # blue + ESC [ 35 m # magenta + ESC [ 36 m # cyan + ESC [ 37 m # white + ESC [ 39 m # reset + + # BACKGROUND + ESC [ 40 m # black + ESC [ 41 m # red + ESC [ 42 m # green + ESC [ 43 m # yellow + ESC [ 44 m # blue + ESC [ 45 m # magenta + ESC [ 46 m # cyan + ESC [ 47 m # white + ESC [ 49 m # reset + + # cursor positioning + ESC [ y;x H # position cursor at x across, y down + ESC [ y;x f # position cursor at x across, y down + ESC [ n A # move cursor n lines up + ESC [ n B # move cursor n lines down + ESC [ n C # move cursor n characters forward + ESC [ n D # move cursor n characters backward + + # clear the screen + ESC [ mode J # clear the screen + + # clear the line + ESC [ mode K # clear the line + +Multiple numeric params to the ``'m'`` command can be combined into a single +sequence:: + + ESC [ 36 ; 45 ; 1 m # bright cyan text on magenta background + +All other ANSI sequences of the form ``ESC [ ; ... `` +are silently stripped from the output on Windows. + +Any other form of ANSI sequence, such as single-character codes or alternative +initial characters, are not recognised or stripped. It would be cool to add +them though. Let me know if it would be useful for you, via the Issues on +GitHub. + +Status & Known Problems +----------------------- + +I've personally only tested it on Windows XP (CMD, Console2), Ubuntu +(gnome-terminal, xterm), and OS X. + +Some valid ANSI sequences aren't recognised. + +If you're hacking on the code, see `README-hacking.md`_. ESPECIALLY, see the +explanation there of why we do not want PRs that allow Colorama to generate new +types of ANSI codes. + +See outstanding issues and wish-list: +https://github.com/tartley/colorama/issues + +If anything doesn't work for you, or doesn't do what you expected or hoped for, +I'd love to hear about it on that issues list, would be delighted by patches, +and would be happy to grant commit access to anyone who submits a working patch +or two. + +.. _README-hacking.md: README-hacking.md + +License +------- + +Copyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see +LICENSE file. + +Professional support +-------------------- + +.. |tideliftlogo| image:: https://cdn2.hubspot.net/hubfs/4008838/website/logos/logos_for_download/Tidelift_primary-shorthand-logo.png + :alt: Tidelift + :target: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme + +.. list-table:: + :widths: 10 100 + + * - |tideliftlogo| + - Professional support for colorama is available as part of the + `Tidelift Subscription`_. + Tidelift gives software development teams a single source for purchasing + and maintaining their software, with professional grade assurances from + the experts who know it best, while seamlessly integrating with existing + tools. + +.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme + +Thanks +------ + +See the CHANGELOG for more thanks! + +* Marc Schlaich (schlamar) for a ``setup.py`` fix for Python2.5. +* Marc Abramowitz, reported & fixed a crash on exit with closed ``stdout``, + providing a solution to issue #7's setuptools/distutils debate, + and other fixes. +* User 'eryksun', for guidance on correctly instantiating ``ctypes.windll``. +* Matthew McCormick for politely pointing out a longstanding crash on non-Win. +* Ben Hoyt, for a magnificent fix under 64-bit Windows. +* Jesse at Empty Square for submitting a fix for examples in the README. +* User 'jamessp', an observant documentation fix for cursor positioning. +* User 'vaal1239', Dave Mckee & Lackner Kristof for a tiny but much-needed Win7 + fix. +* Julien Stuyck, for wisely suggesting Python3 compatible updates to README. +* Daniel Griffith for multiple fabulous patches. +* Oscar Lesta for a valuable fix to stop ANSI chars being sent to non-tty + output. +* Roger Binns, for many suggestions, valuable feedback, & bug reports. +* Tim Golden for thought and much appreciated feedback on the initial idea. +* User 'Zearin' for updates to the README file. +* John Szakmeister for adding support for light colors +* Charles Merriam for adding documentation to demos +* Jurko for a fix on 64-bit Windows CPython2.5 w/o ctypes +* Florian Bruhin for a fix when stdout or stderr are None +* Thomas Weininger for fixing ValueError on Windows +* Remi Rampin for better Github integration and fixes to the README file +* Simeon Visser for closing a file handle using 'with' and updating classifiers + to include Python 3.3 and 3.4 +* Andy Neff for fixing RESET of LIGHT_EX colors. +* Jonathan Hartley for the initial idea and implementation. diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD b/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD new file mode 100644 index 0000000..6e3a901 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/RECORD @@ -0,0 +1,32 @@ +colorama-0.4.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +colorama-0.4.6.dist-info/METADATA,sha256=e67SnrUMOym9sz_4TjF3vxvAV4T3aF7NyqRHHH3YEMw,17158 +colorama-0.4.6.dist-info/RECORD,, +colorama-0.4.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +colorama-0.4.6.dist-info/WHEEL,sha256=cdcF4Fbd0FPtw2EMIOwH-3rSOTUdTCeOSXRMD1iLUb8,105 +colorama-0.4.6.dist-info/licenses/LICENSE.txt,sha256=ysNcAmhuXQSlpxQL-zs25zrtSWZW6JEQLkKIhteTAxg,1491 +colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266 +colorama/__pycache__/__init__.cpython-311.pyc,, +colorama/__pycache__/ansi.cpython-311.pyc,, +colorama/__pycache__/ansitowin32.cpython-311.pyc,, +colorama/__pycache__/initialise.cpython-311.pyc,, +colorama/__pycache__/win32.cpython-311.pyc,, +colorama/__pycache__/winterm.cpython-311.pyc,, +colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128 +colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325 +colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75 +colorama/tests/__pycache__/__init__.cpython-311.pyc,, +colorama/tests/__pycache__/ansi_test.cpython-311.pyc,, +colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc,, +colorama/tests/__pycache__/initialise_test.cpython-311.pyc,, +colorama/tests/__pycache__/isatty_test.cpython-311.pyc,, +colorama/tests/__pycache__/utils.cpython-311.pyc,, +colorama/tests/__pycache__/winterm_test.cpython-311.pyc,, +colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839 +colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678 +colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741 +colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866 +colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079 +colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709 +colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181 +colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134 diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/REQUESTED b/venv/Lib/site-packages/colorama-0.4.6.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL b/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL new file mode 100644 index 0000000..d79189f --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: hatchling 1.11.1 +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any diff --git a/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt b/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt new file mode 100644 index 0000000..3105888 --- /dev/null +++ b/venv/Lib/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2010 Jonathan Hartley +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holders, nor those of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/colorama/__init__.py b/venv/Lib/site-packages/colorama/__init__.py new file mode 100644 index 0000000..383101c --- /dev/null +++ b/venv/Lib/site-packages/colorama/__init__.py @@ -0,0 +1,7 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.6' + diff --git a/venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eeb95d136d075cacf44d1ea0a06be3ca8fe09aad GIT binary patch literal 572 zcma)2OKTKC5boaTnSIP|4j}=5fR{nChD1Dw2zd}iL=Q1Unud0Erz36pv2@SuW^>9h z|G=Lh{+m69J_S5^5QN-vvN|ybPf2z0)r+dHy1owvJp}Um{Ilp`gnq{0PFnw*tGD2M zLlvs9LK;)7TePJUnrK3aPHBo`t)(*ErfuD!9o?l}-J>uN@`=iIpZ38gbWo-HsK|Z+ z6Dra`q>**VDsgMwtsRW5vaZx6uf<6n9(`?m&5z^>pGi~Mndf6`yj7wgf$Ui)0@*Id z$06OX=SqZZr*Yo80*8Fdc=^#DO0&6fnywF@4WGX+mO?L*$x=x#TmpMI5+RL{MQ8&A zQbMom#JC$F9?9jglE+GIVVBJf*T2bdJ{8VOYdHUbt{{c3Kkd9=2SDK2=(L&}wrj_Y z7N+*>wXEMXBlck;%%OG1d&i?s>-ru-s2ySu|v&g0IU4=3~M&P#2p sMu}H$1&HDyy#e@>V2m%(!Qx?hfu1bx(+l)?@xNX!t)Auaxn-dI3o@6e=l}o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/ansi.cpython-311.pyc b/venv/Lib/site-packages/colorama/__pycache__/ansi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53738241ba1652d7ab4d55e644cdc266475706f8 GIT binary patch literal 4570 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 PwS7)7|M?s|>7)M!n5P&v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-311.pyc b/venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53837881d62b79491ea183ac4a46e6f3923bf9cc GIT binary patch literal 3933 zcmc&%U2NOd6~0#_MM|{f$hJ}|{)ytMTa~5h)@0~5tSizkj=OBygPjI3jA*n;J9K2x zxTGQ{&;VudgEpi^9vY+%3*d*&Yv4ZQsp#V#_cTa>fNBH`7#ISq4+B(q0gM6zcFv_p zi{6TDPrKwjyg%pM-*dim`1?d6P9XiQ@eAW01BCnqD}IXf3j4o-!b74HotDVF_oefc z*CX>0J)#RGVNIMDDbdAEGB4>8(5Rl&l}$P?>oKS)dK_rXpsRd799dU4$u@j4 zst*9yfSv%Fh!8^x_rv&fmgEP&K<>g96lk8h>V>jx&RJK@^10WR_&7Zx!dHO2?*PH| zYnWl(S_HD7Q%!^{#fX#WNx)}S_RG#OzeLD3%(a8_@dWE2v*bnM4EZgDn~5IENL3F*jLd+WNYo`{m6%*f5=-PBeLdtu2cSxj5gUNy_6V`?SSHqNf!b|+zt>qgNm!&1sx2{s2yEG}ED z=oq$Rvtd|346Q`>g(}kfd`6*+U;o#YR+R?$O{bBlSPpvk)XD*6cW@b zuMIo0knL{+sgqrKs3}kGD#H&hx0GyK$$qY!eyW^qDQDWsnWq1C1)`h;K0es=+!D^? zCsb~})%&omhomOhr}{ToBQ;u!tO()Fu|WrAdP%3@-d|CtZ-&)?Qxik&k}t1CL+t^7 zT>zt$%Q*+npqCuQFA=^nSf8*BBkcsEZG>ho2BT?mXqJGV&k{Q_3u;F%;r{>QEWv16 z%o*_|;g%+x7Y=Ky!KluO!`ATGfl5TQII0BZyimAv1`*+nX{}@%S+MZslDXvA*{bQ> z$ZF-=Sde;pHNK)}Y;!7icFJM_WZA7-{LeSD=kdagBczCCi@Yu-(cHZzx6$(eR?rm4(4 zkCWl!ADpgV-W^Kg=b0Seywj93oyv#2fJtnuKBytDytlYEwTO?v05`72wZ$J)^2vux1{i26N zeH9;xrl8+bi@*niI9fADqGc#RR3oypVYT31UHF6^!3e1)ZS|=S2=`K037A}yRs*y~ zWC44Q6xcU`yBEi~s(r(%lps0>hlmarJ!?M7&I8L4YiFmR&6SaH9pZ0XdzL3J?i)u5 zBo<`*5|BFS$ZD5}Qf_x>;=|?6$k^6*pS%O^ZureF36Q@dX~=u((C6ypQ+2YXX4`5O z%rBPfq{lzF-k9#Fsrt|OvE{|-LIJ`C&(+7louhu1%ta4?R1JQm9E;*bsPm^o zQceHuka(RxdnDHkzuo8vg-|~rXCw3#aLhi5XDImTF!`QHPr(WLB$>uiK+clLK%1WE tMkJc*5+Gj+Br+DX9202{g?l6!r9)j3kP$*pHpyg*WZNX$^k071{{&K656b`m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/win32.cpython-311.pyc b/venv/Lib/site-packages/colorama/__pycache__/win32.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e919bd1120a641e521dc1ef05e52e30c3ac6b01 GIT binary patch literal 7921 zcma)BT}&HUmaekPb{X3k8$$@;$NZWCLb^NI^z?Mn2^a`$0B3-7roFVh##JOH{-JLb zAz@(Gv+4(S6|K^{jDkk2#7fx=neIqE(mc$=%zHoVgDusARZ>extCqGOR&pynQmbEj z&#AJ@RS?sCv5)W1x#!+{?sv{T_wqZBr;dX3e>;CK^tDjb|6rk#9OcZbTMR`#rFbez z@pP2tEm4b;;;lTBvPP}&YfD+vOq8K13negub=6i8@SLWoPvNVjs2zCi!0U)QXzcHR zJR4=x&Zsk87p+UXqAr>e9II}Y$|SRe+rVeHdzvX~rgW z))=?5#<)R!+%D6&2F)19`w27XsxgDE8Z+qDXV3#9^;SxNp`IF&dTL1OtMrZb8`tt9 zI`7^v1 zN^N`tl!ka8&>-&zI?Oi$?c)PLLp-xU^-#ijVPwV9OA$9%I0F{n1Z`*eW}t%~K+OWR zK|Qp7KyA=mOY*Nj{P08aTOeP9f1$p{wajs};+aVqJoOiCE%ZoG6Z4k?Fa`iTOlDC-`eG7hcUl<|!pm;J&D+1>BgG zw+PINg}17d5p1g!UJ7b$P_DQ?EZdRmt}V*)4p@qlXBQ~WskDY8a|@A~iP%DTeqv%S zHgJ&75wql0R!mCCY({Zy zj7kzoF0V_1sIVfrlg#kh4W*Ian2kS7rq|P21@=zp9u?Mvz7l=nt8di>^7Iz93OOyU z>YS!pOQjuZb$@E&t=1ZOahKEt{d6B+Rhy|+SDvYseXRtip;kSOuxy%7wN{_cifa=# z47R~Cx7j_=#}A+S;W!sTRVnlb3jIssfh?&`D8-+TSkvn`M7U_H&1qPSPhs92i+!{nPnBC>9eg$c)wXaXGCxibC<=22vP#{;?C8u) zY3>DGE6;Wvd77TA=iTi^Pv=2X z-W@7>TKA^*XY=mCqUX$Bi+pxC?>=AjbRSGW6)YxDx5Jj|9Zp!zNurI6gPIHry@6_2 z481fC+I%cN2l#%fLwMUF>1G1F7BlYx^@5(` z7*!q0x!4Us3THE7HYF@1h#+Lf)>l>pGM!n;5}c~SEN8PR&Z^k&#WQ?LP?&_coKzg* zdLki+qKH!r27{`GVaEV=@wH?OoQ*_=p(zDl@gk5M^`)09c!y-~&<^vZ|9sKy|INf+ z?H?8@s-xfb2NF@-{xX@z2|jxASb9s=x&F)f28t)m;uUX5I1h$COcD5~KH` z%S-BGV+E(-xG0H%liG^dF8H<5gx9Q_cl8WnjX25$|m9|@x2kfU4&lZ zbs+x>e>tiI+6~hhJ^1K1R}Sb;uI*kk*4E0an*isdHJ*8-cn~cM5g*w4Pgm^lZgGh#ehzKMwsj^MAo?@Wy04KT;5i_7vU&r2~ zf{&AZ+>ZSxncI=KamS@8Q1>1n3TL1y@H%9EM1dBgJ#AS4;3i*GQG-QQgVGXP(EZJ# z@KDl&6V6J027@WKID{*rsuHtrIa8w}xeDF3;VX6mIiZBmq5X4P!FyTuUe2?Z)uk>b zaBY=@UR7P|3_$4ETIqkKw&^Xp8Zz+oeHCb;3u<+ZRceU^&Dd=2hQ5|f2scdq)EcwC zwgEaMY=oMm2RCp+!06SBZ#7ujX11&k4fEV$s^QZn1SJVeOg9jfQ=dC<>SslnQ*V=e z6(!;MV;+0kCN&ybZCh6JI>0|#=LjnHYaE%YBSH8fc+n%+ksxFVx=J-vB6xo$c(v7V za@K$ob41J8HK4F-l@Qk+=U3N7N%3jF0w2?xEF#gMghq!pRk5m;Dw@pV$pmoz8onYr z1AtRw%ich~v1f-pay35w`JV4zuI*ggySKl3IQrY{UKWnAoyotlRD1Wqz_Y=_kN$Jy z^MOAO{^_GXj1<~N<+jm0d$#EEl_wc(+B$Y zSA^lO*)tx40&Rrrsy>h7frmLPsq*p1f*F7oMos0k#ca{wR;&`n)|EP&c?QqHh(FcC zqiy?^;gY2u)G81;R&&K@Pl{cDyAxakv6o^SSL4XG*km%5Dn~<+b!lx~3d0RBo{$7G zszpP#2l3Rpz&SJwGU^4*?4ANlKEC(Y!iZnF_!P1Y2tl zMk2uc@9-7VKu-9yrYHQ<`~PO59Q>lt z9Fm(uJFc(%BLLJV<9q!FeJ`61e^ub#mAQ8@?z)Pn>eU^`k+)U$2J>w26f6~CF2@|? zsaUEy$m3BD?6AQFSMQ3iLCkCUP9VlE>32PFRm_%6MT`+e_R|o97}<;mPi%;OIt>Kx zm0>X)#Q1l_aH}2;!lgT#!5cI*X0wFX0_ovke*)nn-qBzXRK-y(VJAT~_^75HhD@tP)Vr ziqCLHEGDIta0hPGHVJdum0G)$c&n~nUg8A6owrp9%MkAW5hrD@=f5N~7=ccBL zRvfBB(;($F-0f!3*C97NYpG9O3VSD+nII%f$lpTs3#$es25#Si=CE+h`gvJjjY3sX zF=+ffe8n*!sKYal|DoXRl)asJyX!jWf7$mr^J3_;p@RRi?7zI@D0-VQT<`tT-?Dq5 z;O~JqgS@+^=xuzw31_6Hb>qpyfLvAUw;*HI`W9Y)f!BE9RkeovM4Bjf=pPpa5JvtMEr_$N!Imq0a zkAx={7N+NJ5LK_ZrHUP3H$F3?*x_=>r&1bRapnZqPVj6d=*ty*Onc`EVhwt7g}pD3 zjF7tcmf|*ELp67*I#D)G?rP|^PmRuv&rB!|0xuEp#H)pyAr!-mMItlmt%1CYvQ-~E zfw}A0eC~uFHpBqa$cFxs`~rC!s*une5P2V~9W%GWcNP}s30et>B0;c_I1+pnA?j@y z4|&xYDfPNDRxMI-O{dqgMAFQ&7uobzEZBH3QFtJGk8D5#?yHCgC?JcbODt9A$=Qoe zcg}v)H-CJaQxmo-xGQD~82cEcgKHR&!f3@J@WDl2{EHa&W^QYvdZ13cm zpPl|Wat9tqauX${!3NJ^C&|GF-(c;x)uvvm>D+Ea4!n_@Jz^Uk*O#o84ts7^W?D;j zs=aSNg88#Y-2=}q$lWtADdh4NS?`V`-!NEUhh%oBWU~(2p-E;2VDUp2KRd4$LPwo_ z`~N6+PUe}ma<7KR9$@BxxlLyJfO+7JXWMF__bAx^%qs_{@=SY~8CeH`wOwZVft7pn zGml#6JL=({U6Xs}@=UPIT3^Ju7g>)wu_x?qeSz(i*-m&KJP#6rGQ*YXso_hXT~!MM zC)Wcrt1UxcUA=L2Egkz_xdnEl31%U)Eugw?7_3QVIzV?_+%uRi6xxrP+jg^Z^QBy* zJX_G6VTv|u(4LFPOdG7RGqj(^{J9f-aBE)6Sz;JlJKSw5#BH(Rql|&F)X1e0WwQm2 zlX{EoZR9Kyw!txtrQw$pMVtefOP+PH`tV<)^;zd#C!W JU-Z&I{~v-CZfF1i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-311.pyc b/venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba9258384ef29499a3f9b2f20471cc3a4b19900b GIT binary patch literal 9147 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06b7c08cca8e4fcf67df9b4dd7a45d291f5f9629 GIT binary patch literal 21515 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-311.pyc b/venv/Lib/site-packages/colorama/tests/__pycache__/initialise_test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..282146bcad7d2a57873e93c49742778481b9d207 GIT binary patch literal 14142 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 S71=loClbF6gt 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 H5H#uEv;0L+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/colorama/tests/ansi_test.py b/venv/Lib/site-packages/colorama/tests/ansi_test.py new file mode 100644 index 0000000..0a20c80 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/ansi_test.py @@ -0,0 +1,76 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansi import Back, Fore, Style +from ..ansitowin32 import AnsiToWin32 + +stdout_orig = sys.stdout +stderr_orig = sys.stderr + + +class AnsiTest(TestCase): + + def setUp(self): + # sanity check: stdout should be a file or StringIO object. + # It will only be AnsiToWin32 if init() has previously wrapped it + self.assertNotEqual(type(sys.stdout), AnsiToWin32) + self.assertNotEqual(type(sys.stderr), AnsiToWin32) + + def tearDown(self): + sys.stdout = stdout_orig + sys.stderr = stderr_orig + + + def testForeAttributes(self): + self.assertEqual(Fore.BLACK, '\033[30m') + self.assertEqual(Fore.RED, '\033[31m') + self.assertEqual(Fore.GREEN, '\033[32m') + self.assertEqual(Fore.YELLOW, '\033[33m') + self.assertEqual(Fore.BLUE, '\033[34m') + self.assertEqual(Fore.MAGENTA, '\033[35m') + self.assertEqual(Fore.CYAN, '\033[36m') + self.assertEqual(Fore.WHITE, '\033[37m') + self.assertEqual(Fore.RESET, '\033[39m') + + # Check the light, extended versions. + self.assertEqual(Fore.LIGHTBLACK_EX, '\033[90m') + self.assertEqual(Fore.LIGHTRED_EX, '\033[91m') + self.assertEqual(Fore.LIGHTGREEN_EX, '\033[92m') + self.assertEqual(Fore.LIGHTYELLOW_EX, '\033[93m') + self.assertEqual(Fore.LIGHTBLUE_EX, '\033[94m') + self.assertEqual(Fore.LIGHTMAGENTA_EX, '\033[95m') + self.assertEqual(Fore.LIGHTCYAN_EX, '\033[96m') + self.assertEqual(Fore.LIGHTWHITE_EX, '\033[97m') + + + def testBackAttributes(self): + self.assertEqual(Back.BLACK, '\033[40m') + self.assertEqual(Back.RED, '\033[41m') + self.assertEqual(Back.GREEN, '\033[42m') + self.assertEqual(Back.YELLOW, '\033[43m') + self.assertEqual(Back.BLUE, '\033[44m') + self.assertEqual(Back.MAGENTA, '\033[45m') + self.assertEqual(Back.CYAN, '\033[46m') + self.assertEqual(Back.WHITE, '\033[47m') + self.assertEqual(Back.RESET, '\033[49m') + + # Check the light, extended versions. + self.assertEqual(Back.LIGHTBLACK_EX, '\033[100m') + self.assertEqual(Back.LIGHTRED_EX, '\033[101m') + self.assertEqual(Back.LIGHTGREEN_EX, '\033[102m') + self.assertEqual(Back.LIGHTYELLOW_EX, '\033[103m') + self.assertEqual(Back.LIGHTBLUE_EX, '\033[104m') + self.assertEqual(Back.LIGHTMAGENTA_EX, '\033[105m') + self.assertEqual(Back.LIGHTCYAN_EX, '\033[106m') + self.assertEqual(Back.LIGHTWHITE_EX, '\033[107m') + + + def testStyleAttributes(self): + self.assertEqual(Style.DIM, '\033[2m') + self.assertEqual(Style.NORMAL, '\033[22m') + self.assertEqual(Style.BRIGHT, '\033[1m') + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py b/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py new file mode 100644 index 0000000..91ca551 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/ansitowin32_test.py @@ -0,0 +1,294 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from io import StringIO, TextIOWrapper +from unittest import TestCase, main +try: + from contextlib import ExitStack +except ImportError: + # python 2 + from contextlib2 import ExitStack + +try: + from unittest.mock import MagicMock, Mock, patch +except ImportError: + from mock import MagicMock, Mock, patch + +from ..ansitowin32 import AnsiToWin32, StreamWrapper +from ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING +from .utils import osname + + +class StreamWrapperTest(TestCase): + + def testIsAProxy(self): + mockStream = Mock() + wrapper = StreamWrapper(mockStream, None) + self.assertTrue( wrapper.random_attr is mockStream.random_attr ) + + def testDelegatesWrite(self): + mockStream = Mock() + mockConverter = Mock() + wrapper = StreamWrapper(mockStream, mockConverter) + wrapper.write('hello') + self.assertTrue(mockConverter.write.call_args, (('hello',), {})) + + def testDelegatesContext(self): + mockConverter = Mock() + s = StringIO() + with StreamWrapper(s, mockConverter) as fp: + fp.write(u'hello') + self.assertTrue(s.closed) + + def testProxyNoContextManager(self): + mockStream = MagicMock() + mockStream.__enter__.side_effect = AttributeError() + mockConverter = Mock() + with self.assertRaises(AttributeError) as excinfo: + with StreamWrapper(mockStream, mockConverter) as wrapper: + wrapper.write('hello') + + def test_closed_shouldnt_raise_on_closed_stream(self): + stream = StringIO() + stream.close() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + + def test_closed_shouldnt_raise_on_detached_stream(self): + stream = TextIOWrapper(StringIO()) + stream.detach() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + +class AnsiToWin32Test(TestCase): + + def testInit(self): + mockStdout = Mock() + auto = Mock() + stream = AnsiToWin32(mockStdout, autoreset=auto) + self.assertEqual(stream.wrapped, mockStdout) + self.assertEqual(stream.autoreset, auto) + + @patch('colorama.ansitowin32.winterm', None) + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + def testStripIsTrueOnWindows(self): + with osname('nt'): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + self.assertTrue(stream.strip) + + def testStripIsFalseOffWindows(self): + with osname('posix'): + mockStdout = Mock(closed=False) + stream = AnsiToWin32(mockStdout) + self.assertFalse(stream.strip) + + def testWriteStripsAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = True + + stream.write('abc') + + self.assertFalse(stream.wrapped.write.called) + self.assertEqual(stream.write_and_convert.call_args, (('abc',), {})) + + def testWriteDoesNotStripAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = False + stream.convert = False + + stream.write('abc') + + self.assertFalse(stream.write_and_convert.called) + self.assertEqual(stream.wrapped.write.call_args, (('abc',), {})) + + def assert_autoresets(self, convert, autoreset=True): + stream = AnsiToWin32(Mock()) + stream.convert = convert + stream.reset_all = Mock() + stream.autoreset = autoreset + stream.winterm = Mock() + + stream.write('abc') + + self.assertEqual(stream.reset_all.called, autoreset) + + def testWriteAutoresets(self): + self.assert_autoresets(convert=True) + self.assert_autoresets(convert=False) + self.assert_autoresets(convert=True, autoreset=False) + self.assert_autoresets(convert=False, autoreset=False) + + def testWriteAndConvertWritesPlainText(self): + stream = AnsiToWin32(Mock()) + stream.write_and_convert( 'abc' ) + self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) ) + + def testWriteAndConvertStripsAllValidAnsi(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + data = [ + 'abc\033[mdef', + 'abc\033[0mdef', + 'abc\033[2mdef', + 'abc\033[02mdef', + 'abc\033[002mdef', + 'abc\033[40mdef', + 'abc\033[040mdef', + 'abc\033[0;1mdef', + 'abc\033[40;50mdef', + 'abc\033[50;30;40mdef', + 'abc\033[Adef', + 'abc\033[0Gdef', + 'abc\033[1;20;128Hdef', + ] + for datum in data: + stream.wrapped.write.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( + [args[0] for args in stream.wrapped.write.call_args_list], + [ ('abc',), ('def',) ] + ) + + def testWriteAndConvertSkipsEmptySnippets(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + stream.write_and_convert( '\033[40m\033[41m' ) + self.assertFalse( stream.wrapped.write.called ) + + def testWriteAndConvertCallsWin32WithParamsAndCommand(self): + stream = AnsiToWin32(Mock()) + stream.convert = True + stream.call_win32 = Mock() + stream.extract_params = Mock(return_value='params') + data = { + 'abc\033[adef': ('a', 'params'), + 'abc\033[;;bdef': ('b', 'params'), + 'abc\033[0cdef': ('c', 'params'), + 'abc\033[;;0;;Gdef': ('G', 'params'), + 'abc\033[1;20;128Hdef': ('H', 'params'), + } + for datum, expected in data.items(): + stream.call_win32.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( stream.call_win32.call_args[0], expected ) + + def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + converter = AnsiToWin32(stream) + stream.close() + + converter.reset_all() + + def test_wrap_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + stream.close() + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(stream) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def test_wrap_shouldnt_raise_on_missing_closed_attr(self): + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(object()) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def testExtractParams(self): + stream = AnsiToWin32(Mock()) + data = { + '': (0,), + ';;': (0,), + '2': (2,), + ';;002;;': (2,), + '0;1': (0, 1), + ';;003;;456;;': (3, 456), + '11;22;33;44;55': (11, 22, 33, 44, 55), + } + for datum, expected in data.items(): + self.assertEqual(stream.extract_params('m', datum), expected) + + def testCallWin32UsesLookup(self): + listener = Mock() + stream = AnsiToWin32(listener) + stream.win32_calls = { + 1: (lambda *_, **__: listener(11),), + 2: (lambda *_, **__: listener(22),), + 3: (lambda *_, **__: listener(33),), + } + stream.call_win32('m', (3, 1, 99, 2)) + self.assertEqual( + [a[0][0] for a in listener.call_args_list], + [33, 11, 22] ) + + def test_osc_codes(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout, convert=True) + with patch('colorama.ansitowin32.winterm') as winterm: + data = [ + '\033]0\x07', # missing arguments + '\033]0;foo\x08', # wrong OSC command + '\033]0;colorama_test_title\x07', # should work + '\033]1;colorama_test_title\x07', # wrong set command + '\033]2;colorama_test_title\x07', # should work + '\033]' + ';' * 64 + '\x08', # see issue #247 + ] + for code in data: + stream.write(code) + self.assertEqual(winterm.set_title.call_count, 2) + + def test_native_windows_ansi(self): + with ExitStack() as stack: + def p(a, b): + stack.enter_context(patch(a, b, create=True)) + # Pretend to be on Windows + p("colorama.ansitowin32.os.name", "nt") + p("colorama.ansitowin32.winapi_test", lambda: True) + p("colorama.win32.winapi_test", lambda: True) + p("colorama.winterm.win32.windll", "non-None") + p("colorama.winterm.get_osfhandle", lambda _: 1234) + + # Pretend that our mock stream has native ANSI support + p( + "colorama.winterm.win32.GetConsoleMode", + lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = True + stdout.fileno.return_value = 1 + + # Our fake console says it has native vt support, so AnsiToWin32 should + # enable that support and do nothing else. + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertFalse(stream.strip) + self.assertFalse(stream.convert) + self.assertFalse(stream.should_wrap()) + + # Now let's pretend we're on an old Windows console, that doesn't have + # native ANSI support. + p("colorama.winterm.win32.GetConsoleMode", lambda _: 0) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertTrue(stream.strip) + self.assertTrue(stream.convert) + self.assertTrue(stream.should_wrap()) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/initialise_test.py b/venv/Lib/site-packages/colorama/tests/initialise_test.py new file mode 100644 index 0000000..89f9b07 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/initialise_test.py @@ -0,0 +1,189 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import patch, Mock +except ImportError: + from mock import patch, Mock + +from ..ansitowin32 import StreamWrapper +from ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests +from .utils import osname, replace_by + +orig_stdout = sys.stdout +orig_stderr = sys.stderr + + +class InitTest(TestCase): + + @skipUnless(sys.stdout.isatty(), "sys.stdout is not a tty") + def setUp(self): + # sanity check + self.assertNotWrapped() + + def tearDown(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def assertWrapped(self): + self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped') + self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped') + self.assertTrue(isinstance(sys.stdout, StreamWrapper), + 'bad stdout wrapper') + self.assertTrue(isinstance(sys.stderr, StreamWrapper), + 'bad stderr wrapper') + + def assertNotWrapped(self): + self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped') + self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped') + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + @patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False) + def testInitWrapsOnWindows(self, _): + with osname("nt"): + init() + self.assertWrapped() + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: False) + def testInitDoesntWrapOnEmulatedWindows(self, _): + with osname("nt"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapOnNonWindows(self): + with osname("posix"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapIfNone(self): + with replace_by(None): + init() + # We can't use assertNotWrapped here because replace_by(None) + # changes stdout/stderr already. + self.assertIsNone(sys.stdout) + self.assertIsNone(sys.stderr) + + def testInitAutoresetOnWrapsOnAllPlatforms(self): + with osname("posix"): + init(autoreset=True) + self.assertWrapped() + + def testInitWrapOffDoesntWrapOnWindows(self): + with osname("nt"): + init(wrap=False) + self.assertNotWrapped() + + def testInitWrapOffIncompatibleWithAutoresetOn(self): + self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False)) + + @patch('colorama.win32.SetConsoleTextAttribute') + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetPassedOn(self, mockATW32, _): + with osname("nt"): + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 2) + self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True) + + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetChangeable(self, mockATW32): + with osname("nt"): + init() + + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 4) + self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True) + + init() + self.assertEqual(len(mockATW32.call_args_list), 6) + self.assertEqual( + mockATW32.call_args_list[4][1]['autoreset'], False) + self.assertEqual( + mockATW32.call_args_list[5][1]['autoreset'], False) + + + @patch('colorama.initialise.atexit.register') + def testAtexitRegisteredOnlyOnce(self, mockRegister): + init() + self.assertTrue(mockRegister.called) + mockRegister.reset_mock() + init() + self.assertFalse(mockRegister.called) + + +class JustFixWindowsConsoleTest(TestCase): + def _reset(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def tearDown(self): + self._reset() + + @patch("colorama.ansitowin32.winapi_test", lambda: True) + def testJustFixWindowsConsole(self): + if sys.platform != "win32": + # just_fix_windows_console should be a no-op + just_fix_windows_console() + self.assertIs(sys.stdout, orig_stdout) + self.assertIs(sys.stderr, orig_stderr) + else: + def fake_std(): + # Emulate stdout=not a tty, stderr=tty + # to check that we handle both cases correctly + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = False + stdout.fileno.return_value = 1 + sys.stdout = stdout + + stderr = Mock() + stderr.closed = False + stderr.isatty.return_value = True + stderr.fileno.return_value = 2 + sys.stderr = stderr + + for native_ansi in [False, True]: + with patch( + 'colorama.ansitowin32.enable_vt_processing', + lambda *_: native_ansi + ): + self._reset() + fake_std() + + # Regular single-call test + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + if native_ansi: + self.assertIs(sys.stderr, prev_stderr) + else: + self.assertIsNot(sys.stderr, prev_stderr) + + # second call without resetting is always a no-op + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + self.assertIs(sys.stderr, prev_stderr) + + self._reset() + fake_std() + + # If init() runs first, just_fix_windows_console should be a no-op + init() + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(prev_stdout, sys.stdout) + self.assertIs(prev_stderr, sys.stderr) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/isatty_test.py b/venv/Lib/site-packages/colorama/tests/isatty_test.py new file mode 100644 index 0000000..0f84e4b --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/isatty_test.py @@ -0,0 +1,57 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansitowin32 import StreamWrapper, AnsiToWin32 +from .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY + + +def is_a_tty(stream): + return StreamWrapper(stream, None).isatty() + +class IsattyTest(TestCase): + + def test_TTY(self): + tty = StreamTTY() + self.assertTrue(is_a_tty(tty)) + with pycharm(): + self.assertTrue(is_a_tty(tty)) + + def test_nonTTY(self): + non_tty = StreamNonTTY() + self.assertFalse(is_a_tty(non_tty)) + with pycharm(): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharm(self): + with pycharm(): + self.assertTrue(is_a_tty(sys.stderr)) + self.assertTrue(is_a_tty(sys.stdout)) + + def test_withPycharmTTYOverride(self): + tty = StreamTTY() + with pycharm(), replace_by(tty): + self.assertTrue(is_a_tty(tty)) + + def test_withPycharmNonTTYOverride(self): + non_tty = StreamNonTTY() + with pycharm(), replace_by(non_tty): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharmNoneOverride(self): + with pycharm(): + with replace_by(None), replace_original_by(None): + self.assertFalse(is_a_tty(None)) + self.assertFalse(is_a_tty(StreamNonTTY())) + self.assertTrue(is_a_tty(StreamTTY())) + + def test_withPycharmStreamWrapped(self): + with pycharm(): + self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty()) + self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty()) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/tests/utils.py b/venv/Lib/site-packages/colorama/tests/utils.py new file mode 100644 index 0000000..472fafb --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/utils.py @@ -0,0 +1,49 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from contextlib import contextmanager +from io import StringIO +import sys +import os + + +class StreamTTY(StringIO): + def isatty(self): + return True + +class StreamNonTTY(StringIO): + def isatty(self): + return False + +@contextmanager +def osname(name): + orig = os.name + os.name = name + yield + os.name = orig + +@contextmanager +def replace_by(stream): + orig_stdout = sys.stdout + orig_stderr = sys.stderr + sys.stdout = stream + sys.stderr = stream + yield + sys.stdout = orig_stdout + sys.stderr = orig_stderr + +@contextmanager +def replace_original_by(stream): + orig_stdout = sys.__stdout__ + orig_stderr = sys.__stderr__ + sys.__stdout__ = stream + sys.__stderr__ = stream + yield + sys.__stdout__ = orig_stdout + sys.__stderr__ = orig_stderr + +@contextmanager +def pycharm(): + os.environ["PYCHARM_HOSTED"] = "1" + non_tty = StreamNonTTY() + with replace_by(non_tty), replace_original_by(non_tty): + yield + del os.environ["PYCHARM_HOSTED"] diff --git a/venv/Lib/site-packages/colorama/tests/winterm_test.py b/venv/Lib/site-packages/colorama/tests/winterm_test.py new file mode 100644 index 0000000..d0955f9 --- /dev/null +++ b/venv/Lib/site-packages/colorama/tests/winterm_test.py @@ -0,0 +1,131 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import Mock, patch +except ImportError: + from mock import Mock, patch + +from ..winterm import WinColor, WinStyle, WinTerm + + +class WinTermTest(TestCase): + + @patch('colorama.winterm.win32') + def testInit(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 7 + 6 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + self.assertEqual(term._fore, 7) + self.assertEqual(term._back, 6) + self.assertEqual(term._style, 8) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testGetAttrs(self): + term = WinTerm() + + term._fore = 0 + term._back = 0 + term._style = 0 + self.assertEqual(term.get_attrs(), 0) + + term._fore = WinColor.YELLOW + self.assertEqual(term.get_attrs(), WinColor.YELLOW) + + term._back = WinColor.MAGENTA + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16) + + term._style = WinStyle.BRIGHT + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT) + + @patch('colorama.winterm.win32') + def testResetAll(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 1 + 2 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + + term.set_console = Mock() + term._fore = -1 + term._back = -1 + term._style = -1 + + term.reset_all() + + self.assertEqual(term._fore, 1) + self.assertEqual(term._back, 2) + self.assertEqual(term._style, 8) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testFore(self): + term = WinTerm() + term.set_console = Mock() + term._fore = 0 + + term.fore(5) + + self.assertEqual(term._fore, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testBack(self): + term = WinTerm() + term.set_console = Mock() + term._back = 0 + + term.back(5) + + self.assertEqual(term._back, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testStyle(self): + term = WinTerm() + term.set_console = Mock() + term._style = 0 + + term.style(22) + + self.assertEqual(term._style, 22) + self.assertEqual(term.set_console.called, True) + + @patch('colorama.winterm.win32') + def testSetConsole(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console() + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDOUT, term.get_attrs()), {}) + ) + + @patch('colorama.winterm.win32') + def testSetConsoleOnStderr(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console(on_stderr=True) + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDERR, term.get_attrs()), {}) + ) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/colorama/win32.py b/venv/Lib/site-packages/colorama/win32.py new file mode 100644 index 0000000..841b0e2 --- /dev/null +++ b/venv/Lib/site-packages/colorama/win32.py @@ -0,0 +1,180 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW + _SetConsoleTitleW.argtypes = [ + wintypes.LPCWSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + _GetConsoleMode = windll.kernel32.GetConsoleMode + _GetConsoleMode.argtypes = [ + wintypes.HANDLE, + POINTER(wintypes.DWORD) + ] + _GetConsoleMode.restype = wintypes.BOOL + + _SetConsoleMode = windll.kernel32.SetConsoleMode + _SetConsoleMode.argtypes = [ + wintypes.HANDLE, + wintypes.DWORD + ] + _SetConsoleMode.restype = wintypes.BOOL + + def _winapi_test(handle): + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def winapi_test(): + return any(_winapi_test(h) for h in + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(stream_id) + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(stream_id) + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = _GetStdHandle(stream_id) + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) + + def GetConsoleMode(handle): + mode = wintypes.DWORD() + success = _GetConsoleMode(handle, byref(mode)) + if not success: + raise ctypes.WinError() + return mode.value + + def SetConsoleMode(handle, mode): + success = _SetConsoleMode(handle, mode) + if not success: + raise ctypes.WinError() diff --git a/venv/Lib/site-packages/colorama/winterm.py b/venv/Lib/site-packages/colorama/winterm.py new file mode 100644 index 0000000..aad867e --- /dev/null +++ b/venv/Lib/site-packages/colorama/winterm.py @@ -0,0 +1,195 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +try: + from msvcrt import get_osfhandle +except ImportError: + def get_osfhandle(_): + raise OSError("This isn't windows!") + + +from . import win32 + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) + + +def enable_vt_processing(fd): + if win32.windll is None or not win32.winapi_test(): + return False + + try: + handle = get_osfhandle(fd) + mode = win32.GetConsoleMode(handle) + win32.SetConsoleMode( + handle, + mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + + mode = win32.GetConsoleMode(handle) + if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING: + return True + # Can get TypeError in testsuite where 'fd' is a Mock() + except (OSError, TypeError): + return False diff --git a/venv/Lib/site-packages/distutils-precedence.pth b/venv/Lib/site-packages/distutils-precedence.pth new file mode 100644 index 0000000..7f009fe --- /dev/null +++ b/venv/Lib/site-packages/distutils-precedence.pth @@ -0,0 +1 @@ +import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim(); diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/INSTALLER b/venv/Lib/site-packages/flask-2.3.3.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/LICENSE.rst b/venv/Lib/site-packages/flask-2.3.3.dist-info/LICENSE.rst new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/METADATA b/venv/Lib/site-packages/flask-2.3.3.dist-info/METADATA new file mode 100644 index 0000000..d7c3145 --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/METADATA @@ -0,0 +1,116 @@ +Metadata-Version: 2.1 +Name: Flask +Version: 2.3.3 +Summary: A simple framework for building complex web applications. +Maintainer-email: Pallets +Requires-Python: >=3.8 +Description-Content-Type: text/x-rst +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-Dist: Werkzeug>=2.3.7 +Requires-Dist: Jinja2>=3.1.2 +Requires-Dist: itsdangerous>=2.1.2 +Requires-Dist: click>=8.1.3 +Requires-Dist: blinker>=1.6.2 +Requires-Dist: importlib-metadata>=3.6.0; python_version < '3.10' +Requires-Dist: asgiref>=3.2 ; extra == "async" +Requires-Dist: python-dotenv ; extra == "dotenv" +Project-URL: Changes, https://flask.palletsprojects.com/changes/ +Project-URL: Chat, https://discord.gg/pallets +Project-URL: Documentation, https://flask.palletsprojects.com/ +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Issue Tracker, https://github.com/pallets/flask/issues/ +Project-URL: Source Code, https://github.com/pallets/flask/ +Provides-Extra: async +Provides-Extra: dotenv + +Flask +===== + +Flask is a lightweight `WSGI`_ web application framework. It is designed +to make getting started quick and easy, with the ability to scale up to +complex applications. It began as a simple wrapper around `Werkzeug`_ +and `Jinja`_ and has become one of the most popular Python web +application frameworks. + +Flask offers suggestions, but doesn't enforce any dependencies or +project layout. It is up to the developer to choose the tools and +libraries they want to use. There are many extensions provided by the +community that make adding new functionality easy. + +.. _WSGI: https://wsgi.readthedocs.io/ +.. _Werkzeug: https://werkzeug.palletsprojects.com/ +.. _Jinja: https://jinja.palletsprojects.com/ + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install -U Flask + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +.. code-block:: python + + # save this as app.py + from flask import Flask + + app = Flask(__name__) + + @app.route("/") + def hello(): + return "Hello, World!" + +.. code-block:: text + + $ flask run + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + + +Contributing +------------ + +For guidance on setting up a development environment and how to make a +contribution to Flask, see the `contributing guidelines`_. + +.. _contributing guidelines: https://github.com/pallets/flask/blob/main/CONTRIBUTING.rst + + +Donate +------ + +The Pallets organization develops and supports Flask and the libraries +it uses. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://flask.palletsprojects.com/ +- Changes: https://flask.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/Flask/ +- Source Code: https://github.com/pallets/flask/ +- Issue Tracker: https://github.com/pallets/flask/issues/ +- Chat: https://discord.gg/pallets + diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/RECORD b/venv/Lib/site-packages/flask-2.3.3.dist-info/RECORD new file mode 100644 index 0000000..14e6dde --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/RECORD @@ -0,0 +1,53 @@ +../../Scripts/flask.exe,sha256=wCh7eaxZijAfAudMIIBAOx1rSOvheC9mDctDZHhZ17s,108414 +flask-2.3.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +flask-2.3.3.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +flask-2.3.3.dist-info/METADATA,sha256=-BtXVsnPe7lNA3mcFZHJfsVIiVin1A8LUstChm8qiHo,3588 +flask-2.3.3.dist-info/RECORD,, +flask-2.3.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +flask-2.3.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81 +flask-2.3.3.dist-info/entry_points.txt,sha256=bBP7hTOS5fz9zLtC7sPofBZAlMkEvBxu7KqS6l5lvc4,40 +flask/__init__.py,sha256=xq09XNKP-Y-fdv6BeGH7RlFaY006tUA3o_llGcl-dno,3731 +flask/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 +flask/__pycache__/__init__.cpython-311.pyc,, +flask/__pycache__/__main__.cpython-311.pyc,, +flask/__pycache__/app.cpython-311.pyc,, +flask/__pycache__/blueprints.cpython-311.pyc,, +flask/__pycache__/cli.cpython-311.pyc,, +flask/__pycache__/config.cpython-311.pyc,, +flask/__pycache__/ctx.cpython-311.pyc,, +flask/__pycache__/debughelpers.cpython-311.pyc,, +flask/__pycache__/globals.cpython-311.pyc,, +flask/__pycache__/helpers.cpython-311.pyc,, +flask/__pycache__/logging.cpython-311.pyc,, +flask/__pycache__/scaffold.cpython-311.pyc,, +flask/__pycache__/sessions.cpython-311.pyc,, +flask/__pycache__/signals.cpython-311.pyc,, +flask/__pycache__/templating.cpython-311.pyc,, +flask/__pycache__/testing.cpython-311.pyc,, +flask/__pycache__/typing.cpython-311.pyc,, +flask/__pycache__/views.cpython-311.pyc,, +flask/__pycache__/wrappers.cpython-311.pyc,, +flask/app.py,sha256=ht3Qx9U9z0I1qUfLoS7bYhJcubdpk-i54eHq37LDlN8,87620 +flask/blueprints.py,sha256=ZpVrwa8UY-YnVDsX_1K10XQjDwCUp7Qn2hmKln5icEQ,24332 +flask/cli.py,sha256=PDwZCfPagi5GUzb-D6dEN7y20gWiVAg3ejRnxBKNHPA,33821 +flask/config.py,sha256=YZSZ-xpFj1iW1B1Kj1iDhpc5s7pHncloiRLqXhsU7Hs,12856 +flask/ctx.py,sha256=x2kGzUXtPzVyi2YSKrU_PV1AvtxTmh2iRdriJRTSPGM,14841 +flask/debughelpers.py,sha256=BR0xkd-sAyFuFW07D6NfrqNwSZxk1IrkG5n8zem-3sw,5547 +flask/globals.py,sha256=KUzVvSPh8v28kUasVDi_aQKB9hI2jZSYQHqaDU2P414,2945 +flask/helpers.py,sha256=uVhMwhhfwgjBt8b--zIZTjkfBRK28yPpmNhgVzhP444,25106 +flask/json/__init__.py,sha256=pdtpoK2b0b1u7Sxbx3feM7VWhsI20l1yGAvbYWxaxvc,5572 +flask/json/__pycache__/__init__.cpython-311.pyc,, +flask/json/__pycache__/provider.cpython-311.pyc,, +flask/json/__pycache__/tag.cpython-311.pyc,, +flask/json/provider.py,sha256=Os0frb8oGfyWKL-TDxb0Uy-MY6gDhPdJkRaUl5xAOXI,7637 +flask/json/tag.py,sha256=ihb7QWrNEr0YC3KD4TolZbftgSPCuLk7FAvK49huYC0,8871 +flask/logging.py,sha256=lArx2Bq9oTtUJ-DnZL9t88xU2zytzp4UWSM9Bd72NDQ,2327 +flask/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +flask/scaffold.py,sha256=ALGHLcy2qSbJ7ENd1H8dOnq5VDgH5XSFsOkDelcOKV8,33217 +flask/sessions.py,sha256=rFH2QKXG24dEazkKGxAHqUpAUh_30hDHrddhVYgAcY0,14169 +flask/signals.py,sha256=s1H4yKjf3c5dgVr41V6sJpE9dLJvmTJMYuK0rkqx3sw,1146 +flask/templating.py,sha256=XdP2hMFnZ5FCZOG7HUaLjC2VC-b4uHSWlDjwv_1p3qc,7503 +flask/testing.py,sha256=h7AinggrMgGzKlDN66VfB0JjWW4Z1U_OD6FyjqBNiYM,10017 +flask/typing.py,sha256=4Lj-YTxUoYvPYofC9GKu-1o0Ht8lyjp9z3I336J13_o,3005 +flask/views.py,sha256=V5hOGZLx0Bn99QGcM6mh5x_uM-MypVT0-RysEFU84jc,6789 +flask/wrappers.py,sha256=PhMp3teK3SnEmIdog59cO_DHiZ9Btn0qI1EifrTdwP8,5709 diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/REQUESTED b/venv/Lib/site-packages/flask-2.3.3.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/WHEEL b/venv/Lib/site-packages/flask-2.3.3.dist-info/WHEEL new file mode 100644 index 0000000..3b5e64b --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.9.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/venv/Lib/site-packages/flask-2.3.3.dist-info/entry_points.txt b/venv/Lib/site-packages/flask-2.3.3.dist-info/entry_points.txt new file mode 100644 index 0000000..eec6733 --- /dev/null +++ b/venv/Lib/site-packages/flask-2.3.3.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +flask=flask.cli:main + diff --git a/venv/Lib/site-packages/flask/__init__.py b/venv/Lib/site-packages/flask/__init__.py new file mode 100644 index 0000000..bdca1b0 --- /dev/null +++ b/venv/Lib/site-packages/flask/__init__.py @@ -0,0 +1,102 @@ +from . import json as json +from .app import Flask as Flask +from .app import Request as Request +from .app import Response as Response +from .blueprints import Blueprint as Blueprint +from .config import Config as Config +from .ctx import after_this_request as after_this_request +from .ctx import copy_current_request_context as copy_current_request_context +from .ctx import has_app_context as has_app_context +from .ctx import has_request_context as has_request_context +from .globals import current_app as current_app +from .globals import g as g +from .globals import request as request +from .globals import session as session +from .helpers import abort as abort +from .helpers import flash as flash +from .helpers import get_flashed_messages as get_flashed_messages +from .helpers import get_template_attribute as get_template_attribute +from .helpers import make_response as make_response +from .helpers import redirect as redirect +from .helpers import send_file as send_file +from .helpers import send_from_directory as send_from_directory +from .helpers import stream_with_context as stream_with_context +from .helpers import url_for as url_for +from .json import jsonify as jsonify +from .signals import appcontext_popped as appcontext_popped +from .signals import appcontext_pushed as appcontext_pushed +from .signals import appcontext_tearing_down as appcontext_tearing_down +from .signals import before_render_template as before_render_template +from .signals import got_request_exception as got_request_exception +from .signals import message_flashed as message_flashed +from .signals import request_finished as request_finished +from .signals import request_started as request_started +from .signals import request_tearing_down as request_tearing_down +from .signals import template_rendered as template_rendered +from .templating import render_template as render_template +from .templating import render_template_string as render_template_string +from .templating import stream_template as stream_template +from .templating import stream_template_string as stream_template_string + +__version__ = "2.3.3" + + +def __getattr__(name): + if name == "_app_ctx_stack": + import warnings + from .globals import __app_ctx_stack + + warnings.warn( + "'_app_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __app_ctx_stack + + if name == "_request_ctx_stack": + import warnings + from .globals import __request_ctx_stack + + warnings.warn( + "'_request_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + if name == "escape": + import warnings + from markupsafe import escape + + warnings.warn( + "'flask.escape' is deprecated and will be removed in Flask 2.4. Import" + " 'markupsafe.escape' instead.", + DeprecationWarning, + stacklevel=2, + ) + return escape + + if name == "Markup": + import warnings + from markupsafe import Markup + + warnings.warn( + "'flask.Markup' is deprecated and will be removed in Flask 2.4. Import" + " 'markupsafe.Markup' instead.", + DeprecationWarning, + stacklevel=2, + ) + return Markup + + if name == "signals_available": + import warnings + + warnings.warn( + "'signals_available' is deprecated and will be removed in Flask 2.4." + " Signals are always available", + DeprecationWarning, + stacklevel=2, + ) + return True + + raise AttributeError(name) diff --git a/venv/Lib/site-packages/flask/__main__.py b/venv/Lib/site-packages/flask/__main__.py new file mode 100644 index 0000000..4e28416 --- /dev/null +++ b/venv/Lib/site-packages/flask/__main__.py @@ -0,0 +1,3 @@ +from .cli import main + +main() diff --git a/venv/Lib/site-packages/flask/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..707c70692069c45cca75a720d98d3afe1e9390bb GIT binary patch literal 4075 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®5peBOefy4c1Jar$IY%*h4pp5JB96q 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 z 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 W%KI~-2w7?jKW6!#Y*Wev?SBAF;` to an instance of the class. + + :param app: An application instance. This will be stored as a + :class:`weakref.proxy` on the :attr:`_app` attribute. + + .. versionadded:: 2.2 + """ + + def __init__(self, app: Flask) -> None: + self._app = weakref.proxy(app) + + def dumps(self, obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON. + + :param obj: The data to serialize. + :param kwargs: May be passed to the underlying JSON library. + """ + raise NotImplementedError + + def dump(self, obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None: + """Serialize data as JSON and write to a file. + + :param obj: The data to serialize. + :param fp: A file opened for writing text. Should use the UTF-8 + encoding to be valid JSON. + :param kwargs: May be passed to the underlying JSON library. + """ + fp.write(self.dumps(obj, **kwargs)) + + def loads(self, s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON. + + :param s: Text or UTF-8 bytes. + :param kwargs: May be passed to the underlying JSON library. + """ + raise NotImplementedError + + def load(self, fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON read from a file. + + :param fp: A file opened for reading text or UTF-8 bytes. + :param kwargs: May be passed to the underlying JSON library. + """ + return self.loads(fp.read(), **kwargs) + + def _prepare_response_obj( + self, args: tuple[t.Any, ...], kwargs: dict[str, t.Any] + ) -> t.Any: + if args and kwargs: + raise TypeError("app.json.response() takes either args or kwargs, not both") + + if not args and not kwargs: + return None + + if len(args) == 1: + return args[0] + + return args or kwargs + + def response(self, *args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with the ``application/json`` + mimetype. + + The :func:`~flask.json.jsonify` function calls this method for + the current application. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + """ + obj = self._prepare_response_obj(args, kwargs) + return self._app.response_class(self.dumps(obj), mimetype="application/json") + + +def _default(o: t.Any) -> t.Any: + if isinstance(o, date): + return http_date(o) + + if isinstance(o, (decimal.Decimal, uuid.UUID)): + return str(o) + + if dataclasses and dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + + if hasattr(o, "__html__"): + return str(o.__html__()) + + raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable") + + +class DefaultJSONProvider(JSONProvider): + """Provide JSON operations using Python's built-in :mod:`json` + library. Serializes the following additional data types: + + - :class:`datetime.datetime` and :class:`datetime.date` are + serialized to :rfc:`822` strings. This is the same as the HTTP + date format. + - :class:`uuid.UUID` is serialized to a string. + - :class:`dataclasses.dataclass` is passed to + :func:`dataclasses.asdict`. + - :class:`~markupsafe.Markup` (or any object with a ``__html__`` + method) will call the ``__html__`` method to get a string. + """ + + default: t.Callable[[t.Any], t.Any] = staticmethod( + _default + ) # type: ignore[assignment] + """Apply this function to any object that :meth:`json.dumps` does + not know how to serialize. It should return a valid JSON type or + raise a ``TypeError``. + """ + + ensure_ascii = True + """Replace non-ASCII characters with escape sequences. This may be + more compatible with some clients, but can be disabled for better + performance and size. + """ + + sort_keys = True + """Sort the keys in any serialized dicts. This may be useful for + some caching situations, but can be disabled for better performance. + When enabled, keys must all be strings, they are not converted + before sorting. + """ + + compact: bool | None = None + """If ``True``, or ``None`` out of debug mode, the :meth:`response` + output will not add indentation, newlines, or spaces. If ``False``, + or ``None`` in debug mode, it will use a non-compact representation. + """ + + mimetype = "application/json" + """The mimetype set in :meth:`response`.""" + + def dumps(self, obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON to a string. + + Keyword arguments are passed to :func:`json.dumps`. Sets some + parameter defaults from the :attr:`default`, + :attr:`ensure_ascii`, and :attr:`sort_keys` attributes. + + :param obj: The data to serialize. + :param kwargs: Passed to :func:`json.dumps`. + """ + kwargs.setdefault("default", self.default) + kwargs.setdefault("ensure_ascii", self.ensure_ascii) + kwargs.setdefault("sort_keys", self.sort_keys) + return json.dumps(obj, **kwargs) + + def loads(self, s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON from a string or bytes. + + :param s: Text or UTF-8 bytes. + :param kwargs: Passed to :func:`json.loads`. + """ + return json.loads(s, **kwargs) + + def response(self, *args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with it. The response mimetype + will be "application/json" and can be changed with + :attr:`mimetype`. + + If :attr:`compact` is ``False`` or debug mode is enabled, the + output will be formatted to be easier to read. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + """ + obj = self._prepare_response_obj(args, kwargs) + dump_args: dict[str, t.Any] = {} + + if (self.compact is None and self._app.debug) or self.compact is False: + dump_args.setdefault("indent", 2) + else: + dump_args.setdefault("separators", (",", ":")) + + return self._app.response_class( + f"{self.dumps(obj, **dump_args)}\n", mimetype=self.mimetype + ) diff --git a/venv/Lib/site-packages/flask/json/tag.py b/venv/Lib/site-packages/flask/json/tag.py new file mode 100644 index 0000000..91cc441 --- /dev/null +++ b/venv/Lib/site-packages/flask/json/tag.py @@ -0,0 +1,314 @@ +""" +Tagged JSON +~~~~~~~~~~~ + +A compact representation for lossless serialization of non-standard JSON +types. :class:`~flask.sessions.SecureCookieSessionInterface` uses this +to serialize the session data, but it may be useful in other places. It +can be extended to support other types. + +.. autoclass:: TaggedJSONSerializer + :members: + +.. autoclass:: JSONTag + :members: + +Let's see an example that adds support for +:class:`~collections.OrderedDict`. Dicts don't have an order in JSON, so +to handle this we will dump the items as a list of ``[key, value]`` +pairs. Subclass :class:`JSONTag` and give it the new key ``' od'`` to +identify the type. The session serializer processes dicts first, so +insert the new tag at the front of the order since ``OrderedDict`` must +be processed before ``dict``. + +.. code-block:: python + + from flask.json.tag import JSONTag + + class TagOrderedDict(JSONTag): + __slots__ = ('serializer',) + key = ' od' + + def check(self, value): + return isinstance(value, OrderedDict) + + def to_json(self, value): + return [[k, self.serializer.tag(v)] for k, v in iteritems(value)] + + def to_python(self, value): + return OrderedDict(value) + + app.session_interface.serializer.register(TagOrderedDict, index=0) +""" +from __future__ import annotations + +import typing as t +from base64 import b64decode +from base64 import b64encode +from datetime import datetime +from uuid import UUID + +from markupsafe import Markup +from werkzeug.http import http_date +from werkzeug.http import parse_date + +from ..json import dumps +from ..json import loads + + +class JSONTag: + """Base class for defining type tags for :class:`TaggedJSONSerializer`.""" + + __slots__ = ("serializer",) + + #: The tag to mark the serialized object with. If ``None``, this tag is + #: only used as an intermediate step during tagging. + key: str | None = None + + def __init__(self, serializer: TaggedJSONSerializer) -> None: + """Create a tagger for the given serializer.""" + self.serializer = serializer + + def check(self, value: t.Any) -> bool: + """Check if the given value should be tagged by this tag.""" + raise NotImplementedError + + def to_json(self, value: t.Any) -> t.Any: + """Convert the Python object to an object that is a valid JSON type. + The tag will be added later.""" + raise NotImplementedError + + def to_python(self, value: t.Any) -> t.Any: + """Convert the JSON representation back to the correct type. The tag + will already be removed.""" + raise NotImplementedError + + def tag(self, value: t.Any) -> t.Any: + """Convert the value to a valid JSON type and add the tag structure + around it.""" + return {self.key: self.to_json(value)} + + +class TagDict(JSONTag): + """Tag for 1-item dicts whose only key matches a registered tag. + + Internally, the dict key is suffixed with `__`, and the suffix is removed + when deserializing. + """ + + __slots__ = () + key = " di" + + def check(self, value: t.Any) -> bool: + return ( + isinstance(value, dict) + and len(value) == 1 + and next(iter(value)) in self.serializer.tags + ) + + def to_json(self, value: t.Any) -> t.Any: + key = next(iter(value)) + return {f"{key}__": self.serializer.tag(value[key])} + + def to_python(self, value: t.Any) -> t.Any: + key = next(iter(value)) + return {key[:-2]: value[key]} + + +class PassDict(JSONTag): + __slots__ = () + + def check(self, value: t.Any) -> bool: + return isinstance(value, dict) + + def to_json(self, value: t.Any) -> t.Any: + # JSON objects may only have string keys, so don't bother tagging the + # key here. + return {k: self.serializer.tag(v) for k, v in value.items()} + + tag = to_json + + +class TagTuple(JSONTag): + __slots__ = () + key = " t" + + def check(self, value: t.Any) -> bool: + return isinstance(value, tuple) + + def to_json(self, value: t.Any) -> t.Any: + return [self.serializer.tag(item) for item in value] + + def to_python(self, value: t.Any) -> t.Any: + return tuple(value) + + +class PassList(JSONTag): + __slots__ = () + + def check(self, value: t.Any) -> bool: + return isinstance(value, list) + + def to_json(self, value: t.Any) -> t.Any: + return [self.serializer.tag(item) for item in value] + + tag = to_json + + +class TagBytes(JSONTag): + __slots__ = () + key = " b" + + def check(self, value: t.Any) -> bool: + return isinstance(value, bytes) + + def to_json(self, value: t.Any) -> t.Any: + return b64encode(value).decode("ascii") + + def to_python(self, value: t.Any) -> t.Any: + return b64decode(value) + + +class TagMarkup(JSONTag): + """Serialize anything matching the :class:`~markupsafe.Markup` API by + having a ``__html__`` method to the result of that method. Always + deserializes to an instance of :class:`~markupsafe.Markup`.""" + + __slots__ = () + key = " m" + + def check(self, value: t.Any) -> bool: + return callable(getattr(value, "__html__", None)) + + def to_json(self, value: t.Any) -> t.Any: + return str(value.__html__()) + + def to_python(self, value: t.Any) -> t.Any: + return Markup(value) + + +class TagUUID(JSONTag): + __slots__ = () + key = " u" + + def check(self, value: t.Any) -> bool: + return isinstance(value, UUID) + + def to_json(self, value: t.Any) -> t.Any: + return value.hex + + def to_python(self, value: t.Any) -> t.Any: + return UUID(value) + + +class TagDateTime(JSONTag): + __slots__ = () + key = " d" + + def check(self, value: t.Any) -> bool: + return isinstance(value, datetime) + + def to_json(self, value: t.Any) -> t.Any: + return http_date(value) + + def to_python(self, value: t.Any) -> t.Any: + return parse_date(value) + + +class TaggedJSONSerializer: + """Serializer that uses a tag system to compactly represent objects that + are not JSON types. Passed as the intermediate serializer to + :class:`itsdangerous.Serializer`. + + The following extra types are supported: + + * :class:`dict` + * :class:`tuple` + * :class:`bytes` + * :class:`~markupsafe.Markup` + * :class:`~uuid.UUID` + * :class:`~datetime.datetime` + """ + + __slots__ = ("tags", "order") + + #: Tag classes to bind when creating the serializer. Other tags can be + #: added later using :meth:`~register`. + default_tags = [ + TagDict, + PassDict, + TagTuple, + PassList, + TagBytes, + TagMarkup, + TagUUID, + TagDateTime, + ] + + def __init__(self) -> None: + self.tags: dict[str, JSONTag] = {} + self.order: list[JSONTag] = [] + + for cls in self.default_tags: + self.register(cls) + + def register( + self, + tag_class: type[JSONTag], + force: bool = False, + index: int | None = None, + ) -> None: + """Register a new tag with this serializer. + + :param tag_class: tag class to register. Will be instantiated with this + serializer instance. + :param force: overwrite an existing tag. If false (default), a + :exc:`KeyError` is raised. + :param index: index to insert the new tag in the tag order. Useful when + the new tag is a special case of an existing tag. If ``None`` + (default), the tag is appended to the end of the order. + + :raise KeyError: if the tag key is already registered and ``force`` is + not true. + """ + tag = tag_class(self) + key = tag.key + + if key is not None: + if not force and key in self.tags: + raise KeyError(f"Tag '{key}' is already registered.") + + self.tags[key] = tag + + if index is None: + self.order.append(tag) + else: + self.order.insert(index, tag) + + def tag(self, value: t.Any) -> dict[str, t.Any]: + """Convert a value to a tagged representation if necessary.""" + for tag in self.order: + if tag.check(value): + return tag.tag(value) + + return value + + def untag(self, value: dict[str, t.Any]) -> t.Any: + """Convert a tagged representation back to the original type.""" + if len(value) != 1: + return value + + key = next(iter(value)) + + if key not in self.tags: + return value + + return self.tags[key].to_python(value[key]) + + def dumps(self, value: t.Any) -> str: + """Tag the value and dump it to a compact JSON string.""" + return dumps(self.tag(value), separators=(",", ":")) + + def loads(self, value: str) -> t.Any: + """Load data from a JSON string and deserialized any tagged objects.""" + return loads(value, object_hook=self.untag) diff --git a/venv/Lib/site-packages/flask/logging.py b/venv/Lib/site-packages/flask/logging.py new file mode 100644 index 0000000..99f6be8 --- /dev/null +++ b/venv/Lib/site-packages/flask/logging.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import logging +import sys +import typing as t + +from werkzeug.local import LocalProxy + +from .globals import request + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + + +@LocalProxy +def wsgi_errors_stream() -> t.TextIO: + """Find the most appropriate error stream for the application. If a request + is active, log to ``wsgi.errors``, otherwise use ``sys.stderr``. + + If you configure your own :class:`logging.StreamHandler`, you may want to + use this for the stream. If you are using file or dict configuration and + can't import this directly, you can refer to it as + ``ext://flask.logging.wsgi_errors_stream``. + """ + return request.environ["wsgi.errors"] if request else sys.stderr + + +def has_level_handler(logger: logging.Logger) -> bool: + """Check if there is a handler in the logging chain that will handle the + given logger's :meth:`effective level <~logging.Logger.getEffectiveLevel>`. + """ + level = logger.getEffectiveLevel() + current = logger + + while current: + if any(handler.level <= level for handler in current.handlers): + return True + + if not current.propagate: + break + + current = current.parent # type: ignore + + return False + + +#: Log messages to :func:`~flask.logging.wsgi_errors_stream` with the format +#: ``[%(asctime)s] %(levelname)s in %(module)s: %(message)s``. +default_handler = logging.StreamHandler(wsgi_errors_stream) # type: ignore +default_handler.setFormatter( + logging.Formatter("[%(asctime)s] %(levelname)s in %(module)s: %(message)s") +) + + +def create_logger(app: Flask) -> logging.Logger: + """Get the Flask app's logger and configure it if needed. + + The logger name will be the same as + :attr:`app.import_name `. + + When :attr:`~flask.Flask.debug` is enabled, set the logger level to + :data:`logging.DEBUG` if it is not set. + + If there is no handler for the logger's effective level, add a + :class:`~logging.StreamHandler` for + :func:`~flask.logging.wsgi_errors_stream` with a basic format. + """ + logger = logging.getLogger(app.name) + + if app.debug and not logger.level: + logger.setLevel(logging.DEBUG) + + if not has_level_handler(logger): + logger.addHandler(default_handler) + + return logger diff --git a/venv/Lib/site-packages/flask/py.typed b/venv/Lib/site-packages/flask/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/flask/scaffold.py b/venv/Lib/site-packages/flask/scaffold.py new file mode 100644 index 0000000..d15b873 --- /dev/null +++ b/venv/Lib/site-packages/flask/scaffold.py @@ -0,0 +1,873 @@ +from __future__ import annotations + +import importlib.util +import os +import pathlib +import sys +import typing as t +from collections import defaultdict +from datetime import timedelta +from functools import update_wrapper + +from jinja2 import FileSystemLoader +from werkzeug.exceptions import default_exceptions +from werkzeug.exceptions import HTTPException +from werkzeug.utils import cached_property + +from . import typing as ft +from .cli import AppGroup +from .globals import current_app +from .helpers import get_root_path +from .helpers import send_from_directory +from .templating import _default_template_ctx_processor + +if t.TYPE_CHECKING: # pragma: no cover + from .wrappers import Response + +# a singleton sentinel value for parameter defaults +_sentinel = object() + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) +T_after_request = t.TypeVar("T_after_request", bound=ft.AfterRequestCallable) +T_before_request = t.TypeVar("T_before_request", bound=ft.BeforeRequestCallable) +T_error_handler = t.TypeVar("T_error_handler", bound=ft.ErrorHandlerCallable) +T_teardown = t.TypeVar("T_teardown", bound=ft.TeardownCallable) +T_template_context_processor = t.TypeVar( + "T_template_context_processor", bound=ft.TemplateContextProcessorCallable +) +T_url_defaults = t.TypeVar("T_url_defaults", bound=ft.URLDefaultCallable) +T_url_value_preprocessor = t.TypeVar( + "T_url_value_preprocessor", bound=ft.URLValuePreprocessorCallable +) +T_route = t.TypeVar("T_route", bound=ft.RouteCallable) + + +def setupmethod(f: F) -> F: + f_name = f.__name__ + + def wrapper_func(self, *args: t.Any, **kwargs: t.Any) -> t.Any: + self._check_setup_finished(f_name) + return f(self, *args, **kwargs) + + return t.cast(F, update_wrapper(wrapper_func, f)) + + +class Scaffold: + """Common behavior shared between :class:`~flask.Flask` and + :class:`~flask.blueprints.Blueprint`. + + :param import_name: The import name of the module where this object + is defined. Usually :attr:`__name__` should be used. + :param static_folder: Path to a folder of static files to serve. + If this is set, a static route will be added. + :param static_url_path: URL prefix for the static route. + :param template_folder: Path to a folder containing template files. + for rendering. If this is set, a Jinja loader will be added. + :param root_path: The path that static, template, and resource files + are relative to. Typically not set, it is discovered based on + the ``import_name``. + + .. versionadded:: 2.0 + """ + + name: str + _static_folder: str | None = None + _static_url_path: str | None = None + + def __init__( + self, + import_name: str, + static_folder: str | os.PathLike | None = None, + static_url_path: str | None = None, + template_folder: str | os.PathLike | None = None, + root_path: str | None = None, + ): + #: The name of the package or module that this object belongs + #: to. Do not change this once it is set by the constructor. + self.import_name = import_name + + self.static_folder = static_folder # type: ignore + self.static_url_path = static_url_path + + #: The path to the templates folder, relative to + #: :attr:`root_path`, to add to the template loader. ``None`` if + #: templates should not be added. + self.template_folder = template_folder + + if root_path is None: + root_path = get_root_path(self.import_name) + + #: Absolute path to the package on the filesystem. Used to look + #: up resources contained in the package. + self.root_path = root_path + + #: The Click command group for registering CLI commands for this + #: object. The commands are available from the ``flask`` command + #: once the application has been discovered and blueprints have + #: been registered. + self.cli = AppGroup() + + #: A dictionary mapping endpoint names to view functions. + #: + #: To register a view function, use the :meth:`route` decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.view_functions: dict[str, t.Callable] = {} + + #: A data structure of registered error handlers, in the format + #: ``{scope: {code: {class: handler}}}``. The ``scope`` key is + #: the name of a blueprint the handlers are active for, or + #: ``None`` for all requests. The ``code`` key is the HTTP + #: status code for ``HTTPException``, or ``None`` for + #: other exceptions. The innermost dictionary maps exception + #: classes to handler functions. + #: + #: To register an error handler, use the :meth:`errorhandler` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.error_handler_spec: dict[ + ft.AppOrBlueprintKey, + dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]], + ] = defaultdict(lambda: defaultdict(dict)) + + #: A data structure of functions to call at the beginning of + #: each request, in the format ``{scope: [functions]}``. The + #: ``scope`` key is the name of a blueprint the functions are + #: active for, or ``None`` for all requests. + #: + #: To register a function, use the :meth:`before_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.before_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable] + ] = defaultdict(list) + + #: A data structure of functions to call at the end of each + #: request, in the format ``{scope: [functions]}``. The + #: ``scope`` key is the name of a blueprint the functions are + #: active for, or ``None`` for all requests. + #: + #: To register a function, use the :meth:`after_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.after_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.AfterRequestCallable] + ] = defaultdict(list) + + #: A data structure of functions to call at the end of each + #: request even if an exception is raised, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`teardown_request` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.teardown_request_funcs: dict[ + ft.AppOrBlueprintKey, list[ft.TeardownCallable] + ] = defaultdict(list) + + #: A data structure of functions to call to pass extra context + #: values when rendering templates, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`context_processor` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.template_context_processors: dict[ + ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable] + ] = defaultdict(list, {None: [_default_template_ctx_processor]}) + + #: A data structure of functions to call to modify the keyword + #: arguments passed to the view function, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the + #: :meth:`url_value_preprocessor` decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.url_value_preprocessors: dict[ + ft.AppOrBlueprintKey, + list[ft.URLValuePreprocessorCallable], + ] = defaultdict(list) + + #: A data structure of functions to call to modify the keyword + #: arguments when generating URLs, in the format + #: ``{scope: [functions]}``. The ``scope`` key is the name of a + #: blueprint the functions are active for, or ``None`` for all + #: requests. + #: + #: To register a function, use the :meth:`url_defaults` + #: decorator. + #: + #: This data structure is internal. It should not be modified + #: directly and its format may change at any time. + self.url_default_functions: dict[ + ft.AppOrBlueprintKey, list[ft.URLDefaultCallable] + ] = defaultdict(list) + + def __repr__(self) -> str: + return f"<{type(self).__name__} {self.name!r}>" + + def _check_setup_finished(self, f_name: str) -> None: + raise NotImplementedError + + @property + def static_folder(self) -> str | None: + """The absolute path to the configured static folder. ``None`` + if no static folder is set. + """ + if self._static_folder is not None: + return os.path.join(self.root_path, self._static_folder) + else: + return None + + @static_folder.setter + def static_folder(self, value: str | os.PathLike | None) -> None: + if value is not None: + value = os.fspath(value).rstrip(r"\/") + + self._static_folder = value + + @property + def has_static_folder(self) -> bool: + """``True`` if :attr:`static_folder` is set. + + .. versionadded:: 0.5 + """ + return self.static_folder is not None + + @property + def static_url_path(self) -> str | None: + """The URL prefix that the static route will be accessible from. + + If it was not configured during init, it is derived from + :attr:`static_folder`. + """ + if self._static_url_path is not None: + return self._static_url_path + + if self.static_folder is not None: + basename = os.path.basename(self.static_folder) + return f"/{basename}".rstrip("/") + + return None + + @static_url_path.setter + def static_url_path(self, value: str | None) -> None: + if value is not None: + value = value.rstrip("/") + + self._static_url_path = value + + def get_send_file_max_age(self, filename: str | None) -> int | None: + """Used by :func:`send_file` to determine the ``max_age`` cache + value for a given file path if it wasn't passed. + + By default, this returns :data:`SEND_FILE_MAX_AGE_DEFAULT` from + the configuration of :data:`~flask.current_app`. This defaults + to ``None``, which tells the browser to use conditional requests + instead of a timed cache, which is usually preferable. + + .. versionchanged:: 2.0 + The default configuration is ``None`` instead of 12 hours. + + .. versionadded:: 0.9 + """ + value = current_app.config["SEND_FILE_MAX_AGE_DEFAULT"] + + if value is None: + return None + + if isinstance(value, timedelta): + return int(value.total_seconds()) + + return value + + def send_static_file(self, filename: str) -> Response: + """The view function used to serve files from + :attr:`static_folder`. A route is automatically registered for + this view at :attr:`static_url_path` if :attr:`static_folder` is + set. + + .. versionadded:: 0.5 + """ + if not self.has_static_folder: + raise RuntimeError("'static_folder' must be set to serve static_files.") + + # send_file only knows to call get_send_file_max_age on the app, + # call it here so it works for blueprints too. + max_age = self.get_send_file_max_age(filename) + return send_from_directory( + t.cast(str, self.static_folder), filename, max_age=max_age + ) + + @cached_property + def jinja_loader(self) -> FileSystemLoader | None: + """The Jinja loader for this object's templates. By default this + is a class :class:`jinja2.loaders.FileSystemLoader` to + :attr:`template_folder` if it is set. + + .. versionadded:: 0.5 + """ + if self.template_folder is not None: + return FileSystemLoader(os.path.join(self.root_path, self.template_folder)) + else: + return None + + def open_resource(self, resource: str, mode: str = "rb") -> t.IO[t.AnyStr]: + """Open a resource file relative to :attr:`root_path` for + reading. + + For example, if the file ``schema.sql`` is next to the file + ``app.py`` where the ``Flask`` app is defined, it can be opened + with: + + .. code-block:: python + + with app.open_resource("schema.sql") as f: + conn.executescript(f.read()) + + :param resource: Path to the resource relative to + :attr:`root_path`. + :param mode: Open the file in this mode. Only reading is + supported, valid values are "r" (or "rt") and "rb". + """ + if mode not in {"r", "rt", "rb"}: + raise ValueError("Resources can only be opened for reading.") + + return open(os.path.join(self.root_path, resource), mode) + + def _method_route( + self, + method: str, + rule: str, + options: dict, + ) -> t.Callable[[T_route], T_route]: + if "methods" in options: + raise TypeError("Use the 'route' decorator to use the 'methods' argument.") + + return self.route(rule, methods=[method], **options) + + @setupmethod + def get(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["GET"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("GET", rule, options) + + @setupmethod + def post(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["POST"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("POST", rule, options) + + @setupmethod + def put(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["PUT"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("PUT", rule, options) + + @setupmethod + def delete(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["DELETE"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("DELETE", rule, options) + + @setupmethod + def patch(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Shortcut for :meth:`route` with ``methods=["PATCH"]``. + + .. versionadded:: 2.0 + """ + return self._method_route("PATCH", rule, options) + + @setupmethod + def route(self, rule: str, **options: t.Any) -> t.Callable[[T_route], T_route]: + """Decorate a view function to register it with the given URL + rule and options. Calls :meth:`add_url_rule`, which has more + details about the implementation. + + .. code-block:: python + + @app.route("/") + def index(): + return "Hello, World!" + + See :ref:`url-route-registrations`. + + The endpoint name for the route defaults to the name of the view + function if the ``endpoint`` parameter isn't passed. + + The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` and + ``OPTIONS`` are added automatically. + + :param rule: The URL rule string. + :param options: Extra options passed to the + :class:`~werkzeug.routing.Rule` object. + """ + + def decorator(f: T_route) -> T_route: + endpoint = options.pop("endpoint", None) + self.add_url_rule(rule, endpoint, f, **options) + return f + + return decorator + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + """Register a rule for routing incoming requests and building + URLs. The :meth:`route` decorator is a shortcut to call this + with the ``view_func`` argument. These are equivalent: + + .. code-block:: python + + @app.route("/") + def index(): + ... + + .. code-block:: python + + def index(): + ... + + app.add_url_rule("/", view_func=index) + + See :ref:`url-route-registrations`. + + The endpoint name for the route defaults to the name of the view + function if the ``endpoint`` parameter isn't passed. An error + will be raised if a function has already been registered for the + endpoint. + + The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` is + always added automatically, and ``OPTIONS`` is added + automatically by default. + + ``view_func`` does not necessarily need to be passed, but if the + rule should participate in routing an endpoint name must be + associated with a view function at some point with the + :meth:`endpoint` decorator. + + .. code-block:: python + + app.add_url_rule("/", endpoint="index") + + @app.endpoint("index") + def index(): + ... + + If ``view_func`` has a ``required_methods`` attribute, those + methods are added to the passed and automatic methods. If it + has a ``provide_automatic_methods`` attribute, it is used as the + default if the parameter is not passed. + + :param rule: The URL rule string. + :param endpoint: The endpoint name to associate with the rule + and view function. Used when routing and building URLs. + Defaults to ``view_func.__name__``. + :param view_func: The view function to associate with the + endpoint name. + :param provide_automatic_options: Add the ``OPTIONS`` method and + respond to ``OPTIONS`` requests automatically. + :param options: Extra options passed to the + :class:`~werkzeug.routing.Rule` object. + """ + raise NotImplementedError + + @setupmethod + def endpoint(self, endpoint: str) -> t.Callable[[F], F]: + """Decorate a view function to register it for the given + endpoint. Used if a rule is added without a ``view_func`` with + :meth:`add_url_rule`. + + .. code-block:: python + + app.add_url_rule("/ex", endpoint="example") + + @app.endpoint("example") + def example(): + ... + + :param endpoint: The endpoint name to associate with the view + function. + """ + + def decorator(f: F) -> F: + self.view_functions[endpoint] = f + return f + + return decorator + + @setupmethod + def before_request(self, f: T_before_request) -> T_before_request: + """Register a function to run before each request. + + For example, this can be used to open a database connection, or + to load the logged in user from the session. + + .. code-block:: python + + @app.before_request + def load_user(): + if "user_id" in session: + g.user = db.session.get(session["user_id"]) + + The function will be called without any arguments. If it returns + a non-``None`` value, the value is handled as if it was the + return value from the view, and further request handling is + stopped. + + This is available on both app and blueprint objects. When used on an app, this + executes before every request. When used on a blueprint, this executes before + every request that the blueprint handles. To register with a blueprint and + execute before every request, use :meth:`.Blueprint.before_app_request`. + """ + self.before_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def after_request(self, f: T_after_request) -> T_after_request: + """Register a function to run after each request to this object. + + The function is called with the response object, and must return + a response object. This allows the functions to modify or + replace the response before it is sent. + + If a function raises an exception, any remaining + ``after_request`` functions will not be called. Therefore, this + should not be used for actions that must execute, such as to + close resources. Use :meth:`teardown_request` for that. + + This is available on both app and blueprint objects. When used on an app, this + executes after every request. When used on a blueprint, this executes after + every request that the blueprint handles. To register with a blueprint and + execute after every request, use :meth:`.Blueprint.after_app_request`. + """ + self.after_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_request(self, f: T_teardown) -> T_teardown: + """Register a function to be called when the request context is + popped. Typically this happens at the end of each request, but + contexts may be pushed manually as well during testing. + + .. code-block:: python + + with app.test_request_context(): + ... + + When the ``with`` block exits (or ``ctx.pop()`` is called), the + teardown functions are called just before the request context is + made inactive. + + When a teardown function was called because of an unhandled + exception it will be passed an error object. If an + :meth:`errorhandler` is registered, it will handle the exception + and the teardown will not receive it. + + Teardown functions must avoid raising exceptions. If they + execute code that might fail they must surround that code with a + ``try``/``except`` block and log any errors. + + The return values of teardown functions are ignored. + + This is available on both app and blueprint objects. When used on an app, this + executes after every request. When used on a blueprint, this executes after + every request that the blueprint handles. To register with a blueprint and + execute after every request, use :meth:`.Blueprint.teardown_app_request`. + """ + self.teardown_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def context_processor( + self, + f: T_template_context_processor, + ) -> T_template_context_processor: + """Registers a template context processor function. These functions run before + rendering a template. The keys of the returned dict are added as variables + available in the template. + + This is available on both app and blueprint objects. When used on an app, this + is called for every rendered template. When used on a blueprint, this is called + for templates rendered from the blueprint's views. To register with a blueprint + and affect every template, use :meth:`.Blueprint.app_context_processor`. + """ + self.template_context_processors[None].append(f) + return f + + @setupmethod + def url_value_preprocessor( + self, + f: T_url_value_preprocessor, + ) -> T_url_value_preprocessor: + """Register a URL value preprocessor function for all view + functions in the application. These functions will be called before the + :meth:`before_request` functions. + + The function can modify the values captured from the matched url before + they are passed to the view. For example, this can be used to pop a + common language code value and place it in ``g`` rather than pass it to + every view. + + The function is passed the endpoint name and values dict. The return + value is ignored. + + This is available on both app and blueprint objects. When used on an app, this + is called for every request. When used on a blueprint, this is called for + requests that the blueprint handles. To register with a blueprint and affect + every request, use :meth:`.Blueprint.app_url_value_preprocessor`. + """ + self.url_value_preprocessors[None].append(f) + return f + + @setupmethod + def url_defaults(self, f: T_url_defaults) -> T_url_defaults: + """Callback function for URL defaults for all view functions of the + application. It's called with the endpoint and values and should + update the values passed in place. + + This is available on both app and blueprint objects. When used on an app, this + is called for every request. When used on a blueprint, this is called for + requests that the blueprint handles. To register with a blueprint and affect + every request, use :meth:`.Blueprint.app_url_defaults`. + """ + self.url_default_functions[None].append(f) + return f + + @setupmethod + def errorhandler( + self, code_or_exception: type[Exception] | int + ) -> t.Callable[[T_error_handler], T_error_handler]: + """Register a function to handle errors by code or exception class. + + A decorator that is used to register a function given an + error code. Example:: + + @app.errorhandler(404) + def page_not_found(error): + return 'This page does not exist', 404 + + You can also register handlers for arbitrary exceptions:: + + @app.errorhandler(DatabaseError) + def special_exception_handler(error): + return 'Database connection failed', 500 + + This is available on both app and blueprint objects. When used on an app, this + can handle errors from every request. When used on a blueprint, this can handle + errors from requests that the blueprint handles. To register with a blueprint + and affect every request, use :meth:`.Blueprint.app_errorhandler`. + + .. versionadded:: 0.7 + Use :meth:`register_error_handler` instead of modifying + :attr:`error_handler_spec` directly, for application wide error + handlers. + + .. versionadded:: 0.7 + One can now additionally also register custom exception types + that do not necessarily have to be a subclass of the + :class:`~werkzeug.exceptions.HTTPException` class. + + :param code_or_exception: the code as integer for the handler, or + an arbitrary exception + """ + + def decorator(f: T_error_handler) -> T_error_handler: + self.register_error_handler(code_or_exception, f) + return f + + return decorator + + @setupmethod + def register_error_handler( + self, + code_or_exception: type[Exception] | int, + f: ft.ErrorHandlerCallable, + ) -> None: + """Alternative error attach function to the :meth:`errorhandler` + decorator that is more straightforward to use for non decorator + usage. + + .. versionadded:: 0.7 + """ + exc_class, code = self._get_exc_class_and_code(code_or_exception) + self.error_handler_spec[None][code][exc_class] = f + + @staticmethod + def _get_exc_class_and_code( + exc_class_or_code: type[Exception] | int, + ) -> tuple[type[Exception], int | None]: + """Get the exception class being handled. For HTTP status codes + or ``HTTPException`` subclasses, return both the exception and + status code. + + :param exc_class_or_code: Any exception class, or an HTTP status + code as an integer. + """ + exc_class: type[Exception] + + if isinstance(exc_class_or_code, int): + try: + exc_class = default_exceptions[exc_class_or_code] + except KeyError: + raise ValueError( + f"'{exc_class_or_code}' is not a recognized HTTP" + " error code. Use a subclass of HTTPException with" + " that code instead." + ) from None + else: + exc_class = exc_class_or_code + + if isinstance(exc_class, Exception): + raise TypeError( + f"{exc_class!r} is an instance, not a class. Handlers" + " can only be registered for Exception classes or HTTP" + " error codes." + ) + + if not issubclass(exc_class, Exception): + raise ValueError( + f"'{exc_class.__name__}' is not a subclass of Exception." + " Handlers can only be registered for Exception classes" + " or HTTP error codes." + ) + + if issubclass(exc_class, HTTPException): + return exc_class, exc_class.code + else: + return exc_class, None + + +def _endpoint_from_view_func(view_func: t.Callable) -> str: + """Internal helper that returns the default endpoint for a given + function. This always is the function name. + """ + assert view_func is not None, "expected view func if endpoint is not provided." + return view_func.__name__ + + +def _path_is_relative_to(path: pathlib.PurePath, base: str) -> bool: + # Path.is_relative_to doesn't exist until Python 3.9 + try: + path.relative_to(base) + return True + except ValueError: + return False + + +def _find_package_path(import_name): + """Find the path that contains the package or module.""" + root_mod_name, _, _ = import_name.partition(".") + + try: + root_spec = importlib.util.find_spec(root_mod_name) + + if root_spec is None: + raise ValueError("not found") + except (ImportError, ValueError): + # ImportError: the machinery told us it does not exist + # ValueError: + # - the module name was invalid + # - the module name is __main__ + # - we raised `ValueError` due to `root_spec` being `None` + return os.getcwd() + + if root_spec.origin in {"namespace", None}: + # namespace package + package_spec = importlib.util.find_spec(import_name) + + if package_spec is not None and package_spec.submodule_search_locations: + # Pick the path in the namespace that contains the submodule. + package_path = pathlib.Path( + os.path.commonpath(package_spec.submodule_search_locations) + ) + search_location = next( + location + for location in root_spec.submodule_search_locations + if _path_is_relative_to(package_path, location) + ) + else: + # Pick the first path. + search_location = root_spec.submodule_search_locations[0] + + return os.path.dirname(search_location) + elif root_spec.submodule_search_locations: + # package with __init__.py + return os.path.dirname(os.path.dirname(root_spec.origin)) + else: + # module + return os.path.dirname(root_spec.origin) + + +def find_package(import_name: str): + """Find the prefix that a package is installed under, and the path + that it would be imported from. + + The prefix is the directory containing the standard directory + hierarchy (lib, bin, etc.). If the package is not installed to the + system (:attr:`sys.prefix`) or a virtualenv (``site-packages``), + ``None`` is returned. + + The path is the entry in :attr:`sys.path` that contains the package + for import. If the package is not installed, it's assumed that the + package was imported from the current working directory. + """ + package_path = _find_package_path(import_name) + py_prefix = os.path.abspath(sys.prefix) + + # installed to the system + if _path_is_relative_to(pathlib.PurePath(package_path), py_prefix): + return py_prefix, package_path + + site_parent, site_folder = os.path.split(package_path) + + # installed to a virtualenv + if site_folder.lower() == "site-packages": + parent, folder = os.path.split(site_parent) + + # Windows (prefix/lib/site-packages) + if folder.lower() == "lib": + return parent, package_path + + # Unix (prefix/lib/pythonX.Y/site-packages) + if os.path.basename(parent).lower() == "lib": + return os.path.dirname(parent), package_path + + # something else (prefix/site-packages) + return site_parent, package_path + + # not installed + return None, package_path diff --git a/venv/Lib/site-packages/flask/sessions.py b/venv/Lib/site-packages/flask/sessions.py new file mode 100644 index 0000000..e5650d6 --- /dev/null +++ b/venv/Lib/site-packages/flask/sessions.py @@ -0,0 +1,367 @@ +from __future__ import annotations + +import hashlib +import typing as t +from collections.abc import MutableMapping +from datetime import datetime +from datetime import timezone + +from itsdangerous import BadSignature +from itsdangerous import URLSafeTimedSerializer +from werkzeug.datastructures import CallbackDict + +from .json.tag import TaggedJSONSerializer + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .wrappers import Request, Response + + +class SessionMixin(MutableMapping): + """Expands a basic dictionary with session attributes.""" + + @property + def permanent(self) -> bool: + """This reflects the ``'_permanent'`` key in the dict.""" + return self.get("_permanent", False) + + @permanent.setter + def permanent(self, value: bool) -> None: + self["_permanent"] = bool(value) + + #: Some implementations can detect whether a session is newly + #: created, but that is not guaranteed. Use with caution. The mixin + # default is hard-coded ``False``. + new = False + + #: Some implementations can detect changes to the session and set + #: this when that happens. The mixin default is hard coded to + #: ``True``. + modified = True + + #: Some implementations can detect when session data is read or + #: written and set this when that happens. The mixin default is hard + #: coded to ``True``. + accessed = True + + +class SecureCookieSession(CallbackDict, SessionMixin): + """Base class for sessions based on signed cookies. + + This session backend will set the :attr:`modified` and + :attr:`accessed` attributes. It cannot reliably track whether a + session is new (vs. empty), so :attr:`new` remains hard coded to + ``False``. + """ + + #: When data is changed, this is set to ``True``. Only the session + #: dictionary itself is tracked; if the session contains mutable + #: data (for example a nested dict) then this must be set to + #: ``True`` manually when modifying that data. The session cookie + #: will only be written to the response if this is ``True``. + modified = False + + #: When data is read or written, this is set to ``True``. Used by + # :class:`.SecureCookieSessionInterface` to add a ``Vary: Cookie`` + #: header, which allows caching proxies to cache different pages for + #: different users. + accessed = False + + def __init__(self, initial: t.Any = None) -> None: + def on_update(self) -> None: + self.modified = True + self.accessed = True + + super().__init__(initial, on_update) + + def __getitem__(self, key: str) -> t.Any: + self.accessed = True + return super().__getitem__(key) + + def get(self, key: str, default: t.Any = None) -> t.Any: + self.accessed = True + return super().get(key, default) + + def setdefault(self, key: str, default: t.Any = None) -> t.Any: + self.accessed = True + return super().setdefault(key, default) + + +class NullSession(SecureCookieSession): + """Class used to generate nicer error messages if sessions are not + available. Will still allow read-only access to the empty session + but fail on setting. + """ + + def _fail(self, *args: t.Any, **kwargs: t.Any) -> t.NoReturn: + raise RuntimeError( + "The session is unavailable because no secret " + "key was set. Set the secret_key on the " + "application to something unique and secret." + ) + + __setitem__ = __delitem__ = clear = pop = popitem = update = setdefault = _fail # type: ignore # noqa: B950 + del _fail + + +class SessionInterface: + """The basic interface you have to implement in order to replace the + default session interface which uses werkzeug's securecookie + implementation. The only methods you have to implement are + :meth:`open_session` and :meth:`save_session`, the others have + useful defaults which you don't need to change. + + The session object returned by the :meth:`open_session` method has to + provide a dictionary like interface plus the properties and methods + from the :class:`SessionMixin`. We recommend just subclassing a dict + and adding that mixin:: + + class Session(dict, SessionMixin): + pass + + If :meth:`open_session` returns ``None`` Flask will call into + :meth:`make_null_session` to create a session that acts as replacement + if the session support cannot work because some requirement is not + fulfilled. The default :class:`NullSession` class that is created + will complain that the secret key was not set. + + To replace the session interface on an application all you have to do + is to assign :attr:`flask.Flask.session_interface`:: + + app = Flask(__name__) + app.session_interface = MySessionInterface() + + Multiple requests with the same session may be sent and handled + concurrently. When implementing a new session interface, consider + whether reads or writes to the backing store must be synchronized. + There is no guarantee on the order in which the session for each + request is opened or saved, it will occur in the order that requests + begin and end processing. + + .. versionadded:: 0.8 + """ + + #: :meth:`make_null_session` will look here for the class that should + #: be created when a null session is requested. Likewise the + #: :meth:`is_null_session` method will perform a typecheck against + #: this type. + null_session_class = NullSession + + #: A flag that indicates if the session interface is pickle based. + #: This can be used by Flask extensions to make a decision in regards + #: to how to deal with the session object. + #: + #: .. versionadded:: 0.10 + pickle_based = False + + def make_null_session(self, app: Flask) -> NullSession: + """Creates a null session which acts as a replacement object if the + real session support could not be loaded due to a configuration + error. This mainly aids the user experience because the job of the + null session is to still support lookup without complaining but + modifications are answered with a helpful error message of what + failed. + + This creates an instance of :attr:`null_session_class` by default. + """ + return self.null_session_class() + + def is_null_session(self, obj: object) -> bool: + """Checks if a given object is a null session. Null sessions are + not asked to be saved. + + This checks if the object is an instance of :attr:`null_session_class` + by default. + """ + return isinstance(obj, self.null_session_class) + + def get_cookie_name(self, app: Flask) -> str: + """The name of the session cookie. Uses``app.config["SESSION_COOKIE_NAME"]``.""" + return app.config["SESSION_COOKIE_NAME"] + + def get_cookie_domain(self, app: Flask) -> str | None: + """The value of the ``Domain`` parameter on the session cookie. If not set, + browsers will only send the cookie to the exact domain it was set from. + Otherwise, they will send it to any subdomain of the given value as well. + + Uses the :data:`SESSION_COOKIE_DOMAIN` config. + + .. versionchanged:: 2.3 + Not set by default, does not fall back to ``SERVER_NAME``. + """ + rv = app.config["SESSION_COOKIE_DOMAIN"] + return rv if rv else None + + def get_cookie_path(self, app: Flask) -> str: + """Returns the path for which the cookie should be valid. The + default implementation uses the value from the ``SESSION_COOKIE_PATH`` + config var if it's set, and falls back to ``APPLICATION_ROOT`` or + uses ``/`` if it's ``None``. + """ + return app.config["SESSION_COOKIE_PATH"] or app.config["APPLICATION_ROOT"] + + def get_cookie_httponly(self, app: Flask) -> bool: + """Returns True if the session cookie should be httponly. This + currently just returns the value of the ``SESSION_COOKIE_HTTPONLY`` + config var. + """ + return app.config["SESSION_COOKIE_HTTPONLY"] + + def get_cookie_secure(self, app: Flask) -> bool: + """Returns True if the cookie should be secure. This currently + just returns the value of the ``SESSION_COOKIE_SECURE`` setting. + """ + return app.config["SESSION_COOKIE_SECURE"] + + def get_cookie_samesite(self, app: Flask) -> str: + """Return ``'Strict'`` or ``'Lax'`` if the cookie should use the + ``SameSite`` attribute. This currently just returns the value of + the :data:`SESSION_COOKIE_SAMESITE` setting. + """ + return app.config["SESSION_COOKIE_SAMESITE"] + + def get_expiration_time(self, app: Flask, session: SessionMixin) -> datetime | None: + """A helper method that returns an expiration date for the session + or ``None`` if the session is linked to the browser session. The + default implementation returns now + the permanent session + lifetime configured on the application. + """ + if session.permanent: + return datetime.now(timezone.utc) + app.permanent_session_lifetime + return None + + def should_set_cookie(self, app: Flask, session: SessionMixin) -> bool: + """Used by session backends to determine if a ``Set-Cookie`` header + should be set for this session cookie for this response. If the session + has been modified, the cookie is set. If the session is permanent and + the ``SESSION_REFRESH_EACH_REQUEST`` config is true, the cookie is + always set. + + This check is usually skipped if the session was deleted. + + .. versionadded:: 0.11 + """ + + return session.modified or ( + session.permanent and app.config["SESSION_REFRESH_EACH_REQUEST"] + ) + + def open_session(self, app: Flask, request: Request) -> SessionMixin | None: + """This is called at the beginning of each request, after + pushing the request context, before matching the URL. + + This must return an object which implements a dictionary-like + interface as well as the :class:`SessionMixin` interface. + + This will return ``None`` to indicate that loading failed in + some way that is not immediately an error. The request + context will fall back to using :meth:`make_null_session` + in this case. + """ + raise NotImplementedError() + + def save_session( + self, app: Flask, session: SessionMixin, response: Response + ) -> None: + """This is called at the end of each request, after generating + a response, before removing the request context. It is skipped + if :meth:`is_null_session` returns ``True``. + """ + raise NotImplementedError() + + +session_json_serializer = TaggedJSONSerializer() + + +class SecureCookieSessionInterface(SessionInterface): + """The default session interface that stores sessions in signed cookies + through the :mod:`itsdangerous` module. + """ + + #: the salt that should be applied on top of the secret key for the + #: signing of cookie based sessions. + salt = "cookie-session" + #: the hash function to use for the signature. The default is sha1 + digest_method = staticmethod(hashlib.sha1) + #: the name of the itsdangerous supported key derivation. The default + #: is hmac. + key_derivation = "hmac" + #: A python serializer for the payload. The default is a compact + #: JSON derived serializer with support for some extra Python types + #: such as datetime objects or tuples. + serializer = session_json_serializer + session_class = SecureCookieSession + + def get_signing_serializer(self, app: Flask) -> URLSafeTimedSerializer | None: + if not app.secret_key: + return None + signer_kwargs = dict( + key_derivation=self.key_derivation, digest_method=self.digest_method + ) + return URLSafeTimedSerializer( + app.secret_key, + salt=self.salt, + serializer=self.serializer, + signer_kwargs=signer_kwargs, + ) + + def open_session(self, app: Flask, request: Request) -> SecureCookieSession | None: + s = self.get_signing_serializer(app) + if s is None: + return None + val = request.cookies.get(self.get_cookie_name(app)) + if not val: + return self.session_class() + max_age = int(app.permanent_session_lifetime.total_seconds()) + try: + data = s.loads(val, max_age=max_age) + return self.session_class(data) + except BadSignature: + return self.session_class() + + def save_session( + self, app: Flask, session: SessionMixin, response: Response + ) -> None: + name = self.get_cookie_name(app) + domain = self.get_cookie_domain(app) + path = self.get_cookie_path(app) + secure = self.get_cookie_secure(app) + samesite = self.get_cookie_samesite(app) + httponly = self.get_cookie_httponly(app) + + # Add a "Vary: Cookie" header if the session was accessed at all. + if session.accessed: + response.vary.add("Cookie") + + # If the session is modified to be empty, remove the cookie. + # If the session is empty, return without setting the cookie. + if not session: + if session.modified: + response.delete_cookie( + name, + domain=domain, + path=path, + secure=secure, + samesite=samesite, + httponly=httponly, + ) + response.vary.add("Cookie") + + return + + if not self.should_set_cookie(app, session): + return + + expires = self.get_expiration_time(app, session) + val = self.get_signing_serializer(app).dumps(dict(session)) # type: ignore + response.set_cookie( + name, + val, # type: ignore + expires=expires, + httponly=httponly, + domain=domain, + path=path, + secure=secure, + samesite=samesite, + ) + response.vary.add("Cookie") diff --git a/venv/Lib/site-packages/flask/signals.py b/venv/Lib/site-packages/flask/signals.py new file mode 100644 index 0000000..d79f21f --- /dev/null +++ b/venv/Lib/site-packages/flask/signals.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import typing as t +import warnings + +from blinker import Namespace + +# This namespace is only for signals provided by Flask itself. +_signals = Namespace() + +template_rendered = _signals.signal("template-rendered") +before_render_template = _signals.signal("before-render-template") +request_started = _signals.signal("request-started") +request_finished = _signals.signal("request-finished") +request_tearing_down = _signals.signal("request-tearing-down") +got_request_exception = _signals.signal("got-request-exception") +appcontext_tearing_down = _signals.signal("appcontext-tearing-down") +appcontext_pushed = _signals.signal("appcontext-pushed") +appcontext_popped = _signals.signal("appcontext-popped") +message_flashed = _signals.signal("message-flashed") + + +def __getattr__(name: str) -> t.Any: + if name == "signals_available": + warnings.warn( + "The 'signals_available' attribute is deprecated and will be removed in" + " Flask 2.4. Signals are always available.", + DeprecationWarning, + stacklevel=2, + ) + return True + + raise AttributeError(name) diff --git a/venv/Lib/site-packages/flask/templating.py b/venv/Lib/site-packages/flask/templating.py new file mode 100644 index 0000000..769108f --- /dev/null +++ b/venv/Lib/site-packages/flask/templating.py @@ -0,0 +1,220 @@ +from __future__ import annotations + +import typing as t + +from jinja2 import BaseLoader +from jinja2 import Environment as BaseEnvironment +from jinja2 import Template +from jinja2 import TemplateNotFound + +from .globals import _cv_app +from .globals import _cv_request +from .globals import current_app +from .globals import request +from .helpers import stream_with_context +from .signals import before_render_template +from .signals import template_rendered + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .scaffold import Scaffold + + +def _default_template_ctx_processor() -> dict[str, t.Any]: + """Default template context processor. Injects `request`, + `session` and `g`. + """ + appctx = _cv_app.get(None) + reqctx = _cv_request.get(None) + rv: dict[str, t.Any] = {} + if appctx is not None: + rv["g"] = appctx.g + if reqctx is not None: + rv["request"] = reqctx.request + rv["session"] = reqctx.session + return rv + + +class Environment(BaseEnvironment): + """Works like a regular Jinja2 environment but has some additional + knowledge of how Flask's blueprint works so that it can prepend the + name of the blueprint to referenced templates if necessary. + """ + + def __init__(self, app: Flask, **options: t.Any) -> None: + if "loader" not in options: + options["loader"] = app.create_global_jinja_loader() + BaseEnvironment.__init__(self, **options) + self.app = app + + +class DispatchingJinjaLoader(BaseLoader): + """A loader that looks for templates in the application and all + the blueprint folders. + """ + + def __init__(self, app: Flask) -> None: + self.app = app + + def get_source( # type: ignore + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + if self.app.config["EXPLAIN_TEMPLATE_LOADING"]: + return self._get_source_explained(environment, template) + return self._get_source_fast(environment, template) + + def _get_source_explained( + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + attempts = [] + rv: tuple[str, str | None, t.Callable[[], bool] | None] | None + trv: None | (tuple[str, str | None, t.Callable[[], bool] | None]) = None + + for srcobj, loader in self._iter_loaders(template): + try: + rv = loader.get_source(environment, template) + if trv is None: + trv = rv + except TemplateNotFound: + rv = None + attempts.append((loader, srcobj, rv)) + + from .debughelpers import explain_template_loading_attempts + + explain_template_loading_attempts(self.app, template, attempts) + + if trv is not None: + return trv + raise TemplateNotFound(template) + + def _get_source_fast( + self, environment: Environment, template: str + ) -> tuple[str, str | None, t.Callable | None]: + for _srcobj, loader in self._iter_loaders(template): + try: + return loader.get_source(environment, template) + except TemplateNotFound: + continue + raise TemplateNotFound(template) + + def _iter_loaders( + self, template: str + ) -> t.Generator[tuple[Scaffold, BaseLoader], None, None]: + loader = self.app.jinja_loader + if loader is not None: + yield self.app, loader + + for blueprint in self.app.iter_blueprints(): + loader = blueprint.jinja_loader + if loader is not None: + yield blueprint, loader + + def list_templates(self) -> list[str]: + result = set() + loader = self.app.jinja_loader + if loader is not None: + result.update(loader.list_templates()) + + for blueprint in self.app.iter_blueprints(): + loader = blueprint.jinja_loader + if loader is not None: + for template in loader.list_templates(): + result.add(template) + + return list(result) + + +def _render(app: Flask, template: Template, context: dict[str, t.Any]) -> str: + app.update_template_context(context) + before_render_template.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + rv = template.render(context) + template_rendered.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + return rv + + +def render_template( + template_name_or_list: str | Template | list[str | Template], + **context: t.Any, +) -> str: + """Render a template by name with the given context. + + :param template_name_or_list: The name of the template to render. If + a list is given, the first name to exist will be rendered. + :param context: The variables to make available in the template. + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.get_or_select_template(template_name_or_list) + return _render(app, template, context) + + +def render_template_string(source: str, **context: t.Any) -> str: + """Render a template from the given source string with the given + context. + + :param source: The source code of the template to render. + :param context: The variables to make available in the template. + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.from_string(source) + return _render(app, template, context) + + +def _stream( + app: Flask, template: Template, context: dict[str, t.Any] +) -> t.Iterator[str]: + app.update_template_context(context) + before_render_template.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + + def generate() -> t.Iterator[str]: + yield from template.generate(context) + template_rendered.send( + app, _async_wrapper=app.ensure_sync, template=template, context=context + ) + + rv = generate() + + # If a request context is active, keep it while generating. + if request: + rv = stream_with_context(rv) + + return rv + + +def stream_template( + template_name_or_list: str | Template | list[str | Template], + **context: t.Any, +) -> t.Iterator[str]: + """Render a template by name with the given context as a stream. + This returns an iterator of strings, which can be used as a + streaming response from a view. + + :param template_name_or_list: The name of the template to render. If + a list is given, the first name to exist will be rendered. + :param context: The variables to make available in the template. + + .. versionadded:: 2.2 + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.get_or_select_template(template_name_or_list) + return _stream(app, template, context) + + +def stream_template_string(source: str, **context: t.Any) -> t.Iterator[str]: + """Render a template from the given source string with the given + context as a stream. This returns an iterator of strings, which can + be used as a streaming response from a view. + + :param source: The source code of the template to render. + :param context: The variables to make available in the template. + + .. versionadded:: 2.2 + """ + app = current_app._get_current_object() # type: ignore[attr-defined] + template = app.jinja_env.from_string(source) + return _stream(app, template, context) diff --git a/venv/Lib/site-packages/flask/testing.py b/venv/Lib/site-packages/flask/testing.py new file mode 100644 index 0000000..69aa785 --- /dev/null +++ b/venv/Lib/site-packages/flask/testing.py @@ -0,0 +1,295 @@ +from __future__ import annotations + +import importlib.metadata +import typing as t +from contextlib import contextmanager +from contextlib import ExitStack +from copy import copy +from types import TracebackType +from urllib.parse import urlsplit + +import werkzeug.test +from click.testing import CliRunner +from werkzeug.test import Client +from werkzeug.wrappers import Request as BaseRequest + +from .cli import ScriptInfo +from .sessions import SessionMixin + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.test import TestResponse + + from .app import Flask + + +class EnvironBuilder(werkzeug.test.EnvironBuilder): + """An :class:`~werkzeug.test.EnvironBuilder`, that takes defaults from the + application. + + :param app: The Flask application to configure the environment from. + :param path: URL path being requested. + :param base_url: Base URL where the app is being served, which + ``path`` is relative to. If not given, built from + :data:`PREFERRED_URL_SCHEME`, ``subdomain``, + :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`. + :param subdomain: Subdomain name to append to :data:`SERVER_NAME`. + :param url_scheme: Scheme to use instead of + :data:`PREFERRED_URL_SCHEME`. + :param json: If given, this is serialized as JSON and passed as + ``data``. Also defaults ``content_type`` to + ``application/json``. + :param args: other positional arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + :param kwargs: other keyword arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + """ + + def __init__( + self, + app: Flask, + path: str = "/", + base_url: str | None = None, + subdomain: str | None = None, + url_scheme: str | None = None, + *args: t.Any, + **kwargs: t.Any, + ) -> None: + assert not (base_url or subdomain or url_scheme) or ( + base_url is not None + ) != bool( + subdomain or url_scheme + ), 'Cannot pass "subdomain" or "url_scheme" with "base_url".' + + if base_url is None: + http_host = app.config.get("SERVER_NAME") or "localhost" + app_root = app.config["APPLICATION_ROOT"] + + if subdomain: + http_host = f"{subdomain}.{http_host}" + + if url_scheme is None: + url_scheme = app.config["PREFERRED_URL_SCHEME"] + + url = urlsplit(path) + base_url = ( + f"{url.scheme or url_scheme}://{url.netloc or http_host}" + f"/{app_root.lstrip('/')}" + ) + path = url.path + + if url.query: + sep = b"?" if isinstance(url.query, bytes) else "?" + path += sep + url.query + + self.app = app + super().__init__(path, base_url, *args, **kwargs) + + def json_dumps(self, obj: t.Any, **kwargs: t.Any) -> str: # type: ignore + """Serialize ``obj`` to a JSON-formatted string. + + The serialization will be configured according to the config associated + with this EnvironBuilder's ``app``. + """ + return self.app.json.dumps(obj, **kwargs) + + +_werkzeug_version = "" + + +def _get_werkzeug_version() -> str: + global _werkzeug_version + + if not _werkzeug_version: + _werkzeug_version = importlib.metadata.version("werkzeug") + + return _werkzeug_version + + +class FlaskClient(Client): + """Works like a regular Werkzeug test client but has knowledge about + Flask's contexts to defer the cleanup of the request context until + the end of a ``with`` block. For general information about how to + use this class refer to :class:`werkzeug.test.Client`. + + .. versionchanged:: 0.12 + `app.test_client()` includes preset default environment, which can be + set after instantiation of the `app.test_client()` object in + `client.environ_base`. + + Basic usage is outlined in the :doc:`/testing` chapter. + """ + + application: Flask + + def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: + super().__init__(*args, **kwargs) + self.preserve_context = False + self._new_contexts: list[t.ContextManager[t.Any]] = [] + self._context_stack = ExitStack() + self.environ_base = { + "REMOTE_ADDR": "127.0.0.1", + "HTTP_USER_AGENT": f"Werkzeug/{_get_werkzeug_version()}", + } + + @contextmanager + def session_transaction( + self, *args: t.Any, **kwargs: t.Any + ) -> t.Generator[SessionMixin, None, None]: + """When used in combination with a ``with`` statement this opens a + session transaction. This can be used to modify the session that + the test client uses. Once the ``with`` block is left the session is + stored back. + + :: + + with client.session_transaction() as session: + session['value'] = 42 + + Internally this is implemented by going through a temporary test + request context and since session handling could depend on + request variables this function accepts the same arguments as + :meth:`~flask.Flask.test_request_context` which are directly + passed through. + """ + if self._cookies is None: + raise TypeError( + "Cookies are disabled. Create a client with 'use_cookies=True'." + ) + + app = self.application + ctx = app.test_request_context(*args, **kwargs) + self._add_cookies_to_wsgi(ctx.request.environ) + + with ctx: + sess = app.session_interface.open_session(app, ctx.request) + + if sess is None: + raise RuntimeError("Session backend did not open a session.") + + yield sess + resp = app.response_class() + + if app.session_interface.is_null_session(sess): + return + + with ctx: + app.session_interface.save_session(app, sess, resp) + + self._update_cookies_from_response( + ctx.request.host.partition(":")[0], + ctx.request.path, + resp.headers.getlist("Set-Cookie"), + ) + + def _copy_environ(self, other): + out = {**self.environ_base, **other} + + if self.preserve_context: + out["werkzeug.debug.preserve_context"] = self._new_contexts.append + + return out + + def _request_from_builder_args(self, args, kwargs): + kwargs["environ_base"] = self._copy_environ(kwargs.get("environ_base", {})) + builder = EnvironBuilder(self.application, *args, **kwargs) + + try: + return builder.get_request() + finally: + builder.close() + + def open( + self, + *args: t.Any, + buffered: bool = False, + follow_redirects: bool = False, + **kwargs: t.Any, + ) -> TestResponse: + if args and isinstance( + args[0], (werkzeug.test.EnvironBuilder, dict, BaseRequest) + ): + if isinstance(args[0], werkzeug.test.EnvironBuilder): + builder = copy(args[0]) + builder.environ_base = self._copy_environ(builder.environ_base or {}) + request = builder.get_request() + elif isinstance(args[0], dict): + request = EnvironBuilder.from_environ( + args[0], app=self.application, environ_base=self._copy_environ({}) + ).get_request() + else: + # isinstance(args[0], BaseRequest) + request = copy(args[0]) + request.environ = self._copy_environ(request.environ) + else: + # request is None + request = self._request_from_builder_args(args, kwargs) + + # Pop any previously preserved contexts. This prevents contexts + # from being preserved across redirects or multiple requests + # within a single block. + self._context_stack.close() + + response = super().open( + request, + buffered=buffered, + follow_redirects=follow_redirects, + ) + response.json_module = self.application.json # type: ignore[assignment] + + # Re-push contexts that were preserved during the request. + while self._new_contexts: + cm = self._new_contexts.pop() + self._context_stack.enter_context(cm) + + return response + + def __enter__(self) -> FlaskClient: + if self.preserve_context: + raise RuntimeError("Cannot nest client invocations") + self.preserve_context = True + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.preserve_context = False + self._context_stack.close() + + +class FlaskCliRunner(CliRunner): + """A :class:`~click.testing.CliRunner` for testing a Flask app's + CLI commands. Typically created using + :meth:`~flask.Flask.test_cli_runner`. See :ref:`testing-cli`. + """ + + def __init__(self, app: Flask, **kwargs: t.Any) -> None: + self.app = app + super().__init__(**kwargs) + + def invoke( # type: ignore + self, cli: t.Any = None, args: t.Any = None, **kwargs: t.Any + ) -> t.Any: + """Invokes a CLI command in an isolated environment. See + :meth:`CliRunner.invoke ` for + full method documentation. See :ref:`testing-cli` for examples. + + If the ``obj`` argument is not given, passes an instance of + :class:`~flask.cli.ScriptInfo` that knows how to load the Flask + app being tested. + + :param cli: Command object to invoke. Default is the app's + :attr:`~flask.app.Flask.cli` group. + :param args: List of strings to invoke the command with. + + :return: a :class:`~click.testing.Result` object. + """ + if cli is None: + cli = self.app.cli # type: ignore + + if "obj" not in kwargs: + kwargs["obj"] = ScriptInfo(create_app=lambda: self.app) + + return super().invoke(cli, args, **kwargs) diff --git a/venv/Lib/site-packages/flask/typing.py b/venv/Lib/site-packages/flask/typing.py new file mode 100644 index 0000000..50aef7f --- /dev/null +++ b/venv/Lib/site-packages/flask/typing.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import typing as t + +if t.TYPE_CHECKING: # pragma: no cover + from _typeshed.wsgi import WSGIApplication # noqa: F401 + from werkzeug.datastructures import Headers # noqa: F401 + from werkzeug.wrappers import Response # noqa: F401 + +# The possible types that are directly convertible or are a Response object. +ResponseValue = t.Union[ + "Response", + str, + bytes, + t.List[t.Any], + # Only dict is actually accepted, but Mapping allows for TypedDict. + t.Mapping[str, t.Any], + t.Iterator[str], + t.Iterator[bytes], +] + +# the possible types for an individual HTTP header +# This should be a Union, but mypy doesn't pass unless it's a TypeVar. +HeaderValue = t.Union[str, t.List[str], t.Tuple[str, ...]] + +# the possible types for HTTP headers +HeadersValue = t.Union[ + "Headers", + t.Mapping[str, HeaderValue], + t.Sequence[t.Tuple[str, HeaderValue]], +] + +# The possible types returned by a route function. +ResponseReturnValue = t.Union[ + ResponseValue, + t.Tuple[ResponseValue, HeadersValue], + t.Tuple[ResponseValue, int], + t.Tuple[ResponseValue, int, HeadersValue], + "WSGIApplication", +] + +# Allow any subclass of werkzeug.Response, such as the one from Flask, +# as a callback argument. Using werkzeug.Response directly makes a +# callback annotated with flask.Response fail type checking. +ResponseClass = t.TypeVar("ResponseClass", bound="Response") + +AppOrBlueprintKey = t.Optional[str] # The App key is None, whereas blueprints are named +AfterRequestCallable = t.Union[ + t.Callable[[ResponseClass], ResponseClass], + t.Callable[[ResponseClass], t.Awaitable[ResponseClass]], +] +BeforeFirstRequestCallable = t.Union[ + t.Callable[[], None], t.Callable[[], t.Awaitable[None]] +] +BeforeRequestCallable = t.Union[ + t.Callable[[], t.Optional[ResponseReturnValue]], + t.Callable[[], t.Awaitable[t.Optional[ResponseReturnValue]]], +] +ShellContextProcessorCallable = t.Callable[[], t.Dict[str, t.Any]] +TeardownCallable = t.Union[ + t.Callable[[t.Optional[BaseException]], None], + t.Callable[[t.Optional[BaseException]], t.Awaitable[None]], +] +TemplateContextProcessorCallable = t.Callable[[], t.Dict[str, t.Any]] +TemplateFilterCallable = t.Callable[..., t.Any] +TemplateGlobalCallable = t.Callable[..., t.Any] +TemplateTestCallable = t.Callable[..., bool] +URLDefaultCallable = t.Callable[[str, dict], None] +URLValuePreprocessorCallable = t.Callable[[t.Optional[str], t.Optional[dict]], None] + +# This should take Exception, but that either breaks typing the argument +# with a specific exception, or decorating multiple times with different +# exceptions (and using a union type on the argument). +# https://github.com/pallets/flask/issues/4095 +# https://github.com/pallets/flask/issues/4295 +# https://github.com/pallets/flask/issues/4297 +ErrorHandlerCallable = t.Callable[[t.Any], ResponseReturnValue] + +RouteCallable = t.Union[ + t.Callable[..., ResponseReturnValue], + t.Callable[..., t.Awaitable[ResponseReturnValue]], +] diff --git a/venv/Lib/site-packages/flask/views.py b/venv/Lib/site-packages/flask/views.py new file mode 100644 index 0000000..c7a2b62 --- /dev/null +++ b/venv/Lib/site-packages/flask/views.py @@ -0,0 +1,190 @@ +from __future__ import annotations + +import typing as t + +from . import typing as ft +from .globals import current_app +from .globals import request + + +http_method_funcs = frozenset( + ["get", "post", "head", "options", "delete", "put", "trace", "patch"] +) + + +class View: + """Subclass this class and override :meth:`dispatch_request` to + create a generic class-based view. Call :meth:`as_view` to create a + view function that creates an instance of the class with the given + arguments and calls its ``dispatch_request`` method with any URL + variables. + + See :doc:`views` for a detailed guide. + + .. code-block:: python + + class Hello(View): + init_every_request = False + + def dispatch_request(self, name): + return f"Hello, {name}!" + + app.add_url_rule( + "/hello/", view_func=Hello.as_view("hello") + ) + + Set :attr:`methods` on the class to change what methods the view + accepts. + + Set :attr:`decorators` on the class to apply a list of decorators to + the generated view function. Decorators applied to the class itself + will not be applied to the generated view function! + + Set :attr:`init_every_request` to ``False`` for efficiency, unless + you need to store request-global data on ``self``. + """ + + #: The methods this view is registered for. Uses the same default + #: (``["GET", "HEAD", "OPTIONS"]``) as ``route`` and + #: ``add_url_rule`` by default. + methods: t.ClassVar[t.Collection[str] | None] = None + + #: Control whether the ``OPTIONS`` method is handled automatically. + #: Uses the same default (``True``) as ``route`` and + #: ``add_url_rule`` by default. + provide_automatic_options: t.ClassVar[bool | None] = None + + #: A list of decorators to apply, in order, to the generated view + #: function. Remember that ``@decorator`` syntax is applied bottom + #: to top, so the first decorator in the list would be the bottom + #: decorator. + #: + #: .. versionadded:: 0.8 + decorators: t.ClassVar[list[t.Callable]] = [] + + #: Create a new instance of this view class for every request by + #: default. If a view subclass sets this to ``False``, the same + #: instance is used for every request. + #: + #: A single instance is more efficient, especially if complex setup + #: is done during init. However, storing data on ``self`` is no + #: longer safe across requests, and :data:`~flask.g` should be used + #: instead. + #: + #: .. versionadded:: 2.2 + init_every_request: t.ClassVar[bool] = True + + def dispatch_request(self) -> ft.ResponseReturnValue: + """The actual view function behavior. Subclasses must override + this and return a valid response. Any variables from the URL + rule are passed as keyword arguments. + """ + raise NotImplementedError() + + @classmethod + def as_view( + cls, name: str, *class_args: t.Any, **class_kwargs: t.Any + ) -> ft.RouteCallable: + """Convert the class into a view function that can be registered + for a route. + + By default, the generated view will create a new instance of the + view class for every request and call its + :meth:`dispatch_request` method. If the view class sets + :attr:`init_every_request` to ``False``, the same instance will + be used for every request. + + Except for ``name``, all other arguments passed to this method + are forwarded to the view class ``__init__`` method. + + .. versionchanged:: 2.2 + Added the ``init_every_request`` class attribute. + """ + if cls.init_every_request: + + def view(**kwargs: t.Any) -> ft.ResponseReturnValue: + self = view.view_class( # type: ignore[attr-defined] + *class_args, **class_kwargs + ) + return current_app.ensure_sync(self.dispatch_request)(**kwargs) + + else: + self = cls(*class_args, **class_kwargs) + + def view(**kwargs: t.Any) -> ft.ResponseReturnValue: + return current_app.ensure_sync(self.dispatch_request)(**kwargs) + + if cls.decorators: + view.__name__ = name + view.__module__ = cls.__module__ + for decorator in cls.decorators: + view = decorator(view) + + # We attach the view class to the view function for two reasons: + # first of all it allows us to easily figure out what class-based + # view this thing came from, secondly it's also used for instantiating + # the view class so you can actually replace it with something else + # for testing purposes and debugging. + view.view_class = cls # type: ignore + view.__name__ = name + view.__doc__ = cls.__doc__ + view.__module__ = cls.__module__ + view.methods = cls.methods # type: ignore + view.provide_automatic_options = cls.provide_automatic_options # type: ignore + return view + + +class MethodView(View): + """Dispatches request methods to the corresponding instance methods. + For example, if you implement a ``get`` method, it will be used to + handle ``GET`` requests. + + This can be useful for defining a REST API. + + :attr:`methods` is automatically set based on the methods defined on + the class. + + See :doc:`views` for a detailed guide. + + .. code-block:: python + + class CounterAPI(MethodView): + def get(self): + return str(session.get("counter", 0)) + + def post(self): + session["counter"] = session.get("counter", 0) + 1 + return redirect(url_for("counter")) + + app.add_url_rule( + "/counter", view_func=CounterAPI.as_view("counter") + ) + """ + + def __init_subclass__(cls, **kwargs: t.Any) -> None: + super().__init_subclass__(**kwargs) + + if "methods" not in cls.__dict__: + methods = set() + + for base in cls.__bases__: + if getattr(base, "methods", None): + methods.update(base.methods) # type: ignore[attr-defined] + + for key in http_method_funcs: + if hasattr(cls, key): + methods.add(key.upper()) + + if methods: + cls.methods = methods + + def dispatch_request(self, **kwargs: t.Any) -> ft.ResponseReturnValue: + meth = getattr(self, request.method.lower(), None) + + # If the request method is HEAD and we don't have a handler for it + # retry with GET. + if meth is None and request.method == "HEAD": + meth = getattr(self, "get", None) + + assert meth is not None, f"Unimplemented method {request.method!r}" + return current_app.ensure_sync(meth)(**kwargs) diff --git a/venv/Lib/site-packages/flask/wrappers.py b/venv/Lib/site-packages/flask/wrappers.py new file mode 100644 index 0000000..ef7aa38 --- /dev/null +++ b/venv/Lib/site-packages/flask/wrappers.py @@ -0,0 +1,173 @@ +from __future__ import annotations + +import typing as t + +from werkzeug.exceptions import BadRequest +from werkzeug.wrappers import Request as RequestBase +from werkzeug.wrappers import Response as ResponseBase + +from . import json +from .globals import current_app +from .helpers import _split_blueprint_path + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.routing import Rule + + +class Request(RequestBase): + """The request object used by default in Flask. Remembers the + matched endpoint and view arguments. + + It is what ends up as :class:`~flask.request`. If you want to replace + the request object used you can subclass this and set + :attr:`~flask.Flask.request_class` to your subclass. + + The request object is a :class:`~werkzeug.wrappers.Request` subclass and + provides all of the attributes Werkzeug defines plus a few Flask + specific ones. + """ + + json_module: t.Any = json + + #: The internal URL rule that matched the request. This can be + #: useful to inspect which methods are allowed for the URL from + #: a before/after handler (``request.url_rule.methods``) etc. + #: Though if the request's method was invalid for the URL rule, + #: the valid list is available in ``routing_exception.valid_methods`` + #: instead (an attribute of the Werkzeug exception + #: :exc:`~werkzeug.exceptions.MethodNotAllowed`) + #: because the request was never internally bound. + #: + #: .. versionadded:: 0.6 + url_rule: Rule | None = None + + #: A dict of view arguments that matched the request. If an exception + #: happened when matching, this will be ``None``. + view_args: dict[str, t.Any] | None = None + + #: If matching the URL failed, this is the exception that will be + #: raised / was raised as part of the request handling. This is + #: usually a :exc:`~werkzeug.exceptions.NotFound` exception or + #: something similar. + routing_exception: Exception | None = None + + @property + def max_content_length(self) -> int | None: # type: ignore + """Read-only view of the ``MAX_CONTENT_LENGTH`` config key.""" + if current_app: + return current_app.config["MAX_CONTENT_LENGTH"] + else: + return None + + @property + def endpoint(self) -> str | None: + """The endpoint that matched the request URL. + + This will be ``None`` if matching failed or has not been + performed yet. + + This in combination with :attr:`view_args` can be used to + reconstruct the same URL or a modified URL. + """ + if self.url_rule is not None: + return self.url_rule.endpoint + + return None + + @property + def blueprint(self) -> str | None: + """The registered name of the current blueprint. + + This will be ``None`` if the endpoint is not part of a + blueprint, or if URL matching failed or has not been performed + yet. + + This does not necessarily match the name the blueprint was + created with. It may have been nested, or registered with a + different name. + """ + endpoint = self.endpoint + + if endpoint is not None and "." in endpoint: + return endpoint.rpartition(".")[0] + + return None + + @property + def blueprints(self) -> list[str]: + """The registered names of the current blueprint upwards through + parent blueprints. + + This will be an empty list if there is no current blueprint, or + if URL matching failed. + + .. versionadded:: 2.0.1 + """ + name = self.blueprint + + if name is None: + return [] + + return _split_blueprint_path(name) + + def _load_form_data(self) -> None: + super()._load_form_data() + + # In debug mode we're replacing the files multidict with an ad-hoc + # subclass that raises a different error for key errors. + if ( + current_app + and current_app.debug + and self.mimetype != "multipart/form-data" + and not self.files + ): + from .debughelpers import attach_enctype_error_multidict + + attach_enctype_error_multidict(self) + + def on_json_loading_failed(self, e: ValueError | None) -> t.Any: + try: + return super().on_json_loading_failed(e) + except BadRequest as e: + if current_app and current_app.debug: + raise + + raise BadRequest() from e + + +class Response(ResponseBase): + """The response object that is used by default in Flask. Works like the + response object from Werkzeug but is set to have an HTML mimetype by + default. Quite often you don't have to create this object yourself because + :meth:`~flask.Flask.make_response` will take care of that for you. + + If you want to replace the response object used you can subclass this and + set :attr:`~flask.Flask.response_class` to your subclass. + + .. versionchanged:: 1.0 + JSON support is added to the response, like the request. This is useful + when testing to get the test client response data as JSON. + + .. versionchanged:: 1.0 + + Added :attr:`max_cookie_size`. + """ + + default_mimetype: str | None = "text/html" + + json_module = json + + autocorrect_location_header = False + + @property + def max_cookie_size(self) -> int: # type: ignore + """Read-only view of the :data:`MAX_COOKIE_SIZE` config key. + + See :attr:`~werkzeug.wrappers.Response.max_cookie_size` in + Werkzeug's docs. + """ + if current_app: + return current_app.config["MAX_COOKIE_SIZE"] + + # return Werkzeug's default when not in an app context + return super().max_cookie_size diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst new file mode 100644 index 0000000..7b190ca --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2011 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/METADATA b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/METADATA new file mode 100644 index 0000000..1d935ed --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/METADATA @@ -0,0 +1,97 @@ +Metadata-Version: 2.1 +Name: itsdangerous +Version: 2.1.2 +Summary: Safely pass data to untrusted environments and back. +Home-page: https://palletsprojects.com/p/itsdangerous/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Documentation, https://itsdangerous.palletsprojects.com/ +Project-URL: Changes, https://itsdangerous.palletsprojects.com/changes/ +Project-URL: Source Code, https://github.com/pallets/itsdangerous/ +Project-URL: Issue Tracker, https://github.com/pallets/itsdangerous/issues/ +Project-URL: Twitter, https://twitter.com/PalletsTeam +Project-URL: Chat, https://discord.gg/pallets +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.rst + +ItsDangerous +============ + +... so better sign this + +Various helpers to pass data to untrusted environments and to get it +back safe and sound. Data is cryptographically signed to ensure that a +token has not been tampered with. + +It's possible to customize how data is serialized. Data is compressed as +needed. A timestamp can be added and verified automatically while +loading a token. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U itsdangerous + +.. _pip: https://pip.pypa.io/en/stable/getting-started/ + + +A Simple Example +---------------- + +Here's how you could generate a token for transmitting a user's id and +name between web requests. + +.. code-block:: python + + from itsdangerous import URLSafeSerializer + auth_s = URLSafeSerializer("secret key", "auth") + token = auth_s.dumps({"id": 5, "name": "itsdangerous"}) + + print(token) + # eyJpZCI6NSwibmFtZSI6Iml0c2Rhbmdlcm91cyJ9.6YP6T0BaO67XP--9UzTrmurXSmg + + data = auth_s.loads(token) + print(data["name"]) + # itsdangerous + + +Donate +------ + +The Pallets organization develops and supports ItsDangerous and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +`please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +- Documentation: https://itsdangerous.palletsprojects.com/ +- Changes: https://itsdangerous.palletsprojects.com/changes/ +- PyPI Releases: https://pypi.org/project/ItsDangerous/ +- Source Code: https://github.com/pallets/itsdangerous/ +- Issue Tracker: https://github.com/pallets/itsdangerous/issues/ +- Website: https://palletsprojects.com/p/itsdangerous/ +- Twitter: https://twitter.com/PalletsTeam +- Chat: https://discord.gg/pallets + + diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/RECORD b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/RECORD new file mode 100644 index 0000000..d84e6bb --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/RECORD @@ -0,0 +1,24 @@ +itsdangerous-2.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +itsdangerous-2.1.2.dist-info/LICENSE.rst,sha256=Y68JiRtr6K0aQlLtQ68PTvun_JSOIoNnvtfzxa4LCdc,1475 +itsdangerous-2.1.2.dist-info/METADATA,sha256=ThrHIJQ_6XlfbDMCAVe_hawT7IXiIxnTBIDrwxxtucQ,2928 +itsdangerous-2.1.2.dist-info/RECORD,, +itsdangerous-2.1.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +itsdangerous-2.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +itsdangerous-2.1.2.dist-info/top_level.txt,sha256=gKN1OKLk81i7fbWWildJA88EQ9NhnGMSvZqhfz9ICjk,13 +itsdangerous/__init__.py,sha256=n4mkyjlIVn23pgsgCIw0MJKPdcHIetyeRpe5Fwsn8qg,876 +itsdangerous/__pycache__/__init__.cpython-311.pyc,, +itsdangerous/__pycache__/_json.cpython-311.pyc,, +itsdangerous/__pycache__/encoding.cpython-311.pyc,, +itsdangerous/__pycache__/exc.cpython-311.pyc,, +itsdangerous/__pycache__/serializer.cpython-311.pyc,, +itsdangerous/__pycache__/signer.cpython-311.pyc,, +itsdangerous/__pycache__/timed.cpython-311.pyc,, +itsdangerous/__pycache__/url_safe.cpython-311.pyc,, +itsdangerous/_json.py,sha256=wIhs_7-_XZolmyr-JvKNiy_LgAcfevYR0qhCVdlIhg8,450 +itsdangerous/encoding.py,sha256=pgh86snHC76dPLNCnPlrjR5SaYL_M8H-gWRiiLNbhCU,1419 +itsdangerous/exc.py,sha256=VFxmP2lMoSJFqxNMzWonqs35ROII4-fvCBfG0v1Tkbs,3206 +itsdangerous/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +itsdangerous/serializer.py,sha256=zgZ1-U705jHDpt62x_pmLJdryEKDNAbt5UkJtnkcCSw,11144 +itsdangerous/signer.py,sha256=QUH0iX0in-OTptMAXKU5zWMwmOCXn1fsDsubXiGdFN4,9367 +itsdangerous/timed.py,sha256=5CBWLds4Nm8-3bFVC8RxNzFjx6PSwjch8wuZ5cwcHFI,8174 +itsdangerous/url_safe.py,sha256=5bC4jSKOjWNRkWrFseifWVXUnHnPgwOLROjiOwb-eeo,2402 diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/REQUESTED b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/WHEEL b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt new file mode 100644 index 0000000..e163955 --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous-2.1.2.dist-info/top_level.txt @@ -0,0 +1 @@ +itsdangerous diff --git a/venv/Lib/site-packages/itsdangerous/__init__.py b/venv/Lib/site-packages/itsdangerous/__init__.py new file mode 100644 index 0000000..fdb2dfd --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/__init__.py @@ -0,0 +1,19 @@ +from .encoding import base64_decode as base64_decode +from .encoding import base64_encode as base64_encode +from .encoding import want_bytes as want_bytes +from .exc import BadData as BadData +from .exc import BadHeader as BadHeader +from .exc import BadPayload as BadPayload +from .exc import BadSignature as BadSignature +from .exc import BadTimeSignature as BadTimeSignature +from .exc import SignatureExpired as SignatureExpired +from .serializer import Serializer as Serializer +from .signer import HMACAlgorithm as HMACAlgorithm +from .signer import NoneAlgorithm as NoneAlgorithm +from .signer import Signer as Signer +from .timed import TimedSerializer as TimedSerializer +from .timed import TimestampSigner as TimestampSigner +from .url_safe import URLSafeSerializer as URLSafeSerializer +from .url_safe import URLSafeTimedSerializer as URLSafeTimedSerializer + +__version__ = "2.1.2" diff --git a/venv/Lib/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/itsdangerous/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1e44bae9a6fc8795bdfd8c0d4b48c8a96f228ea GIT binary patch literal 1158 zcmZva&u`N(6vv%*ZPT>r&vkG>TtGrStUxt5pb0TH#tvg3%7kP^3T|VHH7BX;bX#}g z$bZ0}fcS56LQzjhoH!sM?Y0xo)~IHv^VQSmef|7wNB-iv4ubLP(>u!Z2>npW-;uk7 z^KSs3QGf!AqtL>Zr8ozi!#T});5^Q2Ug0ZY0T(nEfQz`Oxd>dsCCw#Z8{3*~;4&_2 zE(1H*(d_U_SjAP%74C*LT+>_yuH(997r22Nnrplnws1>x9k`9#nj3sI?BI^(Ch!_w z18(7KL3@C@t3NHcT-TbrLn7(J4L_ixIG|Sy8eJOB35gPaI7_I6>C#gY?2v>2mI3!D z38;X?f#emL@t6dVRUsR&aYT}-P)!?zn}i<^Pdi9g?{gTuYb_J zKDYJHV9{8>TR~z)g#v_mo}P|GQKcmnY!%8XsMjSb5ay0tTuD@wQIz`3!c`?T73#_^ zB9IrxBpOo@Pvu?TXAw($ zzc-m(*qdP-OgVilZo+2j(a0wdf9EaB%Fsq?YMIkZk)aITN=;?xPHHMc-PBZu)>Bg% udXSo0=G;q>p$zp?Q_Gy&DKfOI^Z&bVrpQo+c2iT|Yn_i3^@$tsC;tHJFH#Bs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc b/venv/Lib/site-packages/itsdangerous/__pycache__/_json.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bea3f027f1b33038a3ef2a2d58919d4918c67eef GIT binary patch literal 1396 zcmZ`(&1)M+6rb5IZDhHoj-j}hE_GYjG<8i3Ed&!NDNZRxh6XoOENoYrk-f6CyP27d zE5{TceCQ#B90JZ!hv268l0*N3{snR|)C?2?rH3903d+f+z8QVkj@zf1H^2Ah&Ag9& zqn{=xiwNkSAHSo&Vub!w!icOP=q~`+Lj)1rL=~)8qhcE979z$jBIdq<&;iT=RV;#U zBj5U4iRIc*tCzx1=syIohp4`-Vh~(0sYMKGH=L0Dys@_}E zXUj6L18|l1X<$3(uc?^__n&-vI5l@PHP?0L`k+P9Osfs)Y-~nsjh`!mihBZP{|8`u zXd8E6y+{NT<9t`)|F<=X^}4N4g&tC4+?m^`j$^pzDSoIr)Go^sO?b{|81Y&hFUumQ zS;QidGVU8E`05G1?wd+02(3qXQ!tgev`OB|z=D-PVw1qQ^5J<*Jtj5-?6s=t1In5& z1KU9_+&6xAXMb~NpUgjd|Il4Hau>Sp!tq#p^;z-IT|9CZyYAv2y26XyDIZ4XgTdN$ zeWvPI_Dj+Y!z60aFqFkG9CRq)QW)ONqvmj@5QZeJDK!_7h-)n>)>9&lP)K_Y~=b%wiKQe3V?iP2YL)f>sN%EppgTTz_Wc569ST_9DEN^V+)F1zB4lvU`Z zIy`izL^zel1P9K zci-DL^Jd=n8~)ue5(vhB?){SfK8n!41<@Kk#~()v7@O_ZmL8~PB ziJDEe(FV{4#cRE-qyB<`>U%+v-oGmKREuuMr0*fv@EN?}$o5ANjjRo{Xp-t$Pt)|; zORd%HAaJW|LoJ&0!|HI0dKiI|;SEQ2gbdKpV++!t@yp~T+5_|`STqRqD+Dj1%?)jEqrq{QE#D?YY z{PGs3E)xl$3(?a6s_4HOiVy6*`e4zEjry_CCc@Fl{iN~7o4>oc`?K0zFL~Bap1p?; z^L->jG_A3JdzntSGkRmuF`}!H{`E@OlO_Q8}*IW-?KLfe~)X zhm33l=0y3p-v$6Nh@;+-n&ug&edBa>{y^{d^@;ktr@!v&uRqlIL3sELV_4We5Pc`{*Pdrwksnk10Du7h+1yJwgb&xbxMq8A}@-PiO@U~Eu-?v zkDR+!(I#dXzo{^O#3ay+7BaCgBa|X_*dVZXFy=gC&Nt?&^ZRPz9(mx_X8-i@{f~Ex z_4mA?vtI9{r%qPqo2nAMe9$-O_f76;Uf+4Y?|dVE{>y{p;Dbs-9~TvW`2{%W9c&C; z^m=Ff-kC?QHsas=5=K)29>A{X>imPwMUc z2e`xWRsCT>7BILwF!CTb&r4w|476gaUMFC8d%Y&x`PesM^*e&&8vv^4Kp&~4J$=mA z$DZnEp6F-l?|b@`uTM49DOsFBOxnv?hiy0d>(QVt;Swp&RnNA-N<;DL7=!ELR zGkLST1_GE!DQU9QMHme>1yQzEb~$vY3@mq8+|I_t-SCFs5RM5g9{$_dpU3LI+MD!7 zFZiPuJpH1tU;N^lug^BrS!p)pv*-{^7@9dHD(j?+uB%K`MbS3l2bn15h_O zg@(ucp>H+PSNG;W|1qHOd78fQBz@ywt6qA+PcJl3>M%97tKBzh#7j;1sfntwpBnR1 z;{p%wM()QNBUc{n_}^djQcHenscJMejHh=C&~fl|jY`xF;uybKdri!~S-&pP*8&-t F{{fwAw1)ry literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/itsdangerous/__pycache__/exc.cpython-311.pyc b/venv/Lib/site-packages/itsdangerous/__pycache__/exc.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7574d272a96ba8bdbe28bdd8128e44de6364a148 GIT binary patch literal 4999 zcmcIo&2JmW6`v)!C8&T7Mymoo7-$Ro(1TBI4Ff^`6r~VQfk1%(J@pWPf>fZ$slPYNU4BWb6QpbL z?aaK{`FQhtzxT#}DHL)H&u3c;{I_|={z;YS(L05GrZM)AIn2>&tgPXks3q!&azbNV zyOWH%qnwJ$XQKiu>wSIFJ(^5{y}_L1J?5l%`U%E)7LQdnlum~(&5Z$FR_QX(89Y0n z%PCzJx*X39=th)o1iJjtcX_2NKsP!xU%}CCv*OslXisxRtz|fNzyr6=EAcK-h}OP; z6P4e=UR>F#oN%;q(n;`CHL=C28uptn>)0{sj(#syPH(ZhS~-Im(yh#oZReI9*z13I z*LEd$Ot)$-+K!0{ZPTxswzp zRIN;%OKC6hN}^}qv~BwB{}SR)+CvrqEYb4>g=bNPJ?_!Ojch}Eg7#;zPD9HEv*I}% zcAGub=8DOdE}IQ5T83r0o*P(}NMjVVrzEdcRi%}+tV+$6(y}Bi$}~4WfB&`F`JYSd zX?}6tS@Y&^`ITm!dx4yP!wueSF3!K*;NJVb`0yt+e|3I^dn@yAxr_7C4fyqjUHK3j zmh)~PoycN0V9ruwO_1ZPk9SV26fJ5Dt@0ZX|Jh{!FbcoV+|T^onEIPB^=R@F7Zdt9IWz~JBS)+2^ zvVPsPYaI>7b^HpNlNe1IK%AiY3LUdoc&%nxPc;E52^aK3wID%Mq6Dp5x)3l=^sk*r z=|-E8$S3qmkCSbN*U`ez^z)A<+6=Gf5NdyF?h2-jpP1ZAXc}_Yw3Fm1IH_JuDW}!% z6?z;s)5^oHx7{Vr#WEX$ls1SCi2={p(K z8-g3%I9NplKwL-zVp$ana)<>+i`?n3|b=;<}89UcPepY$Kt81z*s-)S;^X&|k40dMfj~_gq+BrSb?Wa0FhX}Dw zE9t{}6r1+RWe2kxAU4?=kD>bd-G+;_WL@+kwo8nJT^ZQ*24yUM&EbOb63<*%sM~if z1l)y%Fr!hJM4v8(DGQoK09NSjbB_qY;Il(WqvmY*f$;q{C5LqrPyLT+gmqTnJxO$T6cQW{+jG{D0VEBLyx= zMiWv38HT=8Pv|Q`Er#uhN+EHI zDCNTC-7CfR$e8|0n?Wd6p-RXqR5I9!bL}jZa_sDMx2x*^93pfhT2G%FMc~-~Qkhr| z2k}mrQQ0@aQN7O7$+UXhrsFBNIMv`(%1!8wMYpC-=ZJDBMT6rxTsCkMz|AZ6yx2Eh zG;zNQzZRS(vCXS>(Yg=bjq9>xLLg4IBFJoOS_k}!hbXqE2q^0CY9GZ_3gawIT;U_6S z>I>p&@;DOXI=LAH<)nChTvo3yBtmzh$%><`bgFjA$?Z4NcQ#U zKLNr$kk_fqS>+sINK|~Gwm=uyaC{1wpBt}+7s4NiZ=*_?fV>6SPHLLA%O1= zyZ`Ug!r1)}9-aL2nVo{UncG#hvpa?9&0IU3*KmIu7F+HfwH|a;7e_Q?@WbN4clW6E zpsPB6T0>GaEFNs^QR_ih^-@y9SqzKq$*X(Re9+b9Cp8?_uy~N)qt=72>gFi*92O5I N_o(&Y5S6m>e*v5VKcD~r literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc b/venv/Lib/site-packages/itsdangerous/__pycache__/serializer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8abc8479e7d75f73894fa5c97d6b10b670096763 GIT binary patch literal 13642 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 bN=ej^|IY@?p5DN$}P~?z9fi>iVkyGCra!E>Z zi^jv9qI4%PoEk!x5Sg~rn6z6!r1jB*$Y`s+umP1rj0Wh!Ovg7zvuZ zBNB2C-cBoJI4=pj6wLrv0xrB=ZkBV?z|8!Wx1HB0)kxC^Q_4lb@NK`Ro8od?^CmRa%z!sf0$QccZ#E1^k zjo4ssHqj!p0%$Z-N`OuWCC8{TD{*e}!&E8RA~%Fm3bd5+^B=r-{<1zx`-iz;-Z1UP zm++y6YTD|8>0MQImC?Dnr8Cv-DMB?pU|N={dmgRUJk@j5hGmu$Dzplyn^D(Qy{lAp zJ!aZ-$gk@26z92D9p+J{nzO1+D=6>v0%)cbZiPv*^LYl(X zc}t3YXqRo1w+z*GJhkf;o!I4G(X}TyKt->+RCQ)m@CtgPLTjGs*kJyQ z!^}C;)-8=P=CH=8zBu$*6@?9WY+vB4!zkw(+=aoLyS!oye9F_A=VF8~)TbYRCtQ-@ z>3j)g`-#4AUv}#?%KQ}O6)lt$_a&EFvkY~`y^&=QLziO(F6Wx-*uFshxTaMs-E}q1 zMPp*5VY~V5^qI-&55UFU>2kwZw5O+>O1(;L&z(MJdOxg}r!Up0eZ^t(XDw%8`Z~3* zPoFo-)2`{!;vEDhsoqPED;a~tE&P8Ab_M;V5J?ryN# z)0-s7ko>+@;!!g9RdVcMa%|aHOOCH6#{&|HA86;tmi6WGa{2ar>s)(uto3dnDe;kw zA$6s&HdI_6Dz>ItQ%^UtdjcZGNBUqRx4*sXLi?Z^$l_4uF#+%dL7bN^%)jZM18 zK{a=>C&?FyQw8w>$(_oH4{|c%W5cIjArD?joE{P%ypcPd5&w~q0ry3xe65#_d2C4<%pXl@Yu4Dp+cwjP zG@#g+=X+pMQ(A%x5LOK@N}%spOKyrxHl(K9050TO88U)=@oXm-upAJJ3flu8KV{Ub zwJ?%c9!aq5Y-m+do@5u{Lsa zedK5>@pUrOYJBw8t+)PESvmBH`KfvLg-@yvlgCz*$J#?8vlGJz>b8+s{qn#VI*#%+ioofjR^R)=Px+HG6PJ6n z*Nj@Odn!7c3pbsiVh(npT7wdc*FC)K!R#H@UKPi7P1nOa3@%43%IY<^h`N&(D62q0 ztX8h-42oo+cLs4Wx>dWXm#L@fuDSr0#qZ3_5$(v#%rQic1H$D1J^^^Q=K5S>N8!M% zh~WDOUIOqr>1c^Z(yK^C@D9A2ND6%cZjZhqk_XKcU#@w_~)~^gA&#!7O25s`3s%DsJ*lP&53v%WD0J{jzBXY9GL{f3LuXu|!@CG)444yV+ z4Xcb!28i*J8~J!Q@D%EcP*3r)rceq)$nPPy _t.Any: + return _json.loads(payload) + + @staticmethod + def dumps(obj: _t.Any, **kwargs: _t.Any) -> str: + kwargs.setdefault("ensure_ascii", False) + kwargs.setdefault("separators", (",", ":")) + return _json.dumps(obj, **kwargs) diff --git a/venv/Lib/site-packages/itsdangerous/encoding.py b/venv/Lib/site-packages/itsdangerous/encoding.py new file mode 100644 index 0000000..edb04d1 --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/encoding.py @@ -0,0 +1,54 @@ +import base64 +import string +import struct +import typing as _t + +from .exc import BadData + +_t_str_bytes = _t.Union[str, bytes] + + +def want_bytes( + s: _t_str_bytes, encoding: str = "utf-8", errors: str = "strict" +) -> bytes: + if isinstance(s, str): + s = s.encode(encoding, errors) + + return s + + +def base64_encode(string: _t_str_bytes) -> bytes: + """Base64 encode a string of bytes or text. The resulting bytes are + safe to use in URLs. + """ + string = want_bytes(string) + return base64.urlsafe_b64encode(string).rstrip(b"=") + + +def base64_decode(string: _t_str_bytes) -> bytes: + """Base64 decode a URL-safe string of bytes or text. The result is + bytes. + """ + string = want_bytes(string, encoding="ascii", errors="ignore") + string += b"=" * (-len(string) % 4) + + try: + return base64.urlsafe_b64decode(string) + except (TypeError, ValueError) as e: + raise BadData("Invalid base64-encoded data") from e + + +# The alphabet used by base64.urlsafe_* +_base64_alphabet = f"{string.ascii_letters}{string.digits}-_=".encode("ascii") + +_int64_struct = struct.Struct(">Q") +_int_to_bytes = _int64_struct.pack +_bytes_to_int = _t.cast("_t.Callable[[bytes], _t.Tuple[int]]", _int64_struct.unpack) + + +def int_to_bytes(num: int) -> bytes: + return _int_to_bytes(num).lstrip(b"\x00") + + +def bytes_to_int(bytestr: bytes) -> int: + return _bytes_to_int(bytestr.rjust(8, b"\x00"))[0] diff --git a/venv/Lib/site-packages/itsdangerous/exc.py b/venv/Lib/site-packages/itsdangerous/exc.py new file mode 100644 index 0000000..c38a6af --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/exc.py @@ -0,0 +1,107 @@ +import typing as _t +from datetime import datetime + +_t_opt_any = _t.Optional[_t.Any] +_t_opt_exc = _t.Optional[Exception] + + +class BadData(Exception): + """Raised if bad data of any sort was encountered. This is the base + for all exceptions that ItsDangerous defines. + + .. versionadded:: 0.15 + """ + + def __init__(self, message: str): + super().__init__(message) + self.message = message + + def __str__(self) -> str: + return self.message + + +class BadSignature(BadData): + """Raised if a signature does not match.""" + + def __init__(self, message: str, payload: _t_opt_any = None): + super().__init__(message) + + #: The payload that failed the signature test. In some + #: situations you might still want to inspect this, even if + #: you know it was tampered with. + #: + #: .. versionadded:: 0.14 + self.payload: _t_opt_any = payload + + +class BadTimeSignature(BadSignature): + """Raised if a time-based signature is invalid. This is a subclass + of :class:`BadSignature`. + """ + + def __init__( + self, + message: str, + payload: _t_opt_any = None, + date_signed: _t.Optional[datetime] = None, + ): + super().__init__(message, payload) + + #: If the signature expired this exposes the date of when the + #: signature was created. This can be helpful in order to + #: tell the user how long a link has been gone stale. + #: + #: .. versionchanged:: 2.0 + #: The datetime value is timezone-aware rather than naive. + #: + #: .. versionadded:: 0.14 + self.date_signed = date_signed + + +class SignatureExpired(BadTimeSignature): + """Raised if a signature timestamp is older than ``max_age``. This + is a subclass of :exc:`BadTimeSignature`. + """ + + +class BadHeader(BadSignature): + """Raised if a signed header is invalid in some form. This only + happens for serializers that have a header that goes with the + signature. + + .. versionadded:: 0.24 + """ + + def __init__( + self, + message: str, + payload: _t_opt_any = None, + header: _t_opt_any = None, + original_error: _t_opt_exc = None, + ): + super().__init__(message, payload) + + #: If the header is actually available but just malformed it + #: might be stored here. + self.header: _t_opt_any = header + + #: If available, the error that indicates why the payload was + #: not valid. This might be ``None``. + self.original_error: _t_opt_exc = original_error + + +class BadPayload(BadData): + """Raised if a payload is invalid. This could happen if the payload + is loaded despite an invalid signature, or if there is a mismatch + between the serializer and deserializer. The original exception + that occurred during loading is stored on as :attr:`original_error`. + + .. versionadded:: 0.15 + """ + + def __init__(self, message: str, original_error: _t_opt_exc = None): + super().__init__(message) + + #: If available, the error that indicates why the payload was + #: not valid. This might be ``None``. + self.original_error: _t_opt_exc = original_error diff --git a/venv/Lib/site-packages/itsdangerous/py.typed b/venv/Lib/site-packages/itsdangerous/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/Lib/site-packages/itsdangerous/serializer.py b/venv/Lib/site-packages/itsdangerous/serializer.py new file mode 100644 index 0000000..9f4a84a --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/serializer.py @@ -0,0 +1,295 @@ +import json +import typing as _t + +from .encoding import want_bytes +from .exc import BadPayload +from .exc import BadSignature +from .signer import _make_keys_list +from .signer import Signer + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_kwargs = _t.Dict[str, _t.Any] +_t_opt_kwargs = _t.Optional[_t_kwargs] +_t_signer = _t.Type[Signer] +_t_fallbacks = _t.List[_t.Union[_t_kwargs, _t.Tuple[_t_signer, _t_kwargs], _t_signer]] +_t_load_unsafe = _t.Tuple[bool, _t.Any] +_t_secret_key = _t.Union[_t.Iterable[_t_str_bytes], _t_str_bytes] + + +def is_text_serializer(serializer: _t.Any) -> bool: + """Checks whether a serializer generates text or binary.""" + return isinstance(serializer.dumps({}), str) + + +class Serializer: + """A serializer wraps a :class:`~itsdangerous.signer.Signer` to + enable serializing and securely signing data other than bytes. It + can unsign to verify that the data hasn't been changed. + + The serializer provides :meth:`dumps` and :meth:`loads`, similar to + :mod:`json`, and by default uses :mod:`json` internally to serialize + the data to bytes. + + The secret key should be a random string of ``bytes`` and should not + be saved to code or version control. Different salts should be used + to distinguish signing in different contexts. See :doc:`/concepts` + for information about the security of the secret key and salt. + + :param secret_key: The secret key to sign and verify with. Can be a + list of keys, oldest to newest, to support key rotation. + :param salt: Extra key to combine with ``secret_key`` to distinguish + signatures in different contexts. + :param serializer: An object that provides ``dumps`` and ``loads`` + methods for serializing data to a string. Defaults to + :attr:`default_serializer`, which defaults to :mod:`json`. + :param serializer_kwargs: Keyword arguments to pass when calling + ``serializer.dumps``. + :param signer: A ``Signer`` class to instantiate when signing data. + Defaults to :attr:`default_signer`, which defaults to + :class:`~itsdangerous.signer.Signer`. + :param signer_kwargs: Keyword arguments to pass when instantiating + the ``Signer`` class. + :param fallback_signers: List of signer parameters to try when + unsigning with the default signer fails. Each item can be a dict + of ``signer_kwargs``, a ``Signer`` class, or a tuple of + ``(signer, signer_kwargs)``. Defaults to + :attr:`default_fallback_signers`. + + .. versionchanged:: 2.0 + Added support for key rotation by passing a list to + ``secret_key``. + + .. versionchanged:: 2.0 + Removed the default SHA-512 fallback signer from + ``default_fallback_signers``. + + .. versionchanged:: 1.1 + Added support for ``fallback_signers`` and configured a default + SHA-512 fallback. This fallback is for users who used the yanked + 1.0.0 release which defaulted to SHA-512. + + .. versionchanged:: 0.14 + The ``signer`` and ``signer_kwargs`` parameters were added to + the constructor. + """ + + #: The default serialization module to use to serialize data to a + #: string internally. The default is :mod:`json`, but can be changed + #: to any object that provides ``dumps`` and ``loads`` methods. + default_serializer: _t.Any = json + + #: The default ``Signer`` class to instantiate when signing data. + #: The default is :class:`itsdangerous.signer.Signer`. + default_signer: _t_signer = Signer + + #: The default fallback signers to try when unsigning fails. + default_fallback_signers: _t_fallbacks = [] + + def __init__( + self, + secret_key: _t_secret_key, + salt: _t_opt_str_bytes = b"itsdangerous", + serializer: _t.Any = None, + serializer_kwargs: _t_opt_kwargs = None, + signer: _t.Optional[_t_signer] = None, + signer_kwargs: _t_opt_kwargs = None, + fallback_signers: _t.Optional[_t_fallbacks] = None, + ): + #: The list of secret keys to try for verifying signatures, from + #: oldest to newest. The newest (last) key is used for signing. + #: + #: This allows a key rotation system to keep a list of allowed + #: keys and remove expired ones. + self.secret_keys: _t.List[bytes] = _make_keys_list(secret_key) + + if salt is not None: + salt = want_bytes(salt) + # if salt is None then the signer's default is used + + self.salt = salt + + if serializer is None: + serializer = self.default_serializer + + self.serializer: _t.Any = serializer + self.is_text_serializer: bool = is_text_serializer(serializer) + + if signer is None: + signer = self.default_signer + + self.signer: _t_signer = signer + self.signer_kwargs: _t_kwargs = signer_kwargs or {} + + if fallback_signers is None: + fallback_signers = list(self.default_fallback_signers or ()) + + self.fallback_signers: _t_fallbacks = fallback_signers + self.serializer_kwargs: _t_kwargs = serializer_kwargs or {} + + @property + def secret_key(self) -> bytes: + """The newest (last) entry in the :attr:`secret_keys` list. This + is for compatibility from before key rotation support was added. + """ + return self.secret_keys[-1] + + def load_payload( + self, payload: bytes, serializer: _t.Optional[_t.Any] = None + ) -> _t.Any: + """Loads the encoded object. This function raises + :class:`.BadPayload` if the payload is not valid. The + ``serializer`` parameter can be used to override the serializer + stored on the class. The encoded ``payload`` should always be + bytes. + """ + if serializer is None: + serializer = self.serializer + is_text = self.is_text_serializer + else: + is_text = is_text_serializer(serializer) + + try: + if is_text: + return serializer.loads(payload.decode("utf-8")) + + return serializer.loads(payload) + except Exception as e: + raise BadPayload( + "Could not load the payload because an exception" + " occurred on unserializing the data.", + original_error=e, + ) from e + + def dump_payload(self, obj: _t.Any) -> bytes: + """Dumps the encoded object. The return value is always bytes. + If the internal serializer returns text, the value will be + encoded as UTF-8. + """ + return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs)) + + def make_signer(self, salt: _t_opt_str_bytes = None) -> Signer: + """Creates a new instance of the signer to be used. The default + implementation uses the :class:`.Signer` base class. + """ + if salt is None: + salt = self.salt + + return self.signer(self.secret_keys, salt=salt, **self.signer_kwargs) + + def iter_unsigners(self, salt: _t_opt_str_bytes = None) -> _t.Iterator[Signer]: + """Iterates over all signers to be tried for unsigning. Starts + with the configured signer, then constructs each signer + specified in ``fallback_signers``. + """ + if salt is None: + salt = self.salt + + yield self.make_signer(salt) + + for fallback in self.fallback_signers: + if isinstance(fallback, dict): + kwargs = fallback + fallback = self.signer + elif isinstance(fallback, tuple): + fallback, kwargs = fallback + else: + kwargs = self.signer_kwargs + + for secret_key in self.secret_keys: + yield fallback(secret_key, salt=salt, **kwargs) + + def dumps(self, obj: _t.Any, salt: _t_opt_str_bytes = None) -> _t_str_bytes: + """Returns a signed string serialized with the internal + serializer. The return value can be either a byte or unicode + string depending on the format of the internal serializer. + """ + payload = want_bytes(self.dump_payload(obj)) + rv = self.make_signer(salt).sign(payload) + + if self.is_text_serializer: + return rv.decode("utf-8") + + return rv + + def dump(self, obj: _t.Any, f: _t.IO, salt: _t_opt_str_bytes = None) -> None: + """Like :meth:`dumps` but dumps into a file. The file handle has + to be compatible with what the internal serializer expects. + """ + f.write(self.dumps(obj, salt)) + + def loads( + self, s: _t_str_bytes, salt: _t_opt_str_bytes = None, **kwargs: _t.Any + ) -> _t.Any: + """Reverse of :meth:`dumps`. Raises :exc:`.BadSignature` if the + signature validation fails. + """ + s = want_bytes(s) + last_exception = None + + for signer in self.iter_unsigners(salt): + try: + return self.load_payload(signer.unsign(s)) + except BadSignature as err: + last_exception = err + + raise _t.cast(BadSignature, last_exception) + + def load(self, f: _t.IO, salt: _t_opt_str_bytes = None) -> _t.Any: + """Like :meth:`loads` but loads from a file.""" + return self.loads(f.read(), salt) + + def loads_unsafe( + self, s: _t_str_bytes, salt: _t_opt_str_bytes = None + ) -> _t_load_unsafe: + """Like :meth:`loads` but without verifying the signature. This + is potentially very dangerous to use depending on how your + serializer works. The return value is ``(signature_valid, + payload)`` instead of just the payload. The first item will be a + boolean that indicates if the signature is valid. This function + never fails. + + Use it for debugging only and if you know that your serializer + module is not exploitable (for example, do not use it with a + pickle serializer). + + .. versionadded:: 0.15 + """ + return self._loads_unsafe_impl(s, salt) + + def _loads_unsafe_impl( + self, + s: _t_str_bytes, + salt: _t_opt_str_bytes, + load_kwargs: _t_opt_kwargs = None, + load_payload_kwargs: _t_opt_kwargs = None, + ) -> _t_load_unsafe: + """Low level helper function to implement :meth:`loads_unsafe` + in serializer subclasses. + """ + if load_kwargs is None: + load_kwargs = {} + + try: + return True, self.loads(s, salt=salt, **load_kwargs) + except BadSignature as e: + if e.payload is None: + return False, None + + if load_payload_kwargs is None: + load_payload_kwargs = {} + + try: + return ( + False, + self.load_payload(e.payload, **load_payload_kwargs), + ) + except BadPayload: + return False, None + + def load_unsafe(self, f: _t.IO, salt: _t_opt_str_bytes = None) -> _t_load_unsafe: + """Like :meth:`loads_unsafe` but loads from a file. + + .. versionadded:: 0.15 + """ + return self.loads_unsafe(f.read(), salt=salt) diff --git a/venv/Lib/site-packages/itsdangerous/signer.py b/venv/Lib/site-packages/itsdangerous/signer.py new file mode 100644 index 0000000..aa12005 --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/signer.py @@ -0,0 +1,257 @@ +import hashlib +import hmac +import typing as _t + +from .encoding import _base64_alphabet +from .encoding import base64_decode +from .encoding import base64_encode +from .encoding import want_bytes +from .exc import BadSignature + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_secret_key = _t.Union[_t.Iterable[_t_str_bytes], _t_str_bytes] + + +class SigningAlgorithm: + """Subclasses must implement :meth:`get_signature` to provide + signature generation functionality. + """ + + def get_signature(self, key: bytes, value: bytes) -> bytes: + """Returns the signature for the given key and value.""" + raise NotImplementedError() + + def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool: + """Verifies the given signature matches the expected + signature. + """ + return hmac.compare_digest(sig, self.get_signature(key, value)) + + +class NoneAlgorithm(SigningAlgorithm): + """Provides an algorithm that does not perform any signing and + returns an empty signature. + """ + + def get_signature(self, key: bytes, value: bytes) -> bytes: + return b"" + + +class HMACAlgorithm(SigningAlgorithm): + """Provides signature generation using HMACs.""" + + #: The digest method to use with the MAC algorithm. This defaults to + #: SHA1, but can be changed to any other function in the hashlib + #: module. + default_digest_method: _t.Any = staticmethod(hashlib.sha1) + + def __init__(self, digest_method: _t.Any = None): + if digest_method is None: + digest_method = self.default_digest_method + + self.digest_method: _t.Any = digest_method + + def get_signature(self, key: bytes, value: bytes) -> bytes: + mac = hmac.new(key, msg=value, digestmod=self.digest_method) + return mac.digest() + + +def _make_keys_list(secret_key: _t_secret_key) -> _t.List[bytes]: + if isinstance(secret_key, (str, bytes)): + return [want_bytes(secret_key)] + + return [want_bytes(s) for s in secret_key] + + +class Signer: + """A signer securely signs bytes, then unsigns them to verify that + the value hasn't been changed. + + The secret key should be a random string of ``bytes`` and should not + be saved to code or version control. Different salts should be used + to distinguish signing in different contexts. See :doc:`/concepts` + for information about the security of the secret key and salt. + + :param secret_key: The secret key to sign and verify with. Can be a + list of keys, oldest to newest, to support key rotation. + :param salt: Extra key to combine with ``secret_key`` to distinguish + signatures in different contexts. + :param sep: Separator between the signature and value. + :param key_derivation: How to derive the signing key from the secret + key and salt. Possible values are ``concat``, ``django-concat``, + or ``hmac``. Defaults to :attr:`default_key_derivation`, which + defaults to ``django-concat``. + :param digest_method: Hash function to use when generating the HMAC + signature. Defaults to :attr:`default_digest_method`, which + defaults to :func:`hashlib.sha1`. Note that the security of the + hash alone doesn't apply when used intermediately in HMAC. + :param algorithm: A :class:`SigningAlgorithm` instance to use + instead of building a default :class:`HMACAlgorithm` with the + ``digest_method``. + + .. versionchanged:: 2.0 + Added support for key rotation by passing a list to + ``secret_key``. + + .. versionchanged:: 0.18 + ``algorithm`` was added as an argument to the class constructor. + + .. versionchanged:: 0.14 + ``key_derivation`` and ``digest_method`` were added as arguments + to the class constructor. + """ + + #: The default digest method to use for the signer. The default is + #: :func:`hashlib.sha1`, but can be changed to any :mod:`hashlib` or + #: compatible object. Note that the security of the hash alone + #: doesn't apply when used intermediately in HMAC. + #: + #: .. versionadded:: 0.14 + default_digest_method: _t.Any = staticmethod(hashlib.sha1) + + #: The default scheme to use to derive the signing key from the + #: secret key and salt. The default is ``django-concat``. Possible + #: values are ``concat``, ``django-concat``, and ``hmac``. + #: + #: .. versionadded:: 0.14 + default_key_derivation: str = "django-concat" + + def __init__( + self, + secret_key: _t_secret_key, + salt: _t_opt_str_bytes = b"itsdangerous.Signer", + sep: _t_str_bytes = b".", + key_derivation: _t.Optional[str] = None, + digest_method: _t.Optional[_t.Any] = None, + algorithm: _t.Optional[SigningAlgorithm] = None, + ): + #: The list of secret keys to try for verifying signatures, from + #: oldest to newest. The newest (last) key is used for signing. + #: + #: This allows a key rotation system to keep a list of allowed + #: keys and remove expired ones. + self.secret_keys: _t.List[bytes] = _make_keys_list(secret_key) + self.sep: bytes = want_bytes(sep) + + if self.sep in _base64_alphabet: + raise ValueError( + "The given separator cannot be used because it may be" + " contained in the signature itself. ASCII letters," + " digits, and '-_=' must not be used." + ) + + if salt is not None: + salt = want_bytes(salt) + else: + salt = b"itsdangerous.Signer" + + self.salt = salt + + if key_derivation is None: + key_derivation = self.default_key_derivation + + self.key_derivation: str = key_derivation + + if digest_method is None: + digest_method = self.default_digest_method + + self.digest_method: _t.Any = digest_method + + if algorithm is None: + algorithm = HMACAlgorithm(self.digest_method) + + self.algorithm: SigningAlgorithm = algorithm + + @property + def secret_key(self) -> bytes: + """The newest (last) entry in the :attr:`secret_keys` list. This + is for compatibility from before key rotation support was added. + """ + return self.secret_keys[-1] + + def derive_key(self, secret_key: _t_opt_str_bytes = None) -> bytes: + """This method is called to derive the key. The default key + derivation choices can be overridden here. Key derivation is not + intended to be used as a security method to make a complex key + out of a short password. Instead you should use large random + secret keys. + + :param secret_key: A specific secret key to derive from. + Defaults to the last item in :attr:`secret_keys`. + + .. versionchanged:: 2.0 + Added the ``secret_key`` parameter. + """ + if secret_key is None: + secret_key = self.secret_keys[-1] + else: + secret_key = want_bytes(secret_key) + + if self.key_derivation == "concat": + return _t.cast(bytes, self.digest_method(self.salt + secret_key).digest()) + elif self.key_derivation == "django-concat": + return _t.cast( + bytes, self.digest_method(self.salt + b"signer" + secret_key).digest() + ) + elif self.key_derivation == "hmac": + mac = hmac.new(secret_key, digestmod=self.digest_method) + mac.update(self.salt) + return mac.digest() + elif self.key_derivation == "none": + return secret_key + else: + raise TypeError("Unknown key derivation method") + + def get_signature(self, value: _t_str_bytes) -> bytes: + """Returns the signature for the given value.""" + value = want_bytes(value) + key = self.derive_key() + sig = self.algorithm.get_signature(key, value) + return base64_encode(sig) + + def sign(self, value: _t_str_bytes) -> bytes: + """Signs the given string.""" + value = want_bytes(value) + return value + self.sep + self.get_signature(value) + + def verify_signature(self, value: _t_str_bytes, sig: _t_str_bytes) -> bool: + """Verifies the signature for the given value.""" + try: + sig = base64_decode(sig) + except Exception: + return False + + value = want_bytes(value) + + for secret_key in reversed(self.secret_keys): + key = self.derive_key(secret_key) + + if self.algorithm.verify_signature(key, value, sig): + return True + + return False + + def unsign(self, signed_value: _t_str_bytes) -> bytes: + """Unsigns the given string.""" + signed_value = want_bytes(signed_value) + + if self.sep not in signed_value: + raise BadSignature(f"No {self.sep!r} found in value") + + value, sig = signed_value.rsplit(self.sep, 1) + + if self.verify_signature(value, sig): + return value + + raise BadSignature(f"Signature {sig!r} does not match", payload=value) + + def validate(self, signed_value: _t_str_bytes) -> bool: + """Only validates the given signed value. Returns ``True`` if + the signature exists and is valid. + """ + try: + self.unsign(signed_value) + return True + except BadSignature: + return False diff --git a/venv/Lib/site-packages/itsdangerous/timed.py b/venv/Lib/site-packages/itsdangerous/timed.py new file mode 100644 index 0000000..cad8da3 --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/timed.py @@ -0,0 +1,234 @@ +import time +import typing +import typing as _t +from datetime import datetime +from datetime import timezone + +from .encoding import base64_decode +from .encoding import base64_encode +from .encoding import bytes_to_int +from .encoding import int_to_bytes +from .encoding import want_bytes +from .exc import BadSignature +from .exc import BadTimeSignature +from .exc import SignatureExpired +from .serializer import Serializer +from .signer import Signer + +_t_str_bytes = _t.Union[str, bytes] +_t_opt_str_bytes = _t.Optional[_t_str_bytes] +_t_opt_int = _t.Optional[int] + +if _t.TYPE_CHECKING: + import typing_extensions as _te + + +class TimestampSigner(Signer): + """Works like the regular :class:`.Signer` but also records the time + of the signing and can be used to expire signatures. The + :meth:`unsign` method can raise :exc:`.SignatureExpired` if the + unsigning failed because the signature is expired. + """ + + def get_timestamp(self) -> int: + """Returns the current timestamp. The function must return an + integer. + """ + return int(time.time()) + + def timestamp_to_datetime(self, ts: int) -> datetime: + """Convert the timestamp from :meth:`get_timestamp` into an + aware :class`datetime.datetime` in UTC. + + .. versionchanged:: 2.0 + The timestamp is returned as a timezone-aware ``datetime`` + in UTC rather than a naive ``datetime`` assumed to be UTC. + """ + return datetime.fromtimestamp(ts, tz=timezone.utc) + + def sign(self, value: _t_str_bytes) -> bytes: + """Signs the given string and also attaches time information.""" + value = want_bytes(value) + timestamp = base64_encode(int_to_bytes(self.get_timestamp())) + sep = want_bytes(self.sep) + value = value + sep + timestamp + return value + sep + self.get_signature(value) + + # Ignore overlapping signatures check, return_timestamp is the only + # parameter that affects the return type. + + @typing.overload + def unsign( # type: ignore + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: "_te.Literal[False]" = False, + ) -> bytes: + ... + + @typing.overload + def unsign( + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: "_te.Literal[True]" = True, + ) -> _t.Tuple[bytes, datetime]: + ... + + def unsign( + self, + signed_value: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: bool = False, + ) -> _t.Union[_t.Tuple[bytes, datetime], bytes]: + """Works like the regular :meth:`.Signer.unsign` but can also + validate the time. See the base docstring of the class for + the general behavior. If ``return_timestamp`` is ``True`` the + timestamp of the signature will be returned as an aware + :class:`datetime.datetime` object in UTC. + + .. versionchanged:: 2.0 + The timestamp is returned as a timezone-aware ``datetime`` + in UTC rather than a naive ``datetime`` assumed to be UTC. + """ + try: + result = super().unsign(signed_value) + sig_error = None + except BadSignature as e: + sig_error = e + result = e.payload or b"" + + sep = want_bytes(self.sep) + + # If there is no timestamp in the result there is something + # seriously wrong. In case there was a signature error, we raise + # that one directly, otherwise we have a weird situation in + # which we shouldn't have come except someone uses a time-based + # serializer on non-timestamp data, so catch that. + if sep not in result: + if sig_error: + raise sig_error + + raise BadTimeSignature("timestamp missing", payload=result) + + value, ts_bytes = result.rsplit(sep, 1) + ts_int: _t_opt_int = None + ts_dt: _t.Optional[datetime] = None + + try: + ts_int = bytes_to_int(base64_decode(ts_bytes)) + except Exception: + pass + + # Signature is *not* okay. Raise a proper error now that we have + # split the value and the timestamp. + if sig_error is not None: + if ts_int is not None: + try: + ts_dt = self.timestamp_to_datetime(ts_int) + except (ValueError, OSError, OverflowError) as exc: + # Windows raises OSError + # 32-bit raises OverflowError + raise BadTimeSignature( + "Malformed timestamp", payload=value + ) from exc + + raise BadTimeSignature(str(sig_error), payload=value, date_signed=ts_dt) + + # Signature was okay but the timestamp is actually not there or + # malformed. Should not happen, but we handle it anyway. + if ts_int is None: + raise BadTimeSignature("Malformed timestamp", payload=value) + + # Check timestamp is not older than max_age + if max_age is not None: + age = self.get_timestamp() - ts_int + + if age > max_age: + raise SignatureExpired( + f"Signature age {age} > {max_age} seconds", + payload=value, + date_signed=self.timestamp_to_datetime(ts_int), + ) + + if age < 0: + raise SignatureExpired( + f"Signature age {age} < 0 seconds", + payload=value, + date_signed=self.timestamp_to_datetime(ts_int), + ) + + if return_timestamp: + return value, self.timestamp_to_datetime(ts_int) + + return value + + def validate(self, signed_value: _t_str_bytes, max_age: _t_opt_int = None) -> bool: + """Only validates the given signed value. Returns ``True`` if + the signature exists and is valid.""" + try: + self.unsign(signed_value, max_age=max_age) + return True + except BadSignature: + return False + + +class TimedSerializer(Serializer): + """Uses :class:`TimestampSigner` instead of the default + :class:`.Signer`. + """ + + default_signer: _t.Type[TimestampSigner] = TimestampSigner + + def iter_unsigners( + self, salt: _t_opt_str_bytes = None + ) -> _t.Iterator[TimestampSigner]: + return _t.cast("_t.Iterator[TimestampSigner]", super().iter_unsigners(salt)) + + # TODO: Signature is incompatible because parameters were added + # before salt. + + def loads( # type: ignore + self, + s: _t_str_bytes, + max_age: _t_opt_int = None, + return_timestamp: bool = False, + salt: _t_opt_str_bytes = None, + ) -> _t.Any: + """Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the + signature validation fails. If a ``max_age`` is provided it will + ensure the signature is not older than that time in seconds. In + case the signature is outdated, :exc:`.SignatureExpired` is + raised. All arguments are forwarded to the signer's + :meth:`~TimestampSigner.unsign` method. + """ + s = want_bytes(s) + last_exception = None + + for signer in self.iter_unsigners(salt): + try: + base64d, timestamp = signer.unsign( + s, max_age=max_age, return_timestamp=True + ) + payload = self.load_payload(base64d) + + if return_timestamp: + return payload, timestamp + + return payload + except SignatureExpired: + # The signature was unsigned successfully but was + # expired. Do not try the next signer. + raise + except BadSignature as err: + last_exception = err + + raise _t.cast(BadSignature, last_exception) + + def loads_unsafe( # type: ignore + self, + s: _t_str_bytes, + max_age: _t_opt_int = None, + salt: _t_opt_str_bytes = None, + ) -> _t.Tuple[bool, _t.Any]: + return self._loads_unsafe_impl(s, salt, load_kwargs={"max_age": max_age}) diff --git a/venv/Lib/site-packages/itsdangerous/url_safe.py b/venv/Lib/site-packages/itsdangerous/url_safe.py new file mode 100644 index 0000000..d5a9b0c --- /dev/null +++ b/venv/Lib/site-packages/itsdangerous/url_safe.py @@ -0,0 +1,80 @@ +import typing as _t +import zlib + +from ._json import _CompactJSON +from .encoding import base64_decode +from .encoding import base64_encode +from .exc import BadPayload +from .serializer import Serializer +from .timed import TimedSerializer + + +class URLSafeSerializerMixin(Serializer): + """Mixed in with a regular serializer it will attempt to zlib + compress the string to make it shorter if necessary. It will also + base64 encode the string so that it can safely be placed in a URL. + """ + + default_serializer = _CompactJSON + + def load_payload( + self, + payload: bytes, + *args: _t.Any, + serializer: _t.Optional[_t.Any] = None, + **kwargs: _t.Any, + ) -> _t.Any: + decompress = False + + if payload.startswith(b"."): + payload = payload[1:] + decompress = True + + try: + json = base64_decode(payload) + except Exception as e: + raise BadPayload( + "Could not base64 decode the payload because of an exception", + original_error=e, + ) from e + + if decompress: + try: + json = zlib.decompress(json) + except Exception as e: + raise BadPayload( + "Could not zlib decompress the payload before decoding the payload", + original_error=e, + ) from e + + return super().load_payload(json, *args, **kwargs) + + def dump_payload(self, obj: _t.Any) -> bytes: + json = super().dump_payload(obj) + is_compressed = False + compressed = zlib.compress(json) + + if len(compressed) < (len(json) - 1): + json = compressed + is_compressed = True + + base64d = base64_encode(json) + + if is_compressed: + base64d = b"." + base64d + + return base64d + + +class URLSafeSerializer(URLSafeSerializerMixin, Serializer): + """Works like :class:`.Serializer` but dumps and loads into a URL + safe string consisting of the upper and lowercase character of the + alphabet as well as ``'_'``, ``'-'`` and ``'.'``. + """ + + +class URLSafeTimedSerializer(URLSafeSerializerMixin, TimedSerializer): + """Works like :class:`.TimedSerializer` but dumps and loads into a + URL safe string consisting of the upper and lowercase character of + the alphabet as well as ``'_'``, ``'-'`` and ``'.'``. + """ diff --git a/venv/Lib/site-packages/jinja2/__init__.py b/venv/Lib/site-packages/jinja2/__init__.py new file mode 100644 index 0000000..e323926 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/__init__.py @@ -0,0 +1,37 @@ +"""Jinja is a template engine written in pure Python. It provides a +non-XML syntax that supports inline expressions and an optional +sandboxed environment. +""" +from .bccache import BytecodeCache as BytecodeCache +from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache +from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache +from .environment import Environment as Environment +from .environment import Template as Template +from .exceptions import TemplateAssertionError as TemplateAssertionError +from .exceptions import TemplateError as TemplateError +from .exceptions import TemplateNotFound as TemplateNotFound +from .exceptions import TemplateRuntimeError as TemplateRuntimeError +from .exceptions import TemplatesNotFound as TemplatesNotFound +from .exceptions import TemplateSyntaxError as TemplateSyntaxError +from .exceptions import UndefinedError as UndefinedError +from .loaders import BaseLoader as BaseLoader +from .loaders import ChoiceLoader as ChoiceLoader +from .loaders import DictLoader as DictLoader +from .loaders import FileSystemLoader as FileSystemLoader +from .loaders import FunctionLoader as FunctionLoader +from .loaders import ModuleLoader as ModuleLoader +from .loaders import PackageLoader as PackageLoader +from .loaders import PrefixLoader as PrefixLoader +from .runtime import ChainableUndefined as ChainableUndefined +from .runtime import DebugUndefined as DebugUndefined +from .runtime import make_logging_undefined as make_logging_undefined +from .runtime import StrictUndefined as StrictUndefined +from .runtime import Undefined as Undefined +from .utils import clear_caches as clear_caches +from .utils import is_undefined as is_undefined +from .utils import pass_context as pass_context +from .utils import pass_environment as pass_environment +from .utils import pass_eval_context as pass_eval_context +from .utils import select_autoescape as select_autoescape + +__version__ = "3.1.2" diff --git a/venv/Lib/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc0a44295aa5aeff3e78dbe428b57cb38eae46b0 GIT binary patch literal 2128 zcma)+TTdHD6vxLHu<;F>i@C!BNh=gVl%#j1k;*N!f)s_Mtwxr%>)k1A*qvF;%o3ZY zsxR#~Xum<#Z?lgpKUL~eUn-=$7m@@oO1 ze^ev;47`O`zvK}59eD^NFXs&exo`jvIg$C4zB0!I>y&|{wx>m~Q4B-HY$6~&xbhh2HX=!W&Rv?9*Ve2>7W z5@mG#hl71fbg6VYmOOE!CE_SzTnZQ(sF_G7;zS6aQ5Zoz_*pEH&~$>50He)1#Dite ze9mY{sN5+13l)Oaa=q$iR}zi)zVo{X4Es|36r}lrXD0sWZu)5N2FlrfH>UN|Cmt6^o23L5;;QHE~AokB=pyHyRS;XYg~F~PSBUw5F{Y3 zw4GQoB3vgT=R*%R?rq$Evi4!GVA~#ZZM#=!yLxG!hf3pvN`^ps<-Qg8u(IJbhI%E^ zafvQk!HdcrQKH^;ysV_6q^hI_(kle|-xGXPS#>21C1Xm)l}sp^RMG_L75HTV@hN3Z zE16L;t7HzOHxx@h5PV)43rZH1EGe;+EQ9pQwtYspdem(DFZ2p5^!mH4FIvx`xJ9dd z?saKvo4K)i%0%n2FZbeh>)VLX?-@Vc4cN=p8Jxeh@3&jRmt;Mm3j NCVwugFTVp7^#;I!h|vH5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0d4b4d270860967fb62b864a0c026c3153f9dff GIT binary patch literal 2144 zcmX|?O>84c6~~=KFf6M*a^u8pLA6L+kPzYm0uE?7AcRpewnyTU8XOy z&-3j0;frnd;^al=s=%&}uTI!i?W%dzy0X}n^Qrb}hy8u)vj+RD^U`K7y_XZx3yky< z=|>0#>2-uA=_Z0hrzJ+GM`Y|XGET`b7}b(gyFdu2Hf2=brMiYtqH$VN~0jN0(Flhh8V4X=|TCreI_99SKdoB}yTa;oGQ zbe5nqSlk4;8H60UTL>z-Md~PwIw|U)+)Yszf2L)Wc@IB=rL7 z!Rn>RgVoEC2dk%&_msQ>c~$ZZ^0B0!B!5hPKtA046!qcm=co^NU!{JL`c>*1G)T}O zNy9A~?lKxap<#iB2T&(8?9tGpQI|$OqtOMO<35~!L>FDUK;q(@F2-~b&^X6vtWt15 zL5YGs1w#tXDVS0)qe++1G)2=4O|vvrF)7j%&v+WpEW;I>ab?Qm1;*ng9TK@0Z0>dE{n>n|v-xm#tyt_@ajz4l z>%^fbxuWDVQJRRuia0zGM;&q06?#JG8KG|r-C#m*imD>2aZ!cQNDD(p=n7*dY7Hi8 zj;LpusPBu0!bBq}8Xgl(MKtT8Wirtk2s0_n9bu}%95Z1~gw+vNj|s~c)=*d@VNHcK z6LwtKHWRih?7pxE!o|+6CET`fott*$W~8v2(eBMiM{sXO-p$CrIak@u`R+|H3-j4Y znBUgJygFbQF2X$is~D0X4KiRyCU(I{3TeT0b{#arykA4oZ-)6v24a#AHAP_<5&(WJ zo&ht61Tu+^6c?eElAaVYsiqWusHM{Y-n18L8ClJsn(-jA3V1BVPN?PD5V;|khT8TC zCfio1?Z^vul3)x1FhxR5fh@>@ZJAI(5mbQz8Zy}ivM&`~&!x}w+GQ{0#gc<{4Rtq1$OXpVt)eUeeUB%_Ob3jE;slH z;F%0GurCuh{#f=g9)txO-4|>>EVQL)BQrrWg~>E5Om`usd*M;93@TwcU1u0f;7HK} zI7Jyxshmkmu?;LKoUr^j0r5B$mRoo*<<u5RTL|%7VxctFt^haxVA3cbzKHQA{WaZ&cAKi)m zd_A`MtF?`He|&%K{pfqK)%T)5Te%b6TzME{>$mT|d;5>E&FH`KvyoR0RyM2>k2$vQX7M@35Q~vu6zZ`k}Yq@Xid^22( aeCbbL|JTyu>x=)6U{G$!?*`udk^cb3O9!_A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92f4ecba0338439c5ce6fead9851321850e83bb4 GIT binary patch literal 4645 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c071ab5cd4becb72ae76da15d7e6c7281cac1d0 GIT binary patch literal 110487 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 AGynhq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/constants.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/constants.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8989375bf8b8dadaa73a7d97dd20c66d921d305 GIT binary patch literal 1563 zcmX|>&5j&35XWaAAkBgBR9B_%A%Dq0DR6x{BbncBGRjz2nDo`5$% zJOScuICJHWBITA7znWQSbyt<$a9)zwWYibk&u1;o`PoEj;{4JiVVBUI zZ-eil<>GulbaA7OlBPbpG5R!Vb0PX#UC8sCr;KKDW;GtzwgOcpG-+MRa2l{J>vHO& zdef_qQHfDJg2`yp7N8eDYU|}>5viBjtDF3yW3R)cpr16@UT0Ms#vy5~YE!u82=XZ> z32y3YUv+Yj+Sm%+oJ7$*84Vb>xFwR7Btl35sFaK^q0PJ5p3-@>lCazR0Nkqo8x?Do zI_zQ1P`W+gOqSc|d+7%y?7mP7jnTV(uR+|Q_*EzGj+QcIxHW1OtS}tGSfqgLcta#F zfKng21=q>xyhxc8h?;nVEX^FK=0VCy7b}`Bwa>$KuPwU>^aRsrU`C&dusl*K8ww7T zx|lk2P(n&Bs66J<*c4)A9wNPg`|KqE%8WzuCyC4Kqtxz6YNkg_Hd{ISUQE#uNOg0@ zt*Hzcmd>1kZK{m?#3#Wy!2=5lM$0c~D=TS|vt@yjjz* zlO$eG!R1M_%Oxlx`66!dg+0`|f02o?#K=G@`wR;iwo^^v+AT*GSXhjT8xR(#Jhco) z6aK)|SvDh&apepUDBJl`w-hh+v=@<-@+?JX2v|y{ic62Hf(oM${B%}dSpS-^yvs2s zN;edx`?~>vR+GIIf>nRe6W^8dBFVvDq=8OLt4yv6K4N`?f=wf_Y8z?}$}Xld&KQ%` z5lwXh$8iE2`vfkOW(K@)*67nlN0C-Lv(bp1%V3Jgji%J8Lo7^y{%ja44NQ%zi1od2 zM>#9g9C9&aJ@Pwnp3a7Xqf;u^n_GQR0^(-b4@@iRSgGtMp+~rx-O8yFEmZt7f&8u{;_#&_wAdjFCXll zRw;Ei{yg2J-NVd9MKX2wjka(5xVwOjt6ZLc9rMc_K-S$O9e405A1^*U_uM_ZYfabw zvrp|Vw3A*xS#I9E_c_-|kMc!%mwoJVuOA>@y}jLTU)_2C!;k*l+&jPJ4)gy4|3N!7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/debug.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/debug.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c5dfbe2c354e3024421d973953794208394eae3 GIT binary patch literal 6723 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 Jmqv8T{|~wOh-Lr) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17e3e679a00c0ddb039eb40a83806997a565922f GIT binary patch literal 1729 zcmaJ>OK;mo5MJv2uw*@L`H`pNxI;uf+@J8ERvvE-y>Rj`b9?b4=5bx9=^ z1EVR>LytZfs1H8)7WCgRKo7*80`!zip~5$xI;6$K0*X?jL=cL-73l z+xO%wfY4u#;yuwJI9uir`WF$Sz?uFZPRiw^g&CX{W^qQig0rwPH?&?Q*T{7eBT*73V>o{j5^mrL zJc&8@72rRGCu9z%@$^YVxCv3_yzry|+AUAp@r~p)bCFjA6=&Z%l=@q!CMt3)yjra_ z`K<=PV3Th&9T2MY+X|t8a=Sz&R5FODXq0qBxvTd&4&y6Lh6zB?y3`?hS85Z}_hR1k z%^$$~h3PwR-gBmJ?ttZM)jBUWn&l?H&exmb<`%zN{hDQ6b7f=wl5zE%i&1wfX=|OX3>7FzdRvx7-JoWyM-|y5B}x=C zF~o*McZp%0; zasN5^)6Eq4Dajvws+J5YcRB>K)C#{^-mXFAHfq&Mm2VX1S;**jWp$Tv1`F@V3RFv{ zaCHzH_sGM8WkG}JhECmWCcH`as9CUQ$cj!wu#SeEA>s_qjbn-CH=DdzdB9g5R_kjl zeGyKC+=!|}<~s8kgk_d%8skmonW=2p21eYGYI`->)Fj*dHov{$!!d7W=;mMc7Uz5pz+;`E!ptoHvvXJA0* zk1L9Mr)z*sE?sbT2=&d!`c+h*=+JLTmqS5_TMSI?QM$~7mn*6k-L%%P= zE!vlMiQd|i)jjFnT}*bQo?_^wZvQ-TzoX%vLcX9MLm21s>c7A^@N*nzql|S)-k`hI zsMx4zjf#z?tWmMif;B4t#hJCxh`jL!e*JQQIBw1k+_XFygwVt^q-19&EtIkguq1Cg zmaIKFW1*a#hv*r*xCr*cACJt_xuc&g1lri~u@Hcz*J#NuTmesm7)oaCv6P*>X(w}zq^AdoaNajSFjy!(m_Rev z?942Lw`Z^0lLZ^p>G@N`nz{on2I=UBz=Z+aAKp0n;5d6Mosi?{KQp($%sF$M@1J+b KRp~uAihlu6{`trN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/environment.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/environment.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d3454cb95c3a61fa809e661cbeedaa448545d9c GIT binary patch literal 80545 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 Aga7~l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be4a24e99ad52410d2c29188acee0f29401d8307 GIT binary patch literal 8614 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

q@#%+*M>zpZy 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 Aj{pDw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/filters.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/filters.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd4de13a94ee80debd5ad08a15de97405696c83a GIT binary patch literal 75891 zcmd443t$^pdLD{5K!PMF@geFBk)lXi6eQ|tQxBVZTDBxVB>6#0OM;vs1&IXc0jLKB zdg;gRf(kdLcC9tNYh}5Ky^&*YqTTK$N^jEGX>OY~Z38Gs#iG%@%1xbSd)r=aw7zlN z_NL$epP9kT0HkH_<~Bp(;9%y=d7uA%{`0Hl<)t=U|25SuyE8W1U(gTjTBt_u9$I3v zy>63ioi@oXIR@;VcK&vBI{4e!>Ev%$r%U~IndeEw|rG+J!-sYpkZ)z=W0$}H_$k^rgII)7o#>! zolP8HGSEEO(%E9SIcx`P($ZIK(lWXJ^nF@>-*wt-@8Tn_&b1CItyTLiEyu5Q`mYuE z71Dn7ITmYC+j}d&>p(vEh^uqGC78TjZ_ATIK5}HCx`%+hlA}zuow2j+|O7IqCgjD6Ii$ zK4S@erP6(`xI4F@l^^{BXyyDZxL@ya!+glM-`I0~K4~r5^?=lB>9>0sHL8WNtb2F| z^JN|8OS@Drg)o20@q0afZ^wKx&lLCR9eOLa;F&&-#@gflPCb?T^e#O<=NpDzaOUHv z$rjXP18VZ1yo|@VP1-1JlD9~k@!5jUR+N>W)mts^mPy-Qaeo)ZzpGWj*7*>>FLJ&g zId>R-KY-u6Ep0Zocmr0JVg1UBjK5G@_vt-aL5SzuZFw(WOSG;XW$xwH{l5~mZU^4H zhd!2e%KNx~eA2FhHtsjH=|SXw0C2;3`eChZ(nA)wanO*y1L+?jxPkuu8}5sIZ7l7O z_M#5^r2WzXu8Vor-An6BrH3)gAC;G?<$cU+xL!KQIa2PQ2WmA)kMxyEj~4XGAyJO> zw|Xg`zl1}8JckQPIIQP@Ho$; zPZ%>D2X=aj=SmwO+|wBQCurtlru{db`vh%t$bprx<@1d{phl_mOhHYa#44zipES>X zOX+!7={|i_TQA01nO6MIR>NltYIscg@93v3(sS}wUfUk&1p4T>wm#HV@;{_6yyCJz zwWqjkPZhRJyn`P8|D^7Mx1P4-{C84ML7HdeC6ji^CiN9Oc^3EW7HGLe?gTYqgyH=> z-dp-S(kZm%IZm%*4Hd#iFxO95VAN@ITRKmQnIhVQk{#-d*&?06_!P$h11NjY^mI!e z_Daz?pTta040BR8yl=>fut}vfR4|@jD6yfYPKK_}AU@Fkx2TLBxsj2@7X%3F}C6LY2$ zvnhoXGM;Xc#!=_|jJjm{MI+;regS3nfkLFz6LYqZ(t4z?BHw&l=D=NQL zD!o-u#`E0H=Zm&eD^;{J554B;cf)MSm-===sR~BYFMSuYHqPb8&E?~1ne?j#usp$Q zLs0(L@b0ksn^wR(_eEI^r)M$pzgeVz z)R6}yoHr+lc%R=Yct6Q4Nfv8~)b%Mj-awAOU6A9bHW%-yM*q0r{TH}KFMRGA{ci<1 ze(^Ka=ywX4{Y(}pP|%$irRg~ zQl&p&%K9_E2aNH*qqbjBM@y{Q&)!d;yT*V671BRL4N|80^8aTIZlDJL95on^*rY#{ zFMZt(dFcg&|3W^4@L$RY5dM*T9N|{^7ZC1{pFr5c;lGj}Mf_jOWeEQbhkq#TB&&azG{yTXu z!kl~&;lGz3L-=R%;|OodClLN0^0Ns4Px*@o@5nDB{B!vsga_pFU$?(aCH-IW0Dk|4 zJdE%^$fF29lwU;nm-1 z4-O546LPQ*H)JIq9FEIU@LVKuDwsGW2fMqI-QB_1kgS9gF(ve4TAW8(>^Wz+rx#!D z-c#X76cKN~5*r@sxqzrgj`xO#B~+Xm8iq zuo4MJ6Sz?t9!|u%!V%OV|LYunzhlpp@iROgh{P#v)qbvPhtfYhC`S|f6eUJ4l^l;s za$h7WOO)nRVsIcH?vuMt$79hhX?Sobj@xBJ;ds2OHx^CE=P9d7{w+t(MwD2TGQ+(E z;@;WtfR^wbG;pXdrVNIuIwix(K-crbv4o7o9{h-mP|Uy2l#72KGT5URja9N*J^;&>cmf1+nZx)43F zH`dGj8b5I$l6ZKy=fq<}a`fq#a%TTP?A(d7=&TcmB0VSK7^`(d;odXhemQ>PbR>E@ zym7rci$X&ea=xxE8iTH`kxI3aA?;2h%8h#wjM-+&DpPy!B8q9{rgx&@LAk3dSK8Gz z7?XwvC|=fu?hX&APn?)WN;6(iR#VVIK@$Z*Euj1H^$5oFzgdU9WWiMLtPNjt1|l!Y zCTHIt!jQUqV#84>XMZ$je=6t3cn-_TDm*szvKu$Jms5zmZc7+OAZbfzLy2c*g`m=! zpf}a)H08io!l%V-wxn&^kS2fMOxTRDMy#DnPQNVGp*8pM@|1u^=v(i^56 zqf$`Jw|FoHFrfq!7lvdM6JHmJhgv+j(nvfKjVHp?vwFv_ zY{V}y3wa20{z!i`rpR4Xit+#+5`_`pf?&+{k;mp+IN5l$D&t+A^)AOKx|?qYDksif z2~X90d+9fqzOnqx<(WWJHqeyzHQn)7jve9w&G`+>TUm;{awXK>NY8LW&iM@;lk)<8 zgog(by)LBEE`5BXxbqd;R~%n)e#LDWXSwKkb)RlD60w4LyCwX1d5cY-#2Esi9G5~WpfzgPa0kj@sFx?-)vJC323ic_n!C;sN zj(`~;daUQP+?&V)b_GidgV)Ee8#*Wy4DO9#?86F%d4R@A(#AjBOS30m3cs$G8ONIk z0ap7l8-~I(eSlqt!iiIy7w17$MpaN}Ov#8y8xQfLoD0xou=wJtLcia=gy4$nb=$aW zukB>psD0cyjXQ-`(w4NF7sRM--0|X~gucLNStSeuY)-8>#vP-!iH+m#7yS;~xI1Yx z5A7%~FQow`w>W|Jj)52kKE5lIPqddZIf39~z|ZQ%vo=@BN)A$cXR21*s#IleT3dPJ^s||=_1UuZWBX=ZrS9sh3*M}mwIT9$+gn>Wa?e4X zt*kcfs^M1k8s>scU*306J}>Wr#cf=&mf2F9v`_1c8yV=AWC01I&ZskK@3)USfxm4@ z=U$r`hy!Fe6Erc@>$E;YC70>Gju1?D_0$IWno9*JPRXqU6i@ga;HS?3Q+i{AgW+JD zW&o%}0SoeLUIjE*=bsJ8@S3;68Nx9|VT>H^J(UMLc{szl@LV*(8U~F;;0z}}2BMY` zxr)G$uIB;+L4nZlTZgj|g1SU=5}X9RsDyh9x_l93gC&&P(0d39iz^q4G0x$?quDld)!le#U@=zw|RAsx+WHn`xp=Sk}h-k zgrJl5q=UfS#FnHTUEF{u0H$+5j^;|_C}?O}GD-*CE)iJ4O~@jivqy3j`t)FEn)A?; zu86W5sRcCMLov!eUV;E57%mNECuPu+A)~ne<$(nmYc*k~f!R zDjQPn4_DoHZA)fVTXt33tgWPE1qYe3<*AO;3o|u~Q~U4KtpT}JzMX?f*UaM8w-&eF zT-A)I1oLV~lRAzB&c5y3iE?S=2H@Ry3;nc%-0@bN9 zfmS>UBTOa@-SMG;NJ1fOqU=YIa~&c!uK=eUrv%h)6HWd%0#=9!(T{UZSx|hvt+4WmpKj?b@XlBd7?3RO|!`yckESdDA;k0f$VP>C%LVA^ zYZaP}fTz?O1_p-VD+ft>K+}25HVek3Y%DnwSdc3D(7RxA^;KuayDaNnMl8$$`wZ9R zy7XJ8e{lN!s_(~s7(>aK!2T@m`}W@ff4p_ za}8x%xD=QJn*p5CWE>YGmjbdEpfhj2I!$>NT;@?8wIv8rsaL|U#facGkGT04O}3Fe z`=Ve{@VUsqKoIO}5BQ%8K`Ay&Y><#M0RcmXgx~RykO~A* zE?7|Ssc@W@mH;eUaZ^0@P>cYNLUxpfvCCCRu`aHI$XE&EIq~#yLYiZ?54{zs;mOk) z)UdlZ->zJMsd8buF;m%`t!%zk*>%hRsq zJc_2_(${)5mVq6D8W30@qlr7tV2=&U)VNXWNFSvsR3-EUM#pQ z)4?8f0Pn(%XqrSl1sBu7b}RfToEqUxn2Ar2xGgA!6JeHJkXQrkWjJ{J$wMGMA*_Tz z<9SGDERg@5MzR|C7F&U{ebjtAkq^85gC_5EYs@_ zo;w9zTIHyjsuOaMRw_dknwVb04>{T!ljLr$TR131z-c2fP`W}hQ>{lk(a?i}U~CWW zrM7_L?DCpcs}US!!<&ZVYYX_dl_(F)cNkgq!fW z+lSy$o1IbX$yO#2?V}FUf`Yj9JqxV-mJPBS9cKZiIf|vZ>U_%fy4`M@SSJLu#~?-Y z0H}05AOFO@^N3Q1vVlhgLOYYQpN$h>#h3~byktke9F@-xDZ55i0vhQv%Ye?b1iyy& z;#~;-3V%Q{Hb=FGgMWA6(f6PK!&P5>VDgEnMB2YP<6oWiuTJ}R}0dwj=;wsU31 zW+{V6Gl@_9RRrMqR~Lx*f^T%B$V2C zwL0Tnk@bRfb-HV3+P41I(jP4S{_-C#XG*TJ26UXi;??^v-JfsQ%wxy6;Xk2{`zZy8 zl~JsW`qAy-hUa`Trf^qp;=Hm9Rm|DrIcID@$~mL*IcPrsN)o+98fh27Me3isuQ5DN zy2c={2d`i|t);NVcNvkcl^7~cwVB?qP;jPaPBZ)j*Mi#Qce4P>8(=Y}u+t3Nv6zj| zoz~|N^ctVT{?YP&r3uGa2)$8zG+-hN3ZBm;O)%k@>;Ro-8@49Gf@G?Xh337Kx2A|tEfU+Et#>&Bmvgy)Govu0JibiFsL-bb^x`k z^bwB$!h#ns2J0V|Av6v`TQnfm=ixWsB^Z7n7L$4|$n`D3(NQj&-lJ>XuAur%yll=j zOqbGs%8+H4vXh!(r|{Jp+*m9_@l=H3eJ=9IkN*xAQ-h?cAmyS;@i9N@RU55zW63JC zpcNu(TigmM0F)R7Llitufr21T5P(~u%5wqZv`o(7(QiVdFp%4YkS`Dz302$mVD%WHy*UWn9Ua76T z3S}IeIGD1h>>rj@Pd+jJ=)|Kb`yGGTs}Edy;L0;oy_ZkEcJl3quO0o);kOQ7-;(h^ zko7;1c0Eu?wi1YAFt-;GE7@uWLDL4DiNxw^tDLR@8GyG2AMkbXlfGFgzR_ z1dUH@qktaW-RG11Pyj%Nz|bxe6^utAe$)(#5(3xrz4A~Z7$G|PJf~(z0Y*U>6o9e~ z!cZasI+n;Dst+KlCNWlvV@_2Nr}Pv&O5gARLF-(Yu zi$!4(5+f714-;gk#yvs`c4m4&h?B|{>~KH$i9up_2Ex()Vd&wJKS*&2@QgDelKoWp zELx0q<=Yz^loO|7&EMMfA`8VB1RKo&e}|OV1%!b&tf*jzB+(NA1Po{bWyn#9RM&>AcC4pra6JlH zflZ+{esW}_X%9M;Q6B`NG>C&LgCsPiS|31nEeKsw9ITQ`2&Khgnj!a66SRx4 z6#c$Sz!wsB`!v1_FTt1J3)r5YcZby7p?H%{1lI_Z<96(^#E(TzeVQ?go@{K1kjU$#RNMC?KZFISt09)y| z3Uf7Z3>sBy*>DtcL6!Cv1U1WGWB_pj(S1;?Lpno!^oc!ak`@r%$I=4Q8|c!4hcszH z((&tF6OJ|6b(oo=>&uLmK30Ygas|8TxrMzUxx-bLDplwp8!m|EM;trrKe5+q5^083 zRAWuF-~?C|#x=Cy(L5$h6@o`2%K@j<8B;{80Ot+1xP)|?Si!Xr>@b2qFRM-MnXH-d zSEl{Tm?^)IY3#^0cHrknZd=*H$p#{_(!Trfe|61t%^U09Tqk}ZyyIVnbmD*3tL4cc ztHq@ZpgaLohbcxDP`JzF_RDnR6$CklayCws30fnXlPk@)MEM0g`EU5di8KeDz1db; z{%YN&I<7khca|*ucGEYT-e`HVW!8-v{DfNdQwk6(rC6zFZ1-%L%|{ku?%K&G`D>=U za&qJNGbzU%Zy@VkLig%!gOuJq-Z{~UyZ-XAgM}m+bvu3T?nUr(B9Ncm6CR2r!enk3 zRB2=*vk6m7R!}Rt&`+nHTgjA1SZWEvAWwnv+j~V_Ft)vtf&q zSOk(ApA8&^N@lOR>0c$-k+iFU`(~uP`MGr`;>{ONJh$WI+7{DFqtWKBA`_qa(UMUh zK8K*hh*IX&I?Ru}SSOLv$j~5+dNhgSQodQbaB4{m9%8b zn}AH?dErIqKkqaFZ(zgimkb+L?*;V}I)~0~2lbNz3~f_LUvLBy=>q*=e&$icjIuwW zvRj6E#NBBCK7=~h?qCzms3-6q2{c_LrTO4aW%W#;3ZSE;6egpS3nmV{dic`e@y8|} zo06v6rZ-M+eDl<|qu-2XR)n%ELYcDAtkd+q5!Aq@iH54HNA8CW2D-nCRnXwsS*^#6 zX2JX?@{a4Rd>!=*QAHmS6~)xAcy-&QZL+^XApvu^8;&cAQ}{>2|&%+&44 z*6jh{4HrGA>{sk$v_o4YmV_2N3o`!5$FGOU>;EW0s!5xHxk6!?%6lIMIF-jLm3&JZJj2p-jqCPN_ zKur*jcMhiPq|%Whm`_NHr-Mk<3W5axD3Wim+%3;%%_~qV&Q&o}MFD4OV1@`aY6S@` z5p0{7C!_g9TFR>NSj_0W8u+Lb5&sy;3Z75TO zAj)}RHGO(hIbADE#w^`S{lZIG07uq^5QH3QeHIgiNMB|~d9W}>Di^}bnly*%!e*l( zWfk5tVN6*Dfo~Nw`8YShBO7HOMVC%;Ji^hWBz# z7)Gn~mS(3~Le=dev+S33T-I->wDL9oiio=)VWK` zQ_I!gA6BeN*FT=Acp_WzMB4YntjhyCAp4u%x9xAa-+unB;pwt$-8zEhH9uPQ!$ywG zAAD3vbaUhDYrnSk^19d7O+S0XoAy7H@jsOHKa_So#5n7d@%ZqPgU3;~i4U zHHOf;3wYTS*A(SqxVk?Rxa*COoGlu}cSMdSDGMveF><#iu@J*%Rne}(oAw~rRRY%z zu9Ao?+L|DTAuNE%P`fDzE%i-W&Ux(H9%QvR)q~y^Dj-mBTrsBXctZr!)LcF-eufB| z*(}ue#)|2(3ro(zMjvMNiagLUe%ZTt@aQlt0IgLbJuB`HXGPOK`;`66PFju#wg~ zon~Kmw_a<=>hlsELaRKV&25#m#_E~qucLe95Uk8-m1uRQ6~ZZt*Ji7h%X~FC2NeU` zqlm?J1p2BSfXm9a5P)HNn&J;oaFuSTrml?47=;l6=G_!IA67bJTy@h3%{hV0yg+8O z3Y52ySRzE$fe1Kp#48(Td{vXr-gqJ1`tEnuB$i)iVi|FF669TglHP@x%-<4iYc3tko(>PvT+%ajhQ7K zbthpLcJjVakHZGk$7AM`)POVzT@1(_6+-^&HQ~}yrRmt?P(P4tS zr?o-+Ct-u(Xaq)4s`QvO1GKt?DHwBJd1J0mSA{><)EA49fVU^C&=-EGvHh{wZrnSW z6y+tkc!Q#Y1{wPBIWjmYW+zQQQ+)}DG9v>ah02;RToC*TCM4Pt!PY;vOvo$xk(OsP zwNz^(!wh5tkW05s23K>S$YX2-X2FIk78KhEN$m#C2sl&|$g5fDtFb+}pEvfZo7G5^ z0?R(NkxXerWD6)qqUt=9RhO9Z%a{TnV-Mhq*H+FMmtjGSW!T~q7WH{*k#;KOJi<1f z_QJ|hLH-i+9VdYl4FO$Zt(9P{iE1dnhKFy`Y8yjD)$KIfDwY>pa22%RDrmt~c*geA zf(wjqnbt$>2{0$?~23RA=$C~BwNiV2cNCEQJ%|z8gM|cGLkNW!+ zxu14AF%$ri2fBnzfWX|xg$g*tGYt@(CQFN#cP=V97tHn&x$>il*br0eq_)LQajnzy z(^4T|YMPNGi&OF--vPUKH?LCVSMa3Bbo6&Y>DvXP!ol!)KyEGvQh64Oo*h(u> z^7zt;r4VMjobJc%x50otdD-`xkBs3yzU_xh+>YDEa3-+iR$%qb!0L44kxbyRY~Zo9 zPyL^DQey0!!2GRTS!|k{@d~WnVY0sYihFW+vVTg+RMuxJ>#zCJ{fq$BD4E^yMjgqQfjVA{j*S*^l% zK_CrcX~+QbfN+Ci(;5LbZE*7le_m_(tDD^6d;|Ura^9X;Y(U0NeOhqZMKFpNAW^N>1!!D; zW;hymLFEr)*SLe^OTrI9xEmR%c8a21n3+0U#DWwG6QR82iLGuXRjVmFL#V~s@a0?t zj4mwzLod+}u?u7l6}H881rmnRs2{Ms;`3R{`)Pn(aIZng!7Y6FFl0h1&u_ zFKH#I{59Dx50mu-h&h&SvZ$J^f)X*#1Y{C70qO%XInDD^c%z#Huif|DsZCA!zNB6e zvXVUR1RX3SxmsTq=ds#^*$(Khg9*rzqOo&kF+eQZ7wI1cy-Q`ZvoS(@_X|A68$$-C zD%i`R*;FAfYr;L`yN2i`oiysEP9ot0XWXrJtG45S^m}Kx$B-GA?SSBB|0GfOg(c zNrnL6FPYFKV?gEi5SX?Yu+m&@nDPOh{w+X+x-0IZtp!F(%ddHfPFQ}!&0jNtWoh5C zyl)K?wAV?=$3a{{DD8Z)!6<|_k&XsCAmDEkF$Q6^={JPcw!9f)e2a-Nv=~bicb8(S z1yT3vWi83fXTmJfNJzqt-(0WwiwUA*@_C^n-^E8<*!Sdw-iii9y{tlb;&9oV#69XU zmE^IO1YMmAdy(r*Ew^yR*o*8YU_G%m=~5~aq#jVOq@|BW9nkTWXisS)i@DvSj-;b_ zKU!OW9;%r;pW=C##-iHrwq?}KbplQ24mV(0=o)zqvYd**Hvm92K>{qaUO>92ZZnw& zL2U7apDMr;G`+B%P=&PMD|_U`Ik1BH6-_jhX85TV2m@ozLtR3xx+xQGV2hQ&XR7lo z-7H@RsrL*>^MoetrfF_U3j70TpiG$UC#lveCT=AK(Y;?#Ijv;YziqiD2=o{>P+fLQa$AitN(EN;^)WEA^Z zg>7uvzyDZ^ACzu*NN`@HDN}|iARB*SaMX=h&PBo(<#D=6@JpEbdxh;0gVC4iF3Sr@ z3Ls4XurFCU&k}<;u`2422w6cHJ2pd7YPRyv@puX5Z5)T?fIFMLAJ#=_@3PyKRaYLH zemJ}O{u?cs>b=?Oz3uJAqs^dwn66v3t0vl1nTm;G$h5uizYN;kx;yBlWc5H?))++Q6Lu3vF{Qs%a^9{bnvJs z1iUpXGxJDW2x^kF@?ic8ym5>Mb1NdM?5Dz3RyXDQUfK2Inda@;=I!Zv>;H`>tUS_> zsckv;xrmfFMdq#gMI<+U?(RomCA-ZKvAB^=A%un_u+Sc;M|h(qV5CZd)85%WwtAq2 zt%^9gLfW2$oCoSMyav*Od*_c(C8IS@j+TQ+qWl{?`vP^$GDO6Vi+$q{PCR(aPo`kl zAMJ0>`kT|PW+AYGVD5QSyNP$_c7GX>*WvlxgeB;SdRg0N?vtYsOdCBr{Vd|A7RShH z71u=6MjcC^qS*g2R9JdzDO zlJ=?pB-nYB1UvBxWcIBs7f{*@cOLq8&O>8mJ*eRP$LM4_3{}Y3Jpx*Sc=igl^V^GBq2rH5<}_ zf`8uz3?e(W(}s_T?nmJvLYL0XJ%|L(URkr&_U_7#a_0wSc7&e<5}_yA=!O)iq{uM> z8(qjYjW_38bVfyub@B~`v$l4S7o?jY_<@i^IGooPl}*q}2Ifr?zU@dqslYb7d#ctW8fx@WqF z{S+i2UWCyol<^6rxrs>~&_FwPk}ilh^MLY63e^+7s6na}lO0ct;Y^@58>qh(XuTO|O|N@06F8a;98LSwe;UYRJdgw)U#hCLePi`b z=kM5eI&+>Lh)$FXCV-+Fa_`3A%ul_5$FwW3MTHWFymL|9i8#!c5pyHv;g}aOAIC}% zE9ICUu`-U8BUZt&0AiIKTY%WYejj$+JESVruGJw`Ll_Bi@C;gkzFcS`AuZf5wp-L( zb%3+g^$FmRExy0Nxi@H>JG9+ysdfbUj-dU}O*@iawVX=Qgp;4Lq<6#*0JrE{E~zf* z`Ihafv)5sVs%v8P+$q5EE*|-KKkxNn=2j4HY?c!aHk}$C3`f^N=PHo^tBF*!khamz zfaVC9qPJ}dp4lygrkg`;!Na>-gKZl&26tabkedzomurD*oyTG9qVlo$?u|f6LYr^; zBIjX!L+WJkXfTUC4277;>OcfB_D4rkN#*5FQ>Q;UU*vOc&;yiBT^h8>OHaB9!8jbuFmVeIqXk>TJab|bUd6*)H5jjAS1Be`>$T377r^w@o?4!s& zL^>(biO91Qd3HD3r;m8rxC=%+q9=Y#_;AD-YU@*o@`Up?ci%uPoKQ~CJRvF_iaMr# z{{!N12Ta|UbJ13_oKI_q@+3X;h@UwZ^u&oGI=cl-CO`*;F%mntl>dSEUZ-`tfqBD^ z%53E@$QVB~acFGcOx5DFzah0bwRtK5eeuG&bV+@xCRH;f&HO#YXBU)^Nyuz1Hm6V8 zUm6)3nF%aPou4VGn5@3EEVb5lJ?QiV6{9tM?EIcO@my)UE%#sz@71VmIIN4av6AF zWKnaub-FsUurVFjEdH;-YZpg-n+4~nV*zv};R?nVLF!i%3sLCoh}fdX706gGV8+AA zSdcc<2n|9gcwFqa?ALx ziCt;eVy^5+-4~jlJ8>?wcHPN~8(T-)o7cBo+|aslv}JX!0u~a3=0}^I#tdM8P>HOzCpv?1Qo^-V3{O2qK7p(=MHuBVhv>1fSNP*z%}y)N6uj?jiEc zL|s;JndxscSvTs#p3a)2Zw@qSfu}&dzT%R=q*pQ+Eq}hcVAHs(xGyS`Y}RLPf%z9o zcEjSxHReN&Jd5?d01oktmExW^e-CMWqn@M(7$7uSlBm=Z+olZ?)%@LLiMgz?g(it< z$+sL*$yG~_y=0$QpIBtb170R!ii_I3S8CRDkCtMb2{rSD{j^K9IB-s>xn!g*1y1pY zH-IAFqY}69o+SjMm{?FlfY9v)4Sa@B3JBBa8O^P!YLv;lA7Iqk8|#k}s^KK0zMu`4 zz&;7+nZPK4xIP|-G3Nl>QDI9y{CP9nCqqv~hJ&d%S%eB02>AlYqhWIIN_JRuUVs!k z7e&rJ3djo}8M+O*EE0-Lm{wBt^-qJaXCu(=?o)}xQ2YAzw3lD}i0i-3ojVs2_p#Y( zAQ5Y)AEc|H%~z_qq_B{M3%TGSYPR4O;O{kpCiVx1VDYZDE!YeJa3m%HiL#L)eGkNF z|E|Doz?xCW3*vITh0B0ul}(OKS>QMY-tI3 zClf=m>;<;w4b8BuLVD5Lr%*7^JIim!gBzY#&mehS1Un zdwX}1s~qFK?rvafZnkRgz$8k0@G%9x8`&ETO)Dbz)lF_Z-7v{$-UvLezGw!2FxV#Z zR|w+OjWi%a$j_V5nh`t324HY3)}J_K%0~m6?ZFNS)@$gr?rs3io!WhMKk16m3$^ZzQDlK-a56f9`h@JY)G`ykII1 zjU;zXULD*cL(Ln(u^qv^LP3mqB2>QgVs|&(zK4cl#P!PY=jwreu&6_(I@O<~#d407 zEGnf)c|aqpm(S_7TICICXsZvZl(*yERA9twDhZvXYe`sNj7G`QJ?3{n@bxs@1PH|1 zSHTlabM8)31(RkqtXB3O^FBsP5AFd85D2IFI0XTu@er7NRM0SJ3{MPe(x`hTn|`eV zVqWUNNUKipDQxYfOoIm>&*uW2KOc#p_qPFPFoXf1>^&okE&T**+2&FM+kejql6 z?$n!DB2X0Kca>j7fKym_ID}s3D&467 zITcY!C2Z`>mB1Iv0Q@HOo)SBYme9Mb5F)m<#c$B~a0RHbq5@nMs)gb~kSjsUg#-MY zN32EV5^{)x!?U5Qw98;P%Iiug!^`gzdAJP`aOq!wnRZ<^(2xzZjy(*0(B#p{XQy`G zs&2el-Ka`n*sJK+L2NuHp1pp?x8T+COXbk@_*P|o#MIw$mEUqz-*i<^o|;N#Yg^N` z8?QTV)jV*s=7CJj_H51ejB7{MwIl7?F@xRk&6k?5Y@KQmUj8$sjoH%1bm_Wl)nj|^ zc+1CLm|3uRYJGOWeJRf!Z#8sOGj+lAs%_c2`_py1ZtPB#-&u%51|06EAwZxo<+<%& ze9PZ()88BoHU0uEpe!;vR=_Ki$DEH>>?WL6N%X&FHRA)yNZA4e}8IK<7}vLy86g zBfItAEF6e{tOKNDpeHmnoRCOBorRDlQ4NX86QoM$F;SWVU*JTg4k0}2ZQX!cS9 zN)Rv}$c3%lp(Kf^IpKT(6N$l9An|mx3F!SyWJpa%2!>EYzKW*TxTKD+b!pXBT7odXbDFx(d1UD@Wd#UQg_6X_(HUc4E1f5)Dl8e9~be(>U0O$ zoFG+lr+U#;VZskW45|6RdRb_-PEGX>t9=+ z^4@W|Q;S|aG}dv)TZS_R+!ZqwHB%*-idDDDn{JjjU9B96XbfOl1vgRX38oio2CwY`_MNJS$b0p z!h?Ic&#@Pyr2=~~S}G7*PO;?_tD>O1BDH(g2k93f+GR84wNnenzhHFk@?(4f} zK%hxFZ9x@hSSlS~{)i2y#ZaE=WtC7viVX=kB+V`};Duv8x8zoHDMv1zq#LOm)>Njv zEk+h3ji7~f2Cc!I6Q;gSWjQ$#nZNcU*uG(OGy!L%BH*iqt82zSd9ZCDp$nL% z?(U6Swy0LT^oEd}Gg`{Oh5|s5liXYg&Q;%5Y;MdOLh&N0&%nsSmke{j!N-srTM%^YuwBkLCx8xu>P{)Q8+s!jQ1vn=g;n;4yZ; zQMgl3ed{x1*48#xjZ7`L$EvkqTg-m)r3TeDDgh1mhWWDRdUDpsFcUQmlz^PVuo^73 z>hMyPBVeA!gIk#4rAfO1BLv1?4&n?y&Pb(VNWP`ohD*Wz0c^O06jBfpM@9nLaD+rr zBUQpFCuWbjx_9jij(A#w{Uj*^t7aQnVn{)7J%|(=)C6B9=m&^K2G_(HDvu!!tuABf z7O%3D?lFR1MlmR%ZORG?RwAJDI@uE+3GQj^aS4`@oK$EPRT_}=AwtT3iDY0JAF|tg z6~wAlzqTyB0^HgLaBDbd;wVgko_Xz=n>b}c{I5LxqoX&fzW>Y*pGmJgjQ{ta65r}k z6#nHi{sogyT-u((U%GDR^`{WvpFFswwtwg?O|`vv_LZ}fwNq;@ue|9EroF+LKxN8z z#|xBecemn4dco?+tylLV{SXnwOf zv!EWov*iu9%I~{be&4lC*X^0|joI>z*W0q?TgLWNb@q&dQ(eRq(2uzQfxYi@N~i)n0i}dF zUU1)e-Za}!4#t_7W7RAlx}crM1}_Ql{RVHaLpW^_c>sKg<1TQtf_icrEdyRDs>n5N zmDA!iddI|bsGQE>@cGE#@SwIz!0~9gbA3#&Scj~gutS(#qtOzkvBcU|@qo&Mvd5HOGVMgkZlEWaESW;8m%YFlYAEFfqR%g=Sns{mDkr z%wifFURz!Zo@8=kUDViC?f36=XWrW-~2NF(38rcF03ui5uZ&&W zZGb}~&ou57URbim_w@ux`?yt>d$oC!A0G_}q&Zo&U-xoyFUpV+($7XFlipEyg(!380h zb?P}$o`MH;DeF+#T%~pL3K?rPo}tO@)Z{!9%3VWkqrW>|Sj#V-sR?Fl+ES(P%~@9a>VuaaoOPHgZ0L!6pKz?!ws^_6 z%f4CmM#Y;Ivy1T3Pw4hfDfo%Ag1qk`pd;JFX&)ob6X({NW~7crPNRNiVWM#xWO2k{ z@^3t^GfMNE#C)`mtlUF~i!fcwxQ_^Rrg{ZYyrO4H4sW^sk~rG-W$+D8h(~HSJ)8 z@J+`hYdo1CWLY&&sx$VeL^48*+8MF0h+T%#G4J4^HV`MNI+No!$w9snkx0S@M5|HN z!Yvn-E#!)MXihJSB2g9I2V}@0PnMIhQ?R)W1U*l{;%uv?BLsUV!Nv(mXAv}Q`L~IYDkwge2Bw7wv3NV zjHG>wKfYa7b7ds$uP0X^OAUd`S+W!_UKyS`emVJCQYdZGWvj*i$G0mNUv0-}o1n%^ z@R}CPR4qvz(f(k*S+W!mb+!aq<2&AlTE4V;tL;}Sw%UGk!ET511K-k)HI5G&>=a*9 z)v?R{!2=G8@3d2VmkaU#h?n>>*?PKgi|@{ zP1EGWsiI1MJm)!cj=oJ8jYchi4{xx7G}5jtfZE06F4Ag>|B~sPT`S;BI)+GP20%%4 zRJaNQ-7z$z9x^02nY`sjIM~hBa(!5w7Y5|+F4Yi7SDTQ5D|cvjx4L{A)dg(y%k^oJ zm_}%08sn?#HD~#7>VkvXqy4Qx(m|MH6MQsLt2lIMm0*z$;^>MP?D5HmA0Q31H2NV; zLc>llIvRnRi9wCr*GDE4gsjDOd_Y^Z35_6oVeKPM41s#6ogCA*Q_Dia0Ls7$m=4?^ zvQboqNM#ZXX-x_?2Ak(;4kf)f+8Vq#x~g6+qgZmTA26(s$PRJ6BX*N6YZl;=X4{xAff>>6BvTFoU+LZ zERG3U!^;`bCb}XBFkFy6?7=D#!I(LO-k!|tH0Vt3JCz*>%+Q&X8lrS%7anG4g^_bp ztgvRB#7alRl}>`{!`JPKRWoIWe&TclKolZ?!l0y7_%i1WY*T$x(Q7UcK^g^wGvDB5 zJ#K=9w4&(q^WC+#^C;NQA@JP7fQ))cH%Oy8&{^aPra8RFYPdenr0ARY+_Z>>G+6W? z^%VhPP1r=cLXcokA(Q?8LLIe?JBrRsQg`qLZ~BANH5q?X*58zNH8CA%0w_dZar6Hb zB4!dfNxOPbUf$EvKa3M+i<^vo7xjM^A8`SgIY&CgAn2!#B*OiIyioZ<*y)@GPl%4O>zbC*<5qb2y|IfEF+#|@KT2U}y1qd_0yxNAsTicK3O$x@>t zYt)}~yttI}U~U8E(f(;#69t#m*#Zb3zp9-+Bu)$s??;1mJDfOqNoVypW-{~#oHv{07^8R6GO*Gtz$}Fq##a%>!0K~*Sx8~ji})a z8u7|H;JtxZY$!z9Y;x&j%06EJWlPzs1z9|^;;5W~2%SB}$wo(a0P*FIvmsPR6@@|! z=*8;QRUEQIX~b1LC623#oK?@OQq^YcpOr+OszOjlf~WlYGbxw!3t)_crb%Y`2$QwAu@17E!HpRJVLqGQYN;z?8lN+4p8vNl#-Md zxd0DC7lx~gha$H?KmlI=U2MRa^Thi4$kSpOKk5?1cn*jMCt$F`Bj-#E4l#+U^$mRs zVUWJpnO|0(K%t*t;lydHy}HA`)#eYRhR4@VtR35P8;7w}jXyK-3^WF{%ceb<+BIX3 z&D5=!u6-krcGb+3SB&ldux|NO-y7v`LYH6WUdTbJY^JhyYT30wX7RR60ZZX5;>J<9?X2z52+dMW zmzr!D7=4i88qO*cKwN^`Gx~rJ@&kuyoY4a&Iq)iStf7}f)5jGlalbd z);0GyO7JX6j&u;DONm&R#5q9bVgg0OLmD*FGCK;q!LlcH-@qK(rHh`A#(u=}pjN{N z3Os-5$bh@9c@uQZYoa~zq3zf|ZGzuB5=uUYJjl=E6w1x?2H<^y&l*(I5X8p~Ztr|h zoQ_m87B&~GH?)e5#vysF@(5NLbPc?#@EEO82Dy(@jF=SbS+cY|x#7xFND`vu`5h!v zEzRz;)h&Vfu5c&2n8ZhmQ?A?oid203{)zi1FMxIj#F|-HlR8L$GYhLzd+zxBua;ga zo!p%9)n$EkY5u?CrL%V23uhR_y?yjr)pwqG>zV5%Hya;FH$DJ3H+gV!`*h3qdapOU zbLzcQnfk4ns%@FFZOASU@lqwTCCGy_60pESn`FolDyDaDgru4|k2rjCq|tbsjYvi( z+Vski0s4lBC#KY!sYfD}o%r1SGXxM_U;{DSK$}Gu1)Hf12i#Pe;VO2Hn|KqmwAm>6 zwaTSImm0Qvoo1R3Rk9^W4x?W1M2q7NX-hM03?@)vrfu~nkV#wX0cTeesM?dz00_$# zb>V^x(0sM%9V(nyv2d5?ZGP!$hDx+M2zwZ`5ePPG{34b#%aO5}R})#NyLssahA<># z69cBM=5=_bNeovLgd3a)j&Z>b0Kx$#fH0yRTwE2A76VEt!vg?YI5U;n1W+=RPr*Z7 zn1r+8R4Sn)35!`azq){q5cM+GM}<;(RpqBhiZ*WyZP}9KN@?yFG$IB5wKf|!t$-{v zq;7`EOOvR%Nt{G))0@aw$Zw9o83no*@(g(50A1TBx_~sUG1#%_!-73&Las?_askt6 zdkNI%+y`V}6(vKbFdjl`qUsLd-aj(LUdIxr(2D+3!EQXccZZFJ79~lPT4-Cec@vkv z%ZYiNbJ6nTP0}$%c^Uv|WVJd9gM^}>XBSfgyW)_LCIfd7Csj5hJ#>b&X)@>LF3)+f zx0UqeITyBOoHDS+EQEInDESQDQ|Lq)g}8Hzb0&h1oR`v#6h{d@oE{1ZE1+G)@tFk5=Sd;dx!M@!qo2P0s{$SQ09NT-_ zUpBGzO5;>D{^V)p+5_Ji&8&bot*zO`TW{3gi2U}t%;JYL{)1Wn!L&;~2oUA#7j+w5 zs<>6Qb;56Tr{lOycAiFM#U*3c0m*=IkH{pxaL+;aB&Y1fF<7owT%A5O?nb;s@_@|n z=KNg;(EK4jA_v_`aj1d*0529lH;C$Um;6^jQiD*t<{+gkFiWQ{bM6G4$&>SS(Lv`5 z!bap2#|YR2VXyQdK2mL{Tu4j$B8^csQjXcs_jKSnbR)D6rXlSUrv;kCOH|>XPo)(Z zb;^0WNRm>d#;2&pRpuIV%2&)49=$X=bu0s8ra*n#SI>CvNK2`5AL^;BrJ$99EfnlW zkPDDkAs7{ky|F0xDSE`V-PB16mCN?%oRzQ$=%ITQT%@vl@WPnk4{XlF@v$RgM_xQK zQ|g~sGj?d~(2Iv=eRlWiDLz_wHR%eBfyeG{n5v??{Jdx&il;(Hs#Nifp)<^0<8`(8 zzeUvwcG-}#4Oih25IB&{VfM&2O7>J{4K3xYUgXm9J(n3bT79`&t*l_=>jJ(*BeaXO z$|%`wKF8>imv^UlitSDzLt$E5;pc(4d36QD;LTM(@F1SGb9x}?Bh{&P+>2_vsvUvE zV6&Zk^S5^sW1fJY<#>o!XwL=cZjS-S=HDd)M$p&h6MP_M;9OKsv*BI{;2`qV&*rfl z>;oVF{79<-P@`5{x7gxKcwLnngke2N=Z65L2+c4YL9#(D$u9XdBO+qy3|T;NeT+vk zsHk>7V7<1R7~Q3@BHi6^rl0`*YkkICNfZ{!j#I&DYI595y!MM}=dG*bG!09^zkxVxK5*3+xKrLwr7t@z!~H?Uln&o-p|idf1R zywTBi($I;UR88UWl(-lZX*kCKs5Ttxz5*g_ySr5i9qkpJqAC_aJOWIpj{h-dsE?^Y z?mqnhF5%l7j|9`N_v9SiV{wgcn40%6fWrm_rMzAs3BxIKxh9kWOLdHho54Mgap|NTkTdy5RZz6fj_8JzE zh?$^*{c8ir`qju15-O%U{{ZoKoWh)S9Pyk-OjeWJSYe~p2F+C|&ueUS-7ygBg)P}G zL;#nl`*;1Z3nVOYGT_N2%5c2ojOSjNVcZq5Ec+8frcwGGd_JteIzrW_I7pJyQ zZJ$1SE&SGn%+j{((zfecGlBMOpj}VM-2;oz1IR!eEJrdaK3(n|;AAw@Qb1}p=tj38Z#M)W(Pt{?4o*vgjTSRi;Om}%OQu72>!qmz%`*gR9Y z2zF;>*xQfbrxc9soh{SG^uwj~Z*RTUc>P$qp*_>ko^5Equ{X1{BfGR?){Qhjp(*lH z3dZ)#mfFgekg>)S_77_tr_Wq};Qjt|?U79Fk!{LcsyJ2I4Nr? z#?&Kebom^rOpEAceD2aV*ROaBbuY{>6ml<+=E0C04SyFOae;er%+0+RC4^QVl_njI z+j<(+r|~$(x98+{Tt)dE_dNWL=ZJC!eNq5&zD~VG&O$Y%P11I4qbjh9lXABk9MFWtJY#E~!sgxE}lSo!@ zzy#Hl^aN2@h!&nRF^A63!lN96G!5RiR6`9M)H^(A;3t}3j@VoLTnVEWB%NA2hW?xD zNLl@C36j=hZv`}nC=7?9^>ZUY2y?r!LUc9@M18P>j@6(ZBP&+eK^Q4t_HH!@Mi^%l zgDVi};4LMBAiM5UPo020`4^`zUO$*wv@5%4*ZaOq)xm7l!ITf%KT_wXVC1(l>tC66tz__E zn&E^(8Ew9Wh(H8MoNt4fzQ8!s3%78Lx}ysvliMB1Vca>>=Yj~(Wj%V_Op|SdpO5^( z4utZcT!Z@=b1F93a!u53g)<$j5!VsrBz5B|1SXt@z7b?JiQ2JPO+Gdh8`NS2}1@K+V-v z{ACH?h-uNP>AFnqec9UkNGJ@=@q9r_n(>vUq?9zddHnPQ+)ve!YYzByTC^69TFWZN z4zkwzw>=#JhpDTH9H7tLAOfptsCo1Vs*RkP)8e1F39Kt<0s(P&Q3lB#63dWQnWiqw z3qzRsg*qzFO6P56)n#TET9W%wHN$Yjj0wjbbfNR9NM#(o-%PzvS}Qn3!Eq~Yn}>^BD({@wnReCv>>cqicLaN{!!gn5hT$j`i;2l%6(P&SY$W*z zq(E%=Pdm9tYNU#&D1CRR#V!;;*2!0)wMJyDyo&a0r}ogS;B9)aglnH@hpk&-YiJ_! zunNFtc6Lm0aMhY=k|2@TCq~H%I z_yz?86*c?9ONi&}vYBI}nZ>i<5t_w6KoSO`KCH^CRT=N{te4L_SvrGlPsi}5OdgxK znD#B1b@}*MibYfI{P{LGfy#rsrqJOo!SNLf$Uphg*OsPs!xXtRC4bhpR( zJF7by93KSjhTI zH9?eutFT6J<>cgLM&L@lumqfT+q1T4wKlD>L}=bvpS!f@D9^AYwRDgupmxw8oB9A` zgL7n-jzq><&`EG+g)~J8pfh~R#bQZ%+*}U_J@wFF@vd5OFrjZZBX2x-h)1fqB@miw zv}DQ~P+q4uNHsk6i8XF%N#!y~X;=S0J z!~U{^JMg9)Uq@S3jrVs6eFN_~lVB(lf&Q2?R92u@Ag=uet*+M*!2W;@3gA?f_K~1k zJ+bq$lsBl!Er`S!MRw_(l&cg-1}ED?&<&eiDOb^|eA;`!J6Bj_K`urt}Z&xp!+5`OOpzwumV#lh@~gOmO{i|TJJ+I(}-=IcjqtbX5} zS+qa9Xg?P9f<5+`rE6|2-F9>7wj0hHkP__9F5R83-hHR4E_LYRkE(2yD`@R6$Okhx zryQ=~aF5pgM}C~-hKFwU0VjePUm0qNO_t>Z7=k$V`j(&fLmj=AfL&$Azd7sQoOW%F z*Q0$e1v+-xzE;_>&i28&(vEiL2M^dO+*!K2)cN}*c7!HifUXhyFpFX9ciiIG7q$|m z0j9m|>Rva3B18{a89zGf@HPMJzn+SF27$^++7;7DvBG4-42HmK+F>caVAKuX z&jk@Fs{JlioiB9@O{Ky9n%u&)q@Jq$s%?K=zy`Fli6iYqGbPxM!$nt^+W?c%R zOJ^dG1n@d1$pkjMM|xpy5blSWUmS|Bp&=@kT7rLVy%KLU7>0*4nTur=u;6_-BZz#2 zD$!W4qLrbR5cs6zguv$7>tm6~94B)KmS>QDaR`-V@eCJgQTG~7{>&c@%8GKX>OU}b zIAl!48d0zH50tQ~ns8@*2b>OE7>o_a>s!pqY%!W0GzIB!TJmV1`@S0h?gF6}iJk@0 z$j?;R7O5&(rs3H11H%G(j(bU+&xC)7#M3A^O!Yn#f?eMdi=p7kEJo)Dga=`*2b4EF z0A(+d)BbFlMZ#Mj`vUCEJDw=ESnf?QH^($c;8-;|&hwxNA~acPQagywLdy^RQ5=3U z0RMR;YQq88>RD}MQVJ_sJ~#riUOg=$Umw%HX|ZQn^f$rC=HZYwQp|-7(~{!>ZQ*|8 zG^!D5^Dq?ZT53|R8^&|)mx1fJNzLb5IMI13K{U8U)T5Zn8NPJe3=Z)>tJXP8E}Poh zgPPx^BQ5rvADslbt_*f~=pBy{Yy(X4Hfe*niC{goUBx1K5dKxd9w+cr6*WBtk8?nV zE*vWxSTeP3dhfM0nLt}M(3W!DsV2Em2@&um%Ts%27S>L#o=osDL1oL*+COaxKoSZd zm=cKvC+HNgn?r)+r1U9@gp_GKwr-3d`52+Rckt}@P-*2YYGw=a(9zAOVmIYiC}SWB zTfQeKKhE@D7S9xkZPa@K;$LJQ|w66M4VvN=q(mYD&?rV@~hMV*2$oE!JpD(_$Jcnaz`;2))&l$50|W- zKAu^!HoIgkO^5aK2a~IB*VRvNp5A=T^_}*&+B0>bY+We5u;9Nels5cB;JCCE+xGB3 z>vg$N1_GWIZ+ki_9Qv@MzO3fu`9!>%Rk9%19LfHQ4JWOm@p<21#7=~N86&%&=>?)3 z<}&=$K`30Q((bI7unQ6dfUveC=*&n~90W-Km-%r%L|Z##2GE-`09+$SrbwjePx`=6 zh-W~l+GY+3=dZyGQ!@h7de6Y?*qRG;U45LQLW~DFdn8v7dost+G4;n^Q1L&N^_KY zr2uzWL4Ge*u6|LRbXZ?rMuEPx3NB(DZ*BTqwah>no-Mde|cKHy+ zH^qk}%6dzrtXQ(C2Wim~^&l-uZURXWE!ToATbH7h%Cf@*LQFYIx^WqJfw1kiP+FpO z8>Uqn25#db+*aw#Zz0x$9A)XL*z>=^7Wt~=>Y44c?Q{Oyk=v2G&(24N ztjJKxH&i$=qJ@4X4*6Fo{E=};)qnn7H)qjlmg>|wrl2x3zm0Sy?AaNn zupyr*Y@FM8cl&(gs1-Sy@*Q2eS3i0N@G$K|7O-5?tj}wjGj}_3P4mrVnnsNL3VSs_ zK$1?jN*h{ssqtQZyF7LD_#jQ#CT`B8U1KcbLwX+Cn$iX2S&4lX_D9z8z- zHTRYBRO>Y71d^p2=2L`?6B&{ZzH<8&`4Fb{`>fd%A5nxq7|+R1`+tDvP@Z{MzLS%I9ue<( znAtwZecX0j%zZ9$kiG8?vgIV99QScEGry0=PH?1Uq@gYO+=tT8w)w~rD{>^|JF@gB zd-UArVcLiM$F0rcrg@!BbK7m2592>>KIRYc1TX0LaA^q3pW{~Kc*=KNnkMa6rmhM; z!(sKQzJ7f%!&A@0Re$GEi2CCNKcjk{DIp*HMP{2mv+}C3^flmrgiKsj5t?{{5hfo` z#N>amzpBGp9`3Pw5vQJS>R;p~LjE%qV0A+in zm0?d?`0VH_%?JA39;9AA?>RJAkv zVufalSw**bA^T)n9o1v|sxN_=M^s1JDd)USpH@CpET>j2-)^uOhi6Zp9v#Q^XFM|t za)bzOHe<6M#^=||&8gWbM#Rz#ZA&fT9+#)DRG!CqwhfZ&DXO7Thu}&yFHqh3J81q0 z9XM@B!t8f@KZATUa%INQ0dXDn1vqNghRKyBn-np*SQTSTBe~hH&0LXOdWB_~KSrWA zIR>dPi*L>CdG<{0lB!g7msPTEV!vHlovK-Dm3B?^;noe_<{w@0Zv8v;Uuv9cob=oE ztuU?fDX5hGQ=};|o{Bty-^_jhn4}R8jF&3LmbY~-n-}!|@()48TiRPXEWE(B%XNKh zd{n>gc}+7fUiT!CVDVq^<;HJ#mraRdVuji!Z}_fz%*XOK@nMFI93=CXKc24_>GKqB z*MG&c*z9}$iJ|M7d#e!c5%S?41k~5n%7I$-Pzd$SH*f}<(Wm$yo7> z47$n(R~nwZkTa`PeDN*RP{D;G7rU>7VA_D>$(SAJ}An6IvA1#ZO0Y z%JHRBikm=LgEx066%E-0<`QjeuEs}@s;#hCSVaSdRWvhMS|;OTZOE)PW&`+R9 zJ_rSe@mG~DPwsjWsQ3xVxh-4wMXAq))IJ$wd!7b^%N_($pOM&YzCw~)fKZ19Tmbsu zFcDQ{l*OM(cBiV=;%8UYy*u#EK;rfJs&!V?y2+3ot9`fYovy@5T&)~iZ^hP624KVr z2X{hcP|33^_W#+XZ|s|^`TD_I2j@5TS{r*)75nkSHO-Z*b)~8`bg?U%6PIx<;p~Ci zms913=gSXU<%dND-scM))9uO?34N*uUnYqpJPFU#j>&zK`=AVn1BE(L&g?3<7E zTe1GT!>N*^)C@YNQ}M?S!oGZQYFsG%YV>BcAP)?1fU#oY8My%SgI%#b720i4Yk zrUNg(GRn7}j!^Yv{8iDJI-BcuXmaAh=6FX;hRu233cMA3D}?PjpZS!qfPBHkkl~KU zvVThq_aerWKiu<~8CVd@mcQa7iEoESy>Iw0R6%pqKkCajj4^8D`@jVJ*L-h>Nat0* zD?q&+1gr91^ki` zPMQ?&uBJn{-uuEBJH(ZBSq@SBQNU#vxy0YY05m^`{vljII8gyBM6_asyMa6$D=a+j z>K@S)b`lZ}$UPtPCn$YMPS<(=da%AJ;UOR|kL_*xapk7js@Y3(!?$tO;DA**kSfU> z=S69`zZ|2N+IipAaK77v|GJ#>F1o&|aGERhWshHQ;~T<~Fm!Tj(`M8DoHg{p+X7y$ zPIk-pp04{>F#9F#C#+-}vOpyhfkYtb!@rZslQWn8;MC1i^DW!0mhJPk-BxY)gnE@Q z@B34hEet)!#!Wd_lw;p%AGa!@{#nGth3cR2ajMxtA^F@nmz}HXa4>e zm0eyL-%IUMBE1Rkm-=ya<$)WYh9W02ct%%@oS5R|#F)>+LsDEKW;vjkt{V#cqP&tb zkWw41LbW&}_M{@+1wUW+SRI=G^T8@@s(z#QgXZo%HQIM-qIXZo%NGO8l6LPZf>UO4U!kbWg0Rrv}K^+4~57#%}XT#H-I1PK9U`!6wZw%2&?>FvwqPx*j$2KJR7q;Q&P=yC- z!vbxbY}-hKE(PN4%QiBb*~rtn$+o!g!aw#u=}CKOCeKhe)P4cZo-x9$3ip!*~rgTjW>-mT)=y7GtIt&!s~=_axW!nVjoQ_QQ0TTWaI4veQUEHp%J4 z#9lh0G&jaC;b4XtVKCR(O0kX~H`3wU{??dG?zejMB;7Er`~?3c@iUD~$~oLMd3DbmRVt)`iOruQ)FoeuOJI5@oj z*pSi!;TKbx(V;hn73=s*&+j(tFq)BE8~ZAH7bG}cx3ygR@E+huDEmc-~N-Ox;T3xE}XKM|q!k?|JOcnkXyuNEsI$B7N+P+n( z?9cYCNfrL`V^uQS*ODsy**@C7%Kte&j{zxsF^I34T8Et}BZ@tmY>KdEluh(rJ1}`R z5uL6}?wyIgSDhTNR&GrBHqHAsS-wpZy6r1fNj@`pZE%s-@%!~?9P&P##8GjIL9O<& zC+*e_C$v(paWnus+T?iQE|gc?xRPj{UY%@9jwRPXIT$w&ydbzM zespRiF_dgeoUp1ptuQtb5wl?UuN|N4z0n`vo2ZOGZIv`yMw4S8hFvEg)EatIs%|sP z3+PR==fo)n6%D%I##Pxp@vUgF5Ze3V&GBTHRl9!X;(J%-THjxNyY2SHJL9*zteuCf zjf1JmK`V0D@#3)sBj^}#9jy@T#!lbDvEz=nMc?UY0CriucLA zCP$|a&zwx57ghB*8Y1U<-ycA|FWwB#Fo|IPW_`|xNZ3BmG1E&}?X$`HkER8cD=zG0bLKCtJJRU!q&~c3WNyp2e zg{oS|kQ9C`)WI=<#28z#%yTlPR6p#EUySd&amX_2oQNcoJXOvacudzkF+5&fXVe7!35Yi~unt2bILaT19jTjv$$oX#S{E%2dow02?!A=~2hS zkPDfzQE?O;YSgjz2atl{O2G`oKE_HXKny$7OBE-NqTba`gsGT`0Jk`XJf%nVEs{B0 z$s8^+k2E_0Vyafema7%xP^(6#l$cfs)~JTeRHj1b{s*CyNJNU1a8)5em#dLPqDqZU zL{P~}W$4yQVmkkq%B86k_SQfX-lqnDzUp}4E>u=I1_M=xAx2i~gorU=9@v8}P>JZW z3h4sfY*qjnt8f?4{dYPBgZ)}C;sl5-*JO-Ci-nvBF=ivc9l#7RQDFH*#dr6D3Y33WwuH{~93VnRu|KAEBba~hwOh|Q@sWCqQ zNsNh848mHhAs(BmOEvV&M|W7!9TR2fYSJfHud~4wn^xKN&GzQ)_sS3IoJk0!hY-P? zn2sUg7}7OU1BtPz!%jc~f?9c{6B0D6!M?yieC)93^Nnp_6&yL(gm55VpVoytG%id@E+z7 zOql@ESK&(G48(SDIj1E*3SUvrX~~bmqp_)QV(U~n=QBS@K#XLe3TGHI6W|uk5KKxX zHIrLz?2MnAk2G45#)+Wg_vjnqd)ak1B$Ok#3+{z0b!@N##9OC21WC4uGmF8D;5iKD zY!Vl{_gIiK6#!(O{emQwGpig4$^$hkK?r&~oTPj<1v1-u3nc=X18H!I!48kUhLo;} zZxttTar(+k+w`Z!GY2ZO@p)L-(7RH#I1mVT7TLln1~Kh`en@w`Ybe4ugjAZr;hgFMrH>K>CAUXw4>)lnM;$TFnZ(d-uIS zhp;q4J5oW35v;B}<`@!=VX)0nNkCS_3Aw2$N|G50JfeqnwEJR!&hywkhX1P@S;w&u z)-Vd{Tkb`U=z6)M5z06qB4UMvOZ!}ok0tiTKP4?Bp+(Cs2@6xAQkg-X!O)OU$yep> zjtPl5=TR@~)AM?>r8m3utROi6LJiynyfuS?i)dkB5h)B(ln_&d5Mzb{NJR_F^Dtza z;tHF#+2s}YLM!wZrfJEP+_F&C$dX%B$%_}M0mk9Bxl%_S#mpRVBH2tNC%4WFMro82 zUZ2( zt-=w?6`}&}n`Q`Bic(##9<)m_v(asCnZBa1&AhT0A-i_Jk3xtI9{$1eg0YzAaBnWF zodvmuVL*w>Ijq&J65?*3^_uWA&0n3mN%+a!d`HA$!fKP%&OUoehd}m6oaoh(q9G zRYSx%%CDVrBE-SU6=2({an2C%b-b*4%u7;=Ak7=teG$^Li@3pP zcH}I~y)X$vS7sgFoYyh?HBq=9R@oB~-b^G%ws^91iwA^buRu@;{*=rKSqS)kCPNDT zAiYM1Mi|G7AS7K7MY^DhbfQ8!5l3@jj&upyvWRqOKQMd0ej-aclpeAz&d^+wiziDu zH6tWIU_R-HQKZ*Fa*@0RA?boB(gjtd6BW{lIGPJ{q)X6FAw5;zI_7s8Pns~rOvx*V2oeXWa&;zWtZG^0EoaVm*dF-?tA zO}vKroO4zXuhk4_(yw+_(o?4jt|#80@J8ZInh}fdcAAN|C?Z;kuTq7z5!VRXRb&V8 zPR$5Ub~~$yuhEPMYPXhnm%`T(e~jtRI_rsVP~jViZ&HPCCcZ`CTZwN|d2T1(t?(Y= zI~4vn@tul>j}d=D;k$_MR``>|pVC#c_UiOu|4kZgulS&vA-?_MlWGa*LpWbczl7tm zO;qWib3lABzbvoj8Sx#2k1y?z_^@u0=MIbSh&P*c izH^zl7sMx3hJtXk!7g8Em#uJKc7qu=5#T@3jQVdf!uCx7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/idtracking.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..488638de3be9adacd113cc78919587bfbca09186 GIT binary patch literal 19549 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 O`!}rRm)o?ndHH|5QVIP4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/lexer.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/lexer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc4b06ff56839c2515215db5f2953d12a2196854 GIT binary patch literal 35624 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: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 BS@Zw^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/nodes.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/nodes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4fb42eaf1d5acd1139df68362189db2c2f79be16 GIT binary patch literal 64489 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/optimizer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0d14e5b3027b195a3283d844754a16fa43459fe GIT binary patch literal 2859 zcmb7G-ESOM6~A|OcDy_5wH;@Toump^)QP)L3~3VtO#~#Vlco?C5u+;0!gM@y*PhMn z-0i)yUfXOXKUl&@0Yxa4D^!Gqq7W1$`dFcghyDdNS_x~UN|AW#3);$!WaWu-X1r@J z^o6@KXYS|u_??ftf6C`g0`1=$Z*gf5@-G~88;s+&w*j9`;*t_^sjK<4q`4_q_fs{! zq*DU@w4bgSC4&;KRR<1E5oy4R;b&^uQWka%aJ?GK!gV*}W?l2>OvP|>>v}1tk?X`A zTqkax8xK>2Jcc)Er9oG_MT$fAUnwDTi=2si=+(ScE?Fo&u2?9TBLWrLLC7k?cNt%< zORkg$lgtiWRuisQSz#fZy?krV^a57*ZHF@@V9pMi7c#Xd8gO!+vx==kWGxt9vi*h~ z@@dn&!X3Mzc$Wop1;`CVh=M~K7}~xcFDggWy2Mdk}pXN^D#-$&7? zTQC)}rjU2QphWRxnY;03Wj14L7wsj^YzE*|xa5EyYR{(`f~hJrn+)2#je8+{5Y{fQ1#gK5(?ui7zR^vBhyq>?1g%8PBORfQ z(o3H5!eUBdR>}-6WP53&5Co9$?9HpMlz*bQROR_qcO@vlDx3!5ugcfG@U_N#`Heac z-h?o^=8I+-BrlbJ=*^dbGyi(scJ9~F>T-C4w_ie zEz?pKJeiX@5EJ9~Y&@Js%tc`PKRptwKa*M5GTRrD7z}Yp7NE09TC_zh=q1f17$UPp z8nZ2Gk*>I3i3bV~GA56~C(2ls7kHs%t&XDHxZq89=T5;6H3DRf?4CNip|>*=+wmh2 z?AYs(Zp#G~8F!la?b8p#eHh-o^NAj$K=wdA{@Kh2QAFWqy0KlA?U zJGrTLZmL5v*|Cl`kRSVG{JHzT_~-b!e~h2oElh0Q{O!$0bK76JxHY-;_JgUdsSm=P z!licM((b7*zkhL;O}5!LI|F3mrO${yG5R@@4$+T|?msn2;Y9oR^BqF-V~1pSq;OB~ zq+o7;e;>6iY~&P{n7>`lTuG6SQ^QxrQXdy6(4rm#C&yqlNztN-IThG7Zds9OS@5p_ zE-B~_TGrbQ+fP>H1RlUrDu<8^0*O+WgOwP@D1U&m!+qbfAc@bwy22Fsegbw}Fp!{A z)Cv#)w)^X7G!0<&6XRIAuv<8B|MgA^ds8nwXe7OFf9Iog+JTD8MhQK>O-7UF34wm!vr8to`=2K% zef@iY7%lGVFKqWe9Yd!V?p?V53d9V(@aSgz`H+89jXVEMhQ=ts_rK)c@Mk#t`4=q3 G_WcJ#Rl_R) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/parser.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/parser.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17a73deec94587207a8204472a58c982c5a8ba9a GIT binary patch literal 59303 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/runtime.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32470afe923603515ed7573c9d51993c53dee442 GIT binary patch literal 50655 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 KVFQX)|NjGwZ1`sY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc b/venv/Lib/site-packages/jinja2/__pycache__/sandbox.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9461091817d93cc95b03cb2e215af2f3a59f4bb8 GIT binary patch literal 18827 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/jinja2/_identifier.py b/venv/Lib/site-packages/jinja2/_identifier.py new file mode 100644 index 0000000..928c150 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/_identifier.py @@ -0,0 +1,6 @@ +import re + +# generated by scripts/generate_identifier_pattern.py +pattern = re.compile( + r"[\w·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఄా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳷-᳹᷀-᷹᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𐴤-𐽆𐴧-𐽐𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑄴𑅅𑅆𑅳𑆀-𑆂𑆳-𑇀𑇉-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌻𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑑞𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑠬-𑠺𑨁-𑨊𑨳-𑨹𑨻-𑨾𑩇𑩑-𑩛𑪊-𑪙𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𑴱-𑴶𑴺𑴼𑴽𑴿-𑵅𑵇𑶊-𑶎𑶐𑶑𑶓-𑶗𑻳-𑻶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯]+" # noqa: B950 +) diff --git a/venv/Lib/site-packages/jinja2/async_utils.py b/venv/Lib/site-packages/jinja2/async_utils.py new file mode 100644 index 0000000..1a4f389 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/async_utils.py @@ -0,0 +1,84 @@ +import inspect +import typing as t +from functools import WRAPPER_ASSIGNMENTS +from functools import wraps + +from .utils import _PassArg +from .utils import pass_eval_context + +V = t.TypeVar("V") + + +def async_variant(normal_func): # type: ignore + def decorator(async_func): # type: ignore + pass_arg = _PassArg.from_obj(normal_func) + need_eval_context = pass_arg is None + + if pass_arg is _PassArg.environment: + + def is_async(args: t.Any) -> bool: + return t.cast(bool, args[0].is_async) + + else: + + def is_async(args: t.Any) -> bool: + return t.cast(bool, args[0].environment.is_async) + + # Take the doc and annotations from the sync function, but the + # name from the async function. Pallets-Sphinx-Themes + # build_function_directive expects __wrapped__ to point to the + # sync function. + async_func_attrs = ("__module__", "__name__", "__qualname__") + normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs)) + + @wraps(normal_func, assigned=normal_func_attrs) + @wraps(async_func, assigned=async_func_attrs, updated=()) + def wrapper(*args, **kwargs): # type: ignore + b = is_async(args) + + if need_eval_context: + args = args[1:] + + if b: + return async_func(*args, **kwargs) + + return normal_func(*args, **kwargs) + + if need_eval_context: + wrapper = pass_eval_context(wrapper) + + wrapper.jinja_async_variant = True + return wrapper + + return decorator + + +_common_primitives = {int, float, bool, str, list, dict, tuple, type(None)} + + +async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V": + # Avoid a costly call to isawaitable + if type(value) in _common_primitives: + return t.cast("V", value) + + if inspect.isawaitable(value): + return await t.cast("t.Awaitable[V]", value) + + return t.cast("V", value) + + +async def auto_aiter( + iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> "t.AsyncIterator[V]": + if hasattr(iterable, "__aiter__"): + async for item in t.cast("t.AsyncIterable[V]", iterable): + yield item + else: + for item in t.cast("t.Iterable[V]", iterable): + yield item + + +async def auto_to_list( + value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> t.List["V"]: + return [x async for x in auto_aiter(value)] diff --git a/venv/Lib/site-packages/jinja2/bccache.py b/venv/Lib/site-packages/jinja2/bccache.py new file mode 100644 index 0000000..d0ddf56 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/bccache.py @@ -0,0 +1,406 @@ +"""The optional bytecode cache system. This is useful if you have very +complex template situations and the compilation of all those templates +slows down your application too much. + +Situations where this is useful are often forking web applications that +are initialized on the first request. +""" +import errno +import fnmatch +import marshal +import os +import pickle +import stat +import sys +import tempfile +import typing as t +from hashlib import sha1 +from io import BytesIO +from types import CodeType + +if t.TYPE_CHECKING: + import typing_extensions as te + from .environment import Environment + + class _MemcachedClient(te.Protocol): + def get(self, key: str) -> bytes: + ... + + def set(self, key: str, value: bytes, timeout: t.Optional[int] = None) -> None: + ... + + +bc_version = 5 +# Magic bytes to identify Jinja bytecode cache files. Contains the +# Python major and minor version to avoid loading incompatible bytecode +# if a project upgrades its Python version. +bc_magic = ( + b"j2" + + pickle.dumps(bc_version, 2) + + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1], 2) +) + + +class Bucket: + """Buckets are used to store the bytecode for one template. It's created + and initialized by the bytecode cache and passed to the loading functions. + + The buckets get an internal checksum from the cache assigned and use this + to automatically reject outdated cache material. Individual bytecode + cache subclasses don't have to care about cache invalidation. + """ + + def __init__(self, environment: "Environment", key: str, checksum: str) -> None: + self.environment = environment + self.key = key + self.checksum = checksum + self.reset() + + def reset(self) -> None: + """Resets the bucket (unloads the bytecode).""" + self.code: t.Optional[CodeType] = None + + def load_bytecode(self, f: t.BinaryIO) -> None: + """Loads bytecode from a file or file like object.""" + # make sure the magic header is correct + magic = f.read(len(bc_magic)) + if magic != bc_magic: + self.reset() + return + # the source code of the file changed, we need to reload + checksum = pickle.load(f) + if self.checksum != checksum: + self.reset() + return + # if marshal_load fails then we need to reload + try: + self.code = marshal.load(f) + except (EOFError, ValueError, TypeError): + self.reset() + return + + def write_bytecode(self, f: t.IO[bytes]) -> None: + """Dump the bytecode into the file or file like object passed.""" + if self.code is None: + raise TypeError("can't write empty bucket") + f.write(bc_magic) + pickle.dump(self.checksum, f, 2) + marshal.dump(self.code, f) + + def bytecode_from_string(self, string: bytes) -> None: + """Load bytecode from bytes.""" + self.load_bytecode(BytesIO(string)) + + def bytecode_to_string(self) -> bytes: + """Return the bytecode as bytes.""" + out = BytesIO() + self.write_bytecode(out) + return out.getvalue() + + +class BytecodeCache: + """To implement your own bytecode cache you have to subclass this class + and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of + these methods are passed a :class:`~jinja2.bccache.Bucket`. + + A very basic bytecode cache that saves the bytecode on the file system:: + + from os import path + + class MyCache(BytecodeCache): + + def __init__(self, directory): + self.directory = directory + + def load_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + if path.exists(filename): + with open(filename, 'rb') as f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + with open(filename, 'wb') as f: + bucket.write_bytecode(f) + + A more advanced version of a filesystem based bytecode cache is part of + Jinja. + """ + + def load_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to load bytecode into a + bucket. If they are not able to find code in the cache for the + bucket, it must not do anything. + """ + raise NotImplementedError() + + def dump_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to write the bytecode + from a bucket back to the cache. If it unable to do so it must not + fail silently but raise an exception. + """ + raise NotImplementedError() + + def clear(self) -> None: + """Clears the cache. This method is not used by Jinja but should be + implemented to allow applications to clear the bytecode cache used + by a particular environment. + """ + + def get_cache_key( + self, name: str, filename: t.Optional[t.Union[str]] = None + ) -> str: + """Returns the unique hash key for this template name.""" + hash = sha1(name.encode("utf-8")) + + if filename is not None: + hash.update(f"|{filename}".encode()) + + return hash.hexdigest() + + def get_source_checksum(self, source: str) -> str: + """Returns a checksum for the source.""" + return sha1(source.encode("utf-8")).hexdigest() + + def get_bucket( + self, + environment: "Environment", + name: str, + filename: t.Optional[str], + source: str, + ) -> Bucket: + """Return a cache bucket for the given template. All arguments are + mandatory but filename may be `None`. + """ + key = self.get_cache_key(name, filename) + checksum = self.get_source_checksum(source) + bucket = Bucket(environment, key, checksum) + self.load_bytecode(bucket) + return bucket + + def set_bucket(self, bucket: Bucket) -> None: + """Put the bucket into the cache.""" + self.dump_bytecode(bucket) + + +class FileSystemBytecodeCache(BytecodeCache): + """A bytecode cache that stores bytecode on the filesystem. It accepts + two arguments: The directory where the cache items are stored and a + pattern string that is used to build the filename. + + If no directory is specified a default cache directory is selected. On + Windows the user's temp directory is used, on UNIX systems a directory + is created for the user in the system temp directory. + + The pattern can be used to have multiple separate caches operate on the + same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + is replaced with the cache key. + + >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') + + This bytecode cache supports clearing of the cache using the clear method. + """ + + def __init__( + self, directory: t.Optional[str] = None, pattern: str = "__jinja2_%s.cache" + ) -> None: + if directory is None: + directory = self._get_default_cache_dir() + self.directory = directory + self.pattern = pattern + + def _get_default_cache_dir(self) -> str: + def _unsafe_dir() -> "te.NoReturn": + raise RuntimeError( + "Cannot determine safe temp directory. You " + "need to explicitly provide one." + ) + + tmpdir = tempfile.gettempdir() + + # On windows the temporary directory is used specific unless + # explicitly forced otherwise. We can just use that. + if os.name == "nt": + return tmpdir + if not hasattr(os, "getuid"): + _unsafe_dir() + + dirname = f"_jinja2-cache-{os.getuid()}" + actual_dir = os.path.join(tmpdir, dirname) + + try: + os.mkdir(actual_dir, stat.S_IRWXU) + except OSError as e: + if e.errno != errno.EEXIST: + raise + try: + os.chmod(actual_dir, stat.S_IRWXU) + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + except OSError as e: + if e.errno != errno.EEXIST: + raise + + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + + return actual_dir + + def _get_cache_filename(self, bucket: Bucket) -> str: + return os.path.join(self.directory, self.pattern % (bucket.key,)) + + def load_bytecode(self, bucket: Bucket) -> None: + filename = self._get_cache_filename(bucket) + + # Don't test for existence before opening the file, since the + # file could disappear after the test before the open. + try: + f = open(filename, "rb") + except (FileNotFoundError, IsADirectoryError, PermissionError): + # PermissionError can occur on Windows when an operation is + # in progress, such as calling clear(). + return + + with f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket: Bucket) -> None: + # Write to a temporary file, then rename to the real name after + # writing. This avoids another process reading the file before + # it is fully written. + name = self._get_cache_filename(bucket) + f = tempfile.NamedTemporaryFile( + mode="wb", + dir=os.path.dirname(name), + prefix=os.path.basename(name), + suffix=".tmp", + delete=False, + ) + + def remove_silent() -> None: + try: + os.remove(f.name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + pass + + try: + with f: + bucket.write_bytecode(f) + except BaseException: + remove_silent() + raise + + try: + os.replace(f.name, name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + remove_silent() + except BaseException: + remove_silent() + raise + + def clear(self) -> None: + # imported lazily here because google app-engine doesn't support + # write access on the file system and the function does not exist + # normally. + from os import remove + + files = fnmatch.filter(os.listdir(self.directory), self.pattern % ("*",)) + for filename in files: + try: + remove(os.path.join(self.directory, filename)) + except OSError: + pass + + +class MemcachedBytecodeCache(BytecodeCache): + """This class implements a bytecode cache that uses a memcache cache for + storing the information. It does not enforce a specific memcache library + (tummy's memcache or cmemcache) but will accept any class that provides + the minimal interface required. + + Libraries compatible with this class: + + - `cachelib `_ + - `python-memcached `_ + + (Unfortunately the django cache interface is not compatible because it + does not support storing binary data, only text. You can however pass + the underlying cache client to the bytecode cache which is available + as `django.core.cache.cache._client`.) + + The minimal interface for the client passed to the constructor is this: + + .. class:: MinimalClientInterface + + .. method:: set(key, value[, timeout]) + + Stores the bytecode in the cache. `value` is a string and + `timeout` the timeout of the key. If timeout is not provided + a default timeout or no timeout should be assumed, if it's + provided it's an integer with the number of seconds the cache + item should exist. + + .. method:: get(key) + + Returns the value for the cache key. If the item does not + exist in the cache the return value must be `None`. + + The other arguments to the constructor are the prefix for all keys that + is added before the actual cache key and the timeout for the bytecode in + the cache system. We recommend a high (or no) timeout. + + This bytecode cache does not support clearing of used items in the cache. + The clear method is a no-operation function. + + .. versionadded:: 2.7 + Added support for ignoring memcache errors through the + `ignore_memcache_errors` parameter. + """ + + def __init__( + self, + client: "_MemcachedClient", + prefix: str = "jinja2/bytecode/", + timeout: t.Optional[int] = None, + ignore_memcache_errors: bool = True, + ): + self.client = client + self.prefix = prefix + self.timeout = timeout + self.ignore_memcache_errors = ignore_memcache_errors + + def load_bytecode(self, bucket: Bucket) -> None: + try: + code = self.client.get(self.prefix + bucket.key) + except Exception: + if not self.ignore_memcache_errors: + raise + else: + bucket.bytecode_from_string(code) + + def dump_bytecode(self, bucket: Bucket) -> None: + key = self.prefix + bucket.key + value = bucket.bytecode_to_string() + + try: + if self.timeout is not None: + self.client.set(key, value, self.timeout) + else: + self.client.set(key, value) + except Exception: + if not self.ignore_memcache_errors: + raise diff --git a/venv/Lib/site-packages/jinja2/compiler.py b/venv/Lib/site-packages/jinja2/compiler.py new file mode 100644 index 0000000..3458095 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/compiler.py @@ -0,0 +1,1957 @@ +"""Compiles nodes from the parser into Python code.""" +import typing as t +from contextlib import contextmanager +from functools import update_wrapper +from io import StringIO +from itertools import chain +from keyword import iskeyword as is_python_keyword + +from markupsafe import escape +from markupsafe import Markup + +from . import nodes +from .exceptions import TemplateAssertionError +from .idtracking import Symbols +from .idtracking import VAR_LOAD_ALIAS +from .idtracking import VAR_LOAD_PARAMETER +from .idtracking import VAR_LOAD_RESOLVE +from .idtracking import VAR_LOAD_UNDEFINED +from .nodes import EvalContext +from .optimizer import Optimizer +from .utils import _PassArg +from .utils import concat +from .visitor import NodeVisitor + +if t.TYPE_CHECKING: + import typing_extensions as te + from .environment import Environment + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + +operators = { + "eq": "==", + "ne": "!=", + "gt": ">", + "gteq": ">=", + "lt": "<", + "lteq": "<=", + "in": "in", + "notin": "not in", +} + + +def optimizeconst(f: F) -> F: + def new_func( + self: "CodeGenerator", node: nodes.Expr, frame: "Frame", **kwargs: t.Any + ) -> t.Any: + # Only optimize if the frame is not volatile + if self.optimizer is not None and not frame.eval_ctx.volatile: + new_node = self.optimizer.visit(node, frame.eval_ctx) + + if new_node != node: + return self.visit(new_node, frame) + + return f(self, node, frame, **kwargs) + + return update_wrapper(t.cast(F, new_func), f) + + +def _make_binop(op: str) -> t.Callable[["CodeGenerator", nodes.BinExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.BinExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed + and op in self.environment.intercepted_binops # type: ignore + ): + self.write(f"environment.call_binop(context, {op!r}, ") + self.visit(node.left, frame) + self.write(", ") + self.visit(node.right, frame) + else: + self.write("(") + self.visit(node.left, frame) + self.write(f" {op} ") + self.visit(node.right, frame) + + self.write(")") + + return visitor + + +def _make_unop( + op: str, +) -> t.Callable[["CodeGenerator", nodes.UnaryExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.UnaryExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed + and op in self.environment.intercepted_unops # type: ignore + ): + self.write(f"environment.call_unop(context, {op!r}, ") + self.visit(node.node, frame) + else: + self.write("(" + op) + self.visit(node.node, frame) + + self.write(")") + + return visitor + + +def generate( + node: nodes.Template, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, +) -> t.Optional[str]: + """Generate the python source for a node tree.""" + if not isinstance(node, nodes.Template): + raise TypeError("Can't compile non template nodes") + + generator = environment.code_generator_class( + environment, name, filename, stream, defer_init, optimized + ) + generator.visit(node) + + if stream is None: + return generator.stream.getvalue() # type: ignore + + return None + + +def has_safe_repr(value: t.Any) -> bool: + """Does the node have a safe representation?""" + if value is None or value is NotImplemented or value is Ellipsis: + return True + + if type(value) in {bool, int, float, complex, range, str, Markup}: + return True + + if type(value) in {tuple, list, set, frozenset}: + return all(has_safe_repr(v) for v in value) + + if type(value) is dict: + return all(has_safe_repr(k) and has_safe_repr(v) for k, v in value.items()) + + return False + + +def find_undeclared( + nodes: t.Iterable[nodes.Node], names: t.Iterable[str] +) -> t.Set[str]: + """Check if the names passed are accessed undeclared. The return value + is a set of all the undeclared names from the sequence of names found. + """ + visitor = UndeclaredNameVisitor(names) + try: + for node in nodes: + visitor.visit(node) + except VisitorExit: + pass + return visitor.undeclared + + +class MacroRef: + def __init__(self, node: t.Union[nodes.Macro, nodes.CallBlock]) -> None: + self.node = node + self.accesses_caller = False + self.accesses_kwargs = False + self.accesses_varargs = False + + +class Frame: + """Holds compile time information for us.""" + + def __init__( + self, + eval_ctx: EvalContext, + parent: t.Optional["Frame"] = None, + level: t.Optional[int] = None, + ) -> None: + self.eval_ctx = eval_ctx + + # the parent of this frame + self.parent = parent + + if parent is None: + self.symbols = Symbols(level=level) + + # in some dynamic inheritance situations the compiler needs to add + # write tests around output statements. + self.require_output_check = False + + # inside some tags we are using a buffer rather than yield statements. + # this for example affects {% filter %} or {% macro %}. If a frame + # is buffered this variable points to the name of the list used as + # buffer. + self.buffer: t.Optional[str] = None + + # the name of the block we're in, otherwise None. + self.block: t.Optional[str] = None + + else: + self.symbols = Symbols(parent.symbols, level=level) + self.require_output_check = parent.require_output_check + self.buffer = parent.buffer + self.block = parent.block + + # a toplevel frame is the root + soft frames such as if conditions. + self.toplevel = False + + # the root frame is basically just the outermost frame, so no if + # conditions. This information is used to optimize inheritance + # situations. + self.rootlevel = False + + # variables set inside of loops and blocks should not affect outer frames, + # but they still needs to be kept track of as part of the active context. + self.loop_frame = False + self.block_frame = False + + # track whether the frame is being used in an if-statement or conditional + # expression as it determines which errors should be raised during runtime + # or compile time. + self.soft_frame = False + + def copy(self) -> "Frame": + """Create a copy of the current one.""" + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.symbols = self.symbols.copy() + return rv + + def inner(self, isolated: bool = False) -> "Frame": + """Return an inner frame.""" + if isolated: + return Frame(self.eval_ctx, level=self.symbols.level + 1) + return Frame(self.eval_ctx, self) + + def soft(self) -> "Frame": + """Return a soft frame. A soft frame may not be modified as + standalone thing as it shares the resources with the frame it + was created of, but it's not a rootlevel frame any longer. + + This is only used to implement if-statements and conditional + expressions. + """ + rv = self.copy() + rv.rootlevel = False + rv.soft_frame = True + return rv + + __copy__ = copy + + +class VisitorExit(RuntimeError): + """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" + + +class DependencyFinderVisitor(NodeVisitor): + """A visitor that collects filter and test calls.""" + + def __init__(self) -> None: + self.filters: t.Set[str] = set() + self.tests: t.Set[str] = set() + + def visit_Filter(self, node: nodes.Filter) -> None: + self.generic_visit(node) + self.filters.add(node.name) + + def visit_Test(self, node: nodes.Test) -> None: + self.generic_visit(node) + self.tests.add(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting at blocks.""" + + +class UndeclaredNameVisitor(NodeVisitor): + """A visitor that checks if a name is accessed without being + declared. This is different from the frame visitor as it will + not stop at closure frames. + """ + + def __init__(self, names: t.Iterable[str]) -> None: + self.names = set(names) + self.undeclared: t.Set[str] = set() + + def visit_Name(self, node: nodes.Name) -> None: + if node.ctx == "load" and node.name in self.names: + self.undeclared.add(node.name) + if self.undeclared == self.names: + raise VisitorExit() + else: + self.names.discard(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting a blocks.""" + + +class CompilerExit(Exception): + """Raised if the compiler encountered a situation where it just + doesn't make sense to further process the code. Any block that + raises such an exception is not further processed. + """ + + +class CodeGenerator(NodeVisitor): + def __init__( + self, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, + ) -> None: + if stream is None: + stream = StringIO() + self.environment = environment + self.name = name + self.filename = filename + self.stream = stream + self.created_block_context = False + self.defer_init = defer_init + self.optimizer: t.Optional[Optimizer] = None + + if optimized: + self.optimizer = Optimizer(environment) + + # aliases for imports + self.import_aliases: t.Dict[str, str] = {} + + # a registry for all blocks. Because blocks are moved out + # into the global python scope they are registered here + self.blocks: t.Dict[str, nodes.Block] = {} + + # the number of extends statements so far + self.extends_so_far = 0 + + # some templates have a rootlevel extends. In this case we + # can safely assume that we're a child template and do some + # more optimizations. + self.has_known_extends = False + + # the current line number + self.code_lineno = 1 + + # registry of all filters and tests (global, not block local) + self.tests: t.Dict[str, str] = {} + self.filters: t.Dict[str, str] = {} + + # the debug information + self.debug_info: t.List[t.Tuple[int, int]] = [] + self._write_debug_info: t.Optional[int] = None + + # the number of new lines before the next write() + self._new_lines = 0 + + # the line number of the last written statement + self._last_line = 0 + + # true if nothing was written so far. + self._first_write = True + + # used by the `temporary_identifier` method to get new + # unique, temporary identifier + self._last_identifier = 0 + + # the current indentation + self._indentation = 0 + + # Tracks toplevel assignments + self._assign_stack: t.List[t.Set[str]] = [] + + # Tracks parameter definition blocks + self._param_def_block: t.List[t.Set[str]] = [] + + # Tracks the current context. + self._context_reference_stack = ["context"] + + @property + def optimized(self) -> bool: + return self.optimizer is not None + + # -- Various compilation helpers + + def fail(self, msg: str, lineno: int) -> "te.NoReturn": + """Fail with a :exc:`TemplateAssertionError`.""" + raise TemplateAssertionError(msg, lineno, self.name, self.filename) + + def temporary_identifier(self) -> str: + """Get a new unique identifier.""" + self._last_identifier += 1 + return f"t_{self._last_identifier}" + + def buffer(self, frame: Frame) -> None: + """Enable buffering for the frame from that point onwards.""" + frame.buffer = self.temporary_identifier() + self.writeline(f"{frame.buffer} = []") + + def return_buffer_contents( + self, frame: Frame, force_unescaped: bool = False + ) -> None: + """Return the buffer contents of the frame.""" + if not force_unescaped: + if frame.eval_ctx.volatile: + self.writeline("if context.eval_ctx.autoescape:") + self.indent() + self.writeline(f"return Markup(concat({frame.buffer}))") + self.outdent() + self.writeline("else:") + self.indent() + self.writeline(f"return concat({frame.buffer})") + self.outdent() + return + elif frame.eval_ctx.autoescape: + self.writeline(f"return Markup(concat({frame.buffer}))") + return + self.writeline(f"return concat({frame.buffer})") + + def indent(self) -> None: + """Indent by one.""" + self._indentation += 1 + + def outdent(self, step: int = 1) -> None: + """Outdent by step.""" + self._indentation -= step + + def start_write(self, frame: Frame, node: t.Optional[nodes.Node] = None) -> None: + """Yield or write into the frame buffer.""" + if frame.buffer is None: + self.writeline("yield ", node) + else: + self.writeline(f"{frame.buffer}.append(", node) + + def end_write(self, frame: Frame) -> None: + """End the writing process started by `start_write`.""" + if frame.buffer is not None: + self.write(")") + + def simple_write( + self, s: str, frame: Frame, node: t.Optional[nodes.Node] = None + ) -> None: + """Simple shortcut for start_write + write + end_write.""" + self.start_write(frame, node) + self.write(s) + self.end_write(frame) + + def blockvisit(self, nodes: t.Iterable[nodes.Node], frame: Frame) -> None: + """Visit a list of nodes as block in a frame. If the current frame + is no buffer a dummy ``if 0: yield None`` is written automatically. + """ + try: + self.writeline("pass") + for node in nodes: + self.visit(node, frame) + except CompilerExit: + pass + + def write(self, x: str) -> None: + """Write a string into the output stream.""" + if self._new_lines: + if not self._first_write: + self.stream.write("\n" * self._new_lines) + self.code_lineno += self._new_lines + if self._write_debug_info is not None: + self.debug_info.append((self._write_debug_info, self.code_lineno)) + self._write_debug_info = None + self._first_write = False + self.stream.write(" " * self._indentation) + self._new_lines = 0 + self.stream.write(x) + + def writeline( + self, x: str, node: t.Optional[nodes.Node] = None, extra: int = 0 + ) -> None: + """Combination of newline and write.""" + self.newline(node, extra) + self.write(x) + + def newline(self, node: t.Optional[nodes.Node] = None, extra: int = 0) -> None: + """Add one or more newlines before the next write.""" + self._new_lines = max(self._new_lines, 1 + extra) + if node is not None and node.lineno != self._last_line: + self._write_debug_info = node.lineno + self._last_line = node.lineno + + def signature( + self, + node: t.Union[nodes.Call, nodes.Filter, nodes.Test], + frame: Frame, + extra_kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + ) -> None: + """Writes a function call to the stream for the current node. + A leading comma is added automatically. The extra keyword + arguments may not include python keywords otherwise a syntax + error could occur. The extra keyword arguments should be given + as python dict. + """ + # if any of the given keyword arguments is a python keyword + # we have to make sure that no invalid call is created. + kwarg_workaround = any( + is_python_keyword(t.cast(str, k)) + for k in chain((x.key for x in node.kwargs), extra_kwargs or ()) + ) + + for arg in node.args: + self.write(", ") + self.visit(arg, frame) + + if not kwarg_workaround: + for kwarg in node.kwargs: + self.write(", ") + self.visit(kwarg, frame) + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f", {key}={value}") + if node.dyn_args: + self.write(", *") + self.visit(node.dyn_args, frame) + + if kwarg_workaround: + if node.dyn_kwargs is not None: + self.write(", **dict({") + else: + self.write(", **{") + for kwarg in node.kwargs: + self.write(f"{kwarg.key!r}: ") + self.visit(kwarg.value, frame) + self.write(", ") + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f"{key!r}: {value}, ") + if node.dyn_kwargs is not None: + self.write("}, **") + self.visit(node.dyn_kwargs, frame) + self.write(")") + else: + self.write("}") + + elif node.dyn_kwargs is not None: + self.write(", **") + self.visit(node.dyn_kwargs, frame) + + def pull_dependencies(self, nodes: t.Iterable[nodes.Node]) -> None: + """Find all filter and test names used in the template and + assign them to variables in the compiled namespace. Checking + that the names are registered with the environment is done when + compiling the Filter and Test nodes. If the node is in an If or + CondExpr node, the check is done at runtime instead. + + .. versionchanged:: 3.0 + Filters and tests in If and CondExpr nodes are checked at + runtime instead of compile time. + """ + visitor = DependencyFinderVisitor() + + for node in nodes: + visitor.visit(node) + + for id_map, names, dependency in (self.filters, visitor.filters, "filters"), ( + self.tests, + visitor.tests, + "tests", + ): + for name in sorted(names): + if name not in id_map: + id_map[name] = self.temporary_identifier() + + # add check during runtime that dependencies used inside of executed + # blocks are defined, as this step may be skipped during compile time + self.writeline("try:") + self.indent() + self.writeline(f"{id_map[name]} = environment.{dependency}[{name!r}]") + self.outdent() + self.writeline("except KeyError:") + self.indent() + self.writeline("@internalcode") + self.writeline(f"def {id_map[name]}(*unused):") + self.indent() + self.writeline( + f'raise TemplateRuntimeError("No {dependency[:-1]}' + f' named {name!r} found.")' + ) + self.outdent() + self.outdent() + + def enter_frame(self, frame: Frame) -> None: + undefs = [] + for target, (action, param) in frame.symbols.loads.items(): + if action == VAR_LOAD_PARAMETER: + pass + elif action == VAR_LOAD_RESOLVE: + self.writeline(f"{target} = {self.get_resolve_func()}({param!r})") + elif action == VAR_LOAD_ALIAS: + self.writeline(f"{target} = {param}") + elif action == VAR_LOAD_UNDEFINED: + undefs.append(target) + else: + raise NotImplementedError("unknown load instruction") + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def leave_frame(self, frame: Frame, with_python_scope: bool = False) -> None: + if not with_python_scope: + undefs = [] + for target in frame.symbols.loads: + undefs.append(target) + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def choose_async(self, async_value: str = "async ", sync_value: str = "") -> str: + return async_value if self.environment.is_async else sync_value + + def func(self, name: str) -> str: + return f"{self.choose_async()}def {name}" + + def macro_body( + self, node: t.Union[nodes.Macro, nodes.CallBlock], frame: Frame + ) -> t.Tuple[Frame, MacroRef]: + """Dump the function def of a macro or call block.""" + frame = frame.inner() + frame.symbols.analyze_node(node) + macro_ref = MacroRef(node) + + explicit_caller = None + skip_special_params = set() + args = [] + + for idx, arg in enumerate(node.args): + if arg.name == "caller": + explicit_caller = idx + if arg.name in ("kwargs", "varargs"): + skip_special_params.add(arg.name) + args.append(frame.symbols.ref(arg.name)) + + undeclared = find_undeclared(node.body, ("caller", "kwargs", "varargs")) + + if "caller" in undeclared: + # In older Jinja versions there was a bug that allowed caller + # to retain the special behavior even if it was mentioned in + # the argument list. However thankfully this was only really + # working if it was the last argument. So we are explicitly + # checking this now and error out if it is anywhere else in + # the argument list. + if explicit_caller is not None: + try: + node.defaults[explicit_caller - len(node.args)] + except IndexError: + self.fail( + "When defining macros or call blocks the " + 'special "caller" argument must be omitted ' + "or be given a default.", + node.lineno, + ) + else: + args.append(frame.symbols.declare_parameter("caller")) + macro_ref.accesses_caller = True + if "kwargs" in undeclared and "kwargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("kwargs")) + macro_ref.accesses_kwargs = True + if "varargs" in undeclared and "varargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("varargs")) + macro_ref.accesses_varargs = True + + # macros are delayed, they never require output checks + frame.require_output_check = False + frame.symbols.analyze_node(node) + self.writeline(f"{self.func('macro')}({', '.join(args)}):", node) + self.indent() + + self.buffer(frame) + self.enter_frame(frame) + + self.push_parameter_definitions(frame) + for idx, arg in enumerate(node.args): + ref = frame.symbols.ref(arg.name) + self.writeline(f"if {ref} is missing:") + self.indent() + try: + default = node.defaults[idx - len(node.args)] + except IndexError: + self.writeline( + f'{ref} = undefined("parameter {arg.name!r} was not provided",' + f" name={arg.name!r})" + ) + else: + self.writeline(f"{ref} = ") + self.visit(default, frame) + self.mark_parameter_stored(ref) + self.outdent() + self.pop_parameter_definitions() + + self.blockvisit(node.body, frame) + self.return_buffer_contents(frame, force_unescaped=True) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + return frame, macro_ref + + def macro_def(self, macro_ref: MacroRef, frame: Frame) -> None: + """Dump the macro definition for the def created by macro_body.""" + arg_tuple = ", ".join(repr(x.name) for x in macro_ref.node.args) + name = getattr(macro_ref.node, "name", None) + if len(macro_ref.node.args) == 1: + arg_tuple += "," + self.write( + f"Macro(environment, macro, {name!r}, ({arg_tuple})," + f" {macro_ref.accesses_kwargs!r}, {macro_ref.accesses_varargs!r}," + f" {macro_ref.accesses_caller!r}, context.eval_ctx.autoescape)" + ) + + def position(self, node: nodes.Node) -> str: + """Return a human readable position for the node.""" + rv = f"line {node.lineno}" + if self.name is not None: + rv = f"{rv} in {self.name!r}" + return rv + + def dump_local_context(self, frame: Frame) -> str: + items_kv = ", ".join( + f"{name!r}: {target}" + for name, target in frame.symbols.dump_stores().items() + ) + return f"{{{items_kv}}}" + + def write_commons(self) -> None: + """Writes a common preamble that is used by root and block functions. + Primarily this sets up common local helpers and enforces a generator + through a dead branch. + """ + self.writeline("resolve = context.resolve_or_missing") + self.writeline("undefined = environment.undefined") + self.writeline("concat = environment.concat") + # always use the standard Undefined class for the implicit else of + # conditional expressions + self.writeline("cond_expr_undefined = Undefined") + self.writeline("if 0: yield None") + + def push_parameter_definitions(self, frame: Frame) -> None: + """Pushes all parameter targets from the given frame into a local + stack that permits tracking of yet to be assigned parameters. In + particular this enables the optimization from `visit_Name` to skip + undefined expressions for parameters in macros as macros can reference + otherwise unbound parameters. + """ + self._param_def_block.append(frame.symbols.dump_param_targets()) + + def pop_parameter_definitions(self) -> None: + """Pops the current parameter definitions set.""" + self._param_def_block.pop() + + def mark_parameter_stored(self, target: str) -> None: + """Marks a parameter in the current parameter definitions as stored. + This will skip the enforced undefined checks. + """ + if self._param_def_block: + self._param_def_block[-1].discard(target) + + def push_context_reference(self, target: str) -> None: + self._context_reference_stack.append(target) + + def pop_context_reference(self) -> None: + self._context_reference_stack.pop() + + def get_context_ref(self) -> str: + return self._context_reference_stack[-1] + + def get_resolve_func(self) -> str: + target = self._context_reference_stack[-1] + if target == "context": + return "resolve" + return f"{target}.resolve" + + def derive_context(self, frame: Frame) -> str: + return f"{self.get_context_ref()}.derived({self.dump_local_context(frame)})" + + def parameter_is_undeclared(self, target: str) -> bool: + """Checks if a given target is an undeclared parameter.""" + if not self._param_def_block: + return False + return target in self._param_def_block[-1] + + def push_assign_tracking(self) -> None: + """Pushes a new layer for assignment tracking.""" + self._assign_stack.append(set()) + + def pop_assign_tracking(self, frame: Frame) -> None: + """Pops the topmost level for assignment tracking and updates the + context variables if necessary. + """ + vars = self._assign_stack.pop() + if ( + not frame.block_frame + and not frame.loop_frame + and not frame.toplevel + or not vars + ): + return + public_names = [x for x in vars if x[:1] != "_"] + if len(vars) == 1: + name = next(iter(vars)) + ref = frame.symbols.ref(name) + if frame.loop_frame: + self.writeline(f"_loop_vars[{name!r}] = {ref}") + return + if frame.block_frame: + self.writeline(f"_block_vars[{name!r}] = {ref}") + return + self.writeline(f"context.vars[{name!r}] = {ref}") + else: + if frame.loop_frame: + self.writeline("_loop_vars.update({") + elif frame.block_frame: + self.writeline("_block_vars.update({") + else: + self.writeline("context.vars.update({") + for idx, name in enumerate(vars): + if idx: + self.write(", ") + ref = frame.symbols.ref(name) + self.write(f"{name!r}: {ref}") + self.write("})") + if not frame.block_frame and not frame.loop_frame and public_names: + if len(public_names) == 1: + self.writeline(f"context.exported_vars.add({public_names[0]!r})") + else: + names_str = ", ".join(map(repr, public_names)) + self.writeline(f"context.exported_vars.update(({names_str}))") + + # -- Statement Visitors + + def visit_Template( + self, node: nodes.Template, frame: t.Optional[Frame] = None + ) -> None: + assert frame is None, "no root frame allowed" + eval_ctx = EvalContext(self.environment, self.name) + + from .runtime import exported, async_exported + + if self.environment.is_async: + exported_names = sorted(exported + async_exported) + else: + exported_names = sorted(exported) + + self.writeline("from jinja2.runtime import " + ", ".join(exported_names)) + + # if we want a deferred initialization we cannot move the + # environment into a local name + envenv = "" if self.defer_init else ", environment=environment" + + # do we have an extends tag at all? If not, we can save some + # overhead by just not processing any inheritance code. + have_extends = node.find(nodes.Extends) is not None + + # find all blocks + for block in node.find_all(nodes.Block): + if block.name in self.blocks: + self.fail(f"block {block.name!r} defined twice", block.lineno) + self.blocks[block.name] = block + + # find all imports and import them + for import_ in node.find_all(nodes.ImportedName): + if import_.importname not in self.import_aliases: + imp = import_.importname + self.import_aliases[imp] = alias = self.temporary_identifier() + if "." in imp: + module, obj = imp.rsplit(".", 1) + self.writeline(f"from {module} import {obj} as {alias}") + else: + self.writeline(f"import {imp} as {alias}") + + # add the load name + self.writeline(f"name = {self.name!r}") + + # generate the root render function. + self.writeline( + f"{self.func('root')}(context, missing=missing{envenv}):", extra=1 + ) + self.indent() + self.write_commons() + + # process the root + frame = Frame(eval_ctx) + if "self" in find_undeclared(node.body, ("self",)): + ref = frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + frame.symbols.analyze_node(node) + frame.toplevel = frame.rootlevel = True + frame.require_output_check = have_extends and not self.has_known_extends + if have_extends: + self.writeline("parent_template = None") + self.enter_frame(frame) + self.pull_dependencies(node.body) + self.blockvisit(node.body, frame) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + # make sure that the parent root is called. + if have_extends: + if not self.has_known_extends: + self.indent() + self.writeline("if parent_template is not None:") + self.indent() + if not self.environment.is_async: + self.writeline("yield from parent_template.root_render_func(context)") + else: + self.writeline( + "async for event in parent_template.root_render_func(context):" + ) + self.indent() + self.writeline("yield event") + self.outdent() + self.outdent(1 + (not self.has_known_extends)) + + # at this point we now have the blocks collected and can visit them too. + for name, block in self.blocks.items(): + self.writeline( + f"{self.func('block_' + name)}(context, missing=missing{envenv}):", + block, + 1, + ) + self.indent() + self.write_commons() + # It's important that we do not make this frame a child of the + # toplevel template. This would cause a variety of + # interesting issues with identifier tracking. + block_frame = Frame(eval_ctx) + block_frame.block_frame = True + undeclared = find_undeclared(block.body, ("self", "super")) + if "self" in undeclared: + ref = block_frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + if "super" in undeclared: + ref = block_frame.symbols.declare_parameter("super") + self.writeline(f"{ref} = context.super({name!r}, block_{name})") + block_frame.symbols.analyze_node(block) + block_frame.block = name + self.writeline("_block_vars = {}") + self.enter_frame(block_frame) + self.pull_dependencies(block.body) + self.blockvisit(block.body, block_frame) + self.leave_frame(block_frame, with_python_scope=True) + self.outdent() + + blocks_kv_str = ", ".join(f"{x!r}: block_{x}" for x in self.blocks) + self.writeline(f"blocks = {{{blocks_kv_str}}}", extra=1) + debug_kv_str = "&".join(f"{k}={v}" for k, v in self.debug_info) + self.writeline(f"debug_info = {debug_kv_str!r}") + + def visit_Block(self, node: nodes.Block, frame: Frame) -> None: + """Call a block and register it for the template.""" + level = 0 + if frame.toplevel: + # if we know that we are a child template, there is no need to + # check if we are one + if self.has_known_extends: + return + if self.extends_so_far > 0: + self.writeline("if parent_template is None:") + self.indent() + level += 1 + + if node.scoped: + context = self.derive_context(frame) + else: + context = self.get_context_ref() + + if node.required: + self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node) + self.indent() + self.writeline( + f'raise TemplateRuntimeError("Required block {node.name!r} not found")', + node, + ) + self.outdent() + + if not self.environment.is_async and frame.buffer is None: + self.writeline( + f"yield from context.blocks[{node.name!r}][0]({context})", node + ) + else: + self.writeline( + f"{self.choose_async()}for event in" + f" context.blocks[{node.name!r}][0]({context}):", + node, + ) + self.indent() + self.simple_write("event", frame) + self.outdent() + + self.outdent(level) + + def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None: + """Calls the extender.""" + if not frame.toplevel: + self.fail("cannot use extend from a non top-level scope", node.lineno) + + # if the number of extends statements in general is zero so + # far, we don't have to add a check if something extended + # the template before this one. + if self.extends_so_far > 0: + + # if we have a known extends we just add a template runtime + # error into the generated code. We could catch that at compile + # time too, but i welcome it not to confuse users by throwing the + # same error at different times just "because we can". + if not self.has_known_extends: + self.writeline("if parent_template is not None:") + self.indent() + self.writeline('raise TemplateRuntimeError("extended multiple times")') + + # if we have a known extends already we don't need that code here + # as we know that the template execution will end here. + if self.has_known_extends: + raise CompilerExit() + else: + self.outdent() + + self.writeline("parent_template = environment.get_template(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + self.writeline("for name, parent_block in parent_template.blocks.items():") + self.indent() + self.writeline("context.blocks.setdefault(name, []).append(parent_block)") + self.outdent() + + # if this extends statement was in the root level we can take + # advantage of that information and simplify the generated code + # in the top level from this point onwards + if frame.rootlevel: + self.has_known_extends = True + + # and now we have one more + self.extends_so_far += 1 + + def visit_Include(self, node: nodes.Include, frame: Frame) -> None: + """Handles includes.""" + if node.ignore_missing: + self.writeline("try:") + self.indent() + + func_name = "get_or_select_template" + if isinstance(node.template, nodes.Const): + if isinstance(node.template.value, str): + func_name = "get_template" + elif isinstance(node.template.value, (tuple, list)): + func_name = "select_template" + elif isinstance(node.template, (nodes.Tuple, nodes.List)): + func_name = "select_template" + + self.writeline(f"template = environment.{func_name}(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + if node.ignore_missing: + self.outdent() + self.writeline("except TemplateNotFound:") + self.indent() + self.writeline("pass") + self.outdent() + self.writeline("else:") + self.indent() + + skip_event_yield = False + if node.with_context: + self.writeline( + f"{self.choose_async()}for event in template.root_render_func(" + "template.new_context(context.get_all(), True," + f" {self.dump_local_context(frame)})):" + ) + elif self.environment.is_async: + self.writeline( + "for event in (await template._get_default_module_async())" + "._body_stream:" + ) + else: + self.writeline("yield from template._get_default_module()._body_stream") + skip_event_yield = True + + if not skip_event_yield: + self.indent() + self.simple_write("event", frame) + self.outdent() + + if node.ignore_missing: + self.outdent() + + def _import_common( + self, node: t.Union[nodes.Import, nodes.FromImport], frame: Frame + ) -> None: + self.write(f"{self.choose_async('await ')}environment.get_template(") + self.visit(node.template, frame) + self.write(f", {self.name!r}).") + + if node.with_context: + f_name = f"make_module{self.choose_async('_async')}" + self.write( + f"{f_name}(context.get_all(), True, {self.dump_local_context(frame)})" + ) + else: + self.write(f"_get_default_module{self.choose_async('_async')}(context)") + + def visit_Import(self, node: nodes.Import, frame: Frame) -> None: + """Visit regular imports.""" + self.writeline(f"{frame.symbols.ref(node.target)} = ", node) + if frame.toplevel: + self.write(f"context.vars[{node.target!r}] = ") + + self._import_common(node, frame) + + if frame.toplevel and not node.target.startswith("_"): + self.writeline(f"context.exported_vars.discard({node.target!r})") + + def visit_FromImport(self, node: nodes.FromImport, frame: Frame) -> None: + """Visit named imports.""" + self.newline(node) + self.write("included_template = ") + self._import_common(node, frame) + var_names = [] + discarded_names = [] + for name in node.names: + if isinstance(name, tuple): + name, alias = name + else: + alias = name + self.writeline( + f"{frame.symbols.ref(alias)} =" + f" getattr(included_template, {name!r}, missing)" + ) + self.writeline(f"if {frame.symbols.ref(alias)} is missing:") + self.indent() + message = ( + "the template {included_template.__name__!r}" + f" (imported on {self.position(node)})" + f" does not export the requested name {name!r}" + ) + self.writeline( + f"{frame.symbols.ref(alias)} = undefined(f{message!r}, name={name!r})" + ) + self.outdent() + if frame.toplevel: + var_names.append(alias) + if not alias.startswith("_"): + discarded_names.append(alias) + + if var_names: + if len(var_names) == 1: + name = var_names[0] + self.writeline(f"context.vars[{name!r}] = {frame.symbols.ref(name)}") + else: + names_kv = ", ".join( + f"{name!r}: {frame.symbols.ref(name)}" for name in var_names + ) + self.writeline(f"context.vars.update({{{names_kv}}})") + if discarded_names: + if len(discarded_names) == 1: + self.writeline(f"context.exported_vars.discard({discarded_names[0]!r})") + else: + names_str = ", ".join(map(repr, discarded_names)) + self.writeline( + f"context.exported_vars.difference_update(({names_str}))" + ) + + def visit_For(self, node: nodes.For, frame: Frame) -> None: + loop_frame = frame.inner() + loop_frame.loop_frame = True + test_frame = frame.inner() + else_frame = frame.inner() + + # try to figure out if we have an extended loop. An extended loop + # is necessary if the loop is in recursive mode if the special loop + # variable is accessed in the body if the body is a scoped block. + extended_loop = ( + node.recursive + or "loop" + in find_undeclared(node.iter_child_nodes(only=("body",)), ("loop",)) + or any(block.scoped for block in node.find_all(nodes.Block)) + ) + + loop_ref = None + if extended_loop: + loop_ref = loop_frame.symbols.declare_parameter("loop") + + loop_frame.symbols.analyze_node(node, for_branch="body") + if node.else_: + else_frame.symbols.analyze_node(node, for_branch="else") + + if node.test: + loop_filter_func = self.temporary_identifier() + test_frame.symbols.analyze_node(node, for_branch="test") + self.writeline(f"{self.func(loop_filter_func)}(fiter):", node.test) + self.indent() + self.enter_frame(test_frame) + self.writeline(self.choose_async("async for ", "for ")) + self.visit(node.target, loop_frame) + self.write(" in ") + self.write(self.choose_async("auto_aiter(fiter)", "fiter")) + self.write(":") + self.indent() + self.writeline("if ", node.test) + self.visit(node.test, test_frame) + self.write(":") + self.indent() + self.writeline("yield ") + self.visit(node.target, loop_frame) + self.outdent(3) + self.leave_frame(test_frame, with_python_scope=True) + + # if we don't have an recursive loop we have to find the shadowed + # variables at that point. Because loops can be nested but the loop + # variable is a special one we have to enforce aliasing for it. + if node.recursive: + self.writeline( + f"{self.func('loop')}(reciter, loop_render_func, depth=0):", node + ) + self.indent() + self.buffer(loop_frame) + + # Use the same buffer for the else frame + else_frame.buffer = loop_frame.buffer + + # make sure the loop variable is a special one and raise a template + # assertion error if a loop tries to write to loop + if extended_loop: + self.writeline(f"{loop_ref} = missing") + + for name in node.find_all(nodes.Name): + if name.ctx == "store" and name.name == "loop": + self.fail( + "Can't assign to special loop variable in for-loop target", + name.lineno, + ) + + if node.else_: + iteration_indicator = self.temporary_identifier() + self.writeline(f"{iteration_indicator} = 1") + + self.writeline(self.choose_async("async for ", "for "), node) + self.visit(node.target, loop_frame) + if extended_loop: + self.write(f", {loop_ref} in {self.choose_async('Async')}LoopContext(") + else: + self.write(" in ") + + if node.test: + self.write(f"{loop_filter_func}(") + if node.recursive: + self.write("reciter") + else: + if self.environment.is_async and not extended_loop: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async and not extended_loop: + self.write(")") + if node.test: + self.write(")") + + if node.recursive: + self.write(", undefined, loop_render_func, depth):") + else: + self.write(", undefined):" if extended_loop else ":") + + self.indent() + self.enter_frame(loop_frame) + + self.writeline("_loop_vars = {}") + self.blockvisit(node.body, loop_frame) + if node.else_: + self.writeline(f"{iteration_indicator} = 0") + self.outdent() + self.leave_frame( + loop_frame, with_python_scope=node.recursive and not node.else_ + ) + + if node.else_: + self.writeline(f"if {iteration_indicator}:") + self.indent() + self.enter_frame(else_frame) + self.blockvisit(node.else_, else_frame) + self.leave_frame(else_frame) + self.outdent() + + # if the node was recursive we have to return the buffer contents + # and start the iteration code + if node.recursive: + self.return_buffer_contents(loop_frame) + self.outdent() + self.start_write(frame, node) + self.write(f"{self.choose_async('await ')}loop(") + if self.environment.is_async: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async: + self.write(")") + self.write(", loop)") + self.end_write(frame) + + # at the end of the iteration, clear any assignments made in the + # loop from the top level + if self._assign_stack: + self._assign_stack[-1].difference_update(loop_frame.symbols.stores) + + def visit_If(self, node: nodes.If, frame: Frame) -> None: + if_frame = frame.soft() + self.writeline("if ", node) + self.visit(node.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(node.body, if_frame) + self.outdent() + for elif_ in node.elif_: + self.writeline("elif ", elif_) + self.visit(elif_.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(elif_.body, if_frame) + self.outdent() + if node.else_: + self.writeline("else:") + self.indent() + self.blockvisit(node.else_, if_frame) + self.outdent() + + def visit_Macro(self, node: nodes.Macro, frame: Frame) -> None: + macro_frame, macro_ref = self.macro_body(node, frame) + self.newline() + if frame.toplevel: + if not node.name.startswith("_"): + self.write(f"context.exported_vars.add({node.name!r})") + self.writeline(f"context.vars[{node.name!r}] = ") + self.write(f"{frame.symbols.ref(node.name)} = ") + self.macro_def(macro_ref, macro_frame) + + def visit_CallBlock(self, node: nodes.CallBlock, frame: Frame) -> None: + call_frame, macro_ref = self.macro_body(node, frame) + self.writeline("caller = ") + self.macro_def(macro_ref, call_frame) + self.start_write(frame, node) + self.visit_Call(node.call, frame, forward_caller=True) + self.end_write(frame) + + def visit_FilterBlock(self, node: nodes.FilterBlock, frame: Frame) -> None: + filter_frame = frame.inner() + filter_frame.symbols.analyze_node(node) + self.enter_frame(filter_frame) + self.buffer(filter_frame) + self.blockvisit(node.body, filter_frame) + self.start_write(frame, node) + self.visit_Filter(node.filter, filter_frame) + self.end_write(frame) + self.leave_frame(filter_frame) + + def visit_With(self, node: nodes.With, frame: Frame) -> None: + with_frame = frame.inner() + with_frame.symbols.analyze_node(node) + self.enter_frame(with_frame) + for target, expr in zip(node.targets, node.values): + self.newline() + self.visit(target, with_frame) + self.write(" = ") + self.visit(expr, frame) + self.blockvisit(node.body, with_frame) + self.leave_frame(with_frame) + + def visit_ExprStmt(self, node: nodes.ExprStmt, frame: Frame) -> None: + self.newline(node) + self.visit(node.node, frame) + + class _FinalizeInfo(t.NamedTuple): + const: t.Optional[t.Callable[..., str]] + src: t.Optional[str] + + @staticmethod + def _default_finalize(value: t.Any) -> t.Any: + """The default finalize function if the environment isn't + configured with one. Or, if the environment has one, this is + called on that function's output for constants. + """ + return str(value) + + _finalize: t.Optional[_FinalizeInfo] = None + + def _make_finalize(self) -> _FinalizeInfo: + """Build the finalize function to be used on constants and at + runtime. Cached so it's only created once for all output nodes. + + Returns a ``namedtuple`` with the following attributes: + + ``const`` + A function to finalize constant data at compile time. + + ``src`` + Source code to output around nodes to be evaluated at + runtime. + """ + if self._finalize is not None: + return self._finalize + + finalize: t.Optional[t.Callable[..., t.Any]] + finalize = default = self._default_finalize + src = None + + if self.environment.finalize: + src = "environment.finalize(" + env_finalize = self.environment.finalize + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(env_finalize) # type: ignore + ) + finalize = None + + if pass_arg is None: + + def finalize(value: t.Any) -> t.Any: + return default(env_finalize(value)) + + else: + src = f"{src}{pass_arg}, " + + if pass_arg == "environment": + + def finalize(value: t.Any) -> t.Any: + return default(env_finalize(self.environment, value)) + + self._finalize = self._FinalizeInfo(finalize, src) + return self._finalize + + def _output_const_repr(self, group: t.Iterable[t.Any]) -> str: + """Given a group of constant values converted from ``Output`` + child nodes, produce a string to write to the template module + source. + """ + return repr(concat(group)) + + def _output_child_to_const( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> str: + """Try to optimize a child of an ``Output`` node by trying to + convert it to constant, finalized data at compile time. + + If :exc:`Impossible` is raised, the node is not constant and + will be evaluated at runtime. Any other exception will also be + evaluated at runtime for easier debugging. + """ + const = node.as_const(frame.eval_ctx) + + if frame.eval_ctx.autoescape: + const = escape(const) + + # Template data doesn't go through finalize. + if isinstance(node, nodes.TemplateData): + return str(const) + + return finalize.const(const) # type: ignore + + def _output_child_pre( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code before visiting a child of an + ``Output`` node. + """ + if frame.eval_ctx.volatile: + self.write("(escape if context.eval_ctx.autoescape else str)(") + elif frame.eval_ctx.autoescape: + self.write("escape(") + else: + self.write("str(") + + if finalize.src is not None: + self.write(finalize.src) + + def _output_child_post( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code after visiting a child of an + ``Output`` node. + """ + self.write(")") + + if finalize.src is not None: + self.write(")") + + def visit_Output(self, node: nodes.Output, frame: Frame) -> None: + # If an extends is active, don't render outside a block. + if frame.require_output_check: + # A top-level extends is known to exist at compile time. + if self.has_known_extends: + return + + self.writeline("if parent_template is None:") + self.indent() + + finalize = self._make_finalize() + body: t.List[t.Union[t.List[t.Any], nodes.Expr]] = [] + + # Evaluate constants at compile time if possible. Each item in + # body will be either a list of static data or a node to be + # evaluated at runtime. + for child in node.nodes: + try: + if not ( + # If the finalize function requires runtime context, + # constants can't be evaluated at compile time. + finalize.const + # Unless it's basic template data that won't be + # finalized anyway. + or isinstance(child, nodes.TemplateData) + ): + raise nodes.Impossible() + + const = self._output_child_to_const(child, frame, finalize) + except (nodes.Impossible, Exception): + # The node was not constant and needs to be evaluated at + # runtime. Or another error was raised, which is easier + # to debug at runtime. + body.append(child) + continue + + if body and isinstance(body[-1], list): + body[-1].append(const) + else: + body.append([const]) + + if frame.buffer is not None: + if len(body) == 1: + self.writeline(f"{frame.buffer}.append(") + else: + self.writeline(f"{frame.buffer}.extend((") + + self.indent() + + for item in body: + if isinstance(item, list): + # A group of constant data to join and output. + val = self._output_const_repr(item) + + if frame.buffer is None: + self.writeline("yield " + val) + else: + self.writeline(val + ",") + else: + if frame.buffer is None: + self.writeline("yield ", item) + else: + self.newline(item) + + # A node to be evaluated at runtime. + self._output_child_pre(item, frame, finalize) + self.visit(item, frame) + self._output_child_post(item, frame, finalize) + + if frame.buffer is not None: + self.write(",") + + if frame.buffer is not None: + self.outdent() + self.writeline(")" if len(body) == 1 else "))") + + if frame.require_output_check: + self.outdent() + + def visit_Assign(self, node: nodes.Assign, frame: Frame) -> None: + self.push_assign_tracking() + self.newline(node) + self.visit(node.target, frame) + self.write(" = ") + self.visit(node.node, frame) + self.pop_assign_tracking(frame) + + def visit_AssignBlock(self, node: nodes.AssignBlock, frame: Frame) -> None: + self.push_assign_tracking() + block_frame = frame.inner() + # This is a special case. Since a set block always captures we + # will disable output checks. This way one can use set blocks + # toplevel even in extended templates. + block_frame.require_output_check = False + block_frame.symbols.analyze_node(node) + self.enter_frame(block_frame) + self.buffer(block_frame) + self.blockvisit(node.body, block_frame) + self.newline(node) + self.visit(node.target, frame) + self.write(" = (Markup if context.eval_ctx.autoescape else identity)(") + if node.filter is not None: + self.visit_Filter(node.filter, block_frame) + else: + self.write(f"concat({block_frame.buffer})") + self.write(")") + self.pop_assign_tracking(frame) + self.leave_frame(block_frame) + + # -- Expression Visitors + + def visit_Name(self, node: nodes.Name, frame: Frame) -> None: + if node.ctx == "store" and ( + frame.toplevel or frame.loop_frame or frame.block_frame + ): + if self._assign_stack: + self._assign_stack[-1].add(node.name) + ref = frame.symbols.ref(node.name) + + # If we are looking up a variable we might have to deal with the + # case where it's undefined. We can skip that case if the load + # instruction indicates a parameter which are always defined. + if node.ctx == "load": + load = frame.symbols.find_load(ref) + if not ( + load is not None + and load[0] == VAR_LOAD_PARAMETER + and not self.parameter_is_undeclared(ref) + ): + self.write( + f"(undefined(name={node.name!r}) if {ref} is missing else {ref})" + ) + return + + self.write(ref) + + def visit_NSRef(self, node: nodes.NSRef, frame: Frame) -> None: + # NSRefs can only be used to store values; since they use the normal + # `foo.bar` notation they will be parsed as a normal attribute access + # when used anywhere but in a `set` context + ref = frame.symbols.ref(node.name) + self.writeline(f"if not isinstance({ref}, Namespace):") + self.indent() + self.writeline( + "raise TemplateRuntimeError" + '("cannot assign attribute on non-namespace object")' + ) + self.outdent() + self.writeline(f"{ref}[{node.attr!r}]") + + def visit_Const(self, node: nodes.Const, frame: Frame) -> None: + val = node.as_const(frame.eval_ctx) + if isinstance(val, float): + self.write(str(val)) + else: + self.write(repr(val)) + + def visit_TemplateData(self, node: nodes.TemplateData, frame: Frame) -> None: + try: + self.write(repr(node.as_const(frame.eval_ctx))) + except nodes.Impossible: + self.write( + f"(Markup if context.eval_ctx.autoescape else identity)({node.data!r})" + ) + + def visit_Tuple(self, node: nodes.Tuple, frame: Frame) -> None: + self.write("(") + idx = -1 + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write(",)" if idx == 0 else ")") + + def visit_List(self, node: nodes.List, frame: Frame) -> None: + self.write("[") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write("]") + + def visit_Dict(self, node: nodes.Dict, frame: Frame) -> None: + self.write("{") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item.key, frame) + self.write(": ") + self.visit(item.value, frame) + self.write("}") + + visit_Add = _make_binop("+") + visit_Sub = _make_binop("-") + visit_Mul = _make_binop("*") + visit_Div = _make_binop("/") + visit_FloorDiv = _make_binop("//") + visit_Pow = _make_binop("**") + visit_Mod = _make_binop("%") + visit_And = _make_binop("and") + visit_Or = _make_binop("or") + visit_Pos = _make_unop("+") + visit_Neg = _make_unop("-") + visit_Not = _make_unop("not ") + + @optimizeconst + def visit_Concat(self, node: nodes.Concat, frame: Frame) -> None: + if frame.eval_ctx.volatile: + func_name = "(markup_join if context.eval_ctx.volatile else str_join)" + elif frame.eval_ctx.autoescape: + func_name = "markup_join" + else: + func_name = "str_join" + self.write(f"{func_name}((") + for arg in node.nodes: + self.visit(arg, frame) + self.write(", ") + self.write("))") + + @optimizeconst + def visit_Compare(self, node: nodes.Compare, frame: Frame) -> None: + self.write("(") + self.visit(node.expr, frame) + for op in node.ops: + self.visit(op, frame) + self.write(")") + + def visit_Operand(self, node: nodes.Operand, frame: Frame) -> None: + self.write(f" {operators[node.op]} ") + self.visit(node.expr, frame) + + @optimizeconst + def visit_Getattr(self, node: nodes.Getattr, frame: Frame) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getattr(") + self.visit(node.node, frame) + self.write(f", {node.attr!r})") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Getitem(self, node: nodes.Getitem, frame: Frame) -> None: + # slices bypass the environment getitem method. + if isinstance(node.arg, nodes.Slice): + self.visit(node.node, frame) + self.write("[") + self.visit(node.arg, frame) + self.write("]") + else: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getitem(") + self.visit(node.node, frame) + self.write(", ") + self.visit(node.arg, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + def visit_Slice(self, node: nodes.Slice, frame: Frame) -> None: + if node.start is not None: + self.visit(node.start, frame) + self.write(":") + if node.stop is not None: + self.visit(node.stop, frame) + if node.step is not None: + self.write(":") + self.visit(node.step, frame) + + @contextmanager + def _filter_test_common( + self, node: t.Union[nodes.Filter, nodes.Test], frame: Frame, is_filter: bool + ) -> t.Iterator[None]: + if self.environment.is_async: + self.write("(await auto_await(") + + if is_filter: + self.write(f"{self.filters[node.name]}(") + func = self.environment.filters.get(node.name) + else: + self.write(f"{self.tests[node.name]}(") + func = self.environment.tests.get(node.name) + + # When inside an If or CondExpr frame, allow the filter to be + # undefined at compile time and only raise an error if it's + # actually called at runtime. See pull_dependencies. + if func is None and not frame.soft_frame: + type_name = "filter" if is_filter else "test" + self.fail(f"No {type_name} named {node.name!r}.", node.lineno) + + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(func) # type: ignore + ) + + if pass_arg is not None: + self.write(f"{pass_arg}, ") + + # Back to the visitor function to handle visiting the target of + # the filter or test. + yield + + self.signature(node, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Filter(self, node: nodes.Filter, frame: Frame) -> None: + with self._filter_test_common(node, frame, True): + # if the filter node is None we are inside a filter block + # and want to write to the current buffer + if node.node is not None: + self.visit(node.node, frame) + elif frame.eval_ctx.volatile: + self.write( + f"(Markup(concat({frame.buffer}))" + f" if context.eval_ctx.autoescape else concat({frame.buffer}))" + ) + elif frame.eval_ctx.autoescape: + self.write(f"Markup(concat({frame.buffer}))") + else: + self.write(f"concat({frame.buffer})") + + @optimizeconst + def visit_Test(self, node: nodes.Test, frame: Frame) -> None: + with self._filter_test_common(node, frame, False): + self.visit(node.node, frame) + + @optimizeconst + def visit_CondExpr(self, node: nodes.CondExpr, frame: Frame) -> None: + frame = frame.soft() + + def write_expr2() -> None: + if node.expr2 is not None: + self.visit(node.expr2, frame) + return + + self.write( + f'cond_expr_undefined("the inline if-expression on' + f" {self.position(node)} evaluated to false and no else" + f' section was defined.")' + ) + + self.write("(") + self.visit(node.expr1, frame) + self.write(" if ") + self.visit(node.test, frame) + self.write(" else ") + write_expr2() + self.write(")") + + @optimizeconst + def visit_Call( + self, node: nodes.Call, frame: Frame, forward_caller: bool = False + ) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + if self.environment.sandboxed: + self.write("environment.call(context, ") + else: + self.write("context.call(") + self.visit(node.node, frame) + extra_kwargs = {"caller": "caller"} if forward_caller else None + loop_kwargs = {"_loop_vars": "_loop_vars"} if frame.loop_frame else {} + block_kwargs = {"_block_vars": "_block_vars"} if frame.block_frame else {} + if extra_kwargs: + extra_kwargs.update(loop_kwargs, **block_kwargs) + elif loop_kwargs or block_kwargs: + extra_kwargs = dict(loop_kwargs, **block_kwargs) + self.signature(node, frame, extra_kwargs) + self.write(")") + if self.environment.is_async: + self.write("))") + + def visit_Keyword(self, node: nodes.Keyword, frame: Frame) -> None: + self.write(node.key + "=") + self.visit(node.value, frame) + + # -- Unused nodes for extensions + + def visit_MarkSafe(self, node: nodes.MarkSafe, frame: Frame) -> None: + self.write("Markup(") + self.visit(node.expr, frame) + self.write(")") + + def visit_MarkSafeIfAutoescape( + self, node: nodes.MarkSafeIfAutoescape, frame: Frame + ) -> None: + self.write("(Markup if context.eval_ctx.autoescape else identity)(") + self.visit(node.expr, frame) + self.write(")") + + def visit_EnvironmentAttribute( + self, node: nodes.EnvironmentAttribute, frame: Frame + ) -> None: + self.write("environment." + node.name) + + def visit_ExtensionAttribute( + self, node: nodes.ExtensionAttribute, frame: Frame + ) -> None: + self.write(f"environment.extensions[{node.identifier!r}].{node.name}") + + def visit_ImportedName(self, node: nodes.ImportedName, frame: Frame) -> None: + self.write(self.import_aliases[node.importname]) + + def visit_InternalName(self, node: nodes.InternalName, frame: Frame) -> None: + self.write(node.name) + + def visit_ContextReference( + self, node: nodes.ContextReference, frame: Frame + ) -> None: + self.write("context") + + def visit_DerivedContextReference( + self, node: nodes.DerivedContextReference, frame: Frame + ) -> None: + self.write(self.derive_context(frame)) + + def visit_Continue(self, node: nodes.Continue, frame: Frame) -> None: + self.writeline("continue", node) + + def visit_Break(self, node: nodes.Break, frame: Frame) -> None: + self.writeline("break", node) + + def visit_Scope(self, node: nodes.Scope, frame: Frame) -> None: + scope_frame = frame.inner() + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + + def visit_OverlayScope(self, node: nodes.OverlayScope, frame: Frame) -> None: + ctx = self.temporary_identifier() + self.writeline(f"{ctx} = {self.derive_context(frame)}") + self.writeline(f"{ctx}.vars = ") + self.visit(node.context, frame) + self.push_context_reference(ctx) + + scope_frame = frame.inner(isolated=True) + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + self.pop_context_reference() + + def visit_EvalContextModifier( + self, node: nodes.EvalContextModifier, frame: Frame + ) -> None: + for keyword in node.options: + self.writeline(f"context.eval_ctx.{keyword.key} = ") + self.visit(keyword.value, frame) + try: + val = keyword.value.as_const(frame.eval_ctx) + except nodes.Impossible: + frame.eval_ctx.volatile = True + else: + setattr(frame.eval_ctx, keyword.key, val) + + def visit_ScopedEvalContextModifier( + self, node: nodes.ScopedEvalContextModifier, frame: Frame + ) -> None: + old_ctx_name = self.temporary_identifier() + saved_ctx = frame.eval_ctx.save() + self.writeline(f"{old_ctx_name} = context.eval_ctx.save()") + self.visit_EvalContextModifier(node, frame) + for child in node.body: + self.visit(child, frame) + frame.eval_ctx.revert(saved_ctx) + self.writeline(f"context.eval_ctx.revert({old_ctx_name})") diff --git a/venv/Lib/site-packages/jinja2/constants.py b/venv/Lib/site-packages/jinja2/constants.py new file mode 100644 index 0000000..41a1c23 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/constants.py @@ -0,0 +1,20 @@ +#: list of lorem ipsum words used by the lipsum() helper function +LOREM_IPSUM_WORDS = """\ +a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at +auctor augue bibendum blandit class commodo condimentum congue consectetuer +consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus +diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend +elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames +faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac +hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum +justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem +luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie +mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non +nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque +penatibus per pharetra phasellus placerat platea porta porttitor posuere +potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus +ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit +sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor +tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices +ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus +viverra volutpat vulputate""" diff --git a/venv/Lib/site-packages/jinja2/debug.py b/venv/Lib/site-packages/jinja2/debug.py new file mode 100644 index 0000000..7ed7e92 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/debug.py @@ -0,0 +1,191 @@ +import sys +import typing as t +from types import CodeType +from types import TracebackType + +from .exceptions import TemplateSyntaxError +from .utils import internal_code +from .utils import missing + +if t.TYPE_CHECKING: + from .runtime import Context + + +def rewrite_traceback_stack(source: t.Optional[str] = None) -> BaseException: + """Rewrite the current exception to replace any tracebacks from + within compiled template code with tracebacks that look like they + came from the template source. + + This must be called within an ``except`` block. + + :param source: For ``TemplateSyntaxError``, the original source if + known. + :return: The original exception with the rewritten traceback. + """ + _, exc_value, tb = sys.exc_info() + exc_value = t.cast(BaseException, exc_value) + tb = t.cast(TracebackType, tb) + + if isinstance(exc_value, TemplateSyntaxError) and not exc_value.translated: + exc_value.translated = True + exc_value.source = source + # Remove the old traceback, otherwise the frames from the + # compiler still show up. + exc_value.with_traceback(None) + # Outside of runtime, so the frame isn't executing template + # code, but it still needs to point at the template. + tb = fake_traceback( + exc_value, None, exc_value.filename or "", exc_value.lineno + ) + else: + # Skip the frame for the render function. + tb = tb.tb_next + + stack = [] + + # Build the stack of traceback object, replacing any in template + # code with the source file and line information. + while tb is not None: + # Skip frames decorated with @internalcode. These are internal + # calls that aren't useful in template debugging output. + if tb.tb_frame.f_code in internal_code: + tb = tb.tb_next + continue + + template = tb.tb_frame.f_globals.get("__jinja_template__") + + if template is not None: + lineno = template.get_corresponding_lineno(tb.tb_lineno) + fake_tb = fake_traceback(exc_value, tb, template.filename, lineno) + stack.append(fake_tb) + else: + stack.append(tb) + + tb = tb.tb_next + + tb_next = None + + # Assign tb_next in reverse to avoid circular references. + for tb in reversed(stack): + tb.tb_next = tb_next + tb_next = tb + + return exc_value.with_traceback(tb_next) + + +def fake_traceback( # type: ignore + exc_value: BaseException, tb: t.Optional[TracebackType], filename: str, lineno: int +) -> TracebackType: + """Produce a new traceback object that looks like it came from the + template source instead of the compiled code. The filename, line + number, and location name will point to the template, and the local + variables will be the current template context. + + :param exc_value: The original exception to be re-raised to create + the new traceback. + :param tb: The original traceback to get the local variables and + code info from. + :param filename: The template filename. + :param lineno: The line number in the template source. + """ + if tb is not None: + # Replace the real locals with the context that would be + # available at that point in the template. + locals = get_template_locals(tb.tb_frame.f_locals) + locals.pop("__jinja_exception__", None) + else: + locals = {} + + globals = { + "__name__": filename, + "__file__": filename, + "__jinja_exception__": exc_value, + } + # Raise an exception at the correct line number. + code: CodeType = compile( + "\n" * (lineno - 1) + "raise __jinja_exception__", filename, "exec" + ) + + # Build a new code object that points to the template file and + # replaces the location with a block name. + location = "template" + + if tb is not None: + function = tb.tb_frame.f_code.co_name + + if function == "root": + location = "top-level template code" + elif function.startswith("block_"): + location = f"block {function[6:]!r}" + + if sys.version_info >= (3, 8): + code = code.replace(co_name=location) + else: + code = CodeType( + code.co_argcount, + code.co_kwonlyargcount, + code.co_nlocals, + code.co_stacksize, + code.co_flags, + code.co_code, + code.co_consts, + code.co_names, + code.co_varnames, + code.co_filename, + location, + code.co_firstlineno, + code.co_lnotab, + code.co_freevars, + code.co_cellvars, + ) + + # Execute the new code, which is guaranteed to raise, and return + # the new traceback without this frame. + try: + exec(code, globals, locals) + except BaseException: + return sys.exc_info()[2].tb_next # type: ignore + + +def get_template_locals(real_locals: t.Mapping[str, t.Any]) -> t.Dict[str, t.Any]: + """Based on the runtime locals, get the context that would be + available at that point in the template. + """ + # Start with the current template context. + ctx: "t.Optional[Context]" = real_locals.get("context") + + if ctx is not None: + data: t.Dict[str, t.Any] = ctx.get_all().copy() + else: + data = {} + + # Might be in a derived context that only sets local variables + # rather than pushing a context. Local variables follow the scheme + # l_depth_name. Find the highest-depth local that has a value for + # each name. + local_overrides: t.Dict[str, t.Tuple[int, t.Any]] = {} + + for name, value in real_locals.items(): + if not name.startswith("l_") or value is missing: + # Not a template variable, or no longer relevant. + continue + + try: + _, depth_str, name = name.split("_", 2) + depth = int(depth_str) + except ValueError: + continue + + cur_depth = local_overrides.get(name, (-1,))[0] + + if cur_depth < depth: + local_overrides[name] = (depth, value) + + # Modify the context with any derived context. + for name, (_, value) in local_overrides.items(): + if value is missing: + data.pop(name, None) + else: + data[name] = value + + return data diff --git a/venv/Lib/site-packages/jinja2/defaults.py b/venv/Lib/site-packages/jinja2/defaults.py new file mode 100644 index 0000000..638cad3 --- /dev/null +++ b/venv/Lib/site-packages/jinja2/defaults.py @@ -0,0 +1,48 @@ +import typing as t + +from .filters import FILTERS as DEFAULT_FILTERS # noqa: F401 +from .tests import TESTS as DEFAULT_TESTS # noqa: F401 +from .utils import Cycler +from .utils import generate_lorem_ipsum +from .utils import Joiner +from .utils import Namespace + +if t.TYPE_CHECKING: + import typing_extensions as te + +# defaults for the parser / lexer +BLOCK_START_STRING = "{%" +BLOCK_END_STRING = "%}" +VARIABLE_START_STRING = "{{" +VARIABLE_END_STRING = "}}" +COMMENT_START_STRING = "{#" +COMMENT_END_STRING = "#}" +LINE_STATEMENT_PREFIX: t.Optional[str] = None +LINE_COMMENT_PREFIX: t.Optional[str] = None +TRIM_BLOCKS = False +LSTRIP_BLOCKS = False +NEWLINE_SEQUENCE: "te.Literal['\\n', '\\r\\n', '\\r']" = "\n" +KEEP_TRAILING_NEWLINE = False + +# default filters, tests and namespace + +DEFAULT_NAMESPACE = { + "range": range, + "dict": dict, + "lipsum": generate_lorem_ipsum, + "cycler": Cycler, + "joiner": Joiner, + "namespace": Namespace, +} + +# default policies +DEFAULT_POLICIES: t.Dict[str, t.Any] = { + "compiler.ascii_str": True, + "urlize.rel": "noopener", + "urlize.target": None, + "urlize.extra_schemes": None, + "truncate.leeway": 5, + "json.dumps_function": None, + "json.dumps_kwargs": {"sort_keys": True}, + "ext.i18n.trimmed": False, +} diff --git a/venv/Lib/site-packages/jinja2/environment.py b/venv/Lib/site-packages/jinja2/environment.py new file mode 100644 index 0000000..ea04e8b --- /dev/null +++ b/venv/Lib/site-packages/jinja2/environment.py @@ -0,0 +1,1667 @@ +"""Classes for managing templates and their runtime and compile time +options. +""" +import os +import typing +import typing as t +import weakref +from collections import ChainMap +from functools import lru_cache +from functools import partial +from functools import reduce +from types import CodeType + +from markupsafe import Markup + +from . import nodes +from .compiler import CodeGenerator +from .compiler import generate +from .defaults import BLOCK_END_STRING +from .defaults import BLOCK_START_STRING +from .defaults import COMMENT_END_STRING +from .defaults import COMMENT_START_STRING +from .defaults import DEFAULT_FILTERS +from .defaults import DEFAULT_NAMESPACE +from .defaults import DEFAULT_POLICIES +from .defaults import DEFAULT_TESTS +from .defaults import KEEP_TRAILING_NEWLINE +from .defaults import LINE_COMMENT_PREFIX +from .defaults import LINE_STATEMENT_PREFIX +from .defaults import LSTRIP_BLOCKS +from .defaults import NEWLINE_SEQUENCE +from .defaults import TRIM_BLOCKS +from .defaults import VARIABLE_END_STRING +from .defaults import VARIABLE_START_STRING +from .exceptions import TemplateNotFound +from .exceptions import TemplateRuntimeError +from .exceptions import TemplatesNotFound +from .exceptions import TemplateSyntaxError +from .exceptions import UndefinedError +from .lexer import get_lexer +from .lexer import Lexer +from .lexer import TokenStream +from .nodes import EvalContext +from .parser import Parser +from .runtime import Context +from .runtime import new_context +from .runtime import Undefined +from .utils import _PassArg +from .utils import concat +from .utils import consume +from .utils import import_string +from .utils import internalcode +from .utils import LRUCache +from .utils import missing + +if t.TYPE_CHECKING: + import typing_extensions as te + from .bccache import BytecodeCache + from .ext import Extension + from .loaders import BaseLoader + +_env_bound = t.TypeVar("_env_bound", bound="Environment") + + +# for direct template usage we have up to ten living environments +@lru_cache(maxsize=10) +def get_spontaneous_environment(cls: t.Type[_env_bound], *args: t.Any) -> _env_bound: + """Return a new spontaneous environment. A spontaneous environment + is used for templates created directly rather than through an + existing environment. + + :param cls: Environment class to create. + :param args: Positional arguments passed to environment. + """ + env = cls(*args) + env.shared = True + return env + + +def create_cache( + size: int, +) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: + """Return the cache class for the given size.""" + if size == 0: + return None + + if size < 0: + return {} + + return LRUCache(size) # type: ignore + + +def copy_cache( + cache: t.Optional[t.MutableMapping], +) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: + """Create an empty copy of the given cache.""" + if cache is None: + return None + + if type(cache) is dict: + return {} + + return LRUCache(cache.capacity) # type: ignore + + +def load_extensions( + environment: "Environment", + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]], +) -> t.Dict[str, "Extension"]: + """Load the extensions from the list and bind it to the environment. + Returns a dict of instantiated extensions. + """ + result = {} + + for extension in extensions: + if isinstance(extension, str): + extension = t.cast(t.Type["Extension"], import_string(extension)) + + result[extension.identifier] = extension(environment) + + return result + + +def _environment_config_check(environment: "Environment") -> "Environment": + """Perform a sanity check on the environment.""" + assert issubclass( + environment.undefined, Undefined + ), "'undefined' must be a subclass of 'jinja2.Undefined'." + assert ( + environment.block_start_string + != environment.variable_start_string + != environment.comment_start_string + ), "block, variable and comment start strings must be different." + assert environment.newline_sequence in { + "\r", + "\r\n", + "\n", + }, "'newline_sequence' must be one of '\\n', '\\r\\n', or '\\r'." + return environment + + +class Environment: + r"""The core component of Jinja is the `Environment`. It contains + important shared variables like configuration, filters, tests, + globals and others. Instances of this class may be modified if + they are not shared and if no template was loaded so far. + Modifications on environments after the first template was loaded + will lead to surprising effects and undefined behavior. + + Here are the possible initialization parameters: + + `block_start_string` + The string marking the beginning of a block. Defaults to ``'{%'``. + + `block_end_string` + The string marking the end of a block. Defaults to ``'%}'``. + + `variable_start_string` + The string marking the beginning of a print statement. + Defaults to ``'{{'``. + + `variable_end_string` + The string marking the end of a print statement. Defaults to + ``'}}'``. + + `comment_start_string` + The string marking the beginning of a comment. Defaults to ``'{#'``. + + `comment_end_string` + The string marking the end of a comment. Defaults to ``'#}'``. + + `line_statement_prefix` + If given and a string, this will be used as prefix for line based + statements. See also :ref:`line-statements`. + + `line_comment_prefix` + If given and a string, this will be used as prefix for line based + comments. See also :ref:`line-statements`. + + .. versionadded:: 2.2 + + `trim_blocks` + If this is set to ``True`` the first newline after a block is + removed (block, not variable tag!). Defaults to `False`. + + `lstrip_blocks` + If this is set to ``True`` leading spaces and tabs are stripped + from the start of a line to a block. Defaults to `False`. + + `newline_sequence` + The sequence that starts a newline. Must be one of ``'\r'``, + ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a + useful default for Linux and OS X systems as well as web + applications. + + `keep_trailing_newline` + Preserve the trailing newline when rendering templates. + The default is ``False``, which causes a single newline, + if present, to be stripped from the end of the template. + + .. versionadded:: 2.7 + + `extensions` + List of Jinja extensions to use. This can either be import paths + as strings or extension classes. For more information have a + look at :ref:`the extensions documentation `. + + `optimized` + should the optimizer be enabled? Default is ``True``. + + `undefined` + :class:`Undefined` or a subclass of it that is used to represent + undefined values in the template. + + `finalize` + A callable that can be used to process the result of a variable + expression before it is output. For example one can convert + ``None`` implicitly into an empty string here. + + `autoescape` + If set to ``True`` the XML/HTML autoescaping feature is enabled by + default. For more details about autoescaping see + :class:`~markupsafe.Markup`. As of Jinja 2.4 this can also + be a callable that is passed the template name and has to + return ``True`` or ``False`` depending on autoescape should be + enabled by default. + + .. versionchanged:: 2.4 + `autoescape` can now be a function + + `loader` + The template loader for this environment. + + `cache_size` + The size of the cache. Per default this is ``400`` which means + that if more than 400 templates are loaded the loader will clean + out the least recently used template. If the cache size is set to + ``0`` templates are recompiled all the time, if the cache size is + ``-1`` the cache will not be cleaned. + + .. versionchanged:: 2.8 + The cache size was increased to 400 from a low 50. + + `auto_reload` + Some loaders load templates from locations where the template + sources may change (ie: file system or database). If + ``auto_reload`` is set to ``True`` (default) every time a template is + requested the loader checks if the source changed and if yes, it + will reload the template. For higher performance it's possible to + disable that. + + `bytecode_cache` + If set to a bytecode cache object, this object will provide a + cache for the internal Jinja bytecode so that templates don't + have to be parsed if they were not changed. + + See :ref:`bytecode-cache` for more information. + + `enable_async` + If set to true this enables async template execution which + allows using async functions and generators. + """ + + #: if this environment is sandboxed. Modifying this variable won't make + #: the environment sandboxed though. For a real sandboxed environment + #: have a look at jinja2.sandbox. This flag alone controls the code + #: generation by the compiler. + sandboxed = False + + #: True if the environment is just an overlay + overlayed = False + + #: the environment this environment is linked to if it is an overlay + linked_to: t.Optional["Environment"] = None + + #: shared environments have this set to `True`. A shared environment + #: must not be modified + shared = False + + #: the class that is used for code generation. See + #: :class:`~jinja2.compiler.CodeGenerator` for more information. + code_generator_class: t.Type["CodeGenerator"] = CodeGenerator + + concat = "".join + + #: the context class that is used for templates. See + #: :class:`~jinja2.runtime.Context` for more information. + context_class: t.Type[Context] = Context + + template_class: t.Type["Template"] + + def __init__( + self, + block_start_string: str = BLOCK_START_STRING, + block_end_string: str = BLOCK_END_STRING, + variable_start_string: str = VARIABLE_START_STRING, + variable_end_string: str = VARIABLE_END_STRING, + comment_start_string: str = COMMENT_START_STRING, + comment_end_string: str = COMMENT_END_STRING, + line_statement_prefix: t.Optional[str] = LINE_STATEMENT_PREFIX, + line_comment_prefix: t.Optional[str] = LINE_COMMENT_PREFIX, + trim_blocks: bool = TRIM_BLOCKS, + lstrip_blocks: bool = LSTRIP_BLOCKS, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = NEWLINE_SEQUENCE, + keep_trailing_newline: bool = KEEP_TRAILING_NEWLINE, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = (), + optimized: bool = True, + undefined: t.Type[Undefined] = Undefined, + finalize: t.Optional[t.Callable[..., t.Any]] = None, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = False, + loader: t.Optional["BaseLoader"] = None, + cache_size: int = 400, + auto_reload: bool = True, + bytecode_cache: t.Optional["BytecodeCache"] = None, + enable_async: bool = False, + ): + # !!Important notice!! + # The constructor accepts quite a few arguments that should be + # passed by keyword rather than position. However it's important to + # not change the order of arguments because it's used at least + # internally in those cases: + # - spontaneous environments (i18n extension and Template) + # - unittests + # If parameter changes are required only add parameters at the end + # and don't change the arguments (or the defaults!) of the arguments + # existing already. + + # lexer / parser information + self.block_start_string = block_start_string + self.block_end_string = block_end_string + self.variable_start_string = variable_start_string + self.variable_end_string = variable_end_string + self.comment_start_string = comment_start_string + self.comment_end_string = comment_end_string + self.line_statement_prefix = line_statement_prefix + self.line_comment_prefix = line_comment_prefix + self.trim_blocks = trim_blocks + self.lstrip_blocks = lstrip_blocks + self.newline_sequence = newline_sequence + self.keep_trailing_newline = keep_trailing_newline + + # runtime information + self.undefined: t.Type[Undefined] = undefined + self.optimized = optimized + self.finalize = finalize + self.autoescape = autoescape + + # defaults + self.filters = DEFAULT_FILTERS.copy() + self.tests = DEFAULT_TESTS.copy() + self.globals = DEFAULT_NAMESPACE.copy() + + # set the loader provided + self.loader = loader + self.cache = create_cache(cache_size) + self.bytecode_cache = bytecode_cache + self.auto_reload = auto_reload + + # configurable policies + self.policies = DEFAULT_POLICIES.copy() + + # load extensions + self.extensions = load_extensions(self, extensions) + + self.is_async = enable_async + _environment_config_check(self) + + def add_extension(self, extension: t.Union[str, t.Type["Extension"]]) -> None: + """Adds an extension after the environment was created. + + .. versionadded:: 2.5 + """ + self.extensions.update(load_extensions(self, [extension])) + + def extend(self, **attributes: t.Any) -> None: + """Add the items to the instance of the environment if they do not exist + yet. This is used by :ref:`extensions ` to register + callbacks and configuration values without breaking inheritance. + """ + for key, value in attributes.items(): + if not hasattr(self, key): + setattr(self, key, value) + + def overlay( + self, + block_start_string: str = missing, + block_end_string: str = missing, + variable_start_string: str = missing, + variable_end_string: str = missing, + comment_start_string: str = missing, + comment_end_string: str = missing, + line_statement_prefix: t.Optional[str] = missing, + line_comment_prefix: t.Optional[str] = missing, + trim_blocks: bool = missing, + lstrip_blocks: bool = missing, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = missing, + keep_trailing_newline: bool = missing, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = missing, + optimized: bool = missing, + undefined: t.Type[Undefined] = missing, + finalize: t.Optional[t.Callable[..., t.Any]] = missing, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = missing, + loader: t.Optional["BaseLoader"] = missing, + cache_size: int = missing, + auto_reload: bool = missing, + bytecode_cache: t.Optional["BytecodeCache"] = missing, + enable_async: bool = False, + ) -> "Environment": + """Create a new overlay environment that shares all the data with the + current environment except for cache and the overridden attributes. + Extensions cannot be removed for an overlayed environment. An overlayed + environment automatically gets all the extensions of the environment it + is linked to plus optional extra extensions. + + Creating overlays should happen after the initial environment was set + up completely. Not all attributes are truly linked, some are just + copied over so modifications on the original environment may not shine + through. + + .. versionchanged:: 3.1.2 + Added the ``newline_sequence``,, ``keep_trailing_newline``, + and ``enable_async`` parameters to match ``__init__``. + """ + args = dict(locals()) + del args["self"], args["cache_size"], args["extensions"], args["enable_async"] + + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.overlayed = True + rv.linked_to = self + + for key, value in args.items(): + if value is not missing: + setattr(rv, key, value) + + if cache_size is not missing: + rv.cache = create_cache(cache_size) + else: + rv.cache = copy_cache(self.cache) + + rv.extensions = {} + for key, value in self.extensions.items(): + rv.extensions[key] = value.bind(rv) + if extensions is not missing: + rv.extensions.update(load_extensions(rv, extensions)) + + if enable_async is not missing: + rv.is_async = enable_async + + return _environment_config_check(rv) + + @property + def lexer(self) -> Lexer: + """The lexer for this environment.""" + return get_lexer(self) + + def iter_extensions(self) -> t.Iterator["Extension"]: + """Iterates over the extensions by priority.""" + return iter(sorted(self.extensions.values(), key=lambda x: x.priority)) + + def getitem( + self, obj: t.Any, argument: t.Union[str, t.Any] + ) -> t.Union[t.Any, Undefined]: + """Get an item or attribute of an object but prefer the item.""" + try: + return obj[argument] + except (AttributeError, TypeError, LookupError): + if isinstance(argument, str): + try: + attr = str(argument) + except Exception: + pass + else: + try: + return getattr(obj, attr) + except AttributeError: + pass + return self.undefined(obj=obj, name=argument) + + def getattr(self, obj: t.Any, attribute: str) -> t.Any: + """Get an item or attribute of an object but prefer the attribute. + Unlike :meth:`getitem` the attribute *must* be a string. + """ + try: + return getattr(obj, attribute) + except AttributeError: + pass + try: + return obj[attribute] + except (TypeError, LookupError, AttributeError): + return self.undefined(obj=obj, name=attribute) + + def _filter_test_common( + self, + name: t.Union[str, Undefined], + value: t.Any, + args: t.Optional[t.Sequence[t.Any]], + kwargs: t.Optional[t.Mapping[str, t.Any]], + context: t.Optional[Context], + eval_ctx: t.Optional[EvalContext], + is_filter: bool, + ) -> t.Any: + if is_filter: + env_map = self.filters + type_name = "filter" + else: + env_map = self.tests + type_name = "test" + + func = env_map.get(name) # type: ignore + + if func is None: + msg = f"No {type_name} named {name!r}." + + if isinstance(name, Undefined): + try: + name._fail_with_undefined_error() + except Exception as e: + msg = f"{msg} ({e}; did you forget to quote the callable name?)" + + raise TemplateRuntimeError(msg) + + args = [value, *(args if args is not None else ())] + kwargs = kwargs if kwargs is not None else {} + pass_arg = _PassArg.from_obj(func) + + if pass_arg is _PassArg.context: + if context is None: + raise TemplateRuntimeError( + f"Attempted to invoke a context {type_name} without context." + ) + + args.insert(0, context) + elif pass_arg is _PassArg.eval_context: + if eval_ctx is None: + if context is not None: + eval_ctx = context.eval_ctx + else: + eval_ctx = EvalContext(self) + + args.insert(0, eval_ctx) + elif pass_arg is _PassArg.environment: + args.insert(0, self) + + return func(*args, **kwargs) + + def call_filter( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a filter on a value the same way the compiler does. + + This might return a coroutine if the filter is running from an + environment in async mode and the filter supports async + execution. It's your responsibility to await this if needed. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, True + ) + + def call_test( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a test on a value the same way the compiler does. + + This might return a coroutine if the test is running from an + environment in async mode and the test supports async execution. + It's your responsibility to await this if needed. + + .. versionchanged:: 3.0 + Tests support ``@pass_context``, etc. decorators. Added + the ``context`` and ``eval_ctx`` parameters. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, False + ) + + @internalcode + def parse( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> nodes.Template: + """Parse the sourcecode and return the abstract syntax tree. This + tree of nodes is used by the compiler to convert the template into + executable source- or bytecode. This is useful for debugging or to + extract information from templates. + + If you are :ref:`developing Jinja extensions ` + this gives you a good overview of the node tree generated. + """ + try: + return self._parse(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def _parse( + self, source: str, name: t.Optional[str], filename: t.Optional[str] + ) -> nodes.Template: + """Internal parsing function used by `parse` and `compile`.""" + return Parser(self, source, name, filename).parse() + + def lex( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> t.Iterator[t.Tuple[int, str, str]]: + """Lex the given sourcecode and return a generator that yields + tokens as tuples in the form ``(lineno, token_type, value)``. + This can be useful for :ref:`extension development ` + and debugging templates. + + This does not perform preprocessing. If you want the preprocessing + of the extensions to be applied you have to filter source through + the :meth:`preprocess` method. + """ + source = str(source) + try: + return self.lexer.tokeniter(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def preprocess( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> str: + """Preprocesses the source with all extensions. This is automatically + called for all parsing and compiling methods but *not* for :meth:`lex` + because there you usually only want the actual source tokenized. + """ + return reduce( + lambda s, e: e.preprocess(s, name, filename), + self.iter_extensions(), + str(source), + ) + + def _tokenize( + self, + source: str, + name: t.Optional[str], + filename: t.Optional[str] = None, + state: t.Optional[str] = None, + ) -> TokenStream: + """Called by the parser to do the preprocessing and filtering + for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + """ + source = self.preprocess(source, name, filename) + stream = self.lexer.tokenize(source, name, filename, state) + + for ext in self.iter_extensions(): + stream = ext.filter_stream(stream) # type: ignore + + if not isinstance(stream, TokenStream): + stream = TokenStream(stream, name, filename) # type: ignore + + return stream + + def _generate( + self, + source: nodes.Template, + name: t.Optional[str], + filename: t.Optional[str], + defer_init: bool = False, + ) -> str: + """Internal hook that can be overridden to hook a different generate + method in. + + .. versionadded:: 2.5 + """ + return generate( # type: ignore + source, + self, + name, + filename, + defer_init=defer_init, + optimized=self.optimized, + ) + + def _compile(self, source: str, filename: str) -> CodeType: + """Internal hook that can be overridden to hook a different compile + method in. + + .. versionadded:: 2.5 + """ + return compile(source, filename, "exec") # type: ignore + + @typing.overload + def compile( # type: ignore + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[False]" = False, + defer_init: bool = False, + ) -> CodeType: + ... + + @typing.overload + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[True]" = ..., + defer_init: bool = False, + ) -> str: + ... + + @internalcode + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: bool = False, + defer_init: bool = False, + ) -> t.Union[str, CodeType]: + """Compile a node or template source code. The `name` parameter is + the load name of the template after it was joined using + :meth:`join_path` if necessary, not the filename on the file system. + the `filename` parameter is the estimated filename of the template on + the file system. If the template came from a database or memory this + can be omitted. + + The return value of this method is a python code object. If the `raw` + parameter is `True` the return value will be a string with python + code equivalent to the bytecode returned otherwise. This method is + mainly used internally. + + `defer_init` is use internally to aid the module code generator. This + causes the generated code to be able to import without the global + environment variable to be set. + + .. versionadded:: 2.4 + `defer_init` parameter added. + """ + source_hint = None + try: + if isinstance(source, str): + source_hint = source + source = self._parse(source, name, filename) + source = self._generate(source, name, filename, defer_init=defer_init) + if raw: + return source + if filename is None: + filename = "

VWK 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 X-zs;3b}b*y`k%6tpRAD1knsNkOm5qu literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/cli.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/cli.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cca657b270546e871fa749261ce33554ca5f98a8 GIT binary patch literal 44339 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/config.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74f685736d339f3d6a4d2566994dfb0dfaea744a GIT binary patch literal 16435 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 NN&)2mKb>^de*sU@i|qga literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/scaffold.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/scaffold.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb9c743ed01f682af912fe25509d914d136e9625 GIT binary patch literal 34827 zcmdUYd2k$8dSB0p0cLOzGax_^B%0s>fCL95#Y2QBQlNNYMNwQ5)B#Z%45l04P=gt4 z_kaf$+=a9(FSy0n%$8JQypj!Xq+KXl+jLIFaaDE`C#lL`GpJ68bc$8Xp^9DQN}!UJ zQdo9Xe&2iDZ@Omyid<{g<>v6A`}Mou_rCkR{%LJ(jfCre&kn1k$ko*|Ei?!6iBkdOWK5Bb^Oz)*nw4Gsm_->RVy{`xZ2<26GyERR1E z9*+z~*nJ>VJ6<vLoLN0y zHPp=RBbk=*HA8FIeQl<7eC^O$c3+oi8(%lHj@{See*MsTcHfX`AD4$@kEDh!Zm_$m z1ySm%Ovm`fp^YBNE2*1)f>$5guce{QhzniZVn-;AcV0LY+mQOn6;tn5;!68<|4^S-IxZ>lbxGM!HX~0d zy~<{!IH2rMw&L&8%C_s$&_QLVvK>!{6z^H7d)J>+1>GJqoXlo(`D8ww%j&1-Sy4xm zlbO7dPUZ1follReikitM@lZE8p(OKa;Um{2vuG#pE3)U#LhygGg|msD6>qg6se zy^>NVSiwkHdtz|#^iewo5%sBL>Vm2yCbS&N%3u9+4{uN~e{~|A9Ycyx|HQ;`EjKxV z`*3Pf)6{G}ftsnbF*Tpia=CnBBALH{h^Ve+mBgr)8&4={O-P)G+o}(^=&ZznXIjH;P6gNeMF)Rf%itl38Qc9pqoUcG|0+SQtMgNaEkV>eDWTln*( zWM)!DGPRVlY7qUL%%gRqW>8b}lUg=KBV}JzxbaDn=W`7=-Qw^QBiB56q_wY$ViD&p#7J-Q)%JTyn)cj~+`#320w7hLGW|(yOn(r_$NRHa z&EOlC=}}vcQd|uUAflZbdJH%3pqbOs9PTQw8~&f5gCC1d685^`o0i5r)1DuD&PZu# z+WUd$H$7*ik30miO$oqJ>Wzes!I?;mrn6}saMc|!{kobN)nwG5bx^Plff*c4WRv5n zPR)^Jd1mIpxo7*%pVL)MKR+_1T+N<8l1ojF1Jv~M$J6-}lOyL}m{7AX<+L}BWpbC# zUsAJ|&Yw(=oY&KNb^Amz^+s|`)z6P+lKLCHdMY_On#(BhiK}MBS|y3m$!uzB18d#5 zn!k`!;s-LhR5GILs;z&@8Re`}cResvr3@+!K!+jaoD#*~YPCjrQHfpm z{{*QWWHPLVFGhI%sNp4L^)e}Hl$Vv3iuhVq;+l&1IcT~i;u=t%7@oQN8 zu8R0p7XL&={93h%kGzspMwI>617)MzhI}dIsfv8-5U(f)E8^E9UR9o{h;K*ysB*X> zUPk6kWBm-p_*YC zG^Yj#to-c=D9D7C2KtI0wr_{yH9YA=QcI4@>G6r2mS zN90Kz37w75iRVZq2wSRJpL`l*T+Zj@q|9Te9XyFV3Km1Bcfiq?R9*yvqFBzi;xFgjTU zRqDA(Ev542h^Yjy;T4#p^d-!7E-nv(0|SA=jDj`fgPYE?8Bgn}+$Den<}`^Jm2+89 z3PH{AumiS+ZLo{SW#rMpVY0dC>yvlIcd&e>57fu>6X2bCP=kAUT0WJ_s%Bln1s`UE z{cKN~8FtiU*1A$ZXyGO0^f-al$@CklU2eUVP!v;dPmu+QX0;g86j4O`B6b0^(DQkW zk)UbMw3M*lfgiz>;8&)>t0a($U(yo<$q-2sZC2*$9ueS4`CiLp#QqQD>Acc>dL$v#m zbJW@OuarZP^2E_t*O({makHi9S%dv{r7|jdw(7BSG}<{72}s?0DrG;@Uz&0Zzvpw} zX5N+ZVh}Od0yxSC_^hODLh^2}Ml6r%Cn4-3i7`Zs1A7oUkV%e@D9M9U8*K^_Pb7eB z@`*%=t+W&U1`5$>G-sp_!@qx|DDO1noin_=?x;o*sYV>9wx5DN3hF6%iUOK9)0fJm z&ALlz^)h2)nJ~xO*60#_68eOiGX0q}1f`f;Okx>zGwPD2tjN{2xMa&zJYJ)@FxQHu zNf^~7Kj~&Ot>8*=NjID5g)Q_E>&*qwptglNwOp5}w>qtLA}X@XSzU0+d{n1aRSfj= zl);Y)ospJeQd{S&-w3tbU$>S1wl22E>2KRojU@N7yZhl-A>4MaW%Hb3Y}s3E*=Mxu zn;lpRNv#`a{Wt5rh)A)vzu)(EA09$W4bt8xDc9OBHc7QDg_fQ86(hTh$gZU-sk+t( zwSUop7w`Lvk#$C7-BN%>Zumm3jFgv4xzUQeo&Qf;juti_E37|WjGQncC#;gXSiPcn zUgsuvB(Jlh5TYLk&Sj-NhA$6eu%K!4I2XWl8D6<47RQgEg`1X2g6WUEitqgZR+s`_u)4m``H?PM`36m?;%M;rk{vY%CUSUs*?4S5Du0(Li>8l!xr;LP)?l6 zmw;|L;r4$bjZSEOM!HwGp%B`@WhOC< zc;m-^*02k>Az{0u6L@p069bh7dya5c#f6+y7Q39KxKZv|OfezBsSCtVCP(yK21*N= zb0j&&QehR3rpG3Ud9b)E&O*h(Hqf{Z4+~x*JqpgloyubKN<7r5?tn%bIMbWcO+Qs+ z`Y-0vS&qHFi8l^-U}$b?wHQ?wzwo~(?RErM&oxq{!3eJ}gty*{Hod*?-2*>7Fz5fE z?vCHs@oX`A#E2d#M2_5#Hs9LKhTIG=9OMEC8bvnpqqxDyd*1AH0)GkEr#)^WH0J~? zSM>DF zD(6x8&N~ zoBAm&VTVk_Bno2htz}y#U!_t|rKU$9Et2}xF(VMrAU0f1>P(DqEPrK^F4!l&XR1X^ zw*_Lha6rgie-TMA*>wyr$c1pvVzk+ab`>IB_rvu@cwHgfeXn`V+n4V)cP=z{&ijq7 zzGCxJM)Om%Cl;d{Ze6)`@Ycb*(XNGP*L<`X-EKs;7b4s5*GFgb9AKPlUI5HtRLU?% z)3j#}_m$TQSU~`hg%vafS|M5AmBuozqO?#UmXoQoD?n~m6J zta^Dft@?EZ_T#HQL^3-K|AQK6A}ry{g(Uqbl3{`0!Ht`4mR5q|S%bIyy5^ns&Undo zk#|7zwAZP+c9SG+gG?|$FiJN(Jf6IgfL<5~j9EDZL^Eo^lnhCE3;>^HqBtj$Ky`e%WIOYS(V50X zBJ=TBj2Gmm;(Jkfy~d!%{FgOfADu22f>I)w*a7`fO9}9%zZuDJUM)Oa^)yls}^7E<;&E z0|UJeRi~th4Nqp!YGzF-6_n1xc$9=DVN_1a%-F<-%q|s`Pg?3FQqibd5}3w;WJ+j1 z1vAW;syNgOL>A~Gd}j5atnVn@?gr42Xvxl9GBj73zHB|V5@SbvzZed4&5GlH3Mh(X zFf+)9-KU$jZ9+Kh&d!p4I}!=c##sQc{Gz-+g6e;RJOrM~}4G2Cf{ zJC`I+b^Km*^{vUf&080mw-%dwjOHE(8jHSw>7XH-# zAEOimpR=8$R#K9xp7i|G98(`Pu%t!EnAC`ZAN6<{L7zQUh;VxYCe+?{3QjjY*p7Vn19e*Zv3_h9oiu- zu@2rslzSb#xzD){9+T-45bk6o-B4Xl%q$6QfneIDVCG7104CS*cLIxBrfWSemk1A| zI|8f-j%8+<5GII=q_y4^=W1&`UOqfTDMfY*qV0+-^(%vD&JjKi*bML5`Oa@|X zpf*I0Oq*5C_D5J-6TGQYO#-Hz(ftHZ#9cCYBDt`=5Z-n#y79xq9~}Sb$seD*6Z@y@ ze;zaX&lNYlXl#117=6izzEp_3)TP~yiFAYZJI#jP4m>3`Q9QYuzhGXXKK5+)dVLq^N zmC&Pu0db%;4aA;|9^4{@buJ%+F+{zRB>f1a0d9UG{t=W}hw@`Q8P~s+AyE)=1hjyJ zg^0g}CM(L%O=Yl^O-yhhgBh%t%#lix!A*wm2~1d`oXct0gGx;U zbCJS~Z6ATb{tYk|6IWrs&z9a(^C=5e5T~M`$K)oKu8vaMJGy1aK%;%47Rp8!NPRZ0 zUQts}mFOu*>iMqGI1Nx&cXz3hK5n(MOD@^UXcX*N+z11Xs~&5em1d(PKUoD6O!moa zTJ3QKFT|NldKZ^p$ift4O&rG2RlYtsLDoc7>5;+QrWFd|FC&vtsYC0KyD+;QTAs!L z7N`zwq@&b;g9Q1eN7F9TU$2&*>ONzQpAIfC3-b~x7PG|oW*dIGgJ#W(R28E!rk_TC zxs`9zmn*13yNbX~Uus>m=Fo$<;!hDK=tpK?f=!SF3(Z}HF#YZ|wiVW$C^illjRS?q zz^C=mcMiXOoC!#=57yslDaQJYSl=f{iuL_QeSaa;&*h^acLXv08jP%FRgQZ}X$Mim zgZ26Nv)~Je&3*M%%lYTE9@)N2`H{%JhzMW|J)eIAH>72q_FaMw|KZre>(Vw%dq+LU z=OHV~w2%AMbo)+$q%&U?ed<|HCT znr>GW2tT*qYg}7sd$HK~lF`U;as8Uv{LQJ`n+o*@@S9&fAHttI$N6I+bb#}(8&Hso zf2E-f)6kM%4$HaE$#0iaIbRz zL{867)rwJ|$14OsmBX-Qe$$<*V*Qgw{gZ{zlMFb%)?s)oxHx_8F-O6N94ifiZ(`C3 z33!^p5NN+eLqRTM^7FdJoR-u!bsuy$4BW9PM^{)9N zcRGvpeMWs>A=LNv56A0|GaRS;2cJFhc%ua29M4}>ikZ_Y6(}OuU(nn$Yo*|Zx;q$JJ-i~h3RzlCvHGzXt)GJ-x zl}sPk+sPd#pf1bx$Z#ypC>uIT?A}>bmHVLS>Klfbzn#^vosScUE_rF&ZZ%ZXAi4o5 zcmj5>Jon$?vK$ygavHX^UJ&Rw)9iHdBHe;$woq?a4EXS{T`X8?#(oQgg} zux822rFyvcEG>-X{hygb$RJ+7Xeh}>eQA_I z9GeI13D%qUlo_&T4a}EsA~#`1oQne%Q}ThZc~ct% z+F&qMax)Q0{)jLM$=_eXqTamz-EaT!+jD*M`C{{Kqj@*%Adz*mN8qe*TbVmCpDaY4 z!tc&L{ukk5G&XyJ;Tdp;tbJktHFif#p3OK4E=T)4YBeFFVE_wjv^I+;2bN>ay-jT+ zA^uD9QC`~Rt8QA7zB;Ip8rBp-Ev#8=yv%Ch1@oYJG#@`h>&s@;ZTGS@@Y}zXR@8*h z@FgrDdk`i=sI4Fp${Vx`?c?}#IS+zvPx2|)`OjD?Lf}va-?Yf7cif7W%E9t524u=r z>kLzlOr|p=XA5w~+JG{L7OI;U6_ZE;a*{kYIoFEyO6o}<;ZP%!$8Nzpn z?SFUhxZIzWnKzdJ7Tb4LOQy-{1)2cAT+5eACd!)3kQ`33Ig~**6({p8Nre|mMAt?~ zj+r44{AFo{0~C{)%gL)~2zmFqDFpX*b&?W-Y)U8kCzdBuz{99#kts(r-4L$ipwb{` zSh)Yd+MU$W97Zi z6LCxFF3Ny0FqcXrmtv`#%2+A#_|3t2oAUwoDiztS6>rxuToU0O9e$J*v-}#c%YC|o ztpPAYqGnn+Y(d*;x@wYJLXs;7VO!oPbag* zK(4|R{MdYtJ@}kUvY$Apq2~g+IB=nDjLNtsk(76Y>jWAguYUr^3xog!9K%9x5gu|N zf&J8;VfuT7+pifj>R4WIU?sLRkst+#o!;uBK(D;%t`^YJt8BU`fl6|9wW9FKnG+0R zzk-#`5LJmG<HqQ+ktOL`9c1@_rjM_{nx#~Hns`Wf(|WUk~&25 z`F=7_bJ;@IRRiQ}O`$SG{Fey>Ju*V-XL zhpn9v+_=ribEvNJQaod2QskpKRX~!$ zjbq>gg-wrnGFbLDMgUO+nOEebOukFxs>e)W*j@(xMvv^U79u5?Xc;cfhR8I=kjS~6pC z*5;>WWh8F57pnL!>;6?y(rXUpi8y63>^4hILYc(|GW?ajDl9IL@4y~`(Xd>@M1PXt zBeL6vEiY?sp(CCMt}SFiBgv0%VQ0JvI>!CbD1|7)Qd{v1#HqRI0NSbRS$djiJbH4I+uz z4%H^(#*>azPKB3M)w1pEVa7F!29-8*#x0;lukBqk4!-FWFy~QV1G5JH6BcJ_29XxX z$#wxJ4C8bGHS65#V5(VQR`-h-Aycx40j=%e8&B?rdKN-G^MiMG6+?TC(B8YDrx!v` zf08VQo-snt6hhC?w)GHKqYxVYTSjUxJshdAJxVT|#jVnB5~xvVO+Y_L zGUQ=C7);*;RW=Ak*#d={i8cmXso7d4PA!eCJ+eLtLPL^M$%QDDflx<- z$2PTM*`33qwO-0MmN6$3R<3IbF*G#Nzas2ofs+$$JUa4WnZ>}X&O-S3d|kL_nO3fZ zdidn8jCqb>g=;^f;P)x`0|YKaQ_Bmm5V6Cu?~2DcJ_5~bVrWLb8``!I+6E(CM=`X= z2<^EWI!ILXfp-#%gNx2Ii8jfEI}mMi1VoBy zhYFtvrejAoW2P=Jgbu*v6bQJT{HL9~7*j=wVyu#35lb?Enu$p|A_Y%bzHuMx>N3nx zvb8Y--bkcccC3^~;ix#FgO-%C+oUOBRlOVs5@vlM!9D7rp~AkviJK&KJ2iD`Q>1V(7P$fT(~q z6t3#lK|i7%w$a6^W<*UTfz+5&J6M&h#a)Rq1fJ!FPmH|KAu=>f8w3S0AY`2tS#4b& zC9%#OVuMjq!ZPgxXlTgXR4NFwtNpFXiC$ zMI?lnJy8wkMN$4$QK8N2kVhTIVB_hr3-FHt>qjlQ$_vzS&=Z}&#FMbZ9I`|~!^3$E zo_@WsQ8IcZV1>E_DS^>0rqFge@DH+;M&~ElE^1gZqVpv(M$nQT%YtV8IvLevknrDa zQelrQ9oS_fgEBt#IMIlQP>TjphD|U^zTf4qpotPR;~=9M8}EkV3!(UY{?3_V=t(2= zNXrGabW`IxR@-~q)x4iA#m9)I6ER;)&H2!2DQLTBMwu8`60j^OPLv`>i8xF< zJMEvcN)*DZ5ai$hPfD+^5adL;gm!T57t|LrZ>(L(ifj~?gf-)(GvQo|!>gU3#j!jW zwW=boW6NsAyHQ#hn^78swl=mhy5?g>D1JAzXCbub4kR^N9Po8>EQhs7{%cqc8LTpU zIRJ9WeS_;4oG0K3$Y;<%CTW*Kva~KNI0e4RU}p`fk}B6unHI&8k+3+#WLosqE%-Xb z92fYPmL(XBEFGFek{PWv)(>J)CO~ljwgSko?*~rpiVWwTa{U7Gkut}&CUVh}Z$FB= zz2q4aSf)_}VTwWyEFbjrj3=|a3MWnugRwK)- znZ%hmWGxQZH1aDA0M?sjKBNBIx=?OpqAINsA>6}JQ<)gdXC9^e+K8{f5H39PXgVTS zUNPzxog$(Amsbv1xI`3cBS6-$hoKbO7RE-=b%JCWUKv;!udH6afT?z&4q86JWe0}o zVHjr9+#n7uyc^oN5Za0J{X)Bq(C$KLw*$kp{(3OXUqd(kEO5pM&S`Wb5<)hXehhmv zNcUi27Lm-Rn_?ndm_;7QgG^ZbK4VZ_VDEr3-aFtYcNw8wh0v}Nc$*;6@B+iputFeu&_rj}yn58uu)PLfFgR^Kh&zp@We3W# zZ68dKv5%Pj3I#Q{ z3A5$T>kwgCWvrsO3|CCH^Q+I{B}N7l?lj^Ma=Ui#*j?#mI|163fEE$k2O%T1(~d{zcGdpr4mkdvFujS4kA!JCU6c%8Z0!|7Ow|Ak5(suq^T)gBv= zAEy&9;A{(;o^0+iIn!C^Ilv3fy+%^d3Bfif09YohSCT5x5yl!RIi~w}deh&0oP!Y5l)rpH}}jN|YPIylwQOUnnM0y+0FQp`{vgkhj%b&M>` zBrk%OwT8=On5HRN{=yg~D{+J90rzWYCX%$Ccp#_oo{ap=Rf5j7B3Fr(T*Pm{{oCy# z&RxJQ7YcLr@?d6rRs1p4zJgapmtgjs@V<;^#h(&cY)47tSrKWt8|hq#bQZeye}ePs zo;D&+7a}-NqTI7v^jl+hP9F=_sNX|*E*}ds;%tV4LOY{>hnhlmN#<~I((_Pf3+9U9 z^tfQ|+(!u^p8#6GIqt+Tk}@O(@l;%NkN=*}M{u+9e!z0o&v`WMn(vyQjtDI|@HWIZ>RY=P_v5fd9HlsiVDp?}z_K&|^L2s!n627eB^pCq95v@b z2acD=p4>7v4%&8c!qIE4)f_}C7{q)BYutST=(PI`P_()9K@DwZwdCByKP{Eue6L8Ckpf==aA2NkPre4NwJtYi z(Hfmc&*DHaIP1M%c61nyAfSUot?OZ>=`Ce#^<2dM27aN{f$~;Ylq?Qi#o4LuajV9r z7|%t~k5M=iPJ0v|{l!+aFuHr3&M+b6gw2Fo=U0rVWV_&K9>%s~SOY{z*m-A@5b_8Z z#X7)C>|Jtx%mUgIn_j7U4|rf^WMEz_?%J>bL@{)3iB+~^QQ1y~hm%(=KLF2({v{;$=si_N0Zl&7MTO4=PV^zkO$zsfBucD&y#iJr~qakv;x3*47=?GJsfZoC1PgGxVH#l~EAwJM>sBs@1+v z&p7ePZj`o-GF4OX?-1Z#9OmwAs*UMpW4nz5?u)_@V)LOJOp z5>`-|J+d0rt}BLnjWDwNsyCv}+v)eRg=kM9(sLgV%B@3%NQX{C{ci1M>BIJZzYoXA z;_9y9=KzZ{h_okZ4v1=KPf*ZD0gGd2$50$5ir6)FZV~pPb=vnl_N*fXOYLWecJVS; zK4*$yN^PZ})Q&Rz+89NYVlVKtES9yGl}1R=Zc(1@J?sb#xOrcp>@49`amTVuQL>Qs zrigt@+QY%8L=uT_!S8}^dN8XJ z2_=_8bbSIG60kAf<(o*bV_W&5jn7d{XDA>;jv0cPkbN_WouFj~;pzuYksZCop_rYx zrBiw$huS3yW+=EpL7W0QUr75Q1@BOBn}Q!vFiXK41#C+HknaA7f`3B6KcnDZQ1CA) z_&Ei{n3)lN5EtJh!O)jR+&%aF>!Lei&{?n#H~L@u2y2!8EqUt$p(Tle4k=JKGcYso z=D^~H%`>M8{>}VX^lx6=*jez$3Vww2EBZTeV(%0C7Po9&-2LRDylJWSj5n};Nm?Pi z;P(WcT$0>D&=csOIA;))f^|TiftDr74nFfC?)u9-wowX3jlh~EuRpK}7|jYONvnvC zurdOHIMACFh%zXmj=ir9#FivG5br5sy%cOR0&A%b;6pp0ByA!(vN{0ga(A$!A%IiL z+`%T4wdAd#{@4K()O0<;V_TX6hdoQu3SqoD@br@84pvLSRZHFg4W}JYiL0)^%45+x z_I^LT=Yiw>e(L=r<$sFu^T3h+DUrXA-t)lmzR!BU4s#^gfp||52dVy$ByU>WzH@Qs zo~3Xf0Y%8{{c3t|2jV?N>|pQ1^xh7{dx~gf@4Kmkb|BtU#EZNE5t_6C4&Y^SHT1)v~GFTGVX&uhW zxM^G1hOU~aPOXin;GBuMx8E{5CugruP4%i*pva}&nq)9#X=rz!u!&k+x3&LF!3m0t zNZ=2RgyYz9vn63?;@`HT^4K>LwEv8hK@5rBfg1?B_@q`-A&dixDH~q8)LmS3Rm(kyk2sY?+V!^vo^@@iel`B2) zRZ8q3fuKs$W?c|e@yUc&FllEcTMWfHQ-jB#CDc8j?}dRf zJ%l&yV6i?nJ2^YK;Uc7=0lMEF^orrhO%0UGd|jv5z0CA7x*CfKtr==Ihh`i^QU{OM59#e4TY& zq)mqGavtJZ`gGcyqy2VD>?CuP=T?BYpMDU`6BB1$vq7AK7PuZl4@GN^lznH%o&Q=O zTkA}%1c}Y$*R{Y3Ep{kL?6hccz+E!b7LHbE{f|@D%;S`wTcjwZ5oGVm@b>;}1MgB~+7|f*JV^($YC)RulV-&m5%Giq-i9 z5eibIzTjqB7cdL*7uyNY+qV%rEBi(GK!_)2Eh=g14#Sw3OhZ&;J zHj-t{j99H?*vL9+jBibRP<>zwCrVzK&<;**rjJqL1E>5Okt}UVk1mq!B*b+bwS4(! z(w`CblKdMXxVD>BuvO8-byqPF+^l8iQld<@ z1>E!`tnY8J&k2c9W>58HRcikoP1Ff*k**6CV}5W=W96W0{}+jxX_&w7Vdjeat()(* z_Aa#c-tiS%cN?v{i~i=B=Wp%2m0a?N18eWa*1dh|Zmee^)-(TFG4_-Zduq1Y`if6u z+wE72jon6LcOlZfko$7CAs<-^;LT_B z8rm3k*G_lsb+a$bz5u4Vy~|jC_~$!~^+#u4__Ti2&C9>_-5-4S_IJ6SrV#2~tZp=_ zpF zCy{jOxJ!hvocY0NkZ6TNpHH?Q4{4!SXq_N9cFXB+d8xvVNu*;YJnu#wPi zKUSS(Yy_(_a4k3;e55+PR-Jx)xb9*76=c2C`br}BST$}~p_jzRRb1udmbVoj?PG0L ztiRp<v&cEg8I>~CRm zL`(|q()UsZDF?5^k}Sk$tjVQAd{7d}NSCgV$xftT)m%v9+X%qPSLH6?c23hXH3C+&0 zAP*0B_pm~S?XAY>3m3M;W(w9(BK=l3u`v-oH1KD1&L{VAiuJE zv>^t*dT<56!L-)C63h@Q#vT&-N{wq?7>{Co2?JB7y+I}-G2&d(o2qqn-}GVNPj%Na zdQ&=!*sQ|muow;WVQ|eLA5JE;Xnz6lG($oV3+V7&&YJ;j{DeMF#Y=4ofkiDD#REyd zO8%YrSSh~8jL`>QK_5o99{4AWPzjF=@@EH`!;i1d-h-#YMv12+!dJb3%uLb#(4 z?pTbjxqYAz?JPt((V|G*&3$*nYZt<6Zyzg$HyYuMcf;Ka;cjl8n4eq-?=FOQ^DlcH z`r#pbT|2tfh;E%fS%^Mah&+iJ8rI%ES*Y(Sgu1A@hFfg~hxq)DXfFIrNY@OS9HuYd zNwGmLu->Iul3KYAp1mKY_ui7pq5B!q29HjXV>qeMa$-XXZR?}Bau=h~Sm{oLk^ovQ&4B7q| zrVmC?b~uL_>!)qVXZVJG`@KfOquF$rZ8$D}x0>F?7;{_Z=D}Q1%!Wa0gPSO=g>uM) z*0z^t`3{}aS}uk2CUTlcMq;1Y2zTNm{CFerf=mf!8(zFfhb)|?Zx5E|T}w%7&)^^j zag-oG@{pMrV)RIC1mDO!a+#?M(mmf!WmURqwUVJv+bZXH9e8FxK=I{5y*N9fp6$jAyZN z?X3-OcNf~W-#KIKIaz3YzS#J@(fIsKJ#3Y?cD}v8u&(!xX6$>R5ItRto;ISV3sS>F zGS#l0{pQVAZcWecGPWHo)E+9<9x`eV&D1QmcisNhdsorm`3__2^Y~tg?8Wy=WG^HF z*;|m>&~P+m)!S@{lk&QvW0t2}#QAaMn;lVK0!kLAP9So~i) m-@d*&;DN!$9W(?zP|vx8#%|9}=#=f?WzQDMw?e>#;QtRn@QeBY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/sessions.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/sessions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72b6eea6277438573a1a7848bb7996e791a27588 GIT binary patch literal 17345 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 Lq6a%vU@Y)|2Mlb) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/signals.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/signals.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..062c300874c66aa083316976ea2c0284ce4c2ba7 GIT binary patch literal 1973 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 Xj#lhzCw&Q1>6hq8~%Y^DDJe)zW5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/testing.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/testing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92f2e0aec3e6c95b152c47c9a094e215cc13bbb5 GIT binary patch literal 14543 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 E1CUMWF#rGn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/typing.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/typing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..044a85de3454b5f445141b18446dea5465c3d179 GIT binary patch literal 3441 zcmb7FOH3Q*7M}5pu>l*~U|wzl$XF1#2Liw zunoA}30_8U?zY5RY6wq2@XeG3U_t@tT{fH_QGwkFBOle_*|A%&zHMWMjAj4CY&5 znUJljt7a`}y7^R_=RoAsrhN@E?5FjqoqcX);9c-!eDByMF#H#B*U#ZbY%HVJD15t& zr5*M;#c$XU){U{eIe;-YY0NV9^K3WIu^GL=`_*TwY#fjuJz#eY)VaB3mDNo znagIO%vx!h^RWmmX$;_@lzkN`8v8J#s2UR$_chlVVD%c@_f;fwswA5Ye8UMjq&Z`` ztbnxkdhd0gdlNm+Au)+G&+j9t`{8 zyqjIhBvtL==2IjHi;}3Km+B)~N+Ly(WP{hcz$s|?WfIlO)ci5T$-J~D8i1h~+RX}_ zikedNG!S<)0#t5f8vYeQ+U5kq&u&YSpamOQF>9MFuh-o9c;n#`N^v>C9KZ$e)du`X zh5?>$Be*Qfl6;R7dBIYFcSFiS;lB_0-_(0J5$e~?#Yo~Yth18XKH&Go#FCWE?IKZC z5-S6<&w|1G*S{NSovoY^{pPy?*HnZ z*_HU5fac^oph3e&`3G!%m7!_6LS4r8`;6+ujr)vYU(Z)5h90Z1XEE9@w? z-_;f>&{=R**p3Pd|641p^Yz_)_|4SowKFj9=aYxw!c=~Tu>E@IL0);iUN>@t?XLP< z&fX79Yryf!TMbb@|C{t-@+f@#x8jxK=@Nb7Dl_HHvYTB068C&bIwG&yLC+s}vsYog zI*U#}jXMSiJ6I=u{$}q`IaxrPqO}u4)ez2p!Ue)}x7X2>WOL@1G(5 znOEMkV0Yocky2R4RG^xO8*8X1aUUxcvJa8S z^uel|8W=o&Qp4uu!`u0ngzY=JbUa$zCM`y|49O;_JzInoarK>N{Am0y6-5`JI^4qr3 zWa;_Ii*oWb{BEkeLnfklEJ}tJFmZ<4`NrZy^WN%%a{K9`DxcF_YR$g$m9|pUm{nQF*Q_yu0q8{ zXuP}lfb>sbs^?=anD#;ON>MG2klq_G!%BBgAzth%^2PR23=f4#_av-*WpL>DpcFod zl#?g(r_py0epJcKLp-|nKNXK|lEE0JE>!(gUq6tA-%b^W@z@-`JV$!xf%42B(D%Hy p!#FsMeT~(Doj!~fR`Jj+61|Up literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/views.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..616aaefc927d1d5f1a5218e411016a95af06b9ac GIT binary patch literal 7310 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-311.pyc b/venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..390a24b4f37325323bf18291bd8506aa27a99e83 GIT binary patch literal 6760 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 timedelta | None: + if value is None or isinstance(value, timedelta): + return value + + return timedelta(seconds=value) + + +class Flask(Scaffold): + """The flask object implements a WSGI application and acts as the central + object. It is passed the name of the module or package of the + application. Once it is created it will act as a central registry for + the view functions, the URL rules, template configuration and much more. + + The name of the package is used to resolve resources from inside the + package or the folder the module is contained in depending on if the + package parameter resolves to an actual python package (a folder with + an :file:`__init__.py` file inside) or a standard module (just a ``.py`` file). + + For more information about resource loading, see :func:`open_resource`. + + Usually you create a :class:`Flask` instance in your main module or + in the :file:`__init__.py` file of your package like this:: + + from flask import Flask + app = Flask(__name__) + + .. admonition:: About the First Parameter + + The idea of the first parameter is to give Flask an idea of what + belongs to your application. This name is used to find resources + on the filesystem, can be used by extensions to improve debugging + information and a lot more. + + So it's important what you provide there. If you are using a single + module, `__name__` is always the correct value. If you however are + using a package, it's usually recommended to hardcode the name of + your package there. + + For example if your application is defined in :file:`yourapplication/app.py` + you should create it with one of the two versions below:: + + app = Flask('yourapplication') + app = Flask(__name__.split('.')[0]) + + Why is that? The application will work even with `__name__`, thanks + to how resources are looked up. However it will make debugging more + painful. Certain extensions can make assumptions based on the + import name of your application. For example the Flask-SQLAlchemy + extension will look for the code in your application that triggered + an SQL query in debug mode. If the import name is not properly set + up, that debugging information is lost. (For example it would only + pick up SQL queries in `yourapplication.app` and not + `yourapplication.views.frontend`) + + .. versionadded:: 0.7 + The `static_url_path`, `static_folder`, and `template_folder` + parameters were added. + + .. versionadded:: 0.8 + The `instance_path` and `instance_relative_config` parameters were + added. + + .. versionadded:: 0.11 + The `root_path` parameter was added. + + .. versionadded:: 1.0 + The ``host_matching`` and ``static_host`` parameters were added. + + .. versionadded:: 1.0 + The ``subdomain_matching`` parameter was added. Subdomain + matching needs to be enabled manually now. Setting + :data:`SERVER_NAME` does not implicitly enable it. + + :param import_name: the name of the application package + :param static_url_path: can be used to specify a different path for the + static files on the web. Defaults to the name + of the `static_folder` folder. + :param static_folder: The folder with static files that is served at + ``static_url_path``. Relative to the application ``root_path`` + or an absolute path. Defaults to ``'static'``. + :param static_host: the host to use when adding the static route. + Defaults to None. Required when using ``host_matching=True`` + with a ``static_folder`` configured. + :param host_matching: set ``url_map.host_matching`` attribute. + Defaults to False. + :param subdomain_matching: consider the subdomain relative to + :data:`SERVER_NAME` when matching routes. Defaults to False. + :param template_folder: the folder that contains the templates that should + be used by the application. Defaults to + ``'templates'`` folder in the root path of the + application. + :param instance_path: An alternative instance path for the application. + By default the folder ``'instance'`` next to the + package or module is assumed to be the instance + path. + :param instance_relative_config: if set to ``True`` relative filenames + for loading the config are assumed to + be relative to the instance path instead + of the application root. + :param root_path: The path to the root of the application files. + This should only be set manually when it can't be detected + automatically, such as for namespace packages. + """ + + #: The class that is used for request objects. See :class:`~flask.Request` + #: for more information. + request_class = Request + + #: The class that is used for response objects. See + #: :class:`~flask.Response` for more information. + response_class = Response + + #: The class of the object assigned to :attr:`aborter`, created by + #: :meth:`create_aborter`. That object is called by + #: :func:`flask.abort` to raise HTTP errors, and can be + #: called directly as well. + #: + #: Defaults to :class:`werkzeug.exceptions.Aborter`. + #: + #: .. versionadded:: 2.2 + aborter_class = Aborter + + #: The class that is used for the Jinja environment. + #: + #: .. versionadded:: 0.11 + jinja_environment = Environment + + #: The class that is used for the :data:`~flask.g` instance. + #: + #: Example use cases for a custom class: + #: + #: 1. Store arbitrary attributes on flask.g. + #: 2. Add a property for lazy per-request database connectors. + #: 3. Return None instead of AttributeError on unexpected attributes. + #: 4. Raise exception if an unexpected attr is set, a "controlled" flask.g. + #: + #: In Flask 0.9 this property was called `request_globals_class` but it + #: was changed in 0.10 to :attr:`app_ctx_globals_class` because the + #: flask.g object is now application context scoped. + #: + #: .. versionadded:: 0.10 + app_ctx_globals_class = _AppCtxGlobals + + #: The class that is used for the ``config`` attribute of this app. + #: Defaults to :class:`~flask.Config`. + #: + #: Example use cases for a custom class: + #: + #: 1. Default values for certain config options. + #: 2. Access to config values through attributes in addition to keys. + #: + #: .. versionadded:: 0.11 + config_class = Config + + #: The testing flag. Set this to ``True`` to enable the test mode of + #: Flask extensions (and in the future probably also Flask itself). + #: For example this might activate test helpers that have an + #: additional runtime cost which should not be enabled by default. + #: + #: If this is enabled and PROPAGATE_EXCEPTIONS is not changed from the + #: default it's implicitly enabled. + #: + #: This attribute can also be configured from the config with the + #: ``TESTING`` configuration key. Defaults to ``False``. + testing = ConfigAttribute("TESTING") + + #: If a secret key is set, cryptographic components can use this to + #: sign cookies and other things. Set this to a complex random value + #: when you want to use the secure cookie for instance. + #: + #: This attribute can also be configured from the config with the + #: :data:`SECRET_KEY` configuration key. Defaults to ``None``. + secret_key = ConfigAttribute("SECRET_KEY") + + #: A :class:`~datetime.timedelta` which is used to set the expiration + #: date of a permanent session. The default is 31 days which makes a + #: permanent session survive for roughly one month. + #: + #: This attribute can also be configured from the config with the + #: ``PERMANENT_SESSION_LIFETIME`` configuration key. Defaults to + #: ``timedelta(days=31)`` + permanent_session_lifetime = ConfigAttribute( + "PERMANENT_SESSION_LIFETIME", get_converter=_make_timedelta + ) + + json_provider_class: type[JSONProvider] = DefaultJSONProvider + """A subclass of :class:`~flask.json.provider.JSONProvider`. An + instance is created and assigned to :attr:`app.json` when creating + the app. + + The default, :class:`~flask.json.provider.DefaultJSONProvider`, uses + Python's built-in :mod:`json` library. A different provider can use + a different JSON library. + + .. versionadded:: 2.2 + """ + + #: Options that are passed to the Jinja environment in + #: :meth:`create_jinja_environment`. Changing these options after + #: the environment is created (accessing :attr:`jinja_env`) will + #: have no effect. + #: + #: .. versionchanged:: 1.1.0 + #: This is a ``dict`` instead of an ``ImmutableDict`` to allow + #: easier configuration. + #: + jinja_options: dict = {} + + #: Default configuration parameters. + default_config = ImmutableDict( + { + "DEBUG": None, + "TESTING": False, + "PROPAGATE_EXCEPTIONS": None, + "SECRET_KEY": None, + "PERMANENT_SESSION_LIFETIME": timedelta(days=31), + "USE_X_SENDFILE": False, + "SERVER_NAME": None, + "APPLICATION_ROOT": "/", + "SESSION_COOKIE_NAME": "session", + "SESSION_COOKIE_DOMAIN": None, + "SESSION_COOKIE_PATH": None, + "SESSION_COOKIE_HTTPONLY": True, + "SESSION_COOKIE_SECURE": False, + "SESSION_COOKIE_SAMESITE": None, + "SESSION_REFRESH_EACH_REQUEST": True, + "MAX_CONTENT_LENGTH": None, + "SEND_FILE_MAX_AGE_DEFAULT": None, + "TRAP_BAD_REQUEST_ERRORS": None, + "TRAP_HTTP_EXCEPTIONS": False, + "EXPLAIN_TEMPLATE_LOADING": False, + "PREFERRED_URL_SCHEME": "http", + "TEMPLATES_AUTO_RELOAD": None, + "MAX_COOKIE_SIZE": 4093, + } + ) + + #: The rule object to use for URL rules created. This is used by + #: :meth:`add_url_rule`. Defaults to :class:`werkzeug.routing.Rule`. + #: + #: .. versionadded:: 0.7 + url_rule_class = Rule + + #: The map object to use for storing the URL rules and routing + #: configuration parameters. Defaults to :class:`werkzeug.routing.Map`. + #: + #: .. versionadded:: 1.1.0 + url_map_class = Map + + #: The :meth:`test_client` method creates an instance of this test + #: client class. Defaults to :class:`~flask.testing.FlaskClient`. + #: + #: .. versionadded:: 0.7 + test_client_class: type[FlaskClient] | None = None + + #: The :class:`~click.testing.CliRunner` subclass, by default + #: :class:`~flask.testing.FlaskCliRunner` that is used by + #: :meth:`test_cli_runner`. Its ``__init__`` method should take a + #: Flask app object as the first argument. + #: + #: .. versionadded:: 1.0 + test_cli_runner_class: type[FlaskCliRunner] | None = None + + #: the session interface to use. By default an instance of + #: :class:`~flask.sessions.SecureCookieSessionInterface` is used here. + #: + #: .. versionadded:: 0.8 + session_interface: SessionInterface = SecureCookieSessionInterface() + + def __init__( + self, + import_name: str, + static_url_path: str | None = None, + static_folder: str | os.PathLike | None = "static", + static_host: str | None = None, + host_matching: bool = False, + subdomain_matching: bool = False, + template_folder: str | os.PathLike | None = "templates", + instance_path: str | None = None, + instance_relative_config: bool = False, + root_path: str | None = None, + ): + super().__init__( + import_name=import_name, + static_folder=static_folder, + static_url_path=static_url_path, + template_folder=template_folder, + root_path=root_path, + ) + + if instance_path is None: + instance_path = self.auto_find_instance_path() + elif not os.path.isabs(instance_path): + raise ValueError( + "If an instance path is provided it must be absolute." + " A relative path was given instead." + ) + + #: Holds the path to the instance folder. + #: + #: .. versionadded:: 0.8 + self.instance_path = instance_path + + #: The configuration dictionary as :class:`Config`. This behaves + #: exactly like a regular dictionary but supports additional methods + #: to load a config from files. + self.config = self.make_config(instance_relative_config) + + #: An instance of :attr:`aborter_class` created by + #: :meth:`make_aborter`. This is called by :func:`flask.abort` + #: to raise HTTP errors, and can be called directly as well. + #: + #: .. versionadded:: 2.2 + #: Moved from ``flask.abort``, which calls this object. + self.aborter = self.make_aborter() + + self.json: JSONProvider = self.json_provider_class(self) + """Provides access to JSON methods. Functions in ``flask.json`` + will call methods on this provider when the application context + is active. Used for handling JSON requests and responses. + + An instance of :attr:`json_provider_class`. Can be customized by + changing that attribute on a subclass, or by assigning to this + attribute afterwards. + + The default, :class:`~flask.json.provider.DefaultJSONProvider`, + uses Python's built-in :mod:`json` library. A different provider + can use a different JSON library. + + .. versionadded:: 2.2 + """ + + #: A list of functions that are called by + #: :meth:`handle_url_build_error` when :meth:`.url_for` raises a + #: :exc:`~werkzeug.routing.BuildError`. Each function is called + #: with ``error``, ``endpoint`` and ``values``. If a function + #: returns ``None`` or raises a ``BuildError``, it is skipped. + #: Otherwise, its return value is returned by ``url_for``. + #: + #: .. versionadded:: 0.9 + self.url_build_error_handlers: list[ + t.Callable[[Exception, str, dict[str, t.Any]], str] + ] = [] + + #: A list of functions that are called when the application context + #: is destroyed. Since the application context is also torn down + #: if the request ends this is the place to store code that disconnects + #: from databases. + #: + #: .. versionadded:: 0.9 + self.teardown_appcontext_funcs: list[ft.TeardownCallable] = [] + + #: A list of shell context processor functions that should be run + #: when a shell context is created. + #: + #: .. versionadded:: 0.11 + self.shell_context_processors: list[ft.ShellContextProcessorCallable] = [] + + #: Maps registered blueprint names to blueprint objects. The + #: dict retains the order the blueprints were registered in. + #: Blueprints can be registered multiple times, this dict does + #: not track how often they were attached. + #: + #: .. versionadded:: 0.7 + self.blueprints: dict[str, Blueprint] = {} + + #: a place where extensions can store application specific state. For + #: example this is where an extension could store database engines and + #: similar things. + #: + #: The key must match the name of the extension module. For example in + #: case of a "Flask-Foo" extension in `flask_foo`, the key would be + #: ``'foo'``. + #: + #: .. versionadded:: 0.7 + self.extensions: dict = {} + + #: The :class:`~werkzeug.routing.Map` for this instance. You can use + #: this to change the routing converters after the class was created + #: but before any routes are connected. Example:: + #: + #: from werkzeug.routing import BaseConverter + #: + #: class ListConverter(BaseConverter): + #: def to_python(self, value): + #: return value.split(',') + #: def to_url(self, values): + #: return ','.join(super(ListConverter, self).to_url(value) + #: for value in values) + #: + #: app = Flask(__name__) + #: app.url_map.converters['list'] = ListConverter + self.url_map = self.url_map_class() + + self.url_map.host_matching = host_matching + self.subdomain_matching = subdomain_matching + + # tracks internally if the application already handled at least one + # request. + self._got_first_request = False + + # Add a static route using the provided static_url_path, static_host, + # and static_folder if there is a configured static_folder. + # Note we do this without checking if static_folder exists. + # For one, it might be created while the server is running (e.g. during + # development). Also, Google App Engine stores static files somewhere + if self.has_static_folder: + assert ( + bool(static_host) == host_matching + ), "Invalid static_host/host_matching combination" + # Use a weakref to avoid creating a reference cycle between the app + # and the view function (see #3761). + self_ref = weakref.ref(self) + self.add_url_rule( + f"{self.static_url_path}/", + endpoint="static", + host=static_host, + view_func=lambda **kw: self_ref().send_static_file(**kw), # type: ignore # noqa: B950 + ) + + # Set the name of the Click group in case someone wants to add + # the app's commands to another CLI tool. + self.cli.name = self.name + + def _check_setup_finished(self, f_name: str) -> None: + if self._got_first_request: + raise AssertionError( + f"The setup method '{f_name}' can no longer be called" + " on the application. It has already handled its first" + " request, any changes will not be applied" + " consistently.\n" + "Make sure all imports, decorators, functions, etc." + " needed to set up the application are done before" + " running it." + ) + + @cached_property + def name(self) -> str: # type: ignore + """The name of the application. This is usually the import name + with the difference that it's guessed from the run file if the + import name is main. This name is used as a display name when + Flask needs the name of the application. It can be set and overridden + to change the value. + + .. versionadded:: 0.8 + """ + if self.import_name == "__main__": + fn = getattr(sys.modules["__main__"], "__file__", None) + if fn is None: + return "__main__" + return os.path.splitext(os.path.basename(fn))[0] + return self.import_name + + @cached_property + def logger(self) -> logging.Logger: + """A standard Python :class:`~logging.Logger` for the app, with + the same name as :attr:`name`. + + In debug mode, the logger's :attr:`~logging.Logger.level` will + be set to :data:`~logging.DEBUG`. + + If there are no handlers configured, a default handler will be + added. See :doc:`/logging` for more information. + + .. versionchanged:: 1.1.0 + The logger takes the same name as :attr:`name` rather than + hard-coding ``"flask.app"``. + + .. versionchanged:: 1.0.0 + Behavior was simplified. The logger is always named + ``"flask.app"``. The level is only set during configuration, + it doesn't check ``app.debug`` each time. Only one format is + used, not different ones depending on ``app.debug``. No + handlers are removed, and a handler is only added if no + handlers are already configured. + + .. versionadded:: 0.3 + """ + return create_logger(self) + + @cached_property + def jinja_env(self) -> Environment: + """The Jinja environment used to load templates. + + The environment is created the first time this property is + accessed. Changing :attr:`jinja_options` after that will have no + effect. + """ + return self.create_jinja_environment() + + @property + def got_first_request(self) -> bool: + """This attribute is set to ``True`` if the application started + handling the first request. + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. + + .. versionadded:: 0.8 + """ + import warnings + + warnings.warn( + "'got_first_request' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return self._got_first_request + + def make_config(self, instance_relative: bool = False) -> Config: + """Used to create the config attribute by the Flask constructor. + The `instance_relative` parameter is passed in from the constructor + of Flask (there named `instance_relative_config`) and indicates if + the config should be relative to the instance path or the root path + of the application. + + .. versionadded:: 0.8 + """ + root_path = self.root_path + if instance_relative: + root_path = self.instance_path + defaults = dict(self.default_config) + defaults["DEBUG"] = get_debug_flag() + return self.config_class(root_path, defaults) + + def make_aborter(self) -> Aborter: + """Create the object to assign to :attr:`aborter`. That object + is called by :func:`flask.abort` to raise HTTP errors, and can + be called directly as well. + + By default, this creates an instance of :attr:`aborter_class`, + which defaults to :class:`werkzeug.exceptions.Aborter`. + + .. versionadded:: 2.2 + """ + return self.aborter_class() + + def auto_find_instance_path(self) -> str: + """Tries to locate the instance path if it was not provided to the + constructor of the application class. It will basically calculate + the path to a folder named ``instance`` next to your main file or + the package. + + .. versionadded:: 0.8 + """ + prefix, package_path = find_package(self.import_name) + if prefix is None: + return os.path.join(package_path, "instance") + return os.path.join(prefix, "var", f"{self.name}-instance") + + def open_instance_resource(self, resource: str, mode: str = "rb") -> t.IO[t.AnyStr]: + """Opens a resource from the application's instance folder + (:attr:`instance_path`). Otherwise works like + :meth:`open_resource`. Instance resources can also be opened for + writing. + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: resource file opening mode, default is 'rb'. + """ + return open(os.path.join(self.instance_path, resource), mode) + + def create_jinja_environment(self) -> Environment: + """Create the Jinja environment based on :attr:`jinja_options` + and the various Jinja-related methods of the app. Changing + :attr:`jinja_options` after this will have no effect. Also adds + Flask-related globals and filters to the environment. + + .. versionchanged:: 0.11 + ``Environment.auto_reload`` set in accordance with + ``TEMPLATES_AUTO_RELOAD`` configuration option. + + .. versionadded:: 0.5 + """ + options = dict(self.jinja_options) + + if "autoescape" not in options: + options["autoescape"] = self.select_jinja_autoescape + + if "auto_reload" not in options: + auto_reload = self.config["TEMPLATES_AUTO_RELOAD"] + + if auto_reload is None: + auto_reload = self.debug + + options["auto_reload"] = auto_reload + + rv = self.jinja_environment(self, **options) + rv.globals.update( + url_for=self.url_for, + get_flashed_messages=get_flashed_messages, + config=self.config, + # request, session and g are normally added with the + # context processor for efficiency reasons but for imported + # templates we also want the proxies in there. + request=request, + session=session, + g=g, + ) + rv.policies["json.dumps_function"] = self.json.dumps + return rv + + def create_global_jinja_loader(self) -> DispatchingJinjaLoader: + """Creates the loader for the Jinja2 environment. Can be used to + override just the loader and keeping the rest unchanged. It's + discouraged to override this function. Instead one should override + the :meth:`jinja_loader` function instead. + + The global loader dispatches between the loaders of the application + and the individual blueprints. + + .. versionadded:: 0.7 + """ + return DispatchingJinjaLoader(self) + + def select_jinja_autoescape(self, filename: str) -> bool: + """Returns ``True`` if autoescaping should be active for the given + template name. If no template name is given, returns `True`. + + .. versionchanged:: 2.2 + Autoescaping is now enabled by default for ``.svg`` files. + + .. versionadded:: 0.5 + """ + if filename is None: + return True + return filename.endswith((".html", ".htm", ".xml", ".xhtml", ".svg")) + + def update_template_context(self, context: dict) -> None: + """Update the template context with some commonly used variables. + This injects request, session, config and g into the template + context as well as everything template context processors want + to inject. Note that the as of Flask 0.6, the original values + in the context will not be overridden if a context processor + decides to return a value with the same key. + + :param context: the context as a dictionary that is updated in place + to add extra variables. + """ + names: t.Iterable[str | None] = (None,) + + # A template may be rendered outside a request context. + if request: + names = chain(names, reversed(request.blueprints)) + + # The values passed to render_template take precedence. Keep a + # copy to re-apply after all context functions. + orig_ctx = context.copy() + + for name in names: + if name in self.template_context_processors: + for func in self.template_context_processors[name]: + context.update(func()) + + context.update(orig_ctx) + + def make_shell_context(self) -> dict: + """Returns the shell context for an interactive shell for this + application. This runs all the registered shell context + processors. + + .. versionadded:: 0.11 + """ + rv = {"app": self, "g": g} + for processor in self.shell_context_processors: + rv.update(processor()) + return rv + + @property + def debug(self) -> bool: + """Whether debug mode is enabled. When using ``flask run`` to start the + development server, an interactive debugger will be shown for unhandled + exceptions, and the server will be reloaded when code changes. This maps to the + :data:`DEBUG` config key. It may not behave as expected if set late. + + **Do not enable debug mode when deploying in production.** + + Default: ``False`` + """ + return self.config["DEBUG"] + + @debug.setter + def debug(self, value: bool) -> None: + self.config["DEBUG"] = value + + if self.config["TEMPLATES_AUTO_RELOAD"] is None: + self.jinja_env.auto_reload = value + + def run( + self, + host: str | None = None, + port: int | None = None, + debug: bool | None = None, + load_dotenv: bool = True, + **options: t.Any, + ) -> None: + """Runs the application on a local development server. + + Do not use ``run()`` in a production setting. It is not intended to + meet security and performance requirements for a production server. + Instead, see :doc:`/deploying/index` for WSGI server recommendations. + + If the :attr:`debug` flag is set the server will automatically reload + for code changes and show a debugger in case an exception happened. + + If you want to run the application in debug mode, but disable the + code execution on the interactive debugger, you can pass + ``use_evalex=False`` as parameter. This will keep the debugger's + traceback screen active, but disable code execution. + + It is not recommended to use this function for development with + automatic reloading as this is badly supported. Instead you should + be using the :command:`flask` command line script's ``run`` support. + + .. admonition:: Keep in Mind + + Flask will suppress any server error with a generic error page + unless it is in debug mode. As such to enable just the + interactive debugger without the code reloading, you have to + invoke :meth:`run` with ``debug=True`` and ``use_reloader=False``. + Setting ``use_debugger`` to ``True`` without being in debug mode + won't catch any exceptions because there won't be any to + catch. + + :param host: the hostname to listen on. Set this to ``'0.0.0.0'`` to + have the server available externally as well. Defaults to + ``'127.0.0.1'`` or the host in the ``SERVER_NAME`` config variable + if present. + :param port: the port of the webserver. Defaults to ``5000`` or the + port defined in the ``SERVER_NAME`` config variable if present. + :param debug: if given, enable or disable debug mode. See + :attr:`debug`. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param options: the options to be forwarded to the underlying Werkzeug + server. See :func:`werkzeug.serving.run_simple` for more + information. + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment + variables from :file:`.env` and :file:`.flaskenv` files. + + The :envvar:`FLASK_DEBUG` environment variable will override :attr:`debug`. + + Threaded mode is enabled by default. + + .. versionchanged:: 0.10 + The default port is now picked from the ``SERVER_NAME`` + variable. + """ + # Ignore this call so that it doesn't start another server if + # the 'flask run' command is used. + if os.environ.get("FLASK_RUN_FROM_CLI") == "true": + if not is_running_from_reloader(): + click.secho( + " * Ignoring a call to 'app.run()' that would block" + " the current 'flask' CLI command.\n" + " Only call 'app.run()' in an 'if __name__ ==" + ' "__main__"\' guard.', + fg="red", + ) + + return + + if get_load_dotenv(load_dotenv): + cli.load_dotenv() + + # if set, env var overrides existing value + if "FLASK_DEBUG" in os.environ: + self.debug = get_debug_flag() + + # debug passed to method overrides all other sources + if debug is not None: + self.debug = bool(debug) + + server_name = self.config.get("SERVER_NAME") + sn_host = sn_port = None + + if server_name: + sn_host, _, sn_port = server_name.partition(":") + + if not host: + if sn_host: + host = sn_host + else: + host = "127.0.0.1" + + if port or port == 0: + port = int(port) + elif sn_port: + port = int(sn_port) + else: + port = 5000 + + options.setdefault("use_reloader", self.debug) + options.setdefault("use_debugger", self.debug) + options.setdefault("threaded", True) + + cli.show_server_banner(self.debug, self.name) + + from werkzeug.serving import run_simple + + try: + run_simple(t.cast(str, host), port, self, **options) + finally: + # reset the first request information if the development server + # reset normally. This makes it possible to restart the server + # without reloader and that stuff from an interactive shell. + self._got_first_request = False + + def test_client(self, use_cookies: bool = True, **kwargs: t.Any) -> FlaskClient: + """Creates a test client for this application. For information + about unit testing head over to :doc:`/testing`. + + Note that if you are testing for assertions or exceptions in your + application code, you must set ``app.testing = True`` in order for the + exceptions to propagate to the test client. Otherwise, the exception + will be handled by the application (not visible to the test client) and + the only indication of an AssertionError or other exception will be a + 500 status code response to the test client. See the :attr:`testing` + attribute. For example:: + + app.testing = True + client = app.test_client() + + The test client can be used in a ``with`` block to defer the closing down + of the context until the end of the ``with`` block. This is useful if + you want to access the context locals for testing:: + + with app.test_client() as c: + rv = c.get('/?vodka=42') + assert request.args['vodka'] == '42' + + Additionally, you may pass optional keyword arguments that will then + be passed to the application's :attr:`test_client_class` constructor. + For example:: + + from flask.testing import FlaskClient + + class CustomClient(FlaskClient): + def __init__(self, *args, **kwargs): + self._authentication = kwargs.pop("authentication") + super(CustomClient,self).__init__( *args, **kwargs) + + app.test_client_class = CustomClient + client = app.test_client(authentication='Basic ....') + + See :class:`~flask.testing.FlaskClient` for more information. + + .. versionchanged:: 0.4 + added support for ``with`` block usage for the client. + + .. versionadded:: 0.7 + The `use_cookies` parameter was added as well as the ability + to override the client to be used by setting the + :attr:`test_client_class` attribute. + + .. versionchanged:: 0.11 + Added `**kwargs` to support passing additional keyword arguments to + the constructor of :attr:`test_client_class`. + """ + cls = self.test_client_class + if cls is None: + from .testing import FlaskClient as cls + return cls( # type: ignore + self, self.response_class, use_cookies=use_cookies, **kwargs + ) + + def test_cli_runner(self, **kwargs: t.Any) -> FlaskCliRunner: + """Create a CLI runner for testing CLI commands. + See :ref:`testing-cli`. + + Returns an instance of :attr:`test_cli_runner_class`, by default + :class:`~flask.testing.FlaskCliRunner`. The Flask app object is + passed as the first argument. + + .. versionadded:: 1.0 + """ + cls = self.test_cli_runner_class + + if cls is None: + from .testing import FlaskCliRunner as cls + + return cls(self, **kwargs) # type: ignore + + @setupmethod + def register_blueprint(self, blueprint: Blueprint, **options: t.Any) -> None: + """Register a :class:`~flask.Blueprint` on the application. Keyword + arguments passed to this method will override the defaults set on the + blueprint. + + Calls the blueprint's :meth:`~flask.Blueprint.register` method after + recording the blueprint in the application's :attr:`blueprints`. + + :param blueprint: The blueprint to register. + :param url_prefix: Blueprint routes will be prefixed with this. + :param subdomain: Blueprint routes will match on this subdomain. + :param url_defaults: Blueprint routes will use these default values for + view arguments. + :param options: Additional keyword arguments are passed to + :class:`~flask.blueprints.BlueprintSetupState`. They can be + accessed in :meth:`~flask.Blueprint.record` callbacks. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + + .. versionadded:: 0.7 + """ + blueprint.register(self, options) + + def iter_blueprints(self) -> t.ValuesView[Blueprint]: + """Iterates over all blueprints by the order they were registered. + + .. versionadded:: 0.11 + """ + return self.blueprints.values() + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) # type: ignore + options["endpoint"] = endpoint + methods = options.pop("methods", None) + + # if the methods are not given and the view_func object knows its + # methods we can use that instead. If neither exists, we go with + # a tuple of only ``GET`` as default. + if methods is None: + methods = getattr(view_func, "methods", None) or ("GET",) + if isinstance(methods, str): + raise TypeError( + "Allowed methods must be a list of strings, for" + ' example: @app.route(..., methods=["POST"])' + ) + methods = {item.upper() for item in methods} + + # Methods that should always be added + required_methods = set(getattr(view_func, "required_methods", ())) + + # starting with Flask 0.8 the view_func object can disable and + # force-enable the automatic options handling. + if provide_automatic_options is None: + provide_automatic_options = getattr( + view_func, "provide_automatic_options", None + ) + + if provide_automatic_options is None: + if "OPTIONS" not in methods: + provide_automatic_options = True + required_methods.add("OPTIONS") + else: + provide_automatic_options = False + + # Add the required methods now. + methods |= required_methods + + rule = self.url_rule_class(rule, methods=methods, **options) + rule.provide_automatic_options = provide_automatic_options # type: ignore + + self.url_map.add(rule) + if view_func is not None: + old_func = self.view_functions.get(endpoint) + if old_func is not None and old_func != view_func: + raise AssertionError( + "View function mapping is overwriting an existing" + f" endpoint function: {endpoint}" + ) + self.view_functions[endpoint] = view_func + + @setupmethod + def template_filter( + self, name: str | None = None + ) -> t.Callable[[T_template_filter], T_template_filter]: + """A decorator that is used to register custom template filter. + You can specify a name for the filter, otherwise the function + name will be used. Example:: + + @app.template_filter() + def reverse(s): + return s[::-1] + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f: T_template_filter) -> T_template_filter: + self.add_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_filter( + self, f: ft.TemplateFilterCallable, name: str | None = None + ) -> None: + """Register a custom template filter. Works exactly like the + :meth:`template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + self.jinja_env.filters[name or f.__name__] = f + + @setupmethod + def template_test( + self, name: str | None = None + ) -> t.Callable[[T_template_test], T_template_test]: + """A decorator that is used to register custom template test. + You can specify a name for the test, otherwise the function + name will be used. Example:: + + @app.template_test() + def is_prime(n): + if n == 2: + return True + for i in range(2, int(math.ceil(math.sqrt(n))) + 1): + if n % i == 0: + return False + return True + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f: T_template_test) -> T_template_test: + self.add_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_test( + self, f: ft.TemplateTestCallable, name: str | None = None + ) -> None: + """Register a custom template test. Works exactly like the + :meth:`template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + self.jinja_env.tests[name or f.__name__] = f + + @setupmethod + def template_global( + self, name: str | None = None + ) -> t.Callable[[T_template_global], T_template_global]: + """A decorator that is used to register a custom template global function. + You can specify a name for the global function, otherwise the function + name will be used. Example:: + + @app.template_global() + def double(n): + return 2 * n + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + + def decorator(f: T_template_global) -> T_template_global: + self.add_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_global( + self, f: ft.TemplateGlobalCallable, name: str | None = None + ) -> None: + """Register a custom template global function. Works exactly like the + :meth:`template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + self.jinja_env.globals[name or f.__name__] = f + + @setupmethod + def teardown_appcontext(self, f: T_teardown) -> T_teardown: + """Registers a function to be called when the application + context is popped. The application context is typically popped + after the request context for each request, at the end of CLI + commands, or after a manually pushed context ends. + + .. code-block:: python + + with app.app_context(): + ... + + When the ``with`` block exits (or ``ctx.pop()`` is called), the + teardown functions are called just before the app context is + made inactive. Since a request context typically also manages an + application context it would also be called when you pop a + request context. + + When a teardown function was called because of an unhandled + exception it will be passed an error object. If an + :meth:`errorhandler` is registered, it will handle the exception + and the teardown will not receive it. + + Teardown functions must avoid raising exceptions. If they + execute code that might fail they must surround that code with a + ``try``/``except`` block and log any errors. + + The return values of teardown functions are ignored. + + .. versionadded:: 0.9 + """ + self.teardown_appcontext_funcs.append(f) + return f + + @setupmethod + def shell_context_processor( + self, f: T_shell_context_processor + ) -> T_shell_context_processor: + """Registers a shell context processor function. + + .. versionadded:: 0.11 + """ + self.shell_context_processors.append(f) + return f + + def _find_error_handler(self, e: Exception) -> ft.ErrorHandlerCallable | None: + """Return a registered error handler for an exception in this order: + blueprint handler for a specific code, app handler for a specific code, + blueprint handler for an exception class, app handler for an exception + class, or ``None`` if a suitable handler is not found. + """ + exc_class, code = self._get_exc_class_and_code(type(e)) + names = (*request.blueprints, None) + + for c in (code, None) if code is not None else (None,): + for name in names: + handler_map = self.error_handler_spec[name][c] + + if not handler_map: + continue + + for cls in exc_class.__mro__: + handler = handler_map.get(cls) + + if handler is not None: + return handler + return None + + def handle_http_exception( + self, e: HTTPException + ) -> HTTPException | ft.ResponseReturnValue: + """Handles an HTTP exception. By default this will invoke the + registered error handlers and fall back to returning the + exception as response. + + .. versionchanged:: 1.0.3 + ``RoutingException``, used internally for actions such as + slash redirects during routing, is not passed to error + handlers. + + .. versionchanged:: 1.0 + Exceptions are looked up by code *and* by MRO, so + ``HTTPException`` subclasses can be handled with a catch-all + handler for the base ``HTTPException``. + + .. versionadded:: 0.3 + """ + # Proxy exceptions don't have error codes. We want to always return + # those unchanged as errors + if e.code is None: + return e + + # RoutingExceptions are used internally to trigger routing + # actions, such as slash redirects raising RequestRedirect. They + # are not raised or handled in user code. + if isinstance(e, RoutingException): + return e + + handler = self._find_error_handler(e) + if handler is None: + return e + return self.ensure_sync(handler)(e) + + def trap_http_exception(self, e: Exception) -> bool: + """Checks if an HTTP exception should be trapped or not. By default + this will return ``False`` for all exceptions except for a bad request + key error if ``TRAP_BAD_REQUEST_ERRORS`` is set to ``True``. It + also returns ``True`` if ``TRAP_HTTP_EXCEPTIONS`` is set to ``True``. + + This is called for all HTTP exceptions raised by a view function. + If it returns ``True`` for any exception the error handler for this + exception is not called and it shows up as regular exception in the + traceback. This is helpful for debugging implicitly raised HTTP + exceptions. + + .. versionchanged:: 1.0 + Bad request errors are not trapped by default in debug mode. + + .. versionadded:: 0.8 + """ + if self.config["TRAP_HTTP_EXCEPTIONS"]: + return True + + trap_bad_request = self.config["TRAP_BAD_REQUEST_ERRORS"] + + # if unset, trap key errors in debug mode + if ( + trap_bad_request is None + and self.debug + and isinstance(e, BadRequestKeyError) + ): + return True + + if trap_bad_request: + return isinstance(e, BadRequest) + + return False + + def handle_user_exception( + self, e: Exception + ) -> HTTPException | ft.ResponseReturnValue: + """This method is called whenever an exception occurs that + should be handled. A special case is :class:`~werkzeug + .exceptions.HTTPException` which is forwarded to the + :meth:`handle_http_exception` method. This function will either + return a response value or reraise the exception with the same + traceback. + + .. versionchanged:: 1.0 + Key errors raised from request data like ``form`` show the + bad key in debug mode rather than a generic bad request + message. + + .. versionadded:: 0.7 + """ + if isinstance(e, BadRequestKeyError) and ( + self.debug or self.config["TRAP_BAD_REQUEST_ERRORS"] + ): + e.show_exception = True + + if isinstance(e, HTTPException) and not self.trap_http_exception(e): + return self.handle_http_exception(e) + + handler = self._find_error_handler(e) + + if handler is None: + raise + + return self.ensure_sync(handler)(e) + + def handle_exception(self, e: Exception) -> Response: + """Handle an exception that did not have an error handler + associated with it, or that was raised from an error handler. + This always causes a 500 ``InternalServerError``. + + Always sends the :data:`got_request_exception` signal. + + If :data:`PROPAGATE_EXCEPTIONS` is ``True``, such as in debug + mode, the error will be re-raised so that the debugger can + display it. Otherwise, the original exception is logged, and + an :exc:`~werkzeug.exceptions.InternalServerError` is returned. + + If an error handler is registered for ``InternalServerError`` or + ``500``, it will be used. For consistency, the handler will + always receive the ``InternalServerError``. The original + unhandled exception is available as ``e.original_exception``. + + .. versionchanged:: 1.1.0 + Always passes the ``InternalServerError`` instance to the + handler, setting ``original_exception`` to the unhandled + error. + + .. versionchanged:: 1.1.0 + ``after_request`` functions and other finalization is done + even for the default 500 response when there is no handler. + + .. versionadded:: 0.3 + """ + exc_info = sys.exc_info() + got_request_exception.send(self, _async_wrapper=self.ensure_sync, exception=e) + propagate = self.config["PROPAGATE_EXCEPTIONS"] + + if propagate is None: + propagate = self.testing or self.debug + + if propagate: + # Re-raise if called with an active exception, otherwise + # raise the passed in exception. + if exc_info[1] is e: + raise + + raise e + + self.log_exception(exc_info) + server_error: InternalServerError | ft.ResponseReturnValue + server_error = InternalServerError(original_exception=e) + handler = self._find_error_handler(server_error) + + if handler is not None: + server_error = self.ensure_sync(handler)(server_error) + + return self.finalize_request(server_error, from_error_handler=True) + + def log_exception( + self, + exc_info: (tuple[type, BaseException, TracebackType] | tuple[None, None, None]), + ) -> None: + """Logs an exception. This is called by :meth:`handle_exception` + if debugging is disabled and right before the handler is called. + The default implementation logs the exception as error on the + :attr:`logger`. + + .. versionadded:: 0.8 + """ + self.logger.error( + f"Exception on {request.path} [{request.method}]", exc_info=exc_info + ) + + def raise_routing_exception(self, request: Request) -> t.NoReturn: + """Intercept routing exceptions and possibly do something else. + + In debug mode, intercept a routing redirect and replace it with + an error if the body will be discarded. + + With modern Werkzeug this shouldn't occur, since it now uses a + 308 status which tells the browser to resend the method and + body. + + .. versionchanged:: 2.1 + Don't intercept 307 and 308 redirects. + + :meta private: + :internal: + """ + if ( + not self.debug + or not isinstance(request.routing_exception, RequestRedirect) + or request.routing_exception.code in {307, 308} + or request.method in {"GET", "HEAD", "OPTIONS"} + ): + raise request.routing_exception # type: ignore + + from .debughelpers import FormDataRoutingRedirect + + raise FormDataRoutingRedirect(request) + + def dispatch_request(self) -> ft.ResponseReturnValue: + """Does the request dispatching. Matches the URL and returns the + return value of the view or error handler. This does not have to + be a response object. In order to convert the return value to a + proper response object, call :func:`make_response`. + + .. versionchanged:: 0.7 + This no longer does the exception handling, this code was + moved to the new :meth:`full_dispatch_request`. + """ + req = request_ctx.request + if req.routing_exception is not None: + self.raise_routing_exception(req) + rule: Rule = req.url_rule # type: ignore[assignment] + # if we provide automatic options for this URL and the + # request came with the OPTIONS method, reply automatically + if ( + getattr(rule, "provide_automatic_options", False) + and req.method == "OPTIONS" + ): + return self.make_default_options_response() + # otherwise dispatch to the handler for that endpoint + view_args: dict[str, t.Any] = req.view_args # type: ignore[assignment] + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + + def full_dispatch_request(self) -> Response: + """Dispatches the request and on top of that performs request + pre and postprocessing as well as HTTP exception catching and + error handling. + + .. versionadded:: 0.7 + """ + self._got_first_request = True + + try: + request_started.send(self, _async_wrapper=self.ensure_sync) + rv = self.preprocess_request() + if rv is None: + rv = self.dispatch_request() + except Exception as e: + rv = self.handle_user_exception(e) + return self.finalize_request(rv) + + def finalize_request( + self, + rv: ft.ResponseReturnValue | HTTPException, + from_error_handler: bool = False, + ) -> Response: + """Given the return value from a view function this finalizes + the request by converting it into a response and invoking the + postprocessing functions. This is invoked for both normal + request dispatching as well as error handlers. + + Because this means that it might be called as a result of a + failure a special safe mode is available which can be enabled + with the `from_error_handler` flag. If enabled, failures in + response processing will be logged and otherwise ignored. + + :internal: + """ + response = self.make_response(rv) + try: + response = self.process_response(response) + request_finished.send( + self, _async_wrapper=self.ensure_sync, response=response + ) + except Exception: + if not from_error_handler: + raise + self.logger.exception( + "Request finalizing failed with an error while handling an error" + ) + return response + + def make_default_options_response(self) -> Response: + """This method is called to create the default ``OPTIONS`` response. + This can be changed through subclassing to change the default + behavior of ``OPTIONS`` responses. + + .. versionadded:: 0.7 + """ + adapter = request_ctx.url_adapter + methods = adapter.allowed_methods() # type: ignore[union-attr] + rv = self.response_class() + rv.allow.update(methods) + return rv + + def should_ignore_error(self, error: BaseException | None) -> bool: + """This is called to figure out if an error should be ignored + or not as far as the teardown system is concerned. If this + function returns ``True`` then the teardown handlers will not be + passed the error. + + .. versionadded:: 0.10 + """ + return False + + def ensure_sync(self, func: t.Callable) -> t.Callable: + """Ensure that the function is synchronous for WSGI workers. + Plain ``def`` functions are returned as-is. ``async def`` + functions are wrapped to run and wait for the response. + + Override this method to change how the app runs async views. + + .. versionadded:: 2.0 + """ + if iscoroutinefunction(func): + return self.async_to_sync(func) + + return func + + def async_to_sync( + self, func: t.Callable[..., t.Coroutine] + ) -> t.Callable[..., t.Any]: + """Return a sync function that will run the coroutine function. + + .. code-block:: python + + result = app.async_to_sync(func)(*args, **kwargs) + + Override this method to change how the app converts async code + to be synchronously callable. + + .. versionadded:: 2.0 + """ + try: + from asgiref.sync import async_to_sync as asgiref_async_to_sync + except ImportError: + raise RuntimeError( + "Install Flask with the 'async' extra in order to use async views." + ) from None + + return asgiref_async_to_sync(func) + + def url_for( + self, + endpoint: str, + *, + _anchor: str | None = None, + _method: str | None = None, + _scheme: str | None = None, + _external: bool | None = None, + **values: t.Any, + ) -> str: + """Generate a URL to the given endpoint with the given values. + + This is called by :func:`flask.url_for`, and can be called + directly as well. + + An *endpoint* is the name of a URL rule, usually added with + :meth:`@app.route() `, and usually the same name as the + view function. A route defined in a :class:`~flask.Blueprint` + will prepend the blueprint's name separated by a ``.`` to the + endpoint. + + In some cases, such as email messages, you want URLs to include + the scheme and domain, like ``https://example.com/hello``. When + not in an active request, URLs will be external by default, but + this requires setting :data:`SERVER_NAME` so Flask knows what + domain to use. :data:`APPLICATION_ROOT` and + :data:`PREFERRED_URL_SCHEME` should also be configured as + needed. This config is only used when not in an active request. + + Functions can be decorated with :meth:`url_defaults` to modify + keyword arguments before the URL is built. + + If building fails for some reason, such as an unknown endpoint + or incorrect values, the app's :meth:`handle_url_build_error` + method is called. If that returns a string, that is returned, + otherwise a :exc:`~werkzeug.routing.BuildError` is raised. + + :param endpoint: The endpoint name associated with the URL to + generate. If this starts with a ``.``, the current blueprint + name (if any) will be used. + :param _anchor: If given, append this as ``#anchor`` to the URL. + :param _method: If given, generate the URL associated with this + method for the endpoint. + :param _scheme: If given, the URL will have this scheme if it + is external. + :param _external: If given, prefer the URL to be internal + (False) or require it to be external (True). External URLs + include the scheme and domain. When not in an active + request, URLs are external by default. + :param values: Values to use for the variable parts of the URL + rule. Unknown keys are appended as query string arguments, + like ``?a=b&c=d``. + + .. versionadded:: 2.2 + Moved from ``flask.url_for``, which calls this method. + """ + req_ctx = _cv_request.get(None) + + if req_ctx is not None: + url_adapter = req_ctx.url_adapter + blueprint_name = req_ctx.request.blueprint + + # If the endpoint starts with "." and the request matches a + # blueprint, the endpoint is relative to the blueprint. + if endpoint[:1] == ".": + if blueprint_name is not None: + endpoint = f"{blueprint_name}{endpoint}" + else: + endpoint = endpoint[1:] + + # When in a request, generate a URL without scheme and + # domain by default, unless a scheme is given. + if _external is None: + _external = _scheme is not None + else: + app_ctx = _cv_app.get(None) + + # If called by helpers.url_for, an app context is active, + # use its url_adapter. Otherwise, app.url_for was called + # directly, build an adapter. + if app_ctx is not None: + url_adapter = app_ctx.url_adapter + else: + url_adapter = self.create_url_adapter(None) + + if url_adapter is None: + raise RuntimeError( + "Unable to build URLs outside an active request" + " without 'SERVER_NAME' configured. Also configure" + " 'APPLICATION_ROOT' and 'PREFERRED_URL_SCHEME' as" + " needed." + ) + + # When outside a request, generate a URL with scheme and + # domain by default. + if _external is None: + _external = True + + # It is an error to set _scheme when _external=False, in order + # to avoid accidental insecure URLs. + if _scheme is not None and not _external: + raise ValueError("When specifying '_scheme', '_external' must be True.") + + self.inject_url_defaults(endpoint, values) + + try: + rv = url_adapter.build( # type: ignore[union-attr] + endpoint, + values, + method=_method, + url_scheme=_scheme, + force_external=_external, + ) + except BuildError as error: + values.update( + _anchor=_anchor, _method=_method, _scheme=_scheme, _external=_external + ) + return self.handle_url_build_error(error, endpoint, values) + + if _anchor is not None: + _anchor = _url_quote(_anchor, safe="%!#$&'()*+,/:;=?@") + rv = f"{rv}#{_anchor}" + + return rv + + def redirect(self, location: str, code: int = 302) -> BaseResponse: + """Create a redirect response object. + + This is called by :func:`flask.redirect`, and can be called + directly as well. + + :param location: The URL to redirect to. + :param code: The status code for the redirect. + + .. versionadded:: 2.2 + Moved from ``flask.redirect``, which calls this method. + """ + return _wz_redirect(location, code=code, Response=self.response_class) + + def make_response(self, rv: ft.ResponseReturnValue) -> Response: + """Convert the return value from a view function to an instance of + :attr:`response_class`. + + :param rv: the return value from the view function. The view function + must return a response. Returning ``None``, or the view ending + without returning, is not allowed. The following types are allowed + for ``view_rv``: + + ``str`` + A response object is created with the string encoded to UTF-8 + as the body. + + ``bytes`` + A response object is created with the bytes as the body. + + ``dict`` + A dictionary that will be jsonify'd before being returned. + + ``list`` + A list that will be jsonify'd before being returned. + + ``generator`` or ``iterator`` + A generator that returns ``str`` or ``bytes`` to be + streamed as the response. + + ``tuple`` + Either ``(body, status, headers)``, ``(body, status)``, or + ``(body, headers)``, where ``body`` is any of the other types + allowed here, ``status`` is a string or an integer, and + ``headers`` is a dictionary or a list of ``(key, value)`` + tuples. If ``body`` is a :attr:`response_class` instance, + ``status`` overwrites the exiting value and ``headers`` are + extended. + + :attr:`response_class` + The object is returned unchanged. + + other :class:`~werkzeug.wrappers.Response` class + The object is coerced to :attr:`response_class`. + + :func:`callable` + The function is called as a WSGI application. The result is + used to create a response object. + + .. versionchanged:: 2.2 + A generator will be converted to a streaming response. + A list will be converted to a JSON response. + + .. versionchanged:: 1.1 + A dict will be converted to a JSON response. + + .. versionchanged:: 0.9 + Previously a tuple was interpreted as the arguments for the + response object. + """ + + status = headers = None + + # unpack tuple returns + if isinstance(rv, tuple): + len_rv = len(rv) + + # a 3-tuple is unpacked directly + if len_rv == 3: + rv, status, headers = rv # type: ignore[misc] + # decide if a 2-tuple has status or headers + elif len_rv == 2: + if isinstance(rv[1], (Headers, dict, tuple, list)): + rv, headers = rv + else: + rv, status = rv # type: ignore[assignment,misc] + # other sized tuples are not allowed + else: + raise TypeError( + "The view function did not return a valid response tuple." + " The tuple must have the form (body, status, headers)," + " (body, status), or (body, headers)." + ) + + # the body must not be None + if rv is None: + raise TypeError( + f"The view function for {request.endpoint!r} did not" + " return a valid response. The function either returned" + " None or ended without a return statement." + ) + + # make sure the body is an instance of the response class + if not isinstance(rv, self.response_class): + if isinstance(rv, (str, bytes, bytearray)) or isinstance(rv, _abc_Iterator): + # let the response class set the status and headers instead of + # waiting to do it manually, so that the class can handle any + # special logic + rv = self.response_class( + rv, + status=status, + headers=headers, # type: ignore[arg-type] + ) + status = headers = None + elif isinstance(rv, (dict, list)): + rv = self.json.response(rv) + elif isinstance(rv, BaseResponse) or callable(rv): + # evaluate a WSGI callable, or coerce a different response + # class to the correct type + try: + rv = self.response_class.force_type( + rv, request.environ # type: ignore[arg-type] + ) + except TypeError as e: + raise TypeError( + f"{e}\nThe view function did not return a valid" + " response. The return type must be a string," + " dict, list, tuple with headers or status," + " Response instance, or WSGI callable, but it" + f" was a {type(rv).__name__}." + ).with_traceback(sys.exc_info()[2]) from None + else: + raise TypeError( + "The view function did not return a valid" + " response. The return type must be a string," + " dict, list, tuple with headers or status," + " Response instance, or WSGI callable, but it was a" + f" {type(rv).__name__}." + ) + + rv = t.cast(Response, rv) + # prefer the status if it was provided + if status is not None: + if isinstance(status, (str, bytes, bytearray)): + rv.status = status + else: + rv.status_code = status + + # extend existing headers with provided headers + if headers: + rv.headers.update(headers) # type: ignore[arg-type] + + return rv + + def create_url_adapter(self, request: Request | None) -> MapAdapter | None: + """Creates a URL adapter for the given request. The URL adapter + is created at a point where the request context is not yet set + up so the request is passed explicitly. + + .. versionadded:: 0.6 + + .. versionchanged:: 0.9 + This can now also be called without a request object when the + URL adapter is created for the application context. + + .. versionchanged:: 1.0 + :data:`SERVER_NAME` no longer implicitly enables subdomain + matching. Use :attr:`subdomain_matching` instead. + """ + if request is not None: + # If subdomain matching is disabled (the default), use the + # default subdomain in all cases. This should be the default + # in Werkzeug but it currently does not have that feature. + if not self.subdomain_matching: + subdomain = self.url_map.default_subdomain or None + else: + subdomain = None + + return self.url_map.bind_to_environ( + request.environ, + server_name=self.config["SERVER_NAME"], + subdomain=subdomain, + ) + # We need at the very least the server name to be set for this + # to work. + if self.config["SERVER_NAME"] is not None: + return self.url_map.bind( + self.config["SERVER_NAME"], + script_name=self.config["APPLICATION_ROOT"], + url_scheme=self.config["PREFERRED_URL_SCHEME"], + ) + + return None + + def inject_url_defaults(self, endpoint: str, values: dict) -> None: + """Injects the URL defaults for the given endpoint directly into + the values dictionary passed. This is used internally and + automatically called on URL building. + + .. versionadded:: 0.7 + """ + names: t.Iterable[str | None] = (None,) + + # url_for may be called outside a request context, parse the + # passed endpoint instead of using request.blueprints. + if "." in endpoint: + names = chain( + names, reversed(_split_blueprint_path(endpoint.rpartition(".")[0])) + ) + + for name in names: + if name in self.url_default_functions: + for func in self.url_default_functions[name]: + func(endpoint, values) + + def handle_url_build_error( + self, error: BuildError, endpoint: str, values: dict[str, t.Any] + ) -> str: + """Called by :meth:`.url_for` if a + :exc:`~werkzeug.routing.BuildError` was raised. If this returns + a value, it will be returned by ``url_for``, otherwise the error + will be re-raised. + + Each function in :attr:`url_build_error_handlers` is called with + ``error``, ``endpoint`` and ``values``. If a function returns + ``None`` or raises a ``BuildError``, it is skipped. Otherwise, + its return value is returned by ``url_for``. + + :param error: The active ``BuildError`` being handled. + :param endpoint: The endpoint being built. + :param values: The keyword arguments passed to ``url_for``. + """ + for handler in self.url_build_error_handlers: + try: + rv = handler(error, endpoint, values) + except BuildError as e: + # make error available outside except block + error = e + else: + if rv is not None: + return rv + + # Re-raise if called with an active exception, otherwise raise + # the passed in exception. + if error is sys.exc_info()[1]: + raise + + raise error + + def preprocess_request(self) -> ft.ResponseReturnValue | None: + """Called before the request is dispatched. Calls + :attr:`url_value_preprocessors` registered with the app and the + current blueprint (if any). Then calls :attr:`before_request_funcs` + registered with the app and the blueprint. + + If any :meth:`before_request` handler returns a non-None value, the + value is handled as if it was the return value from the view, and + further request handling is stopped. + """ + names = (None, *reversed(request.blueprints)) + + for name in names: + if name in self.url_value_preprocessors: + for url_func in self.url_value_preprocessors[name]: + url_func(request.endpoint, request.view_args) + + for name in names: + if name in self.before_request_funcs: + for before_func in self.before_request_funcs[name]: + rv = self.ensure_sync(before_func)() + + if rv is not None: + return rv + + return None + + def process_response(self, response: Response) -> Response: + """Can be overridden in order to modify the response object + before it's sent to the WSGI server. By default this will + call all the :meth:`after_request` decorated functions. + + .. versionchanged:: 0.5 + As of Flask 0.5 the functions registered for after request + execution are called in reverse order of registration. + + :param response: a :attr:`response_class` object. + :return: a new response object or the same, has to be an + instance of :attr:`response_class`. + """ + ctx = request_ctx._get_current_object() # type: ignore[attr-defined] + + for func in ctx._after_request_functions: + response = self.ensure_sync(func)(response) + + for name in chain(request.blueprints, (None,)): + if name in self.after_request_funcs: + for func in reversed(self.after_request_funcs[name]): + response = self.ensure_sync(func)(response) + + if not self.session_interface.is_null_session(ctx.session): + self.session_interface.save_session(self, ctx.session, response) + + return response + + def do_teardown_request( + self, exc: BaseException | None = _sentinel # type: ignore + ) -> None: + """Called after the request is dispatched and the response is + returned, right before the request context is popped. + + This calls all functions decorated with + :meth:`teardown_request`, and :meth:`Blueprint.teardown_request` + if a blueprint handled the request. Finally, the + :data:`request_tearing_down` signal is sent. + + This is called by + :meth:`RequestContext.pop() `, + which may be delayed during testing to maintain access to + resources. + + :param exc: An unhandled exception raised while dispatching the + request. Detected from the current exception information if + not passed. Passed to each teardown function. + + .. versionchanged:: 0.9 + Added the ``exc`` argument. + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + + for name in chain(request.blueprints, (None,)): + if name in self.teardown_request_funcs: + for func in reversed(self.teardown_request_funcs[name]): + self.ensure_sync(func)(exc) + + request_tearing_down.send(self, _async_wrapper=self.ensure_sync, exc=exc) + + def do_teardown_appcontext( + self, exc: BaseException | None = _sentinel # type: ignore + ) -> None: + """Called right before the application context is popped. + + When handling a request, the application context is popped + after the request context. See :meth:`do_teardown_request`. + + This calls all functions decorated with + :meth:`teardown_appcontext`. Then the + :data:`appcontext_tearing_down` signal is sent. + + This is called by + :meth:`AppContext.pop() `. + + .. versionadded:: 0.9 + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + + for func in reversed(self.teardown_appcontext_funcs): + self.ensure_sync(func)(exc) + + appcontext_tearing_down.send(self, _async_wrapper=self.ensure_sync, exc=exc) + + def app_context(self) -> AppContext: + """Create an :class:`~flask.ctx.AppContext`. Use as a ``with`` + block to push the context, which will make :data:`current_app` + point at this application. + + An application context is automatically pushed by + :meth:`RequestContext.push() ` + when handling a request, and when running a CLI command. Use + this to manually create a context outside of these situations. + + :: + + with app.app_context(): + init_db() + + See :doc:`/appcontext`. + + .. versionadded:: 0.9 + """ + return AppContext(self) + + def request_context(self, environ: dict) -> RequestContext: + """Create a :class:`~flask.ctx.RequestContext` representing a + WSGI environment. Use a ``with`` block to push the context, + which will make :data:`request` point at this request. + + See :doc:`/reqcontext`. + + Typically you should not call this from your own code. A request + context is automatically pushed by the :meth:`wsgi_app` when + handling a request. Use :meth:`test_request_context` to create + an environment and context instead of this method. + + :param environ: a WSGI environment + """ + return RequestContext(self, environ) + + def test_request_context(self, *args: t.Any, **kwargs: t.Any) -> RequestContext: + """Create a :class:`~flask.ctx.RequestContext` for a WSGI + environment created from the given values. This is mostly useful + during testing, where you may want to run a function that uses + request data without dispatching a full request. + + See :doc:`/reqcontext`. + + Use a ``with`` block to push the context, which will make + :data:`request` point at the request for the created + environment. :: + + with app.test_request_context(...): + generate_report() + + When using the shell, it may be easier to push and pop the + context manually to avoid indentation. :: + + ctx = app.test_request_context(...) + ctx.push() + ... + ctx.pop() + + Takes the same arguments as Werkzeug's + :class:`~werkzeug.test.EnvironBuilder`, with some defaults from + the application. See the linked Werkzeug docs for most of the + available arguments. Flask-specific behavior is listed here. + + :param path: URL path being requested. + :param base_url: Base URL where the app is being served, which + ``path`` is relative to. If not given, built from + :data:`PREFERRED_URL_SCHEME`, ``subdomain``, + :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`. + :param subdomain: Subdomain name to append to + :data:`SERVER_NAME`. + :param url_scheme: Scheme to use instead of + :data:`PREFERRED_URL_SCHEME`. + :param data: The request body, either as a string or a dict of + form keys and values. + :param json: If given, this is serialized as JSON and passed as + ``data``. Also defaults ``content_type`` to + ``application/json``. + :param args: other positional arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + :param kwargs: other keyword arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + """ + from .testing import EnvironBuilder + + builder = EnvironBuilder(self, *args, **kwargs) + + try: + return self.request_context(builder.get_environ()) + finally: + builder.close() + + def wsgi_app(self, environ: dict, start_response: t.Callable) -> t.Any: + """The actual WSGI application. This is not implemented in + :meth:`__call__` so that middlewares can be applied without + losing a reference to the app object. Instead of doing this:: + + app = MyMiddleware(app) + + It's a better idea to do this instead:: + + app.wsgi_app = MyMiddleware(app.wsgi_app) + + Then you still have the original application object around and + can continue to call methods on it. + + .. versionchanged:: 0.7 + Teardown events for the request and app contexts are called + even if an unhandled error occurs. Other events may not be + called depending on when an error occurs during dispatch. + See :ref:`callbacks-and-errors`. + + :param environ: A WSGI environment. + :param start_response: A callable accepting a status code, + a list of headers, and an optional exception context to + start the response. + """ + ctx = self.request_context(environ) + error: BaseException | None = None + try: + try: + ctx.push() + response = self.full_dispatch_request() + except Exception as e: + error = e + response = self.handle_exception(e) + except: # noqa: B001 + error = sys.exc_info()[1] + raise + return response(environ, start_response) + finally: + if "werkzeug.debug.preserve_context" in environ: + environ["werkzeug.debug.preserve_context"](_cv_app.get()) + environ["werkzeug.debug.preserve_context"](_cv_request.get()) + + if error is not None and self.should_ignore_error(error): + error = None + + ctx.pop(error) + + def __call__(self, environ: dict, start_response: t.Callable) -> t.Any: + """The WSGI server calls the Flask application object as the + WSGI application. This calls :meth:`wsgi_app`, which can be + wrapped to apply middleware. + """ + return self.wsgi_app(environ, start_response) diff --git a/venv/Lib/site-packages/flask/blueprints.py b/venv/Lib/site-packages/flask/blueprints.py new file mode 100644 index 0000000..0407f86 --- /dev/null +++ b/venv/Lib/site-packages/flask/blueprints.py @@ -0,0 +1,626 @@ +from __future__ import annotations + +import os +import typing as t +from collections import defaultdict +from functools import update_wrapper + +from . import typing as ft +from .scaffold import _endpoint_from_view_func +from .scaffold import _sentinel +from .scaffold import Scaffold +from .scaffold import setupmethod + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + +DeferredSetupFunction = t.Callable[["BlueprintSetupState"], t.Callable] +T_after_request = t.TypeVar("T_after_request", bound=ft.AfterRequestCallable) +T_before_request = t.TypeVar("T_before_request", bound=ft.BeforeRequestCallable) +T_error_handler = t.TypeVar("T_error_handler", bound=ft.ErrorHandlerCallable) +T_teardown = t.TypeVar("T_teardown", bound=ft.TeardownCallable) +T_template_context_processor = t.TypeVar( + "T_template_context_processor", bound=ft.TemplateContextProcessorCallable +) +T_template_filter = t.TypeVar("T_template_filter", bound=ft.TemplateFilterCallable) +T_template_global = t.TypeVar("T_template_global", bound=ft.TemplateGlobalCallable) +T_template_test = t.TypeVar("T_template_test", bound=ft.TemplateTestCallable) +T_url_defaults = t.TypeVar("T_url_defaults", bound=ft.URLDefaultCallable) +T_url_value_preprocessor = t.TypeVar( + "T_url_value_preprocessor", bound=ft.URLValuePreprocessorCallable +) + + +class BlueprintSetupState: + """Temporary holder object for registering a blueprint with the + application. An instance of this class is created by the + :meth:`~flask.Blueprint.make_setup_state` method and later passed + to all register callback functions. + """ + + def __init__( + self, + blueprint: Blueprint, + app: Flask, + options: t.Any, + first_registration: bool, + ) -> None: + #: a reference to the current application + self.app = app + + #: a reference to the blueprint that created this setup state. + self.blueprint = blueprint + + #: a dictionary with all options that were passed to the + #: :meth:`~flask.Flask.register_blueprint` method. + self.options = options + + #: as blueprints can be registered multiple times with the + #: application and not everything wants to be registered + #: multiple times on it, this attribute can be used to figure + #: out if the blueprint was registered in the past already. + self.first_registration = first_registration + + subdomain = self.options.get("subdomain") + if subdomain is None: + subdomain = self.blueprint.subdomain + + #: The subdomain that the blueprint should be active for, ``None`` + #: otherwise. + self.subdomain = subdomain + + url_prefix = self.options.get("url_prefix") + if url_prefix is None: + url_prefix = self.blueprint.url_prefix + #: The prefix that should be used for all URLs defined on the + #: blueprint. + self.url_prefix = url_prefix + + self.name = self.options.get("name", blueprint.name) + self.name_prefix = self.options.get("name_prefix", "") + + #: A dictionary with URL defaults that is added to each and every + #: URL that was defined with the blueprint. + self.url_defaults = dict(self.blueprint.url_values_defaults) + self.url_defaults.update(self.options.get("url_defaults", ())) + + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: t.Callable | None = None, + **options: t.Any, + ) -> None: + """A helper method to register a rule (and optionally a view function) + to the application. The endpoint is automatically prefixed with the + blueprint's name. + """ + if self.url_prefix is not None: + if rule: + rule = "/".join((self.url_prefix.rstrip("/"), rule.lstrip("/"))) + else: + rule = self.url_prefix + options.setdefault("subdomain", self.subdomain) + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) # type: ignore + defaults = self.url_defaults + if "defaults" in options: + defaults = dict(defaults, **options.pop("defaults")) + + self.app.add_url_rule( + rule, + f"{self.name_prefix}.{self.name}.{endpoint}".lstrip("."), + view_func, + defaults=defaults, + **options, + ) + + +class Blueprint(Scaffold): + """Represents a blueprint, a collection of routes and other + app-related functions that can be registered on a real application + later. + + A blueprint is an object that allows defining application functions + without requiring an application object ahead of time. It uses the + same decorators as :class:`~flask.Flask`, but defers the need for an + application by recording them for later registration. + + Decorating a function with a blueprint creates a deferred function + that is called with :class:`~flask.blueprints.BlueprintSetupState` + when the blueprint is registered on an application. + + See :doc:`/blueprints` for more information. + + :param name: The name of the blueprint. Will be prepended to each + endpoint name. + :param import_name: The name of the blueprint package, usually + ``__name__``. This helps locate the ``root_path`` for the + blueprint. + :param static_folder: A folder with static files that should be + served by the blueprint's static route. The path is relative to + the blueprint's root path. Blueprint static files are disabled + by default. + :param static_url_path: The url to serve static files from. + Defaults to ``static_folder``. If the blueprint does not have + a ``url_prefix``, the app's static route will take precedence, + and the blueprint's static files won't be accessible. + :param template_folder: A folder with templates that should be added + to the app's template search path. The path is relative to the + blueprint's root path. Blueprint templates are disabled by + default. Blueprint templates have a lower precedence than those + in the app's templates folder. + :param url_prefix: A path to prepend to all of the blueprint's URLs, + to make them distinct from the rest of the app's routes. + :param subdomain: A subdomain that blueprint routes will match on by + default. + :param url_defaults: A dict of default values that blueprint routes + will receive by default. + :param root_path: By default, the blueprint will automatically set + this based on ``import_name``. In certain situations this + automatic detection can fail, so the path can be specified + manually instead. + + .. versionchanged:: 1.1.0 + Blueprints have a ``cli`` group to register nested CLI commands. + The ``cli_group`` parameter controls the name of the group under + the ``flask`` command. + + .. versionadded:: 0.7 + """ + + _got_registered_once = False + + def __init__( + self, + name: str, + import_name: str, + static_folder: str | os.PathLike | None = None, + static_url_path: str | None = None, + template_folder: str | os.PathLike | None = None, + url_prefix: str | None = None, + subdomain: str | None = None, + url_defaults: dict | None = None, + root_path: str | None = None, + cli_group: str | None = _sentinel, # type: ignore + ): + super().__init__( + import_name=import_name, + static_folder=static_folder, + static_url_path=static_url_path, + template_folder=template_folder, + root_path=root_path, + ) + + if not name: + raise ValueError("'name' may not be empty.") + + if "." in name: + raise ValueError("'name' may not contain a dot '.' character.") + + self.name = name + self.url_prefix = url_prefix + self.subdomain = subdomain + self.deferred_functions: list[DeferredSetupFunction] = [] + + if url_defaults is None: + url_defaults = {} + + self.url_values_defaults = url_defaults + self.cli_group = cli_group + self._blueprints: list[tuple[Blueprint, dict]] = [] + + def _check_setup_finished(self, f_name: str) -> None: + if self._got_registered_once: + raise AssertionError( + f"The setup method '{f_name}' can no longer be called on the blueprint" + f" '{self.name}'. It has already been registered at least once, any" + " changes will not be applied consistently.\n" + "Make sure all imports, decorators, functions, etc. needed to set up" + " the blueprint are done before registering it." + ) + + @setupmethod + def record(self, func: t.Callable) -> None: + """Registers a function that is called when the blueprint is + registered on the application. This function is called with the + state as argument as returned by the :meth:`make_setup_state` + method. + """ + self.deferred_functions.append(func) + + @setupmethod + def record_once(self, func: t.Callable) -> None: + """Works like :meth:`record` but wraps the function in another + function that will ensure the function is only called once. If the + blueprint is registered a second time on the application, the + function passed is not called. + """ + + def wrapper(state: BlueprintSetupState) -> None: + if state.first_registration: + func(state) + + self.record(update_wrapper(wrapper, func)) + + def make_setup_state( + self, app: Flask, options: dict, first_registration: bool = False + ) -> BlueprintSetupState: + """Creates an instance of :meth:`~flask.blueprints.BlueprintSetupState` + object that is later passed to the register callback functions. + Subclasses can override this to return a subclass of the setup state. + """ + return BlueprintSetupState(self, app, options, first_registration) + + @setupmethod + def register_blueprint(self, blueprint: Blueprint, **options: t.Any) -> None: + """Register a :class:`~flask.Blueprint` on this blueprint. Keyword + arguments passed to this method will override the defaults set + on the blueprint. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + + .. versionadded:: 2.0 + """ + if blueprint is self: + raise ValueError("Cannot register a blueprint on itself") + self._blueprints.append((blueprint, options)) + + def register(self, app: Flask, options: dict) -> None: + """Called by :meth:`Flask.register_blueprint` to register all + views and callbacks registered on the blueprint with the + application. Creates a :class:`.BlueprintSetupState` and calls + each :meth:`record` callback with it. + + :param app: The application this blueprint is being registered + with. + :param options: Keyword arguments forwarded from + :meth:`~Flask.register_blueprint`. + + .. versionchanged:: 2.3 + Nested blueprints now correctly apply subdomains. + + .. versionchanged:: 2.1 + Registering the same blueprint with the same name multiple + times is an error. + + .. versionchanged:: 2.0.1 + Nested blueprints are registered with their dotted name. + This allows different blueprints with the same name to be + nested at different locations. + + .. versionchanged:: 2.0.1 + The ``name`` option can be used to change the (pre-dotted) + name the blueprint is registered with. This allows the same + blueprint to be registered multiple times with unique names + for ``url_for``. + """ + name_prefix = options.get("name_prefix", "") + self_name = options.get("name", self.name) + name = f"{name_prefix}.{self_name}".lstrip(".") + + if name in app.blueprints: + bp_desc = "this" if app.blueprints[name] is self else "a different" + existing_at = f" '{name}'" if self_name != name else "" + + raise ValueError( + f"The name '{self_name}' is already registered for" + f" {bp_desc} blueprint{existing_at}. Use 'name=' to" + f" provide a unique name." + ) + + first_bp_registration = not any(bp is self for bp in app.blueprints.values()) + first_name_registration = name not in app.blueprints + + app.blueprints[name] = self + self._got_registered_once = True + state = self.make_setup_state(app, options, first_bp_registration) + + if self.has_static_folder: + state.add_url_rule( + f"{self.static_url_path}/", + view_func=self.send_static_file, + endpoint="static", + ) + + # Merge blueprint data into parent. + if first_bp_registration or first_name_registration: + + def extend(bp_dict, parent_dict): + for key, values in bp_dict.items(): + key = name if key is None else f"{name}.{key}" + parent_dict[key].extend(values) + + for key, value in self.error_handler_spec.items(): + key = name if key is None else f"{name}.{key}" + value = defaultdict( + dict, + { + code: { + exc_class: func for exc_class, func in code_values.items() + } + for code, code_values in value.items() + }, + ) + app.error_handler_spec[key] = value + + for endpoint, func in self.view_functions.items(): + app.view_functions[endpoint] = func + + extend(self.before_request_funcs, app.before_request_funcs) + extend(self.after_request_funcs, app.after_request_funcs) + extend( + self.teardown_request_funcs, + app.teardown_request_funcs, + ) + extend(self.url_default_functions, app.url_default_functions) + extend(self.url_value_preprocessors, app.url_value_preprocessors) + extend(self.template_context_processors, app.template_context_processors) + + for deferred in self.deferred_functions: + deferred(state) + + cli_resolved_group = options.get("cli_group", self.cli_group) + + if self.cli.commands: + if cli_resolved_group is None: + app.cli.commands.update(self.cli.commands) + elif cli_resolved_group is _sentinel: + self.cli.name = name + app.cli.add_command(self.cli) + else: + self.cli.name = cli_resolved_group + app.cli.add_command(self.cli) + + for blueprint, bp_options in self._blueprints: + bp_options = bp_options.copy() + bp_url_prefix = bp_options.get("url_prefix") + bp_subdomain = bp_options.get("subdomain") + + if bp_subdomain is None: + bp_subdomain = blueprint.subdomain + + if state.subdomain is not None and bp_subdomain is not None: + bp_options["subdomain"] = bp_subdomain + "." + state.subdomain + elif bp_subdomain is not None: + bp_options["subdomain"] = bp_subdomain + elif state.subdomain is not None: + bp_options["subdomain"] = state.subdomain + + if bp_url_prefix is None: + bp_url_prefix = blueprint.url_prefix + + if state.url_prefix is not None and bp_url_prefix is not None: + bp_options["url_prefix"] = ( + state.url_prefix.rstrip("/") + "/" + bp_url_prefix.lstrip("/") + ) + elif bp_url_prefix is not None: + bp_options["url_prefix"] = bp_url_prefix + elif state.url_prefix is not None: + bp_options["url_prefix"] = state.url_prefix + + bp_options["name_prefix"] = name + blueprint.register(app, bp_options) + + @setupmethod + def add_url_rule( + self, + rule: str, + endpoint: str | None = None, + view_func: ft.RouteCallable | None = None, + provide_automatic_options: bool | None = None, + **options: t.Any, + ) -> None: + """Register a URL rule with the blueprint. See :meth:`.Flask.add_url_rule` for + full documentation. + + The URL rule is prefixed with the blueprint's URL prefix. The endpoint name, + used with :func:`url_for`, is prefixed with the blueprint's name. + """ + if endpoint and "." in endpoint: + raise ValueError("'endpoint' may not contain a dot '.' character.") + + if view_func and hasattr(view_func, "__name__") and "." in view_func.__name__: + raise ValueError("'view_func' name may not contain a dot '.' character.") + + self.record( + lambda s: s.add_url_rule( + rule, + endpoint, + view_func, + provide_automatic_options=provide_automatic_options, + **options, + ) + ) + + @setupmethod + def app_template_filter( + self, name: str | None = None + ) -> t.Callable[[T_template_filter], T_template_filter]: + """Register a template filter, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_filter`. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f: T_template_filter) -> T_template_filter: + self.add_app_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_filter( + self, f: ft.TemplateFilterCallable, name: str | None = None + ) -> None: + """Register a template filter, available in any template rendered by the + application. Works like the :meth:`app_template_filter` decorator. Equivalent to + :meth:`.Flask.add_template_filter`. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.filters[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def app_template_test( + self, name: str | None = None + ) -> t.Callable[[T_template_test], T_template_test]: + """Register a template test, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_test`. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f: T_template_test) -> T_template_test: + self.add_app_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_test( + self, f: ft.TemplateTestCallable, name: str | None = None + ) -> None: + """Register a template test, available in any template rendered by the + application. Works like the :meth:`app_template_test` decorator. Equivalent to + :meth:`.Flask.add_template_test`. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.tests[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def app_template_global( + self, name: str | None = None + ) -> t.Callable[[T_template_global], T_template_global]: + """Register a template global, available in any template rendered by the + application. Equivalent to :meth:`.Flask.template_global`. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def decorator(f: T_template_global) -> T_template_global: + self.add_app_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_app_template_global( + self, f: ft.TemplateGlobalCallable, name: str | None = None + ) -> None: + """Register a template global, available in any template rendered by the + application. Works like the :meth:`app_template_global` decorator. Equivalent to + :meth:`.Flask.add_template_global`. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def register_template(state: BlueprintSetupState) -> None: + state.app.jinja_env.globals[name or f.__name__] = f + + self.record_once(register_template) + + @setupmethod + def before_app_request(self, f: T_before_request) -> T_before_request: + """Like :meth:`before_request`, but before every request, not only those handled + by the blueprint. Equivalent to :meth:`.Flask.before_request`. + """ + self.record_once( + lambda s: s.app.before_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def after_app_request(self, f: T_after_request) -> T_after_request: + """Like :meth:`after_request`, but after every request, not only those handled + by the blueprint. Equivalent to :meth:`.Flask.after_request`. + """ + self.record_once( + lambda s: s.app.after_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def teardown_app_request(self, f: T_teardown) -> T_teardown: + """Like :meth:`teardown_request`, but after every request, not only those + handled by the blueprint. Equivalent to :meth:`.Flask.teardown_request`. + """ + self.record_once( + lambda s: s.app.teardown_request_funcs.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_context_processor( + self, f: T_template_context_processor + ) -> T_template_context_processor: + """Like :meth:`context_processor`, but for templates rendered by every view, not + only by the blueprint. Equivalent to :meth:`.Flask.context_processor`. + """ + self.record_once( + lambda s: s.app.template_context_processors.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_errorhandler( + self, code: type[Exception] | int + ) -> t.Callable[[T_error_handler], T_error_handler]: + """Like :meth:`errorhandler`, but for every request, not only those handled by + the blueprint. Equivalent to :meth:`.Flask.errorhandler`. + """ + + def decorator(f: T_error_handler) -> T_error_handler: + self.record_once(lambda s: s.app.errorhandler(code)(f)) + return f + + return decorator + + @setupmethod + def app_url_value_preprocessor( + self, f: T_url_value_preprocessor + ) -> T_url_value_preprocessor: + """Like :meth:`url_value_preprocessor`, but for every request, not only those + handled by the blueprint. Equivalent to :meth:`.Flask.url_value_preprocessor`. + """ + self.record_once( + lambda s: s.app.url_value_preprocessors.setdefault(None, []).append(f) + ) + return f + + @setupmethod + def app_url_defaults(self, f: T_url_defaults) -> T_url_defaults: + """Like :meth:`url_defaults`, but for every request, not only those handled by + the blueprint. Equivalent to :meth:`.Flask.url_defaults`. + """ + self.record_once( + lambda s: s.app.url_default_functions.setdefault(None, []).append(f) + ) + return f diff --git a/venv/Lib/site-packages/flask/cli.py b/venv/Lib/site-packages/flask/cli.py new file mode 100644 index 0000000..dda266b --- /dev/null +++ b/venv/Lib/site-packages/flask/cli.py @@ -0,0 +1,1068 @@ +from __future__ import annotations + +import ast +import importlib.metadata +import inspect +import os +import platform +import re +import sys +import traceback +import typing as t +from functools import update_wrapper +from operator import itemgetter + +import click +from click.core import ParameterSource +from werkzeug import run_simple +from werkzeug.serving import is_running_from_reloader +from werkzeug.utils import import_string + +from .globals import current_app +from .helpers import get_debug_flag +from .helpers import get_load_dotenv + +if t.TYPE_CHECKING: + from .app import Flask + + +class NoAppException(click.UsageError): + """Raised if an application cannot be found or loaded.""" + + +def find_best_app(module): + """Given a module instance this tries to find the best possible + application in the module or raises an exception. + """ + from . import Flask + + # Search for the most common names first. + for attr_name in ("app", "application"): + app = getattr(module, attr_name, None) + + if isinstance(app, Flask): + return app + + # Otherwise find the only object that is a Flask instance. + matches = [v for v in module.__dict__.values() if isinstance(v, Flask)] + + if len(matches) == 1: + return matches[0] + elif len(matches) > 1: + raise NoAppException( + "Detected multiple Flask applications in module" + f" '{module.__name__}'. Use '{module.__name__}:name'" + " to specify the correct one." + ) + + # Search for app factory functions. + for attr_name in ("create_app", "make_app"): + app_factory = getattr(module, attr_name, None) + + if inspect.isfunction(app_factory): + try: + app = app_factory() + + if isinstance(app, Flask): + return app + except TypeError as e: + if not _called_with_wrong_args(app_factory): + raise + + raise NoAppException( + f"Detected factory '{attr_name}' in module '{module.__name__}'," + " but could not call it without arguments. Use" + f" '{module.__name__}:{attr_name}(args)'" + " to specify arguments." + ) from e + + raise NoAppException( + "Failed to find Flask application or factory in module" + f" '{module.__name__}'. Use '{module.__name__}:name'" + " to specify one." + ) + + +def _called_with_wrong_args(f): + """Check whether calling a function raised a ``TypeError`` because + the call failed or because something in the factory raised the + error. + + :param f: The function that was called. + :return: ``True`` if the call failed. + """ + tb = sys.exc_info()[2] + + try: + while tb is not None: + if tb.tb_frame.f_code is f.__code__: + # In the function, it was called successfully. + return False + + tb = tb.tb_next + + # Didn't reach the function. + return True + finally: + # Delete tb to break a circular reference. + # https://docs.python.org/2/library/sys.html#sys.exc_info + del tb + + +def find_app_by_string(module, app_name): + """Check if the given string is a variable name or a function. Call + a function to get the app instance, or return the variable directly. + """ + from . import Flask + + # Parse app_name as a single expression to determine if it's a valid + # attribute name or function call. + try: + expr = ast.parse(app_name.strip(), mode="eval").body + except SyntaxError: + raise NoAppException( + f"Failed to parse {app_name!r} as an attribute name or function call." + ) from None + + if isinstance(expr, ast.Name): + name = expr.id + args = [] + kwargs = {} + elif isinstance(expr, ast.Call): + # Ensure the function name is an attribute name only. + if not isinstance(expr.func, ast.Name): + raise NoAppException( + f"Function reference must be a simple name: {app_name!r}." + ) + + name = expr.func.id + + # Parse the positional and keyword arguments as literals. + try: + args = [ast.literal_eval(arg) for arg in expr.args] + kwargs = {kw.arg: ast.literal_eval(kw.value) for kw in expr.keywords} + except ValueError: + # literal_eval gives cryptic error messages, show a generic + # message with the full expression instead. + raise NoAppException( + f"Failed to parse arguments as literal values: {app_name!r}." + ) from None + else: + raise NoAppException( + f"Failed to parse {app_name!r} as an attribute name or function call." + ) + + try: + attr = getattr(module, name) + except AttributeError as e: + raise NoAppException( + f"Failed to find attribute {name!r} in {module.__name__!r}." + ) from e + + # If the attribute is a function, call it with any args and kwargs + # to get the real application. + if inspect.isfunction(attr): + try: + app = attr(*args, **kwargs) + except TypeError as e: + if not _called_with_wrong_args(attr): + raise + + raise NoAppException( + f"The factory {app_name!r} in module" + f" {module.__name__!r} could not be called with the" + " specified arguments." + ) from e + else: + app = attr + + if isinstance(app, Flask): + return app + + raise NoAppException( + "A valid Flask application was not obtained from" + f" '{module.__name__}:{app_name}'." + ) + + +def prepare_import(path): + """Given a filename this will try to calculate the python path, add it + to the search path and return the actual module name that is expected. + """ + path = os.path.realpath(path) + + fname, ext = os.path.splitext(path) + if ext == ".py": + path = fname + + if os.path.basename(path) == "__init__": + path = os.path.dirname(path) + + module_name = [] + + # move up until outside package structure (no __init__.py) + while True: + path, name = os.path.split(path) + module_name.append(name) + + if not os.path.exists(os.path.join(path, "__init__.py")): + break + + if sys.path[0] != path: + sys.path.insert(0, path) + + return ".".join(module_name[::-1]) + + +def locate_app(module_name, app_name, raise_if_not_found=True): + try: + __import__(module_name) + except ImportError: + # Reraise the ImportError if it occurred within the imported module. + # Determine this by checking whether the trace has a depth > 1. + if sys.exc_info()[2].tb_next: + raise NoAppException( + f"While importing {module_name!r}, an ImportError was" + f" raised:\n\n{traceback.format_exc()}" + ) from None + elif raise_if_not_found: + raise NoAppException(f"Could not import {module_name!r}.") from None + else: + return + + module = sys.modules[module_name] + + if app_name is None: + return find_best_app(module) + else: + return find_app_by_string(module, app_name) + + +def get_version(ctx, param, value): + if not value or ctx.resilient_parsing: + return + + flask_version = importlib.metadata.version("flask") + werkzeug_version = importlib.metadata.version("werkzeug") + + click.echo( + f"Python {platform.python_version()}\n" + f"Flask {flask_version}\n" + f"Werkzeug {werkzeug_version}", + color=ctx.color, + ) + ctx.exit() + + +version_option = click.Option( + ["--version"], + help="Show the Flask version.", + expose_value=False, + callback=get_version, + is_flag=True, + is_eager=True, +) + + +class ScriptInfo: + """Helper object to deal with Flask applications. This is usually not + necessary to interface with as it's used internally in the dispatching + to click. In future versions of Flask this object will most likely play + a bigger role. Typically it's created automatically by the + :class:`FlaskGroup` but you can also manually create it and pass it + onwards as click object. + """ + + def __init__( + self, + app_import_path: str | None = None, + create_app: t.Callable[..., Flask] | None = None, + set_debug_flag: bool = True, + ) -> None: + #: Optionally the import path for the Flask application. + self.app_import_path = app_import_path + #: Optionally a function that is passed the script info to create + #: the instance of the application. + self.create_app = create_app + #: A dictionary with arbitrary data that can be associated with + #: this script info. + self.data: dict[t.Any, t.Any] = {} + self.set_debug_flag = set_debug_flag + self._loaded_app: Flask | None = None + + def load_app(self) -> Flask: + """Loads the Flask app (if not yet loaded) and returns it. Calling + this multiple times will just result in the already loaded app to + be returned. + """ + if self._loaded_app is not None: + return self._loaded_app + + if self.create_app is not None: + app = self.create_app() + else: + if self.app_import_path: + path, name = ( + re.split(r":(?![\\/])", self.app_import_path, maxsplit=1) + [None] + )[:2] + import_name = prepare_import(path) + app = locate_app(import_name, name) + else: + for path in ("wsgi.py", "app.py"): + import_name = prepare_import(path) + app = locate_app(import_name, None, raise_if_not_found=False) + + if app: + break + + if not app: + raise NoAppException( + "Could not locate a Flask application. Use the" + " 'flask --app' option, 'FLASK_APP' environment" + " variable, or a 'wsgi.py' or 'app.py' file in the" + " current directory." + ) + + if self.set_debug_flag: + # Update the app's debug flag through the descriptor so that + # other values repopulate as well. + app.debug = get_debug_flag() + + self._loaded_app = app + return app + + +pass_script_info = click.make_pass_decorator(ScriptInfo, ensure=True) + + +def with_appcontext(f): + """Wraps a callback so that it's guaranteed to be executed with the + script's application context. + + Custom commands (and their options) registered under ``app.cli`` or + ``blueprint.cli`` will always have an app context available, this + decorator is not required in that case. + + .. versionchanged:: 2.2 + The app context is active for subcommands as well as the + decorated callback. The app context is always available to + ``app.cli`` command and parameter callbacks. + """ + + @click.pass_context + def decorator(__ctx, *args, **kwargs): + if not current_app: + app = __ctx.ensure_object(ScriptInfo).load_app() + __ctx.with_resource(app.app_context()) + + return __ctx.invoke(f, *args, **kwargs) + + return update_wrapper(decorator, f) + + +class AppGroup(click.Group): + """This works similar to a regular click :class:`~click.Group` but it + changes the behavior of the :meth:`command` decorator so that it + automatically wraps the functions in :func:`with_appcontext`. + + Not to be confused with :class:`FlaskGroup`. + """ + + def command(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it wraps callbacks in :func:`with_appcontext` + unless it's disabled by passing ``with_appcontext=False``. + """ + wrap_for_ctx = kwargs.pop("with_appcontext", True) + + def decorator(f): + if wrap_for_ctx: + f = with_appcontext(f) + return click.Group.command(self, *args, **kwargs)(f) + + return decorator + + def group(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it defaults the group class to + :class:`AppGroup`. + """ + kwargs.setdefault("cls", AppGroup) + return click.Group.group(self, *args, **kwargs) + + +def _set_app(ctx: click.Context, param: click.Option, value: str | None) -> str | None: + if value is None: + return None + + info = ctx.ensure_object(ScriptInfo) + info.app_import_path = value + return value + + +# This option is eager so the app will be available if --help is given. +# --help is also eager, so --app must be before it in the param list. +# no_args_is_help bypasses eager processing, so this option must be +# processed manually in that case to ensure FLASK_APP gets picked up. +_app_option = click.Option( + ["-A", "--app"], + metavar="IMPORT", + help=( + "The Flask application or factory function to load, in the form 'module:name'." + " Module can be a dotted import or file path. Name is not required if it is" + " 'app', 'application', 'create_app', or 'make_app', and can be 'name(args)' to" + " pass arguments." + ), + is_eager=True, + expose_value=False, + callback=_set_app, +) + + +def _set_debug(ctx: click.Context, param: click.Option, value: bool) -> bool | None: + # If the flag isn't provided, it will default to False. Don't use + # that, let debug be set by env in that case. + source = ctx.get_parameter_source(param.name) # type: ignore[arg-type] + + if source is not None and source in ( + ParameterSource.DEFAULT, + ParameterSource.DEFAULT_MAP, + ): + return None + + # Set with env var instead of ScriptInfo.load so that it can be + # accessed early during a factory function. + os.environ["FLASK_DEBUG"] = "1" if value else "0" + return value + + +_debug_option = click.Option( + ["--debug/--no-debug"], + help="Set debug mode.", + expose_value=False, + callback=_set_debug, +) + + +def _env_file_callback( + ctx: click.Context, param: click.Option, value: str | None +) -> str | None: + if value is None: + return None + + import importlib + + try: + importlib.import_module("dotenv") + except ImportError: + raise click.BadParameter( + "python-dotenv must be installed to load an env file.", + ctx=ctx, + param=param, + ) from None + + # Don't check FLASK_SKIP_DOTENV, that only disables automatically + # loading .env and .flaskenv files. + load_dotenv(value) + return value + + +# This option is eager so env vars are loaded as early as possible to be +# used by other options. +_env_file_option = click.Option( + ["-e", "--env-file"], + type=click.Path(exists=True, dir_okay=False), + help="Load environment variables from this file. python-dotenv must be installed.", + is_eager=True, + expose_value=False, + callback=_env_file_callback, +) + + +class FlaskGroup(AppGroup): + """Special subclass of the :class:`AppGroup` group that supports + loading more commands from the configured Flask app. Normally a + developer does not have to interface with this class but there are + some very advanced use cases for which it makes sense to create an + instance of this. see :ref:`custom-scripts`. + + :param add_default_commands: if this is True then the default run and + shell commands will be added. + :param add_version_option: adds the ``--version`` option. + :param create_app: an optional callback that is passed the script info and + returns the loaded app. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param set_debug_flag: Set the app's debug flag. + + .. versionchanged:: 2.2 + Added the ``-A/--app``, ``--debug/--no-debug``, ``-e/--env-file`` options. + + .. versionchanged:: 2.2 + An app context is pushed when running ``app.cli`` commands, so + ``@with_appcontext`` is no longer required for those commands. + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment variables + from :file:`.env` and :file:`.flaskenv` files. + """ + + def __init__( + self, + add_default_commands: bool = True, + create_app: t.Callable[..., Flask] | None = None, + add_version_option: bool = True, + load_dotenv: bool = True, + set_debug_flag: bool = True, + **extra: t.Any, + ) -> None: + params = list(extra.pop("params", None) or ()) + # Processing is done with option callbacks instead of a group + # callback. This allows users to make a custom group callback + # without losing the behavior. --env-file must come first so + # that it is eagerly evaluated before --app. + params.extend((_env_file_option, _app_option, _debug_option)) + + if add_version_option: + params.append(version_option) + + if "context_settings" not in extra: + extra["context_settings"] = {} + + extra["context_settings"].setdefault("auto_envvar_prefix", "FLASK") + + super().__init__(params=params, **extra) + + self.create_app = create_app + self.load_dotenv = load_dotenv + self.set_debug_flag = set_debug_flag + + if add_default_commands: + self.add_command(run_command) + self.add_command(shell_command) + self.add_command(routes_command) + + self._loaded_plugin_commands = False + + def _load_plugin_commands(self): + if self._loaded_plugin_commands: + return + + if sys.version_info >= (3, 10): + from importlib import metadata + else: + # Use a backport on Python < 3.10. We technically have + # importlib.metadata on 3.8+, but the API changed in 3.10, + # so use the backport for consistency. + import importlib_metadata as metadata + + for ep in metadata.entry_points(group="flask.commands"): + self.add_command(ep.load(), ep.name) + + self._loaded_plugin_commands = True + + def get_command(self, ctx, name): + self._load_plugin_commands() + # Look up built-in and plugin commands, which should be + # available even if the app fails to load. + rv = super().get_command(ctx, name) + + if rv is not None: + return rv + + info = ctx.ensure_object(ScriptInfo) + + # Look up commands provided by the app, showing an error and + # continuing if the app couldn't be loaded. + try: + app = info.load_app() + except NoAppException as e: + click.secho(f"Error: {e.format_message()}\n", err=True, fg="red") + return None + + # Push an app context for the loaded app unless it is already + # active somehow. This makes the context available to parameter + # and command callbacks without needing @with_appcontext. + if not current_app or current_app._get_current_object() is not app: + ctx.with_resource(app.app_context()) + + return app.cli.get_command(ctx, name) + + def list_commands(self, ctx): + self._load_plugin_commands() + # Start with the built-in and plugin commands. + rv = set(super().list_commands(ctx)) + info = ctx.ensure_object(ScriptInfo) + + # Add commands provided by the app, showing an error and + # continuing if the app couldn't be loaded. + try: + rv.update(info.load_app().cli.list_commands(ctx)) + except NoAppException as e: + # When an app couldn't be loaded, show the error message + # without the traceback. + click.secho(f"Error: {e.format_message()}\n", err=True, fg="red") + except Exception: + # When any other errors occurred during loading, show the + # full traceback. + click.secho(f"{traceback.format_exc()}\n", err=True, fg="red") + + return sorted(rv) + + def make_context( + self, + info_name: str | None, + args: list[str], + parent: click.Context | None = None, + **extra: t.Any, + ) -> click.Context: + # Set a flag to tell app.run to become a no-op. If app.run was + # not in a __name__ == __main__ guard, it would start the server + # when importing, blocking whatever command is being called. + os.environ["FLASK_RUN_FROM_CLI"] = "true" + + # Attempt to load .env and .flask env files. The --env-file + # option can cause another file to be loaded. + if get_load_dotenv(self.load_dotenv): + load_dotenv() + + if "obj" not in extra and "obj" not in self.context_settings: + extra["obj"] = ScriptInfo( + create_app=self.create_app, set_debug_flag=self.set_debug_flag + ) + + return super().make_context(info_name, args, parent=parent, **extra) + + def parse_args(self, ctx: click.Context, args: list[str]) -> list[str]: + if not args and self.no_args_is_help: + # Attempt to load --env-file and --app early in case they + # were given as env vars. Otherwise no_args_is_help will not + # see commands from app.cli. + _env_file_option.handle_parse_result(ctx, {}, []) + _app_option.handle_parse_result(ctx, {}, []) + + return super().parse_args(ctx, args) + + +def _path_is_ancestor(path, other): + """Take ``other`` and remove the length of ``path`` from it. Then join it + to ``path``. If it is the original value, ``path`` is an ancestor of + ``other``.""" + return os.path.join(path, other[len(path) :].lstrip(os.sep)) == other + + +def load_dotenv(path: str | os.PathLike | None = None) -> bool: + """Load "dotenv" files in order of precedence to set environment variables. + + If an env var is already set it is not overwritten, so earlier files in the + list are preferred over later files. + + This is a no-op if `python-dotenv`_ is not installed. + + .. _python-dotenv: https://github.com/theskumar/python-dotenv#readme + + :param path: Load the file at this location instead of searching. + :return: ``True`` if a file was loaded. + + .. versionchanged:: 2.0 + The current directory is not changed to the location of the + loaded file. + + .. versionchanged:: 2.0 + When loading the env files, set the default encoding to UTF-8. + + .. versionchanged:: 1.1.0 + Returns ``False`` when python-dotenv is not installed, or when + the given path isn't a file. + + .. versionadded:: 1.0 + """ + try: + import dotenv + except ImportError: + if path or os.path.isfile(".env") or os.path.isfile(".flaskenv"): + click.secho( + " * Tip: There are .env or .flaskenv files present." + ' Do "pip install python-dotenv" to use them.', + fg="yellow", + err=True, + ) + + return False + + # Always return after attempting to load a given path, don't load + # the default files. + if path is not None: + if os.path.isfile(path): + return dotenv.load_dotenv(path, encoding="utf-8") + + return False + + loaded = False + + for name in (".env", ".flaskenv"): + path = dotenv.find_dotenv(name, usecwd=True) + + if not path: + continue + + dotenv.load_dotenv(path, encoding="utf-8") + loaded = True + + return loaded # True if at least one file was located and loaded. + + +def show_server_banner(debug, app_import_path): + """Show extra startup messages the first time the server is run, + ignoring the reloader. + """ + if is_running_from_reloader(): + return + + if app_import_path is not None: + click.echo(f" * Serving Flask app '{app_import_path}'") + + if debug is not None: + click.echo(f" * Debug mode: {'on' if debug else 'off'}") + + +class CertParamType(click.ParamType): + """Click option type for the ``--cert`` option. Allows either an + existing file, the string ``'adhoc'``, or an import for a + :class:`~ssl.SSLContext` object. + """ + + name = "path" + + def __init__(self): + self.path_type = click.Path(exists=True, dir_okay=False, resolve_path=True) + + def convert(self, value, param, ctx): + try: + import ssl + except ImportError: + raise click.BadParameter( + 'Using "--cert" requires Python to be compiled with SSL support.', + ctx, + param, + ) from None + + try: + return self.path_type(value, param, ctx) + except click.BadParameter: + value = click.STRING(value, param, ctx).lower() + + if value == "adhoc": + try: + import cryptography # noqa: F401 + except ImportError: + raise click.BadParameter( + "Using ad-hoc certificates requires the cryptography library.", + ctx, + param, + ) from None + + return value + + obj = import_string(value, silent=True) + + if isinstance(obj, ssl.SSLContext): + return obj + + raise + + +def _validate_key(ctx, param, value): + """The ``--key`` option must be specified when ``--cert`` is a file. + Modifies the ``cert`` param to be a ``(cert, key)`` pair if needed. + """ + cert = ctx.params.get("cert") + is_adhoc = cert == "adhoc" + + try: + import ssl + except ImportError: + is_context = False + else: + is_context = isinstance(cert, ssl.SSLContext) + + if value is not None: + if is_adhoc: + raise click.BadParameter( + 'When "--cert" is "adhoc", "--key" is not used.', ctx, param + ) + + if is_context: + raise click.BadParameter( + 'When "--cert" is an SSLContext object, "--key is not used.', ctx, param + ) + + if not cert: + raise click.BadParameter('"--cert" must also be specified.', ctx, param) + + ctx.params["cert"] = cert, value + + else: + if cert and not (is_adhoc or is_context): + raise click.BadParameter('Required when using "--cert".', ctx, param) + + return value + + +class SeparatedPathType(click.Path): + """Click option type that accepts a list of values separated by the + OS's path separator (``:``, ``;`` on Windows). Each value is + validated as a :class:`click.Path` type. + """ + + def convert(self, value, param, ctx): + items = self.split_envvar_value(value) + super_convert = super().convert + return [super_convert(item, param, ctx) for item in items] + + +@click.command("run", short_help="Run a development server.") +@click.option("--host", "-h", default="127.0.0.1", help="The interface to bind to.") +@click.option("--port", "-p", default=5000, help="The port to bind to.") +@click.option( + "--cert", + type=CertParamType(), + help="Specify a certificate file to use HTTPS.", + is_eager=True, +) +@click.option( + "--key", + type=click.Path(exists=True, dir_okay=False, resolve_path=True), + callback=_validate_key, + expose_value=False, + help="The key file to use when specifying a certificate.", +) +@click.option( + "--reload/--no-reload", + default=None, + help="Enable or disable the reloader. By default the reloader " + "is active if debug is enabled.", +) +@click.option( + "--debugger/--no-debugger", + default=None, + help="Enable or disable the debugger. By default the debugger " + "is active if debug is enabled.", +) +@click.option( + "--with-threads/--without-threads", + default=True, + help="Enable or disable multithreading.", +) +@click.option( + "--extra-files", + default=None, + type=SeparatedPathType(), + help=( + "Extra files that trigger a reload on change. Multiple paths" + f" are separated by {os.path.pathsep!r}." + ), +) +@click.option( + "--exclude-patterns", + default=None, + type=SeparatedPathType(), + help=( + "Files matching these fnmatch patterns will not trigger a reload" + " on change. Multiple patterns are separated by" + f" {os.path.pathsep!r}." + ), +) +@pass_script_info +def run_command( + info, + host, + port, + reload, + debugger, + with_threads, + cert, + extra_files, + exclude_patterns, +): + """Run a local development server. + + This server is for development purposes only. It does not provide + the stability, security, or performance of production WSGI servers. + + The reloader and debugger are enabled by default with the '--debug' + option. + """ + try: + app = info.load_app() + except Exception as e: + if is_running_from_reloader(): + # When reloading, print out the error immediately, but raise + # it later so the debugger or server can handle it. + traceback.print_exc() + err = e + + def app(environ, start_response): + raise err from None + + else: + # When not reloading, raise the error immediately so the + # command fails. + raise e from None + + debug = get_debug_flag() + + if reload is None: + reload = debug + + if debugger is None: + debugger = debug + + show_server_banner(debug, info.app_import_path) + + run_simple( + host, + port, + app, + use_reloader=reload, + use_debugger=debugger, + threaded=with_threads, + ssl_context=cert, + extra_files=extra_files, + exclude_patterns=exclude_patterns, + ) + + +run_command.params.insert(0, _debug_option) + + +@click.command("shell", short_help="Run a shell in the app context.") +@with_appcontext +def shell_command() -> None: + """Run an interactive Python shell in the context of a given + Flask application. The application will populate the default + namespace of this shell according to its configuration. + + This is useful for executing small snippets of management code + without having to manually configure the application. + """ + import code + + banner = ( + f"Python {sys.version} on {sys.platform}\n" + f"App: {current_app.import_name}\n" + f"Instance: {current_app.instance_path}" + ) + ctx: dict = {} + + # Support the regular Python interpreter startup script if someone + # is using it. + startup = os.environ.get("PYTHONSTARTUP") + if startup and os.path.isfile(startup): + with open(startup) as f: + eval(compile(f.read(), startup, "exec"), ctx) + + ctx.update(current_app.make_shell_context()) + + # Site, customize, or startup script can set a hook to call when + # entering interactive mode. The default one sets up readline with + # tab and history completion. + interactive_hook = getattr(sys, "__interactivehook__", None) + + if interactive_hook is not None: + try: + import readline + from rlcompleter import Completer + except ImportError: + pass + else: + # rlcompleter uses __main__.__dict__ by default, which is + # flask.__main__. Use the shell context instead. + readline.set_completer(Completer(ctx).complete) + + interactive_hook() + + code.interact(banner=banner, local=ctx) + + +@click.command("routes", short_help="Show the routes for the app.") +@click.option( + "--sort", + "-s", + type=click.Choice(("endpoint", "methods", "domain", "rule", "match")), + default="endpoint", + help=( + "Method to sort routes by. 'match' is the order that Flask will match routes" + " when dispatching a request." + ), +) +@click.option("--all-methods", is_flag=True, help="Show HEAD and OPTIONS methods.") +@with_appcontext +def routes_command(sort: str, all_methods: bool) -> None: + """Show all registered routes with endpoints and methods.""" + rules = list(current_app.url_map.iter_rules()) + + if not rules: + click.echo("No routes were registered.") + return + + ignored_methods = set() if all_methods else {"HEAD", "OPTIONS"} + host_matching = current_app.url_map.host_matching + has_domain = any(rule.host if host_matching else rule.subdomain for rule in rules) + rows = [] + + for rule in rules: + row = [ + rule.endpoint, + ", ".join(sorted((rule.methods or set()) - ignored_methods)), + ] + + if has_domain: + row.append((rule.host if host_matching else rule.subdomain) or "") + + row.append(rule.rule) + rows.append(row) + + headers = ["Endpoint", "Methods"] + sorts = ["endpoint", "methods"] + + if has_domain: + headers.append("Host" if host_matching else "Subdomain") + sorts.append("domain") + + headers.append("Rule") + sorts.append("rule") + + try: + rows.sort(key=itemgetter(sorts.index(sort))) + except ValueError: + pass + + rows.insert(0, headers) + widths = [max(len(row[i]) for row in rows) for i in range(len(headers))] + rows.insert(1, ["-" * w for w in widths]) + template = " ".join(f"{{{i}:<{w}}}" for i, w in enumerate(widths)) + + for row in rows: + click.echo(template.format(*row)) + + +cli = FlaskGroup( + name="flask", + help="""\ +A general utility script for Flask applications. + +An application to load must be given with the '--app' option, +'FLASK_APP' environment variable, or with a 'wsgi.py' or 'app.py' file +in the current directory. +""", +) + + +def main() -> None: + cli.main() + + +if __name__ == "__main__": + main() diff --git a/venv/Lib/site-packages/flask/config.py b/venv/Lib/site-packages/flask/config.py new file mode 100644 index 0000000..5f921b4 --- /dev/null +++ b/venv/Lib/site-packages/flask/config.py @@ -0,0 +1,347 @@ +from __future__ import annotations + +import errno +import json +import os +import types +import typing as t + +from werkzeug.utils import import_string + + +class ConfigAttribute: + """Makes an attribute forward to the config""" + + def __init__(self, name: str, get_converter: t.Callable | None = None) -> None: + self.__name__ = name + self.get_converter = get_converter + + def __get__(self, obj: t.Any, owner: t.Any = None) -> t.Any: + if obj is None: + return self + rv = obj.config[self.__name__] + if self.get_converter is not None: + rv = self.get_converter(rv) + return rv + + def __set__(self, obj: t.Any, value: t.Any) -> None: + obj.config[self.__name__] = value + + +class Config(dict): + """Works exactly like a dict but provides ways to fill it from files + or special dictionaries. There are two common patterns to populate the + config. + + Either you can fill the config from a config file:: + + app.config.from_pyfile('yourconfig.cfg') + + Or alternatively you can define the configuration options in the + module that calls :meth:`from_object` or provide an import path to + a module that should be loaded. It is also possible to tell it to + use the same module and with that provide the configuration values + just before the call:: + + DEBUG = True + SECRET_KEY = 'development key' + app.config.from_object(__name__) + + In both cases (loading from any Python file or loading from modules), + only uppercase keys are added to the config. This makes it possible to use + lowercase values in the config file for temporary values that are not added + to the config or to define the config keys in the same file that implements + the application. + + Probably the most interesting way to load configurations is from an + environment variable pointing to a file:: + + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + + In this case before launching the application you have to set this + environment variable to the file you want to use. On Linux and OS X + use the export statement:: + + export YOURAPPLICATION_SETTINGS='/path/to/config/file' + + On windows use `set` instead. + + :param root_path: path to which files are read relative from. When the + config object is created by the application, this is + the application's :attr:`~flask.Flask.root_path`. + :param defaults: an optional dictionary of default values + """ + + def __init__( + self, root_path: str | os.PathLike, defaults: dict | None = None + ) -> None: + super().__init__(defaults or {}) + self.root_path = root_path + + def from_envvar(self, variable_name: str, silent: bool = False) -> bool: + """Loads a configuration from an environment variable pointing to + a configuration file. This is basically just a shortcut with nicer + error messages for this line of code:: + + app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS']) + + :param variable_name: name of the environment variable + :param silent: set to ``True`` if you want silent failure for missing + files. + :return: ``True`` if the file was loaded successfully. + """ + rv = os.environ.get(variable_name) + if not rv: + if silent: + return False + raise RuntimeError( + f"The environment variable {variable_name!r} is not set" + " and as such configuration could not be loaded. Set" + " this variable and make it point to a configuration" + " file" + ) + return self.from_pyfile(rv, silent=silent) + + def from_prefixed_env( + self, prefix: str = "FLASK", *, loads: t.Callable[[str], t.Any] = json.loads + ) -> bool: + """Load any environment variables that start with ``FLASK_``, + dropping the prefix from the env key for the config key. Values + are passed through a loading function to attempt to convert them + to more specific types than strings. + + Keys are loaded in :func:`sorted` order. + + The default loading function attempts to parse values as any + valid JSON type, including dicts and lists. + + Specific items in nested dicts can be set by separating the + keys with double underscores (``__``). If an intermediate key + doesn't exist, it will be initialized to an empty dict. + + :param prefix: Load env vars that start with this prefix, + separated with an underscore (``_``). + :param loads: Pass each string value to this function and use + the returned value as the config value. If any error is + raised it is ignored and the value remains a string. The + default is :func:`json.loads`. + + .. versionadded:: 2.1 + """ + prefix = f"{prefix}_" + len_prefix = len(prefix) + + for key in sorted(os.environ): + if not key.startswith(prefix): + continue + + value = os.environ[key] + + try: + value = loads(value) + except Exception: + # Keep the value as a string if loading failed. + pass + + # Change to key.removeprefix(prefix) on Python >= 3.9. + key = key[len_prefix:] + + if "__" not in key: + # A non-nested key, set directly. + self[key] = value + continue + + # Traverse nested dictionaries with keys separated by "__". + current = self + *parts, tail = key.split("__") + + for part in parts: + # If an intermediate dict does not exist, create it. + if part not in current: + current[part] = {} + + current = current[part] + + current[tail] = value + + return True + + def from_pyfile(self, filename: str | os.PathLike, silent: bool = False) -> bool: + """Updates the values in the config from a Python file. This function + behaves as if the file was imported as module with the + :meth:`from_object` function. + + :param filename: the filename of the config. This can either be an + absolute filename or a filename relative to the + root path. + :param silent: set to ``True`` if you want silent failure for missing + files. + :return: ``True`` if the file was loaded successfully. + + .. versionadded:: 0.7 + `silent` parameter. + """ + filename = os.path.join(self.root_path, filename) + d = types.ModuleType("config") + d.__file__ = filename + try: + with open(filename, mode="rb") as config_file: + exec(compile(config_file.read(), filename, "exec"), d.__dict__) + except OSError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR, errno.ENOTDIR): + return False + e.strerror = f"Unable to load configuration file ({e.strerror})" + raise + self.from_object(d) + return True + + def from_object(self, obj: object | str) -> None: + """Updates the values from the given object. An object can be of one + of the following two types: + + - a string: in this case the object with that name will be imported + - an actual object reference: that object is used directly + + Objects are usually either modules or classes. :meth:`from_object` + loads only the uppercase attributes of the module/class. A ``dict`` + object will not work with :meth:`from_object` because the keys of a + ``dict`` are not attributes of the ``dict`` class. + + Example of module-based configuration:: + + app.config.from_object('yourapplication.default_config') + from yourapplication import default_config + app.config.from_object(default_config) + + Nothing is done to the object before loading. If the object is a + class and has ``@property`` attributes, it needs to be + instantiated before being passed to this method. + + You should not use this function to load the actual configuration but + rather configuration defaults. The actual config should be loaded + with :meth:`from_pyfile` and ideally from a location not within the + package because the package might be installed system wide. + + See :ref:`config-dev-prod` for an example of class-based configuration + using :meth:`from_object`. + + :param obj: an import name or object + """ + if isinstance(obj, str): + obj = import_string(obj) + for key in dir(obj): + if key.isupper(): + self[key] = getattr(obj, key) + + def from_file( + self, + filename: str | os.PathLike, + load: t.Callable[[t.IO[t.Any]], t.Mapping], + silent: bool = False, + text: bool = True, + ) -> bool: + """Update the values in the config from a file that is loaded + using the ``load`` parameter. The loaded data is passed to the + :meth:`from_mapping` method. + + .. code-block:: python + + import json + app.config.from_file("config.json", load=json.load) + + import tomllib + app.config.from_file("config.toml", load=tomllib.load, text=False) + + :param filename: The path to the data file. This can be an + absolute path or relative to the config root path. + :param load: A callable that takes a file handle and returns a + mapping of loaded data from the file. + :type load: ``Callable[[Reader], Mapping]`` where ``Reader`` + implements a ``read`` method. + :param silent: Ignore the file if it doesn't exist. + :param text: Open the file in text or binary mode. + :return: ``True`` if the file was loaded successfully. + + .. versionchanged:: 2.3 + The ``text`` parameter was added. + + .. versionadded:: 2.0 + """ + filename = os.path.join(self.root_path, filename) + + try: + with open(filename, "r" if text else "rb") as f: + obj = load(f) + except OSError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR): + return False + + e.strerror = f"Unable to load configuration file ({e.strerror})" + raise + + return self.from_mapping(obj) + + def from_mapping( + self, mapping: t.Mapping[str, t.Any] | None = None, **kwargs: t.Any + ) -> bool: + """Updates the config like :meth:`update` ignoring items with + non-upper keys. + + :return: Always returns ``True``. + + .. versionadded:: 0.11 + """ + mappings: dict[str, t.Any] = {} + if mapping is not None: + mappings.update(mapping) + mappings.update(kwargs) + for key, value in mappings.items(): + if key.isupper(): + self[key] = value + return True + + def get_namespace( + self, namespace: str, lowercase: bool = True, trim_namespace: bool = True + ) -> dict[str, t.Any]: + """Returns a dictionary containing a subset of configuration options + that match the specified namespace/prefix. Example usage:: + + app.config['IMAGE_STORE_TYPE'] = 'fs' + app.config['IMAGE_STORE_PATH'] = '/var/app/images' + app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com' + image_store_config = app.config.get_namespace('IMAGE_STORE_') + + The resulting dictionary `image_store_config` would look like:: + + { + 'type': 'fs', + 'path': '/var/app/images', + 'base_url': 'http://img.website.com' + } + + This is often useful when configuration options map directly to + keyword arguments in functions or class constructors. + + :param namespace: a configuration namespace + :param lowercase: a flag indicating if the keys of the resulting + dictionary should be lowercase + :param trim_namespace: a flag indicating if the keys of the resulting + dictionary should not include the namespace + + .. versionadded:: 0.11 + """ + rv = {} + for k, v in self.items(): + if not k.startswith(namespace): + continue + if trim_namespace: + key = k[len(namespace) :] + else: + key = k + if lowercase: + key = key.lower() + rv[key] = v + return rv + + def __repr__(self) -> str: + return f"<{type(self).__name__} {dict.__repr__(self)}>" diff --git a/venv/Lib/site-packages/flask/ctx.py b/venv/Lib/site-packages/flask/ctx.py new file mode 100644 index 0000000..b37e4e0 --- /dev/null +++ b/venv/Lib/site-packages/flask/ctx.py @@ -0,0 +1,440 @@ +from __future__ import annotations + +import contextvars +import sys +import typing as t +from functools import update_wrapper +from types import TracebackType + +from werkzeug.exceptions import HTTPException + +from . import typing as ft +from .globals import _cv_app +from .globals import _cv_request +from .signals import appcontext_popped +from .signals import appcontext_pushed + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .sessions import SessionMixin + from .wrappers import Request + + +# a singleton sentinel value for parameter defaults +_sentinel = object() + + +class _AppCtxGlobals: + """A plain object. Used as a namespace for storing data during an + application context. + + Creating an app context automatically creates this object, which is + made available as the :data:`g` proxy. + + .. describe:: 'key' in g + + Check whether an attribute is present. + + .. versionadded:: 0.10 + + .. describe:: iter(g) + + Return an iterator over the attribute names. + + .. versionadded:: 0.10 + """ + + # Define attr methods to let mypy know this is a namespace object + # that has arbitrary attributes. + + def __getattr__(self, name: str) -> t.Any: + try: + return self.__dict__[name] + except KeyError: + raise AttributeError(name) from None + + def __setattr__(self, name: str, value: t.Any) -> None: + self.__dict__[name] = value + + def __delattr__(self, name: str) -> None: + try: + del self.__dict__[name] + except KeyError: + raise AttributeError(name) from None + + def get(self, name: str, default: t.Any | None = None) -> t.Any: + """Get an attribute by name, or a default value. Like + :meth:`dict.get`. + + :param name: Name of attribute to get. + :param default: Value to return if the attribute is not present. + + .. versionadded:: 0.10 + """ + return self.__dict__.get(name, default) + + def pop(self, name: str, default: t.Any = _sentinel) -> t.Any: + """Get and remove an attribute by name. Like :meth:`dict.pop`. + + :param name: Name of attribute to pop. + :param default: Value to return if the attribute is not present, + instead of raising a ``KeyError``. + + .. versionadded:: 0.11 + """ + if default is _sentinel: + return self.__dict__.pop(name) + else: + return self.__dict__.pop(name, default) + + def setdefault(self, name: str, default: t.Any = None) -> t.Any: + """Get the value of an attribute if it is present, otherwise + set and return a default value. Like :meth:`dict.setdefault`. + + :param name: Name of attribute to get. + :param default: Value to set and return if the attribute is not + present. + + .. versionadded:: 0.11 + """ + return self.__dict__.setdefault(name, default) + + def __contains__(self, item: str) -> bool: + return item in self.__dict__ + + def __iter__(self) -> t.Iterator[str]: + return iter(self.__dict__) + + def __repr__(self) -> str: + ctx = _cv_app.get(None) + if ctx is not None: + return f"" + return object.__repr__(self) + + +def after_this_request(f: ft.AfterRequestCallable) -> ft.AfterRequestCallable: + """Executes a function after this request. This is useful to modify + response objects. The function is passed the response object and has + to return the same or a new one. + + Example:: + + @app.route('/') + def index(): + @after_this_request + def add_header(response): + response.headers['X-Foo'] = 'Parachute' + return response + return 'Hello World!' + + This is more useful if a function other than the view function wants to + modify a response. For instance think of a decorator that wants to add + some headers without converting the return value into a response object. + + .. versionadded:: 0.9 + """ + ctx = _cv_request.get(None) + + if ctx is None: + raise RuntimeError( + "'after_this_request' can only be used when a request" + " context is active, such as in a view function." + ) + + ctx._after_request_functions.append(f) + return f + + +def copy_current_request_context(f: t.Callable) -> t.Callable: + """A helper function that decorates a function to retain the current + request context. This is useful when working with greenlets. The moment + the function is decorated a copy of the request context is created and + then pushed when the function is called. The current session is also + included in the copied request context. + + Example:: + + import gevent + from flask import copy_current_request_context + + @app.route('/') + def index(): + @copy_current_request_context + def do_some_work(): + # do some work here, it can access flask.request or + # flask.session like you would otherwise in the view function. + ... + gevent.spawn(do_some_work) + return 'Regular response' + + .. versionadded:: 0.10 + """ + ctx = _cv_request.get(None) + + if ctx is None: + raise RuntimeError( + "'copy_current_request_context' can only be used when a" + " request context is active, such as in a view function." + ) + + ctx = ctx.copy() + + def wrapper(*args, **kwargs): + with ctx: + return ctx.app.ensure_sync(f)(*args, **kwargs) + + return update_wrapper(wrapper, f) + + +def has_request_context() -> bool: + """If you have code that wants to test if a request context is there or + not this function can be used. For instance, you may want to take advantage + of request information if the request object is available, but fail + silently if it is unavailable. + + :: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and has_request_context(): + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + Alternatively you can also just test any of the context bound objects + (such as :class:`request` or :class:`g`) for truthness:: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and request: + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + .. versionadded:: 0.7 + """ + return _cv_request.get(None) is not None + + +def has_app_context() -> bool: + """Works like :func:`has_request_context` but for the application + context. You can also just do a boolean check on the + :data:`current_app` object instead. + + .. versionadded:: 0.9 + """ + return _cv_app.get(None) is not None + + +class AppContext: + """The app context contains application-specific information. An app + context is created and pushed at the beginning of each request if + one is not already active. An app context is also pushed when + running CLI commands. + """ + + def __init__(self, app: Flask) -> None: + self.app = app + self.url_adapter = app.create_url_adapter(None) + self.g: _AppCtxGlobals = app.app_ctx_globals_class() + self._cv_tokens: list[contextvars.Token] = [] + + def push(self) -> None: + """Binds the app context to the current context.""" + self._cv_tokens.append(_cv_app.set(self)) + appcontext_pushed.send(self.app, _async_wrapper=self.app.ensure_sync) + + def pop(self, exc: BaseException | None = _sentinel) -> None: # type: ignore + """Pops the app context.""" + try: + if len(self._cv_tokens) == 1: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_appcontext(exc) + finally: + ctx = _cv_app.get() + _cv_app.reset(self._cv_tokens.pop()) + + if ctx is not self: + raise AssertionError( + f"Popped wrong app context. ({ctx!r} instead of {self!r})" + ) + + appcontext_popped.send(self.app, _async_wrapper=self.app.ensure_sync) + + def __enter__(self) -> AppContext: + self.push() + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.pop(exc_value) + + +class RequestContext: + """The request context contains per-request information. The Flask + app creates and pushes it at the beginning of the request, then pops + it at the end of the request. It will create the URL adapter and + request object for the WSGI environment provided. + + Do not attempt to use this class directly, instead use + :meth:`~flask.Flask.test_request_context` and + :meth:`~flask.Flask.request_context` to create this object. + + When the request context is popped, it will evaluate all the + functions registered on the application for teardown execution + (:meth:`~flask.Flask.teardown_request`). + + The request context is automatically popped at the end of the + request. When using the interactive debugger, the context will be + restored so ``request`` is still accessible. Similarly, the test + client can preserve the context after the request ends. However, + teardown functions may already have closed some resources such as + database connections. + """ + + def __init__( + self, + app: Flask, + environ: dict, + request: Request | None = None, + session: SessionMixin | None = None, + ) -> None: + self.app = app + if request is None: + request = app.request_class(environ) + request.json_module = app.json + self.request: Request = request + self.url_adapter = None + try: + self.url_adapter = app.create_url_adapter(self.request) + except HTTPException as e: + self.request.routing_exception = e + self.flashes: list[tuple[str, str]] | None = None + self.session: SessionMixin | None = session + # Functions that should be executed after the request on the response + # object. These will be called before the regular "after_request" + # functions. + self._after_request_functions: list[ft.AfterRequestCallable] = [] + + self._cv_tokens: list[tuple[contextvars.Token, AppContext | None]] = [] + + def copy(self) -> RequestContext: + """Creates a copy of this request context with the same request object. + This can be used to move a request context to a different greenlet. + Because the actual request object is the same this cannot be used to + move a request context to a different thread unless access to the + request object is locked. + + .. versionadded:: 0.10 + + .. versionchanged:: 1.1 + The current session object is used instead of reloading the original + data. This prevents `flask.session` pointing to an out-of-date object. + """ + return self.__class__( + self.app, + environ=self.request.environ, + request=self.request, + session=self.session, + ) + + def match_request(self) -> None: + """Can be overridden by a subclass to hook into the matching + of the request. + """ + try: + result = self.url_adapter.match(return_rule=True) # type: ignore + self.request.url_rule, self.request.view_args = result # type: ignore + except HTTPException as e: + self.request.routing_exception = e + + def push(self) -> None: + # Before we push the request context we have to ensure that there + # is an application context. + app_ctx = _cv_app.get(None) + + if app_ctx is None or app_ctx.app is not self.app: + app_ctx = self.app.app_context() + app_ctx.push() + else: + app_ctx = None + + self._cv_tokens.append((_cv_request.set(self), app_ctx)) + + # Open the session at the moment that the request context is available. + # This allows a custom open_session method to use the request context. + # Only open a new session if this is the first time the request was + # pushed, otherwise stream_with_context loses the session. + if self.session is None: + session_interface = self.app.session_interface + self.session = session_interface.open_session(self.app, self.request) + + if self.session is None: + self.session = session_interface.make_null_session(self.app) + + # Match the request URL after loading the session, so that the + # session is available in custom URL converters. + if self.url_adapter is not None: + self.match_request() + + def pop(self, exc: BaseException | None = _sentinel) -> None: # type: ignore + """Pops the request context and unbinds it by doing that. This will + also trigger the execution of functions registered by the + :meth:`~flask.Flask.teardown_request` decorator. + + .. versionchanged:: 0.9 + Added the `exc` argument. + """ + clear_request = len(self._cv_tokens) == 1 + + try: + if clear_request: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_request(exc) + + request_close = getattr(self.request, "close", None) + if request_close is not None: + request_close() + finally: + ctx = _cv_request.get() + token, app_ctx = self._cv_tokens.pop() + _cv_request.reset(token) + + # get rid of circular dependencies at the end of the request + # so that we don't require the GC to be active. + if clear_request: + ctx.request.environ["werkzeug.request"] = None + + if app_ctx is not None: + app_ctx.pop(exc) + + if ctx is not self: + raise AssertionError( + f"Popped wrong request context. ({ctx!r} instead of {self!r})" + ) + + def __enter__(self) -> RequestContext: + self.push() + return self + + def __exit__( + self, + exc_type: type | None, + exc_value: BaseException | None, + tb: TracebackType | None, + ) -> None: + self.pop(exc_value) + + def __repr__(self) -> str: + return ( + f"<{type(self).__name__} {self.request.url!r}" + f" [{self.request.method}] of {self.app.name}>" + ) diff --git a/venv/Lib/site-packages/flask/debughelpers.py b/venv/Lib/site-packages/flask/debughelpers.py new file mode 100644 index 0000000..6061441 --- /dev/null +++ b/venv/Lib/site-packages/flask/debughelpers.py @@ -0,0 +1,160 @@ +from __future__ import annotations + +import typing as t + +from .app import Flask +from .blueprints import Blueprint +from .globals import request_ctx + + +class UnexpectedUnicodeError(AssertionError, UnicodeError): + """Raised in places where we want some better error reporting for + unexpected unicode or binary data. + """ + + +class DebugFilesKeyError(KeyError, AssertionError): + """Raised from request.files during debugging. The idea is that it can + provide a better error message than just a generic KeyError/BadRequest. + """ + + def __init__(self, request, key): + form_matches = request.form.getlist(key) + buf = [ + f"You tried to access the file {key!r} in the request.files" + " dictionary but it does not exist. The mimetype for the" + f" request is {request.mimetype!r} instead of" + " 'multipart/form-data' which means that no file contents" + " were transmitted. To fix this error you should provide" + ' enctype="multipart/form-data" in your form.' + ] + if form_matches: + names = ", ".join(repr(x) for x in form_matches) + buf.append( + "\n\nThe browser instead transmitted some file names. " + f"This was submitted: {names}" + ) + self.msg = "".join(buf) + + def __str__(self): + return self.msg + + +class FormDataRoutingRedirect(AssertionError): + """This exception is raised in debug mode if a routing redirect + would cause the browser to drop the method or body. This happens + when method is not GET, HEAD or OPTIONS and the status code is not + 307 or 308. + """ + + def __init__(self, request): + exc = request.routing_exception + buf = [ + f"A request was sent to '{request.url}', but routing issued" + f" a redirect to the canonical URL '{exc.new_url}'." + ] + + if f"{request.base_url}/" == exc.new_url.partition("?")[0]: + buf.append( + " The URL was defined with a trailing slash. Flask" + " will redirect to the URL with a trailing slash if it" + " was accessed without one." + ) + + buf.append( + " Send requests to the canonical URL, or use 307 or 308 for" + " routing redirects. Otherwise, browsers will drop form" + " data.\n\n" + "This exception is only raised in debug mode." + ) + super().__init__("".join(buf)) + + +def attach_enctype_error_multidict(request): + """Patch ``request.files.__getitem__`` to raise a descriptive error + about ``enctype=multipart/form-data``. + + :param request: The request to patch. + :meta private: + """ + oldcls = request.files.__class__ + + class newcls(oldcls): + def __getitem__(self, key): + try: + return super().__getitem__(key) + except KeyError as e: + if key not in request.form: + raise + + raise DebugFilesKeyError(request, key).with_traceback( + e.__traceback__ + ) from None + + newcls.__name__ = oldcls.__name__ + newcls.__module__ = oldcls.__module__ + request.files.__class__ = newcls + + +def _dump_loader_info(loader) -> t.Generator: + yield f"class: {type(loader).__module__}.{type(loader).__name__}" + for key, value in sorted(loader.__dict__.items()): + if key.startswith("_"): + continue + if isinstance(value, (tuple, list)): + if not all(isinstance(x, str) for x in value): + continue + yield f"{key}:" + for item in value: + yield f" - {item}" + continue + elif not isinstance(value, (str, int, float, bool)): + continue + yield f"{key}: {value!r}" + + +def explain_template_loading_attempts(app: Flask, template, attempts) -> None: + """This should help developers understand what failed""" + info = [f"Locating template {template!r}:"] + total_found = 0 + blueprint = None + if request_ctx and request_ctx.request.blueprint is not None: + blueprint = request_ctx.request.blueprint + + for idx, (loader, srcobj, triple) in enumerate(attempts): + if isinstance(srcobj, Flask): + src_info = f"application {srcobj.import_name!r}" + elif isinstance(srcobj, Blueprint): + src_info = f"blueprint {srcobj.name!r} ({srcobj.import_name})" + else: + src_info = repr(srcobj) + + info.append(f"{idx + 1:5}: trying loader of {src_info}") + + for line in _dump_loader_info(loader): + info.append(f" {line}") + + if triple is None: + detail = "no match" + else: + detail = f"found ({triple[1] or ''!r})" + total_found += 1 + info.append(f" -> {detail}") + + seems_fishy = False + if total_found == 0: + info.append("Error: the template could not be found.") + seems_fishy = True + elif total_found > 1: + info.append("Warning: multiple loaders returned a match for the template.") + seems_fishy = True + + if blueprint is not None and seems_fishy: + info.append( + " The template was looked up from an endpoint that belongs" + f" to the blueprint {blueprint!r}." + ) + info.append(" Maybe you did not place a template in the right folder?") + info.append(" See https://flask.palletsprojects.com/blueprints/#templates") + + app.logger.info("\n".join(info)) diff --git a/venv/Lib/site-packages/flask/globals.py b/venv/Lib/site-packages/flask/globals.py new file mode 100644 index 0000000..e9cd4ac --- /dev/null +++ b/venv/Lib/site-packages/flask/globals.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +import typing as t +from contextvars import ContextVar + +from werkzeug.local import LocalProxy + +if t.TYPE_CHECKING: # pragma: no cover + from .app import Flask + from .ctx import _AppCtxGlobals + from .ctx import AppContext + from .ctx import RequestContext + from .sessions import SessionMixin + from .wrappers import Request + + +class _FakeStack: + def __init__(self, name: str, cv: ContextVar[t.Any]) -> None: + self.name = name + self.cv = cv + + @property + def top(self) -> t.Any | None: + import warnings + + warnings.warn( + f"'_{self.name}_ctx_stack' is deprecated and will be removed in Flask 2.4." + f" Use 'g' to store data, or '{self.name}_ctx' to access the current" + " context.", + DeprecationWarning, + stacklevel=2, + ) + return self.cv.get(None) + + +_no_app_msg = """\ +Working outside of application context. + +This typically means that you attempted to use functionality that needed +the current application. To solve this, set up an application context +with app.app_context(). See the documentation for more information.\ +""" +_cv_app: ContextVar[AppContext] = ContextVar("flask.app_ctx") +__app_ctx_stack = _FakeStack("app", _cv_app) +app_ctx: AppContext = LocalProxy( # type: ignore[assignment] + _cv_app, unbound_message=_no_app_msg +) +current_app: Flask = LocalProxy( # type: ignore[assignment] + _cv_app, "app", unbound_message=_no_app_msg +) +g: _AppCtxGlobals = LocalProxy( # type: ignore[assignment] + _cv_app, "g", unbound_message=_no_app_msg +) + +_no_req_msg = """\ +Working outside of request context. + +This typically means that you attempted to use functionality that needed +an active HTTP request. Consult the documentation on testing for +information about how to avoid this problem.\ +""" +_cv_request: ContextVar[RequestContext] = ContextVar("flask.request_ctx") +__request_ctx_stack = _FakeStack("request", _cv_request) +request_ctx: RequestContext = LocalProxy( # type: ignore[assignment] + _cv_request, unbound_message=_no_req_msg +) +request: Request = LocalProxy( # type: ignore[assignment] + _cv_request, "request", unbound_message=_no_req_msg +) +session: SessionMixin = LocalProxy( # type: ignore[assignment] + _cv_request, "session", unbound_message=_no_req_msg +) + + +def __getattr__(name: str) -> t.Any: + if name == "_app_ctx_stack": + import warnings + + warnings.warn( + "'_app_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __app_ctx_stack + + if name == "_request_ctx_stack": + import warnings + + warnings.warn( + "'_request_ctx_stack' is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + return __request_ctx_stack + + raise AttributeError(name) diff --git a/venv/Lib/site-packages/flask/helpers.py b/venv/Lib/site-packages/flask/helpers.py new file mode 100644 index 0000000..284c369 --- /dev/null +++ b/venv/Lib/site-packages/flask/helpers.py @@ -0,0 +1,701 @@ +from __future__ import annotations + +import importlib.util +import os +import socket +import sys +import typing as t +import warnings +from datetime import datetime +from functools import lru_cache +from functools import update_wrapper +from threading import RLock + +import werkzeug.utils +from werkzeug.exceptions import abort as _wz_abort +from werkzeug.utils import redirect as _wz_redirect + +from .globals import _cv_request +from .globals import current_app +from .globals import request +from .globals import request_ctx +from .globals import session +from .signals import message_flashed + +if t.TYPE_CHECKING: # pragma: no cover + from werkzeug.wrappers import Response as BaseResponse + from .wrappers import Response + + +def get_debug_flag() -> bool: + """Get whether debug mode should be enabled for the app, indicated by the + :envvar:`FLASK_DEBUG` environment variable. The default is ``False``. + """ + val = os.environ.get("FLASK_DEBUG") + return bool(val and val.lower() not in {"0", "false", "no"}) + + +def get_load_dotenv(default: bool = True) -> bool: + """Get whether the user has disabled loading default dotenv files by + setting :envvar:`FLASK_SKIP_DOTENV`. The default is ``True``, load + the files. + + :param default: What to return if the env var isn't set. + """ + val = os.environ.get("FLASK_SKIP_DOTENV") + + if not val: + return default + + return val.lower() in ("0", "false", "no") + + +def stream_with_context( + generator_or_function: ( + t.Iterator[t.AnyStr] | t.Callable[..., t.Iterator[t.AnyStr]] + ) +) -> t.Iterator[t.AnyStr]: + """Request contexts disappear when the response is started on the server. + This is done for efficiency reasons and to make it less likely to encounter + memory leaks with badly written WSGI middlewares. The downside is that if + you are using streamed responses, the generator cannot access request bound + information any more. + + This function however can help you keep the context around for longer:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + @stream_with_context + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(generate()) + + Alternatively it can also be used around a specific generator:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(stream_with_context(generate())) + + .. versionadded:: 0.9 + """ + try: + gen = iter(generator_or_function) # type: ignore + except TypeError: + + def decorator(*args: t.Any, **kwargs: t.Any) -> t.Any: + gen = generator_or_function(*args, **kwargs) # type: ignore + return stream_with_context(gen) + + return update_wrapper(decorator, generator_or_function) # type: ignore + + def generator() -> t.Generator: + ctx = _cv_request.get(None) + if ctx is None: + raise RuntimeError( + "'stream_with_context' can only be used when a request" + " context is active, such as in a view function." + ) + with ctx: + # Dummy sentinel. Has to be inside the context block or we're + # not actually keeping the context around. + yield None + + # The try/finally is here so that if someone passes a WSGI level + # iterator in we're still running the cleanup logic. Generators + # don't need that because they are closed on their destruction + # automatically. + try: + yield from gen + finally: + if hasattr(gen, "close"): + gen.close() + + # The trick is to start the generator. Then the code execution runs until + # the first dummy None is yielded at which point the context was already + # pushed. This item is discarded. Then when the iteration continues the + # real generator is executed. + wrapped_g = generator() + next(wrapped_g) + return wrapped_g + + +def make_response(*args: t.Any) -> Response: + """Sometimes it is necessary to set additional headers in a view. Because + views do not have to return response objects but can return a value that + is converted into a response object by Flask itself, it becomes tricky to + add headers to it. This function can be called instead of using a return + and you will get a response object which you can use to attach headers. + + If view looked like this and you want to add a new header:: + + def index(): + return render_template('index.html', foo=42) + + You can now do something like this:: + + def index(): + response = make_response(render_template('index.html', foo=42)) + response.headers['X-Parachutes'] = 'parachutes are cool' + return response + + This function accepts the very same arguments you can return from a + view function. This for example creates a response with a 404 error + code:: + + response = make_response(render_template('not_found.html'), 404) + + The other use case of this function is to force the return value of a + view function into a response which is helpful with view + decorators:: + + response = make_response(view_function()) + response.headers['X-Parachutes'] = 'parachutes are cool' + + Internally this function does the following things: + + - if no arguments are passed, it creates a new response argument + - if one argument is passed, :meth:`flask.Flask.make_response` + is invoked with it. + - if more than one argument is passed, the arguments are passed + to the :meth:`flask.Flask.make_response` function as tuple. + + .. versionadded:: 0.6 + """ + if not args: + return current_app.response_class() + if len(args) == 1: + args = args[0] + return current_app.make_response(args) # type: ignore + + +def url_for( + endpoint: str, + *, + _anchor: str | None = None, + _method: str | None = None, + _scheme: str | None = None, + _external: bool | None = None, + **values: t.Any, +) -> str: + """Generate a URL to the given endpoint with the given values. + + This requires an active request or application context, and calls + :meth:`current_app.url_for() `. See that method + for full documentation. + + :param endpoint: The endpoint name associated with the URL to + generate. If this starts with a ``.``, the current blueprint + name (if any) will be used. + :param _anchor: If given, append this as ``#anchor`` to the URL. + :param _method: If given, generate the URL associated with this + method for the endpoint. + :param _scheme: If given, the URL will have this scheme if it is + external. + :param _external: If given, prefer the URL to be internal (False) or + require it to be external (True). External URLs include the + scheme and domain. When not in an active request, URLs are + external by default. + :param values: Values to use for the variable parts of the URL rule. + Unknown keys are appended as query string arguments, like + ``?a=b&c=d``. + + .. versionchanged:: 2.2 + Calls ``current_app.url_for``, allowing an app to override the + behavior. + + .. versionchanged:: 0.10 + The ``_scheme`` parameter was added. + + .. versionchanged:: 0.9 + The ``_anchor`` and ``_method`` parameters were added. + + .. versionchanged:: 0.9 + Calls ``app.handle_url_build_error`` on build errors. + """ + return current_app.url_for( + endpoint, + _anchor=_anchor, + _method=_method, + _scheme=_scheme, + _external=_external, + **values, + ) + + +def redirect( + location: str, code: int = 302, Response: type[BaseResponse] | None = None +) -> BaseResponse: + """Create a redirect response object. + + If :data:`~flask.current_app` is available, it will use its + :meth:`~flask.Flask.redirect` method, otherwise it will use + :func:`werkzeug.utils.redirect`. + + :param location: The URL to redirect to. + :param code: The status code for the redirect. + :param Response: The response class to use. Not used when + ``current_app`` is active, which uses ``app.response_class``. + + .. versionadded:: 2.2 + Calls ``current_app.redirect`` if available instead of always + using Werkzeug's default ``redirect``. + """ + if current_app: + return current_app.redirect(location, code=code) + + return _wz_redirect(location, code=code, Response=Response) + + +def abort(code: int | BaseResponse, *args: t.Any, **kwargs: t.Any) -> t.NoReturn: + """Raise an :exc:`~werkzeug.exceptions.HTTPException` for the given + status code. + + If :data:`~flask.current_app` is available, it will call its + :attr:`~flask.Flask.aborter` object, otherwise it will use + :func:`werkzeug.exceptions.abort`. + + :param code: The status code for the exception, which must be + registered in ``app.aborter``. + :param args: Passed to the exception. + :param kwargs: Passed to the exception. + + .. versionadded:: 2.2 + Calls ``current_app.aborter`` if available instead of always + using Werkzeug's default ``abort``. + """ + if current_app: + current_app.aborter(code, *args, **kwargs) + + _wz_abort(code, *args, **kwargs) + + +def get_template_attribute(template_name: str, attribute: str) -> t.Any: + """Loads a macro (or variable) a template exports. This can be used to + invoke a macro from within Python code. If you for example have a + template named :file:`_cider.html` with the following contents: + + .. sourcecode:: html+jinja + + {% macro hello(name) %}Hello {{ name }}!{% endmacro %} + + You can access this from Python code like this:: + + hello = get_template_attribute('_cider.html', 'hello') + return hello('World') + + .. versionadded:: 0.2 + + :param template_name: the name of the template + :param attribute: the name of the variable of macro to access + """ + return getattr(current_app.jinja_env.get_template(template_name).module, attribute) + + +def flash(message: str, category: str = "message") -> None: + """Flashes a message to the next request. In order to remove the + flashed message from the session and to display it to the user, + the template has to call :func:`get_flashed_messages`. + + .. versionchanged:: 0.3 + `category` parameter added. + + :param message: the message to be flashed. + :param category: the category for the message. The following values + are recommended: ``'message'`` for any kind of message, + ``'error'`` for errors, ``'info'`` for information + messages and ``'warning'`` for warnings. However any + kind of string can be used as category. + """ + # Original implementation: + # + # session.setdefault('_flashes', []).append((category, message)) + # + # This assumed that changes made to mutable structures in the session are + # always in sync with the session object, which is not true for session + # implementations that use external storage for keeping their keys/values. + flashes = session.get("_flashes", []) + flashes.append((category, message)) + session["_flashes"] = flashes + app = current_app._get_current_object() # type: ignore + message_flashed.send( + app, + _async_wrapper=app.ensure_sync, + message=message, + category=category, + ) + + +def get_flashed_messages( + with_categories: bool = False, category_filter: t.Iterable[str] = () +) -> list[str] | list[tuple[str, str]]: + """Pulls all flashed messages from the session and returns them. + Further calls in the same request to the function will return + the same messages. By default just the messages are returned, + but when `with_categories` is set to ``True``, the return value will + be a list of tuples in the form ``(category, message)`` instead. + + Filter the flashed messages to one or more categories by providing those + categories in `category_filter`. This allows rendering categories in + separate html blocks. The `with_categories` and `category_filter` + arguments are distinct: + + * `with_categories` controls whether categories are returned with message + text (``True`` gives a tuple, where ``False`` gives just the message text). + * `category_filter` filters the messages down to only those matching the + provided categories. + + See :doc:`/patterns/flashing` for examples. + + .. versionchanged:: 0.3 + `with_categories` parameter added. + + .. versionchanged:: 0.9 + `category_filter` parameter added. + + :param with_categories: set to ``True`` to also receive categories. + :param category_filter: filter of categories to limit return values. Only + categories in the list will be returned. + """ + flashes = request_ctx.flashes + if flashes is None: + flashes = session.pop("_flashes") if "_flashes" in session else [] + request_ctx.flashes = flashes + if category_filter: + flashes = list(filter(lambda f: f[0] in category_filter, flashes)) + if not with_categories: + return [x[1] for x in flashes] + return flashes + + +def _prepare_send_file_kwargs(**kwargs: t.Any) -> dict[str, t.Any]: + if kwargs.get("max_age") is None: + kwargs["max_age"] = current_app.get_send_file_max_age + + kwargs.update( + environ=request.environ, + use_x_sendfile=current_app.config["USE_X_SENDFILE"], + response_class=current_app.response_class, + _root_path=current_app.root_path, # type: ignore + ) + return kwargs + + +def send_file( + path_or_file: os.PathLike | str | t.BinaryIO, + mimetype: str | None = None, + as_attachment: bool = False, + download_name: str | None = None, + conditional: bool = True, + etag: bool | str = True, + last_modified: datetime | int | float | None = None, + max_age: None | (int | t.Callable[[str | None], int | None]) = None, +) -> Response: + """Send the contents of a file to the client. + + The first argument can be a file path or a file-like object. Paths + are preferred in most cases because Werkzeug can manage the file and + get extra information from the path. Passing a file-like object + requires that the file is opened in binary mode, and is mostly + useful when building a file in memory with :class:`io.BytesIO`. + + Never pass file paths provided by a user. The path is assumed to be + trusted, so a user could craft a path to access a file you didn't + intend. Use :func:`send_from_directory` to safely serve + user-requested paths from within a directory. + + If the WSGI server sets a ``file_wrapper`` in ``environ``, it is + used, otherwise Werkzeug's built-in wrapper is used. Alternatively, + if the HTTP server supports ``X-Sendfile``, configuring Flask with + ``USE_X_SENDFILE = True`` will tell the server to send the given + path, which is much more efficient than reading it in Python. + + :param path_or_file: The path to the file to send, relative to the + current working directory if a relative path is given. + Alternatively, a file-like object opened in binary mode. Make + sure the file pointer is seeked to the start of the data. + :param mimetype: The MIME type to send for the file. If not + provided, it will try to detect it from the file name. + :param as_attachment: Indicate to a browser that it should offer to + save the file instead of displaying it. + :param download_name: The default name browsers will use when saving + the file. Defaults to the passed file name. + :param conditional: Enable conditional and range responses based on + request headers. Requires passing a file path and ``environ``. + :param etag: Calculate an ETag for the file, which requires passing + a file path. Can also be a string to use instead. + :param last_modified: The last modified time to send for the file, + in seconds. If not provided, it will try to detect it from the + file path. + :param max_age: How long the client should cache the file, in + seconds. If set, ``Cache-Control`` will be ``public``, otherwise + it will be ``no-cache`` to prefer conditional caching. + + .. versionchanged:: 2.0 + ``download_name`` replaces the ``attachment_filename`` + parameter. If ``as_attachment=False``, it is passed with + ``Content-Disposition: inline`` instead. + + .. versionchanged:: 2.0 + ``max_age`` replaces the ``cache_timeout`` parameter. + ``conditional`` is enabled and ``max_age`` is not set by + default. + + .. versionchanged:: 2.0 + ``etag`` replaces the ``add_etags`` parameter. It can be a + string to use instead of generating one. + + .. versionchanged:: 2.0 + Passing a file-like object that inherits from + :class:`~io.TextIOBase` will raise a :exc:`ValueError` rather + than sending an empty file. + + .. versionadded:: 2.0 + Moved the implementation to Werkzeug. This is now a wrapper to + pass some Flask-specific arguments. + + .. versionchanged:: 1.1 + ``filename`` may be a :class:`~os.PathLike` object. + + .. versionchanged:: 1.1 + Passing a :class:`~io.BytesIO` object supports range requests. + + .. versionchanged:: 1.0.3 + Filenames are encoded with ASCII instead of Latin-1 for broader + compatibility with WSGI servers. + + .. versionchanged:: 1.0 + UTF-8 filenames as specified in :rfc:`2231` are supported. + + .. versionchanged:: 0.12 + The filename is no longer automatically inferred from file + objects. If you want to use automatic MIME and etag support, + pass a filename via ``filename_or_fp`` or + ``attachment_filename``. + + .. versionchanged:: 0.12 + ``attachment_filename`` is preferred over ``filename`` for MIME + detection. + + .. versionchanged:: 0.9 + ``cache_timeout`` defaults to + :meth:`Flask.get_send_file_max_age`. + + .. versionchanged:: 0.7 + MIME guessing and etag support for file-like objects was + deprecated because it was unreliable. Pass a filename if you are + able to, otherwise attach an etag yourself. + + .. versionchanged:: 0.5 + The ``add_etags``, ``cache_timeout`` and ``conditional`` + parameters were added. The default behavior is to add etags. + + .. versionadded:: 0.2 + """ + return werkzeug.utils.send_file( # type: ignore[return-value] + **_prepare_send_file_kwargs( + path_or_file=path_or_file, + environ=request.environ, + mimetype=mimetype, + as_attachment=as_attachment, + download_name=download_name, + conditional=conditional, + etag=etag, + last_modified=last_modified, + max_age=max_age, + ) + ) + + +def send_from_directory( + directory: os.PathLike | str, + path: os.PathLike | str, + **kwargs: t.Any, +) -> Response: + """Send a file from within a directory using :func:`send_file`. + + .. code-block:: python + + @app.route("/uploads/") + def download_file(name): + return send_from_directory( + app.config['UPLOAD_FOLDER'], name, as_attachment=True + ) + + This is a secure way to serve files from a folder, such as static + files or uploads. Uses :func:`~werkzeug.security.safe_join` to + ensure the path coming from the client is not maliciously crafted to + point outside the specified directory. + + If the final path does not point to an existing regular file, + raises a 404 :exc:`~werkzeug.exceptions.NotFound` error. + + :param directory: The directory that ``path`` must be located under, + relative to the current application's root path. + :param path: The path to the file to send, relative to + ``directory``. + :param kwargs: Arguments to pass to :func:`send_file`. + + .. versionchanged:: 2.0 + ``path`` replaces the ``filename`` parameter. + + .. versionadded:: 2.0 + Moved the implementation to Werkzeug. This is now a wrapper to + pass some Flask-specific arguments. + + .. versionadded:: 0.5 + """ + return werkzeug.utils.send_from_directory( # type: ignore[return-value] + directory, path, **_prepare_send_file_kwargs(**kwargs) + ) + + +def get_root_path(import_name: str) -> str: + """Find the root path of a package, or the path that contains a + module. If it cannot be found, returns the current working + directory. + + Not to be confused with the value returned by :func:`find_package`. + + :meta private: + """ + # Module already imported and has a file attribute. Use that first. + mod = sys.modules.get(import_name) + + if mod is not None and hasattr(mod, "__file__") and mod.__file__ is not None: + return os.path.dirname(os.path.abspath(mod.__file__)) + + # Next attempt: check the loader. + try: + spec = importlib.util.find_spec(import_name) + + if spec is None: + raise ValueError + except (ImportError, ValueError): + loader = None + else: + loader = spec.loader + + # 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: + return os.getcwd() + + if hasattr(loader, "get_filename"): + filepath = loader.get_filename(import_name) + else: + # Fall back to imports. + __import__(import_name) + mod = sys.modules[import_name] + filepath = getattr(mod, "__file__", None) + + # If we don't have a file path it might be because it is a + # namespace package. In this case pick the root path from the + # first module that is contained in the package. + if filepath is None: + raise RuntimeError( + "No root path can be found for the provided module" + f" {import_name!r}. This can happen because the module" + " came from an import hook that does not provide file" + " name information or because it's a namespace package." + " In this case the root path needs to be explicitly" + " provided." + ) + + # filepath is import_name.py for a module, or __init__.py for a package. + return os.path.dirname(os.path.abspath(filepath)) + + +class locked_cached_property(werkzeug.utils.cached_property): + """A :func:`property` that is only evaluated once. Like + :class:`werkzeug.utils.cached_property` except access uses a lock + for thread safety. + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. Use a lock inside the decorated function if + locking is needed. + + .. versionchanged:: 2.0 + Inherits from Werkzeug's ``cached_property`` (and ``property``). + """ + + def __init__( + self, + fget: t.Callable[[t.Any], t.Any], + name: str | None = None, + doc: str | None = None, + ) -> None: + import warnings + + warnings.warn( + "'locked_cached_property' is deprecated and will be removed in Flask 2.4." + " Use a lock inside the decorated function if locking is needed.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(fget, name=name, doc=doc) + self.lock = RLock() + + def __get__(self, obj: object, type: type = None) -> t.Any: # type: ignore + if obj is None: + return self + + with self.lock: + return super().__get__(obj, type=type) + + def __set__(self, obj: object, value: t.Any) -> None: + with self.lock: + super().__set__(obj, value) + + def __delete__(self, obj: object) -> None: + with self.lock: + super().__delete__(obj) + + +def is_ip(value: str) -> bool: + """Determine if the given string is an IP address. + + :param value: value to check + :type value: str + + :return: True if string is an IP address + :rtype: bool + + .. deprecated:: 2.3 + Will be removed in Flask 2.4. + """ + warnings.warn( + "The 'is_ip' function is deprecated and will be removed in Flask 2.4.", + DeprecationWarning, + stacklevel=2, + ) + + for family in (socket.AF_INET, socket.AF_INET6): + try: + socket.inet_pton(family, value) + except OSError: + pass + else: + return True + + return False + + +@lru_cache(maxsize=None) +def _split_blueprint_path(name: str) -> list[str]: + out: list[str] = [name] + + if "." in name: + out.extend(_split_blueprint_path(name.rpartition(".")[0])) + + return out diff --git a/venv/Lib/site-packages/flask/json/__init__.py b/venv/Lib/site-packages/flask/json/__init__.py new file mode 100644 index 0000000..f15296f --- /dev/null +++ b/venv/Lib/site-packages/flask/json/__init__.py @@ -0,0 +1,170 @@ +from __future__ import annotations + +import json as _json +import typing as t + +from ..globals import current_app +from .provider import _default + +if t.TYPE_CHECKING: # pragma: no cover + from ..wrappers import Response + + +def dumps(obj: t.Any, **kwargs: t.Any) -> str: + """Serialize data as JSON. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.dumps() ` + method, otherwise it will use :func:`json.dumps`. + + :param obj: The data to serialize. + :param kwargs: Arguments passed to the ``dumps`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.dumps``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0.2 + :class:`decimal.Decimal` is supported by converting to a string. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. + + .. versionchanged:: 1.0.3 + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + if current_app: + return current_app.json.dumps(obj, **kwargs) + + kwargs.setdefault("default", _default) + return _json.dumps(obj, **kwargs) + + +def dump(obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None: + """Serialize data as JSON and write to a file. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.dump() ` + method, otherwise it will use :func:`json.dump`. + + :param obj: The data to serialize. + :param fp: A file opened for writing text. Should use the UTF-8 + encoding to be valid JSON. + :param kwargs: Arguments passed to the ``dump`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.dump``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0 + Writing to a binary file, and the ``encoding`` argument, will be + removed in Flask 2.1. + """ + if current_app: + current_app.json.dump(obj, fp, **kwargs) + else: + kwargs.setdefault("default", _default) + _json.dump(obj, fp, **kwargs) + + +def loads(s: str | bytes, **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.loads() ` + method, otherwise it will use :func:`json.loads`. + + :param s: Text or UTF-8 bytes. + :param kwargs: Arguments passed to the ``loads`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.loads``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. The data must be a + string or UTF-8 bytes. + + .. versionchanged:: 1.0.3 + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + if current_app: + return current_app.json.loads(s, **kwargs) + + return _json.loads(s, **kwargs) + + +def load(fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any: + """Deserialize data as JSON read from a file. + + If :data:`~flask.current_app` is available, it will use its + :meth:`app.json.load() ` + method, otherwise it will use :func:`json.load`. + + :param fp: A file opened for reading text or UTF-8 bytes. + :param kwargs: Arguments passed to the ``load`` implementation. + + .. versionchanged:: 2.3 + The ``app`` parameter was removed. + + .. versionchanged:: 2.2 + Calls ``current_app.json.load``, allowing an app to override + the behavior. + + .. versionchanged:: 2.2 + The ``app`` parameter will be removed in Flask 2.3. + + .. versionchanged:: 2.0 + ``encoding`` will be removed in Flask 2.1. The file must be text + mode, or binary mode with UTF-8 bytes. + """ + if current_app: + return current_app.json.load(fp, **kwargs) + + return _json.load(fp, **kwargs) + + +def jsonify(*args: t.Any, **kwargs: t.Any) -> Response: + """Serialize the given arguments as JSON, and return a + :class:`~flask.Response` object with the ``application/json`` + mimetype. A dict or list returned from a view will be converted to a + JSON response automatically without needing to call this. + + This requires an active request or application context, and calls + :meth:`app.json.response() `. + + In debug mode, the output is formatted with indentation to make it + easier to read. This may also be controlled by the provider. + + Either positional or keyword arguments can be given, not both. + If no arguments are given, ``None`` is serialized. + + :param args: A single value to serialize, or multiple values to + treat as a list to serialize. + :param kwargs: Treat as a dict to serialize. + + .. versionchanged:: 2.2 + Calls ``current_app.json.response``, allowing an app to override + the behavior. + + .. versionchanged:: 2.0.2 + :class:`decimal.Decimal` is supported by converting to a string. + + .. versionchanged:: 0.11 + Added support for serializing top-level arrays. This was a + security risk in ancient browsers. See :ref:`security-json`. + + .. versionadded:: 0.2 + """ + return current_app.json.response(*args, **kwargs) diff --git a/venv/Lib/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/flask/json/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07d2f9447cee659795f9c45a8826a1670f7d9e04 GIT binary patch literal 6884 zcmd5>O>Y~=8Q!HRX)RfnzrSNoVml}ec`eJaQLu&^!yk#0)(#>iX;l^EkUNytTJAEl zOQ{TmqK6!cA}D-|jy@!*i~f!N045L+gMbSIMGw9d0*qdC>hsR*E=ieEWkX3#tY&9- zcHWtJ=bdMsdGwc&ks$-WfB&&4{(itP{z(tXFQYT&vn6D{G#tY*J)>$)ngTH>n#&jAUHe`b__kB8*216U*cEL} zy{pM!!F7bRsof8f2leIEqOw9p0%wc`(VUQruCm{5D_^Pm<$SSizZiEuU*nQj873~z zrsm@DMF9(w5!QWKIuGTz3pQvDp8?$Y; zAY_Q>D$j9$Ryg@Qo3Jmc7RZy-fg(8q22_J05|S;#-BMJ81>tOJXCk$8oqJvgOC1x@ z;o4$xjNyY|(e-B;_Zixw{=>eM@NsH|22>Jre8COmrVWqV?WXf(gg}@tI-=}Wxo6+d zcNGU=y;cik1b3AhtQ`1gFrq%7an7(jkl(zWv}?tp@XLXN3hc)Z5s5X}2(@Nc=8hl|a(? zD(-9@^)TH!h+2aQXbebN{jDs;W2;}qOlv3onbYuRZUki=jx+DL(Yy81%-x#sKMCagEzI)Fg76n+e&Lp8LN^lUYP>wp zXGJ)pR@ZrI;(Vdt`fgMx*tLe-Lyb`~LJfY5%IL|J(K8Rq z&C$1TJ^WbTo7P)TvP0iz4}6zBaNqs<@VD8sE7`Nn?Agb|yTAC^{jfQF2G?>$-<#Pp z&tTbTWh%9`9g%(e?r$*vzinmj1imPz7=7=0>rnFO|3=9rvyuT$W(X&-DFE!3 zGTVuj&)d)SadSh&M8G&~QDPo+&{tef#3A}apy-xC^rbNLhvrz`o?f+Yw=C4Cq@!>Q@@5w;!id zAAXX!n~=BU`dl{Dlwe~(fRfL<5Eev6;mcTpwW*C7UQ2qV%=4g_fM<%Qw0UFr~jk5i3KDPF)Scg}v*Oto< zCYshbu7?NpJx!ljyS}%Md}ke5&VBu>Z!LSpvYVFu*c$m_=>Em!Ow&4p3%I22X(~Zh zjg}d%4Fi|h5;m+zgyocop)due5+2q8(+kqKh~Pf{ZAipSz6+kYAyQ)UV^A?K;Lg^l znELXCVMNthha(|~7;U0J1-0Q+m|qyw!Rb5uWnY zie_Zb&4ViM#bkecLY2!Z9;MNxUwKu7N=6>Tdg|m%8ct5oTS|V3zwm7&fRl-s++1vv z8{Qn9!1eI5zBjFje<>RCX><4#uH{?$-prm-K(V$*6Not_gcQg_suvD#aQTprVsjYN#4GP#3Ue#AJq^K~|!<=l75<(8!YK63l3G z5Pi-4FTsrQ^_X$`!G}FDBY(ft8#7v2l7}SeGiCgxKjIajPUbTk8Ssh@ z&e2;4YRf=5lee;+Vhs_wSr_L&mM}PoFS(J@ki}SoaiPLAYQhG?cU)A#gm^CY72OVTeGNPdu2@XCWTFIU6-949r1GGW zmem-qM?n>hm7!WRR5yZp#C#$2(he9EfVH||9ClO4#;0_F5o7q}2yRfX1iFK6b&P;I zK*6M4LbiJAQb~Wd1Z&C1R}+}J?K4M|>a$FTD)|wks9_-JD~>=IASoj%W?kP&lp{Lj zRQWuqWh&SO4_(qB0t|*bHui5+ukr>Iolu>JXfQJHJlKNDLd~SwnU?ErVpYIGEr1*V zX@Yy?j(O2o45ZT$C$SKs!e@*@6=fwzYnq1Ptm@|l)os-qhU>(ktPBo4vPejn(tYO>L+orMe z(8}J9 z*K5`l;9A`iS0(LRv}uL^K(g9rn&ud literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/flask/json/__pycache__/provider.cpython-311.pyc b/venv/Lib/site-packages/flask/json/__pycache__/provider.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f660913ceb43974f9523ede627ed849081391b52 GIT binary patch literal 9991 zcmeHNTWlQHd7jyw-5ruE?oy)e7ms9F;#$c$f`;4|KK1+0 znVH>LlBk_FZygTLIXw4s{`)ul^`=d|5}yBDD474gSCamN{_vleD9BHKi^6TmkPNvb zmE|#6rgEed8H?~dIu_-*GN$l6HWuf3Vl2UPbxcJbE%lUp$9nl#rPNnWjwNNuj9=U2 zFUOKb%!rrz%c-#xdc}-HDP0~I8<3@lbY3#l4a(b&y?fT^7O|SG(T!$ z=SsRgje`27Y1h!*EQ%>b>g_^)@+$tmEt%4oY)H5f8Mm?9h+|iZvB&5`9y9hD{mA3S zK4SoR!g$Kqf?PE;V>|L5W52Nzd9SexJ3ZhgU%mXs$R$>tu?&;x|AvK5Yqq0T44oO8 zZ8}l*v`0an|vC+R~*9VoXycnrfxf0u53C}xq?wI z*X#oCi3~Q#v zrwevmC~&4Ih%JB?e9fHhI4oCqe}Wh$%X?(6+0{zkzluCRTY;{-<9>MMFkN)lM4%!c zubt|i@g*@wMYAfz5k*r_)ztW0-idNGo#|!bg`9Re#1p}=tTsxlaNR1Eh!?;C4BVjG zn$8bI?2_YC<_gzMeVUmQS)ApEvjweM0ohE=J8~Y2;4W}{YrO85-UhN+ZN_9aL`*jf z)5zttTv! zqxRoYKA6LhAV=~@Ch8`<-McZqeOI9kXCkg*o23cXhdFH;rD>~UXL47s*x2>e@i}9* za`kMrSSN#F&@Rk56Wer{{0XlMQEXJ{YWk<3dE2Y26keevm~!9%UVLkr4{o(23o zL6hW0tK-*JV@~#TW!8;PU)R~B?M7{fh3<~-1ILn|q*1snIW*FHej;b&xu0J)nWdLV z+@b4qA~|izBOIr@;2tcN1Cw~&z__>@F)-U^5z$rbC8xcv&k{4$Nab+VLX1+cK#7%R zt;(d(FP;`?Px3%^w~SPsi@pXijaL|}vIkMN85?KYDA|F;Cbqx^*%st(jBA3q&7u3` zbwg-=LPl*~`mdyvI?z=2v#m5FGErOYak3ZRco&!UUXiBrA7V&;YZp+sEj1#GeoH8i zNDZlz11DrlYDDkKf8NE5uwF7aFrp8F9P3{=S7Fx~xJM|339IBw&+kWs2@-aVrXjOX z0RhM)&3e24SjNFBx2|6KSrDo;&(tKulWJtQ4yT?_VWK&VW%2k3XoH9#6Ua z?`S>(5sdNEvwgVXjM71C4Hbgm3QDx3ptwTRof}v~@IOK?o055HB`x*z{Y?F-dUMy! z!CSlToM{d`i+Aya$d}Y3E%iv#e+5^__G%yaL2GE^vyN$hBVqd4Su>D||3RE=2oq>P z%AQ}lSgkDu|0mbVcH(e-&_5ZNfo{6vw&gCk!WX9858fwF48`P1YDey(z_O%8*_IK{N3Td zKKxgizs)pLS-gugB5$f$!Mh6CfYkw~4(ID#PN`uno6Wwrnl`MWLuzhVH0KniHe@5Z6Dx@4GS;cd z4f4g6k-3vF!`#KmGS9aj%4m*0ZQ8!eMMopD2}Luk!D-jVtIpIH#9NG(fDY*yovoSN zT)5GaS@G{aOI_C5jIHp;OqeV)?=PB%m76;dQYq{9As62sLjvl=rDS?Vl6&5fZ=MtR z!_B*!d)`{w{B~>e+s)+Lk5XHxe#af&ykmLG_M6W??(1K0K0JBj#8;*^B9PPAKi<~Ci<1kwX zCEKlyXxO(hu)yiZDP`MiJVv;Lv`gZF2a`cJg_ zPb@^2Q(JD#ex5q~S?ch8<)3>0q4$$-JxG0=YQ8+$OdVcIU1_DRG}S9yR7bF9m_UgK zGb~9ZLNXr2g~v+XJXb-Cmv}oV!;IR|u2HA`>-6+y;wGGoLibEGXC}@xYI=6#c79vO zf_8F}#7=2EcFNn=+bOA`OdrK96}@cc^KNfGU#=SU5|xwr{157S$!kgE^G3Cp&$B_A zoxC}AkP@

vfUrSAoDmGlmg)@{O_XA4wjfv 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%0DTRUlPIU~l5o==Br=&cYmqFs&ag~VZ89DqX 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%0DElZr&!Ct0TKQ2F2e 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Ξ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