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

Reply via email to