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

1"""Expression value. 

2 

3This value is computed by evaluating a python expression. 

4 

5The following variables are provided to the expression: 

6 

7- ``app`` - the Application object 

8- ``user`` - current user 

9- ``feature`` - feature this value is evaluated for 

10- ``mc`` - ``ModelContext`` object 

11 

12The following modules are available: 

13 

14- ``date`` - `gws.lib.datetimex` module 

15 

16""" 

17 

18import gws 

19import gws.base.model.value 

20import gws.lib.datetimex 

21 

22gws.ext.new.modelValue('expression') 

23 

24 

25class Config(gws.base.model.value.Config): 

26 """Expression-based value. (added in 8.1)""" 

27 text: str 

28 

29 

30class Object(gws.base.model.value.Object): 

31 text: str 

32 

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 

39 

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 } 

48 

49 try: 

50 return eval(self.text, context) 

51 except Exception as exc: 

52 gws.log.error(f'failed to compute expression: {exc!r}')