Spyne respects the “Semantic Versioning” rules outlined in http://semver.org.
This means you can do better than just adding 'spyne' to your list of dependencies. Assuming the current version of spyne is 2.4.8, you can use the following as dependency string:
We have a policy of pushing to pypi as soon as possible, so be sure to at least use the second option to prevent things from breaking unexpectedly. It’s recommended to use the third option in you production and only upgrade after you’ve tested new Spyne in your staging environment. While we make every effort to keep to our compatibility promise, Spyne is a fast moving open-source project that may break in ways that can’t be cought by our test suite between feature releases.
Spyne project uses -alpha -beta and -rc labels to denote unfinished code. We don’t prefer using separate integers for experimental labels. So for example, instead of having 2.0.0-alpha47, we’ll have 2.2.5-alpha.
These labels apply to the project as a whole. Thus, we won’t tag the whole project as beta because some new feature is not yet well-tested, but we will clearly denote experimental code in its documentation.
Experimental Python 3 Support for all of the Xml-related (non-Html) components.
Add support for altering output protocol by setting ctx.out_protocol.
Add returning ctx.out_string support to null server (The ostr argument).
Add support for XmlData modifier. It lets mapping the data in the xml body to an object field via xsd:simpleContent.
Remove deprecated JsonObject identifier. Just do a gentle s/JsonObject/JsonDocument/g if you’re still using it.
SQLAlchemy: Implement storing arrays of simple types in a table.
SQLAlchemy: Make it work with multiple foreign keys from one table to another.
SQLAlchemy: Implement a hybrid file container that puts file metadata in a json column in database and and file data in file system. Fully supported by all protocols as a binary File.Value instance.
Implement an Xml Schema parser.
Import all model markers as well as the @rpc, @srpc, @mrpc, ServiceBase and Application to the root spyne package.
Implement JsonP protocol.
Implement SpyneJsonRpc 1.0 protocol – it supports request headers.
Sample request: {"ver":1, "body": {"div": [4,2]}, "head": {"id": 1234}} Sample response: {"ver":1, "body": 2}
Sample request: {"ver":1, "body": {"div": {"dividend":4,"divisor":0]}} Sample response: {"ver":1, "fault": {"faultcode": "Server", "faultstring": "Internal Error"}}}
Steal and integrate the experimental WebSocket tranport from Twisted.
Support Django natively using spyne.server.django.DjangoView and spyne.server.django.DjangoServer.
It’s now possible to override the JsonEncoder class JsonDocument uses.
Remove hard-coded utf-8 defaults from almost everywhere.
Remove hard-coded pytz.utc defaults from everywhere. Use spyne.LOCAL_TZ to configure the default time zone.
As a result of the above change, datetime objects deserialized by Spyne are forced to the above time zone during soft validation (nothing should have changed from the user code perspective).
Add default_factory to ModelBase customizer. It’s a callable that produces default values on demand. Suitable to be used with e.g. lambdas that return mutable defaults.
New spyne.util.AttrDict can be used for passing various dynamic configuration data.
child_attrs can now be passed to the ComplexModelBase customizer in order to make object-specific in-place customizations to child types.
Add mapper between Django models and spyne.util.django.DjangoComplexModel types.
Spyne now tracks subclasses and adds them to the interface if they are in the same namespace as their parent.
Simple dictionary protocol’s hier_delim default value is now ‘.’
Fixes support for XmlAttributes with max_occurs>1 referencing the same ‘attribute_of’ element in a ComplexModel subclass.
Renders spyne.model.File as twisted.web.static.File when using HttpRpc over TwistedWebResource. This lets twisted handle Http 1.1-specific functionality like range requests.
Many, many, many bugs fixed.
Rpclib is dead. Long live Spyne!
Add support for JsonObject protocol. This initial version is expremental.
Add support for MessagePackObject and MessagePackRpc protocols. These initial versions are expremental.
Make DateTime string format customizable.
Implement TwistedWebResource that exposes an Application instance as a twisted.web.resource.Resource child.
Remove Deprecated XMLAttribute and XMLAttributeRef. Use XmlAttribute and XmlAttributeRef instead.
Xml Schema: Add support for the <any> tag.
Add a chapter about Validation to the manual. Thanks Alex!
Interface documents are no longer subclasses of InterfaceBase. It’s up to the transport to expose the application using a given interface document standard now. The interface argument to the Application constructor is now ignored.
Html: Added a very simple lxml-based templating scheme: HtmlPage.
Html: Added row-based tables: They show fields in rows. It’s good for showing one object per table.
Html: Added ImageUri support. They render as <img> tags in Html output.
Html: Added support for locales. You can now render field names as human- readable strings.
Add support for async methods, which execute after the primary user code returns. Currently, the only async execution method is via threads.
Xml & friends: Start tags are now in the same namespace as the definitions themselves. Intermediate tags are in the parent’s namespace, just as before.
Xml & friends: Make the ‘bare’ mode work.
spyne.util.xml: get_object_as_xml can also get class suggestion.
spyne.util.xml: get_xml_as_object has argument order swapped: cls, elt -> elt, cls. See ab91a3e2ad4756b71d1a2752e5b0d2af8551e061.
There’s a final argument order change in Application ctor:
in_protocol, out_protocol, interface, name
becomes:
name, in_protocol, out_protocol, interface
Add support for non-chunked encoding to Wsgi transport.
Add support for Html Microformats.
Add function property to MethodContext that is re-initialized from descriptor.function for each new request. Stay away from descriptor.function unless you understand the consequences!..
String and Unicode models are now separate objects with well-defined (de)serialization behaviour.
Argument order change in Application ctor:
interface, in_protocol, out_protocol
becomes:
in_protocol, out_protocol, interface
See here: https://github.com/arskom/spyne/commit/45f5af70aa826640008222bda96299d51c9df980#diff-1
Switched to magic cookie constants instead of strings in protocol logic.
check_validator -> set_validator in ProtocolBase
Started parsing Http headers in HttpRpc protocol.
HttpRpc now properly validates nested value frequencies.
HttpRpc now works with arrays of simple types as well.
Implemented EventManager and replaced hook calls with events.
The rpc decorator now produces static methods. The methods still get an implicit first argument that holds the service contexts. It’s an instance of the MethodContext class, and not the ServiceBase (formerly DefinitionBase) class.
The new srpc decorator doesn’t force the methods to have an implicit first argument.
Fixed fault namespace resolution.
Moved xml constants to rpclib.const.xml_ns
Moved all modules with packagename.base to packagename._base.