Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- from functools import wraps
- import inspect
- def argparse_compatible(func):
- """Decorator that enables calling a function with its arguments or using an argparse.Namespace object.
- For example, the function
- @argparse_compatible
- def f(a, b, c):
- return None
- can be called via
- f(a, b, c)
- or via
- parser = argparse.ArgumentParser()
- parser.add_argument("-a")
- parser.add_argument("-b")
- parser.add_argument("-c")
- args = parser.parse_args()
- f(args)
- """
- @wraps(func)
- def wrapper(*args, **kwargs):
- if len(args) == 1 and type(args[0]) == argparse.Namespace:
- expected_args = inspect.signature(func).parameters.keys()
- args = {arg: getattr(args[0], arg) for arg in expected_args if hasattr(args[0], arg)}
- return func(**args)
- else:
- return func(*args, **kwargs)
- return wrapper
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement