+++ /dev/null
-import ast
-
-def extract_decorators(fn_ast: ast.FunctionDef, fname = None, only_name=False):
- decors = fn_ast.decorator_list
- results = []
- for decor in decors:
- _args = []
- _kwargs = []
- if isinstance(decor, ast.Name):
- name = decor.id
- elif isinstance(decor, ast.Call):
- if not isinstance(decor.func, ast.Name):
- continue
- name = decor.func.id
- _args = decor.args
- _kwargs = decor.keywords
- else:
- continue
-
- if fname and name != fname:
- continue
-
- if only_name:
- results.append(name)
- continue
-
- unpacked = []
- kwargs = {}
- for arg in _args:
- if isinstance(arg, ast.Constant):
- unpacked.append(arg.value)
-
- for kwarg in _kwargs:
- if isinstance(kwarg.value, ast.Constant):
- kwargs[kwarg.arg] = kwarg.value.value
-
- results.append((name, unpacked, kwargs))
-
- return results
-
-def to_displayable(name):
- l = name.strip().split('_')
- for i, s in enumerate(l):
- l[i] = str.upper(s[0]) + s[1:]
- return " ".join(l)
-
-def is_primitive(val):
- return val in [int, str, bool]
-
-def is_basic(val):
- basic = [int, str, bool]
- return (
- val in basic or
- any([isinstance(val, x) for x in basic])
- )
\ No newline at end of file