96e9e2b627fce3f64294704ef77b8195325e6a64
[lunaix-os.git] / lunaix-os / scripts / build-tools / lcfg / utils.py
1 import ast
2
3 def extract_decorators(fn_ast: ast.FunctionDef, fname = None, only_name=False):
4     decors = fn_ast.decorator_list
5     results = []
6     for decor in decors:
7         _args = []
8         _kwargs = []
9         if isinstance(decor, ast.Name):
10             name = decor.id
11         elif isinstance(decor, ast.Call):
12             if not isinstance(decor.func, ast.Name):
13                 continue
14             name = decor.func.id
15             _args = decor.args
16             _kwargs = decor.keywords
17         else:
18             continue
19
20         if fname and name != fname:
21             continue
22
23         if only_name:
24             results.append(name)
25             continue
26         
27         unpacked = []
28         kwargs = {}
29         for arg in _args:
30             if isinstance(arg, ast.Constant):
31                 unpacked.append(arg.value)
32         
33         for kwarg in _kwargs:
34             if isinstance(kwarg.value, ast.Constant):
35                 kwargs[kwarg.arg] = kwarg.value.value
36         
37         results.append((name, unpacked, kwargs))
38
39     return results
40
41 def to_displayable(name):
42     l = name.strip().split('_')
43     for i, s in enumerate(l):
44         l[i] = str.upper(s[0]) + s[1:]
45     return " ".join(l)
46
47 def is_primitive(val):
48     return val in [int, str, bool]
49
50 def is_basic(val):
51     basic = [int, str, bool]
52     return (
53         val in basic or
54         any([isinstance(val, x) for x in basic])
55     )