Storm-legacy

Latest version: v0.2.0

Safety actively analyzes 629564 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 2

0.14

=================

Improvements
------------
- A new doctest describing the 'Infoheritance' pattern is integrated into
the test suite.
- A new storm.django package has been added to allow use of Storm
within Django applications.
- The way Storm interacts with the Zope transaction manager has
changed. Rather than using a synchronizer to join each new
transaction, it now delays joining the transaction until the store
is actually used.
- The Store constructor takes an optional cache keyword argument.
- ResultSets now offer an is_empty() method.

Bug fixes
---------
- Manage better row full of NULL in case of LEFT JOIN, without validating
against object constraints.
- The Reference class now has an __ne__() method, so inequality
checks against a reference now work in find expressions (bug
244768 reported by Stuart Bishop).
- Make ResultSet.count() handles the distinct, limit and offset flags, to
really reflect the length of the current ResultSet.
- The store doesn't iterate on all the alive objects anymore, using instead
events that objects can subscribe to. This improves performance drastically
when lots of objects are in the cache.

0.13

=================

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 it.
- 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.

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.
- Improve handling of AUTO INCREMENT columns in the MySQL backend to
remove an unnecessary query when adding objects to a store.

0.12

=================

Improvements
------------
- The Connection will reconnect automatically when connection
drops are detected and a rollback is performed. As a result,
the Store should handle reconnections in a seamless way in
most circumstances (94986, by James Henstridge). This is
supported in the MySQL and PostgreSQL backends.
- Store.flush() will not load values inserted in the database.
Instead, undefined variables are set to AutoReload, and resolved
once first accessed. This won't be noticeable in normal usage,
but will boost the performance of inserts.
- Support in the postgres backend to use the RETURNING extension of
the INSERT statement to retrieve the primary key on inserts for
object identity mapping (PostgreSQL >= 8.2 only)
- Introduced a cache mechanism that keeps the N last retrieved objects
in memory to optimize cases where the same object is retrieved
often while no strong references are kept elsewhere. Implemented by
Bernd Dorn, from Lovely Systems.
- Improved support for TimeDelta properties on all backends. Many
more formats are accepted now, and some issues were fixed.

Bug fixes
---------
- TimeDelta was added to storm.locals.
- Fixed TimeDelta support in SQLite, MySQL, and PostgreSQL,
and enabled base test for all backends to ensure that it
continues to work.
- Schema names are accepted in __storm_table__ when using
PostgreSQL as the database (e.g. "schema.table"). (146580,
reported by James Mayfield)
- Test runner handles path correctly on Windows, and SQLite
tests won't break (patch by Ali Afshar).
- In the SQLite backend, ensure that we're able to recommit a
transaction after "database is locked" errors. Also make sure
that when this happens the timeout is actually the expected
one (patch by Richard Boulton)
- TransactionFailedError is now imported from the public
place: ZODB.POSException (129715, by James Henstridge).
- TimeDelta was added to storm.locals.
- Tables named with reserved keywords are properly escaped.
- Reserved keywords on column names are properly escaped when
part of an insert or update statement (184849, by Thomas Herve).
- Prevent cached objects from issuing selects to retrieve their
data when find()s were previously made and already brough
their data (174388, reported and fixed by Bernd Dorn).
- Fixed bug which caused an object to be readded to the store
when a reference of an object that had already been removed
was looked up.
- Prevent pathological case which happens when a statement like
"SELECT ... WHERE table.id = currval(...)" is executed in
PostgreSQL. The change is only meaningful on PostgreSQL < 8.2,
as newer versions will use the RETURNING extension instead.
- Specify both of the joining tables explicitly when compiling Proxy,
so that it doesn't break due to incorrect references in the ON clause
when multiple tables are used (reported in 162528 by S3ym0ur and
Hamilton Tran)
- MySQL client charset now defaults to UTF-8 (reported
by Brad Crittenden).

0.11

=================

Improvements
------------
- Added case-insensitive support to the Like expression and
Class.attr.like() constructions.
- ZStorm.get_name() for obtaining the the name of the given store.

Bug fixes
---------
- storm.zope wasn't included on the tarball due to an error in setup.py.
- Binary strings are now properly quoted with the E'' formatting if
needed, in the postgres backend.

0.10

=================

Improvements
------------
- Improvements were made to the tutorial.
- There is now a setup.py script for installing Storm.
- Count and ClassAlias is now available through the storm.locals
module.
- A new hook, __storm_pre_flush__, can be implemented on objects in a
Store. It is called before an object is flushed to the
database.
- Storm can now use the built-in sqlite support in Python 2.5 and
above.
- There is now a storm.properties.Decimal, which allows you to store
Decimal (as opposed to binary) floating point values.
- storm.zope was added, which offers a simple integration mechanism
with the Zope transaction machinery.
- Complex expressions other than simple Columns can now be passed to
the aggregation methods of ResultSet (avg,max,min,sum).
- Backend implementors can now override preset_primary_key on their
Database object to come up with primary key values before an
Insert.
- A large amount of API documentation was added.

Bug fixes
---------
- SQL reserved words are now properly escaped in SQL
statements.
- GROUP BY and ORDER BY statements are now ordered correctly.
- Running the tests with trial now works.
- All backends are now initialized such that their transactions are
truly SERIALIZABLE. Psycopg2 and Pysqlite2 both did not previously
have serializable transactions by default, but this has been fixed.
- A bug in ResultSet.cached which could occasionally cause
inconsistencies in ResultSet.set was fixed.

API Changes
-----------

Most changes are backwards compatible. There were some incompatible
changes which may affect alternative database backends.

- Chars was renamed to RawStr. Chars still exists, but is
deprecated. All raw 8-bit data in your database should be
represented with RawStr.
- compiler handlers have had their arguments reordered.
- The Compile.__call__ method now returns only the Statement.
- Compile.fork was renamed to Compile.create_child.
- Many methods which previously had underscores were renamed to get
rid of the underscores to reflect their status as things which can
be safely touched in subclasses. Documentation was added clarifying
their intended use.

Page 2 of 2

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.