Chris Withers <> 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:
----- -----
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__)

------ ---
import t
with t:
    print "transaction"

and the output is:

enter (<module 't' (built-in)>,)
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 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.

Zope-Dev maillist  -
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to