Coverage for gws-app/gws/plugin/model_value/expression/__init__.py: 0%
20 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1"""Expression value.
3This value is computed by evaluating a python expression.
5The following variables are provided to the expression:
7- ``app`` - the Application object
8- ``user`` - current user
9- ``feature`` - feature this value is evaluated for
10- ``mc`` - ``ModelContext`` object
12The following modules are available:
14- ``date`` - `gws.lib.datetimex` module
16"""
18import gws
19import gws.base.model.value
20import gws.lib.datetimex
22gws.ext.new.modelValue('expression')
25class Config(gws.base.model.value.Config):
26 """Expression-based value. (added in 8.1)"""
27 text: str
30class Object(gws.base.model.value.Object):
31 text: str
33 def configure(self):
34 self.text = self.cfg('text')
35 try:
36 compile(self.text, 'expression', 'eval')
37 except Exception as exc:
38 raise gws.ConfigurationError(f'invalid expression: {exc!r}') from exc
40 def compute(self, field, feature, mc):
41 context = {
42 'app': self.root.app,
43 'user': mc.user,
44 'feature': feature,
45 'mc': mc,
46 'date': gws.lib.datetimex
47 }
49 try:
50 return eval(self.text, context)
51 except Exception as exc:
52 gws.log.error(f'failed to compute expression: {exc!r}')