PROTON-490: port mllib document parser to Python 3 Ported from the original patch supplied by Mickael Maison. Uses the six compatibility library.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/5d7a4586 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/5d7a4586 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/5d7a4586 Branch: refs/heads/master Commit: 5d7a458635eb55167e33875e040b8147230c4c1b Parents: 979471f Author: Ken Giusti <[email protected]> Authored: Mon Apr 20 11:55:27 2015 -0400 Committer: Ken Giusti <[email protected]> Committed: Mon Apr 20 13:04:56 2015 -0400 ---------------------------------------------------------------------- proton-c/mllib/__init__.py | 23 ++++------------------- proton-c/mllib/dom.py | 7 ++++--- proton-c/mllib/parsers.py | 37 ++----------------------------------- proton-c/mllib/transforms.py | 2 +- 4 files changed, 11 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5d7a4586/proton-c/mllib/__init__.py ---------------------------------------------------------------------- diff --git a/proton-c/mllib/__init__.py b/proton-c/mllib/__init__.py index c6fccf1..9e78a87 100644 --- a/proton-c/mllib/__init__.py +++ b/proton-c/mllib/__init__.py @@ -18,8 +18,7 @@ # """ -This module provides document parsing and transformation utilities for -both SGML and XML. +This module provides document parsing and transformation utilities for XML. """ from __future__ import absolute_import @@ -28,7 +27,8 @@ import os, sys import xml.sax, types from xml.sax.handler import ErrorHandler from xml.sax.xmlreader import InputSource -from cStringIO import StringIO +import six +from six.moves import cStringIO as StringIO from . import dom from . import transforms @@ -37,26 +37,11 @@ from . import parsers def transform(node, *args): result = node for t in args: - if isinstance(t, type): + if isinstance(t, six.class_types): t = t() result = result.dispatch(t) return result -def sgml_parse(source): - if isinstance(source, basestring): - source = StringIO(source) - fname = "<string>" - elif hasattr(source, "name"): - fname = source.name - p = parsers.SGMLParser() - num = 1 - for line in source: - p.feed(line) - p.parser.line(fname, num, None) - num += 1 - p.close() - return p.parser.tree - class Resolver: def __init__(self, path): http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5d7a4586/proton-c/mllib/dom.py ---------------------------------------------------------------------- diff --git a/proton-c/mllib/dom.py b/proton-c/mllib/dom.py index 4cbac26..b6ca27d 100644 --- a/proton-c/mllib/dom.py +++ b/proton-c/mllib/dom.py @@ -26,6 +26,7 @@ from __future__ import generators from __future__ import nested_scopes from __future__ import absolute_import +import six class Container: @@ -178,7 +179,7 @@ class Leaf(Component, Dispatcher): base = None def __init__(self, data): - assert isinstance(data, basestring) + assert isinstance(data, six.string_types) self.data = data class Data(Leaf): @@ -268,7 +269,7 @@ class Values(View): yield value def flatten_path(path): - if isinstance(path, basestring): + if isinstance(path, six.string_types): for part in path.split("/"): yield part elif callable(path): @@ -291,7 +292,7 @@ class Query(View): select = Query pred = p source = query - elif isinstance(p, basestring): + elif isinstance(p, six.string_types): if p[0] == "@": select = Values pred = lambda x, n=p[1:]: x[0] == n http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5d7a4586/proton-c/mllib/parsers.py ---------------------------------------------------------------------- diff --git a/proton-c/mllib/parsers.py b/proton-c/mllib/parsers.py index e71018d..72d44ab 100644 --- a/proton-c/mllib/parsers.py +++ b/proton-c/mllib/parsers.py @@ -18,11 +18,11 @@ # """ -Parsers for SGML and XML to dom. +Parsers for XML to dom. """ from __future__ import absolute_import -import sgmllib, xml.sax.handler +import xml.sax.handler from .dom import * class Parser: @@ -74,39 +74,6 @@ class Parser: self.node = self.node.parent -class SGMLParser(sgmllib.SGMLParser): - - def __init__(self, entitydefs = None): - sgmllib.SGMLParser.__init__(self) - if entitydefs == None: - self.entitydefs = {} - else: - self.entitydefs = entitydefs - self.parser = Parser() - - def unknown_starttag(self, name, attrs): - self.parser.start(name, attrs) - - def handle_data(self, data): - self.parser.data(data) - - def handle_comment(self, comment): - self.parser.comment(comment) - - def unknown_entityref(self, ref): - self.parser.entity(ref) - - def unknown_charref(self, ref): - self.parser.character(ref) - - def unknown_endtag(self, name): - self.parser.end(name) - - def close(self): - sgmllib.SGMLParser.close(self) - self.parser.balance() - assert self.parser.node == self.parser.tree - class XMLParser(xml.sax.handler.ContentHandler): def __init__(self): http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5d7a4586/proton-c/mllib/transforms.py ---------------------------------------------------------------------- diff --git a/proton-c/mllib/transforms.py b/proton-c/mllib/transforms.py index 383add3..43e9ef2 100644 --- a/proton-c/mllib/transforms.py +++ b/proton-c/mllib/transforms.py @@ -23,7 +23,7 @@ Useful transforms for dom objects. from __future__ import absolute_import from . import dom -from cStringIO import StringIO +from six.moves import cStringIO as StringIO class Visitor: --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
