OpenSlides/make/parser.py

50 lines
1.3 KiB
Python

from argparse import ArgumentParser
from subprocess import call as _call
parser = ArgumentParser(description='Development scripts for OpenSlides')
subparsers = parser.add_subparsers()
def command(*args, **kwargs):
"""
Decorator to create a argparse command.
The arguments to this decorator are used as arguments for the argparse
command.
"""
class decorator:
def __init__(self, func):
self.parser = subparsers.add_parser(*args, **kwargs)
self.parser.set_defaults(func=func)
self.func = func
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
return decorator
def argument(*args, **kwargs):
"""
Decorator to create arguments for argparse commands.
The arguments to this decorator are used as arguments for the argparse
argument.
Does only work if the decorated function was decorated with the
command-decorator before.
"""
def decorator(func):
func.parser.add_argument(*args, **kwargs)
def wrapper(*func_args, **func_kwargs):
return func(*func_args, **func_kwargs)
return wrapper
return decorator
def call(*args, **kwargs):
"""
Calls a command in a shell.
"""
return _call(shell=True, *args, **kwargs)