Environment stocks contextual variable. by default the environment is stocked in the current Thread
.
The environment can be used whereever in the code.
To get or set variable in environment, you must import the EnvironmentManager
:
from anyblok import EnvironmentManager
Set a variable:
EnvironmentManager.set('my variable name', OneValue)
Get a variable:
EnvironmentManager.get('my variable name', default=OneDefaultValue)
A facility are add in the registry_base
. This class is inherited by all the model.
Get the environment in Model
method or classmethod:
self.Env # or cls.Env
Set a variable:
self.Env.set('my variable name', OneValue)
Get a variable:
self.Env.get('my variable name', default=OneDefaultValue)
If you do not want to stock the environment in the Thread
, you must implement a new type of environment.
This type is a simple class which have theses class methods:
- scoped_function_for_session
- setter
- getter
MyEnvironmentClass:
@classmethod
def scoped_function_for_session(cls):
...
@classmethod
def setter(cls, key, value):
...
@classmethod
def getter(cls, key, default):
...
return value
Declare your class as the Environment class:
EnvironmentManager.define_environment_cls(MyEnvironmentClass)
The classmethod scoped_function_for_session
is passed at SQLAlchemy scoped_session
function see <http://docs.sqlalchemy.org/en/rel_0_9/orm/ contextual.html#contextual-thread-local-sessions>