summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGunnar Aastrand Grimnes <gromgull@gmail.com>2013-05-09 09:12:50 +0200
committerGunnar Aastrand Grimnes <gromgull@gmail.com>2013-05-09 09:12:50 +0200
commitd849409ca35440530642de8b291eda1cb834ed67 (patch)
treedf59f514346fc6fa08a743bc64f1ba52434fbf3a
parentbbfbca0d5d1979d03500d52dc889035da51e666e (diff)
downloadrdflib-d849409ca35440530642de8b291eda1cb834ed67.tar.gz
made query res pprinter into a serializer
-rw-r--r--docs/plugin_query_results.rst5
-rw-r--r--rdflib/plugin.py3
-rw-r--r--rdflib/plugins/sparql/results/txtresults.py60
-rw-r--r--rdflib/query.py4
-rw-r--r--rdflib/util.py56
-rw-r--r--test/test_dawg.py6
6 files changed, 70 insertions, 64 deletions
diff --git a/docs/plugin_query_results.rst b/docs/plugin_query_results.rst
index 790495b5..2dad7444 100644
--- a/docs/plugin_query_results.rst
+++ b/docs/plugin_query_results.rst
@@ -1,7 +1,7 @@
-.. _plugin_query_results: Plugin Query Results
+.. _plugin_query_results: Plugin query results
====================
-Plugin Query Results
+Plugin query results
====================
Plugins for reading and writing of (SPARQL) :class:`~rdflib.querye.QueryResult` - pass ``name`` to either :meth:`~rdflib.query.QueryResult.parse` or :meth:`~rdflib.query.QueryResult.serialize`
@@ -27,5 +27,6 @@ Name Class
==== ========================================================================
csv :class:`~rdflib.plugins.sparql.results.csvresults.CSVResultSerializer`
json :class:`~rdflib.plugins.sparql.results.jsonresults.JSONResultSerializer`
+txt :class:`~rdflib.plugins.sparql.results.txtresults.TXTResultSerializer`
xml :class:`~rdflib.plugins.sparql.results.xmlresults.XMLResultSerializer`
==== ========================================================================
diff --git a/rdflib/plugin.py b/rdflib/plugin.py
index a726f1a9..19ee8eaa 100644
--- a/rdflib/plugin.py
+++ b/rdflib/plugin.py
@@ -285,6 +285,9 @@ register(
'xml', ResultSerializer,
'rdflib.plugins.sparql.results.xmlresults', 'XMLResultSerializer')
register(
+ 'txt', ResultSerializer,
+ 'rdflib.plugins.sparql.results.txtresults', 'TXTResultSerializer')
+register(
'json', ResultSerializer,
'rdflib.plugins.sparql.results.jsonresults', 'JSONResultSerializer')
register(
diff --git a/rdflib/plugins/sparql/results/txtresults.py b/rdflib/plugins/sparql/results/txtresults.py
new file mode 100644
index 00000000..fd86a784
--- /dev/null
+++ b/rdflib/plugins/sparql/results/txtresults.py
@@ -0,0 +1,60 @@
+
+from rdflib import URIRef, BNode, Literal
+from rdflib.query import ResultSerializer
+
+def _termString(t, namespace_manager):
+ if t == None:
+ return "-"
+ if namespace_manager:
+ if isinstance(t, URIRef):
+ return namespace_manager.normalizeUri(t)
+ elif isinstance(t, BNode):
+ return t.n3()
+ elif isinstance(t, Literal):
+ return t._literal_n3(qname_callback=namespace_manager.normalizeUri)
+ else:
+ return t.n3()
+
+
+class TXTResultSerializer(ResultSerializer):
+ """
+ A write only QueryResult serializer for text/ascii tables
+ """
+
+ def serialize(self, stream, encoding, namespace_manager = None):
+
+ """
+ return a text table of query results
+ """
+
+
+ def c(s, w):
+ """
+ center the string s in w wide string
+ """
+ w -= len(s)
+ h1 = h2 = w // 2
+ if w % 2: h2 += 1
+ return " " * h1 + s + " " * h2
+
+ if self.result.type!='SELECT':
+ raise Exception("Can only pretty print SELECT results!")
+
+ if not self.result:
+ return "(no results)\n"
+ else:
+
+ keys = sorted(self.result.vars)
+ maxlen = [0] * len(keys)
+ b = [[_termString(r[k], namespace_manager) for k in keys] for r in self.result]
+ for r in b:
+ for i in range(len(keys)):
+ maxlen[i] = max(maxlen[i], len(r[i]))
+
+ stream.write(
+ "|".join([c(k, maxlen[i]) for i, k in enumerate(keys)]) + "\n")
+ stream.write("-" * (len(maxlen)+sum(maxlen)) + "\n")
+ for r in sorted(b):
+ stream.write("|".join(
+ [t + " " * (i - len(t)) for i, t in zip(maxlen, r)]) + "\n")
+
diff --git a/rdflib/query.py b/rdflib/query.py
index 0092603a..1bed4e98 100644
--- a/rdflib/query.py
+++ b/rdflib/query.py
@@ -295,7 +295,7 @@ class ResultParser(object):
def __init__(self):
pass
- def parse(self, source):
+ def parse(self, source, **kwargs):
"""return a Result object"""
pass # abstract
@@ -305,6 +305,6 @@ class ResultSerializer(object):
def __init__(self, result):
self.result = result
- def serialize(self, stream, encoding="utf-8"):
+ def serialize(self, stream, encoding="utf-8", **kwargs):
"""return a string properly serialized"""
pass # abstract
diff --git a/rdflib/util.py b/rdflib/util.py
index 305c4dc1..32bb8da9 100644
--- a/rdflib/util.py
+++ b/rdflib/util.py
@@ -464,62 +464,6 @@ def get_tree(graph,
return (mapper(root), sorted(tree, key=sortkey))
-def pprint_query_results(res, namespace_manager = None, stream = None):
-
- """
- return a text table of query results
- """
-
- def termString(t):
- if t == None:
- return "-"
- if namespace_manager:
- if isinstance(t, URIRef):
- return namespace_manager.normalizeUri(t)
- elif isinstance(t, BNode):
- return t.n3()
- elif isinstance(t, Literal):
- return t._literal_n3(qname_callback=namespace_manager.normalizeUri)
- else:
- return t.n3()
-
- def c(s, w):
- """
- center the string s in w wide string
- """
- h = (w - len(s)) // 2
- return " " * h + s + " " * h
-
- if res.type!='SELECT':
- raise Exception("Can only pretty print SELECT results!")
-
- if not res:
- return "(no results)\n"
- else:
- if stream:
- out = stream
- else:
- out = StringIO()
- # keys = r.vars
- # for r in b:
- # keys.update(r.keys())
-
- keys = sorted(res.vars)
- maxlen = [0] * len(keys)
- b = [[termString(r[k]) for k in keys] for r in res]
- for r in b:
- for i in range(len(keys)):
- maxlen[i] = max(maxlen[i], 1 + len(r[i]))
-
- out.write(
- "|".join([c(k, maxlen[i]) for i, k in enumerate(keys)]) + "\n")
- out.write("-" * sum(maxlen) + "\n")
- for r in sorted(b):
- out.write("|".join(
- [t + " " * (i - len(t) - 1) for i, t in zip(maxlen, r)]) + "\n")
-
- if not stream:
- return out.getvalue()
def test():
diff --git a/test/test_dawg.py b/test/test_dawg.py
index d7ea1a71..e4aacb67 100644
--- a/test/test_dawg.py
+++ b/test/test_dawg.py
@@ -43,8 +43,6 @@ from rdflib.plugins.sparql.update import evalUpdate
from rdflib.py3compat import decodeStringEscape
-from rdflib.util import pprint_query_results
-
from nose.tools import nottest, eq_ as eq
from nose import SkipTest
@@ -440,8 +438,8 @@ def query_test(t):
set(res),
set(res2)
), 'Bindings do not match: \n%s\n!=\n%s' % (
- pprint_query_results(res, namespace_manager=g.namespace_manager),
- pprint_query_results(res2, namespace_manager=g.namespace_manager))
+ res.serialize(format='txt', namespace_manager=g.namespace_manager),
+ res2.serialize(format='txt', namespace_manager=g.namespace_manager))
elif res.type == 'ASK':
eq(res.askAnswer,
res2.askAnswer, "Ask answer does not match: %r != %r" % (