Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/click/_unicodefun.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler |
|---|---|
| date | Fri, 31 Jul 2020 00:18:57 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:d30785e31577 |
|---|---|
| 1 import codecs | |
| 2 import os | |
| 3 import sys | |
| 4 | |
| 5 from ._compat import PY2 | |
| 6 | |
| 7 | |
| 8 def _find_unicode_literals_frame(): | |
| 9 import __future__ | |
| 10 | |
| 11 if not hasattr(sys, "_getframe"): # not all Python implementations have it | |
| 12 return 0 | |
| 13 frm = sys._getframe(1) | |
| 14 idx = 1 | |
| 15 while frm is not None: | |
| 16 if frm.f_globals.get("__name__", "").startswith("click."): | |
| 17 frm = frm.f_back | |
| 18 idx += 1 | |
| 19 elif frm.f_code.co_flags & __future__.unicode_literals.compiler_flag: | |
| 20 return idx | |
| 21 else: | |
| 22 break | |
| 23 return 0 | |
| 24 | |
| 25 | |
| 26 def _check_for_unicode_literals(): | |
| 27 if not __debug__: | |
| 28 return | |
| 29 | |
| 30 from . import disable_unicode_literals_warning | |
| 31 | |
| 32 if not PY2 or disable_unicode_literals_warning: | |
| 33 return | |
| 34 bad_frame = _find_unicode_literals_frame() | |
| 35 if bad_frame <= 0: | |
| 36 return | |
| 37 from warnings import warn | |
| 38 | |
| 39 warn( | |
| 40 Warning( | |
| 41 "Click detected the use of the unicode_literals __future__" | |
| 42 " import. This is heavily discouraged because it can" | |
| 43 " introduce subtle bugs in your code. You should instead" | |
| 44 ' use explicit u"" literals for your unicode strings. For' | |
| 45 " more information see" | |
| 46 " https://click.palletsprojects.com/python3/" | |
| 47 ), | |
| 48 stacklevel=bad_frame, | |
| 49 ) | |
| 50 | |
| 51 | |
| 52 def _verify_python3_env(): | |
| 53 """Ensures that the environment is good for unicode on Python 3.""" | |
| 54 if PY2: | |
| 55 return | |
| 56 try: | |
| 57 import locale | |
| 58 | |
| 59 fs_enc = codecs.lookup(locale.getpreferredencoding()).name | |
| 60 except Exception: | |
| 61 fs_enc = "ascii" | |
| 62 if fs_enc != "ascii": | |
| 63 return | |
| 64 | |
| 65 extra = "" | |
| 66 if os.name == "posix": | |
| 67 import subprocess | |
| 68 | |
| 69 try: | |
| 70 rv = subprocess.Popen( | |
| 71 ["locale", "-a"], stdout=subprocess.PIPE, stderr=subprocess.PIPE | |
| 72 ).communicate()[0] | |
| 73 except OSError: | |
| 74 rv = b"" | |
| 75 good_locales = set() | |
| 76 has_c_utf8 = False | |
| 77 | |
| 78 # Make sure we're operating on text here. | |
| 79 if isinstance(rv, bytes): | |
| 80 rv = rv.decode("ascii", "replace") | |
| 81 | |
| 82 for line in rv.splitlines(): | |
| 83 locale = line.strip() | |
| 84 if locale.lower().endswith((".utf-8", ".utf8")): | |
| 85 good_locales.add(locale) | |
| 86 if locale.lower() in ("c.utf8", "c.utf-8"): | |
| 87 has_c_utf8 = True | |
| 88 | |
| 89 extra += "\n\n" | |
| 90 if not good_locales: | |
| 91 extra += ( | |
| 92 "Additional information: on this system no suitable" | |
| 93 " UTF-8 locales were discovered. This most likely" | |
| 94 " requires resolving by reconfiguring the locale" | |
| 95 " system." | |
| 96 ) | |
| 97 elif has_c_utf8: | |
| 98 extra += ( | |
| 99 "This system supports the C.UTF-8 locale which is" | |
| 100 " recommended. You might be able to resolve your issue" | |
| 101 " by exporting the following environment variables:\n\n" | |
| 102 " export LC_ALL=C.UTF-8\n" | |
| 103 " export LANG=C.UTF-8" | |
| 104 ) | |
| 105 else: | |
| 106 extra += ( | |
| 107 "This system lists a couple of UTF-8 supporting locales" | |
| 108 " that you can pick from. The following suitable" | |
| 109 " locales were discovered: {}".format(", ".join(sorted(good_locales))) | |
| 110 ) | |
| 111 | |
| 112 bad_locale = None | |
| 113 for locale in os.environ.get("LC_ALL"), os.environ.get("LANG"): | |
| 114 if locale and locale.lower().endswith((".utf-8", ".utf8")): | |
| 115 bad_locale = locale | |
| 116 if locale is not None: | |
| 117 break | |
| 118 if bad_locale is not None: | |
| 119 extra += ( | |
| 120 "\n\nClick discovered that you exported a UTF-8 locale" | |
| 121 " but the locale system could not pick up from it" | |
| 122 " because it does not exist. The exported locale is" | |
| 123 " '{}' but it is not supported".format(bad_locale) | |
| 124 ) | |
| 125 | |
| 126 raise RuntimeError( | |
| 127 "Click will abort further execution because Python 3 was" | |
| 128 " configured to use ASCII as encoding for the environment." | |
| 129 " Consult https://click.palletsprojects.com/python3/ for" | |
| 130 " mitigation steps.{}".format(extra) | |
| 131 ) |
