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
« 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
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,)
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
24 return current_context
27def set_var(name, value, context):
28 """
29 Set a variable in a dict context
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 """
41 if not isinstance(name, (list, tuple)):
42 name = (name,)
44 current_context = context
45 for i_name, current_name in enumerate(name):
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