summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2010-09-01 17:38:56 +0000
committerjortel <devnull@localhost>2010-09-01 17:38:56 +0000
commit92ecdb75a8e9882a3b8917888a90ebab1082e808 (patch)
tree56992d4dd67e168d501fb6d48aa13eb2511f0489
parentada7dd09c10865a67049a85ccd688167aefad3c2 (diff)
downloadsuds-92ecdb75a8e9882a3b8917888a90ebab1082e808.tar.gz
Fix duplicate DocumentPlugin.parsed() called when wsdl imports schema.
-rw-r--r--suds/__init__.py2
-rw-r--r--suds/plugin.py19
-rw-r--r--suds/reader.py3
-rw-r--r--suds/wsdl.py3
-rw-r--r--suds/xsd/schema.py6
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')