Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def _args_length(constructor, global_ns):
- if isinstance(constructor, str):
- ctor_ast = ast.parse(constructor, mode='eval')
- if (
- isinstance(ctor_ast.body, ast.Subscript)
- and isinstance(ctor_ast.body.slice, ast.Index)):
- index = ctor_ast.body.slice.value
- ctor_ast.body = ctor_ast.body.value
- try:
- value = eval(
- compile(ctor_ast, '<annotation>', 'eval'),
- global_ns,
- global_ns)
- except Exception:
- return None
- if value is Ctor:
- if isinstance(index, ast.Tuple):
- return len(index.elts)
- return 1
- try:
- constructor = eval(constructor, global_ns, global_ns)
- except Exception:
- return None
- if issubclass(constructor, Ctor) and constructor is not Ctor:
- return len(constructor.__args__)
- return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement