I'm looking for a solution, or at least hints, to this problem. I want to define a context manager in one module:
# a.py def CM: def __enter__(self): return self def __exit__(self, *args): pass Then call it from another module: # b.py import a with a.CM() as spam: x = 1 y = 2 in such a way that the spam context manager can, on exit, see the callers namespace and write to it. E.g. as a toy example (this isn't what I actually want to do!) we might have this: with a.CM() as spam: x = 1 print(x) # prints 2, not 1 I stress that's not the intended functionality, it just demonstrates the requirement. Don't assume that the content manager is going to be called in the global scope. In fact, the most common use I'm expecting is to call it from inside a class: class Aardvark: with a.CM() as spam: x = 1 It's okay if it doesn't work inside a function: def foo(): with a.CM() as spam: x = 1 assert x == 2 since function scopes in CPython are weird. Any suggestions? -- Steve -- https://mail.python.org/mailman/listinfo/python-list