Examples¶
Here are some examples to get you started on usage of Altered States:
I/O redirection¶
>>> import sys
>>> from altered import state, py23compat
>>> buf = py23compat.strio()
>>> with state(sys, stdout=buf):
... print('foo')
>>> buf.getvalue()
'foo\n'
Faking an import¶
>>> import sys
>>> from altered import state, Expando
>>> with state(sys.modules, fakey=Expando(foo='bar') ):
... import fakey
... print(fakey.foo)
bar
In-place patching¶
Module scope¶
>>> @state(globals(), injected='foo')
... def fn():
... return injected
>>> fn()
'foo'
Local scope¶
>>> from altered import state, E
>>> with state(vars(), injected='foo'):
... print(injected)
foo
Deny the existance of a module¶
>>> import sys
>>> from altered import state
>>> with state(sys.modules, shutil=None):
... import shutil # doctest: +SKIP
Traceback (most recent call last):
...
ModuleNotFoundError: import of 'shutil' halted; None in sys.modules
>>> import shutil
Nested structure¶
>>> from altered import state, Expando
>>> ctx = Expando()
>>> idx = 0
>>> users = [Expando(name='Foo', get_token=lambda: 'xyz')]
>>> @state(ctx, users=users)
... def token(idx):
... return ctx.users[idx].get_token()
>>> token(0)
'xyz'