Storm 0.15

Milestone information

Jamu Kakar
Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
1 Francis J. Lacoste, 1 Gavin Panella, 8 James Henstridge, 1 Jamu Kakar, 1 Michael Hudson-Doyle, 1 Sidnei da Silva, 3 Stuart Bishop, 1 Thomas Herve
No blueprints are targeted to this milestone.
17 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon storm-0.15.tar.bz2 (md5, sig) Storm 0.15 3,031
last downloaded 5 weeks ago
Total downloads: 3,031

Release notes 

The Storm team is proud to announce Storm 0.15!

The new release includes a number of new features:

 * New GenerationalCache object cache
 * New ResultSet.find method and other improvements
 * New Neg and Coalesce expressions
 * Python 2.6 is supported
 * New Ubuntu packages

Read on for more...

New GenerationalCache object cache

A new GenerationalCache is available. It can be used in place of
the default Cache and will likely become the default in the future.
You can use it by passing it as a parameter to Store:

  from storm.locals import Store, create_database
  from storm.cache import GenerationalCache

  uri = "<uri>"
  store = Store(create_database(uri), GenerationalCache())

Also note that the default cache size has been increased from 100
objects to 1000. Please try the new cache and report your results
to mailing list.

New ResultSet.find method and other improvements

The new ResultSet.find method works just like ReferenceSet.find. It
takes a list of expressions and uses them to filter the items in the
original result:

  result = store.find(Foo, == 42)
  result = result.find(Foo.baz > 7)

In addition to the new find, ResultSet.set works with expressions and
ResultSet.remove returns the number of rows that were deleted.

New Neg and Coalesce expressions

The new Neg expression prepends a minus sign to the expression it
wraps, providing unary minus. The new Coalesce expression takes an
arbitrary number of columns and calls the COALESCE function with

Python 2.6 is supported

Python 2.6 is now fully supported with all tests passing. In
addition, Storm's C extension compiles for python 2.4, 2.5 and 2.6.
The PostgreSQL backend now requires pyscopg2 2.0.7 or newer.

New Ubuntu packages

This release includes official packages for all supported releases
of Ubuntu. They are available in the Storm team's PPA:

You can find the release files at:

You can always get the latest source code from Launchpad:

  bzr branch lp:storm

As always, you can join us in channel #storm on and
on the storm mailing list:


View the full changelog

 - Add support for latest version on Django by not checking arguments
   passed to _cursor.
 - Added support for using Expressions with ResultSet.set().
 - The default cache size was changed from 100 to 1000 objects.
 - Added the new GenerationalCache with a faster implementation of
   the caching API (by Jeroen Vermeulen). This will likely become
   the default implementation in the future, so please test it if
 - A new UUID property type has been added. It depends on the uuid
   module introduced in Python 2.5 to represent values.
 - The StoreDataManager now gets passed a transaction manager from the
   ZStorm utility. This will make it easier to support non-default
   transaction managers in the future.
 - An adapter is now available for converting ISQLObjectResultSet
   objects to IResultSet. This is intended to help in gradual porting
   SQLObject applications to Storm's native API (bug #338184, by Gavin
 - If a disconnection occurs outside of Storm's control, a
   DisconnectionError will still be raised next time the connection is
   used through Storm. This is useful if the connection is being
   shared with another framework like Django (bug #374909).
 - The PostgreSQL backend now requires psycopg2 >= 2.0.7. The work
   around for broken quoting behaviour in older psycopg2 versions has
   been removed. (bug #322206).
 - A new Neg expression is available. It provides unary minus by
   prepending a minus sign to whatever expression is passed to it
   (bug #397654 by Michael Hudson).
 - A new Coalese expressions is available.
 - ResultSets now have a find(). It acts similar to Store.find(), but
   without the first argument (it uses the same classes as the original
   result), and only returns results found in the original result set.
   (bug #338255).
 - Result.rowcount exposes the number of rows affected by the
   query, when known.
 - ResultSet.remove returns the number of rows deleted from the database.
   (bug #180122).

Bug fixes
 - The fix for ResultSet.count() on distinct results from last release
   has been improved, and the fix has been extended to the other
   aggregates. This may change the result of some count(), min(),
   max(), sum() and avg() calls for results using distinct, limit or
 - The test suite now passes when run with Python 2.6.
 - ListVariable now converts its elements to database representation
   correctly (bug #136806 reported by Marc Tardif).
 - compile_python now works for values that don't produce valid Python
   expressions with repr().
 - The C extension should now build under Windows.

0 blueprints and 17 bugs targeted

Bug report Importance Assignee Status
217644 #217644 ResultSet aggregates do not respect distinct option 3 High James Henstridge  10 Fix Released
268151 #268151 Installation to Win32 is fiddly 3 High James Henstridge  10 Fix Released
374909 #374909 InterfaceError: connection already closed should be converted into DisconnectionError 3 High James Henstridge  10 Fix Released
180112 #180112 When remove is called on a ResultSet it should return the number of items removed 4 Medium Stuart Bishop  10 Fix Released
322206 #322206 PostgreSQL string quoting type detection spams error logs 4 Medium Stuart Bishop  10 Fix Released
328603 #328603 'Expr' is not supported as right operand on 'ResultSet.set()' 4 Medium Sidnei da Silva  10 Fix Released
334084 #334084 Retrieving a List property multiple times causes needless updates 4 Medium Thomas Herve  10 Fix Released
349482 #349482 compile_python_variable assumes that repr() of variable's value is a valid Python expression 4 Medium James Henstridge  10 Fix Released
397654 #397654 storm.expr.Comparable should support unary '-' 4 Medium Michael Hudson-Doyle  10 Fix Released
392011 #392011 zstorm.get never returns None, disagreeing with its docstring 5 Low Stuart Bishop  10 Fix Released
403796 #403796 A Coalesce expression should be included in Storm 5 Low Jamu Kakar  10 Fix Released
136806 #136806 List(type=Enum(...)) not supported 1 Undecided James Henstridge  10 Fix Released
310404 #310404 Storm should support a UUID column type 1 Undecided James Henstridge  10 Fix Released
310520 #310520 Storm 0.13 test failure with Python 2.6 1 Undecided James Henstridge  10 Fix Released
338184 #338184 No clean way to get the underlying Storm ResultSet from an SQLObjectResultSet 1 Undecided Gavin Panella  10 Fix Released
338255 #338255 Add a ResultSet.find() method 1 Undecided James Henstridge  10 Fix Released
360846 #360846 appserver isn't recovering like it should causing too many oopses 1 Undecided Francis J. Lacoste  10 Fix Released
This milestone contains Public information
Everyone can see this information.