* Update the schema.py SchemaProperty loading sequence so that the schema is loaded in 3 steps:
1) build the raw tree.
2) resolve dependancies such as ref and base.
3) promote grandchildren as needed to flatten (denormalize) the tree.
The wsdl was also changed to only load the schema once and store it. The schema collection was
changed to load schemas in 2 steps:
1) create all raw schema objects.
2) load schemas.
This ensure that local <import/>'d schemas can be found when referenced out of order.
The sax.py Element interface changed: attribute() replaced by get() and set().
Also, __getitem__ and __setitem__ can be used to access attribute values.
Epydocs updated for sax.py. And ... last <element ref=/> now supported properly.
* fix logging by: NOT setting to info in suds.__init__.logger(); set handler on root logger
only; moved logger (log) from classes to modules and use __name__ for logger name.
NOTE: This means that to enable soap message logging:
>
> logger('suds.serviceproxy').setLevel(logging.DEBUG)
>
-- instead of --
>
> logger('serviceproxy').setLevel(logging.DEBUG)
>
* Add support for (xsd) schema <attribute/> nodes which primarily affects objects returned by the Builder
* Update serviceproxy.py:set_proxies() to log DEBUG instead of INFO.
* Enhance schema __str__ to show both the raw xml and the model (mostly for debugging).
version-0.2 (04-28-08):
* Contains the first cut at the rpc/encoded soap style.
* Replaced Property class with suds.sudsobject.Object. The Property class was developed a long time
ago with a slightly different purpose. The suds Object is a simpler (more straight forward) approach that
requires less code and works better in the debugger.
* The Binding (and the encoding) is selected on a per-method basis which is more consistent with the wsdl.
In <= 0.1.7, the binding was selected when the ServiceProxy was constructed and used for all service
methods. The binding was stored as self.binding. Since the WSDL provides for a separate binding style and
encoding for each operation, Suds needed to be change to work the same way.
* The (nil_supported) and (faults) flag(s) passed into the service proxy using **kwargs. In addition to these
flags, a (http_proxy) flag has been added and is passed to the urllib2.Request object. The following args
are supported:
* faults = Raise faults raised by server (default:True), else return tuple from service method invocation
as (http code, object).
* nil_supported = The bindings will set the xsi:nil="true" on nodes that have a value=None when this
flag is True (default:True). Otherwise, an empty node <x/> is sent.
* proxy = An http proxy to be specified on requests (default:{}).
The proxy is defined as {protocol:proxy,}
* Http proxy supported (see above).
* ServiceProxy refactored to delegate to a SoapClient. Since the service proxy exposes web services via getattr(),
any attribute (including methods) provided by the ServiceProxy class hides WS operations defined by the
wsdl. So, by moving everything to the SoapClient, wsdl operations are no longer hidden without
having to use *hoky* names for attributes and methods in the service proxy. Instead, the service proxy has
__client__ and __factory__ attributes (which really should be at low risk for name collision). For now the
get_instance() and get_enum() methods have not been moved to preserve backward compatibility. Although,
the prefered API change would to replace:
> service = ServiceProxy('myurl')
> person = service.get_instance('person')
... with something like ...
> service = ServiceProxy('myurl')
> person = service.__factory__.get_instance('person')
After a few releases giving time for users to switch the new API, the get_instance() and get_enum()
methods may be removed with a notice in big letters.
* Fixed problem where a wsdl doesn't define a <schema/> section and Suds can't resolve the prefixes for the
http://www.w3.org/2001/XMLSchema namespace to detect builtin types such as (xs:string).
version-0.1.7 (04-08-08):
* Added Binding.nil_supported to controls how property values (out) = None and empty tag (in) are processed.
* service.binding.nil_supported = True -- means that property values = None are marshalled (out) as
<x xsi:nil=true/> and <x/> is unmarshalled as '' and <x xsi:nil/> is unmarshalled as None.
* service.binding.nil_supported = False -- means that property values = None are marshalled (out) as
<x/> and <x/> *and* <x xsi:nil=true/> is unmarshalled as None.
The xsi:nil is really ignored.
* THE DEFAULT IS (TRUE)
* Sax handler updated to handle multiple character() callbacks when the sax parser "chunks" the text.
When the node.text is None, the node.text is set to the characters. Else, the characters are appended.
Thanks - andrea.spinelliimteam.it
* Replaced special (text) attribute with __text__ to allow for natural elements named "text"
* Add unicode support by:
* Add __unicode__ to all classes with __str__
* Replace all str() calls with unicode().
* __str__() returns UTF-8 encoded result of __unicode__.
* XML output encoded as UTF-8 which matches the HTTP header and supports unicode.
* SchemaCollection changed to provide the builtin() and custom() methods. To support this, findPrefixes() was added to the
Element in sax.py. This is a better approach anyway since the wsdl and schemas may have many prefixes
to http://www.w3.org/2001/XMLSchema. Tested with both doc/lit and rpc/lit bindings
* Refactored bindings packages from document & rpc to literal & encoded
* Contains the completion of *full* namespace support as follows:
* Namespace prefixes are no longer stripped from attribute values that
reference types defined in the wsdl.
* Schema's imported using <import/> should properly handle namespace and prefix
mapping and re-mapping as needed.
* All types are resolved, using fully qualified (w/ namespaces) lookups.
* Schema.get_type() supports paths with and without ns prefixes. When no prefix
is specified the type is matched using the schema's target namespace.
* Property maintains attribute names (keys) in the order added. This also means
that get_item() and get_names() return ordered values.
( Although, I suspect ordering really needs to be done in the marshaller using the
order specified in the wsdl/schema )
Major refactoring of the schema.py. The primary goals is perparation for type lookups that are
fully qualified by namespace. Once completed, the prefixes on attribute values will not longer
be stripped (purged).
Change Summary:
1) SchemaProperty overlay classes created at __init__ instead of on-demand.
2) schema imports performed by new Import class instead of by Schema.
3) Schema loads top level properties using a factory.
4) All SchemaProperty /children/ lists are sorted by __cmp__ in SchemaProperty derived classes.
This ensures that types with the same name are resolved in the following order (Import, Complex, Simple, Element).
5) All /children/ SchemaProperty lists are constructed at __init__ instead of on-demand.
6) The SchemaGroup created and WSDL class updated. This works better then having the wsdl aggregate the <schema/>
nodes which severs linkage to the wsdl parent element that have namespace prefix mapping.
7) <import/> element handles properly in that both namespace remapping and prefix re-mapping of the imported schema's
targetNamespace and associated prefix mapping - is performed.
Eg: SCHMEA-A has prefix (tns) mapped as xmlns:tns=http://nsA and has targetNamespace=http://nsA.
SCHEMA-B is importing schema A and has prefix (abc) mapped as xmlns:abc=http://nsABC.
SCHEMA-B imports A as <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>.
So, since SCHEMA-B will be referencing elements of SCHEMA-A with prefix (abc) such as abc:something, SCHEMA-A's
targetNamespace must be updated as http://nsABC and all element with type=tns:something must be updated to be
type=abc:something so then can be resolved.
* Fixes unmarshalling problem where nodes are added to property as (text, value). This as introduced when the
bindings were refactored.
* Fixed various Property print problems.
Notes:
Thanks to Jesper Noehr of Coniuro for the majority of the rpc/literal binding and
for lots of collaboration on suds.
version-0.1.6 (03-06-08):
* Provides proper handling of wsdls that contain schema sections containing
xsd schema imports: <import namespace="" schemaLocation=""?>. The
referenced schemas are imported when a schemaLocation is specified.
* Raises exceptions for http status codes not already handled.
version-0.1.5( 02-21-08 ):
* Provides better logging in the modules get logger by hierarchal names.
* Refactored as needed to truely support other bindings.
* Add sax module which replaces ElementTree. This is faster, simpler and
handles namespaces (prefixes) properly.
version-0.1.4 (12-21-07):
* Provides for service method parameters to be None.
* Add proper handling of method params that are lists of property
objects.
version-0.1.3 (12-19-07):
* Fixes problem where nodes marked as a collection (maxOccurs > 1) not
creating property objects with value=[] when mapped-in with < 2
values by the DocumentReader. Caused by missing the
bindings.Document.ReplyHint.stripns() (which uses the DocumentReader.stripns())
conversion to DocumentReader.stripn() now returning a tuple (ns,tag) as
of 0.1.2.
version-0.1.2 (12-18-07):
This release contains an update to property adds:
* metadata support
* overrides: __getitem__, __setitem__, __contans__
* changes property(reader|writer) to use the property.metadata
to handle namespaces for XML documents.
* fixes setup.py requires.
version-0.1.1 (12-17-07):
This release marks the first release in fedora hosted.