Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/rdflib/py3compat.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/rdflib/py3compat.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,205 @@ +""" +Utility functions and objects to ease Python 3 compatibility. +""" +import sys +import re +import codecs +import warnings + +try: + from functools import wraps + assert wraps +except ImportError: + # No-op wraps decorator + def wraps(f): + def dec(newf): + return newf + return dec + + +def cast_bytes(s, enc='utf-8'): + if isinstance(s, str): + return s.encode(enc) + return s + +PY3 = (sys.version_info[0] >= 3) + + +def _modify_str_or_docstring(str_change_func): + @wraps(str_change_func) + def wrapper(func_or_str): + if isinstance(func_or_str, str): + func = None + doc = func_or_str + else: + func = func_or_str + doc = func.__doc__ + + doc = str_change_func(doc) + + if func: + func.__doc__ = doc + return func + return doc + return wrapper + + +if PY3: + # Python 3: + # --------- + def b(s): + return s.encode('ascii') + + def ascii(stream): + return codecs.getreader('ascii')(stream) + + def bopen(*args, **kwargs): + return open(*args, mode = 'rb', **kwargs) + + bytestype = bytes + + # Abstract u'abc' syntax: + @_modify_str_or_docstring + def format_doctest_out(s): + """Python 2 version + "%(u)s'abc'" --> "'abc'" + "%(b)s'abc'" --> "b'abc'" + "55%(L)s" --> "55" + "unicode(x)" --> "str(x)" + + Accepts a string or a function, so it can be used as a decorator.""" + # s may be None if processed by Py2exe + if s is None: + return '' + return s % {'u': '', 'b': 'b', 'L': '', 'unicode': 'str'} + + def type_cmp(a, b): + """Python 2 style comparison based on type""" + ta, tb = type(a).__name__, type(b).__name__ + # Ugly hack: some tests rely on tuple sorting before unicode, and I + # don't know if that's important. Better retain it for now. + if ta == 'str': + ta = 'unicode' + if tb == 'str': + tb = 'unicode' + # return 1 if ta > tb else -1 if ta < tb else 0 + if ta > tb: + return 1 + elif ta < tb: + return -1 + else: + return 0 + + def sign(n): + if n < 0: + return -1 + if n > 0: + return 1 + return 0 + +else: + # Python 2 + # -------- + def b(s): + return s + + def ascii(stream): + return stream + + bopen = open + + bytestype = str + + # Abstract u'abc' syntax: + @_modify_str_or_docstring + def format_doctest_out(s): + """Python 2 version + "%(u)s'abc'" --> "u'abc'" + "%(b)s'abc'" --> "'abc'" + "55%(L)s" --> "55L" + + Accepts a string or a function, so it can be used as a decorator.""" + # s may be None if processed by Py2exe + if s is None: + return '' + return s % {'u': 'u', 'b': '', 'L': 'L', 'unicode': 'unicode'} + + def type_cmp(a, b): + # return 1 if a > b else -1 if a < b else 0 + if a > b: + return 1 + elif a < b: + return -1 + else: + return 0 + + def sign(n): + return cmp(n, 0) + +r_unicodeEscape = re.compile(r'(\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8})') + +def _unicodeExpand(s): + return r_unicodeEscape.sub(lambda m: chr(int(m.group(0)[2:], 16)), s) + +narrow_build = False +try: + chr(0x10FFFF) +except ValueError: + narrow_build = True + +if narrow_build: + def _unicodeExpand(s): + try: + return r_unicodeEscape.sub( + lambda m: chr(int(m.group(0)[2:], 16)), s) + except ValueError: + warnings.warn( + 'Encountered a unicode char > 0xFFFF in a narrow python build. ' + 'Trying to degrade gracefully, but this can cause problems ' + 'later when working with the string:\n%s' % s) + return r_unicodeEscape.sub( + lambda m: codecs.decode(m.group(0), 'unicode_escape'), s) + + +def decodeStringEscape(s): + + """ + s is byte-string - replace \ escapes in string + """ + + if not PY3: + s = s.decode('string-escape') + else: + s = s.replace('\\t', '\t') + s = s.replace('\\n', '\n') + s = s.replace('\\r', '\r') + s = s.replace('\\b', '\b') + s = s.replace('\\f', '\f') + s = s.replace('\\"', '"') + s = s.replace("\\'", "'") + s = s.replace('\\\\', '\\') + + return s + #return _unicodeExpand(s) # hmm - string escape doesn't do unicode escaping + +def decodeUnicodeEscape(s): + """ + s is a unicode string + replace \n and \\u00AC unicode escapes + """ + if not PY3: + s = s.encode('utf-8').decode('string-escape') + s = _unicodeExpand(s) + else: + s = s.replace('\\t', '\t') + s = s.replace('\\n', '\n') + s = s.replace('\\r', '\r') + s = s.replace('\\b', '\b') + s = s.replace('\\f', '\f') + s = s.replace('\\"', '"') + s = s.replace("\\'", "'") + s = s.replace('\\\\', '\\') + + s = _unicodeExpand(s) # hmm - string escape doesn't do unicode escaping + + return s