forked from CGM_Public/pretix_original
* Install django-scopes * Fix tests.api * Update tasks and cronjobs * Fix remaining tests * Remove unused import * Fix tests after rebase * Disable scopes for get_Events_with_any_permission * Disable scopes for a management command
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from datetime import timedelta
|
|
|
|
from django.conf import settings
|
|
from django.db.models import Max, Q
|
|
from django.dispatch import receiver
|
|
from django.utils.timezone import now
|
|
from django_scopes import scopes_disabled
|
|
|
|
from pretix.base.models import Event, LogEntry
|
|
from pretix.celery_app import app
|
|
|
|
from ..signals import periodic_task
|
|
|
|
|
|
@receiver(signal=periodic_task)
|
|
def build_all_quota_caches(sender, **kwargs):
|
|
refresh_quota_caches.apply_async()
|
|
|
|
|
|
@app.task
|
|
@scopes_disabled()
|
|
def refresh_quota_caches():
|
|
# Active events
|
|
active = LogEntry.objects.using(settings.DATABASE_REPLICA).filter(
|
|
datetime__gt=now() - timedelta(days=7)
|
|
).order_by().values('event').annotate(
|
|
last_activity=Max('datetime')
|
|
)
|
|
for a in active:
|
|
try:
|
|
e = Event.objects.using(settings.DATABASE_REPLICA).get(pk=a['event'])
|
|
except Event.DoesNotExist:
|
|
continue
|
|
quotas = e.quotas.filter(
|
|
Q(cached_availability_time__isnull=True) |
|
|
Q(cached_availability_time__lt=a['last_activity']) |
|
|
Q(cached_availability_time__lt=now() - timedelta(hours=2))
|
|
).filter(
|
|
Q(subevent__isnull=True) |
|
|
Q(subevent__date_to__isnull=False, subevent__date_to__gte=now() - timedelta(days=14)) |
|
|
Q(subevent__date_from__gte=now() - timedelta(days=14))
|
|
)
|
|
for q in quotas:
|
|
q.availability()
|