diff options
author | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2017-01-31 23:41:52 +0100 |
---|---|---|
committer | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2017-01-31 23:41:52 +0100 |
commit | 96ff3544a8a2a5835645564de6fe93ec2c9d9fda (patch) | |
tree | 55cbcde992419077a12d0df691d34cd2263a0adb | |
parent | 1d01e1ef7a0b321103cacee4c23838e8988a2a60 (diff) | |
download | rdflib-96ff3544a8a2a5835645564de6fe93ec2c9d9fda.tar.gz |
moved all compat code to rdflib.compatsix_2to3
-rw-r--r-- | rdflib/compat.py | 124 | ||||
-rwxr-xr-x | rdflib/plugins/parsers/notation3.py | 4 | ||||
-rw-r--r-- | rdflib/plugins/parsers/ntriples.py | 6 | ||||
-rw-r--r-- | rdflib/plugins/sparql/parser.py | 2 | ||||
-rw-r--r-- | rdflib/py3compat.py | 118 | ||||
-rw-r--r-- | rdflib/term.py | 2 | ||||
-rw-r--r-- | rdflib/util.py | 2 | ||||
-rw-r--r-- | test/test_dawg.py | 2 |
8 files changed, 130 insertions, 130 deletions
diff --git a/rdflib/compat.py b/rdflib/compat.py index 33b569bd..c82f426f 100644 --- a/rdflib/compat.py +++ b/rdflib/compat.py @@ -1,7 +1,19 @@ -# -# code to simplify supporting older python versions -# +""" +Utility functions and objects to ease Python 2/3 compatibility, +and different versions of support libraries. +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +import re +import codecs +import warnings + +import six + + +# clean ElementTree import try: from lxml import etree except ImportError: @@ -31,3 +43,109 @@ except AttributeError: def etree_register_namespace(prefix, uri): etreenative._namespace_map[uri] = prefix + +def cast_bytes(s, enc='utf-8'): + if isinstance(s, six.text_type): + return s.encode(enc) + return s + +if six.PY3: + # Python 3: + # --------- + + def ascii(stream): + return codecs.getreader('ascii')(stream) + + def bopen(*args, **kwargs): + return open(*args, mode = 'rb', **kwargs) + + long_type = int + + def sign(n): + if n < 0: + return -1 + if n > 0: + return 1 + return 0 + +else: + # Python 2 + # -------- + + def ascii(stream): + return stream + + bopen = open + + long_type = long + + 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: six.unichr(int(m.group(0)[2:], 16)), s) + +narrow_build = False +try: + six.unichr(0x10FFFF) +except ValueError: + narrow_build = True + +if narrow_build: + def _unicodeExpand(s): + try: + return r_unicodeEscape.sub( + lambda m: six.unichr(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 six.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 six.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 diff --git a/rdflib/plugins/parsers/notation3.py b/rdflib/plugins/parsers/notation3.py index 5fb84e5d..d2c27711 100755 --- a/rdflib/plugins/parsers/notation3.py +++ b/rdflib/plugins/parsers/notation3.py @@ -49,11 +49,11 @@ from rdflib.graph import QuotedGraph, ConjunctiveGraph, Graph from six import b from six import binary_type -from rdflib.py3compat import long_type +from rdflib.compat import long_type from six import string_types from six import text_type from six import unichr -from rdflib.py3compat import narrow_build +from rdflib.compat import narrow_build __all__ = ['BadSyntax', 'N3Parser', 'TurtleParser', "splitFragP", "join", "base", diff --git a/rdflib/plugins/parsers/ntriples.py b/rdflib/plugins/parsers/ntriples.py index 0ddd0fc7..8ea8cf9c 100644 --- a/rdflib/plugins/parsers/ntriples.py +++ b/rdflib/plugins/parsers/ntriples.py @@ -17,9 +17,9 @@ from rdflib.term import BNode as bNode from rdflib.term import Literal -from rdflib.py3compat import cast_bytes -from rdflib.py3compat import decodeUnicodeEscape -from rdflib.py3compat import ascii +from rdflib.compat import cast_bytes +from rdflib.compat import decodeUnicodeEscape +from rdflib.compat import ascii from six import BytesIO from six import string_types diff --git a/rdflib/plugins/sparql/parser.py b/rdflib/plugins/sparql/parser.py index f7db07eb..6c56b72d 100644 --- a/rdflib/plugins/sparql/parser.py +++ b/rdflib/plugins/sparql/parser.py @@ -19,7 +19,7 @@ from pyparsing import CaselessKeyword as Keyword # watch out :) from .parserutils import Comp, Param, ParamList from . import operators as op -from rdflib.py3compat import decodeUnicodeEscape +from rdflib.compat import decodeUnicodeEscape from six import binary_type, unichr import rdflib diff --git a/rdflib/py3compat.py b/rdflib/py3compat.py deleted file mode 100644 index d164d819..00000000 --- a/rdflib/py3compat.py +++ /dev/null @@ -1,118 +0,0 @@ -""" -Utility functions and objects to ease Python 3 compatibility. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import re -import codecs -import warnings - -import six - -def cast_bytes(s, enc='utf-8'): - if isinstance(s, six.text_type): - return s.encode(enc) - return s - -if six.PY3: - # Python 3: - # --------- - - def ascii(stream): - return codecs.getreader('ascii')(stream) - - def bopen(*args, **kwargs): - return open(*args, mode = 'rb', **kwargs) - - long_type = int - - def sign(n): - if n < 0: - return -1 - if n > 0: - return 1 - return 0 - -else: - # Python 2 - # -------- - - def ascii(stream): - return stream - - bopen = open - - long_type = long - - 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: six.unichr(int(m.group(0)[2:], 16)), s) - -narrow_build = False -try: - six.unichr(0x10FFFF) -except ValueError: - narrow_build = True - -if narrow_build: - def _unicodeExpand(s): - try: - return r_unicodeEscape.sub( - lambda m: six.unichr(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 six.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 six.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 diff --git a/rdflib/term.py b/rdflib/term.py index ffd07f3e..1b4c4832 100644 --- a/rdflib/term.py +++ b/rdflib/term.py @@ -58,7 +58,7 @@ import rdflib from six import PY2 from six import PY3 from six import b -from rdflib.py3compat import long_type +from rdflib.compat import long_type from six import string_types from six import text_type from six.moves.urllib.parse import urldefrag diff --git a/rdflib/util.py b/rdflib/util.py index cdb30b14..7d97942b 100644 --- a/rdflib/util.py +++ b/rdflib/util.py @@ -53,7 +53,7 @@ from rdflib.namespace import NamespaceManager from rdflib.term import BNode from rdflib.term import Literal from rdflib.term import URIRef -from rdflib.py3compat import sign +from rdflib.compat import sign __all__ = [ 'list2set', 'first', 'uniq', 'more_than', 'to_term', 'from_n3', diff --git a/test/test_dawg.py b/test/test_dawg.py index 66a195f3..3027f561 100644 --- a/test/test_dawg.py +++ b/test/test_dawg.py @@ -42,7 +42,7 @@ from rdflib.plugins.sparql.parser import parseQuery, parseUpdate from rdflib.plugins.sparql.results.rdfresults import RDFResultParser from rdflib.plugins.sparql.update import evalUpdate -from rdflib.py3compat import decodeStringEscape, bopen +from rdflib.compat import decodeStringEscape, bopen from six.moves.urllib.parse import urljoin from six import BytesIO |