Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

inspect.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import inspect
  2. def get_func_args(func):
  3. sig = inspect.signature(func)
  4. return [
  5. arg_name for arg_name, param in sig.parameters.items()
  6. if param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
  7. ]
  8. def get_func_full_args(func):
  9. """
  10. Return a list of (argument name, default value) tuples. If the argument
  11. does not have a default value, omit it in the tuple. Arguments such as
  12. *args and **kwargs are also included.
  13. """
  14. sig = inspect.signature(func)
  15. args = []
  16. for arg_name, param in sig.parameters.items():
  17. name = arg_name
  18. # Ignore 'self'
  19. if name == 'self':
  20. continue
  21. if param.kind == inspect.Parameter.VAR_POSITIONAL:
  22. name = '*' + name
  23. elif param.kind == inspect.Parameter.VAR_KEYWORD:
  24. name = '**' + name
  25. if param.default != inspect.Parameter.empty:
  26. args.append((name, param.default))
  27. else:
  28. args.append((name,))
  29. return args
  30. def func_accepts_kwargs(func):
  31. return any(
  32. p for p in inspect.signature(func).parameters.values()
  33. if p.kind == p.VAR_KEYWORD
  34. )
  35. def func_accepts_var_args(func):
  36. """
  37. Return True if function 'func' accepts positional arguments *args.
  38. """
  39. return any(
  40. p for p in inspect.signature(func).parameters.values()
  41. if p.kind == p.VAR_POSITIONAL
  42. )
  43. def func_has_no_args(func):
  44. args = [
  45. p for p in inspect.signature(func).parameters.values()
  46. if p.kind == p.POSITIONAL_OR_KEYWORD
  47. ]
  48. return len(args) == 1
  49. def func_supports_parameter(func, parameter):
  50. return parameter in inspect.signature(func).parameters