[storm] Storm 0.13

On behalf of all Storm developers, I'm glad to announce that the 0.13 release is out and ready for consumption. Download information and documentation may be found at the web site: https://storm.canonical.com/ The following outstanding changes were made: Improvements ------------ - Add group_by/having methods on ResultSet objects, to allow access to the "GROUP BY" and "HAVING" statements. - Change tests/store to keep the connection during the tests to make it faster. - Implemented support for plugging generic "tracers". Statement debugging is now implemented using a tracer, and easily enabled with storm.tracer.debug(True) (storm.database.DEBUG = True is gone). - All properties now accept a "validator" parameter. When used, a function like validate(object, attribute_name, value) should be given, and it may validate or modify the value before it's set in the property. The value assigned to the property is the result of the validator, so the original value should be returned if changing it isn't intended. - Expressions can be passed to Store.find() as well as classes. This makes it possible to request individual columns from a table, computed expressions or aggregates. - Objects will be flushed in the order they become dirty by default. This means that generally the order in which Python operations are performed will be used to define the order in which flushes are done, which is generally the most expected. - The cextensions module was fixed, optimized, and improved. It's now built by default, but to actually enable it the environment variable STORM_CEXTENSIONS=1 must be defined at runtime. The module will likely be enabled by default on a future release. - ClassAlias will now cache all explicitly named aliases, to prevent the cost of rebuilding them. - Result sets and reference sets now have a __contains__() method. While code like "item in set" was previously possible, it involved iterating over the result set, which is expensive for large databases. - The storm.zope.zstorm code can now be used with only the zope.interface and transaction packages installed. This makes it easier to reuse the per-thread store management and global transaction handling from other web frameworks. - Improve handling of AUTO INCREMENT columns in the MySQL backend to remove an unnecessary query when adding objects to a store. Bug fixes --------- - Make is_in returns False instead of NULL on an empty result set. - ZStorm now keeps strong references to named stores. Previously it only kept weak ones, so stores were recreated more often than necessary. - References now won't flush the store or query the database when the foreign key is None. - When a reference is set to an object that wasn't yet inserted in the database, the foreign key is immediately unset instead of keeping the old value up to the flushing. - Setting a reference to None works even if the previously referenced object isn't in memory. - When setting a reference, flush ordering is only enforced if the key is dirty. This allows a number of changes that would previously raise OrderLoopError. - If the remote object in a back reference is removed, the reference will now be broken. - Fixed a race condition when two threads try to initialize the ClassInfo for a given class at the same time. -- Gustavo Niemeyer http://niemeyer.net