Coverage for lasso/utils/language.py: 0%

21 statements  

« prev     ^ index     » next       coverage.py v7.2.4, created at 2023-04-28 18:42 +0100

1def get_var(name, context, default=None): 

2 """Get a variable from a dict context 

3 

4 Parameters 

5 ---------- 

6 name : str or list(str) 

7 variable name 

8 context : dict 

9 variable dict 

10 default: 

11 default value or function which creates the default 

12 value if failed to find var in context 

13 """ 

14 if not isinstance(name, (list, tuple)): 

15 name = (name,) 

16 

17 current_context = context 

18 for current_name in name: 

19 if current_name in current_context: 

20 current_context = current_context[current_name] 

21 else: 

22 return default() if callable(default) else default 

23 

24 return current_context 

25 

26 

27def set_var(name, value, context): 

28 """ 

29 Set a variable in a dict context 

30 

31 Parameters 

32 ---------- 

33 name : str or list(str) 

34 variable name or path as list 

35 value : object 

36 anything to set 

37 context : dict 

38 variable dict 

39 """ 

40 

41 if not isinstance(name, (list, tuple)): 

42 name = (name,) 

43 

44 current_context = context 

45 for i_name, current_name in enumerate(name): 

46 

47 # at last level set var 

48 if i_name == len(name) - 1: 

49 current_context[current_name] = value 

50 # otherwise iterate into next level 

51 else: 

52 if current_name in current_context: 

53 current_context = current_context[current_name] 

54 else: 

55 new_level = {} 

56 current_context[current_name] = new_level 

57 current_context = new_level