summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGunnar Aastrand Grimnes <gromgull@gmail.com>2017-01-12 12:35:28 +0100
committerGunnar Aastrand Grimnes <gromgull@gmail.com>2017-01-12 14:57:50 +0100
commit10e45e5767e280d728fd14b3d0bd62978903ea63 (patch)
treeda8149f20d74d64720edabc27b79d124097ed7e7
parentf469bb04e9e75d407f047f081ae5003feb712a34 (diff)
downloadrdflib-fixElementTreeImports.tar.gz
be more compatible when importing elementtree, and only in one placefixElementTreeImports
fixes #606
-rw-r--r--rdflib/compat.py27
-rw-r--r--rdflib/plugins/sparql/results/xmlresults.py4
-rw-r--r--rdflib/plugins/stores/sparqlstore.py31
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<label>_\:[^\s]+)')
SPARQL_NS = Namespace('http://www.w3.org/2005/sparql-results#')
sparqlNsBindings = {u'sparql': SPARQL_NS}
-ElementTree._namespace_map["sparql"] = SPARQL_NS
+etree.register_namespace("sparql", SPARQL_NS)
def _node_from_result(node):
@@ -422,7 +405,7 @@ class SPARQLStore(NSSPARQLWrapper, Store):
self.setQuery(query)
with contextlib.closing(SPARQLWrapper.query(self).response) as res:
- doc = ElementTree.parse(res)
+ doc = etree.parse(res)
# ElementTree.dump(doc)
for rt, vars in _traverse_sparql_result_dom(
@@ -454,8 +437,10 @@ class SPARQLStore(NSSPARQLWrapper, Store):
if self._is_contextual(context):
self.addParameter("default-graph-uri", context.identifier)
self.setQuery(q)
+
with contextlib.closing(SPARQLWrapper.query(self).response) as res:
- doc = ElementTree.parse(res)
+ doc = etree.parse(res)
+
rt, vars = iter(
_traverse_sparql_result_dom(
doc,
@@ -492,7 +477,7 @@ class SPARQLStore(NSSPARQLWrapper, Store):
self.setQuery('SELECT ?name WHERE { GRAPH ?name {} }')
with contextlib.closing(SPARQLWrapper.query(self).response) as res:
- doc = ElementTree.parse(res)
+ doc = etree.parse(res)
return (
rt.get(Variable("name"))