summaryrefslogtreecommitdiffstats
path: root/stator/management/commands
diff options
context:
space:
mode:
Diffstat (limited to 'stator/management/commands')
-rw-r--r--stator/management/commands/__init__.py0
-rw-r--r--stator/management/commands/runstator.py28
2 files changed, 28 insertions, 0 deletions
diff --git a/stator/management/commands/__init__.py b/stator/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/stator/management/commands/__init__.py
diff --git a/stator/management/commands/runstator.py b/stator/management/commands/runstator.py
new file mode 100644
index 0000000..1307fef
--- /dev/null
+++ b/stator/management/commands/runstator.py
@@ -0,0 +1,28 @@
+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):
+ parser.add_argument("model_labels", nargs="*", type=str)
+
+ def handle(self, model_labels: List[str], *args, **options):
+ # 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
+ runner = StatorRunner(models)
+ async_to_sync(runner.run)()