I'm writing applications in minimal zope component architecture environment, and I'd like to use storm.zope. To date, this is not possible, but only for cosmetic reasons (likely optional dependencies). I am using zope.component, zope.event, zope.schema, and the newly liberated transaction package from PYPI. I am NOT using ZODB nor zope.app.* packages (thus not zope.security). I've made local changes to work around these limitations. All tests pass for my changes, with some modification to the storm.zope doctest README.txt.
Changes I found necessary: 1. Fallback to importing TransactionFailedError in zstorm.py from transaction if import from ZODB fails. This works with recent (<3mo.) transaction in svn and pypi. This is a second choice, so it should not interfere with previous deployments of earlier ZODB versions. 2. Optionally import zope.security proxy stuff in __init__.py. 3. Make zope.security proxy doctest stuff optional, dependent on whether zope.security can be imported. I plan to create a branch in launchpad for my changes, but I would like some comment/review from the list before I do this (diff pasted inline below). Specifically, my changes to the doctests to deal with possibly optional dependencies and conditional imports needs review/thought. bzr diff output is below my sig... Any comments/ideas appreciated. Thanks, Sean Upton [EMAIL PROTECTED] [EMAIL PROTECTED] bzr diff: === modified file 'storm/zope/__init__.py' --- storm/zope/__init__.py 2007-09-19 15:59:35 +0000 +++ storm/zope/__init__.py 2008-02-12 20:21:40 +0000 @@ -19,7 +19,11 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # from zope.interface import classImplements -from zope.security.checker import NoProxy, BasicTypes, _available_by_default +try: + from zope.security.checker import NoProxy, BasicTypes, _available_by_default + ZOPE_SECURITY = True +except ImportError: + ZOPE_SECURITY = False from storm.info import ObjectInfo from storm.zope.interfaces import ISQLObjectResultSet @@ -30,6 +34,7 @@ # the object info set already). With this, Storm is able to # gracefully handle situations when a proxied object is passed to a # Store. -_available_by_default.append("__storm_object_info__") -BasicTypes[ObjectInfo] = NoProxy +if ZOPE_SECURITY: + _available_by_default.append("__storm_object_info__") + BasicTypes[ObjectInfo] = NoProxy classImplements(storm_sqlobject.SQLObjectResultSet, ISQLObjectResultSet) === modified file 'storm/zope/zstorm.py' --- storm/zope/zstorm.py 2007-11-01 16:21:46 +0000 +++ storm/zope/zstorm.py 2008-02-12 20:29:40 +0000 @@ -32,7 +32,11 @@ import transaction from transaction.interfaces import IDataManager, ISynchronizer -from ZODB.POSException import TransactionFailedError +try: + from ZODB.POSException import TransactionFailedError +except ImportError: + # no ZODB: recent transaction alternately provides TransactionFailedError + from transaction.interfaces import TransactionFailedError # >svn r81268 from storm.zope.interfaces import IZStorm, ZStormError from storm.database import create_database === modified file 'tests/zope/README.txt' --- tests/zope/README.txt 2007-09-19 15:59:35 +0000 +++ tests/zope/README.txt 2008-02-13 20:19:05 +0000 @@ -181,14 +181,24 @@ on Storm-managed objects. >>> from storm.info import get_obj_info - >>> from zope.security.checker import ProxyFactory + >>> try: + ... from zope.security.checker import ProxyFactory + ... ZOPE_SECURITY=True + ... except ImportError: + ... ZOPE_SECURITY=False #tests can pass in a minimal zope environment + ... >>> from pprint import pprint >>> person = store.find(Person).one() >>> get_obj_info(person) {'store': <...Store object at ...>, 'primary_vars': ...} - >>> get_obj_info(ProxyFactory(person)) - {'store': <...Store object at ...>, 'primary_vars': ...} + >>> if ZOPE_SECURITY: + ... value = get_obj_info(ProxyFactory(person)) + ... ## get_obj_info() return value equivalent through security proxies: + ... assert type(value['store']) == type(get_obj_info(person)['store']) + ... assert value['store'] == get_obj_info(person)['store'] + ... assert value['primary_vars'] == get_obj_info(person)['primary_vars'] + >>> # vim:ts=4:sw=4:et -- storm mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/storm
