2022-11-09 21:29:33 -08:00
|
|
|
from typing import List, Type, cast
|
|
|
|
|
|
|
|
from asgiref.sync import async_to_sync
|
|
|
|
from django.apps import apps
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
|
|
|
|
from stator.models import StatorModel
|
|
|
|
from stator.runner import StatorRunner
|
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
help = "Runs a Stator runner for a short period"
|
|
|
|
|
|
|
|
def add_arguments(self, parser):
|
2022-11-13 17:42:47 -08:00
|
|
|
parser.add_argument(
|
|
|
|
"--concurrency",
|
|
|
|
"-c",
|
|
|
|
type=int,
|
|
|
|
default=30,
|
|
|
|
help="How many tasks to run at once",
|
|
|
|
)
|
2022-11-09 21:29:33 -08:00
|
|
|
parser.add_argument("model_labels", nargs="*", type=str)
|
|
|
|
|
2022-11-13 17:42:47 -08:00
|
|
|
def handle(self, model_labels: List[str], concurrency: int, *args, **options):
|
2022-11-09 21:29:33 -08:00
|
|
|
# Resolve the models list into names
|
|
|
|
models = cast(
|
|
|
|
List[Type[StatorModel]],
|
|
|
|
[apps.get_model(label) for label in model_labels],
|
|
|
|
)
|
|
|
|
if not models:
|
|
|
|
models = StatorModel.subclasses
|
|
|
|
print("Running for models: " + " ".join(m._meta.label_lower for m in models))
|
|
|
|
# Run a runner
|
2022-11-13 17:42:47 -08:00
|
|
|
runner = StatorRunner(models, concurrency=concurrency)
|
2022-11-09 21:29:33 -08:00
|
|
|
async_to_sync(runner.run)()
|