56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
# yourapp/management/commands/seed_celery_beat.py
|
|
import json
|
|
from django.utils import timezone
|
|
from django.core.management.base import BaseCommand
|
|
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
|
|
|
|
class Command(BaseCommand):
|
|
help = "Seeds the database with predefined Celery Beat tasks."
|
|
|
|
def handle(self, *args, **kwargs):
|
|
# # Example 1 — Run every 10 minutes
|
|
# schedule, _ = IntervalSchedule.objects.get_or_create(
|
|
# every=10,
|
|
# period=IntervalSchedule.MINUTES,
|
|
# )
|
|
|
|
# Example 2 — Run each 5 minutes
|
|
crontab_delete_unpayed, _ = CrontabSchedule.objects.get_or_create(
|
|
minute='*/5',
|
|
hour='*',
|
|
day_of_week='*',
|
|
day_of_month='*',
|
|
month_of_year='*',
|
|
timezone=timezone.get_current_timezone_name(),
|
|
)
|
|
|
|
PeriodicTask.objects.get_or_create(
|
|
name='Zrušení nezaplacených rezervací',
|
|
task='booking.tasks.cancel_unpayed_reservations_task',
|
|
crontab=crontab_delete_unpayed,
|
|
args=json.dumps([]), # Optional arguments
|
|
kwargs=json.dumps({"minutes": 30}),
|
|
description="Maže Rezervace podle Objednávky, pokud ta nebyla zaplacena v době 30 minut. Tím se uvolní Prodejní Místa pro nové rezervace.\nJako vstupní argument může být zadán počet minut, podle kterého nezaplacená rezervaace bude stornovana."
|
|
)
|
|
|
|
|
|
crontab_delete_soft, _ = CrontabSchedule.objects.get_or_create(
|
|
minute='0',
|
|
hour='1',
|
|
day_of_week='*',
|
|
day_of_month='1',
|
|
month_of_year='*',
|
|
timezone=timezone.get_current_timezone_name(),
|
|
)
|
|
|
|
PeriodicTask.objects.get_or_create(
|
|
name='Skartace soft-smazaných záznamů',
|
|
task='booking.tasks.hard_delete_soft_deleted_records_task',
|
|
crontab=crontab_delete_soft,
|
|
args=json.dumps([]), # Optional arguments
|
|
kwargs=json.dumps({"years": 10, "days": 0}), # Optional kwargs
|
|
description="Mazání všech záznamů označených jako smazané v databázi.\nJako vstupní argument lze zadat počet let nebo dnů, podle kterého se určí, jak staré záznamy budou trvale odstraněny."
|
|
)
|
|
|
|
self.stdout.write(self.style.SUCCESS("✅ Celery Beat tasks have been seeded."))
|