Chris Withers ch...@simplistix.co.uk wrote:
Hi All,
I used to do this:
import transaction
with transaction:
... print 'hello'
...
Traceback (most recent call last):
File console, line 1, in module
AttributeError: __exit__
When did that stop working and what should I now do instead?
cheers,
Chris
You can use pure hackery to work around this:
- t.py -
def __enter__(*args):
print 'enter', args
def __exit__(*args):
print 'exit', args
def fixup():
import sys, types
self = sys.modules[__name__]
mymod = type(__name__, (types.ModuleType,), globals())
sys.modules[__name__] = mymod(__name__)
fixup()
-- t1.py ---
#!python2.7
import t
with t:
print transaction
and the output is:
C:\Tempt1.py
enter (module 't' (built-in),)
transaction
exit (module 't' (built-in), None, None, None)
This is hackery though, and watch out for globals as the globals() dict
known to the functions in t.py is no longer the same dict visible to
modules that import it so changes to one won't be visible in the other
and any functions in the module will behave like methods (so you have to
give them a 'self' parameter).
Much better just to change the code to define an object and import that
from the module.
___
For more information about ZODB, see http://zodb.org/
ZODB-Dev mailing list - ZODB-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zodb-dev