From 92ecdb75a8e9882a3b8917888a90ebab1082e808 Mon Sep 17 00:00:00 2001 From: jortel Date: Wed, 1 Sep 2010 17:38:56 +0000 Subject: Fix duplicate DocumentPlugin.parsed() called when wsdl imports schema. --- suds/__init__.py | 2 +- suds/plugin.py | 19 ++++++++++++------- suds/reader.py | 3 +++ suds/wsdl.py | 3 --- suds/xsd/schema.py | 6 ++---- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/suds/__init__.py b/suds/__init__.py index c6a35e6..f62edc2 100644 --- a/suds/__init__.py +++ b/suds/__init__.py @@ -27,7 +27,7 @@ import sys # __version__ = '0.4' -__build__="(beta) R692-20100831" +__build__="(beta) R693-20100901" # # Exceptions diff --git a/suds/plugin.py b/suds/plugin.py index 058436f..219a7da 100644 --- a/suds/plugin.py +++ b/suds/plugin.py @@ -182,10 +182,10 @@ class PluginContainer: @type ctxclass: dict """ - domain = {\ - 'init':InitContext, - 'document':DocumentContext, - 'message':MessageContext, + domains = {\ + 'init': (InitContext, InitPlugin), + 'document': (DocumentContext, DocumentPlugin), + 'message': (MessageContext, MessagePlugin ), } def __init__(self, plugins): @@ -196,9 +196,14 @@ class PluginContainer: self.plugins = plugins def __getattr__(self, name): - ctx = self.domain.get(name) - if ctx: - return PluginDomain(ctx, self.plugins) + domain = self.domains.get(name) + if domain: + plugins = [] + ctx, pclass = domain + for p in self.plugins: + if isinstance(p, pclass): + plugins.append(p) + return PluginDomain(ctx, plugins) else: raise Exception, 'plugin domain (%s), invalid' % name diff --git a/suds/reader.py b/suds/reader.py index 0bac400..fbd8760 100644 --- a/suds/reader.py +++ b/suds/reader.py @@ -23,6 +23,7 @@ from suds.sax.parser import Parser from suds.transport import Request from suds.cache import Cache, NoCache from suds.store import DocumentStore +from suds.plugin import PluginContainer from logging import getLogger @@ -42,6 +43,7 @@ class Reader: @type options: I{Options} """ self.options = options + self.plugins = PluginContainer(options.plugins) def mangle(self, name, x): """ @@ -76,6 +78,7 @@ class DocumentReader(Reader): if d is None: d = self.download(url) cache.put(id, d) + self.plugins.document.parsed(root=d.root()) return d def download(self, url): diff --git a/suds/wsdl.py b/suds/wsdl.py index 5115f4e..8bba88f 100644 --- a/suds/wsdl.py +++ b/suds/wsdl.py @@ -31,7 +31,6 @@ from suds.xsd.schema import Schema, SchemaCollection from suds.xsd.query import ElementQuery from suds.sudsobject import Object, Facade, Metadata from suds.reader import DocumentReader, DefinitionsReader -from suds.plugin import PluginContainer from urlparse import urljoin import re, soaparray @@ -136,8 +135,6 @@ class Definitions(WObject): reader = DocumentReader(options) d = reader.open(url) root = d.root() - plugins = PluginContainer(options.plugins) - plugins.document.parsed(root=root) WObject.__init__(self, root) self.id = objid(self) self.options = options diff --git a/suds/xsd/schema.py b/suds/xsd/schema.py index 4d0ccdb..cb7d678 100644 --- a/suds/xsd/schema.py +++ b/suds/xsd/schema.py @@ -22,7 +22,7 @@ Most of the I{value-add} provided by the model is centered around tranparent referenced type resolution and targeted denormalization. """ -from logging import getLogger + import suds.metrics from suds import * from suds.xsd import * @@ -33,7 +33,7 @@ from suds.xsd.sxbase import SchemaObject from suds.xsd.deplist import DepList from suds.sax.element import Element from suds.sax import splitPrefix, Namespace -from suds.plugin import PluginContainer +from logging import getLogger log = getLogger(__name__) @@ -214,8 +214,6 @@ class Schema: self.attributes = {} self.groups = {} self.agrps = {} - plugins = PluginContainer(options.plugins) - plugins.document.parsed(root=root) if options.doctor is not None: options.doctor.examine(root) form = self.root.get('elementFormDefault') -- cgit v1.2.1