diff options
author | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2013-05-09 09:12:50 +0200 |
---|---|---|
committer | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2013-05-09 09:12:50 +0200 |
commit | d849409ca35440530642de8b291eda1cb834ed67 (patch) | |
tree | df59f514346fc6fa08a743bc64f1ba52434fbf3a | |
parent | bbfbca0d5d1979d03500d52dc889035da51e666e (diff) | |
download | rdflib-d849409ca35440530642de8b291eda1cb834ed67.tar.gz |
made query res pprinter into a serializer
-rw-r--r-- | docs/plugin_query_results.rst | 5 | ||||
-rw-r--r-- | rdflib/plugin.py | 3 | ||||
-rw-r--r-- | rdflib/plugins/sparql/results/txtresults.py | 60 | ||||
-rw-r--r-- | rdflib/query.py | 4 | ||||
-rw-r--r-- | rdflib/util.py | 56 | ||||
-rw-r--r-- | test/test_dawg.py | 6 |
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" % ( |