diff options
author | jortel <devnull@localhost> | 2010-01-12 17:53:21 +0000 |
---|---|---|
committer | jortel <devnull@localhost> | 2010-01-12 17:53:21 +0000 |
commit | 8f4faa9ecb07f6bab61bb4e7210d67d96897c1df (patch) | |
tree | 212e4e04f6847fa59d5f1886e0bd697914dfec88 | |
parent | db65417513c25da9571ca649fd8f374605c2a260 (diff) | |
download | suds-8f4faa9ecb07f6bab61bb4e7210d67d96897c1df.tar.gz |
Decouple the sax.Parser and the Transport.
-rw-r--r-- | suds/sax/parser.py | 26 | ||||
-rw-r--r-- | suds/wsdl.py | 7 | ||||
-rw-r--r-- | suds/xsd/sxbasic.py | 12 |
3 files changed, 23 insertions, 22 deletions
diff --git a/suds/sax/parser.py b/suds/sax/parser.py index 447d174..69f871b 100644 --- a/suds/sax/parser.py +++ b/suds/sax/parser.py @@ -34,8 +34,6 @@ from suds.sax.document import Document from suds.sax.element import Element from suds.sax.text import Text from suds.sax.attribute import Attribute -from suds.transport import Request -from suds.transport.http import HttpTransport from xml.sax import make_parser, InputSource, ContentHandler from xml.sax.handler import feature_external_ges from cStringIO import StringIO @@ -106,7 +104,7 @@ class Handler(ContentHandler): class Parser: - """ sax parser """ + """ SAX Parser """ @classmethod def saxparser(cls): @@ -115,15 +113,15 @@ class Parser: h = Handler() p.setContentHandler(h) return (p, h) - - def __init__(self, transport=None): - if transport is None: - self.transport = HttpTransport() - else: - self.transport = transport - - def parse(self, file=None, url=None, string=None): + def parse(self, file=None, string=None): + """ + SAX parse XML text. + @param file: Parse a python I{file-like} object. + @type file: I{file-like} object. + @param string: Parse string XML. + @type string: str + """ timer = metrics.Timer() timer.start() sax, handler = self.saxparser() @@ -132,12 +130,6 @@ class Parser: timer.stop() metrics.log.debug('sax (%s) duration: %s', file, timer) return handler.nodes[0] - if url is not None: - fp = self.transport.open(Request(url)) - sax.parse(fp) - timer.stop() - metrics.log.debug('sax (%s) duration: %s', url, timer) - return handler.nodes[0] if string is not None: source = InputSource(None) source.setByteStream(StringIO(string)) diff --git a/suds/wsdl.py b/suds/wsdl.py index b449711..f9708fd 100644 --- a/suds/wsdl.py +++ b/suds/wsdl.py @@ -23,6 +23,7 @@ found in the document. from logging import getLogger from suds import * from suds.sax import splitPrefix +from suds.transport import Request from suds.sax.parser import Parser from suds.sax.element import Element from suds.bindings.document import Document @@ -168,8 +169,10 @@ class Definitions(WObject): @type options: L{options.Options} """ log.debug('reading wsdl at: %s ...', url) - p = Parser(options.transport) - root = p.parse(url=url).root() + fp = options.transport.open(Request(url)) + p = Parser() + d = p.parse(file=fp) + root = d.root() WObject.__init__(self, root) self.id = objid(self) self.options = options diff --git a/suds/xsd/sxbasic.py b/suds/xsd/sxbasic.py index 04af36d..15ef40e 100644 --- a/suds/xsd/sxbasic.py +++ b/suds/xsd/sxbasic.py @@ -26,7 +26,7 @@ from suds.xsd.sxbase import * from suds.xsd.query import * from suds.sax import splitPrefix, Namespace from suds.sax.parser import Parser -from suds.transport import TransportError +from suds.transport import Request, TransportError from urlparse import urljoin @@ -528,7 +528,10 @@ class Import(SchemaObject): if '://' not in url: url = urljoin(self.schema.baseurl, url) transport = self.schema.options.transport - root = Parser(transport).parse(url=url).root() + p = Parser() + fp = transport.open(Request(url)) + d = p.parse(file=fp) + root = d.root() root.set('url', url) return self.schema.instance(root, url) except TransportError: @@ -579,7 +582,10 @@ class Include(SchemaObject): if '://' not in url: url = urljoin(self.schema.baseurl, url) transport = self.schema.options.transport - root = Parser(transport).parse(url=url).root() + p = Parser() + fp = transport.open(Request(url)) + d = p.parse(file=fp) + root = d.root() root.set('url', url) self.__applytns(root) return self.schema.instance(root, url) |