From 10e45e5767e280d728fd14b3d0bd62978903ea63 Mon Sep 17 00:00:00 2001 From: Gunnar Aastrand Grimnes Date: Thu, 12 Jan 2017 12:35:28 +0100 Subject: be more compatible when importing elementtree, and only in one place fixes #606 --- rdflib/compat.py | 27 +++++++++++++++++++++++++ rdflib/plugins/sparql/results/xmlresults.py | 4 ++-- rdflib/plugins/stores/sparqlstore.py | 31 ++++++++--------------------- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/rdflib/compat.py b/rdflib/compat.py index 6c714894..f7ca4063 100644 --- a/rdflib/compat.py +++ b/rdflib/compat.py @@ -23,3 +23,30 @@ else: def numeric_greater(a, b): return a > b + + +try: + from lxml import etree + print("running with lxml.etree") +except ImportError: + try: + # Python 2.5 + import xml.etree.cElementTree as etree + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # Python 2.5 + import xml.etree.ElementTree as etree + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree + print("running with ElementTree") + except ImportError: + print("Failed to import ElementTree from any known place") diff --git a/rdflib/plugins/sparql/results/xmlresults.py b/rdflib/plugins/sparql/results/xmlresults.py index 85c33882..b31f9513 100644 --- a/rdflib/plugins/sparql/results/xmlresults.py +++ b/rdflib/plugins/sparql/results/xmlresults.py @@ -3,7 +3,7 @@ from xml.sax.saxutils import XMLGenerator from xml.dom import XML_NAMESPACE from xml.sax.xmlreader import AttributesNSImpl -from xml.etree import cElementTree as ElementTree +from rdflib.compat import etree from rdflib import Literal, URIRef, BNode, Graph, Variable from rdflib.query import ( @@ -42,7 +42,7 @@ class XMLResult(Result): if isinstance(xmlstring, unicode): xmlstring = xmlstring.encode('utf-8') try: - tree = ElementTree.fromstring(xmlstring) + tree = etree.fromstring(xmlstring) except Exception, e: try: raise e.__class__("error parsing %r: %s" % (xmlstring, e)) diff --git a/rdflib/plugins/stores/sparqlstore.py b/rdflib/plugins/stores/sparqlstore.py index d3557b38..519c0fd0 100644 --- a/rdflib/plugins/stores/sparqlstore.py +++ b/rdflib/plugins/stores/sparqlstore.py @@ -13,9 +13,8 @@ ORDERBY = 'ORDER BY' import re import collections -import contextlib -import urllib2 import warnings +import contextlib try: from SPARQLWrapper import SPARQLWrapper, XML, POST, GET, URLENCODED, POSTDIRECTLY @@ -24,20 +23,7 @@ except ImportError: "SPARQLWrapper not found! SPARQL Store will not work." + "Install with 'easy_install SPARQLWrapper'") -import sys -if getattr(sys, 'pypy_version_info', None) is not None \ - or sys.platform.startswith('java') \ - or sys.version_info[:2] < (2, 6): - # import elementtree as etree - from elementtree import ElementTree - assert ElementTree -else: - try: - from xml.etree import ElementTree - assert ElementTree - except ImportError: - from elementtree import ElementTree - +from rdflib.compat import etree from rdflib.plugins.stores.regexmatching import NATIVE_REGEX from rdflib.store import Store @@ -46,9 +32,6 @@ from rdflib import Variable, Namespace, BNode, URIRef, Literal from rdflib.graph import DATASET_DEFAULT_GRAPH_ID from rdflib.term import Node -import httplib -import urlparse - class NSSPARQLWrapper(SPARQLWrapper): nsBindings = {} @@ -90,7 +73,7 @@ class NSSPARQLWrapper(SPARQLWrapper): BNODE_IDENT_PATTERN = re.compile('(?P