django-orchestra/orchestra/contrib/tasks/management/commands/runfunction.py

33 lines
1.0 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from orchestra.utils.python import import_class
from ... import keep_state, get_id, get_name
class Command(BaseCommand):
help = 'Runs Orchestra method.'
def add_arguments(self, parser):
parser.add_argument('method',
help='Python path to the method to execute.')
parser.add_argument('args', nargs='*',
help='Additional arguments passed to the method.')
def handle(self, *args, **options):
method = import_class(options['method'])
kwargs = {}
arguments = []
for arg in args:
if '=' in args:
name, value = arg.split('=')
if value.isdigit():
value = int(value)
kwargs[name] = value
else:
if arg.isdigit():
arg = int(arg)
arguments.append(arg)
args = arguments
keep_state(method)(get_id(), get_name(method), *args, **kwargs)